From c8f27da2941011c4b5bc9586686893c7e379310c Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Wed, 28 Oct 2015 14:37:46 -0700 Subject: [PATCH] Added support for MongoDB (server side) --- netcon/Intercept.c | 58 ++++++++++------ netcon/Intercept.h | 5 +- netcon/NetconEthernetTap.cpp | 126 +++++++++++++++++++++-------------- netcon/NetconEthernetTap.hpp | 1 + netcon/README.md | 8 ++- netcon/libintercept.so.1.0 | Bin 55752 -> 56400 bytes 6 files changed, 125 insertions(+), 73 deletions(-) diff --git a/netcon/Intercept.c b/netcon/Intercept.c index bbb1d4c07..3a14e5387 100755 --- a/netcon/Intercept.c +++ b/netcon/Intercept.c @@ -170,6 +170,7 @@ void send_command(int rpc_fd, char *cmd) */ int get_retval() { + dwr("get_retval()\n"); if(fdret_sock >= 0) { int retval; int sz = sizeof(char) + sizeof(retval) + sizeof(errno); @@ -186,6 +187,21 @@ int get_retval() return -1; } +/* Check whether the socket is mapped to the service or not. We +need to know if this is a regular AF_LOCAL socket or an end of a socketpair +that the service uses. We don't want to keep state in the intercept, so +we simply ask the service via an RPC */ +int is_mapped_to_service(int sockfd) +{ + dwr("is_mapped_to_service()\n"); + char cmd[BUF_SZ]; + memset(cmd, '\0', BUF_SZ); + cmd[0] = RPC_MAP_REQ; + memcpy(&cmd[1], &sockfd, sizeof(sockfd)); + send_command(fdret_sock, cmd); + return get_retval(); +} + /*------------------------------------------------------------------------------ ---------- Unix-domain socket lazy initializer (for fd-transfers)-------------- @@ -194,6 +210,7 @@ int get_retval() /* Sets up the connection pipes and sockets to the service */ int init_service_connection() { + dwr("init_service_connection()\n"); if(!is_initialized) { struct sockaddr_un addr; int tfd = -1, attempts = 0, conn_err = -1; @@ -309,6 +326,7 @@ void set_up_intercept() /*------------------------------------------------------------------------------ --------------------------------- setsockopt() --------------------------------- ------------------------------------------------------------------------------*/ + /* int socket, int level, int option_name, const void *option_value, socklen_t option_len */ int setsockopt(SETSOCKOPT_SIG) { @@ -332,8 +350,8 @@ int setsockopt(SETSOCKOPT_SIG) /*------------------------------------------------------------------------------ --------------------------------- getsockopt() --------------------------------- ------------------------------------------------------------------------------*/ -/* int sockfd, int level, int optname, void *optval, socklen_t *optlen */ +/* int sockfd, int level, int optname, void *optval, socklen_t *optlen */ int getsockopt(GETSOCKOPT_SIG) { dwr("setsockopt(%d)\n", sockfd); @@ -359,7 +377,6 @@ int getsockopt(GETSOCKOPT_SIG) /* int socket_family, int socket_type, int protocol socket() intercept function */ - int socket(SOCKET_SIG) { dwr("socket()*:\n"); @@ -407,7 +424,6 @@ int socket(SOCKET_SIG) if(socket_family == AF_LOCAL || socket_family == AF_NETLINK || socket_family == AF_UNIX) { - int err = realsocket(socket_family, socket_type, protocol); dwr("realsocket, err = %d\n", err); handle_error("socket", "", err); @@ -554,7 +570,7 @@ int connect(CONNECT_SIG) fd_set *exceptfds, struct timeval *timeout */ int select(SELECT_SIG) { - //dwr("select()*:\n"); + //dwr("select():\n"); return realselect(n, readfds, writefds, exceptfds, timeout); } @@ -592,19 +608,16 @@ int bind(BIND_SIG) /* If local, just use normal syscall */ struct sockaddr_in *connaddr; - connaddr = (struct sockaddr_in *) addr; + connaddr = (struct sockaddr_in *)addr; - if (addr != NULL && (connaddr->sin_family == AF_LOCAL - || connaddr->sin_family == PF_NETLINK + if(connaddr->sin_family == AF_LOCAL || connaddr->sin_family == AF_NETLINK - || connaddr->sin_family == AF_UNIX)) - { - if(realbind == NULL) { - handle_error("bind", "Unresolved symbol [bind]", -1); - exit(-1); - } - return(realbind(sockfd, addr, addrlen)); + || connaddr->sin_family == AF_UNIX) { + int err = realbind(sockfd, addr, addrlen); + dwr("realbind, err = %d\n", err); + return err; } + /* Assemble and send RPC */ char cmd[BUF_SZ]; struct bind_st rpc_st; @@ -767,6 +780,9 @@ int accept(ACCEPT_SIG) int listen(LISTEN_SIG) { dwr("listen(%d):\n", sockfd); + int sock_type; + socklen_t sock_type_len = sizeof(sock_type); + #ifdef CHECKS /* Check that this is a valid fd */ if(fcntl(sockfd, F_GETFD) < 0) { @@ -775,8 +791,6 @@ int listen(LISTEN_SIG) return -1; } /* Check that it is a socket */ - int sock_type; - socklen_t sock_type_len = sizeof(sock_type); if(getsockopt(sockfd, SOL_SOCKET, SO_TYPE, (void *) &sock_type, &sock_type_len) < 0) { errno = ENOTSOCK; handle_error("listen", "ENOTSOCK", -1); @@ -794,6 +808,13 @@ int listen(LISTEN_SIG) if(sockfd == STDIN_FILENO || sockfd == STDOUT_FILENO || sockfd == STDERR_FILENO) return(reallisten(sockfd, backlog)); + if(!is_mapped_to_service(sockfd)) { + // We now know this socket is not one of our socketpairs + int err = reallisten(sockfd, backlog); + dwr("reallisten()=%d\n", err); + return err; + } + /* Assemble and send RPC */ char cmd[BUF_SZ]; memset(cmd, '\0', BUF_SZ); @@ -811,9 +832,6 @@ int listen(LISTEN_SIG) return ERR_OK; } - - - /*------------------------------------------------------------------------------ -------------------------------------- clone()---------------------------------- ------------------------------------------------------------------------------*/ @@ -849,7 +867,7 @@ int poll(POLL_SIG) long syscall(SYSCALL_SIG) { - dwr("syscall():\n"); + //dwr("syscall(%u, ...):\n", number); va_list ap; uintptr_t a,b,c,d,e,f; va_start(ap, number); diff --git a/netcon/Intercept.h b/netcon/Intercept.h index 6f1888a81..71012be38 100755 --- a/netcon/Intercept.h +++ b/netcon/Intercept.h @@ -51,8 +51,9 @@ /* Administration RPC codes */ #define RPC_MAP 20 // Give the service the value we "see" for the new buffer fd -#define RPC_RETVAL 21 // not RPC per se, but something we should codify -#define RPC_KILL_INTERCEPT 22 // Tells the service we need to shut down all connections +#define RPC_MAP_REQ 21 // A call to determine whether an fd is mapped to the service +#define RPC_RETVAL 22 // not RPC per se, but something we should codify +#define RPC_KILL_INTERCEPT 23 // Tells the service we need to shut down all connections /* Connection statuses */ #define UNSTARTED 0 diff --git a/netcon/NetconEthernetTap.cpp b/netcon/NetconEthernetTap.cpp index 03274b089..4bb524eb1 100644 --- a/netcon/NetconEthernetTap.cpp +++ b/netcon/NetconEthernetTap.cpp @@ -490,6 +490,10 @@ void NetconEthernetTap::phyOnUnixData(PhySocket *sock,void **uptr,void *data,uns fprintf(stderr, "RPC_MAP\n"); handle_retval(sock, uptr, buf); break; + case RPC_MAP_REQ: + fprintf(stderr, "RPC_MAP_REQ\n"); + handle_map_request(sock, uptr, buf); + break; default: break; } @@ -843,6 +847,29 @@ err_t NetconEthernetTap::nc_connected(void *arg, struct tcp_pcb *tpcb, err_t err ----------------------------- RPC Handler functions ---------------------------- ------------------------------------------------------------------------------*/ +/* + Responds to a request from the [intercept] to determine whether a local socket is + mapped to this service. In other words, how do the intercept's overridden calls + tell the difference between regular AF_LOCAL sockets and one of our socketpairs + that is used to communicate over the network? +*/ +void NetconEthernetTap::handle_map_request(PhySocket *sock, void **uptr, unsigned char* buf) +{ + TcpConnection *conn = (TcpConnection*)*uptr; + int req_fd; + memcpy(&req_fd, &buf[1], sizeof(req_fd)); + for(size_t i=0; irpcSock == conn->rpcSock && tcp_connections[i]->perceived_fd == req_fd){ + send_return_value(conn, 1, ERR_OK); // True + fprintf(stderr, " handle_map_request(their=%d): MAPPED (to %d)\n", req_fd, + _phy.getDescriptor(tcp_connections[i]->dataSock)); + return; + } + } + send_return_value(conn, 0, ERR_OK); // False + fprintf(stderr, " handle_map_request(their=%d): NOT MAPPED\n", req_fd); +} + /** * Handles a return value (client's perceived fd) and completes a mapping * so that we know what connection an RPC call should be associated with. @@ -861,7 +888,7 @@ void NetconEthernetTap::handle_retval(PhySocket *sock, void **uptr, unsigned cha memcpy(&(conn->perceived_fd), &buf[1], sizeof(int)); conn->pending = false; - fprintf(stderr, "handle_retval(): CONN:%x - Mapping [our=%d -> their=%d]\n",conn, + fprintf(stderr, " handle_retval(): CONN:%x - Mapping [our=%d -> their=%d]\n",conn, _phy.getDescriptor(conn->dataSock), conn->perceived_fd); /* Check for pre-existing connection for this socket --- @@ -878,11 +905,11 @@ void NetconEthernetTap::handle_retval(PhySocket *sock, void **uptr, unsigned cha if(tcp_connections[i]->perceived_fd == conn->perceived_fd) { int n; if((n = send(_phy.getDescriptor(tcp_connections[i]->dataSock), "z", 1, MSG_NOSIGNAL)) < 0) { - fprintf(stderr, "handle_retval(): CONN:%x - Socket (%d) already mapped (originally CONN:%x)\n", conn, tcp_connections[i]->perceived_fd, tcp_connections[i]); + fprintf(stderr, " handle_retval(): CONN:%x - Socket (%d) already mapped (originally CONN:%x)\n", conn, tcp_connections[i]->perceived_fd, tcp_connections[i]); closeConnection(tcp_connections[i]); } else { - fprintf(stderr, "handle_retval(): CONN:%x - This socket is mapped to two different pipes (?). Exiting.\n", conn); + fprintf(stderr, " handle_retval(): CONN:%x - This socket is mapped to two different pipes (?). Exiting.\n", conn); exit(0); } } @@ -943,8 +970,9 @@ void NetconEthernetTap::handle_bind(PhySocket *sock, void **uptr, struct bind_st d[1] = (ip >> 8) & 0xFF; d[2] = (ip >> 16) & 0xFF; d[3] = (ip >> 24) & 0xFF; - fprintf(stderr, "handle_bind(): error binding to %d.%d.%d.%d : %d\n", d[0],d[1],d[2],d[3], conn_port); - fprintf(stderr, "err = %d\n", err); + fprintf(stderr, " handle_bind(): error binding to %d.%d.%d.%d : %d\n", d[0],d[1],d[2],d[3], conn_port); + fprintf(stderr, " handle_bind(): err = %d\n", err); + if(err == ERR_USE) send_return_value(conn, -1, EADDRINUSE); if(err == ERR_MEM) @@ -956,12 +984,12 @@ void NetconEthernetTap::handle_bind(PhySocket *sock, void **uptr, struct bind_st send_return_value(conn, ERR_OK, ERR_OK); // Success } else { - fprintf(stderr, "handle_bind(): PCB (%x) not in CLOSED state. Ignoring BIND request.\n", conn->pcb); + fprintf(stderr, " handle_bind(): PCB (%x) not in CLOSED state. Ignoring BIND request.\n", conn->pcb); send_return_value(conn, -1, EINVAL); } } else { - fprintf(stderr, "handle_bind(): can't locate connection for PCB\n"); + fprintf(stderr, " handle_bind(): can't locate connection for PCB\n"); send_return_value(conn, -1, EBADF); } } @@ -987,48 +1015,47 @@ void NetconEthernetTap::handle_bind(PhySocket *sock, void **uptr, struct bind_st */ void NetconEthernetTap::handle_listen(PhySocket *sock, void **uptr, struct listen_st *listen_rpc) { + fprintf(stderr, " handle_listen(their=%d):\n", listen_rpc->sockfd); TcpConnection *conn = getConnectionByTheirFD(sock, listen_rpc->sockfd); - if(conn) { - if(conn->pcb->state == LISTEN) { - fprintf(stderr, "handle_listen(): PCB is already in listening state.\n"); - return; - } - struct tcp_pcb* listening_pcb; + if(!conn){ + fprintf(stderr, " handle_listen(): unable to locate connection object\n"); + // ? send_return_value(conn, -1, EBADF); + return; + } + fprintf(stderr, " handle_listen(our=%d -> their=%d)\n", _phy.getDescriptor(conn->dataSock), conn->perceived_fd); + + if(conn->pcb->state == LISTEN) { + fprintf(stderr, " handle_listen(): PCB is already in listening state.\n"); + return; + } + struct tcp_pcb* listening_pcb; #ifdef TCP_LISTEN_BACKLOG - listening_pcb = lwipstack->tcp_listen_with_backlog(conn->pcb, listen_rpc->backlog); + listening_pcb = lwipstack->tcp_listen_with_backlog(conn->pcb, listen_rpc->backlog); #else - listening_pcb = lwipstack->tcp_listen(conn->pcb); + listening_pcb = lwipstack->tcp_listen(conn->pcb); #endif - if(listening_pcb != NULL) { - conn->pcb = listening_pcb; - lwipstack->tcp_accept(listening_pcb, nc_accept); - lwipstack->tcp_arg(listening_pcb, new Larg(this, conn)); - /* we need to wait for the client to send us the fd allocated on their end - for this listening socket */ - fcntl(_phy.getDescriptor(conn->dataSock), F_SETFL, O_NONBLOCK); - conn->listening = true; - conn->pending = true; - send_return_value(conn, ERR_OK, ERR_OK); - } - else { - /* - fprintf(stderr, "handle_listen(): unable to allocate memory for new listening PCB\n"); - // FIXME: This does not have an equivalent errno value - // lwip will reclaim space with a tcp_listen call since a PCB in a LISTEN - // state takes up less space. If something goes wrong during the creation of a - // new listening socket we should return an error that implies we can't use this - // socket, even if the reason isn't describing what really happened internally. - // See: http://lwip.wikia.com/wiki/Raw/TCP - send_return_value(conn, -1, EBADF); - */ - } + if(listening_pcb != NULL) { + conn->pcb = listening_pcb; + lwipstack->tcp_accept(listening_pcb, nc_accept); + lwipstack->tcp_arg(listening_pcb, new Larg(this, conn)); + /* we need to wait for the client to send us the fd allocated on their end + for this listening socket */ + fcntl(_phy.getDescriptor(conn->dataSock), F_SETFL, O_NONBLOCK); + conn->listening = true; + conn->pending = true; + send_return_value(conn, ERR_OK, ERR_OK); } else { /* - // We can't find a connection mapped to the socket fd provided - fprintf(stderr, "handle_listen(): can't locate connection for PCB\n"); + fprintf(stderr, "handle_listen(): unable to allocate memory for new listening PCB\n"); + // FIXME: This does not have an equivalent errno value + // lwip will reclaim space with a tcp_listen call since a PCB in a LISTEN + // state takes up less space. If something goes wrong during the creation of a + // new listening socket we should return an error that implies we can't use this + // socket, even if the reason isn't describing what really happened internally. + // See: http://lwip.wikia.com/wiki/Raw/TCP send_return_value(conn, -1, EBADF); */ } @@ -1067,7 +1094,7 @@ void NetconEthernetTap::handle_socket(PhySocket *sock, void **uptr, struct socke int rpc_fd = _phy.getDescriptor(sock); struct tcp_pcb *newpcb = lwipstack->tcp_new(); - fprintf(stderr, "handle_socket(): pcb=%x, (state == CLOSED) = %d\n", newpcb, (newpcb->state==CLOSED)); + fprintf(stderr, " handle_socket(): pcb=%x\n", newpcb); if(newpcb != NULL) { ZT_PHY_SOCKFD_TYPE fds[2]; @@ -1077,7 +1104,7 @@ void NetconEthernetTap::handle_socket(PhySocket *sock, void **uptr, struct socke return; } } - fprintf(stderr, "socketpair = {%d, %d}\n", fds[0], fds[1]); + fprintf(stderr, " handle_socket(): socketpair = {%d, %d}\n", fds[0], fds[1]); TcpConnection *new_conn = new TcpConnection(); new_conn->dataSock = _phy.wrapSocket(fds[0], new_conn); *uptr = new_conn; @@ -1092,7 +1119,7 @@ void NetconEthernetTap::handle_socket(PhySocket *sock, void **uptr, struct socke } else { sock_fd_write(rpc_fd, -1); // Send a bad fd, to signal error - fprintf(stderr, "handle_socket(): Memory not available for new PCB\n"); + fprintf(stderr, " handle_socket(): Memory not available for new PCB\n"); send_return_value(rpc_fd, -1, ENOMEM); } } @@ -1194,14 +1221,14 @@ void NetconEthernetTap::handle_connect(PhySocket *sock, void **uptr, struct conn // that's it! // - Most instances of a retval for a connect() should happen // in the nc_connect() and nc_err() callbacks! - fprintf(stderr, "handle_connect(): unable to connect\n"); + fprintf(stderr, " handle_connect(): unable to connect\n"); send_return_value(conn, -1, EAGAIN); } // Everything seems to be ok, but we don't have enough info to retval conn->pending=true; } else { - fprintf(stderr, "could not locate PCB based on their fd\n"); + fprintf(stderr, " handle_connect(): could not locate PCB based on their fd\n"); send_return_value(conn, -1, EBADF); } } @@ -1213,12 +1240,12 @@ void NetconEthernetTap::handle_write(TcpConnection *conn) int r; if(!conn) { - fprintf(stderr, "handle_write(): could not locate connection for this fd\n"); + fprintf(stderr, " handle_write(): could not locate connection for this fd\n"); return; } if(conn->idx < max) { if(!conn->pcb) { - fprintf(stderr, "handle_write(): conn->pcb == NULL. Failed to write.\n"); + fprintf(stderr, " handle_write(): conn->pcb == NULL. Failed to write.\n"); return; } int sndbuf = conn->pcb->snd_buf; // How much we are currently allowed to write to the connection @@ -1245,7 +1272,7 @@ void NetconEthernetTap::handle_write(TcpConnection *conn) int err = lwipstack->_tcp_write(conn->pcb, &conn->buf, r, TCP_WRITE_FLAG_COPY); lwipstack->_tcp_output(conn->pcb); if(err != ERR_OK) { - fprintf(stderr, "handle_write(): error while writing to PCB, (err = %d)\n", err); + fprintf(stderr, " handle_write(): error while writing to PCB, (err = %d)\n", err); return; } else { @@ -1258,7 +1285,7 @@ void NetconEthernetTap::handle_write(TcpConnection *conn) } } else { - fprintf(stderr, "handle_write(): LWIP stack full\n"); + fprintf(stderr, " handle_write(): LWIP stack full\n"); return; } } @@ -1266,7 +1293,6 @@ void NetconEthernetTap::handle_write(TcpConnection *conn) } } - } // namespace ZeroTier #endif // ZT_ENABLE_NETCON diff --git a/netcon/NetconEthernetTap.hpp b/netcon/NetconEthernetTap.hpp index f10761db7..159e40427 100644 --- a/netcon/NetconEthernetTap.hpp +++ b/netcon/NetconEthernetTap.hpp @@ -106,6 +106,7 @@ private: // RPC handlers (from NetconIntercept) void handle_bind(PhySocket *sock, void **uptr, struct bind_st *bind_rpc); void handle_listen(PhySocket *sock, void **uptr, struct listen_st *listen_rpc); + void handle_map_request(PhySocket *sock, void **uptr, unsigned char* buf); void handle_retval(PhySocket *sock, void **uptr, unsigned char* buf); void handle_socket(PhySocket *sock, void **uptr, struct socket_st* socket_rpc); void handle_connect(PhySocket *sock, void **uptr, struct connect_st* connect_rpc); diff --git a/netcon/README.md b/netcon/README.md index 510466f28..3e454c33c 100644 --- a/netcon/README.md +++ b/netcon/README.md @@ -108,7 +108,7 @@ Network Containers have been tested with the following: vsftpd [BROKEN as of 20151021] Server sends 500 when 220 is expected mysql [BROKEN as of 20151021] postresql [BROKEN as of 20151021] - MongoDB [BROKEN as of 20151021] + MongoDB [ WORKS as of 20151021] Only basic connection tested, no DB operations yet Redis-server [ WORKS as of 20151027] pure-ftpd [BROKEN as of 20151021] Socket operation on non-socket @@ -125,6 +125,12 @@ To Test: ### Extended Version Notes +20151028 Added MongoDB support: + + - Added logic (RPC_MAP_REQ) to check whether a given AF_LOCAL socket is mapped to anything + inside the service instance. + + 20151027 Added Redis-server support: - Added extra logic to detect socket re-issuing and consequent service-side double mapping. diff --git a/netcon/libintercept.so.1.0 b/netcon/libintercept.so.1.0 index b5caf7254debeb5fc5853755b3675f4bd32b4968..acac7b3b89349bdc41a051feacd845000fda221a 100755 GIT binary patch literal 56400 zcmeFad3;sX)i-|5JvYg@Nk~GN!hC^%fO3;C3kDMia03A@NuUXXmyiJ>nVQ@n-~csX zxgrXVXn6#!wOX~cS}kg=R8i5k7H4a1OV!#Nhl)7VIq&zohjVYHr_b|#e(&e=`=bZ$ z*=w!6*4k^Yz4mZU_Bm(!{GtUe(=_y98FLI`C(|V*Ph|vNQUH=XW2TXSv)33dc;lj3 z-JqjWB}u0SqF%kCC1d-DcxcT)Cjm`s^wfjDQC}-bbF3h06INM#W-|oOVpqm z{*J5su4$&?(&un|LKvY7>iYTz4^ta190e6RY%mV zKj?JZ!lf&W^}Ei>f8)sN?JGWpyz=<>ANkAtQ;)oL z^+k6-@SD5ey7AhJ{(7on;^()Y_1WC{FTcOrdt_Lal{4()*`5nq)8GH`tvBvmv~l=b ze_y@o!uJN`ZB43c88xTyt#`-&qJ7mzx1>M*@NX(_?|V<%y%b zj3FoUy&^+p8?OMPexsitW4@5bG}x5}{-%7dqR8Y8B-G=bE9qJfi>ID6rDuU;H}aJp zzv5S9(dWp&PVsX*;;~EF9~doh#y5}s!v227#(XbPF(xv_kSP7bK^4bV#qSg4_UmT< zYNbDInB;$4CdMX3-!WVgZiGCKZ2V~FVP$8%pc=+$ML#u25;iOP5k=2a^z#&*^Bnb@ zIztkkQ}k_$|D+m(I3Dr1T=9E3pyPNGIFFn06M6;+)L5eE9K%UZQ+`-2vyD`x=cJ0C ziE6&C)O6*Cs}(;7V^Lpa|2#$CrufrTyj`d0#>R?(@8dwXo=>+A5=}4g^>k3br-{Ya2q<&6U+np)Lw&2BbH@?oCEhYpBJj z+*nN;3zR8$IOHI)saI%YT5)z(83xq>xSsCh+Imy%=&ovd$d z5JahKs?oBwrLv-~PAI8HeWg>3re+u)tf;DLHrCg|)pfNkq3Q;Z8#gpm)K?oVp(=RG zsA;aQHtHeYSPAE%)(xS?CR7b7L$!jfxkdmrsAi?Hxkl)%F=}e+T3a?cmS50Z8-h-> zZGFoIqq(|rGt;`-^;LDgmPX%Xf|Z1(6KW0-%ps^6hIqCStgfmERUj(Xx3mOXLKV#+ zkYM}5qQbfJf|GrdebYo-xs3naKg;1ajsN?9ESl2aBG$Ri^WxV!q}IdL+5$BmFyAA_ z7Gyg4E+@b1__T=&FdTZ_4AsV1K~X2QE+$>pUD6}xdIi9FKn(!`KNUk)Ly4e&9z!1? zDDsq%=M@0Qb*=;T;ftkOG zJy{cx9*Cj$iJ>2kp>r%uerHM@Qy*!Kc$Up(flb!Ds z0AoZ=Q36lP_llHsHPs0`Bi}1h(gzDjp1k>90gygKK=L#`-zxypM+r!tvh%$HAbqHS zm8=2jHvIEE1XNjA{PYC>R;x6Jx1^zH`cJ=mq z1%4lKcJcPZ0{;ndcJ20k0>70wyL9^wf!{=&X16y9{A%Lt!tLt>emQY=-S&XMFD0Hx zJWt@;h_g$!XA8WUIJ;K6SK#LpXP0VE6Zm@KDZ~wduOiMa)PCw)5XKf0XV+;zDey(a z*=5>K2z)Mac9r&{0-r^kU8Mb9flnsRF3^5h;1h{6^xO9dd^B-}YWog>4d8`l2?;$Gq>1^z5?hIso4fj>^1A>4jc;13gLD7N1#@cW2!Dr!G0@ShOp zRMx&v;I|Uz>acx>z;7ac2Jt3=Urn4L+`dlWmlK~rJOJF^_P)I*_h!%{`7qzVC-?MO zUc=vZ%x*V<@5?#bUI@0D)R8+OVi+q*{NZoHFH&sR3tL8!G5oqe{Lj^E{d;pigqtDY zN3}J-Km3tD{4Me>L=)v4jhuzN_nxWo>HLz1z0m3pe;iqlVs;(f62JNh_M6mSPk~U4 z6#5q|iMWveG)*v8KM^AjuJ4IrVUjoUdvNZ_{lg@$v8!XtY=8KjhZ*Vqr`>d*@l-*k zZA7+;f-V^zx%X=@ugNs`lxD_-)55QzGG6FT9a#X8y}2`m+Q>GjJOZmb-ur9nNTVeD z6|!bUOI$5VT#FJ>nl8xyG)uw}hI%4m>L36?*x}9`5V;g)z#)r~$bv<=`K2qM|1{#a zBODZ(HbL4l6a`{+Yif zkn=)e`0bkTLbpF$lo~kgJ`1vp^CGsb1J7z$)Qz4aw^tCUr}ay&NIXr zj__JR=0pulCh!>5k~~Y3=W1Y)28uPXN(1W&)Ij<9@PD1rF(7~lYx}$-{AB2YoIkyH zhNySj6DI0?JNkLf(ePg)aj3K?E%F{3sqL!~p*asXKuuBjo$!Yp1Exa*V&z$g`~V{1 zf5MS3fbr?Lm(KKJr3fqAjx~iNtJmhQK{&BJfs0lYB*^^)p%w8#Cj4P!A(GUQJ0J$W z_wC3(zU=6j9rrz`O5HgI+9I!j;NLr~4Kn_xpJp(GNi$PLZi*ml2h@4Ag z&WD|H9%4?F%sJU9=LY61k~z;sb0RZH3dc1e8-BInVfL4^F=&UMLQD9O-F_VXf^_=x z$8_JG+ympiM$TuEvyr{)XzMgku9TEBBqd2GbNb(M=p&_l{1-9f$=+NK=#l=Qz4vI% zKB0dGklAt1Pw*O{Ghv9I3?F|ky4MvlX+;u_`z1IciC_-L-3E{y4A$4+aK@wjmH8`j zj-nTazbOfSEJm(35MlY@mkPtbpC5iIvI%u*`zk(^)b^Fx+Bd)LYfo#^>YSqpwEVUC z=RMK(jcb1RR8hFSApBgXH;mzSTBj;#g_;*EN3@nj< zg3v^A{O%Zg8hkP3VY~@{%F;NlnWFy{hF?N~fyfRNlXFyzCE>qD?)w*;Ep;~s8UNm* zOn1>2$?Bhx2R@TET}%BiX$4G*tOIdRh^6F?M+nNv3jJXw&y1LVrpZ z{^1V)gW!++~F9SuKm zN!q`jAc3njGpi!UkoJU31G}fOY&pU*S82GO`1RaVNtj$b8zG`*a-8N!F(ti4{T5F zL=;^V{%2$xRPV_h2F$;=PhTcjwIUFVNH(Q7iv1PXp14m(qXxMj;|wvDO(s#cSX6em z2JO?A7WIz|r1@Cr{PZ+B$wMFMh4h{Qw?G@>?|WEJ!oFW4i9Abt;&wBm?bu8efzEiL zrnQa%dxT_eO$u7%2{G+2XCZs1O_REsksy{YA`yDRuQ{>2gJ#1Ge>;U?;R4ak^H}1VBLg~9$`rh1og#5JiNZOw5i2MxHwm)=41|e1JMaE~&QC<~& z8vaTw7q+qfh)_grWDeDYKZL^DP)u|#tpUb~vVmcSxzy%dnjAZqqIr`=kNy*CPu3=| zrv7riQPcK0f}8UtCe91c*WxCO@?!2hn!0lvh-e=q80TZiesocLM za{j46nRn0h1j`1HX)x%_uh-Ei-{J1hUb- zy+(_TcgmIw?3d9_jEtWp9>g$<{r4bNZ}eHxoObQAs=DrJ0pm+re+GWV6t z2L*Gqz3+9H3&5<_1GrLfme21%PF%HTM_7NS1)a{^0R3#9rM$Vz>)$gI1OHIgqwN@0LLaVP+ddoxi~2q0L)%4sqLMB4L&W^y#~(wmBYiUR_jauB z?m@jC6Dxsu$>)BE82PYZ5qyu5Z&%EEPOeYCftlZX|8p?yJj&tN&lO#OE4nhS=+kW!@{&yEBi9^cR^YMEa}DlSp&WwXw#D zEE2xFC=)eAxJDMkBLCh29^r%Epw_>}HKh^RNv=J^f0W^+hdzPF;UUD%p4pKvAQ1^s zY|m`uy@9;&zVqwAT$g|K?5Uw`--#bPJIm?orK*0OG_YWXx`xccb$Q+3=5ce>s5ZzG# z0dj#*#*~`9Vr5JoaaW(Db)f)>;!1N%2KkViO+O$NJ4TS6BQ%1$2@RCTVKjg)br!0K z$$ZNhFpq{{l-q$sXlT;F76R}6j`4_Ce;`g8Vn>3)V`v2}T(hqPvD)O{^-Su{tEnYC zHItTMH6P*%zcka%dBGq4t+0#=KKV>L_|TP0bm zszcbvP+jG%YHg~k#iosFZzVPl&;o3RSYJ`+tqj4y@z@Cg(u z)>qWkZeta+-9n4logpmhl^>ffyn;=hwf)%T(NLXL)7ZSpt4;KIQTa|~g*Mip-?Y-aG1r7EY%^e zXgx#kL=oFh)Xo>R3q|r7YFA9pTV}fLZ*g|hj2F=@^9j#FzgW7gv}D=5#ZkzZzbruF zia-EF2R7y}Sx{IsA0&~YgH+ThP1LiZp}D%Hv5svn_XT-Z%iOhU?~Zb#GES8)t22JW zL};KwiJwJ3h`tENsE{fS%=7usAj&t|dNlI_#KwZ9%V;m6u_r^6%vwiy!Yr}1M=4>! zbaia8(%mr(iXda5FyQ6>pz4+uIk=4V&lUt=t`oyUCvs?OQ?;Nnt`Pd>P;2%}NcjiNeShodn28}Y@9mBb?$=z0G!H9< zCZwm3e-tSvP2=yNBW*&;IqL+{-ADr%K_f^HWBe5Rr!k#ypJV`O8PXF-d4Dz=GwCU$ zc}Q&wdaxJ^AkD+FbRW`_NRJ}jfos3<7=-V|h5Bx!J8&!SB+@3_v|9%|(>@13(g1E7 zpFryU5_*yH;AF|e+*WLuThh#-$qDv8*mf3Z{A28vw>ml&kRd-M?J`$>N=BPinBw&( zrerKgNy|^MSK`Ww2YHL|I{^OaB!IuoRh*b&&re#LVv9XKbs!%>e!Y{wBqiH5H&G~B zC>2r9wakYPS37*mz*i{P3PAe>e)PTA3pqC>?F!m;ndMLMwz(Ii>@%&|W@3tWUP=aR zn44lRNGbrjK%@DhAlCb9{5HPX(J>OKQIL|h5_You{;2;tw3XO<2)dOGeRhG6V?O^j zxbK~gj`NgUJ#rT&Eyj6C67`lM{{-^qsr*Zzm-IT&Gf*CuY|gO;&`!`#fqyfpsLz$I zxhWZYt%4Nq74H0$@t4KTOUZ7FKR+>L{Jaz|vcQ6Bc5Qo+v1j|>Y;Kn+Z8A6rF?qpUT(-UF@}t`XBn*+@&c^ zRvq0BRnql#Tf*>(J(QVbU_VUK~|8zt8fp!WVmAdn#{P$~tQ!jPF$7qNFX-&yETH zBo`W+jp2~yt8QShJxkFi1L&(_?{l;q@GE~8!`7W$iYZ8P9qOVqpPuVfj6bOq`hNla zUR>8di*}{oRQxOd2VDP(_4lHrDxfi)0ev#sIE%F1)XN)T2XJrX&CYsZcbj{8O2Bn0 zR#G;rqjyo#(%9SuT5l%w^1+qB8yy|@!v97}8hYZQ)T9gS9mcssW>1_V{|L_ZyaIeS z?&Mtu*ocld3sbyJ7;n%KG2Uo{&jHJ?z`q6jVx=GTb2P3OrW|%zqs-3jN#%09`kL|> zGkLXdfY)?|5j6g!Rs;?08HO>E_mIUNb1|M3r0ft(v?M=iksP_4wx^o^9RKmae?0IX z5B$di|M9?oJn$b6{Ko_TI}dQ_$%8u#cxar@q{QO=y5J)eo-Em%=l%4ac>R3JP?fJP z3!;1D=Xga9ukU#1{7=8_Xe5408KN$mjRT57UmKlNfu*}V^1LEd zY{n^-!RtgG`WjI`129unOw;dBinX2lq?q`V8$n$j{$MKX7dy>C$4y~@JLM|;U1d0K z5r};4ccu3Kd7_`2?^@7;G)Y;h(i)X+R_SFby18UtUZuCI^g)$ArP5ba`i@FJQ)zsEw@LVtpHnlHzfAo9N+rj-bRKt?!0ynN3LrpK?t(JrW? zL8jrk3>8iY3PU{H+?}wFbldX;;q{~^dnV$XP(yl}hfg#oY%BuY-}5S*novu4peKmB zC7iz=QW-|#_=Hv5M3!_ISqT@{gP8PP)H2}`K^;J`?R2Y=OtvJ9m_E&d9o9!{-WczEvX`a4N zVt+$8!}DY2eoNTvd4oJ1gvX~8qj1|WiDakTO~e$)%#>9y*>(veFC_&<+irpQQ{IJ* zcAP*0DRopFFOag7muZP@E`hVxrJPBbM6(3Q#*{LanQYSFrj%PiveN_-N;yO;)6ELx zY)LtnG6PM<%Z`-ev|x}qAIPOCU$W2)vmByrDb#5XGi#CTPWd4fj5TShO4c$=mO z>UK@-XSjEQHE9_G$eqFb>5Ry<9m#n=0p|HR3QC?&5b5Pe9>z~7Of}rxK9juoI#BxF z1ubsYuU|$Q>XH5ua5MdLNW0Q^fo!GUh^n~LJ8+ImzY6F0^sNw2>{o*`Dq!><2WF)1 z60~ZcVQg;ucL38;uFHc)&*QK#bha)4x)tWW@;u&NI#KNQFSQU=ZjbG*Hp zIRCUTkbk9(w>J@QBHlzh>Upb8m#V=2%M5?n!lu`ltx&U>Jm8_Q2Q3uQq{nJfH&Tr1#rN*#JRsK-d;p}8FB7$ zjki}34-(%E$$0yG;*B`jX;9ygHvAA^j~{T_NNLt~@TGahTmk-Vqz4-)SFQs8OCh1(JV#oJ!uqP{}} zo=tofSO-iLcpmXZ#AgXSKztSPMFL+({Cwi81l~k^8}ai6zJvHrh;IYr&O;=pj$jMe zRcwaTkv|35GZayiI_h$O=!_!BQzx*^(jP*@80k%rGSlCHuU+XWV0EX@W0<9b1B2Kw zB+2O)A-8Y(VZZ~^xlL+#`sFBfRQhrRz=ZU>;BR00WWZVJ7em|R^c@I>Dd}6GVNLpB z#KL*$PXJz@{y9qAke&}pUAhHrJJZA9-<>`Z8an#l2^iNP?goZZ>qkHm(^6mjKKPRU z0fy9<1vrD%dG!WT`;+mt9|JU!-@%DQ)wz=?&K!X!7|C=C<5A$2VYkDGwAAMr?4B*u z^ZHtVP&5IjlbSKXu>Gi)-FHSD_&w|meb1It)Wxu)?<~S@G&Lm#kSE?I2?H76!D6(U z1W1&+$*>opio?>&&!@7{P>{Y_D*FJ0^fe4cw}<)l%Rdv|;)+Qs6W!O21YJNa5=UCmVgQg_H=j{v!{tnvE#kNS_OK zGyQ#->q=)|v(k5yFMSnkh)X|$+=TQ`K}krz2t1zj*B}(1?uN;B`lHa0n7#@vm6ZMz zIFr*o(9kEHf1^lA-wgv()6a!zY3UX4Uz*|OCcFM^m#{Lok=}pLaj5n@1kV0f(kM)P z(Aj?_gCaUEcg*DY_Cz7G+>Kf?=Jv}hk39a`bVEZ*)24K z$LI;5Npu&`G1xi)l!bqZU*^nyIOAwL(=d*LbF8_-V|mY##Ia_n^|85PthpS?a${U+ z46|T7KEYvhZH86!aVNp;6SpV{ zeXYL-{AZHi4I>T-fdKf<>dH5X8hqgx<1T`vFfgJFG_tN#*;k^XcwJG0LT>~LPFc-T zR|}BkF58Rs;2wCxysHGvhZV2*`#5m(U>o+hPkdC7vq0kE2QlX=O8tydVVF9(Wt(B% zOYCl7Q--0s=FeGI*Zx4x-`Mu|GxG!}zE_pHAHkwoPzC3^E}%K)*+$k$l_{+E-LEh< z+6KXjMw_4-%@`NY%N-od7G9X4vy7=%peXY(7TWcVJ?6pq6oiY2PQmaoSf`1YeoC3_ z8ylnfq%OErYxkX}vf2EfJ5?~Usui69U}WbocweFkO^U8xo@5?el`3BmXUqXGMf8r> zIEz{PPhB!ORD=HYM+%;co|!Y9RT1bDL~o^Y1v(uaX+{~I*W?jKrQifJ2ma(~IhNPH z3sojP^i#>;u`(t~2|B(74YEry{TxhBYAwc$n-ux)k|g3@wUoua-t~gtJa`zovp!V! z0bYi-nH>uGn^f(wPUd@My^T@*F%FvFo>GPDS3H>qFYgO2Unuei5X?#(C}oKF#wg?q zAYaSMxI7(jqsO{do9N4pVH$;-Jg9+YI_NM3Vwe_mX1c{;IzNVKQ)i|-9HyNyO#3=B z{mfyyIfm(h&P-98j>Is%-kIq^N7D;2OdXw>9(9=Bk73G$OJiJc++m6zBt1)K7ItQO z(P0`K!^B4pV>JCqGmV?6n4Do?qY6U2eeo%_^lY>1+rrF)GZ7wHg-VjqbFtvPDq;Rv{evvR;YNV$9+jM$PG_(ND_31aX)L z{|KG46BL>2PTN2adtWit=n2F~2yvwtoY*VWf!bjqzwcJO-4{kcmy7s&h( z818ca!onAu13`Y1_;pYXoRk0Uuw;&y#a9Y_z5(iMjCY?7A4|G8Y#>Q_q9?0e@muy1x3)Ja|1upjq`*LgHtf*CkW0GY@`=Kd8v2xlfpyk_24LpZAH?~oYnJr6}}M|YdwLT`QUItJW_ z6~pu<03( zMT~Y5nh6#jG}Y4qGaiN`d2qEh4=#Xe`W5+R9^+#F!R%exySE~4z zKv^nc7G5xChCog`B3rh z+9!9>J~pPQee+_(>w6TxqjPg--4`qVltS3_H)?U`#eBZM#AyGm&h8YgiJgrbr(Z7C zb8P!NbIUuIiExm*<#Gluox8pY)jU`QGsefm{WtXikPhGr0wVyFVS*k%5x_42OqdSf zTr5r|9#z+hn3BbDJIXkd8qAUfls}WQ=GrqUX|6o0EBhoW%6d{M5f@j6Z>mD+tKUMO zXsITrM)KldiDEhz!}^DkNye_2T9#u*HGEqX4}CNWRTGNzBCgZG!GPjm_5&rs&Np95 zsLnSPELI|JK8(9Rh6fsB^3h+6g}=tAY>jrWf;&zs&a0Jk%!8Gnm~hgtkj-1KF|Nn+FviQgtBB!pOk%GQtJWA_Qju4q zu>xSz52LWKX5L^9La^&fbUX$*Ei~#2j3lu+VlRDd9he-3_;Z7-otrH;x)v1pGx7w z`>|HMU$R5+*8-OYwF&$_;Br#D#pI;O(b~%g3C#OV-aL~t0W( z6nTd4cI8Uyd_?QKMCmkqNh735?4mC!v+Rcr-y%ilwEUi;Z$>1SDLU090v54<*il!b zvU#Uqw8$_vR(c$~PLTE`mVA+y}?~tOi z@R^d{OW}H+c|b`B+h2?kzu3Rmse$rP4~dfgTu$5oAIW!`JM>*W`uk$Z%hM!7>ngG7*cb2a~k;T zka!7rVFE@c^Phr$2{ihR`Gs6pe`xYP`!1}?3Vh`FQgCn>D_F*k{FTsP?Z11w>|`Uv zf^rO&F0$i}6suWw-1(y8j&kvSdmZwpbBmK}l`ta3Q-)*LTpH2b0F3ONgn{FXC`E)|c|?&hKKEd7rqLI{o76?Z2>wi|sNyV3uE9 z@0AJ-*8U^vdT)ig-usp6B5OtdQmkoY7pru!i|qt1yUccd0VsRS4%Z~~n0JspJ=?^c z>rCBawhBFM2%j03pm-h`$aLZ|8f)YBseJYd;XTVI1=z7#0Q#Dg$H)bHB=Dzd6=9Gum&C$bR!HT(m?KKl{ZSil6;rsHy|| z#V0X^pQ-5V7s+E;zf#x!JR@teqKkfUjzZWkas-o{wDJ{QMCKZWFfyAYlgHBcDMg%Z zf;bP3L~z@TpDKxcN@bUkD(lHu^>4+f|3i=JyY`#YG2-LWP-h;rPPAbs%ewR#W9p3v zngQ)45b!F&HxWHN%!7XzucLjqSor-8uFmBjA5Dqx$3jvL_g;}NVp$CLqbyDs*8X3q zn-v9?x>+G(b%Dh{h|a|_W%@d(JBeN;r-eB}&rxK|n1!nI_%$+PW7QZ}q;i}n&FmVb z=cuZXBkm04he4gWe8q~1(KuQ%p|Q|@jK)@#$!IL@oY`YE-l$9LV;JW<{D$upMQ4;= zs_2Z;&lH_edQ%L)Th)zGdY_<|axU{RVtFtypN-)krRZ$!uO!`L>AUY;V-a_VXPmDD z2B2*_xi#xzl_O&O2Qhj}C2JSGU9Z9Ki535CjQBM@ig%6S*JH%TeI6q&Vz^U{y2kJ# zMsEbAEGDp+fN^S#WGDjOY@ypmeX%O_(B|14@Q-YFCv$@hXpMJs^| zGj4WdXumP#IuF>3?icL$=6gv4`{kPbg--0E&c+ls3Nn}cL&)5b@1+Q29?~*t6Ln36 zi^Pfdw3VM0vrjJ_3nq_sINwWQNPnQEm-Zli2rR04+~{I1s}#})^1aBQ^qIg#^}g>& zJ1&t%47yPeN~?XIctx$Cu=I9qc2u_d=ATXJi% zCATJ9a!;})_awXJo@7hzNp^8hvei~gMcij*?IZ|oxau)n+=y)LAtla^w+}N%ZaGd6 z+g;tCo`D+L-0tfB48{ZIc31aTHxabC-PQdy;WV4uUESXh&ai)sv-?}ZUi%I5bPyiz z;dWQIVG_yqaJ#G96v#{ux4XJs0?G4myQ|wR5Wk1pUEOg433%$LI9?!S9&UGa+vYD} z;W`huySfw2M}chgl(EcYlLj|=xZTyACXkSa+g;u1W)pI@c(~owJdq0!y&i6Nbx$_AbUfnWc31aQVcSs;x4XKhn}0+(#|#&@yT*;5jC0~# zocK$+3_^%BvE4P^*bb7-?XL0064GsMca^Z)=62V3gO=I$nNTd@G$Z)~NV#uH5Zhhd zhv_`~DsZ`PA&C2XwCGm4(Y9};gKu9CavFx8%Rq}4O`CWaB)UTx6mQcML2cL6e&GEO zNFVaLxbrn(8Dq)C-RXArxukM;x}CFtAa|$RQ&i&Vi@Q}5 zhmk!&>{d;>t`-K`kK>ed!`V0+Hg~Hg9U$2y?b*sqx{bS43xK4Mk~$ldczY-DFmbtC z^;+UL5|_JGZzFyu@sqGT-sbc5DG%Y4;KnH}`2&-^cp-Epe|R=1hCKo2YdoXd~mVN@CKwQ*kjKJA7`cy(RWs1NHiMJ4+C-8FOZNy6iUQ7HM z;*|p5O8ke!`S-qfJ52n3;%$Ijd4Q5f(8CE;sH!`8BwcTFH)`^zYXE|WJ3W(I6Ty>~ zmi*%TAok@>&*YZ{$eo_auYOG`cX}qjmW&oM5&a(xr)Qs8gt^m`5-H?K z7qin8J;hu{UL5AZTM%^p#69pSTVaa_w-o!g80It%(fp{!fU`r;Meq}#*8bg>415Z0 zX0D_AuS4#Tmx)$zK*#>Ei-+7zbiEfIS;)hH$l9gwxm zHU>>oO%1=D#6fakP;z6f)x$+YaI>pPCUm{n2@oMFl$dzBbTKOe%K9f*mg9L(_8#> zv64MzByoinuO3K>Kg>#s2a@7%At)b6ioccBwZ#KT@wc`#0!ak+-fBtC(-TtiMJel~G8lweItypTB8g7G%5r2Cc=|A)YoIQ4x=;O`Re zPyB6xe@Q%(_$LBSMAY`1O5Dx(wTBQdAl_f#6N#4+&lLD9;#I__3Vadq5b*+muOhya zc&Wh8Cw?vQDuHh!ejD+Sz%M8M3*tKg^}mwsl>8XHrbprD0P`>p?nl=fa6X#OOlIr< zb0iiq+{`VofETkB*M(*ZrSAip!Pf$ssSIQOZ7!p>aWi6oac1q`u{~pbD|Q$3Jq%`R zf5#<*`?KV9DmI5?nElU2VM7^?=D=&9U}!eMK{UY_b}QkGA%Ly@`?e2?5FLCA&~Ln0 zT!hAh2M4coT0tBkcVLac-_Np*kv~_t=OK3lACp+4CuG^_s77?UL1+w?++Wy=JhxT?%wSGOZKhpEH*Zn{gj98%Jx0olV`|G5DRp zhnfBnJYxb%!@+Hzd}Ibr z;I4~KUK)OdVxpILA5D0wN_%Sf^(wm++0V;t-1i>!Q$_wB$Rm%$@IV~-#;9sV+Y5%_ zn-wBj0t8XUjk=7HJG#q{<^m`24vyNRxxh)hQ-ECHB>sfpm|p?pFX>3;L#Qx+iA$|9 zpMk_*(zBWRrdRSvSEgR~BvzT?V`IEw7Pk=}Y3*x{P3f0pr3_73F{rPZhQAlPGL599 zIUvEQ3WUk-frgbbD`|F8VLwQwf(2ce3GoD#8ArtKXId#qN#r$wdipqmGa-{W$c*MC zMe{Jknr2}?O7t0J6!yykZ;Hx>T8gG>6EMj3i_y~8Eeb5`r;AJXCjlKL*({N?%pNl`Pj+1#gP;!RP%<0!j?f5t&ryn&;n5uw@Nl=uYz%p_32boZD zmZafXCvxF$D_SMFvVa(Up%^o2)cnHE<>W-2!qO%KRSqLMB_okR}nFDM8^3JTKrVi|bVLSyB2KgFEHSmK9R+=Qw;xQDaz4ZnPCyhdIhH z(T?Xz6AU9SN+naiYBn$to$FYNzfi|;qGAO=*~!QWbbbs9!3As??3iU0}uI*%=Obo}4|p@$l{ zPYgABKuOXAO0q5ygN*F>DRMkW)#E{0?C{h#svheh$Eyg5PNCDUb1&@=N5+KtfN0km z7%JwYWyi#1c!1qRBbi;0oqNEEG)hD@?^E4z@D>XSKF8 zXVo@T*0okuXRWUdwHUD!iQtp=SsN-Vv$o8f9-KaPQge0H#){CSy4r@;Em`7CL0Um4 z*{qhWot0%ZRO9{b)gjzJYY6c*^i3gOCCo7RV(k{+M%vTbP}>r!0*rMLfU4>mz*s*4 z#>;jjJycs?ExDUQ8~HBo799r!~AKnf7MxbiIr);J?cBTZ--%x8{E5new9VEZ#8X$g4lhy=t-LDXX;S`0Y_e<*kVR|UVl4iXWdl(@v@J9WNlkC_2qJ_q3jWBoY&I?lbLk7Eh|lx@!Mw!{s*P%i^u1 zyREHv=RTdi$=YUztkl!{CuOy4nABEoFIgS7o;B@7{jE=o)2)-Tu4-LvCE8`KF@qof zyOs9Jb>-JuiLcoGcG~-|Yw^1#4474pBD22VR({upR(pe$w8&a|{8cOG73+cR50|%q z)@s#-tRbfre9qhDFK;+xZ9OiM7MVP@{brSY#?9crYr8ThchzIhOv=jIxy#yWFS0zo z7wl#`%i40>dfl|&wgxP+8bhUa-c4}q#pR26SV?8m?bc)WE|_e+d*R#nv^=x*u{qaS z>HAP?x1G!LB%U@jpi17NBl8+J+oQ@?uAW`K>ebin{nyv-ab@-|TvOh5kKJaa*I0%2 zInT6Y?YE|(^rA)9R3E)(J+}Q7Yxe0^TW4pL+ZXt=t)Fhc`wqMHDJ$dnt9H5dl=1fB zNv&5c$}PXmUT1%&?K#WyO8IA2=FLKO{VP_oeNMA$LjP5lwOmzxX!hdrKSR;#!Yr#Y z^lD3%HLT34S!50IS<7A#9%>REx=p|-H$(qy*(l|=K>Ny_mgl%NXdiTj9=WWgu>9}P z_c09ve`}Vt$@Wrb|9w{dBCDUzD!$qBy<+9tUaFHipEOTzKqD_c?~2QwbB)P({2Hsz z+fA+s16M6>E^ljlt<7GXWz`)&1TFpcSq+Pb zrA#Daj=Rp!$ofwCcgpR1tpWDUtL>@3`$gMb_N(P>MXnSy&;_WJ%lHOr{@*rMx2C{7 z8hrSors}_K1>GR1yyFNsO*am}R%Z(8)zx~Q0=LrwY#TjYfKGSndtO$uX$=fnTh6gI zmto|&djBPB%dc9URetsUwu{dTJhIx_^7j6Ad)2KNK=&a#tRy%VSeStirR)4RZUw!Yi$lzHrBP)H^?umI3IzDT2Ne4VhG!7s#>DbRdtTx zD+&Teb5muoB_usjFmImrNx>5FHI*PAAENu}E1EaK6oyc+rYb1DUIM4J;xk1p#`=oN zP5Ay0!m%MV6OPwyTDWit8dZg6u(qX9sN!d4WO*g?mk09aEuLQ*;}`J_qhJdnz6Ia@ z!7C$Cd6*DvX~GAJ4E4>XmS`oH3U8MPC+H9B)Nc(|;VVr>4Zh(L3eo_^!t`KEWn)uy z5Pvoe1~)XcRt7g$NblFSpngqF)m6bzV^Do~i5~=NuB)xD4Y6>jfF==}PUQjyzGj3r zXlPLRs#2xJ^YfQPt6kmLAgWzQ*F}93D2(Aj>vGuSlj1?TyrD4&_6i20h~lQk=BVVt z;`u^5s}>S++whI2sM7;0(Pz+PY$J4uX1yE?O4sr$MMh0iu(75F-xrEHvbeOga0xWi zQKCGY>1Wm*9hLow>t};bVe}a-6}soKqiw5hM)S%rY0(`?d@xBH>vU7)_F$-DgVEHC zn327-rLMY~Jp|!ZU(vEjw5a-=kWeArAKDy5&{blR5K=H}Jw^w5B1oTYGT7reu*i-W z)bZgo+dRaiM&_49VRVL~!qWK$KZeCWtp{uBDmJuCc6gWMml=4ksdwJlXaCz*n|deJ zhgut|b2n6@|JGIlt!S>?n2T$lNzywCKE$|wvdBU zbM*!}d{v-HjbJN#UDaemjWY{M3RlU15DpT9SM?TN7_r;4OCko~CbT4mPlh#X*V5V$ zY^n%tjK(Q?m+C*lnT>T-Iz${>N>&DRsY{oMZtRS9OG*|lUon3L+_x=QkBhocb;||p zg27+S1W!f0od zmqRs&d6b4vht*d@zqoEgyfn4q%5;Mh`Rs9xtUB%+;*01^H<(}61!<^@)uUKsj7;>-sZ2ZQ*a7hS_aLw*K~9Y7mbh&d99 z#bSUp=V${NrH{>0;@B>9)pLnbs2zd@o`@dIknoe}+QF8M7|vzuD>X~zFA)t4m)Bv| zlO|4|3PlaA_3JV3Vs;ggD10w&H#i2)TZRD*=5yg9171Zddx40bc}2_Sm(8CiFaIUU znRZ!eVUL&2qXQ0q3m-xkwQ6i3lW& z>zr^Jf})c~$Gg}?Sz(|M?pE^wA_DE>1V#ndT+VosGu<(<6ss1Fb5kb6VZj=FO0l8Q z$ZBqE3}sbSZ_eV(6spAuA40^H1v(oCsj8L`2LLB9mSI+vpY z=|jXBy0!32JtCp8(x_>!MnP~CJ`P#W*;x;!H5g4R(K9wzbBS0}Q`g$EQ88jl-w?gZ zgv)A#Mqbth8$yju#^xF^?bmQcL22{_F*hM)Jo58-{EInL5zz$DZ18=ZQ8I5ya9;8J zg855J3-gOg4E3?S1_5luVxJ7fg$w%@E@NCn+F8saPclNLd(D16^43Vh^97+)PP*vu&ihe_$FbG&s>At<>NQhg7OT z{oX^jfxloM(%2G*afJp~I;54n(u+O18&Rr_&RPCN*W*q{Fwm9d|62FkO6R+d?vk#$^?M@US1c~$ z>~1E$s`CEosOe^6T7Ri{h)NOi8a&@2m1uC2BK6!1*Q(sLeBca+Wq3LcX{1sSO(USe zqYi1M2A^<9fmamxwN8a?x|wB1N@znIT74K)>Sg&M2v?dLbIsEFt~!w*>xu5C@t_gZ&*+sRk!Fq?H=X zRwUVK8k-ws)Zjvgv_gYL4r!$ZOFF63Shd5rLW4D(7^U&iv#yr@c!_D0YH*yRt3-p^ zYB_vqtT4)`L2Zv@)L40xQG?n_l&is5gS&TlZLsz<1~m8M|$L2V-KSbj)j+S8`7 zMuXbZP^ZDAQFR*B6_M&RrVWRz24m~6yj!exuS2n}!z8EBwHnk`v(Vxm>aezZ9g1}w z0#S7u)K*J%8qrnhZs6&~qLzYwMc^ZtZLs<`XIInvh%5)w0YA_zAah?XX z)vQC=A&qInO`}YMv2`fxR);2~d8bpt3Jo4`NTnKl!Xd5H;BiHw9V>cOf1x8-s==on z(pnA1>gpc$+Ei@}VoigOJGx3V7^|y$_;uG+taUx&=vpJ49zA!LD$`QBIG3^C9~F?$ z{YvA1qxpnldD$s^g$DHt6?=AYcfr!01iO2)yWsMk1iQPgyI^rog5A4Icfqor1iQzm zejViLsB<*kAbweac`b%T`6%~vcysi_Y#x5Qz#lfh-dlX4()L0^3)4-#L z^`kbp-7&aSgD*M;uhgJ6k?KniY3ypp;FTKGCQ3$)X)Cb?(V#X_GHNVpaJR*ZHn_tv zc)12QId-hkpf-`}mpcYu8)ej>Hc>KaENVx$4yIq3_>kkJz)|IK~)i2X&{S_MI3*b~hXz)=*q61bO(%1`8Mkx_JYxP4N zmQoE~>X6oGa951_(nA`Hs$UaTEFrCailb|}26sB7wHnk4W%Fq)s($UiS6{5vS2*fd zYVf}liRz0FY3!jWqXxC#B%{Wnc61A8?S8%wkO!Cg3f$(9N_2&E$>_)$ywl+dXiyj1 zQ+HR~0X}0Pid&(6E2+hf z(E$zW;xSnp-8FR^U%In&b9Hx?ZcgmZ(#<{HS-SZ`zxMHJr&cR8H~d%rD|Vd9niyr#;9`eVqCwpbJ=pK{ zN;9Ub6xa3|e9R%0Xz)ozl5wT6^F~P>Xfq8qDUxK=*!QE18oaR+qsIKB9gPx*p1ocP zXQ>od&l)`HkXC9?n@BrK4{3}~CGkLy(V#X_GHUGFD5D0oiIP!cQG>fpN?xxh%g9$L zE?+eGxI+;(`uD)A2j5OL&%ZYU3_imey~Te!%z)ggcyCu6Mf53JuN} zBTGg9)Zhk1Vo3% zlLrDxgW5#NsIjQQ-8$*>%255LND)LUIWTLA_PB>pha8OOnxq|{h(^$Pnl?rmmn0fP zrNMcMBm+fb*F_n%x~{3# z$-gRTc#b2sQiF3H(h9A-Mv*9~;qx7~fClRw(n<|p86&CTs~xt02BX$@Yh!JL*4RVb z9##sIO$oq%8hq6ut<~UbiX{D~M4e=(%6-`p>^9Q!W7Ry)cUS@%Y;Z{3F8ibm-Uy-q z7^%ViiX<)4*xgY^4L;Y2Q6b%uiygsI4QidTXK75U#j09^u_biBoxD?N)(Q~ITJWe- zXh4Hnmu2jaT%xj_M7Q&nsGO6hfD%BVqY53MWi!Mb8?-M&s5HKuLup<9nv0=fi5 zTdN}Na_k6bML&p=Zdc$hqNL*rj274JDtne<(RGD?w4z5HMaA6}6?cs){TKQp>M!rV zQt7W%+V#)yUF8p}JKU9OkPfID)%q5HSNe!N8F=rq4NMeJe;lnmKnQqijLu07g zhvyJ{+)`IH37b#_wy^>m>3mgN8@Rhtq}W3!awyyR+Jx9CHs}=ot z7kZPTAMQfmuILB4(63bVeO>4`Df&)D*Y+O~G5VDvC`0*o&U8 zwI0>Q9#>Lsmuwfkv0WCt5>XKHN2TD*ZXjbrZKhtX8!TItdx}BLH)g6 zdwK-#YI}R#4#TId-hI}p0mI`Ym|sV7${d_b2}MX@k}Kz;LW3zp?x3QAzpFO7M49PJD6nXTvY@ z7YBtYHQASva(k zaio5@IoLngzgL7g9?7*k9*%-ypPS1hP16!`NipdWs^q*1$viH?84sz_)MJU3M)^72-rkaB7X87B1ZC1acyUOhG~yH$Re{s|HE>nkYDI2eS=jY>YY_OdBDGLz3llAv*Xx)?Q15h62@hNk9jlfab%DW2m9L71RcldvzD|U^J~~E z=85*BIM|bvznbtd4~MN9KepfCY=$DpV+`|k*g11V{qg)~jbArE%(^; zCgpJ)&BVF`?8k)5(NJ7=o3NCR^$FN9yZ=xO>PPxMMK;j~*9YquzYeNL^pEMsc>2?)A&o)Q8;h#aUGr$mtDZe`pNf01X92_(^SzOl=F%* zQhvV9QdPz|tG|r@Ht;czJXcc&>WO@$KTw2y(Ee++3Z-bvIpZ%#syI}NsKgfO$W7cG zaPa#Aj?;l%Hhyr+?$s2T4;kPAUZF_DIIm#?`m0?>_($JACH#Tw%IFCl82McUM2wk7 zZz+G`AN;MxkNtPo{w}u~))`S3>~`a8ZN>2p4=f6cJJsR{9@2d!{0lGDV>2EMMu>d= zZI62gWwO1>H#P4sB7}O2s;~);de=W3_eYjoM1pTI-be``yF2Ly|tv@AW@m>EP)zjZkcL17f{OCizMA%P-{AVw_^&5W~Gwv?R4aIK)ezcRm@feUQGmH$w zJ=K_)X4sS5i-*kg56O8wzo2wtf(I;uKON~*{HEbI9lx{jqf2t|<1rIIHuYTm&cSaU zehcthh~LvIwm<*q8+*?P6*lkiHC>TZ?K^VM(=%?m=z#-&_n!L7+Of~P^vKs9`eV`Q zhu*m6qPu?l%e&tA=5-gncDiQzC*M8$$o@GTEFhA?~cgZmDJoZanb#~>;8U=?~w<8S^M3gcXvI~i(&^oEF;m0Z_RWg9H~NH zlSF#eAoN=Yq0_em>G}O2{J$H7pIvewJCLcePedi5aneP|H=O@r_!48s5ILHH{Nq2E6Uef%K$_k+&98+&XN z{E0>$0}n@r8XrCc>_eQN9wo?P%p??2^n;4NR%RPsML#-466QfKkD*Hcu`?yEr;4+M zJ;ROH^Zg)b#c^t`5(EW=gUF%`-)N@SfSt8ku zvz4A=#jnWVmHfsqN#QueqfOc0Hc{fwQ8A8-kPZd&rhGq9F%~lAcqQytdRi6#Xi@I4 ze)caxKKZlHptNB;A`@ecq8}YA3EzY~k8J$NpQrS16jZ}_Rnb#byKGnV+Z27%NJ+Rr z(SM`#zs^A!$I~(~>XB0aUgb9x7DlJyFPkhGIeziz#*h4|BLr%!Q1nj~-AI%4>6T1a zDm{j(*HK9}UO-AcCzPE9ie9hzRa{-K=*HHXmb#|;Kz)0AYr9dmquuDJZ>bB^wl+5- z!w4{=r8UshT3ZurY;7^N)CU9Y^}+2mO-5r&V=&NB-@d)EwjKg4E%mj6rK737zRhTp z8tZp9294%jfx7yRpi$e@+EH(`1-G`>*VF}?JA?H*MMit;E~BXxq>f$9n_HVYSV~)C zol(~W0t^ZUI@@aG#*4J*MJS00nZG{XpYOtfe z36>f)wL)1#ZA-9;+3ih@&Co=yKtmlWSyLBNk}M(0`pyl&fhw*`$y1I5_b0fUk)YuWMZvnY=OG{02z0nb@gSU)^_WF9G8S<^Qa4u@y5^QZl z)u1xiDA?K?1kiwL)*9Ozgx&_Dp`od>W26?LmS$1XaTj&o%<}bv3~n1iKNfbgqH*aWI0Otcgf(jGzyR zpdXE(b8gnhoe}gDO+aVmn& z>koar9zj=Ai^vK^(0Lu9kJAx!UO(vLlL-2JO=Ozy=NZ?bhM}e$f!q0hk&>>aQh}%D z`$bB+n$iTGmhTrS>7xZCPyT$r07xGrAbHBj_X~jZi2{=C0$L`0x!$=ilBEAV%S)9l_hf&ZB}yK3(yfxkkWU9`7M;Lj0HB%UYmUlV87>&+JUBgEN-di?@_ zkT|qrWCGI6|2>koR*;RT^e+j~rTZyxa^u8|en}`o3{*1t{A5@%QF zJtpwWh%?lCj|zM@afW#BL4mguXGr$$75Ih38H&Aa0^dxWA=tY~;OmGp^m@w#UO}88 z*PAEsWyBd$z1ad^Oq?Op>lgR};%xffRDsVV&LO_n5cqWBTn6@@{(|+NMBGpOb%Bo| z&QR`sM&Lf;4AtHf0#78)Q0zS>a2Ih-IlV^({%Iy~PFcMN1^xkXu1b6N3j7`7XA*A{ z_@9Y0gnKsuFYbEJ?#cZUv`{(BE$+#!nBg~yyB@WBhXOyCbE3BzYz-+B_CdrjR#z5x zf6@Is#r8k9b0QhLUn%bX+xm^g2XfDYTOqI()ztjO-G49c{t|h=K@;Vi2%U?(cb{y? z)cKVU`k}SB`@>K>irIf+XZ-q;>?bL|m<6GqNTCD>g?z|=oF*9SPe#bY5`Rx_E-J9U zZ|D5t?zbOgEEhlSri+Zn3e#;Pbc0ZR$r+)iKkw`7*^qAbRHestr*@x$`F>d*3cC_P z0t;_KwU48~zIXqWGQsGX^EUjk|KpVX#pt8?RjYGOR6f9He~?}F7d*j&w&L!;lytxO zVet=gP82_o6>M(H%G@1n=pLS)^ISvsQg?B8X}YWUftK1p{hZpmbBHDuKTtEjKBsoh zteoP<3)9Es)NFs8iP`ecitbel_P0?@mEIyH1*L!FKekoDSr2B91+h(>;-2G?!u>zx09&PImt>2ix0nJ$`ap6@# z63|IV&q7BH9Y?ElzaM%Q$w3BIXvb%LeGB7ipekkGWM~UDfKYs3jt|_$k3Y`F>5f~B z?9k64gA6mAQQRH3lR3A^oc9nxN+fhpl3ov!z&wl0+hxvgqjH8aXM@Z+8kO_@S;$#D zP|jbOlOb~sM9KVtIbNA_NmR}^ne&mXVQW;*4(7Zfb2f%^LXVTw9an~Ic0hR8fG<55 zB)cC&OPoS>?-K}P(&^80$lsH@bDH1C`8f0>u>B`G=YY~8DL<8zB%uslo$YlXcOvwW z(tG@05&iiZ{+fJrG4!+UFDkn~6e9;CEWi7OlJ4IYbw3vR>{G^Ld@!l&GqZDO ze%I%o&ZPA@ClF})8}lzX+4Y61sQYwjcW+_$pS%Cq{r>imeIw?ftOyoSKZYR%F#jSq zqWsnQRr%fjSY6ruW%n1T%iri!4tHreCrY}XD(%LA650V9N_zm6cK@mSmBQ}7u}}OO zzU=zU>a_DQ_PAshfRHQ*O(e(9zA4XvFQUAv)y3WaU}>MBw1X&(<-C9b%R;FrCg+40 zW4d1pE&hbfmU0CLp5gF&}4u;4+i3^dEba4lJaC>}$cd;fDO`zi%{Fg^8Qt^q<9 zfu*?iWbwkn^wgBDOOV<1nJeY;ICAa(YtVC?mN#@4q2+T&!BX_V8jy+)1k)`s(+3>vb&g5*JtRiPcAA1CzgwKBQNnNLFtrJmmkJzSPR&nT(q zmr~C(M^Bd4(_0K>B923!{X>*l3csVwFOWQLBteZV`3v~vI5_%xM+yle^c%_lW{Tkd zt>E9{@c)+l;Oy&tTaF*0Z%O`(B>%T#_`mJ&{{;M@7QvkRlHgh^E3*tNaLQAl!N3hj zq-mQS(XT=j93jcEz~RVqII6)R$EAGq&ywzsME_)u`2)DSf6Gyh{pQ8cf5Dyq{8isS z|Jj$ae=iK^eyz0o9n4yxT9~%~MEA){QvdlYUjBC$UHTU90(4G6(W7M1e@7*|UkN<{ z9b#=@JDt~fki5Te3yo-@AAf|#d<^4j_v4~hpqnx;^li|k-r$|@{s#G>^`Ja1E|Fx@ z-^t-F-2bthVl^hg01k)ml@)gf(=&>@tJ1SM*5s99)-L9{U|z@+ky4nxsrb^*{D^yW z8ao?>7K1Of7=wYoxM!zb+|!m?+*6iDYFcSep1-uGIHMSGz9~4FZYu76wz&HP6!Rs@ zV`L{z@f+)^MQopJI9S;I%TNYPCSH8w`jhlG24DD_qv6-+pbw#DUe_09e#&*ff-5eB zWB+;bwD9CQ}&MlQ2fg`{0~2f3ZjtxG|BUBanFqVCi#)`y1&HpD2EL{^2I=s zK>%Y$YEp6chV-GO7->?AyWcPEu1g;sikETuj#nr<4rM*LiI6Sr{#z(fV4qKh+5`Pvs~&jksy{oClPwOPdTx?mqx;;U->(_`3}*|^H_RKvLN3C3FMxHl`y&cWT>0a zfjJ){8(iN*B0KOc{Z;1~p>5DA;~g>&OPNkbrWrDFe3_ueqlJRM1}44xG}PaZu?wY- zpzZ^?=L-2bJCSt#x-XOkYS-`jLU+KTlnJ69jL)1Cyej!e_h(|cFoN|*gd%D~Ps>U` z;cOHWo=ZPIEvJtbh8gBkn{#P$ zoQDw!mVLWHMEl4YL_CG|pc2JBotRNC zMn9i%=LEmOST973Php^$#oZUBkK+h3f=ySLJ}s0C^Lui~Pn5AfUU(t&7gS%i?cIbT z!^5$E#7xMb2`u;?K`@*}M=~n^hraqgG7ikS5A6o-wnWZ9HK?47k&7WF+xxE~(2US> z$$zor&lCK-Vw3zU9R8n!KQvx49|RYa4-?FsRwT3EVLk|EFnj<-uw^!MGh7VhGhB9} zl6w7xm1V?wD@Q~dA_W1H9XcxAf@q0Hx#4Je;%_npIOq-p*&%A$U{w{ z=l%|chhF)sXrS4`H@Pok8j}kn3=Xf6v+L1pIXH;xZp8C6Dr7wGgLzIoFrKs3GN~|v zKH}5yVApvEL)&C=-c{p-^#&t=` zPZQ87T)_))P7G$}{1uV-@)%U(z?`4ahVFNYd*-2Q{((hxJ&Nw|{`!r*ufC(!!4GGm zDMEh}c68Ve5G(F}HX=?i1cUauOrRD2!=IFC{fsUQ95dfa0?~DqT&N1o}g>He~DWE0++)^ zsE}Me<9NEa^FF$_bd!O0Ey6SiuEi+-nWp~{RljFiy+N<*iZQ&nI7)#>nrT> z!$HLd_N9yAjUrX)8C>C@_-rmK^BB44e_U{$osE<^^Flsh!NSm$&{Wu6ZxmnpC>`W1 zGdOyH_tN)nMAG#oDp8m|0kahDNl+oWlK{%d1;SdU)a;i_S&+nCagsI#%SaSgjyu!H zhum!X0jbz2f%IIV5!`KPpgfLq`=1Qr{_6bUooDov+g+cUoz*?% z$xJ(X%2T_Cp%b*NKl!+YF2xQ3nD&Q$AS=Aa~< zHBJ87APmgFb^(|^EmIdDb}#sMY;A0+N71mprm1l^tDx-`TErFxVbP%c*qPuLZ1Sw_ z$5x1z`mBc5_HBM`Vx}LJk18v;wXp-Gqh2kw^&HA@RaCHQ<;wiUt17CB3jH(u(!Km! zKW)RFi`x3e?WpaN!U!J^Du=xRV5ekD{SL}Bw6`|v8j9kKqWq=#B`ckhxGO?cD;swew@(Z6W>ka5y_gGDL97e8LM5)+<+4 zRjw*n9)^sfRb?cuE-M4kfsLXSOG-+MKoTk9yQWELqMp?)?e!h4O>8o`_rYOobHVpj=wx+t!aGC%jg)OU2qv0+N_f+;H&OsPa;aY(Z-`*7<9(jU~`jzrDUm^zJBfa93NspfX4px#k(x!l#gOU_JQfzP>aJ z=Gkvyaf5NU3@P{LZ9*DC{xPIn)}2PmS)}akzP?RJPyD5??-``2823&i<+zy&xf4k9 zkmg}pIEwTr(o;x}Aw7-sb*yvd;ePBftjcyGEyF7H7}C?Y4oSn{>Bp7*PNW8IjglV@NlBihQIzILYxacUKtZ&Q$Y^n~39rY-TN=6mfmxWeH<-ctMyf`2Xv;O}x(BzoWx%>|tpF z`55vyI{Ag(?28kHo+72E3VGMz7XqKyn^)#dy^7^tZWVa_UG7TnLDL#xCVKq^C%tL; zk9kuUKjpQTBo%u7OCktM!Pe!z+`0;G69?=09)4|a^z}_3rO=zY26oYIH|iTg8;QMf zpj+9{Zx;%Sn4gaPG_=_TO0F5XOOux4ydsHu3z5GT`2{Nf66hs;1L%H~hvlVnYycDl zeJA+0le*ZO`gPZ0Z`uJ1Rk+HX@6EV8uE3k!6@Ou(Hv?5h7FZU0?fj(b7|N0)aOX#` zK;3NoUV#1^p?|H?e}MY0qW;UNzbmfXo7X9n!>>}gus0dbVr*hT=NyHA_}7Nxpo=|% z;8*PdeO>Mkv!_?6!)VD7${VhWR7 zM`D!b(}PjP6em?d|6S036n*|Vv@iV^-4120PuVNN&2T|vGb~9$Uko?WV%6OYwyzsw zMFz%@Tch=g{#NcSbNwk&vM_07B)UW?N@x9{r|nfab{XE(CEm1UDM>r*y~cTC7EYff z|Kxl&_=4cuiu*>_17C3--dAo9T4NnGNqSsb36D?fnTh|!+s6N^HT3omo?Fh zZa*rQPFu!PU=L2&>lC&!YeR#ioMSwt_r<-1rsgFPg)i|L{ZCs zj{kVzKOXpx2ma%M|9Id(9{7(3{^NoFc;Nrn9^lfR2RBRb&^VuEiNv|XA`=XT=y9&pVwSG#>m7l7WoA9=J4;N1k7#ip@BsGI%}CLtl$K&km@HX?mMdtnEA~#l)W&3F`9j2Vr4< zw&KT4a)Ik|@uyRP|3n#%TQ34v)m2*m?b)GJl$X zPG(MKj(=u$&YbMIIrID(6}SmoToaV^8MCK}`(!dsWR&S=U>7T$vCnoMRdgMr(&F%$ z*RU>Q-&xL6XH#U}sX>BG@)yt1{Q4QwX9wZm3(dHM#$lUB0VF>OyK#%!D2owrnYJGl zbGZ`kMy|`9Fcpk0J7FRdGoCxPT&_6&)!cH&;n79p#l4H3@2)39*E*Eowvp@FM-YPS zweEeWx9f^U1W%B!NAUd}BZTV!!8qHUL-xCf#M}20HshzEF!wd+{jQ&%1B!bVPS$_j zLXh{8+^488;W{u_KJx)mc-t&4dm6!VloOYeO%S)gjksAtMFmWa+f6z9GiXnZAAb%+ zJee2*;{Dwq8=lEVX8|XyAZU2LPIx6@8}?F%yMm-u1Z^)= zXC!QR1+XU<>Jl!fM5f{S3fzzo5QccTX+2>R>9*%2;mxEcd#2-@&_H^sClh)Sww3}O z?s)`GO=u)M(z6V8OSo_|q|%JUjD&UE9G7$ySqT?6gP61dwM@7~P&w))?4etYWV&@Y zScmKYaHiq@0sNn^msX;k#a@FwqBlu0xzfo$~_u*_tW2Df>y zqG72533{(YRc)VHgPfh-^C&aYWW4P4-bV{YnMFV@^S;GG)68m!c6k?3!C12q$rawO zQ^6FIh8*|62tWX(1Vbu^+ z{tO@^NEx{h%<=Ym;+u#MN5sY3+laRjZ=)UdSBdW>{u@{wZ}$*Ch?D(3@YIyQo&xMy z3SBAhrvfxQ!(mIx=?Ylk^3;<4_v>N2+w)V>KY9jqjy>O^9?II|z%w@G^DMNQ=MiwG zd@1#Gk-tyq@g`xQOEJvP!Rq!t52vJxc)4cR(`UzL0n;PWERor6qOT5x|~VC@OV=H0wg}rTWLg1{e5u zlb<{zeG@I#P2@ras~iB|$dXB0u6GL3EKyB!T<_|`+p^!*on z?ehH#K6Cr{r|@_mI53DMAW8OJgxsON9>61gyP#;CuM?$C^qq?UnCANi{GI6=2RO^e zheK!jwjmg1`F26W244?!Uf??kc(d;fl(@xrHYiQLzd_GFA8+?x;Y);uzTwva#(7&>20QG85w=mNrS zGz}$2kSE?I2?H76(PFfk0Z5d(&9LX7ier6iFQl>|P~cl9m7M~?x1OQs_7sB0x8W6N z8SV)}t#2cF@OGv>$R6w4dUJAESQA33A7A1TsG$s4K#)4$Y-BS1| zG_CJS!fshw4`D1&rlH=czN<&TO3zDxeTSsLjc7yPHB#VJSme7_2uR`U2qzmu_drU7 z+VBZCifW>C!#4x$rtf8#>+(H>0J41CTjTbvgAH-M+mM^!dmWSn-xlzAe5W83?|UDz zw(m}y6Mg)XT9WS`a3=dc!g+{q4k%t<2MkQ{od?rWef&#Ps^PvIDu#Dm!pdAt`tY77 zpxSdgIER0oMj4)A&^i1dVcQtvf`t1&W72TYB)T8yWbC^D%ECXzFa4CdCb(=m{$>l#DduXAm3kJka7;0) ztPjoAQ_ONC<;K*HBA5l^@eGI2wH@pg;H$#2j_$)tbHpM3iVw&yrRsj&>Mk*Q&zLe)d8g3W&5!n+)ls!pc2fn@8B^H*J1De^i@hl78T+s1~F$h zrG7}MZkRf=W4B@ch#3FoJZmhfYaU}=U5CnYo?_eI%gkp$$!t{WZiht+pbE}+?Vvg4 zd?Tw}WeV%3enVlbs;K5@)nG7tEJNcYwH{Sm`qf0{;ct57ANGw|BJLjJ{9qkAeaXyV z10wfv3VjGua^~VB(JRpfa`^XLiKZe%=j`Uy6plB9k*m!dSjtm57Ot7!QkgW(MsdPC zdzzGBl{!$>?nMW$w1E|VJNA0nJp39IWL>SI{soB4J))4;rM$;_J>O3i zI41Vd_3y>LA;~=aB<@jUjaCJ}2f?iA5lCi%LOwyxLflS)%Uqs5)W>5LXuC7{SS=4S zZHi`E?l84QFzt_KDsz~wj9~hHG}HMG)9n#Vzl&zNz+w7D1k*>+OktZ&MKFzqBO+>7 z?`ZlUf@x7SQYi(I? zs%#O|?<$1jVb;eHT8w$M7&**zGxna7c{mL{X#O3l8&Qj~U=;?K5r5|J6Z={-^Y9zs zTzH)QbH2QO#t^iy3gf%NmtyK%IN#&opAdhNh0ixfg8Vad%7xcMHE_e6^h|LP;0o8pIInea{jjJ6>PP&6Rf&Cb zo_YAiVK7C^{^g?RLM$C*RV02J@c%Z2V7?PSBlCfX3jY8c16KHH#T2eED_Jfk$O;#$z1BKZ4BsxA z0;S0pvc{*C45;ET54U5)&TBEuvs}#o4LBEG$NHS*Vvaiz_!dqs63-=GjP_IbcH+$( zRL^ql1pkkK=YJeFOikKcbHFqt<#Gj5LE}C&v288h=0$uwZm_`6-$Q)Fhcrareb+Cm zGY`+l-yvkvTqjHov1l<#UMCi3--NptiUrzrVu7{{0l1j&Z8L8X{MMoC_J~ep-s)nM zS%+@iv$!3OzsGeOR9T0P?pZ9BhflfW^q*HyMMu2gV#(H_W5_1P8$8ybYxflVh!Ovy z(tUW(d2r&(0(%Z67j8lkzd&~@x`5t##q}s~8-1|wAb^d`5DU;h35i9>$jm@7JjNri zuf=G~cI^Otp`vpgbdR8O8f8n{ej{_a%AF3WC&N-%Ws1(_NTzrx4OFuO{X;T&EZ^Cp zIArfpyd`kqM3^SRO;1PYNghkz`!=$^Ge$~L@6?kDpJt-dyK5k$O5kYw*_p9Ex@k|U_IZ^6}c6qNi*cqCQ~uxla5f8e&!gS zV`P@AOpa;U(U~-JmN4@=n2f%4;~pb3sQ62vY^CHk&w(z6laYB`<#NH;9;uB1M13gn zX61a^d`R+mtdO$Vm~)rPz9&*#wf{vJ(tjS=&d)~ZdR6OsMC;1zRoQH=6qwe($(~lc zs>!nAA{rxev_fdy+#8cLDk>YPF zgvOoH;y-eX`!Yg%BHYlw>JLO4H`TBH&N*;w|1+9f-uNqlVsURE#W<5!p0RHdH4ong zGcw|nurU%nKEns#c>?1B%*0Y8V>*CC0H)0aFd7TC>8~p@)NE|Lg)+{f2D5Sr<sA}kWln4pFOIddAB&5G#~4C|SaNlYzOVrnVJ zjA~@wsCek3O%aOY$``irsjdl;3i zN$zzF1$7;IlrRqS@CnE+^kEjma6*nN;KSm@HEjkiAbF$NI&|lr^J?HJi?9Fv0=egH z*4PrPbk4&VFY~S@hHEZ~og!ARF)tQf=QU`o5Ln>}6m}4W7m3wFqs2+=>&Pe)Q`ChP z?;qSlTuf2hEUpe-ATI7BGztEH0?)cp)rkRQWM(OhP4y$F7fm%okKDPJt8D2e%%EI` zjra-+KdQ3y>uSxzODDiLy!m5p6N`~CT(|KCkiz)~&xO1Rr0{XWSZCghXc7Fp{FUZ@ zMd0@Wms94|CZ|k}<^C(USh&?>t>yfAk16NRqkGQdrS`ohXTlF5T6h}3zhI>-<6A=K zG(_8+-0{f4@f~EcX3@(zBXgC?r&E3{c|2B8bo@@OQ%p|()mKFW#ifz?m~t0&rr{R3 zaP)lb=*+Wt*Bl2saJI~L*$*0-7b-d@?P5jWj&|Fr=v22w(mmFCN8RNrn|ERMi0mrS zp^hp#XUOjy{1I&U?IBQr;3)3}*B``;Nib-t3&w=1~P zSyaVtDDKI|zRlY_yn7P58SnU-uZWQ6I(s4S`T~CtOXj3N0Wcj*^i}8!Dx(bX0PDjAXl(}9r+!h!8&x;9@)u;h~?&FEDdDG z^@_DFJ8qHaxT!AQ%x*${p&uPN;Mct~UI>1Gj5#-h$fLk7dna$m=@sckSQOp`IuG97 z5#GI1hrN-xSviZ|-{)8P+f=@ud72c{`3RiDl1T*4Zbj$Z@qnU>!nut4j>_c1tv5Q8 z6Ng;5-6DTG~OdssN@SBfqo^bLhD1b-}eZf2K*-Sx~ z5EJV;A`ZFwl-GXexY%XhBQ7S^bHugXx3Nfy>@u&ytYURFSRgc5hmNbO!9sO4_%qc- zN=5!kG`s9#6)twM8-U9$Q==~rWslkH;$MV5Mt0^wRV@a0&1B`e`<%MVtB;!$6N7t~ zWD>!Br=l~szoF<(a6hjy8QhOWXNH6OxD4)};ksi8>dS+{`$xsk;LTHX2Jgoag_kKh zgV&o*%d1?6@{FwW6!t7xOZSU z`M#34MyZS$PUbwO^6wouKkLQF;y;Wi{_g`89~=CAk>cav6CSia8!;z>Kg#;p;9n3S zv3Wp=UpN6EI_uQMN+K%w_aTNx^fLHk-|BB3e)>!u{Cy%cujLY#f9NwM&LyH8{S(D1 zQiQe`{gbR$pwT+?Gj(TUyru4J$k6p${Nv+KA)eW!jAH1HovJGSvSYan-Q9|bAv#|& zp#{;XV*FK^4AI8u%mG96pNgL$da2@Ph>k+5@nDF4)6rvOPEmA*=skkY3lSr8hN3en zpN!yNtmtgYPbJ-BvD5L04Mg1GowH5}42QeX?y_cL>C~)pM1c21=&h8jF?wUKp}!p| z{!oPYH3N#r2I#LN#HWTL#6@sM)hH%7jb#j|zo3-m1eSB8T+WCvX7P`7X7T69@>tL0 z`$@w+I7XU~nUbMpxHwrJKJgx(F>4~i#w=L?CXe+*z8@q?yMWI+f>GRDCKaE^_cKST zY;jcbN@zJRe~ei#qA|_oT|&|Ed_PE3v>LcDmYdt*$EUI zv%W*k9MZL_cO);tz>AY(cT`Jk44Xw+Rel`cm>nUe^5tWEiTq=vELX3H>= z?&NN;6(`{Pr0)?dJ&$TTxvMbz_qfv09uT)nqW)XTN`63uKXcnE3##}VIkW82WDFDd zSuJMSFVHCb;X&TAFObcj^)s{Vc9_Fo(n_oBQxwhLs0psJ40wb;s|G#=jlZ;yTxGQg zME2xWow|0zqI#VH=i*H|FT7t5941&X`%o<-1zKSB$@TtbVPtev7kyeKX(OY@C3!+o*xV)E?a5z;^Dz z)nAj)n|+gDyK6S+u2b`Hw&d*AJNtE-WU zxFy%xM-bZB*Ig%=*+WX49d93Hj@)sZAa;AY|8XX2Xy1#baeoZs0du#f`?H$}+T88w z{+w{C&E1~vF9@gEci`;)lCa8~2=6Q;!$t93H4|jXI z-2y50aJQ#BP9SBTCMu2>$Xd?{T4I|&g@v0u-0kU3G=C0ctEYfvCYv<4&BNWE?o@#U zJ>2c-_L*(S+3DeKPxnZ336Q-W?)G$#;^qnCG7ooqy3@>)(AMSQZcq1E^LZdwc(~is zJ;nSg*baKQ+tZzC-U#GI&+mw23FN4UyFK060=d(}-Jb3ofgJO2x2JoiIRi4sJ>2c- zo-J%U;o)vi_gwS$DCbeb#oeB988dNCT#OTcNtZ(iJ8r~o&v;`GNH%wS#v3b0x4GL> z!fuv~pX4~BDDdALX9fg$prUbFu(|wfAv#$o1`xb(R&E1~vTj@sI=59~-cQ=Ea zis9#S(BehYCLRTe?obBB+cZT`do^_!c)6u<2zg!H_?fVZvE<_BY&-irQn@+X&RIf` zo3rg%tcL3mP(8~J07Q^-KQaQD`;lGTteH5L>gghXpU~q;!uXJEm?J=Pd$?IM*)+Mw#P+npie#6_;bzTbXz@~2%3q*1 z-mWFiJ$@;2vt|czzE&hfZr1D~eg$#4S@T-rHxlP&&3OAZ;&&4NiO_c+@#8qf+fU*= zM7Z;$z<*C%xbt~|_YxQGd_&;>A}-wdp};-x$`IjB3sAg0nz(SwFo91aF6uK`;PZ*s zLex7;;3dR6h!+UFns^uSN`W^Lzm_;>fOvZs@!N>Ys&*5QGg8 z@&vlx=4Q;~iPr)I4>vj{cP4@-H8uJ9_dp!VjgHAL3XmHelVARvRBm)kK9!6XG7|gH zLL`b1OfeEE&K!X!7>O*BZ7FceNDvzxlb;oVQp*Bgc?8l>#QsvG854{IvC(nJIoxk* zp9IU0`J2gSZ$;rl77*q}M@o3f;}f&fEIq|sPhK46;akws!^A!8S-W7%90cU>4#S+o zA^JKXBZ{X8PUll5+%`LMB4rmb)GBa`Zd8ThnTz0j2c@N9eQjqNqqiygV$eY|7o_pe z_Si*Vj)iv`{%j8>?2cAkDluA6!Wiy?GUu_6n3bb;N9gCD_o*w-7=3Mw`k6vKhHa%D zJjSRwifILGxK_yG@11X+Eh{BijWY@qQ#F{3v0{0$A@=)v=HU^@9oNu|KRIvUFxQEy zkDtK5Jp?`iY8|@bl9BhI&CE@7|1Xg{<^<6i4(QnAb@7-Rh;H`7&(@*P#l!glGV>BL zzez8SoGOi~M=@C#-&o6RW7HHy<}JfwNv5RgraRb;fw4B^%)vk>+2SRbiM8l%ov zob&-lNchQPeG%;g{|3c$IhaPZMo6605@ODxjiWA7+1G&g52|R}Z}=}&^joOo7Yexx zNCJLror`fUr>6}6V=DVNvW$sbRwmrZX=fsrl?mSy;AuE4;rj$9^#J70`Z`PJBi~0f2l!N`VT<51;2QM z&}6+X9XfN;Ux4$M&|yw~04aY79~j?2o!v%ZJUX0wj_OphT*JjafOQ-!{nv1Mf%e}o z<^CsYxH#LD0~cC%HR2q#hI3uRQ2RNTH1Re^5IvL50_<+)w6CUE@%U7n&%6U9`J7Mu zKQ_Yc;yIuAk11<-N}w%XuKdJvKJjwpC!X_(mn%QCzj(FsOXSKgUakBRx$=uwE5F1hSP-vPeu-T9#oOlfuy9i%SAOw{=C^=s zP2|ciKG~$fZHZj@#it4+n8=l1yjuAsa^)94(&Tz$Zz5NI@uST3KrTz<$}c_*n@X_q zOXSKgek`_-VC9#{m0!GC`6Y7Y7oTZzm2zX^?}%gxzsFB1KTD*E5C;liaDW1oPzlETD9w+`*R#!fc6aQV- zmMb(~2FBa30!u!M6U`oSIRH}Gnu7YcrVcaguOVzx6V7@MBu^XQgc+=m;klM@<_v(g zTz1)G=_>h*jOY5XaKCs)#&ZKjcPn;*O0@B^N%$?xrR(9K8?6sL(V2XpE%c$Sd$VjAwlek>O-A?>_#N{IHe&P?{6mS0; z=V78gj|%)1;%=OVz98^-hz}?JrocZXo=*HDf%8F-VY7+58Nc=z;)TSA3w%29D&iu( zZQisTR!4lc$X`Z0NW4(s>xl0oUM27giC;&&PT;$V-%dOz@GFVmPkbMs;k(#Q$q&P8 zdK7*dFc0(aA#}YF7sBCYGFyMl1T12><62-B0UIUuad|2IN1$o^Af}nZFy>#+(i&U0 zBL)~})}g(7(l&Qucfio2V73nRT{5~4vx4b652!gN%^W@-g`L50G)G22 z#vUM?HU_YD=-{4F&l4Se3(#qPEH3KK1P_i%3_^TpXFPWr9osV=f8okDCfuTOFF@{i zJ|&POBAf!E(@~A+bfeH1EP1%NX>krKbxg^MH)8=e56^@a>5_A3d8r>R5%oIf0MH)- z9q~`rONggq#U~tg&b`R|7BK0s`P5xH3ElG`M$``ywCB!^_FS&^9Ne>LEx4q6^1|-P zk8sc8`QQkm*MItFO9oMG0{s8N+yprOnYkFKmOKuCVO)bkL`#4mTBBH(F`-RmvkWCai3^;> zJ2`4k;sPh}djjMFC-M6PC*Ofk;4kTT`t7JNe~Bxt$$tWgzocKM>ziK56I|(f-IG{n zrt2GKaa-|C)1l@R@317xdxm%QsG%lz^SaWFq@+b4!Kn&_UG9;FW}mY^bGZ ziZ%g*?63$eL*1gll3}_?Uj~XC3yEO@fMDL$l6RR*I&{l_p>d$3W7mmCg%GP(hw*B`6@8@6-Y}Vh8R7NBhsX}^mE%B)9tTn* zhozxm^;icvUPatQ#n-Ut-Z>nOj0o=$;Vv~Y>|#d5C>as5)22mq+R-`#gHMDA+;|3Z z(A`uhj}<0~vSLgc7d=9ZXA4Y-unV|fs$xV<3>U%{$9NOfj%e7)Q3SX;J(|Fl{(q~9 z{}1Mn=y@S2+`0qIA&ddc9nJtB$Ig(dXNaLP4tzQehRN_49@*%6uuy$%M0B&`W_e_@ zj|%&gZJieF{L$fD&QD_^qwb8zs2dw*WH%b8BZJ0|j|iCwIs*->hmVQj7M>JVBU|{t zX;3t|k${uScpmFB)BFrmu!)1MjQ?4k9qn0-EwxRZb@f@B8-pF#pC6`31fPA++EQDa zwR7Iwz}(q0+Ux7K)&yrXHMVr_%n~oi(F&quv+xG;XaYW0&rjB4SZfLLE%a@{%vzXX z@WtF6nOkX3XA52iUI!TKApmvt4S=z30*rUeNIE}nFS*sn=p*D|YGbP-Uemrsil4i= zv#}|N7w0cxc~qvE>YMQDe=y-1f^S9VyT_$&`Hpl6H?|;!4?CHHQ&|8gT$8Orvv`Mm zfCfoPzPY^4%W5 zPw?DpMe(|`?Mf@%eskjaxz#Ic?O{JWQGILf`A=4tp1*v{tivx`i8l{>F>iW$^?GaP z+Lb^2_KNAHu9D$vTzSLo0z2!b>JL|a_#JEave_?IpKrA`JY-F{Y?VD~{qv30FLqYj zSvd9kzs@?tK4?{5W}RaPmsi`9?aANYUi>TTtxG;w{^UcQPyWa{YTD;6pV5$Y^`Z5K z%WcN5jkl8SvUc5-`*`*?YquS=Qa(5|BdcS}jIL^X#rkgRH>SO8xb+v~gU%UQS9h+r z6799F$)g{6%SwIe`s(Yf#Fy-0`|Ly4cNDv(jaX2PBD22MRsDl4o%R+hX_>Y1iI=UM zm#iP}d9b`SPV3mM^!G*3Pw$Typu6 znbv1t&Ahwg$z2aGy58~~M6KO+F3&S~+R|br+5Xbw1+CldiPdY?FRWho@+W{7Tn}zJ=m#k#_+;-Qr;p;B% zxVrkt!sXSkLect?EUPy7az~amcCFR0%o>wvt$Im#s7-k2b^&{DhW>@JQL1l&_BHz~ z&l5LLF`G2S4nCxnen{&ev>l2sJovHYyV(l7WKDd@T6r^7?H2lm1)=YD(_Xs;&AfcQ zH1`q9bFj@dZREP;?bTgfr@HLrSytD`?rt~g28 zPd-|=xy)g%1Q5T6{^l~)bLbmzDEwcJb%TtYdSKNfU*y=@e|)TIZ>zx)vbDLnwMCAM z&JYND^(cqIK#y{AV3eaAI0hc&B1ccaYV0C4Jl=7%6+@RCVZ?YB9_KLfIYSiWIEI4{ z*I>?Q4XPf`po&A1{yUR3%e>|dYiOo@v?Obc0@Ay3D<>bS?5=uUu_?= zM%Xv6w`V_ff7cJ}m#e!?X&>fMo$T#)1CT$mX&N;BZJn?bFJ-bG1gpj=#q`qSFg{izUENZ z#TS%4gc1GCL%sI8TQOuFEMEslZ?bl;J=9fw2>&*SetMZWSKs}$DH)v7?z(lVo?ad$l{?L&9rYPQ!0;B%+I6;)*h zzn&7P$Uh&lE%iHt28?QKZ4q__0(CXP8X?LL2h|5Q*K|Y}wsYnjM^n+tg8VWT-(J5R zNkwVNiju0pO4O?$Y-?i+dS8T%SZ&m|EvTrhG=%L9bsb^px+cf))rDn7ds}UwBPcylSWuvS zQn*5VWhKCecj&(6n)Yolg{}`Y)CI&BPT;goe2J*T*j!V)4WAf7IJN}m!ST9HOO~!c zqw3ab>}VCL_$eA$US&~vS$@ItqN)hLh|d%SIuP+4_`DC^hKS0;gg{3dzCmQD&oXs{ zE4fm5yHYqoe|)ETSD+3bVlo==otI#M1~3-p20Ch6+v)@OlV~8YrKPhru)Rile@lI^ zy{WOeG01Yj4IvSRPCd#De47aFZfQ~Z%KoZ~qWl%%8rHYAh#EH0OJO&Zl|=BMAvr?w zf$adj+tL~Udky1G1Z-PtdsuR5MUl|XS_FmMZhWyR?BB9A=pJYtHV2}=U9au}(u@3# zlhM!?Xl-b~=Z3;QtEj3fSpm)Ti6{?ex|DTCpJdnJa@e3#7-&XEjqYUZQ@iWi(ULME zI&_~AA4Af{Iz3W(I1sGaVzjj*JYOUD zq+r%&3tA{t@s!6Ktof_mX4VY z?~44j2Hwu;FPK07zkNZce@1h#v!y!{`YqVf}#}4+kK%jH3XsCH;>egT@MkfOw7~A3(Cm5&NiDP3)0qTL# z7=5a_xdx+h*6sD} z4Na{(0$79LhnT2o5ZyE&DhxssTABTp?1;m1r`qg*7&|JYlXB%c@b!jb!57pCax7OEgW3Z|63i0thHK#1C zz!0emtt>#XG?(Qeyq%1))tHJn+%(thjEEX%7GU@=kX3okfFz=w^SucFoVmc22?b@V zQ7;UAAaRm|ivt0C-;1u{pdr5s#txv3E5URK#bVxP%{kgYM(Ja-R64c`UCmsLlxT-w zEhnM}lOg;hx^|#rD~5B~`by1;q7|Zn;qoR-aMHxNv!SS^vw1V7SWKiM5{2)@-2=zK zf>jvMU_RFFTvKNT>DJWf4w6>@~Ud>CAGsCjd!XA9h4=zCkr3)POi;Ie?%8Fyc zUD#5GC}=hU+xcz7dOcQP`ho)X%NDsF5c7!$B#i5va9RSQlZMB;$n{rASqa>&<^x0o z+Q$iu8ZNJ#@g!%iV`3E+C>-Zz&4j}O4frr(ODkTS)!G`&s;l3g#hEGCh!Z|*h>Hkx zHV#sC9YGENPGGFUtSUnv!;HS!5mRlhAKF`Yao(q4Y({@{Fb3;5qOir~NW|%vPL*HD zLjkJ6<>)C|6Sag__!Yu%v8AEaXzV~AQ{Q^5uQTwCMyxwA6>=tYlvY%g zRg|m>A!m382~F`zE8ZU`3#yqNuQFWmQRjX{DjQy@z=KTwAfO zCqqTa(&8#758vf;bWy($5ou}r?I~}jH@;H zu|rxTiwd9n8&Rc=&YH)ajuBsy% zn-gZ#U}T|HM1xJ;P-Imf`6;qLKZIXc}c2eBB|f(cl{nsZ4_(I;1t9D=+~Mw)2244eEFQnMS`( zpv}_7x{T~28t!qFS8DJ(iewobdyZ)2wJ@Ky>w_>!+og?Q3DUywIo1l{9BsyRj;=EO zqQob|q*(PrG^|-d{BtRfGgXR!*Whf2RHeZZhqOk6Wr`%bg~m3A88x`YA+6RRpZn(l z?`yClN}a~`JB+I}czG0~)Du4IYWW?(Dh)1iNR=AYR?C4&V~t@(4QhKNqsDfH88xV_ zG>s|^MjG6|D{F(br!ib#$bWf$!(yVHy``P+QG9tUaPJZMbQy)nH^D*7mEz zL8bY2r-aoSJnoRHH28)?TBE^`BGHc3gR1|QBUq)uzc{3g8jRG{KkT)s+8D%|2LJ5n zs?=bluKwZIUsr|J^#@1S2I=(hxxds}Ev1Wd8Hb9)0up*&Y5X^uPb-#xIEAm)pnhZF zzz*&&ST&Gfe{c2|EFVa)zw7!7RtzNAzq|AoTsx3p{}|QpTl8@Q2@cFV8hpngRci1m zY#ret{iU&c6cy_@4gNTaQDfg8BgMg}!QU#9)TpuPXE=-!h&U^&JdSl$8vM{9tP@72g<&MGk zhZ!}fO_Yop3)|7JgXwn?{@$^pY@u>~q0=t?7KQrNjeiSEH7oAm;8Ob4mCGEv%e4P) zA6!bmHm}fW{nZ-$ibJZ@;H!#62dqA#u@AzG5iuh`t$v}yQl-IL9nuC3ekVeG)e((_ z)%WwSR$uApD%arc4r!wXwL;l^8Vjr6IGFWXCuUL&Uh1e{qrsm?SYL5OW4{kGYEb)) zc2o@D#eU(e-QVTtD%0Ri4yjUCNSBNrufZoBt}+d3BL=z<94j4>q*9De8a&{TDmD0Z zMUpY0u_Iwd4eFQVNyb=Tmn(t2j^Jty?srI4TKx?UX?3ik)hg?&4oj5=!-~rLE2@fB zRIL>3a1@nmFs!JezoPP3MVpm^u+-ZAQfp(S8v039_m`@UmD;AHE_RGA)1WRMQ@YV# zQ@>HDKTAJX_h;$n#QrS(+|!?>pD%Ri-0Re8wFdc+EDuZ<8q{xz8#vIku3tI2sx&yk z(N(Fzv3MAiM?5F9^Tr%GQ{hWgiteMquf(uwd|#MVgHOe;A0M{QiIw!+&YlH2%q(f9A8wvj5j(A&*?EoG_K7^p!b*& z7L|~G2jh>NDwJs-9daz`SL_m%wJgk{!EFwyQiHl32CzSGf;3}|N-@%D@HK~2slm4t zNye4NF7ZnpXfq8SR3yo$u{*+y8hjv%QDa*tIvOPqK5K(lIo4Ha@O6i@MuXZ!+EH~x zV|l7j^cW3l6D6a@?hi9+P@5442so9H1?w~ zqXzGbV$|4g!i*aHT@<6n7EgAHmO%Kd4c_G#T&2OWj`}qk)F#qkTv929V_`-OY7-@+ z#-0i@YEYXf88sF*xL-%s24C$MT&}?$NBss3Y7?m*msE=3-Y}yEwTY5ZV^4<}HKrGW--53}VG^nMd7d58evIxd>6#-#8`#IKB z#tczuoajzz8Xcj?;SQ=P=c$~29aLv%4@7oQP5YWI_1||;{f5LECz4ld5Kl6S1N};a zBNYiN%zO>6P&B$|^%0E)!onJ?jbhZ;2Vur==aG=MZLMQll?InNQfoA*OO{Qgu}xt{ z4eF95qsGE^^lQKmRQdWXi=w60a5U5u?H>=D7C9J1HA%ZE5iZktnpUWcOHyqlbjEr? z{?p*g4r!wX_3PlI{~RR> z*rx@pulOjovX)G9K)ZnvGjDwZ%p2~nDG^k5*89NLO>vE(QHKvP#um&Sb?e9fhuMeG4 z%QdJ=g3GShqY+&Yi!DE*FSDE8+zHcQz;Rrq1~)}GuHuNs8p4bk z)b`N2iUF*v(AM#V20SFA#Je(hF4@%YV=> zDR-&#m`d+esmu+Z_0AeSf9uDSj`$>xek@6Ufh{a4p+71DKeWn2H?WRi9YH!aBv-^a z6Z-+N8PLeYmM@uZ)lf@ous##p>od81tZoK2TncP!4K|Hs*6nKHPC}6e+hq>6xQbnb zf=wX-&7ItFThp?o9(0L{{dqcT^JYHo zp)fqFTCZU^LWA5^r#O_R2p)9;X$R-s=1=+mch3<#U2($m7RDjKK8Ki zoas*zW2tzk9ybHC@qBUYfj0&kZ3EJwJUNz|dOXJKDFe|H4IQSDxt5V+=r7Dh)02&| z8IcqTTX@Z;KXV|u*Z3sY-!H>5V9cU{=&6Q1AbqG2I&UC;^sT&s=);Un`2*318+!+& zk1z&0EMw$AWcXA4u{kE!(ti!?M^|HDKe}GvMrT-t`YTE_8RhmL+ZcXs_|z!D&H?CntrCD->K+2OlK-!XX*I@c2e@vjAa zC^l+t%J&OhIv#2U;om+8{R*LHxbeEulOeR>g-V0)A032#-yrnI1s#Lu6scHWqdfL>!0nRlqPw>KbY+sDYpvmQ{2=rkrAOaOxE1B`m^TRj zvO(wprAI#;sxM!f2jS-{ni*HAYRK9yi#4tsg#WHV=qCoDzW{nF#*^a3ex+F^eETWO z%~SEbQRTj=_+#7U^dS1F;^x=mZHagCHh>=uk;*M z{Cvytfc--8?^T%-6#u3{__u>T6#mg~!q@SC$sqg(m45x_j0{z;8x>ve1&UYY9#QnR ziITv$=fSrw4`lyCgV3K=dSbs+{Ia4SRPnP`syF^Th@O8a{@C~Eigza}*~nxx23|4l zDP!?&HgQZ)^w>ApovrDLpYsim`GPLt$a6L5Ln8?qj(kQa;-S=-M?E5*5g~|&3|jEu zoAZ=n#KR>7)x$dk#e+%&I^^?05)3~UhMdT!#K^d-15bZ6smEKKHv%{hr3VVDSLUza zql!yQS1ryj4Xj$Sq_U_gP?f*9v?ws>1A6_Q5px~{$;(?>TC%txFf(&z<{a^;Ni@ZI z8YP+>`-p6GuJhoZdP*ZE7ta7jQ&7k@`Dj!$T|5dBO_I+}M$;l5U=7rZi-zb&2-Pz~ z(L(ZZpxK6cEJ!@g6U`wWuZbpw+qNz`Lp@CsP2^)!;U`-708UJP_zA&igXJ@i(aiE; zplF(WG-@=bdK&>s=J8pgR019z@u5klW)-^=UK=9r?j*8i6V-k_{31C1u-$9 zUL!Fvp+IT0Anp~38yhP_MJy?>lu%n)(PD&x0uvJ&O0mL@%2*hdd)~dj z**6ymg)f;s?|z*3Id5j}+stmYrpgP=T{r#2cXzlImUey0n_lI$H_e|d+w>xAm#@>e z%lDV6x;m~o|AC4KbZv~=K^u<}mrkd$?XuTN3eWzGM*8o7l89TulhE7cyCk0XLTsK` zMjaXk5Z@$KZ*dG8tYH+GV`&&Hbdnjkm3^l*qH|aZL81-Mp|DO26L9e(D z2L-O}|Dn05Ewq1i&@-vA_^d#)@6dks+MH*O4AjKgq=!F~^mGS24t{cLHU_Twk__-r zpIRpCWLsQtk6&>fxpdL@pBXOWKUj6fT_!3D$iBBtk#%x?`oRfv*YKx;pT}=y-TA-M zz9Dsi_k!=<