From 16f96409b9ad2a1451c88b4e0074b57686f02269 Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Mon, 16 Aug 2010 06:15:24 +0000 Subject: [PATCH] Test Postgresql hot standby + replication and integrated Postgresql database in store-cluster sample. Add a front cache component which can be used to wire a cache component and a database component. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@985799 13f79535-47bb-0310-9956-ffa450edef68 --- sca-cpp/trunk/components/cache/Makefile.am | 8 +- .../trunk/components/cache/client-test.cpp | 20 ++- sca-cpp/trunk/components/cache/frontcache.cpp | 125 ++++++++++++++++++ .../trunk/components/cache/memcache.composite | 21 ++- sca-cpp/trunk/components/cache/memcache.cpp | 13 +- sca-cpp/trunk/components/cache/memcache.hpp | 15 +-- sca-cpp/trunk/components/cache/server-test | 6 + sca-cpp/trunk/components/chat/xmpp.hpp | 12 +- sca-cpp/trunk/components/nosqldb/nosqldb.cpp | 13 +- sca-cpp/trunk/components/nosqldb/tinycdb.hpp | 38 +++--- sca-cpp/trunk/components/sqldb/Makefile.am | 11 +- sca-cpp/trunk/components/sqldb/pgsql | 12 +- sca-cpp/trunk/components/sqldb/pgsql-backup | 41 ++++++ sca-cpp/trunk/components/sqldb/pgsql-conf | 105 +++++++++++++++ .../trunk/components/sqldb/pgsql-standby-conf | 122 +++++++++++++++++ .../trunk/components/sqldb/pgsql-standby-test | Bin 0 -> 526293 bytes .../components/sqldb/pgsql-standby-test.cpp | 88 ++++++++++++ sca-cpp/trunk/components/sqldb/pgsql-start | 12 +- sca-cpp/trunk/components/sqldb/pgsql-stop | 3 +- sca-cpp/trunk/components/sqldb/pgsql-test.cpp | 4 +- sca-cpp/trunk/components/sqldb/pgsql.hpp | 79 +++++++---- sca-cpp/trunk/components/sqldb/server-test | 9 +- sca-cpp/trunk/components/sqldb/sqldb-test | 1 + .../trunk/components/sqldb/sqldb.composite | 2 +- sca-cpp/trunk/components/sqldb/sqldb.cpp | 13 +- sca-cpp/trunk/components/sqldb/standby-test | 39 ++++++ sca-cpp/trunk/kernel/list.hpp | 34 ++++- sca-cpp/trunk/kernel/value.hpp | 12 ++ sca-cpp/trunk/modules/http/httpd-conf | 1 + sca-cpp/trunk/modules/java/eval.hpp | 9 +- sca-cpp/trunk/modules/scheme/primitive.hpp | 8 +- .../trunk/samples/store-cluster/Makefile.am | 2 +- .../domains/jane/store.composite | 37 +++++- .../store-cluster/domains/joe/store.composite | 37 +++++- .../samples/store-cluster/sqldb-master-conf | 35 +++++ .../samples/store-cluster/sqldb-standby-conf | 28 ++++ sca-cpp/trunk/samples/store-cluster/ssl-stop | 3 + sca-cpp/trunk/samples/store-cluster/start | 12 +- sca-cpp/trunk/samples/store-cluster/stop | 7 + .../trunk/samples/store-cpp/shopping-cart.cpp | 20 +-- sca-cpp/trunk/samples/store-sql/ssl-start | 3 + sca-cpp/trunk/samples/store-sql/start | 2 + sca-cpp/trunk/samples/store-sql/stop | 1 + .../trunk/samples/store-sql/store.composite | 23 +++- 44 files changed, 912 insertions(+), 174 deletions(-) create mode 100644 sca-cpp/trunk/components/cache/frontcache.cpp create mode 100755 sca-cpp/trunk/components/sqldb/pgsql-backup create mode 100755 sca-cpp/trunk/components/sqldb/pgsql-conf create mode 100755 sca-cpp/trunk/components/sqldb/pgsql-standby-conf create mode 100755 sca-cpp/trunk/components/sqldb/pgsql-standby-test create mode 100644 sca-cpp/trunk/components/sqldb/pgsql-standby-test.cpp create mode 100755 sca-cpp/trunk/components/sqldb/standby-test create mode 100755 sca-cpp/trunk/samples/store-cluster/sqldb-master-conf create mode 100755 sca-cpp/trunk/samples/store-cluster/sqldb-standby-conf diff --git a/sca-cpp/trunk/components/cache/Makefile.am b/sca-cpp/trunk/components/cache/Makefile.am index 580a5e4d84..96fb476fef 100644 --- a/sca-cpp/trunk/components/cache/Makefile.am +++ b/sca-cpp/trunk/components/cache/Makefile.am @@ -27,12 +27,18 @@ memcached.prefix: $(top_builddir)/config.status EXTRA_DIST = memcache.composite -comp_LTLIBRARIES = libmemcache.la +comp_LTLIBRARIES = libmemcache.la libfrontcache.la + libmemcache_la_SOURCES = memcache.cpp noinst_DATA = libmemcache.so libmemcache.so: ln -s .libs/libmemcache.so +libfrontcache_la_SOURCES = frontcache.cpp +noinst_DATA = libfrontcache.so +libfrontcache.so: + ln -s .libs/libfrontcache.so + memcache_test_SOURCES = memcache-test.cpp memcache_test_LDFLAGS = -lxml2 diff --git a/sca-cpp/trunk/components/cache/client-test.cpp b/sca-cpp/trunk/components/cache/client-test.cpp index 25bdb722f3..4f655c3d98 100644 --- a/sca-cpp/trunk/components/cache/client-test.cpp +++ b/sca-cpp/trunk/components/cache/client-test.cpp @@ -36,9 +36,10 @@ namespace tuscany { namespace cache { -const string uri("http://localhost:8090/memcache"); +const string memcacheuri("http://localhost:8090/memcache"); +const string frontcacheuri("http://localhost:8090/frontcache"); -bool testCache() { +bool testCache(const string& uri) { http::CURLSession cs; const list i = list() @@ -84,6 +85,14 @@ bool testCache() { return true; } +bool testMemcache() { + return testCache(memcacheuri); +} + +bool testFrontcache() { + return testCache(frontcacheuri); +} + struct getLoop { const string path; const value entry; @@ -91,7 +100,7 @@ struct getLoop { getLoop(const string& path, const value& entry, http::CURLSession cs) : path(path), entry(entry), cs(cs) { } const bool operator()() const { - const failable val = http::get(uri + path, cs); + const failable val = http::get(memcacheuri + path, cs); assert(hasContent(val)); assert(content(val) == entry); return true; @@ -105,7 +114,7 @@ bool testGetPerf() { const value a = mklist(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), i); http::CURLSession cs; - const failable id = http::post(a, uri, cs); + const failable id = http::post(a, memcacheuri, cs); assert(hasContent(id)); const string p = path(content(id)); @@ -121,7 +130,8 @@ bool testGetPerf() { int main() { tuscany::cout << "Testing..." << tuscany::endl; - tuscany::cache::testCache(); + tuscany::cache::testMemcache(); + tuscany::cache::testFrontcache(); tuscany::cache::testGetPerf(); tuscany::cout << "OK" << tuscany::endl; diff --git a/sca-cpp/trunk/components/cache/frontcache.cpp b/sca-cpp/trunk/components/cache/frontcache.cpp new file mode 100644 index 0000000000..a9b18f0792 --- /dev/null +++ b/sca-cpp/trunk/components/cache/frontcache.cpp @@ -0,0 +1,125 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* $Rev$ $Date$ */ + +/** + * A front cache component implementation which coordinates access to two + * levels of backend read/write caches or stores. Each cache or store is + * accessed through two references: a writer reference and a reader reference. + * + * This is useful if your level2 store is made of a master and slave + * replicated databases, you can then wire the writer reference to the master + * database and the reader reference to one your slave databases (assuming + * that the updates eventually get replicated to the slave database,in the + * meantime the updates will be retrieved from the level1 cache). + */ + +#include "string.hpp" +#include "function.hpp" +#include "list.hpp" +#include "value.hpp" +#include "monad.hpp" + +namespace tuscany { +namespace frontcache { + +/** + * Get an item from the cache. + */ +const failable get(const value& key, const lambda&)> rcache1, const lambda&)> wcache1, const lambda&)> rcache2, unused const lambda&)> wcache2) { + + // Lookup level1 cache + const value val1 = rcache1(mklist("get", key)); + if (!isNil(val1)) + return val1; + + // Lookup level2 cache + const value val2 = rcache2(mklist("get", key)); + if (isNil(val2)) + return mkfailure("Couldn't get cache entry"); + + // Update level1 cache + wcache1(mklist("put", key, val2)); + + return val2; +} + +/** + * Post an item to the cache. + */ +const failable post(const value& key, const value& val, unused const lambda&)> rcache1, const lambda&)> wcache1, unused const lambda&)> rcache2, const lambda&)> wcache2) { + const value id = append(key, mklist(mkuuid())); + + // Update level1 cache + wcache1(mklist("put", id, val)); + + // Update level2 cache + wcache2(mklist("put", id, val)); + + return id; +} + +/** + * Put an item into the cache. + */ +const failable put(const value& key, const value& val, unused const lambda&)> rcache1, const lambda&)> wcache1, unused const lambda&)> rcache2, const lambda&)> wcache2) { + + // Update level1 cache + wcache1(mklist("put", key, val)); + + // Update level2 cache + wcache2(mklist("put", key, val)); + + return value(true); +} + +/** + * Delete an item from the cache. + */ +const failable del(const value& key, unused const lambda&)> rcache1, const lambda&)> wcache1, unused const lambda&)> rcache2, const lambda&)> wcache2) { + + // Delete from level1 cache + wcache1(mklist("delete", key)); + + // Delete from level2 cache + wcache2(mklist("delete", key)); + + return value(true); +} + +} +} + +extern "C" { + +const tuscany::value apply(const tuscany::list& params) { + const tuscany::value func(car(params)); + if (func == "get") + return tuscany::frontcache::get(cadr(params), caddr(params), cadddr(params), caddddr(params), cadddddr(params)); + if (func == "post") + return tuscany::frontcache::post(cadr(params), caddr(params), cadddr(params), caddddr(params), cadddddr(params), caddddddr(params)); + if (func == "put") + return tuscany::frontcache::put(cadr(params), caddr(params), cadddr(params), caddddr(params), cadddddr(params), caddddddr(params)); + if (func == "delete") + return tuscany::frontcache::del(cadr(params), caddr(params), cadddr(params), caddddr(params), cadddddr(params)); + return tuscany::mkfailure(); +} + +} diff --git a/sca-cpp/trunk/components/cache/memcache.composite b/sca-cpp/trunk/components/cache/memcache.composite index 7c160172f0..4d546db410 100644 --- a/sca-cpp/trunk/components/cache/memcache.composite +++ b/sca-cpp/trunk/components/cache/memcache.composite @@ -28,6 +28,25 @@ localhost,localhost:11212,localhost:11213 - + + + + + + + + localhost:11411,localhost:11412,localhost:11413 + + + + + + + + + + + + diff --git a/sca-cpp/trunk/components/cache/memcache.cpp b/sca-cpp/trunk/components/cache/memcache.cpp index ec61ae9a92..4b62ce2e4c 100644 --- a/sca-cpp/trunk/components/cache/memcache.cpp +++ b/sca-cpp/trunk/components/cache/memcache.cpp @@ -23,10 +23,7 @@ * Memcached-based cache component implementation. */ -#include - #include "string.hpp" - #include "function.hpp" #include "list.hpp" #include "value.hpp" @@ -46,16 +43,8 @@ const failable get(const list& params, memcache::MemCached& ch) { /** * Post an item to the cache. */ -const value uuidValue() { - apr_uuid_t uuid; - apr_uuid_get(&uuid); - char buf[APR_UUID_FORMATTED_LENGTH]; - apr_uuid_format(buf, &uuid); - return value(string(buf, APR_UUID_FORMATTED_LENGTH)); -} - const failable post(const list& params, memcache::MemCached& ch) { - const value id = append(car(params), mklist(uuidValue())); + const value id = append(car(params), mklist(mkuuid())); const failable val = memcache::post(id, cadr(params), ch); if (!hasContent(val)) return mkfailure(reason(val)); diff --git a/sca-cpp/trunk/components/cache/memcache.hpp b/sca-cpp/trunk/components/cache/memcache.hpp index 8749f845bf..1c71b220c7 100644 --- a/sca-cpp/trunk/components/cache/memcache.hpp +++ b/sca-cpp/trunk/components/cache/memcache.hpp @@ -91,10 +91,10 @@ private: apr_memcache_server_t *server; const apr_status_t sc = apr_memcache_server_create(pool, c_str(host), (apr_port_t)port, 1, 1, 1, 600, &server); if (sc != APR_SUCCESS) - return mkfailure("Could not create server"); + return mkfailure("Could not create memcached server"); const apr_status_t as = apr_memcache_add_server(mc, server); if (as != APR_SUCCESS) - return mkfailure("Could not add server"); + return mkfailure("Could not add memcached server"); return true; } @@ -131,7 +131,7 @@ const failable post(const value& key, const value& val, const MemCached& c const string vs(scheme::writeValue(val)); const apr_status_t rc = apr_memcache_add(cache.mc, nospaces(c_str(ks)), const_cast(c_str(vs)), length(vs), 0, 27); if (rc != APR_SUCCESS) - return mkfailure("Could not add entry"); + return mkfailure("Could not add memcached entry"); debug(true, "memcache::post::result"); return true; @@ -148,7 +148,7 @@ const failable put(const value& key, const value& val, const MemCached& ca const string vs(scheme::writeValue(val)); const apr_status_t rc = apr_memcache_set(cache.mc, nospaces(c_str(ks)), const_cast(c_str(vs)), length(vs), 0, 27); if (rc != APR_SUCCESS) - return mkfailure("Could not set entry"); + return mkfailure("Could not set memcached entry"); debug(true, "memcache::put::result"); return true; @@ -164,9 +164,8 @@ const failable get(const value& key, const MemCached& cache) { char *data; apr_size_t size; const apr_status_t rc = apr_memcache_getp(cache.mc, cache.pool, nospaces(c_str(ks)), &data, &size, NULL); - if (rc != APR_SUCCESS) { - return mkfailure("Could not get entry"); - } + if (rc != APR_SUCCESS) + return mkfailure("Could not get memcached entry"); const value val(scheme::readValue(string(data, size))); debug(val, "memcache::get::result"); @@ -182,7 +181,7 @@ const failable del(const value& key, const MemCached& cache) { const string ks(scheme::writeValue(key)); const apr_status_t rc = apr_memcache_delete(cache.mc, nospaces(c_str(ks)), 0); if (rc != APR_SUCCESS) - return mkfailure("Could not delete entry"); + return mkfailure("Could not delete memcached entry"); debug(true, "memcache::delete::result"); return true; diff --git a/sca-cpp/trunk/components/cache/server-test b/sca-cpp/trunk/components/cache/server-test index 598d4bce5b..a93a7e73ac 100755 --- a/sca-cpp/trunk/components/cache/server-test +++ b/sca-cpp/trunk/components/cache/server-test @@ -29,6 +29,9 @@ EOF ./memcached-start 11211 ./memcached-start 11212 ./memcached-start 11213 +./memcached-start 11411 +./memcached-start 11412 +./memcached-start 11413 ../../modules/http/httpd-start tmp sleep 2 @@ -41,5 +44,8 @@ rc=$? ./memcached-stop 11211 ./memcached-stop 11212 ./memcached-stop 11213 +./memcached-stop 11411 +./memcached-stop 11412 +./memcached-stop 11413 sleep 2 return $rc diff --git a/sca-cpp/trunk/components/chat/xmpp.hpp b/sca-cpp/trunk/components/chat/xmpp.hpp index 34ab13ed98..a921b9806d 100644 --- a/sca-cpp/trunk/components/chat/xmpp.hpp +++ b/sca-cpp/trunk/components/chat/xmpp.hpp @@ -26,8 +26,6 @@ * XMPP support functions. */ -#include - #include "strophe.h" extern "C" { #include "common.h" @@ -64,18 +62,10 @@ private: /** * Represents an XMPP client. */ -const string resourceUUID() { - apr_uuid_t uuid; - apr_uuid_get(&uuid); - char buf[APR_UUID_FORMATTED_LENGTH]; - apr_uuid_format(buf, &uuid); - return string(buf, APR_UUID_FORMATTED_LENGTH); -} - class XMPPClient { public: XMPPClient(const string& jid, const string& pass, bool owner = true) : owner(owner), ctx(xmpp_ctx_new(NULL, xmppRuntime.log)), conn(xmpp_conn_new(ctx)), connecting(false), connected(false), disconnecting(false) { - xmpp_conn_set_jid(conn, c_str(jid + "/" + resourceUUID())); + xmpp_conn_set_jid(conn, c_str(jid + "/" + mkuuid())); xmpp_conn_set_pass(conn, c_str(pass)); } diff --git a/sca-cpp/trunk/components/nosqldb/nosqldb.cpp b/sca-cpp/trunk/components/nosqldb/nosqldb.cpp index 638434c26f..cda3ca44a9 100644 --- a/sca-cpp/trunk/components/nosqldb/nosqldb.cpp +++ b/sca-cpp/trunk/components/nosqldb/nosqldb.cpp @@ -23,10 +23,7 @@ * TinyCDB-based database component implementation. */ -#include - #include "string.hpp" - #include "function.hpp" #include "list.hpp" #include "value.hpp" @@ -46,16 +43,8 @@ const failable get(const list& params, tinycdb::TinyCDB& cdb) { /** * Post an item to the database. */ -const value uuidValue() { - apr_uuid_t uuid; - apr_uuid_get(&uuid); - char buf[APR_UUID_FORMATTED_LENGTH]; - apr_uuid_format(buf, &uuid); - return value(string(buf, APR_UUID_FORMATTED_LENGTH)); -} - const failable post(const list& params, tinycdb::TinyCDB& cdb) { - const value id = append(car(params), mklist(uuidValue())); + const value id = append(car(params), mklist(mkuuid())); const failable val = tinycdb::post(id, cadr(params), cdb); if (!hasContent(val)) return mkfailure(reason(val)); diff --git a/sca-cpp/trunk/components/nosqldb/tinycdb.hpp b/sca-cpp/trunk/components/nosqldb/tinycdb.hpp index 143b3da308..c98f2c38da 100644 --- a/sca-cpp/trunk/components/nosqldb/tinycdb.hpp +++ b/sca-cpp/trunk/components/nosqldb/tinycdb.hpp @@ -141,13 +141,13 @@ const failable cdbopen(TinyCDB& cdb) { struct stat st; const int s = stat(c_str(cdb.name), &st); if (s == -1) - return mkfailure(string("Couldn't read database stat ") + cdb.name); + return mkfailure(string("Couldn't tinycdb read database stat ") + cdb.name); // Open database for the first time if (cdb.fd == -1) { cdb.fd = open(c_str(cdb.name), O_RDONLY); if (cdb.fd == -1) - return mkfailure(string("Couldn't open database file ") + cdb.name); + return mkfailure(string("Couldn't open tinycdb database file ") + cdb.name); debug(cdb.fd, "tinycdb::open::fd"); cdb.st = st; return cdb.fd; @@ -162,7 +162,7 @@ const failable cdbopen(TinyCDB& cdb) { // Reopen database const int newfd = open(c_str(cdb.name), O_RDONLY); if (newfd == -1) - return mkfailure(string("Couldn't open database file ") + cdb.name); + return mkfailure(string("Couldn't open tinycdb database file ") + cdb.name); if (newfd == cdb.fd) { debug(cdb.fd, "tinycdb::open::fd"); cdb.st = st; @@ -171,7 +171,7 @@ const failable cdbopen(TinyCDB& cdb) { // We got a different fd, dup it to the current fd then close it if (fcntl(newfd, F_DUPFD, cdb.fd) == -1) - return mkfailure(string("Couldn't dup database file handle ") + cdb.name); + return mkfailure(string("Couldn't dup tinycdb database file handle ") + cdb.name); close(newfd); debug(cdb.fd, "tinycdb::open::fd"); @@ -212,9 +212,9 @@ const failable rewrite(const lambda(buffer& buf, const unsi // Read the db header unsigned int pos = 0; if (lseek(fd, 0, SEEK_SET) != 0) - return mkfailure("Could not seek to database start"); + return mkfailure("Could not seek to tinycdb database start"); if (::read(fd, buf, 2048) != 2048) - return mkfailure("Could not read database header"); + return mkfailure("Could not read tinycdb database header"); pos += 2048; unsigned int eod = cdb_unpack(buf); debug(pos, "tinycdb::rewrite::eod"); @@ -222,9 +222,9 @@ const failable rewrite(const lambda(buffer& buf, const unsi // Read and add the existing entries while(pos < eod) { if (eod - pos < 8) - return mkfailure("Invalid database format, couldn't read entry header"); + return mkfailure("Invalid tinycdb database format, couldn't read entry header"); if (::read(fd, buf, 8) != 8) - return mkfailure("Couldn't read entry header"); + return mkfailure("Couldn't read tinycdb entry header"); pos += 8; unsigned int klen = cdb_unpack(buf); unsigned int vlen = cdb_unpack(((unsigned char*)buf) + 4); @@ -233,9 +233,9 @@ const failable rewrite(const lambda(buffer& buf, const unsi // Read existing entry buf = mkbuffer(buf, elen); if (eod - pos < elen) - return mkfailure("Invalid database format, couldn't read entry"); + return mkfailure("Invalid tinycdb database format, couldn't read entry"); if ((unsigned int)::read(fd, buf, elen) != elen) - return mkfailure("Couldn't read entry"); + return mkfailure("Couldn't read tinycdb entry"); pos += elen; // Apply the update function to the entry @@ -251,10 +251,10 @@ const failable rewrite(const lambda(buffer& buf, const unsi // Add the entry to the new db if (cdb_make_add(&cdbm, buf, klen, ((unsigned char*)buf)+klen, vlen) == -1) - return mkfailure("Could not add entry"); + return mkfailure("Could not add tinycdb entry"); } if (pos != eod) - return mkfailure("Invalid database format"); + return mkfailure("Invalid tinycdb database format"); // Call the finish function const failable f = finish(cdbm); @@ -263,7 +263,7 @@ const failable rewrite(const lambda(buffer& buf, const unsi // Save the new db if (cdb_make_finish(&cdbm) == -1) - return mkfailure("Could not save database"); + return mkfailure("Could not save tinycdb database"); return true; } @@ -274,7 +274,7 @@ const failable rewrite(const lambda(buffer& buf, const unsi string tmpname = dbname(cdb) + ".XXXXXX"; int tmpfd = mkstemp(const_cast(c_str(tmpname))); if (tmpfd == -1) - return mkfailure("Could not create temporary database"); + return mkfailure("Could not create temporary tinycdb database"); // Rewrite the db, apply the update function to each entry buffer buf = mkbuffer(2048); @@ -287,7 +287,7 @@ const failable rewrite(const lambda(buffer& buf, const unsi // Atomically replace the db and reopen it in read mode if (rename(c_str(tmpname), c_str(dbname(cdb))) == -1) - return mkfailure("Could not rename temporary database"); + return mkfailure("Could not rename temporary tinycdb database"); cdbclose(cdb); failable ffd = cdbopen(cdb); if (!hasContent(ffd)) @@ -305,7 +305,7 @@ struct postUpdate { } const failable operator()(buffer& buf, const unsigned int klen, unused const unsigned int vlen) const { if (ks == string((char*)buf, klen)) - return mkfailure("Key already exists"); + return mkfailure("Key already exists in tinycdb database"); return true; } }; @@ -317,7 +317,7 @@ struct postFinish { } const failable operator()(struct cdb_make& cdbm) const { if (cdb_make_add(&cdbm, c_str(ks), length(ks), c_str(vs), length(vs)) == -1) - return mkfailure("Could not add entry"); + return mkfailure("Could not add tinycdb entry"); return true; } }; @@ -363,7 +363,7 @@ struct putFinish { } const failable operator()(struct cdb_make& cdbm) const { if (cdb_make_add(&cdbm, c_str(ks), length(ks), c_str(vs), length(vs)) == -1) - return mkfailure("Could not add entry"); + return mkfailure("Could not add tinycdb entry"); return true; } }; @@ -404,7 +404,7 @@ const failable get(const value& key, TinyCDB& cdb) { cdbi_t vlen; if (cdb_seek(fd, c_str(ks), length(ks), &vlen) <= 0) - return mkfailure("Could not get entry"); + return mkfailure("Could not get tinycdb entry"); char* data = gc_cnew(vlen + 1); cdb_bread(fd, data, vlen); data[vlen] = '\0'; diff --git a/sca-cpp/trunk/components/sqldb/Makefile.am b/sca-cpp/trunk/components/sqldb/Makefile.am index e5c03f5190..7ed24e712c 100644 --- a/sca-cpp/trunk/components/sqldb/Makefile.am +++ b/sca-cpp/trunk/components/sqldb/Makefile.am @@ -22,7 +22,7 @@ INCLUDES = -I${PGSQL_INCLUDE} incl_HEADERS = *.hpp incldir = $(prefix)/include/components/sqldb -dist_comp_SCRIPTS = pgsql-start pgsql-stop pgsql +dist_comp_SCRIPTS = pgsql-conf pgsql-start pgsql-stop pgsql pgsql-standby-conf compdir=$(prefix)/components/sqldb comp_DATA = pgsql.prefix @@ -42,11 +42,14 @@ libsqldb.so: pgsql_test_SOURCES = pgsql-test.cpp pgsql_test_LDFLAGS = -L${PGSQL_LIB} -R${PGSQL_LIB} -lpq +pgsql_standby_test_SOURCES = pgsql-standby-test.cpp +pgsql_standby_test_LDFLAGS = -L${PGSQL_LIB} -R${PGSQL_LIB} -lpq + client_test_SOURCES = client-test.cpp client_test_LDFLAGS = -lxml2 -lcurl -lmozjs -dist_noinst_SCRIPTS = sqldb-test server-test -noinst_PROGRAMS = pgsql-test client-test -TESTS = sqldb-test server-test +dist_noinst_SCRIPTS = sqldb-test standby-test server-test +noinst_PROGRAMS = pgsql-test pgsql-standby-test client-test +TESTS = sqldb-test standby-test server-test endif diff --git a/sca-cpp/trunk/components/sqldb/pgsql b/sca-cpp/trunk/components/sqldb/pgsql index 3cd1904e32..dab30e642b 100755 --- a/sca-cpp/trunk/components/sqldb/pgsql +++ b/sca-cpp/trunk/components/sqldb/pgsql @@ -21,5 +21,15 @@ here=`readlink -f $0`; here=`dirname $here` pgsql_prefix=`cat $here/pgsql.prefix` -$pgsql_prefix/bin/psql -c "$1" db +if [ "$2" = "" ]; then + host="localhost" + port="5432" + cmd="$1" +else + host="$1" + port="$2" + cmd="$3" +fi + +$pgsql_prefix/bin/psql -h $host -p $port -c "$cmd" db diff --git a/sca-cpp/trunk/components/sqldb/pgsql-backup b/sca-cpp/trunk/components/sqldb/pgsql-backup new file mode 100755 index 0000000000..fad59236bf --- /dev/null +++ b/sca-cpp/trunk/components/sqldb/pgsql-backup @@ -0,0 +1,41 @@ +#!/bin/sh + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# Backup postgresql data directory +here=`readlink -f $0`; here=`dirname $here` +root=`readlink -f $1` + +if [ "$2" = "" ]; then + host="localhost" + port="5432" +else + host="$2" + port="$3" +fi + +pgsql_prefix=`cat $here/pgsql.prefix` +$pgsql_prefix/bin/psql -h $host -p $port -c "SELECT pg_start_backup('backup', true)" db 1>>$root/logs/postgresql 2>&1 + +echo "Content-type: application/x-compressed" +echo + +tar -C $root/sqldb -cz data + +$pgsql_prefix/bin/psql -h $host -p $port -c "SELECT pg_stop_backup()" db 1>>$root/logs/postgresql 2>&1 + diff --git a/sca-cpp/trunk/components/sqldb/pgsql-conf b/sca-cpp/trunk/components/sqldb/pgsql-conf new file mode 100755 index 0000000000..f5cc2d23e3 --- /dev/null +++ b/sca-cpp/trunk/components/sqldb/pgsql-conf @@ -0,0 +1,105 @@ +#!/bin/sh + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# Configure a postgresql master server +here=`readlink -f $0`; here=`dirname $here` +mkdir -p $1 +root=`readlink -f $1` + +addr=$2 +if [ "$addr" = "" ]; then + ip="*" + port="5432" +else + ip=`$here/../../modules/http/httpd-addr ip $addr` + if [ "$ip" = "" ]; then + ip="*" + fi + port=`$here/../../modules/http/httpd-addr port $addr` +fi + +pgsql_prefix=`cat $here/pgsql.prefix` +mkdir -p $root/sqldb/data +chmod 700 $root/sqldb/data +mkdir -p $root/sqldb/archive +mkdir -p $root/logs +if [ ! -f $root/sqldb/data/postgresql.conf ]; then + $pgsql_prefix/bin/pg_ctl init -D $root/sqldb/data 1>>$root/logs/postgresql 2>&1 + cp $root/sqldb/data/postgresql.conf $root/sqldb/data/postgresql-init.conf + cp $root/sqldb/data/pg_hba.conf $root/sqldb/data/pg_hba-init.conf +fi + +# Generate server configuration +cp $root/sqldb/data/postgresql-init.conf $root/sqldb/data/postgresql.conf +cat >>$root/sqldb/data/postgresql.conf <>$root/sqldb/data/pg_hba.conf <>$root/logs/postgresql 2>&1 +$pgsql_prefix/bin/createdb -h localhost -p $port db 1>>$root/logs/postgresql 2>&1 +$pgsql_prefix/bin/pg_ctl stop -w -D $root/sqldb/data 1>>$root/logs/postgresql 2>&1 + +# Generate database backup script +mkdir -p $root/sqldb/scripts +cat >$root/sqldb/scripts/backup <>$root/conf/httpd.conf <>$root/logs/postgresql 2>&1 + rm -rf $root/sqldb/data/postmaster.pid $root/sqldb/data/pg_xlog + mkdir -p $root/sqldb/data/pg_xlog/archive_status + chmod 700 $root/sqldb/data/pg_xlog/archive_status +fi + +# Generate server configuration +cp $root/sqldb/data/postgresql-init.conf $root/sqldb/data/postgresql.conf +cat >>$root/sqldb/data/postgresql.conf <$root/sqldb/data/recovery.conf << EOF +# Generated by: pgsql-slave-conf $* + +# Start in standby mode +standby_mode = 'on' +primary_conninfo = 'host=$mhost port=$mport' + +# Failover +trigger_file = '$root/sqldb/failover' + +restore_command = 'wget http://$mhost:$mhttpport/pgsql-archive/%f -O "%p"' + +EOF + +# Generate database backup script +mkdir -p $root/sqldb/scripts +cat >$root/sqldb/scripts/backup <>$root/conf/httpd.conf <Ik8<<8+)5 z(utC(=?`HD5t)zCX2TGL*zfha?(2F#_w($j$>ji-+kSG-uL_c+@3z@ z{ASIXh3sGRP>T>t?dK*W^}=_jgIh^euTcBY{-I8xQ}AgC2+3Vehx*MAJzdZAAE&Epyg-Dcg;flkUo^^>Q|$@`nHxy{B&p@3YCGF?Xn)l z&=%BhK^;GB!IU4?vkiV`qdXgJ^D_Wteyolf`TS7~C42Q5U*(VKmD?=Tt3EM_pNcl2 z5I;tLIqFFh`_J0H0`)%s0g#0s(&H=CH8*Ee*W59u<>pK%nA&CX#4bHt9aNM03ogwR z*3^?cQ}7{eYkX*1)^{rVrepW}HZ2<3{Noclwmape+;G3LCQe5fn`osCa7xpIFxETzl6G5f z9NKPd=E&5S!ap2z%!4<#`{w=c4+@P-d~(`_H>?1QsDH212>Ory`XZ)$0S%)6SkKtC zf9-LBE+713eOV0sX`X{vUlUVb7Err*`9}=D!7=qiWBA<^!|xw4<&iP`M#b=36N7(L z4F9~C`rl&cFODf&pCXw0-V#&q2Q2G$doZVbP*G4*%G$a{SZew&ywbEf^HJx`6H|2RgzfidOF zWBB)F*rRH^<Hh$=Q=b8JA~I%^r=f>$3BwjLa>_#%125?7Wea zcr__|a(2G^F38OvoIf(ZfFu+03-WRU;tYpA1{I?xPMDBAI)BWlfF^y?q=}O*$(}rU z+3F{4j8g>s)B z%DQ^Um6vw!mX$Sn>eP{=a;9|ef$PaRS)=Kqto&(t*$`>$#B{iG^wg1Ac?FZQv!>)s z$}bq13)(Tc8B^%!sZ+D^vL{WRI03rkPs^IpttsE`XMjU2QwTHO$$_iuMvu;#%u@GI zR_278awd#Hz)UU}pG}!ZtGE|lhKL%IGa;*Ba`u?e*s-|;V1ksKrm*f*xB^x9 zpI@UV=S>KW&mKQ|d|qhE(1MsUzxRu)a5eQEqi=rm=l z3XqjOW@P?IV2pylgiRCvTo@6$%*OyC6f%zcyOO`M#69s1;rxu^B*((Nx2jV_p!d)gUYy7%q! zSDVS71n0maH)K!yi)}#kspE5dK$|nVoMAMf3;OrZ>WLoPf9TM2&$}?IdzYS}3kF?y z9*O|>a@ScsysPd3EWkxQXS6M3{lXbobNP?ikZT(L7k$N2qQYbAo6GFYt%V%5qfH99 zaIW4GbIj)WxWDeInZlce&P0QpBeusUcDSI+B@+Z7CDvQSm1QyH#F+SZ%q9A@EePj zv-k~zr12Y*`T_jL;60GvnD7tcHzxTR{KkS{2){8oAIk5;LZNH;jS2h+eq&)UhTmA= zjN>;JMY;UOL^zM%nB?d48;ho?{KjJ8R(@jCmmhc;kuBH6O0&p3>vA9~!Z%jB=^7}Nb zqxp?RU^&10W1Y-zOiVZO8-cT#-&j;u^1BDt?fk|T`~b8GXY z+@9q$mPbgr1Iq(h&X95^mNQsRlk%x74`sQVl)JG!g5~y7?!__{s!f%0AC~i24oUee zmZ!4Z@FxHr(^#Ita+Q<^usoaPN+}Oyxs>H{DGy?KKFiCboWb%!mKRES2+K=YE|v07 zmY1eoaGTx9>elRmNTS0j^#?0)1;is@>Z6+NjZ<@Dwf+zIiKYk zmQ$rXmE{JOLsGt#<=red{6YO^u#7wf{iQsMEQeMb%8p|W3T*mT1mNTThgyjsD)1<&);v;y6|#jmr!U!B0=CD+AyF)!fdPpHY9Z5CS%Pg zco)}P=+sO&y;*3}I-jBDi5X{)19_<6oJG0#UbPv!elzPf;_qv}H!rMf)_3dVW5TkW zDlBidm?({{i&!n_eYZ}kS)WJ-%?c|Lh7DgA&Ob2}UX5%gd5H2>0vGZg!uSqRa7aX0 zV3Wd{m7AJJ5 zISiIAN#9viUeJMt@#bHRg#%hJfuSc zZL2@+FBzUxyp^JaV9VmIC7H=3`OUP&6G9oHUB7H9{L0yHQ0lZ&&>g}!Ms;)1;GGM*bX0VJn zge|mjnn*M$W=csWx<(Rh_ipFciZ^PEwq-|TghadZ9t$COvvqXU>$LDXu%gK>N1^Y! zlzHWa6|IqRTpAMsRQ}D!?9Re9E3=;5+dDi)NouoqOEOza7%Rp=V7RzV zjfz`}QM{cFflanxT!M*`qdR1AuMRaAz=oK1l0!IqcVR^+VB#_k~ugIAPW|*O|Ze~lSLNUNEj|5yBs4a93xN}hM1ZU&=Y5Cw)h6u zG8zRbV?$zvj%$l}vA7(67V*#G)x6@L#anpAKZ`4Q#XpNT^NN2KZ^R#OOk}aB+=j%z zv%{ZSax|f|{1|#5p~HL>Yu@KLt%A*A|NC*aj=KFJX35dyPMS#`&Ep=;P}2NnG$}$u zDM>Taqq)JO=>VFP6`5Ze)yF8898HZ#Rq9do_NczYHK?kMYOzq!Hl%voqiV!(Z#u1X zR9_j@c%hF2pN*#UbuxqnqIH4=j z*gL={oZi5+_u*nrEE^m|28X9MIS48bMB;S$3+PgL`x{8MM-{(cyk6xPiUVi_QQK`incYX8P zZ!L>AzP9^VHy(w1wJ1ri&e_@)nwDHrvlp!5PdcwHt_&x%EKaZA#{W~d|N7bRN^Sjd zDEC=w6w=rW(8RB|+RBFzsTO&^cu2VMtVa|vi-14{g$yuK z`txVf??f^JeedG!;q-c)9AKhgf_#hF3j{$Oy8(y%$p}(FYVSiUoFVMQGA^862?ETJ zNSA~>Y~<&=`GHJbc6MIN$QL}BgLus}LNaNll2Q{*Tblxfv;qp$Z-{iUN@}zX01M5l zV9+=dk-)rgqpTg9O1Ti(5si>I+S;KizUu1ssl|(#Fhym{Bs|E@T7G zBK=IE2FiakR(Y6ZJ0Bh*M4v&Z2o<4~oVgfknAh%q7NS{csV3}8|? zv&!mDfvu#j#?d9iAW7gK^5}0uOgMVyhZ^(4cUa$O1;ieMQe7LDB34q5!Cd|z)zuvc zSqV6g7@77n#W#`$S8m?02WOLh>U?tx#HN6xD(lc7F)!N#SQqg zh<_H>^NN2K*Wizr^jK_~^ay2A`O`}(Um_B0Y+L{@_(|__c(vqc@+Z{+Z$)MaPkU5j z9aWI@juI-$N2(({s+&BjZlH=Jy&Wi(98K*=bCO5X-=o>X>mcd90GimO=SEYvl1WQ0 z+})z!awZr*jC;JGZrp4!cF&do0`J_7QKxQ@i!q6yY2Gk2zMk%`rx$;j?+wHP=>QL5 zJ(5{(k^d1SM8w2N4z7=4xkVvcrQDT)TO1_`MY&MCu}VX$1cHV$%SB2od8;?8lmgLk zeFCC0uF5GcI%r^Fmc+N^EjeY#28)z*-jB|3SlE!gxvNEX1H* zb12ukS{_SKS=xguYgT|A7Av~CsOjXIZyP~8KoKu2mu`I|8}1#^_-o8^zKn=}++e-3EU7~Cw z7q6eSt>C!2lZ!tr-T>zvpxC3Bw09T(NXjc~XnSFDvE=eu>)YPMPr8_VWaIDLzVvcyG=6xJ`Kh;s@5wgR5*?fSRWJ%u_M0JYN#)&^i%SghL7 z*eKSZ=Xc6ZNo3){c}C&%=kQgnN7;x9WRnFBO z`FhLxHQ~(FhWVDmWc#$b`XgLQ`&KbW%LFW#oLzv-AO@%mXKrglY+mN9MQEfun+e*9sPkh`2o8<`3TYRRnstxIosL*X=;k$Nui1-Q zqyJ#l(7l|~adcV_o& zL)N%G{rQ(LOhrbpcZh_My_h$zBQvS&MRGH{yr9)eZjaQpbO6bif{ul66gtbe-_mMj znW7UAtn{fFBc$4M@t1C46Hc!PXL6Y$w>ailj8~Wjs{=F|qq>|a-Z`OyfcF6qCmf~b zD#bCxSo=DBvF44e)&z)B;wkQfm<|PATcVw0fmy^$pf9mxVLAh)ke}hnZ5o zfBJ9IepwpMT;{q@;HC;&+mxEZhe}5&CATz4Z$1)0S5v30`l$Y42I(>)A4=qtJqJ~y zP8_P4U9i4g6ER37$(|xs%r3ZNBGo0zgs9JbAqEN7rJgaaebjN04MDNxgJK;zh}dQ#vG#7d3}wO=rc_xh>B`zy@&t>4YN9@m;Vd#d zaCSlHOE9qPT&Ux}cUXfNm43IM_oN!Ef>bTB;!IiLRshJ%`Cy_w<*U_Dd4Sjbw*Vk2 zw|3(a+LeaWKx0!zk#8E7E!IUI|J-F%G&PFg7-MKkNQ)B!#n#b%LmUZl-8e&!s-|x} z9;L%F@v%tq{ex6TTv3h7*w($S@H(r}t?RTa2+cAD(oi36H~&aq52r8ig8NI%$V99K z;va?qc1or27-mMr4Vd*DU6=3L6YyOEb{nX-fOTxf?rt1Kk4$X0auLGG&$rT{1)K`` zYX3_&$j+?5_WZ*sLP3sK#(vM*3gOg(z}WKy7!NPSVC-p=V%bQB-j9LuX?m$OKS7$8 zn)}d{TK7&|)^&4YNL_)75oOO2o@{r1wzsi4j(stw^z3`ZI?uj;dpWT0RL{OA3E0{9 zC^i){BEAbAVg@nV&zM?${N461Ovz&D`BJrXUQ-*-2h0L|&8LpJZ{vJpE>Sce%$wNw zKh~q2wSe;J_`t^dOY>558k$lYACJo@8y~D-H+=y()Q?~d$F5WER6-=EXHu+*9 z#V$wVUTEx$^gl$;8lZf7Nx4~VFgm!(It5Z_@4SHm#R%aXCDs|F@|qH2^fNpqhHtZu zCy6oEkx5ZPpBhi-bE1Uak3vrmgnkTtNQHjwfk5aLxZH=(53<_J79#W=3S`e)@=27? zx~K3^xyX+zKY?OqcH)oj3~k2gvK@kWrW~ilZwi>z);etJA#{@)DWo6zB7gA)90u!L0CLI{8POdo@LPvDI3R9_K#sBZ(E_m89V6^?4JIw!^I z{5n>SrdZw9D4jojF;Z2@s-`*z6CT?0VQdjWVxmQFxyS2s7s5Qw6`n(X!~{?MqaM4} zGKzTNB1mLY7XkED5jpXwrVPJeUKJ~+=i!f7tseg4qo`1g?O#hUO==?GfY8hJO z`Sz_buS*o`BcvTfkQF1YCwWNwfv0LSaxYdhZ)buC^ZoP2^3T6S`R~% zy2LO{sr~n@R9!ft)WH#@xG%+6-$~n^0U3Fzy{!*8YR%a%Ig15{-&`*es^eIv=KAlJ zz+6$BKSRg$IB$nA%K1y|{4v1dao)f>uuklb!>H4Q}}}^E9}=T za#LU6zm`O}AM3b7GUZT!-Kfa+>u`l`i-KOD(3_*6-4(hq3VM`6dq+Xtwyx}9yIX%Q z*m#b|y!0%hM+~;r!j7?~5NMbEEVc7C(*qOAsnGLTts!#eduqa&^_9(aJxx>ID?4{$ zlb^-s{yK0WoGPuAad+zhqDFREPO(|lELJ`!m1QRRb6Qz62J;BkFOYh!z7yz|`>cL| z)-PiHJYpNln>r^c>Yyn96ciE|%6G;kK~erCC?qhH2|6kkRsZP(c}7r3U?@wBONF8= z6BH5{N|B+IDa!MLLIOh>Whk>0MfODJk-$*SF_bZivRt^3z)(h+xC0dBWkDfy@yw(c+Y!y z27AoIt5CeVJv@U=@$jk@Z~s&WTJete z@CJJS<}~GUjt_GA~^?m?|FCzTjSvkVB!JZQy!kd{^8+`QM@}mJcCUz zJWPOQk=bw}={CFo26-4|#OUW?2;gK7qk--#vN^{$>2#=>u9t2 z&0w_2OR(MBB0jl=?wN4hs|iV@SY`cwh*oS^<0_u8ig8-ec9p9rwu)P|qQlFsBF`#H zwW8ZguHx@jQKl6?zTztWW)&;7;%KetXce2a;?~uUBH1dcv|^h|^^-0yigs$nnOgCQ zRq(JqHNW(E$Lck!Xr~potaKH&lq%|`73=@&D(*E31`An@THz|DSjAASX#S$B7;Y80 zS}|m~s~Dga=`+a3pj`|)SGd36aN8Pm385#c_`E$S^Mcic9`>BWt+z!?C86gobI=bB zT21J}XC1U$p+)UsGH=b(MfdNELIUS45ljn+WNH2?ZM&!n8PMI01P0L!;|#+n7YyFn z1P0L!qm5xK6b#-32L{m%<0q4EhG5Ka7(_RWcMW3%G3L?84v7?owA7H&1c@$kNF*|( zy9}wlAW1e5fkE~hLk2q?2-vyn9XKQs8B!ZVs=~?G@H{3HheRSnYQXk8gS@C*keG@b5{V4y zO+#8JNK9l7iA09oT8uOEI5z%dK!hL>eNPx(T_biT#H3qvGFdJ)xH}J-Kcm}(| z!>eK=!26qrXRwn!Jkc6>hk1AgYwqER34!awIH84#t* zr6j2irT$WqoQ6_wDM|7|=_DyhmO|+WDM>m)=>RFEX?uU%3|H=b9=Dy9b?t=JSp*aP$6wF>s56pQk!I zFj|i)mkE310r2@n7?c{Cd5~CEpQj#kIJ}^*lgz!|NyPdIwu^ce1%S zTX7RSG3LG+Z1mZk5Pv`H4+_OobvWP8BV-Ab>Fy^DXaj272n6+M3y>}R)B0TjkO0TR zM)t{$As}vtkm|-qB6j*|O(3A#$LB39D6HF!3lMU+p%iR=1}AimFH<3P+gr{awukMg zL1Iv88VnIWWvrZu)=hi?_ID!Ak((UOaRvEFh+#*T&*ABa3mf; z90<46ESRp5u9k3By;wCfQbo=9kgq&pN?$gJFkK&8>x z#_{%6qA=2gTVYGmVZx?%_daBmmUKQZkmSY6WEj#|Kkdc`v?6y^g- z=}r>5lv#-Y@gCkXs&ycA4yTs}>6zy!6Ie0anH6;|naiB#oqS*y<)O+s05?ClA0Y%+ zJSHvbD*+sq*)dg_2`Ra+nFrBzubJ!!dkQcyC{7YeYu6zV**@y-A-?*P=|qe#ohs=py+!w5wgzAnMobmybdx)95B8Q`MOk&@w$b0J$#w{I?p zfNclN7f%A@!8`{f(JTMOGTYsdn?Z2QSnHke({3^7>A0ucM?pcjFtk2>mpu>D2bkzU zbnzCipNs|A#Z)+Ri#ctsa}4^iygDchGIV!+km_tOr;J>lM;`aQA0v(M*+M~CbSo9W3AdwCBGVOxC(ZJkWo4FdU!Nn13CI<+F~@&!T=2o9{9;bHOjJ z%@>=FV&W5k7G-nZN3qCQvz(FP+5B6_G*%6-ABeT7!$$ZHwh4kEu<;4jzHj5_k@X~8 z<>63<#=r@IZExqT4&SyD>^_Itb~pihx9#5)pK^WkLOk0ZgQsr1=$`UROmuGmV0L=^ z=xz?~aV;Gk-7oPzg&*BZ^gacp8Um@JEM4fB#ww+j-g|UE@94zxe<`~AV6ROr4>?}m z+1O}D9!E?JJn#p0x1&5z4}fG&^T0L&_U?hzicej~Js)_0OOYUYWqhjo*&kDnL}=V)ew$YVJ-om17KDVzHbxb zY-a@lykZz)g(CS58zz^03TLE-Cbjvn!+_9)#F&L6Rt~_Nn}J; zE;_32U!e~P$=bmVo#^A>IU_JNv&HPEY;l{+YWYx`n)A{%Y8I)^1wpKDoIp~239D70 zSDw{Somsyy6qx}A=UjS6%>aLKtD*snR++?Hc`vOHJfLyL4Xy|g$IQWuU=LWjh6OtV zFg9GfiE!}n4<}Ettcj;+g2~*I1#Yq+6Si<>DfGo?7R-;vVtT`9aPv9L7?@X|M`S7l za(r3>PsYsfHUeg0QA&IMmq?m_1@NSYQ7QgsK+J56SH1WwcwHhAp-mp1dUFwhx9U+GEyp{maCNwAZ%dMvp#JycajxVrp}r-SSy z+?PhUZ$qfEA+)LM**6iG0rzY7!u@=Yd#>XSuPBFPaFD1D)b)njan6BMJbKZ@Spg$N z$9>5e+a7SdXh%PJ1HWb8N#2Wlwt`dNiaBk*4|{3ZLyl!duv{* zH?dk0a_`Su3!$ahG~7*FA#RI>jZMRU+pqzk(G6m?JnhIG%=lQ8{=?4H~R z??p}8ULFA%QXoUPr~%4)UFI2^-!ApIb;d9*=1hg6;dvx+8GNa^whU=cT)UKl{xQ-x zvvk~@u%27crc3p9REz1HpG5>B?k==_Doh5@jfVaPgXRu!iRaVT_Mfex8XqrkT`3Ti@r@7=H)pJqp>t=}07$3AJotUmkf~4XX`R?zUqaR1J8;Wn0&Ft2ws(C#F z5WI8)`|~}(1ngeC29T|FC*o}qa=w<>#qB!OECyzYgUBl-TDWFm&5|NAC+%klX}1S~ zuVaKZ+?LHr)7@pcUtod62WE78D!`lFeOY+HJBr5&-tD%8oA9+-#`rbaVywwh-g z5Ex<^$TX9boLX*(z{Y!cVh!M3MZ6vk&tU0>$Ii9EnI)SUA1cuh9m`>XA zHDjuZF~w!&GB5w$idnCuI82|HnZx$OG**DsZtk2w)^pX1m`0&Ap1VC5O{Fj$v8Owo zWiwPc)RhwP0RY%#9xu5%@c8q$#dv%X0OIjM&3VCB)+~f$ z;&^?LHXz&B;i$3ePQS`rb8r+8GMyf2TX;~;w0eXMF3M>Y@SFJ&sLB5rw@`b?uo;Lcf34|0Z$=lZtX3Q(La6g8~|b%Od@0` zUPwTU6cTu@dZyx2_JYTP1tquq;P7-`!0i~~T+80^h#O3t`Qgl!mR7C|fEJF`nC}R! zOf!=`sRi)6ou$D}-%5(|4FFMkeQX$}*G2;NuGha6pUfV8RQ1BcN$C5k+AMG0I0P>t zqj>T>k-o*lTLP@Zz%9~Ocr-H`bUtopF1&&4ej_NO0d!#6K9rqs0Q$=Y3#%J! z!&#ma)jL+lUB&q_cLgw;a_=C-$|QA$hOFGS%7H|xWd(A&?j98F_1umS^@>qLj8vpU zf^GZA3jQoI!o-8Rb$eL+C<}+pL2oNc)3Diu7nw;<8=-(+Z>!5@ka{JyUZh&^WsgD- zMY$Q)E6UByLbC?vi!59P@U$K{s_PIgvSuD4(y4sA9pVuU6%z+9wzIjC;oa!biVVOV zPTC$3+Dl?+4X?M-l7Hui&^`IqE*@5a!M6}N|4J}AGQuc98L@8nd=TW*hg+y74hrRA zBdewstA3>}yBs15OK>zFrjunGvQ(_wh(*N)I&Sh}9dMgPZjT5z@!6HcldkEl_#7Xp zKi&9*BJvKwPBwW{-hq%;?v(_a?hIm7a2kY(^)L<}$d_$xP*{TpXQgjexK1kv+qj6n z7#7kBkT>LGcGQXUjmSG6J_XF;tMWk_1Y4>>ewd90g}$1G)0+|fkT`=S!S!6Ax;NnT za%`(9>0kl7u$>0B+$Cyl;`VS{YafNJsfs^bu-8kAWu6!#9k3+5EyTc~iCOqcW+Ijp z6==KBVplSBb7*FZ<42Z?QHKjGKh7ye8-xXCwiS@R}Qf=4yV&W*g)B0^NMO3!|%-qY}7H85~{O zi7AEaa8C?^UypF}$aHzP$gfm@FM?znPXPTXFJxf1o6xF0yEEEgr zdkz8LxJs8%;RdpT8(8mebDnGWgcg#=E!d1UHwfT*0HQ|KFpiOu8IUg}vOlWch&q2% z6|7Fi0gkL9*~P#zM+)FfC1d4pbIp-nZ$$UMTN_!sPn@`uzsDWKunz~ zNLE8YT$@StCdDV}EB6OBbJL0FdHabbnZK}jVVY_cEG!m9AmEt;{?;R8Mn2RNP)5)T z_9~!Mck%>m7ZK2zJ-CZeN%>z#qy_hes|k4l5bP+po2aR->nD4s3~LY-#Cy&*Qi8j; z(;Ou$pPUd;VHpAQ01(5Us1bF=MQlc7xB!>&%`F0TVs&I|#nBw9K=ST;U*H3|A-N|K zw-*hJ?SE%3@#6Na3)ynh+np~Gu5r7qRJbDy_0HDZe|bOD6|YNn|9j8@nHUkEBa!SQ zU9x!m-t-mkUC(N5{94zz-O!I+7H+@{MEPn<$?uNkpo28J#j%D=*_ z0}~4U5r!p*t6KhOD&_Du55K@sa~cQ=O(A>l(r}w(p2= zk2fIH4OTsLjh{e?rdkMKdomahS_D9glxK}ryuBlxvX+tlAZQmgAiRk>Ke-52O^yO> zK=_D&xZbHC*OiLT>!ou7o0(SrMot@(%pVY*z&uZa!{5jW2SC&6s0aiN^+%&NO3Y`= zJxprE?@9uW^DqREY8bYW(>QK#dP%5Mv0A;gr9}0bS-;H9Zgr6n^yxFNh~uygn2L#N zvpk1AuRw3hCxHS#Y{=EYE{(vC58!5sx3NMJw$-F-$zTk2M^1*+wl^=;JNm0Tb=TLn zOq!{B!F<2rx`;_~|UO2FPjC9L>lHuLTvRIu%WC`qy@ z&V87)X|@2~2+q+k)e@f!68^CpB2vYDXLDCa$J?9327cNCc3@5+Ba_#7hzB?+q7maH zIC=PhlU^!yD8>jCUDNg`>3$;Ny<_)g9I4J@wZ_|+;=nlUM>-z8g^9N?2!cMmcw7aSW@5PxJSg<`8+_B4=2XMv~%GR!E<|c)Z=MOo>o-*q?fMg*aSmt{> z7K?>=06g_KHCKh($+cfj@;d+R^@<|>XF4{vEsF^t7XT_%cf2mbhY>?h&Q;Jv7a4|n zaTbBS70Bz(cfl4gzaJnuDww96V6stkiN;3-{E?(dL}O>Vu2X}|QaKu;#O%AS22A9& zJ>Y5Q&{87lLgMFou{Ioag6!|G+^ifZ`h+{N%5Q^vdK_-A(pCN<43wUYkHIcq9YuQyStl<&=*zh6;@HG;160ve1ND27b&UGX z^wM%`ujM4PypI{wjZIowggH~BrA;IE+0s+2)-3ketbMlBs!2-^Mzxf+@0NIO!dmJT zX($(Nqix;mqI|S)mVSlb2!QvIcF1 zy5k-;kqPVxnJhUO>{!zanu{q8B9eMk0DoMonwxFv0Wb`)%{Ie0OlKf(2tbZZ@)wi5 zKDJCzDNY%Ffd@fYG!)`_nWoJ^r+85x>Nt)}X%3@Snz;?u+!Vu|HQ@-n?}kV44E70N67;|mp@6sE!!y|P9^Oz& z2)xIL=LRpa1Yvh89f@9|bbs+-_o3c~4$Oj6l2#rrw3OQPe} zD`&c443*yuYw7_n$lqkOn(x)yg1%o4|3yaGr!gJD7^+WDqe^_+8Y6UVpXQ>o*C+a8 z9w*6QwghU2fhL96xIg zMQU%d9vpz{u6Fv>UVy5aV%$rk({9wcNE-~Do|J{0u?Od|@4)N@u?rh^>jmCNkvB&1 zCEgDc1xK6*MvMH>Zk-jb4$otib?<&Eb$X?zUz#B=L5If;hSm7;H;U@*27}C?YkJdW zGDrW6m%*vNX3$j51mZS~V6H*6^mI*XLi6uvU_iYNTf2gc%(;X*&j6zBEeK#@G^INT zILF8^Uz|;{TL92amA{dL|LoLh%7J);Zx!Rl{v3In^;iPY`7>NnO2=jlxV!jh7SZFagWE1u-gri6!ZhfyOY(3dE zCVlUkEDAC1V;~f2=5Cjs6=4#}lwY&`E~E;{84S9?@kD$IH+3Cuj2%#53-dPCYPfM z*yaQ`W6(%B^?Rv{Oe1d3gmw$TSF9S$F2(_Dp?J+yu*YE=Sng*;HVhodO+ib)e94wlW_`*22pu_P@^n1lE7e1$QczCw z=TwBcn@f4fNxngltht?!g?3ved9}+m#!rCI^tvJFL^@qF*kHgU+K$oIQX#t&jmGJP z>e|c}z=`CK@4709+Sg`&Ny>_Jd!__h7j4>m5Y*$htr!G9A*HE1iXk`K{5B%cJ0^KNNXCFC7Ic zR$Kw=e*{A~>(3x^o;GjkVJ?BgqJaT}0x+;Z%qa+5QYalQWfosq6E0dA9fn`J$Z}Gc zTJwlxnw?^SB|tQP5Sp=PF%0$__L8mX@A4(_%L~gqd#6}SL#4AjpW2H-Ww<@r^+C0W zL^yFR!f(_~uV4`{_%te%OB9HeE~TxM9HkrxRC~7#g#k%>AV~+%Xg1=c7`U-H-qY(a z=vDIywu(5HE7rN(g%~|OCD(J?ESSr!aMKNlGv;Kp8*k9^P9I5rT8Sw|lLX$L{ZiJ6 zh+*6w3}X0c%)S_r`UF6!`D_tvB9ZE+xb}+7`_i0VM7{6kaX3{dCICZ(aUJ|A1^~}`0r+U7ImJ%9oA-G2@qQ#G71)xL+}W~(`2F#21xbw z(M$rwS;hy`$5J*wnUp$l5WpzKVC9vQ;G1|pD6Hp{jHw@3XFxSLKn6XofczsX#k<9< zwXY$rAi3)<61o+ELEI56|6uH3N2NA>43VH(Kfs`XN0)hwwmC-bfB`Z+-60$In&vMy z&x*MVFNMDT4-ci0r7o<--UxjqkqhqMfooM4vnswRxXnqSbZc9*E5jlg?hb_Fbl4Ya z1v;ICgUpJ*y95ozFn4lD^*gLq5!WHMY+0bP&NevKr6pIx3;ju?^G6*O3%yXz?U z;uMXd>jPdj1b0-MPPOrL-DSmZWj3rL7PQ=+IifQ-x9v_b1b| zn0$yS(ktD&%HF{kP@LXS;*Lu{cLRjk-OM?7j6APgk|8q+Ndy&+K~Wrwm5DFF+r(^`-| zr2tijQ=Lz}5E-jTCkm1r3SI>y3lTZ`%TtW^C|*Co+e~H;7#>1oGg%Uk{A_-{Jx$?>8DD;Tn6l<+tO28elq?YY zAWEjW9jw~NFn7~Hc@`1MYMn!#1!m+wOZdzD@B>&H>FH7>xCaEpxKl9ZP=ZzXj@|F)v_wb8I!ae93T-XI1k(y`?h^tHUeiba?;arOyA z)|+K6i|nMj?ly}I(%LY3kdYhlmU1O>_e>=^cA`tsoPuE%JqcTW0M=cmLgc}*fpvn( z(hU3rqfF?_s?uH5$0g;+lk({)1>PJp0OhydY>F)X5!NB_mDV1I?bKnuP5a- zLnng=<@mQCNsk!`B&23ZzCn-arFd%uuYxl5H9YjJ3egiii~Ou-1zB|-mgo{-{$@{# zTlsHDuVyFG{*p9-o~lOk`^>7GM@oM|fQb0@+Fzz!NBXJ~cXoK#SbDm-%c{~}Ql-Bz z^5N#-tzF~XREc(|6#bS{zpD4Xj@Tnqo?8%k#h*Ln*upAGyPnM^yw4Q5fWZGdgw4*C#}G0XSexfsn{%bjvpUoa z(l%dlCXkoskrl0}?L8va_%!??=h7uEqlVL^E8Z%tNH^qm!`UlDC8c{GbY#_0q>`8) zB>1z~cx1->&PWDe^h2NfL97VIN$oK^(Ff=$1Qk3KFq;werGzqRi$1`Ot<#vRh zqyB@}h#~f9gsGyObj}5se}pj%$z%9P_7xULS8@#DX2o&~-Z{9j2neSHk{>_FcHUnq z+?G3FlwhDP7D?!FGk$mZF2}WY^_c`e!#dhtrpa=ZT>ZUcv2IxSl_g zBHEm@Q(Z4Uy$_B;ZfY0dax>b%BTw*Bs3sNBS9cC9m0b04A}9JuodBlg+CX|>orD9gDtn79WzDf-zIJ$QICTr@`=^%`#RhKrVpOX>+j z)O)(L)*;2=3rFIT<2q16v2z?XA-D5hWx)AHDGkt&D#DV8YTYbODJS}f1L2g3zV2Aw z`nnIH?p;Qh?$&TyFczPy@8+mLp%}O|y+2oDh>_ZV$$iCgXP9m(SO-`#oW9WasZ>SV z;U4qpLQ2k;U^t%|mnX5@GM}CWZ$}<7?E%r*L zlq;R+?Nsy}C>Ab~l6Yp28sgh)2+u_+Jg=UxXkF6uepHd*3ng*c%=e&#VgnsDA^+(` zUV@3zqf)Z=pTn{cLug<+KX4vL;6ytY8NoNg5*p$1Yt0BIK|i$MJJ(u1AqH+ToCX=h zXm5bMBwU#!ALSG|$b7N{)~@T|#~MX zBrJ0O(>)6u)V5Iy3ULw)qT>bM>cy_v`2*%lS)1;lXC<<{LpJxGtywyVIQPz|GHx}v zFa+bb`$e*}Iq7AI zn0g?XxQPoisdv4_2A}RH`EAP7WIJ|Z$iWS2GOKwLAU96|2btD{i-u@_`~F0S-Uy%S zTx5Zu%k*6jV{U(@x|b$vg@SXt&y(3^6A>#ubcP&K_r}Haifh;UX!)1p55- ztq?|mu<$S4Md754+G?T%?M@p1biO zK9l!+$m?Oj<+m{oYYec+^?El7&JtiFGDnu-zRM?{HcQvb^6KfY`p|s#dZJCMMc;SRWm!u)2Zg4CKcO#(6ro zf<}>B28GbKCKG9-X2u?;`D71w+o*{4R{?V+%pEGMXgloM;`-t1w6`uJYrLpL`PcOn1tRTgUhW@HTJmFMib|_} z#l6)ao+nsCg6&8w3`Ofmlxt-?0>09K1Wzl$Auh7`rrDai;t{Zh1h*=|5srW_kFB{f z9sz4eaIq2`;|TbQ(VC9&2v|dcBbA`NBiKTMo$;*18WPkFc1rhj1boV^W?ei2){tPO z5}fS__`GS&{qYD`LxQ`MpuZ#FvobX!;}O_XG*>FYg^qxSK5M$gBVY|%=%@sjIszWq ztZBr8yGbCkh6FpWa7qt$1Uwm8^L9J}J2SZs1olcM30*LGwTDKu8hG32_w0xT?VM%=dWjGna3C-8*8*^cY61Kvol3jgq zMuM{nApO#l3KCIWcSL+dRG9_avH{@|>bn*{q(lSOokJj7O@>f?*V=C;bs{)a{94c^ zMIO{4I1v1PhU`VoE%)t_me4Of**F|Y4rvLV`JRPOuz%^(Bs1j!k#1Oy3@E=uMt=jg zA(T;_==oKUaPWq9+7N1sI$Yo$EVDh5Qc5#n(8eu=^8fzO!p#Me49?J^fUq>o4<4NRmg_+CGZDC~c(CJ_mdRGi~$35b@4WW(BE6CjJ zfgma@m$t9PTE(LY5ViUPsb*_(%sHx`@4z0+zWe!&gJ?Kzg=;@g!4URW`gtD^LPk9~ zAp1+~>(W8iKqTwum;nX{3kCtM56B#gOOQ*Bt#2knl61+)K2J~P2YF^Q_~=~wadD{S_|QHisHRKvJPE$LL?l4t5}jgo6o{6NhOv9LzpPqo z%iu;NT*lC-4acRRmUywPPNCK7V5yA|EAUwZ0o{dm(V zGpXdFWd6M(Dct&C_)YSIHnkpWE;bKFYg=T>947;=NagGd#@rWaNfarSC?=`PdF06w z$EUt)G2al`MLJ)Lz5Sfy$wJRu2Fc)(loj}$!g4hgAQ{b2WzAXc1M=SZwTa8mtjnP( z)y>d&3@QUD(FJ62Q3cLiWG})xFoedtmzM~jgxeiSA)tll?F52lqDwg8EouOy@D=_I z6=)3acN~sA%pnsT-QI$ll6hoobh9|?!c0X->7a0tuw~>H)esS}vfs~KZ<5$y2pkx^ z&$|lzWxXxcK<)y7-Jmttk$_p$&c|UlMlHfFyJs7!m!DX(ZlJd`&`4&!X%FLV2+el^ ztdqUpe{yl1h8qQvTMNrmDdi358kp79aL45Ki?EJ3%Yx_0sIx`6CdX-59h52&OJWP zOb>^0Dxd3poZ%kMvk{#AeVjkI%u{(@jNtr6u*v+bhqEez^No-5nTPY5!@&$%yuj6% z47x2~U7a0r=#04NF)zw`T;TR9>p4Gi{;}A&8QzN!<$y?X1JeEh05g)>4B*r&(zm1O z&y1q)OnSJB!-mm+(BJ6y7Q<)!U@_cMV%T2@{REB(*21-^9OyXhuLZ=U|0fi~^-f06 zL%5EP?CX#i<3;v6XfJxk5wXB^?cpTd;{82664~+k-t7%0cXP;%opk0e^~+*N$xI;2 zE&7b6{HBRA?Euj&_@_O+-a0>`*K4?ro=@D1rMIV7y;)`#}3>2-pqS2u_j z+hhOrz3J5~;t!pjEJhs!c1t{oz?WdLCYpwtXxam4s_8mhng_pxEat(FaE*zYmz(~H zod8eMU`lu3J~aL3F%eDsB6ck|#q;1RxFbUYq$Rh2rV!8b;N*CERRI_sj#tC5s@Gyq zuLC^28X-lr2j7Zb(gq&vP3vasYqMf{pRCOHe>39=PJRLXjEHW>IjZM3=aUJc!1NNfb zWLSG|+8y9&_xQOH?czn|34va%oL*jJ=ET$M!zOx_qdC>G7DOeh*CCUwiw zjR36yUFcQ*p({AOYEdv!tvMgU@TW|4l>NcQn7m5^jOp4bg0ajnw0FJAF@g{3aFXmE z1R^aa08zgYc#+03HZ@Zs3iv11rb2Fz z;D=lsMJek?vR;4BCG&5LVF6zRaP8+BX;iOeL047pEu@DaSjt(@3EJ%T@r12?2wZU2 z%j0s_fs& zN^=gh{7hb0@=5LIRgb02U6=Am`El!N4~fvOQrcf}hliR7-PfS&vkvIBHE=^y|F#PJ zD+k+fCRYVM+zIUacLLW@c!o?des&R{{uM&qML8O@d+~2)`86IKNKpUEHp&igDgo@1 zz>n?m%OmcIg*QOpofd%9-a)|10|gzA^*I>-3hlJgnd7r5WVXyG+B30;qJtg zS@+_y_7#eNrvtX2&WFQT)zca{96YE;R82K00jn&LB5G`|`Mk6N+1F9&{K=yOb z0egHu-4{)tt`wgjt_jQoYTa=P{8)j9I|ULxuBmJO@pt^#`lAmpRicqmE}Bml?N6z0 zmG!+HgV0B(zO9xl$`%)(5l_|^Fi485HI$yqU*LT56-2#6rRu6uy$;Ner+=OD-}JAS zCy&Kk>*Mj&+lE(tJpOAO>y~}&I^H)RJ>Pc3?@O^NgaaTOwsLL078R$zp~`$S%ZU=} zinw&&cy#Au=zt1)qjQh`X|z5MIxlS<;7HwOEyihCd9kw)Ps}2T>_;42h-L30QmWr) zwXT^q^l{_AySG9k^n{Dee_VeOc1j%B32|UY#ep3f2X;UJ^B$k$j2La5h31zmRQ;PjJW+DDYX~ewLZixzR2wfZ2eoDw8rmo|DSZMa0YgM zQmy|F7NF$32brMIMyNONg4@dO?#-T_djALB8H_f#lMK|v(?PP19k>jKc(g~JihG^x z%h(t9HiS#g)J*9=gxRi}gl^r@h-z*R!q=SeTXsFmMK&L}c!@w;Y-t$>)rA;5nlmCQ*4;gyhLM z21T9U5uG>E5Phnsvt0H>4vnyT0PG^A7kfm^n90XqWJ@0Ot9!wa^7u=&FfAw3FFz;K zmG1GEaueY^)?0ji)Cc7P*}+2Bba-!wu97`vi1(t zLWXc&Dl0OiVj(MXglxWRd7-s@BJzc_yd?My>fr5e`v-NT9|RfEAxo~1+k4yzdIXwB zo<@4BJ2=_XNaJNx#C;~7wUygMRo3Ds>!d|Ww_K!~P3~`Qx1Q!s!6VFO8^s;yAbyXQ zt=<=Lt{K4E8!@A|=Yf0)&Q{>paF+XhlzO%nJmr41G?>?jT1dj2J6bs&3yzQuhIgjt zw=(NYW0T5{&txF8dXS zL^+!vPZ+|}BVpO%^iTPW73jX~N>A&fJJSMByPqHwX9shsZ(j?XJxH`cNQo)7eM)UQ ziMZXIkPugDRopq~^`aAz%tx={NI$)P3#R`nO(M)pOWr2@tNwKSZvlToiv+q`q1g(( zU!bWf%VmH@y3Bm3Yp-=ZMb5S?iPZ(J5`KdYE)pi8I&43^2Q>s;kzO~XkRXj9C)g-F zk3{C0g@)7sLBsPzTtOm{A>Cp~HG(uQ;6x%ry3&yNu8r_KF^6y>ks)>Wk?7Gp86McT z_ZA8A#4aM?@9=#wZiTu#o*$nUKN2>&#*#{~LQ^|@`DzdeWny9bk-c|6VI=U!o5J&q zF8Wsk??7J>I}^zw;l<9{|GCm|()vMfY(c%HBm`wF@uy=zGG1u5bw5}84k8q#b*5^;qSi45s3ABozm zhb@}+S!NyUv+}GcJoPkuQ;Z)QcRw=K_0;&Dn(7*Zr?yy|eb)q@Y7o23AP(9->0^2- z52f%tqYKZIT2*{2Gce~~L^4ku(8+mf1Ef@GF7M)dDoy!s*y?*~s6w9uG~%h__#l7L zIIWw9I{ca!OX4Ykt1N>|mJC!QT@p#`E9i=Jk|7Ngq==_TWCm$&NPPrJ#1&2?GNjLt z#YA-?(OT``x_x^}9*l&iTEI8O*z0hIe2Y%@JT)bfT|2qP;HgS$^WN2gr}~Ipx@p_f zKcZdQql8~BRyzFLrn{0^UKbOWNam@LCyJ-)+N&r}Q7}xGzQ%OvYismAAi2eeZ2{mG zX)u%1+oA_y1?SE0U+YYxl9#~K zL)_C(Vn8L83~Y`0C67G&X9C^8Lrfu9O{TL!fGJ=%Jsyo4R^YgRHD}4CjBbOmR*m^- zKggE6aBHGGC)m#ollGio0uF}PH17;M$qs=u^F2+<>A#*ml@>mU0ZLmtU<_hXgac2B zUAb*SZDi#Zb)qTRP4P=IxXCMq3_L(XLPl8t?}EbEYu?EFbH9Q=t}A){Ev^}xpw*7> z1u%oQjN~(-xfSCozg}T)0alV)xHh5W5Gc_2o}i=B5$H|s`fk34*eKKH(`*0Vp0t(0m~L4>U| zS$Bwl>uO$i#C7yN*E6Y>JM0-bxN|KGw6~iF->^HY!gqJF`_$IhHkbhN>EQvMF!Opf zZ!XAj-*o0@Ipsp>HKJ-o1Hfq-GElg9B`Wq_b-D^?caPe=ED3i51FEY`FWDl|o1xc( zkat)xTP1`B?$x2D6sUUN<-j0U={-H9D%VlvaN>6zBf8&nlIb4N_Zx5$spM{o9?cSm zRH6o%M4mvLp-&KZ!}!LSpXwf#S;5Ru(*c2u(W%!qXB`(SbiednPcmqF0QK>MW5q3Ivbn@4uLy@cULhIFTfdQ z7}t9f`l~RaM4a!LN{H6fGrs^;Ju|rjFJ=4cZm@I%N?a#h2uwel3eA{Q#i$#788|wdVsC#Ce-&D@_9)s^j&D7|e-(88iDY zV-EYvn2E>#RXI=ccp`%IgqoaM@kSM%OEkMKhVgMNqsoK0j<(P)U~z*?sCGV~$%rxy8A9bg5dE`>+%T@B{mUI* zVR<{Mu@X!{rGv%7ZU4iTFG1AL(i`OQPuTKh6!&GzuOOz%G_r|IkqjMJN8WREHZW6G zr0<%oX_)1xMlg~#^~c4DrZe+e)UdErsz4Q|MM>XJqXm~_#2+iQ808NQ7BA`h{&?uP zCjO{BKG3}{7B12LfKjkjDcyoXWk}fS8`C->{Yz#HcJ-b^lJYa7Z2VloC5w$&RW@dA z5!nUdeXg?HaftW8K)HX9OIkA+#)FYeh#muxpCrXT50D0tXYZ!w=>AFz=VZmN35w zX0Z;?7rw%^%zIA5b@aUF^;U7_J!9VlTGQh^!g|Uc?Ur_GPbOhk!aLSkZ#~ua=um$JoL!_btWtw)h(?#7ui7Nr^{mGC zVEfouFso)j1ddmFF5wtib0bfP&SSv~vlbiz#u0OY3}Gf%SGx;YF#4%Z zsR^k1i=K+i;re?-ku_A4C^*qW`yWwYPvc1#s1hl#Z1A+5971Qj$V%;02HWTG2o17{ zbFK9yExCHZL2n#qliBWSf{_Ab!F5)L#?0y<0;Bf;z($`B44(6|4saiAE#0FN8=3@; zQj%VG$getnMeMS8J<*%?wHwfF1>Q-SX{4MBhSpRHnzFvug3U$^E0=GuzJ}I-Cey>8 z+KF@&?P74UtdEYP=i#Nb|A%Xs*(p_6E{gwn0=Wa~FDayED{5>>QMKJ|HpE*}aCbR& zNs;+GVf$E8bg~{*f>zXdktGGg%?1E}(be!voB{0rBkq0RteVz8{(WZ7o=!DtFfx*y zQcR2_AsM7Ul)^|7qM4fMpJ`@H6XV{ln@Z+V-6Vv;APGqbNjHN*2vg>gjD#@#;SL6a z%=x{awf8<}opaWS>wbT~pO@Wdo%MOvTF-jcv;OWsbBn&T4^LnRc9Gdn%|!>eyE1IK z|4)uy;Xych)@qQQkTyZ7S?gm8^@iY|57CBTcgVV*k|I4YNW)00O{-B2=q`xv#GzdO zfODUDSIemHJ4R-auLwuaBK3^eScjzAUC!XE##ux)+M_6=l#QB22540{$*F?g+-l_A z8jLh|uDt0?|1vfAvJPTGTv*#dwySl_ns5i%$!qRMF@&+X`@2gQy}3W~YVR(3>%_3X zG>ehkJ$9Y9UO50alFzjuaM2Hr0KrP?6gx3FD=#H^43crpJxS8I%i}h@GU`+2uzM4+Di;%1Su!Egu(Y@WR4%4z4V2^X^qCQt5 zHF3T75=!0qlBx`kUx#Z@gER$tHE@NqR1LysT92qRpdC`TCG4qq+Cj_VGbac45ePSf z_O!EC36(CFbY3Oq;%_2Oc7Ofev5kCc!%e#CFy>hIK?WsrF*07#VUjew+zO9z@-aYv zKfZP1=21u<-qU}Vi_6J5hzyDFqB^52Kh&t1>KvQ739qK&;SE|Y4(u9rFi$iya=K5L z+=G|xtizV_gh{<-i^YgxP4!oQ!Z#>adTU(wt!KYfyp1QRcAxGu0MnFlm&-ipe&tP; z!s}U1s7yCV!h_!t<1Lrq>EB7PUV@MC4BGC&PDfB;jc+?f^A_eR!G0tVOL~ziX%R_1 z^X^F}9J2**-OC%ib@%^@IYDXWJS2&((<3oxb>x6b4yOfgMl1h}>)vBNi zV@t&BM>b)0d7Mf)VE712rgo(TZ>86GJ#&v|H1)8f+lu#bNGT85DUW<-W7rFSXcR?w z7Pa^8vmE`D#0n&Ib183pL&-Yl>Hj(q0SppWPQY`H zCDM#pOlF?%tB6Boc5_X1zA8;yOgcA3^j)IfIOlj4Sfhmm1cz-DOpvqh}K$EETXITSh!qGz1zLWCG*vHzg1VcJ{;-k z+&&URK_@Gnl~VFIW?c2Vh$=Cz?5Mv)v`ca|^}2#e{xzL4u1;IrNJ+JE|8Sj5{UQ8! zyu$tARj=KZdFD%2Mx7L0q?I%-Qc{jPkLuQ&>gB69?&xr&XQ;CxF=*e8{9WrLC)7k4 zVh67{#2MmUH&P7oN?Q0-gOO84U%I6wOdj8t^On3jsRUtlBKk35XH8|idvmmw>?tRi zx_h&XaKp1aHW|KqlR-fZZ>>c^)7_gY5skfj^AOUeyEo5}7wT(wZ+h^V8FzeG25Go^ z^G~9^9{I2KVRvvE$$di3&0z*xZiXr?`=cTAo#Hu)lRyL~mZ0NnsQ4LMy?v;_4uayU!v zDpdAwC7iQVqVq_k8(1Z8F*Td9et?1 zPd4qN-7A}2tzwTP);so?`BCD1@V%|nmR>%Nqo1F+TjTJS=|7If;%4sohI=26sZJdL zw8r90D{kp~5f5)EoV!rCkhV7L;W#sW$rPKw5rt?3GFsQ z*Vd{L9P5bnpLtqYzx}i7CVGW>#CyJa319SdkGQHR%d15e_9d*2lY@lW=Ex?=l`LAV zZIrxPHAq3CPDvv%?sIQ~APo#|?_sGDZMml-iXsJ99 zFpx!#DD#DT2=pd%q4vtc*@r~F4|@ut>gllXsf9Y(i_Y(Rrh7fVzeMLJ3l{HdyE_R- z=jWXLs~e5&pXEVYHN|mzm9e!4t7&KT2+}n9ROH zIvhisXLkCQGln@Ysi>D{mAdkFz~mR)o|Yj^`QA#`{IrXA3)M-h-D|npA)UKQCp%+> z^WzA9%+HYr5oTA1`^D2}&eRe0p6l-3PBP-1G;)|LF5vcwQ<#xs)9hpC^DG{S?bSVk zHGVZfsGZLW!VMot7x$i9V~=1pYMx9U$Kc(3SQ?4{6-`Si|#ji)uEI0QD?DO9;XvDlqzl#s!|{ot2& zIQKW<+{Mm`R{TBxS07b|kA9b}@-a7(u{-=O+Y9(L&83!ZC;ODw)Qi^~LpXYdmdCQO z7uDCSoKK#H8CsoRHgY!ZDY-DzA}a-FL=u1a2NjKcA2jZMY?&C^ee~5aO~SkKPM*@# zRK=3K_v7V1&jrV09m4AQsf!6mH_uOez&YGE{!CvEJ4%B7^#3dGSVpSl4$gNy;(DX; z6snD8wk+BUv#GH-NVwq_EEOJ$o_Go04<|FN#+4uMtHyIE+;fzEEs+}cB-~J@*H|=ZxbWcw zHNL`B<71IF)wq3Jjc=i&xHX<)uJMIhjR)^_Y8>zP&m0h`&Xw53^ZT)cqy7GHN_70* zo3&CumS*@k!})FWj~!a}sZRFFKP9Q>>9A8PHQmafiCFk?Nta&GK-MK_G?^@9w;4FmLgs%Pm>L-R;K(CV3Gs^`H8 z>iIbLI-=|O1Tk(s?t|Mr896{Fta?$6Fd zij&93BJ&($80)e!Plj3}+v^C4>Kw##pPD8eZ-e$@I3&P(zPNeHXi`VmPUb?ow1I2X~% zxs&azyrY&DHHf+95H@aYu@e4IuPsi|v~A^R>#To&k`{7{lZQWKnMYHP`A98rV;-(J z?f&S8D{TChzr3S$sD7l2TI24K+-_m0oqy3rZ$1xg!--k=cx&8Jp`AY_c=&s`8_V52 zp6oJaaWeF7ux^y>e%T!H$!~sWi93&oGV6S`l=V&mq8jD_eU&SfcfQ$zX0A4a@oNb> zOSy&|_a`buR=NG1$IhKqu2S!B+A8;a)bm=?>+PT1XXx#Z()(0z&(wPRZ00-sO7->& zevI_?!GxoGdq2}E_qr-$Z_gAP2FNh0o(-eW2iTa{M?FqQi;9sRMC zV3@TL z9eXZsQT5sP_yVJsEBhX@9`(9VhDSQ1pCrj*s`NHV4NJtcu+%ZE+rnK$CSi%3O(enB zt?JKgd4MH)PkRIV7}`zkY4600gw>vQKH=!Ef=XV4$;;F8aP)M0qjx~7A3I z1!*KA)fD?pC3!l_>Vu>MhZpaE6TvOJlh6loSHVUeX%MSL{;F^O_u>~yy-y)$*T@t4 z`Wtv}5$h@a^S5E8x~g z()CLHux0oAZi1y$gu_YYqq6xe#X(h0%0n-IC+y%s+`#?P%h|+w&-y5_lZcS&cn76B zMA`qa(a|H9N@S`lDPfC>$2M%#Xm>t-5Sdfs=8%5kwtskkO53W&|C&-=zfUFueMS_e zp8nEXmCGy{HNy7%%H78}tDUG3wn5T9&z{Wrv#07Dp~n3Q6B%Kn-qld4^bz)JUaR#+ z*j~(D&i5!K?`!T-PS*a}i*~46Cv;NohJ=?=lW+=Zs0P=j#>n8>Ksb7Em5 zx^maGWZ^#T`2<1lA$!H$ON8#qbbGq96KT7cK^tD$ zrAkiSa*JP1GXsBpQYIUD=+>JYLp!BwdVfbFQ~7@rMd9>K6*5_=i7D*!IT*p6;0&_v zEs^ftZiI97aLNvmlo<_wleVKWC$;fL181ahsyLrmO6HsXrnzzOOOd(pZ(pm{RCD81 zgyZMN^U2HWNy(T_4R*?=GV8cDU5lBbY-(-ChSy{*ol^Sc7Vt~=}IwdScane2AHw?T}kH|r<>HN+a zX`Ei|muA}birebObA#LI)7~(&hc{~ot7(2a;f8|N*x$RC!QC~h!M=@-Z8|@bzZe*| zm;Pk2jKT5m;CG==>ZUCWk08cf7#<*_O#D0eEF{CD>QA(yj22=a!=BEynKLyuyhBaI z4nN^DuJ_9=BZ;~Ir3t=nm79F^vR5O%x=H$?yN-L6aCk2oUDi0atZT?PJUDr)#&^Ba za!sZET`O(8R@%jc<9o&}Vs3X4w-bNytl@ZzTk|@SN;UuOY2)~YL>=e#(jmGoA6p-H zq?T&s`ib-ux5n=g_Dt7sotx{Gs{1=dx%Rvz#kFTIJy-7RRU~=YR%qGI@UoS5jMBWL zTSi%Y8Si?UXXs_fpeXkj-_Wdhm{!#OswmG&VW0WklZ0@ebM@bX>0-inOU$9vIgv+edmOs}fVM z{7~zad0*-yvF#P!&wcmPA#cbEokEcMj{&U~&3BS&DE#rtH)MIS@?~x%}<#7hHx?2Da zO0ZguuEg%X)Y+1&6zxc%uL@P#WTf=SN=f>F>sH?WNag2qB}L!|e89Nk%4pao-iF8t z@uS{b9D68_;ji+_deOPhog>>=HRkQ!5gGG7AsiXy!y|^7vu2*Mo-B+)ER@~j) zRn2sYQoXv2aKpE>L%3JVlCj~=`3ZV;y@@T*2)Z9v zGK~@seG)xN*lS})iO;vij1n_r*KraNJ4*bERFQrwO9PYC9cHPRQQ|5k6=x0JMl>5F zqu~hgYD^*D*4MR=xQl6Y<-2Q?@5Y=toyd8==f&M=F~VwHeTW*V938~oY$ZK=&%%UJ z>*ied&zhU;eIj*<8kJv&wfD4-W9%J_wYNmX+WTBm={0@bGD#g}mWr{rPf11UDz`sf z-?|<3qv~4izFcXl>rnF1>slLE*Bk3&>e@H9t`ZSj*E~{1*VQC-s#z+gt_LZpNL{sd zeH8Vh>Y7`hct3PG`RH~1A+D}>e-u;KKx|zlBDSv6NfljJlhpZUshGOk?SeO~4Vl4Zvl2VqsBkJ(Y*7`JX>imuQ4UNL#3sty9yvT1kbED(?8i zTX`AxyJvkD+3)TZ=XY1ujf5K>7tOr=ZYFNlaM0WYbMO)ojh%!4bAx#f-t?`bXyiGr z3+u!C-7FL~>~{|$+OtwCoCzz*!qD_MR{A2zUM!%W*4_STxQN?sB`@`eX8coG*9zzE zB=5twjQwmBjuO?+w(nz1X}u-7pG{mJ+t1GaK<{Tf|13QV*L#nrp>(g6xMMxft1x-q z4Lc*AcdT?d*Ymm%_SPAH)U%vN6g@xwQFTxClqgy}{14TFqR@9=^KdS{p&!}IeLq~B zoGnD>v?3~}%Og20mz-j{WOgJcHU4Bo2D?pIExHl*u|S$bKKfwSt~$06UjDb+2;uQ( zVeI%L5wTUhn`C+$y>6MLrkkZ=Dto??`s4jyUsNU>B>uk^l37A_;o@ev$1xZ_s+IbG zl6XqmRu|n$sjtMgQYR$TW;fhQR%|OtL~JYl@Lp^ynWWw|OU1O(BXLsIl<4)7cT`{Y z`pGf>4EK}5#`u16h001bxYJMcoaRL3^yz|dPF*FZ7^Tv+oEmmZ&%pM587my$)K8=@ z{!!)hx>aHtK`tS4uP(c#)3_tZCxqkYu0zPn8!fNGd;bgH6+h8#1tin3QGQark6QuH zZjSbo4mGiU(zGeoPim=c)TxL>#QMqGB#Z9NCaH(bQZY?(eVmls0`P3R3~SLv+`9}t zxYy}+m?_N2v1*;9veNuS&uL6lPM@e}G*#CNN=`9K?Wqlq%)d7R4TGij?5^w4QcVB<*(w?auSkdj9&lm8+Fp>ZEpUHuQK9@A;K(O}tj01UBr>@_`>$GTJIjx~DL~8dQ55l-PZ85C*hj=-yks~WLXS35w zmq!xig*(2b?j7x4oup3SWiJ=`P}>@wjooLeGGnT&-$^yWm`YYK`_gcRSv4N4 zkrSSHehlE3j7pDM#E%NZSAUB9{4y{oV$Y<*`2cg&~^ z*z-MH%<&b5XXP(EoObmBbt@cUg?wLiHc{U;fJcvLmhe>-c=FC4U=(zR++!!Rucc`iwY3 zr-m0_<>9jzHpnfs+466X*Ix=H-4H74cKna-`3{{%8pat+LW`dksoAgjPH8FKHoK;i z`nv@;ck1@aLS@qij-5i+zp{I^61>F;J@Q06;CZVF2A5~!sMdjDaTzn@XSk#iwcgruy}gu_=4lg zrcWE6S9I;M{Cn*9l9J=DEGR81C_HZB_@0wWO01G#m(zk{#}-X5EVS}UO2?KI7Z++# z6UUDoUsQ0-*pjkREp~kI^rEs0%StB~O&nNUGPz({uzO*C8>{;?tNVDXd%o3uxC>eAFMfY`H&h3)jYn{eiE*v`74bOz<-BILjKJS89#V=PE9mW))Hwi~Ow9 ztb(hi=M|n|9b+A99c|@Jn^rs?QIX5bcmEYo;e7cwfAX}F!n|v(!s3b6^y!oHt!ZU> zrDgnETw)C^EG(FqR~RfTD4#qYoOW$dSzdYYDC;O|WN~qDDh?COE1fufYC#dEoHo6r zq;PUUeo&DU3a&A77Zr`eFY<#|=ao**8&_Bmv@R;TvZ(l)qF_mB@%V!L>7@n1vTI9- zFThyA@r8NQfyvW~jw%Zl=1nV$$QP8Clom{zHo3USO<-9Ai>DXn2aAf!f|#YKV0>Ay ztTxr-*ZFXe=HBpU7hrre< zBPn&7MZ-!b$?QhOyY=pIsx`T2T0v*S&d#nG{YRT_ttt2K+DT&;NPHs!?L#JL*8bm8a>qOZ~{f<>ZMLH@(+QqYp+Y|Otek4td zFVJsFuZ@fzEo*Q_ogU8&UgXkBCKuY|nPa?ZYxSxJ0JOc%6* zQ>R%Y31O+8J$qW`52N0HYTYIa0=07MGI`p0lM6FTda_o)-u!O`$-0NtgVo67LK)5b z^_zO7gqe9QTsSBTl=#(LN$KRNlglPw?JZ}lQyJrA!NS;C*2U_{LS$-*%1}FDFqA|h9pt}-f_{b~GbRxr1QmyQfrytoPc-b|R z%O)XxT0~wAK$m;j#o@@KBce_XGrgtk*s`OIIS$M#R2IsPRv`RKm3Vsa^nU$hX?bl# ztdvznY0(HZXhvd{_Hl`Wr#m|TpXlfGoIk3NEA417PS*5c?c5ni-16*#vYdj_3HZ)F z|NCF`m$KuPc6Fe83@O(#M@iK%&FX80OQD4JlN#+Sx zDcWK$(lZ&b$4@UUWuv0bG@0d$VpFe_6HjLjoIKnPJTuG=e8@GG>o=}0#N7f828WKc z1Gimh2cG9Tm+NCLA8}WK-N7oZ4=-}AM+tWuWe0M(ZYAy}P%6HBhaGt8H9N45t25Um zE{XSl!CS0^zvH@zo56Kl5?@Aq=hy8(CRZ&_vUGIgYl$C8+!b8e#LwkY`FzQPD~tT< z>iHrvToRv8{7uL%=DL?Br?zrQ{Ax`;3zA;*TV*7gxngcA$n!zlhp-we!y>f})Ok6$J2z0M>^a87wH>JDlK48}JHJ7DaUIQz7G+!#zgLsL zdO3P>Nqlg3q}jVUtX1CCMr^oaMJ#Psc@((vz z!v2@QI#Q?Yl&SYYbN-&&?yDxQ!=R(&+aG_G@%F#e-z!Mpx-|8_v$z^v44_2f&Y_O>{Crz zL%qcBBzq;(yzl(oVaZ7$c?Jz_m$-h$@jqO4u9lZU&v8Qw!{ZEfJ-%0Do#|9SY+gkk zGVdlz@7ZyCA{osVe%%k;q0h5Zrp_II0@Ioti1Tkj-c%_=bQy$<%$;Ffjz59p<9NA3 zcMQV z8N38c=ga61g1x{O!QtS0;3V*Ka1Llc))J}$PXH@<{O8}`I`G;R z^*aGmLA_#-$7ob_}|s0m!P8hsD9tk1wc;J087_|Y>hp%QSfV9>I< zKTCWUo@FH*(SOjhaZv-2_D$vgpKF@>P(zZ5(+2F4)wuExQd#YPP zGr?{zVPA03%PpY|V7pgH4|W0lnU-}L7zA^`Y_Jd<4enRd5}E;i23CRJ^Vm)e*zq;| z73}#s>Dg5Vc``_LfbW3A!JcnYPjC@WQZ5G1-q;da1MUUu!N#{+LOgSbgZbc)TKods39bOwZ^FLdtvrt01bz)>97Dc5V4V#f#lz&e;0@p$(Bh%}DsT!| z18(63tp@NPU(xH_68pZH-aC74d5ZWsPD0~2N(pe z2eZLSa5VTFSO$IrE(AO8Mt|@Wa09q!5BY#+d`&(*E$a&~6HIEvZeTrF0^a^Db_1{Y z4!ePEzQ=ChTF~MFm$D}824?@z5*h;b`jP$wj{1pm!Rg=%@GGzu9P=}F180C~ygsxQ z>;v}w1--#xU>R5jE(EuMtHHnh+7j9Veg*CYllEfw<1On{UnrCfE=&%Ea=}?PUyT44 z1VW+Z;Bl=(p^adxHla`>xT0++l-}F2mhkr>`hsQqg+gP%G3`U4nc%l+q0mzBg#$vN z4d8BY2RQV=P$+PMWjzgMf%~V2LOI}9U>R6(P$;wnys|?mv<`d&+z!@*d%?2~4uyh! z=-1#NurVVPngm{YNGLQ9tN~YnT|0(Cbzn2t4A$~Zf=(yW4-X54`h$N5^TFldOmGue z3HI+C3RMe#IQoLKx}fh#meso}`ht~U4w%9hhswYba0$47H}nN}g4@9%M}R3J5O4#S4>o}_!L*CX2MmI1z>~l_uoTQ^o|p&D1YZLy!L8sLunC;U zJdrt?egF;uYrsC2U{CN_FqQdZJ(vkDyp(nT^DiSE_!PJttOjeq31jdNa0a*+oC{_! zzq}9j0n;w0eZkJ)3b5xD{FeCzTn(1yVn6UHunGJQOgqA|9?c^?IBQ%eG#V@%9}3L? z2jz!CRbXZT<%1~`&>P$argp;)lh7L+ekFQ?H-Uvvx-O$=7Ry| zyKP_=_#HR|Oew~mU`KE!*b}S-2Y_q9QD7ZdRf7I~ssB~zk6*3@v%s9cVlQw4n1x^7 z1P%e0%s?-21y})Y2Ajc*zcCJ-ia&w9z|r7v@aXI4XW%*DJa7)U0_^zrP^cEn2KRus zgMnM)b?z$|bGI1kJR*MKv@?$=WfuokQa{j=z=U^lQCJP%Aijrkw!1wH@{2RDL~ zz#qXmU~o3=0cL{hz#?!9SOGSHHDLPb%%fm0a1S^fwC0cx*b$rq&H$H#m0%6H6xA~B<4d7<50qk%S{&gnfDVPb)0Ed8;U_Q77oC9tHtH7k2u?IL3tOxVK zW^gf>J^+3m_5izr!@-{5B(NVi2RsX`0!M)Bz$?Hl;AF4~{5zO7(6T-Ov%t3V(Fc4C zECgQ$E5M=!)CYVA+yMRp?f~!lC-xXbehWztj=zO@09*tXg7<+H;0xeVaKj?fgS~IX zo?yXZ${&p1+(thIw}7L;0k_jn!Oy@du)`hb4}Jx12X9)!JaU$09eXEs1Z%6Q;2LmVCH4b<1Ff^M<2|$=_!qE0_#!w4+yj<_?d~N#I15|@?f~n+VfSHw za2MEV2;)u_>A?zc47dm^2mg9M{Q|57*MQAn9XR9x)(PMeFm)*71DFM#^&oZ!uL1MH zS>Q}CZ7KPHpMlk2BUlgq2sVQq9>NdKq5purz@Ff6@C0xYI0T#nE&{8-r@(dKI&ceE z12%!pVA?R|$z|vRJ_`;3w}bg$6F3uW_b~c^C15p}z8pUQvp{P&^Eem;SAyB#I&d`j zGFS$F1}+4Xcu{o)*cIFW4ghz6<3Q_N>JN4TE5W{C(WBTGECb8I1>j;Z_c81XE(7bp z6<{N{4op2y_IKC?Tnr8emx7bPs~>0l0~dnJ!Eq~D$AOc;2C(ZBq(7f=8O#K8!9id- zmh4YH%x93+@2-fZu?D9NG))26kA5zkp-FG2j%i94rPGgB9Q^um-FJ ze**V_uRTfoTtNO{7T5$10Y^PWKLgXA#;)K_a5ZSJCOy~@+ymYKrj0-kun+jyGqel1 z`dR7$ZUmQrf#+mnI6Iclj0M~$%z&daN*a%jFsTW~?FcW+k90b;b zx!}rw;qTxYuu6Dv9r!M|1>6BPfj!q_k5R1e!7MNb90INb3&A(Q3UC{^6g>Pz{2lBA z)`M4r&ERY>{bKqv*bDp&91iXQCxL0z=mT~DtH5sHI&cuU1w0RI0!M>sqZv=YEO6jU zjHBQxun=4iR)9OerC^(v(Fg1W)`KI!W^fLeehK5*EA$(%4jc)l*U(O2XK)^v2`&eF zf;Hd}a68!XRmRmz;lUtyHkb`g21kSMgJs|ja3R>{HTp5w3)}!+1nvO;0$P{Rzrar5 zhhSgutk=;890`_ye*x!#Rp4^)Rj>x^y#al|{@`A40+=y|aUAReJ_+W4o!`JdU=~;b zjsTZ}npGqxB?swZU!fTKY??=)VF9a@EWiNtOU1%8^OKc zJsYvl74);W@jtK>%mpjJ8Q>;x3HT$p8tnfL{QtdSO#|9M0%c9b{85G`a5b1#K>q`? zz+K=FunEiugCC&>cr;iEjsn+!xnLbw2{wVtz_bap3z!AggG0dYz+z#RvP~Lt9&hoJqBHc9xt`pp;ly{hc>kF5ifEx*S8XU{7xcZgAT?yC8z|C{H zbOW~>ZanGI3|tM|#c*8>+;+Ij;d&aly>N5-G5#93j3nlMI9w#I4t?M@!WA009Jo%{ z`cMN`=yJyxxC*!|(lM0BmA4eG5U!7btA?8c7u!Z+-+H)z(zXxi>4wbq&rL>0;`YMt zk8PG3c(F+*G+3w1g$yNVrlsmRE6gDS=xK*VVwygIfuAyv|)PJ6ZBv z4);ndcaFo=z-@tJIT%;ocDVf($8)Owa0B3O)YED9>EySpN8kq=c+n{v{vG&^I!{=* z(Qq5#jx=y(aPKGJ7Q$_ZJJyhH1>Cm@(rtkIH37E+&c4m8i^U++J^|MW?hv@%23_RS zNyjBfHxlj?xGsitC2*(1onqkT!CeN|-M}q}%ZD@Bx(04s0&Y88ZUSyE+!YD9j1K^j6H*a6|NT!<=zLe7g^PKlnp*p0IE^aDCxSb}NKC8qTC^ zg`1~I*QIb{5~Qn!D}*zRxAiV(nlqZ=a!J?0P=|CH;ZnG41J?_#D0Ung;k3nYI2jY! z*2axPli;3%Yahdjz30F^3Mcblcs($DwmsK>qZ<2`!l$5*$@i<_{BZqZ@|Cub?>={h zJJ7&2!*w*|Df-BNtcQlH1yL)tAhMhlk+UA^20s^n?1{eqz(pwmZ(TGZ;v=J5vlgar znZ}MXxMgrATP%dT6KwEqAym^Pw2!64UY(l3D9MA)CBrFZ+4$jm?{ zn{~x|A~Q*oapxpy(^Zr)2mACO9JY@;7Hov8B|XPH5ssjwYk*5)onY#hekSoI(k(Nj z3&LGTI#WN%hAW37>$vhp!%cwWs3?vrgS!hZ)@Or=&SXvUHokQdw($SmY=hOL{{$QK z)$?|3Q0wXxyVjMwWj!>7a@$MZOSHV*HW1%WOXWw<) zbb2WCfyf+amZ?Cd>lyrQDv>$TEFPp z12|i^p`p;pI_Ksqd?tK$0zL@em-WO*_-hIK*O_%IB#%dtG0jI6a1SKlmcreYfUAaE zlz^*;yD0(J3^&WbNnQM`4gLamj@Y?YtBW>PXCfnOvgIQ0zc}LOT6+ygW+Y>U?Cty+ zn#{<^oH3Kd$r}1I!&aot2}*la!aWQp;jllroP5OVK{(SItPZX!0oMq3PXaD=f9#xq z%Y?fl0XGP4aRM$E?iK?Vq#lJ#lndZ`h@Jat_8AuG6IGXq^n@PBHaCi{kO#HEHW#Q`3Exp7MT@hnObD}Rknoom%49`mk}NPD0kF7 zEuo_bhxKPZ4e~RM$-OsRx}(rbO84>DcvZ3%scy#JWd#=bBbnMPz*ip+UtnHk9Z zGbiXF=rmGeM?Bc9`1fAqfdPLAn}WlIrSk|=6tiv8f4aZ zGE>Yl^~jvK%=MQW%rX}1i!VKy$ILR_kh$aGme8f5^Cq**5M6<3E+04EMB;Ouc>Q(8wM<6Miqx=3c0m>Gt71tR+t1d0p8*`47K5(tcXoj7H`e zWDb+HKtD}J^RXGotmHZ0t&&fLCZpw3g-kxr0IwC9`^+-(x8Z-0=Y&OOwOOVCnR|Ig zc!kK+nPpO0D;&vl!>dGQr&*>KGEX6+^l5#CvF;<08NzeNN}tYVnQ~RQmN09`1C>IE!G?DH?)MNOBpLP8Lgko zbMU!u#N2CfeW5?;^Wjuq-mRtA`f@%p_j)qF#>+@OmQcnPWMan);a0=F3)e&R^?cPW zznZ-3;naB7cC4{Ib|BOB&6d!8B=;X`mI<&nxd$1Q&x!FeqDM9z_j6=o`)?3#2kt>3Ih=EwJVE?o9jOU*J{ zklFUWJAQW0i{zvAt-Z)x_5sgJi(LkpWr8$Fd;Va_L!wWyCZp*y2$_W+wm9cWYc(17 zd`#>!37OGbc_v)SdS8>#^qGfD+DANZE@l0s$!IoQg-l(2OXxO{89XjhFHN61WCm|* z3B4&YGc_6QTrI#2q}`vyjGL}crL%qs!6~2qmzG}h>AuLEvfcHUw>259K4XyiJ2EPt zPc<1WpP9%!kIegGmv1#0EuW>xT=}WnmL0}N>a59ZK&Am1weLUCEVBohhd*=mxk!_7 z^${NrcIMe@WH4c*uSq;t7VC~JaH@|KXz4XQa**l#xhr$6S*8q`d}R7d`^-1XEI~&8 z2B0eI1+&aLWM1=R-Zjg}J4&fvxOM(qlhNA1&l=$@WK!B52GG|J?25K^zZYvAv!){mXY_eZr#}uN|te|PLt8<(HEIg-Vs?PWpykt+G7kdEy$=g z>}8gjiOeA0F;Oyu%rZ-nxyh3mZI;=9Of53^i#~;B8CegV%lj*;4R1Ef$TR-FZ(2fQ zrS8vaGFsjHAd}5|FREX6oe-(J=2N4Qxf+>#(Wkd2qm79(ka^b2XMiT7E7bX93C%&X{?MRc&8AV`GoZ~hH&!U!P1jMp)YkV-?;~t16RboloNE0 zu&l8Q;pW2K&Y46wPi+pG2fv6ikJr;O2T9uHa1X;BL7Rrty7m)(1N@^_D0E$NJTE%S zI}lZz@zUKR=?Mn8npjWmN#=Pt@t5N?d$_tu{_@VmycF)=VEb_Snoaw%2s$mmvv;zG z9H`|nDzZX7nAb%M%t|M#Aldi@nz-TnU_op0Qkz=ouK=54VZ1|IEn|-yIp*hpi(0Q-<`? zMjPRtg*%0CxDHw$t4F97{&va#LM?w+M)XU=fCC1GjL)ZJ!3}}CRL`GqkgG52r@3%5 z3Hx)kyj>rWybDSH88WdxC|m_xJzOr~uC`Y#NTCAu65tSs%E0aHr~=*3Kj0m&2Rv zRsy#IE}*9+EOwg*w*=1Azn8-;gp1WDNV?S&B)aAi_Rlr9a|7u&B4g4?-v6zIGwBqB zTL;&Ry!Cb#J7l}*64_x4{GJ45mcum~%9MQNedBt#Y`sj)zN_Jz4Qa)OwQxJ&Og7x( z=4-NHbC7c}(kUC>Wwv1!&Yr>jIg<^Cz;%K%*-+kx4#07A7-d6>v`V_L2d3P&2>X}C zmn$-hk-3-jSBcEaW|=j}>_JAI=WNzww6SdudX#bhFm|jEn+J|z?*M0NOVJ^NasM;; zK|XZ&T+9F5$ow{(Jd(I?hMA-4Dfv%=OM^4zFYQ(Vp9LRlTS>bVuGc=&%KPEN;caAf zAC-K!!<_^dJLgKid*M!p8=#-beeFClqZe;>)JKVhqxV>--5^x#Ea<4c6*9UGYoM|4*ftv`I ztJlGus|w*BgQM6;{osQ9ENA`l0$deg|6a|%w0!F*Fd6%&N6tm12WKJ9& z3jHE7!!#L9$A#$8_S{hDIAmgVTmjb^Za3U8Tkgrx#x$Rv&Co4GWp1CK&DR0+Gv)M^-y_^ zt51VjW(6|qk-1OuX^xi>yKKjh{Vs@K-vr_IkbVT5T5qx0a7BV3u2%rc{q`OT9VZkCyWjJ!v$${J^usY2#gPo~@~BkQ5RjCAu^V3v_@ zhy0Apds45ZW|>sh49hQa=bdV^OfO`9KxU%kQyVWMZII7~uJ5S$ek4N-}@0*mul@a!DH|x|)`j?Rzhm2lsP|`4g1uk~$)EJ*$ zWaL{Z!;n$FXB9?#NAnB$j*5I=phEKOpvh?cUA~=h^k|+7LPpm^)gP`KT$>m!$nWLk zeE{4}!u}()yxsC8eLd+vKxQQ2aNh2C*9@0-3Gc}09AQb9egbP5xE!5xpKBEtG)qKRf}+n-xVD#?=f!HcUr0AUCS8!<8(HrZ zl5P`W{~4N%wEd*jhv#4~GmojA;8Nl2n7l=&zHmR1w`m?93HJ+JY`aOi61WC9(-m7_c`3XdOFu1E8r$zYnm)B&!uo>a0ePV`F2YooM}xj-~E{amq$AP1zP)SeY6po z<;W}*nLJHK>!aOHqQ8%ce@{q!zCT)omn@Ox!q<*Sz7Hf9b`er5R z+gxt8fqX-!DM8*frJLAkx)R>Q^a34-`SHfxRLaH>wX zn#(OA{irLVR=Uh60FJ)(BG=5ay3QFJ7nX{?z8mkyUf-g>>|cNJV39MfGK zw+^l|T5dr+lBL5gVA&$v11Z!I{R(e7HB^O#O8x+&ge4 zKdgjnhBJ*1Yv6XlnZ}1YxcA^t z(AFF|q+f}QX{;`UTL#yW^m;o7`B_fhOX1X5{dIiaB2$UXXUME2?Eg)ZaeYu^s*x$r z3xz%unf6m7>oUzxo6zIfaq)X4u~%BQ!yQC8R>w{l{>V&4<|>gn zS(DM`oP1=~BJ+&MoUO@d_qk*}G;Dk*)LQmh7ilt@t=FMzuY7YmZ-L8#qpFd5Xla|_ zhrpYBQod_69PU6pEn%^beCtTQF=cAQY}OM4;8Yuy#_Jp;eJ(OHk-3ksf0icWzH1|8 zET)XT$i(&uNnb_!?ggRHXOe!QmR_q{9qD%ZdOG$s?M6*uSaC70> z8Op7PD~IcD;F{rPCE(J};4CTu*9-1;IMbLk9IgV+G$u`gD}_7UpvxS%tKm#OwU9MS z8JwE;R%`ar)(JJF?>fmmE^miROTg`gYawq_T{8Mx)_>q)+f3TJ4_pJBX}z5T*Mag( zc^1O8f{V>FXwgorM=Uty2d`=M)cjxt>4zl9djs4lhP*}J9dNzj&LpglX~J1VUYsCZ zC%7EA0fuya;jV@=)pI1=!~}Vkz~#c3Y&Q>X0i0=mT@E(`&NSE8z|Da(`Q3K7A~=(t zd*MWv!wvPzpwjtpCSCf#jYz=d!1aeS`SKXn9jC)7U*4>>vF6JQNxvJJsRo@^z-3Q1 z_w@~MJ>g7!eFt3M1e`UHF*^a*32r!C7lST+;YPqQ-A4ITke`DX1Si3r>SK)Fq196x zXUj?d_bKsxL40yCTsa)wGb(T4R>4)mnc8I|+)W9%1~*TWkN5}i{y6DOZ6@oXTsYNc zt%@S+39Zcrk-puPW*^Iiv*1iVHUlmhuB)M*OW<0=nfzci+@)})F~1g0zU^r81Nko9 zs03VKF!fBpb%UFnfa?!e3Ku)3Nn4G9D}*!k^>Vm7;Y{^g47Ur;RKHbl^>Ez{HrojI zWdg1Nt}y{8-`o2c&ZJ8a?wmriF4=I|a3)b;bm0dZ}+ zhsf0lxWF*>)^MgiB;RALhf{s%Y|V$YJ|y4NJmM;|&E-3rS#T!%$hSAIgEQGjeUCFi zo@+?=mjqlL+?)hlBisTwlYLT$)29+}nQ*%j2|p(>PE8_c+{C%8nhAmcq5bne1B)*SXBh)x(_*XDY85ZU~&I4(aDn zhXkB_b9HF~PQJssIRPi%X0@i9b(sU#2F|2Q6w8xF~4w8iNsw+5+-Nvc z{pP@pFr<^VsDkSc$5uV!huYey8h)H1t=O#|E(h)?JuPA3n&G7WQD=m%52ufCY#No$ z<$A%*jLp;K_+XN1LsPm*aN?&XZVud1xV8p8tKg&`o7#RI+^ht7Zh;d&G?mu`Hz96Z^c zXbk}W=ESA9E2oe7>_>f)f}?p?_Q3QjSijhh`K%iy<|Q}!pziVx+sD4nHz!$hq`3RN zGSA@5w$j(7)@QvTvOC=bhi9D4INfD#lJ%^w^9~ABJ~AW<&D$35^36%M?n!ojwkfsm^jS~2Wc!ndUF5T$_gS06Q3umnKKm`7wIduA zFC})k*Jr=#v$lCs*+ebz*)RI6EnZZ7_MI-vAx(qNZuVJ=lV&CHRGj~$hivOxo7AX# z;2GW6j32wqXWb{6tn+bbA@)Boop++`E3BbJmN}xm(&^ln+V>?{#r7{gYmU$U!e>?a z>}OQl5k@n}C1R^*T!W=`=f}zRaBDC)j)MvE?sOvIbL>3pV(^;HsI<_3%!_{O-~R53 z?|gK|<<>Qn^|a64>$5ia?5}**cF}H;*9;xWX{cSOa+u{-zVrSZ>GDyl9S>?H`&1*$>TVCuFpEt9%Y>`0k74%I@DSpj(U^N8f8zySqaSc*~HblMPxcs zKZ?|AJ}cLL(uXJTip}37^r+8x^1K5M#tqtBY@li=e% zq5kO#A1iCo%M*T(J_+nNV~sv0yydr&bju- z-Jb9f+T`o_Op?{)ORq|@-g3){7eDA8A9hCk-@cB|Ct1zDbiNMyt}A|^l$qJ_E}u0l z{RW@4$}KcObm#pCv;VMHy8ZA@pVa$dA5Ha1xQTvGVjoTP=cqr{uzyS{(A7Qz4^vL6 zhr3849BY>`SdHbwO!T*#q{0uV?)s5i_tXwVW!eL+OPmbS#I{-X`Bp!$z=^9!>P(=Q z{a&hduKi%DHO0O@Rr30zt@z8@w&IA3+FIZH>|JfF+mq~<+gQ&h*>|ux|F-j|QxjetTBH+T^#lwz8W1_EW8_J8b)=R@PeE z{w&4%*tXZESijizq7>`q6bV0_BJm%kh|KI(BL7$`N&8+a$>-NrlIMc~$^Wf@l=Xc; z%Dua_=?Cwo={7RH^ySRL2-| zle-Y;XWx3Tb)o%h2dmKjyn}TE17!yp2%qj?J?FFU?jR0+Lb(yb-Q_ABYu%4GYobgL%WzCGRAnrvU6ZZ#&` zdk(bb`t1)6v?~4f%LiJk{r2MrTJQVq?P*rC-{uQRciHyBG;5u0^R*Se`&n}X_RRgP#{%}2RI4^% z^WC){0(M2JbysV9dt2+p);3>U+0oiw*w*?-8=J4mEN^31)4VGDX&V*aR%D)REAk(< zm9*EVNNTN_mPH+Kp?aDUD#C-!~9XDyffUv&%Fe}C416YRgL>FpLD3rU%q zf=FcBkNd0(4*#2VwFH=Ac~mZ(hy~tgdnyU}Hm8^9Kz?M|EH}=%=0j4Nmi0(3S0y^Hl$lJ&gL=A&cp`0USB`w_lAN#g(QP86{Y z68GC1?A(E_gX2KVoM+m_tSQ*5xm7U@i_3inP3MhipS{Xwy(V+je|+|B$<~dk^&d~N zUrn;st1$hX_{Wl2j#=yd_7dCL?zd;#)?UATQyc3^n{r-b%xhzPWZTcASijkJRf=^d z<6LX&bM@~Ht?ao0>mF~k`?i&}tCjtBYio7DzN@vhHDG@iuy(8Pt*s^gwbqi`>^5Zl zp!|a+FF6Q2#U8-=f!!(A^NR;9^2?faSF%j%uO>^wtxC4``0SaqWnl`MJ_ez3g?#tfxw?Do0H-Dwwob=Wj>pKSw*vadf#V%Ve};aP4(|* zN%o3lt0~F8BbmSWXRo)d57oa-45+sCPrv<*U*?&r2FIjQTmvz~dR=xz-MG&X@^Lwu6oGlBkZ2P8U>jL|OBu1R4lB`)idts7vf?s_s z>Sc{xqry!-VX--awMmlZ2l3=8cf`n$Hta8(l8a;^R%$=2jG!!bm}qo@{gTfbVz2Pg z+wbs6F+3UV>T!+;9AoeF;ROsIW7X)#qKsw#zkSk&?nN&t?T#e-on-5231Zc6ldN4T zf(hz*)%vQqlhY65V;lD6%z^yTCbkN66qb)~`g*fBOtN<|I3~&9_>u}U6tbOkYjKLy z;%Ivi>u=WWm-75FWhYyovZ_w9T3A&lSq~-IYgG<}wdTBKN!9`}9Uh@dG38*2i`C{2S>V6$>3+^8Voeg82nOA; z_Ln~E8u7h<_{8}h@<{}%YiB@4>_Mr(J6kM#;6L-}9 z_}BpZQmX|2!X|7?-V$@OA6=YeeJ3mUN8Kz3$XRBo{i)Bo&D)4?^vRT3nQZ+eX>LxE zAZpy0Y`y69FT%OP-6vHV>==6}4Q=Gpq#*~`B>SI!>tn`;Wb3;m``^jdqGY=|*?K-%;+a`U%J`hn?~js&NFV#} z6g-7iXZoeXeBdK@f_Ej^Pb5hZDtU$@`k^f8YJBW!FxVZw%N1AY>+vkp@{d0ImL!?F z#iug4zn)~buvt$&j>p}S?Qi|o?qs{(Z!PfK%ly`TehF_D@ZNJ#Y zYHV#k+{U^`=Iq8cj#Hi_uc=&We<;TrtCM68&S3^q$A5g*TA#huXED(b!|?_po23H( zajV^Ve;(=>FZ;fQ;t{KS_I97OUb+pnjo7sxqxcYhPjli@Wu%ih_jlT1_xkZ9|CzVh z)=F8b;2_ug4&hMavObGa<)DRiKMl*Ko;}YOYDla~vhGY8{#ILSZnFJxvh`GQ5#gu( z_CHd@YTw${*M9p$$?j$!#MTu1$yV0fRw8s`!2YtewJc!2)7p9|U_aa1y1Dg-B2?4X zrZjdIjE3$`ETaSN+Rx^bS)=TaeJnc|oh#hBk3Iy!p0dRi_s#Q>Z`0CSMnV zGn4x8EY-_N2Y+B&KPB03Nxv9JcoEwyKj%>sU$(6mY#W(o+eW@d8kO3&>to|GV>ydq z=29`OM=~GW;{H$u9Bda@e|5+MWEtMwUMMT(zdDl+nWzz@hkX_<%n7X{8Ia#@IKxTB z(z2g@w**n7b!QcA$*HYBr}-_q2u)Zm?Yv z9^vBBo5k84#VPC9ZcCNpsd6&9Gsuic=O9J~Ojg3IBv$$QEAEiPJM)U9{h7=RZ~LtI zK6{Oia~wxOWg|Ida2MX44=1BxHW}s0@Vm-Kzx!Tkey`i0u1fCG+*_7sI8*!cGPR@E zDEps2*^em&V#_e+5Z{jWN9FeaZLF$SmRRg8`#~Q&y9H{A7O9uk`l;e6 zJvhr8r`7uu#-(EScMR|PBbFS*Cdad6>$4a}IaX9fsNzqu-|<-^NM4QX)>wRI%r^}LO zvi+P|uRq|k-gZ;zg~uCc-|XQ>cHx~Q*<_T+9)pbl3o;fotPz&E9qPZ$QdOdteJ(Rf zoNWR}vYK;Oa(eib9=|1VUY=}!Tsbrax=r_5J{#wkmF%?GK20l@)&eh8iRH9DhLWS=AvV_qEtPTI$&n zkgTkxzo!Jq8b9HFE4V)wvzE1Cfj=POCEx*IFRlZ*q;f5xP;v8oe}F0$OCF723BL*c z*Z!V0CDDd6}UI)n(f`=d$-gK42 z*<~x%@kMncYn{0cI&PpI=|$S)wt-ya}pOh0o?sPh%bHGM;!m@wFy+Ot+TFC?@2P>JXWU-QqAP12Bv7ydS zp?_#xs1x@M>>Eh>J9Kk1WPH{_HbMDe$Qt0E$&~fH4;hW}%2}b#K9B<;sb8{{Tmnh` zFn*FOp9R?&*9Rb1Lk^xCD#k}XBp&IoQ;;`74#<}EPJo<%>m!hqPhUaiK#tCldFsfO z{&s?-dPhN09^b6wb|qg^5}O-=$0<1ilJaFNB>BG)lJf6yNcwKrZ;)iSUcTf-K~g@( zLlSQ=WD4YNNaDQ+N%qb{(%kHvBJK2sBs?9G@N7uR_XpMWZb-8G3?$io7n1CDFOYf@ zAW1J1lGY0k}<|CNhEoxRat1ByeP&2U`^N#(mCg}>^$ z`cyfuTnb73+yN4=L9m68w7#u@r1qSEr1*E3CiO=`l0T_R<|;W|$@xmIQ1Tu~8t;1{ zCqTMNWWRQUT#xJbAPN5klG?Lzy5xn-ki3?V#Csm{1;~45hC2U%yz|CTXDi5KkToD* zfuy)6+GXvLaAgO&jAt~Q}grvNVS|rCo zPsl=C?}tofgFSD=-VZ4I%FGMZ-bK&o*RE1|i zl3z0+`$HasB>tz6#QzSG^7uDMnrB+9kodKb_u~2s$T-M4cgXP&3rXXlCnSxB`yua# z?6*>`dlMijpVvWBJU@h_{{Ie={QU)z>aV*>$_`47RI*sf)k^M%r21Zjq<-JHTH1LK zlFFZgr1F(_%KF}fqw{KX`MR@N#zgSCG9)|N!P2_O5QriL%1G! zw~WgoNQ&1=NLt^wL(=$t4U)#^9}0J@le{n`>nYh7lHwc(Df$bN;^}}E<~vC0m*)4#@%0BJ%}ZhTO21c9pJO4ZzI;fE_aaED?<>grAeY=P+wl_Qhq!)Z zv-I~IZ*Ca^t>pze=kUbxi`+=d5SK_)@$#qIT1xfLG z5t8Ed8YKDo3nckhYpd+X4V9O3bUX6bJahLShxm)gw`ax2C z!;~BgNq(h5QoS=Fsoud4OFzd#lAkjm8$;d$nFCpEkMyS=B>9u5WV({KD!CJq;`Iz9 z#ihnxsXrZ(+OrUn^mi)xs*=A$QauwNk-S1k;;mKkh?1W`5^vZ($(sO4y!lFQSMnuD z;wA2vayul|e+ZKJ?<-mPQF+}QlKk!tN%^o%mA?o{>l!;C(c443hj^-Ao*b&K# zhot>fzLMJ^b8#JhRLX^rgg>JsdrDq+QF0n2*?mgM>Q76%Z6L|7dm%~xO(p9-Bk?Yf zq&Hv57nKZuR+gtjQk)m5>sOU*cueA%O74NI2HxY4G;e*Tu76P14UbDa7LxE0>UzAo zUZk#9LXw{^s_QouUipO7uLVi_k7#w>T3uhGu7^UB{h8`|zPjF{t{;aa{g>7C+mJL* zH9V>OgT&KbHWZT9k-6%6yOOUed0xq;r{un)H6*n^0h07nmBgv|M{`XGqaD#w{4c`) z?v#}CXe@?=WnF@Gd4Ujje-0cq66H0*nId*Fg7oNpEuxION|;e`cRxf#9k z@=JQ<;VFu{z{Bn|Nokqxw8=K4gC;2-HtZ~&GD(OPYD&&==cMJAu!h(UYWF0RkRT-+ zQwsJ#DcEnNU=26h)Mq6{S2nCvxGS4q2EMN}yir&7v58yNHplOl8D4pdSDMAy?%a&R zOt#-FOT*YGU}w#uiCMYnti=O{Jy9~&ETN=K$;$PxC1xq{k|$;rcnXvACbGxzn z=~p&dH4Mv1LPC~x${q^BFh))&J_6Cbjfi5^7zj)3DzkiIK}tprcB`z=ES1Udpjjlw z$H zBb!&YN_t*VYPOp_ST-}2ZpcoT&C^cco+rPspo_j1-IvI|selO@JOKu3KOQ_z{(+LJQuZQrt?h~MA7MI%x>iCH zZ2Xgkv-v57nImXE_OR>y%T>gt`!8DnJX%4sQMftt6Jo(uv zCCqWesMlhoOAxWayv;7NqX;7d^D=_$3vyf;3 z%(nK-;qL5-eP|X=DWuhEq#X;J5Ls{kocwGIL_9w!%*xAUvr8pwCkLnGV4_@BKJt*% zN$#{l58Gfz&+=T8lI?M`WA@;Pf+9Ej(jH4H$}7a9)>_Zn#EYI$4w*;{*{=3>q@0w= z>Sm02>~JhH2;hi3HLc!h$I0?spNR(op8S+FH#=m{=%0@GW=+g;7YwH-zwDi|XhVs` zj@h&;%hNk6Bdd@#u?GjbCl*2()n&RpSsvEco;EBiBh!aB*^Wmy2E8&<3fNXVls4@G zJ!gkzc|`B9OOD$#f((llgsSSvefvbjaO8s@@YUYT;`#&a!=_j_G&O(Zf5G73gU!> zN7=#RW=P_T%D|tp!$lj@3bOJGS(Vc^)gx*9not3(3~g9<;k*O@o73X>w)m zXGf8DS1daymYa_4haF0@`;duhB%QEhh<(=(@v$lUs&oQAd8+lYZS$}`<>PZjv1^sv zws<>YzO}0}Vmhi+V$Zzv5;n6`ikX({?U>Zjo`*-35~>Yev1z!N zVnhyhw}aiqDcQqucY?Xo&1Tv$)TYz=XWc$9?^dF15xb`(69N$-`Nf{)rg?6OyF z93{fg0(UxPnVWSEMzO}rI6FetM6ZQ8_Jm#-Y{J_@w%MN1BO3!L7pY$CW+!ba9vDey zUkAtfV1Fzd%WD6}rmb0?{u5byJA}Fm*fcxLJuN@Q8^jZK6bj;qJQ(=O4yDcp*5oxC zmk2YK=rO@K=->i&+zy>0HuuJ``PPml5>D(W#Pr(b^&q|sm%EO+W#F%wcz%XwN_Ij* zeg-|?rW>;{XASEL9oly|k%V9m1SiarjAw&0#EQc!sSUK(@q6mm!vEQ3B0f&CxU7$9K{c43<-cW9j<-!%ueXgF6(6@og|h7**r2dR z9fx;GCC6UBEWr zL_c+vOJx^&dK=peQIpr~)6zJz6v^>kDTa(jCI#bV=jCQZ;nfsx#om7Pe$bc5)|bbC z<<;TxkPYv`-Zxu;W!LM2ym6+epqO1-4&p4q%qj=d@}Mib$7Ex!@&q`*UN9-*L2MxB zdy|8Qfq{%(9~do7OSfUnH5t^D03#|E51GWA$+lGXxk*xqmWCT~Gtr_yG<@>sSY6uN zhUCp)A2%^!7r7Hf4c-XfSem}jh^4q2pOE-ANE(f%H1!(YUz$;wIeu<@Yoj4QVDTfy zeiRrKJwm-6jJ2WZu-JdR;#bis(}HLvKCnwqDNOP9yXq5dw<6)fhbNzzHTd_hyk_wq z8_g}igY<&jVQx=Rwq5p_FdO5mXsg2RHc9@iG5X0$wu2_Wd@<2h(BPV%l-U@&bO>hhwqwNs$v?gi7fP-;d`m})aZt_8%!OuBfUe? zerN|~(AtYJWme6O_*(MKp7(FtLnO11oi-VMZYxTaZwxnm zEAqXPd`fI8XIGkfKFw2xXZjG#<|xAbJ_H~4?Q3T5n;POxoq;x!F>Cm((IjgY>Cz?2 zJLxMAhL?|6&gq(MGR>7SpPV$grTO@mNz9onJh!>?ZSH*q``&2K#ZCEAn@#zrEe6Ez0ka0HQ=9wIT13&kebf!{ z;}Y4g6;Wspg^oWMQ7Nm2woq755rvLWc)cPD9iVXej}>sK6BMpD6|A?u^b0Eblcp|y zj~Ybgmv<=6GV2Hyr$n~bq!qY}@wGAkN2ZDFEt4cCQR=}&7V?wPa+(5V@o1l7q_!;H zY!-_NPLx}>Wlx*1c)BIk8vkrmVye+O>t~`?1EgZU38~$4wwdvdp2?_P?5cF z(koD(HIlk^Wu1RBVxZ<{wME1Z!Ee9n{V;(Z|0lBBOlAL-vR6vB{Om%+lr|h{5B^HU zw5*$r?<=OJ+sLl`-DqOjURsKAtf1VAEuySv`-w(FAH7h0tI7ZIGvG6Zed234fRD8b z@}`w|)6V#40sGmoKa6Nxhz(_*#hZpo4XfcCMaK$oSC)CPCgRv?n7|jfF^2LArlu66 zchMce-Y~8Er?QwY^?+70f_Pw{wi$K*Ys9Ji+SW~4ys2)p$F=659Ftf6YP>N#ZW=J3 zVtEt5wyo3?zE5B)pEp`uK}#l`weU6M`}iz~Gpxi^vL&fImIq9t-_4M%9^FWuG?gkI zW;|u6`KJ+`@>`HhHpbKrI#|TIZcHHeRZPp8Hl8S#nofS-pvilxC^3(Dv+S3OnN$m; z-`3BrqG-R0TK#2&IcT7??`jzNO)KTHAs?3bRllKJs=9iA2knFRX1R>&&i6*W#otCS z%pv9-+bRGF2`0=6Ohx}>l`6(u=e1@U@s{c!v!kY6|HkXZM2AN!dLJ2v;18c_+`c-y zG@%YQ*{q*w$G?Sk7AnwQJ9QcmZ1qJ{%HA@S%Z^fxU5;}ys7A8Tx<~iob4H6G)_4ibYB{14UVodE%-2W{`tFa z4PQTB-ZCxu=bF8Z3S^tT0g-QUm5dw z(PH+hsqF7npx<`pd>5cNcHT5u>Z&hW4R=^WhY>#iezU7ov_Vh5UD+VhK-ujOHRHKZ zIo_@CU3TyXT`E?SF|k_i#^JYxjOGUQ))<*y)z`|UTIRShm*F_}SH+B8X!PP(qfqX9 z4^XZiz+YT9;#GQj*d`<*Vs?B_}#LQTpD= z-T2QLHr-;IeC?KYV;9U-_J?W1m*sn9HBT)_u}&jc;ww$^8&%$Is#IX3Orq7}J|7ze zu0RzVKy0a51qP1&bD0Yoo&is9tT5mQX^a3|ToZy+Vm;Y8XV!#Q|MAV6fGBsw-(S@Y z^dFGI=W;&d*Bej2Nn6;6ij8YlPCG2a^hiBJ?~k|m16;q$B-+hK;!cb<5Jya=e}X7k-H(+k@ef)e`m=Pr(w|s0^2pd*D{w%GKUr~kIDys03serKfd}?O-;Wun`8t9!n zjbW+G>f$#cG~uEQT3fF8f6St_fZ`U#v}sNsWj59CcKVEI$aYNYV5n#r_mt-?vxm*PgN_>Gp@ItC>wbFnp;LOL`>Ks2e`;N7^so*^#mrbu>tNb~+x9NnueUyZ zC@7+*@=TN3z4Du|T-#^b2^w`h{rEF%Qu!@Ei}sBz(_-m8Ri?TKQXQ9FAC{?m(N$Z) zO)%^C51sBb?N9I#Vokv1Uk9v?iDTpbX(#Y5$G(fP8LXM&UPDHS{rGQHpzPPLV`N4} zd#1DoSUrVDy8m_+Bmx4Gk&8C_WV=FZ;Y1@HCj z&50SOjp-Efs*K4`-KzOLkg&5KZLO2uZK*ZH*+XWffzwLGDzWt0xqs5C_pT`vKM$un z-m1*6QRVz(10PUY23V7S$845qRz9HW75MHk9MKqisGKTZjTZwo`~s55_~k~}{+-0~ z%R-Sh6?iO$JyU||q}4TkO(}QZ%DwDGI%TcI6HL#_Ip2%tI5eugkKD?fa+OXTTlmjZ z7{^|?I78NbdaZg!{**Ecs|NVZwIfY!+qqWgRdhzx5oTM=3M$?|QiGkjI4j<@o7Fd> zMaJ<+E;%jRoswIW@0ZVstdk$ve$Kbwng>2jd)Tz5$B@#tuGu%GvAnZl^>Cvdma=&3 z8A#g&iN&!h#7icd8@kJ|k1PJJKO-Q;K7K8kwf@LePIjej|}?m@K05`NHhL^tN& zuGpHW-ZN`QjLQha1wO{WTs^9RU25oNYQt6p*s5|Wc++Zcg*9HPu*SEhM%nT5?RaYk zbwOEUDT}1Zj3_ml!K&54-F#vC-dI0lP#U7v_Pp4gB7g=paM{r;1 zJa434DKGK+@)Bz{G+YeYa{C3qXDJpGkx#khGO0%^D)sqnz{<^XCU!7&;mSGF6)W7{ zMKG9dLW0F*O(Tu?Sf%B$;O(@Y7jI(1#haLAnh4s_x>tNhz3-LPL;CrrHy%DIQ9)y( z#~wA^42-w0BfeMvnp@WT_KxWr<&N#nD$r@+SOxDLbnL8Fu^v%ICh8k7Z|Eg4Awfgz zc2mQ4=j&IC?H*X$^REgM+>>Svbi3ovVc(mKveWKDLUob1S!l-4Mn-7Mc2cCBzS;2G z8J02v^eqFbyw$8SFl8>f3M*%Kne~*Nv-T5x;7-4CV4*-FuF7}TGAg#H?6(Uv;9Ya-HnHoUvR&|6h`(qH!%Pchr=E6B zZ{N!`vUL0~s1{vdjlMl%&A8>XG#q6ny`J*?6r8QiUg#AA%X5W5r`%GBgU0mCy zMg~=&_lO$!3qIxEDg;v(?VaT3QyDjyzCGi6Wp#479rIQ9z496pZhmCCX$@-c%IK@> zd*!uc>_MZhG`ix#?Rm#`;y-P0>_2VruF?&PFkRe^N-sc<{@+#gAG0cCdWG`WN{xVN zsgw;G=ESh*3M9{k)M4#3;?0UGFkxIsUtau{FWb-C@^r;TZuvejs|+%XbrlxQ8po8~ ze_G2s#JgXZ+V~4oyW3XHe!cPAOzLrX@E@@8x@n^VIp{kH>n%mVQ1e+U^@b&gwpa^V z#+KTB7r58aK^yq*n!mMl^S%uaI(d{QYL+ss$Lh}Df&XRYAKO-5u^pOjNk}uhB)C9h z-E587k2RmjtG%7}YTQ3%XsxXwJv@SK>B>2}f~gysa^QdMz-y)h7d-FS52t@)hZ+`V zBqaPT&+4c9(;BJ){a5-%WQkd)wY+(E#s7nCfF21C{r~IQ3DdQTW|rO;ly*a@`&Fc$ zQW0xcWOE}+0(;CiUH`E~Q};^O|84ctD^k60EUXdoj}KiPn>GJGJGb9-uA(`s)6oiI z1*e%BEy_;Xiy0TX3!495Rg_tdiY_W@x=Hi@&uTjR@7Ls^pIB#Cm7NV289VFE8+@g) zNjYk}xZD$sy7phM#%NP+IV#f;{6CupMI2WDf9aYLyMq;R@E=@2MRY#+A60I&-_f$v z(f2>u@`>2A`2Wx`BW~kLcaN6Tf8`N7ezBY;&3XT`>WvsYXzN5pZgWLjUc6{ChEG4* z8ms7iyzr|*E4!glQB#I*iM9sIn3)6iRz435%21}=t!T@{|4G$G+ixx1feU`fCR+FK zzhvC-|5e*6>~lTf@u_g~{KZ%>Jc(>=mzFvaE@Z~`Rkm`b@BcwXM!TljR!0#o_xlPW z&g(DUj^WiyrnR6?PrR@2V~hE_sZz>l)!R&?x<+k`&Mie(_gL`loME+pMXeee9mC9& zvdsiv_Y6CC1+}BblfgY2l&dFVgZ+6>b{PTl>A>1;%j^U_Um2C(VyYn!DftD-_!O)V zKl#jV_rt_{X`aHAw8?Cp38mpjeG7*d7T`Cud*$V4;pb%^G+|k-_>uCSMH45w3)mwj zTv$-#mdfmiSw1lZKjEr?GbZ4spF3B;Ssx%bJ)3=OmcX+@_MK0OyP$xb_bI`zR65%k z!4u7)CtK8#IswQv78Df#^|GKA0nkA4_gFlvQvlM(f_eu)y)0;G0CbH7jSYYX;t#`k zSY|+Ze+d)@0KFt|QvlFM0!spbk@82^*8~846mow6(n}$`1CWsldEZ2=pEO9%^5kcy zlng1N1aqh4u&?b{*?AdW2E)Jc_#Z+i41Wd>|DskpoIUZsWy@Bc5>L82-_t6qU8fGM z+}RUbA)^ZlTMlQfQj4;()8#R}l{+IlD>dz^wk_MVZrP?)nx}~M9eiC>kKs{mTefY@ z_)WLMY6z<%YG{WezYz!e*BjN){~K@~!ku{}LaIcOa8yZ^VjKxxc?yY;&~6Zw9HIDa zQWoM2olAwzDx*j^La7>uqYB8=a2DDh2VQ>x9YZVKe>&7zc?izgF8mK+$v8T=aOOTL z#lN9&WF`LJjPrlo8NL@*c^7U~LKUvZ|H>GR#yEnoHUWwSd`^;C3)T5x~{@%I308q(hyd! zi9$i0%kYQg*&cRl6~^jb*G`J~CAhl07rJRohk+o~?1NLz>W=B!hps-JgsXb<>M^#k zP2EMkZp?-1qNNLkxP7q@%QgwI{HPEsz7yh(8tCo1i&nN5V%0DqR_6*Y+(?p29-Gq4L1|jw>6=MHpAs#&@#DQ}{9CUg}?@)Uo z9!nD92`myQd~%HtM-B;b^lc%Y`b&tXBMXW0Oh+M}9WBJM8A2StM~D+o3UTtR5U0Ku z;&kmI(mT^ui06h0@jRwbR)0}tewUC{_!B}p`FjK}zEZfeI97yaadQ!q#VtiJ7Plpp zx{KS9M%~5nLSbpsD#f^3dSx{sqH72dQ%i_uE+OLT3emj25G^8vXc;L)tHwgKzEX%b zu|l+KE<}7wAv&}XqGP-eojMB9IYEf4y9&{zyAWM_36Xe>5Z(I=(PN+xJ%_K77JPIb3u&^WETee$K4|LbngjuRrMhY-1= zgviSiV#?h@6dn+w_(dT~z7}G7wGvXF(L#tD2MaN4iV!!=7GlmFLfpJdh+AG1V(#}s z%&$6~)E6`t;uOsYb+@1CC$66RJBO}b7%Q$`45tyb{iQ;2^~!P~Uj0Id|2!zfYbS+x zz48n&cf<-~JDLmi9W8|3j#ff%M{A+5qm5A5(N0*|5ij*RifVUs7WM5+PVWL^J10b8 zEv>sVwK19Anbt*!^x;CdCkrw079ld$3X!=-h^+qzG3i$!a$Pe?Jug9sDK`jFaH9~O z%|aACAw=kQ>^e&Px0pjRKh73c%RDn+f>E3pC;)zh5YDUb zM!m&94`OTzd9vM05SofGeeXSr@SK+*EHvg1JOc}J_&E(kqBqc{Cj3iu=a{+kFpjtb z##Q{N9&|}DsvNWIkHd^jrHWM`SX1Yi%$_Kywqz0T%n>-H9Yb3f8IwtdX~%FS1xH25 z>9`$1#_j_}PR9fs!>AxyoJI>!9-WRG2^@~zzWg+j(o@ex7e^==EGMt6zc&no$MX^XQsh&jm-}*xG!a4PwoVCvc3}I2^~= z*O%Z}4MU~n!PBBsy2D@`9gGfHhWuhOVrtGexgTLZvAnhEAXVtz{% z=mve?+S?$(Q8+ZahJzUMQYIZ2G{CWD=SFlsxebo7uhMzf8jQ6nK7l#6FuC>IXW?4w z&B$KfdH~kXkk+01VhU{i;!VI?AAS<|QLUfI$5h>BXkh`vxQ@xYitKUP)z|Dlg3d4P zh+}LutU&y17)EMWOcSy0ao3@qD{vi0Cq@WoqAfllTn{{Q4zOn8ClmH#V zWB~lEM*Tuq2b=zRL%~1@1@k;H*H8sIgoF2bLnt^3XDz#|W2~w4-rw^s{&UP2G%qrI z33(ocqt|nf7lUlo`L3~E&joWoG22iD+ViNpyq*h=!qNG&p93-G5%dy9 z>Qy+#{()7HPpyScS&G4d>GKO1d=z6nj!ukDd1sMdr?dwt@-vij*EcwNn>N@B{6v6m z+E1{^b2RGLwB>g*_B*Zp=oGzheC3)`eK3Vq3 zsh`MttEJ@rnQ^B3H4qF1v_q4Z7EV0NqXX{ka&bu1Y=)dc+G<^=Z&}0Q?n=`ZXx55@TDg2LlZf z%wLIF$EQJCpY}FLa1@RPjqC>1n442^jD6`c9KWCjebZA6ohxx3M+c)p3vThtyKLZ* zPm2bf#L?SB^Srm>ML#L2S)`$@tg`+{~ z$VMLX0rgGH6_g4wmxt1Ec?%q4Z@US{=g?g(7cImp;2!71c^n;#CJqGTGqi>Pk9>?~ zQ`b?Nm30zkdV%8v=q6qYfKysXHNPh2xf#p90Sq)zFt-u&WvW0o@q;toCJK(i(Ztmq zK#aLTta1-iN5|Z|hK_}lC^c)*G#E1*X~AQ9()f%0&4J@nb9b7e@!9 z(Qo)Sx;GRe?-h-{->1>zyud>~jjjTK&(x@2qa6zv%gY1D`bbN;z6!T~_9V??5yykx&q4Sq=alCxTJ&11fmq_NAUZ)A{O`#6wag9;l z{H~|e1keNo*Nd;?kTx4#7tW{m2fj9OC}Y!6z!M42lTd0LpbfQAiGb1wqDfXB1gS00 z$HyP}k0$n2q=mMm3^zz;U)jjmS?KczHAxvscW1NwAD(?&89CvLx8vQYMNJwWVQgF% zoVDX?BOto3$yWs|rtiZjh)M9!aa=Vz_Nq$9_^x#9hPjQ$yj4WUI=gVJ+2sm4@6er& zBbU>$TYEabgXN3YJb`-<9y4<#9oJKMW1dIy@|cB@bbO8$vzVrokKufA4cy_h`z%9w zG7Ce{bwlz1(m z`KulO|*B?^_)h~w`G6*x>rT{vy&Z;3sL-9Nx%}u(L z4R{ogFTGdcmFrpf^|Ix)PeK2Udl6wVdp5FgsP?7$-#>I4W5nfM4Coqk&e(ICA5>Z? z7UUwPY6dqn~NYx+8+e^letJ_KIa59P5Z z6yZZn=m{KzzpsOVT6{wfMW|HYYP=$}p8-Mx-Y82&rD|5+U@SWWoX7%gI-Fu;d} zhD^X5R<+H_^^Dz#|J+SDodGJ`0I1WGsS28BK_XBV-sN2j->mVLlod+9djxt_n0{8{ zq6G@?J<`HI(YQ!Jh4=GVcqs0SgljI;sO=A=G!*u))VN4Wr9X6sh4;}oLZVwQrur>GKAwePelJRsUvkm?#`RYs?Iu5RV7+z14Tmpo(|BTw;aR&3=Hxp4YlPoFIQcXy;GUKT0`Od z_)XBdqsLMOjnq(E?!g^m)gwPWs&ZutLAx>fP}c(FXWpvDi&b4q2olX~$8Uri?lwvL z)!4_R-W&xT9vQC-oTpKcP-T*y9U5WkOl!ZQo!aYtOxAwvg#-1RHK#P5gUPP-q_x^i zqr)g@e>=vsS}b;A;q-LwH$mHdvJGR!%~oM0rMZT8!D8Y+>&R9X7xbR0T6sN@dfqKs z`8MXO;sdv0HWYX8Qwb8Yg6h$oxxioB50=1J5KcXY0L?i7=$*k>Sp>9)pgIF^5d9d= zTXY6~?iH?*;bp>$p(+O(7LGjpVrcsY@Jcmq>?RZ>eDbg^pyyGAiQlhN1@ZjP8YtM$ zFT+$M#&#nteez~0UX0zsr}@5ps=l6t(J-+H^9MosL*5q=d-4gyYP_MGidm`fbDnXF z>h0+Uc5EcD?|3~lO=R6_1AEj7>{mWESz&t&EPfcUzxeRx3VYtbM(zd{8qx--CTxCT zU|SHV!s;R49Z^{2hTb+j{v8O|qS zo+wE?S6Oi{$JWK-zA+e3ujhtq?i5T;CH;3`Qz`C!dl6UogU8Ys(ItbDnki_!0ew6f zP*Ugw1(g`k9dUrJOCPGBl?L?9AwZ+s9#qgS18P|SXk0$JM7VLvfO>5MG;#GR1$|;b zKVe!ZnKbYQ1+gfv^GDI;CHa*vQ&0l~x^+IF;=yo6)YZX&=AyAB({GDcP?7+n1UWgE~FwE->ISE8T=26WXufR?q!&=+-WG@wl6N6E^zV-)m+0qs2kXiZ0$6vlx&wj_EA|3?B^Vi%c;JoQ5WjG9(ZOvu$ zfptkJ-;R}5_(Qiw7PjzOU{$&2PK8}#U^im{DyhL87)l}psRnj1A6RYrqv#U5g)kaA z*7!LBXQ#I~2ovIY#l3_d?JmOeDwg!=tvjDlRURa$ClG{ZCH$Wr{|B^$r>`2&`iB8^ z>W&#(K;IhBNhJF8E(1?0s9F=R!Eu;7r*}_Tub?Xl5)aJ6dGD5hdS_gxpza2A{7OLm zu0W0S$_KxJAhnQvbPUkY8R#Ve6&p}OETHQPw$ z`vY1vG+N!DceNm^g?ZF->sHlJwT>g4y2rw6&jG%EM{lKnqrd(&xxgP-jQ$Z`uOVD{ z^+*(;Z6#fm>H&Y%GdBU>^IR9DdX{jr>N#*~`u>R+&%*SNhG_vk@rp-5Vdz0ua||;i z)p*QJ)1S?<(xW9oVz}P9-ix353LSgAJ9@jng+sOHVyM3Ok~OQO6C~Qwp-*lxn;GN8 z1lEqPna$YDR?#_l#Bv%2!uhRrQP6JqK$Qu18y3&)0o1YcEehIiK$mU;boECQ6!ek- zeTU4M*=_z{Rl`>V%|%^s(T%BKX0NFZ^&G7V`qhF~Cj#o5IuDQc;3scP(A%UHGPWv^ z==)ZXftaUoe(n7Uiq%iE!ufxj0UDBlF(AfV8bNCGELja`c%OQVeMoIyXlcnTr21fb z6jhTIwp{u4Ady6tD*T0T;Cb)tRh{;cCXjWO$N_=><&PIU!PvAmsS8yj>c@J6&^!fD`({V2b;E$>AX}$(zUv{SHN=2oiUD=K z1l5YkW|D?FR$l|8hsds*bZIybJ&EEzO&?GmZYD@HQw%%Rj5C-=ru84UNL6^m&_7Hq z7?feHl5ZK%B}nvXNi!=e)4v$d-$>_a*L8L(H*3RRD_a*%1T;Fes)E`OL|(g8mmcT~ zJo(fHWp$vT+Iu9Rv>8zf$}pf28v$kXtfg9TvjO$TpqMuKf#+0(_ZZMn%oEe{a&SW< zy6=DiRmWsE%@eU+CCw`a^!+1%re1TCs_PqqD5Mx=e+&UM(U&6O`Ocy(hy58tvxL5&RPZG>;yz5^f#tu6+%5aVvzV2QW|;0g0nj^@(0BnkTd2lc9n}L1)3lF%JEW|}`r{?5fq%9fGnoiOKVLka zzZ(TSl)L(=z^4;IxE0SwabRJ5lQj|-X=O3e#lVW^^{)r(GJdtSr0>=&kuWAJf}cV? z!jacBixyj}HT$t>mYm)@OOd`OQqqqY0-a*8f|Oh-R6Auqi}PrCejlnWi4o_Wt1ZNN zi|B!j&0mi&^3L?qa!H$d9;={JW8C*nkCmFSi1PGi^8AGioX5%Yt%%4>RbB$?GgWyl zY|>^nmz)vEg_$kn`Q_-*nODj4dIt~-rTa1sA*Gw=!nx9=&uphD-4(GoSGrATNVSx9 zPE5jiD{+p@nVN&AJU`T~qVC13w?tHqcE^Dpp8&t~DDaoBx=&?h4B-Nb=LrJqfsMLKxKE#UiCHm$FtM#cRugs!-#=4f zH&~dplEmx=;pN$gz?tr-vzYMJDZ=h43{Qmfczvb2!oXHk1J;pGJB*K(Zh+oSjfL}s zXMp{XfgTj@Jg=)%!8wl!#Pjk`?NybZ6Rrl~D|#b_BWk%Mz z_k`sse4WNW8-^%J{i=6vLoSdOe_Z3L=higBgP^#OvtWyGoF#%v*iYJ`?nHiep=$0= zgsD(`KML5DA)9w9z02AF6O)YUp4$>Y=)Mo=-Ij@Afg=NVYHwZOLXUpFXhi-oy1d@u5)2065yuMJg%jUUZ&&z*ery&N*CW6FWXgpst z98gO>q`JD1e$v1`!_y`VmgkZ2;xpv8G#1X6(E$A+ySsw^OAtpMTXq}5QMhyY8b!Fg zofoS;5}1R3*h69M2qR_O!@Z5wBU zGX5JTJ@JY0Vxk^}iwMCh*{E#UFL5da+q4yhcic<(4`{In(P>N7(*GIDS>CdyNKAo$ zN%*{*Ec@~Nn@OVX%`Meu%vIvO*pg;q5}bl*PbfDbY%!G4-UFCxlYZ!$incDt|8Twz zkAOVS{xVMu`60wrOUP|lG~J*7{5W2jL%#D#2E@()Iykkjs$m{MfAtqFpM;3I54w*k zXgxuN$Pxr)lF-_XIYjvN7(q=Y2q4alAX~dW|44fN?j9_0#?N3+TjV;PUSc z=%?M#dgJTKYEr3<%<-9&-gn_soja=xQFt4T?@mIk?fAq;DH>n7858eR#q;zi7~H^L z?WB4?jWlSoux5;!DIomH=hjk$xxR#OKC%flfBi1i#`_2#k7WbRKh&KX@?kh*=_ufb z2vWmh?kZvS{d-i3zGY$7)0^cqCp>$gkBZMP77nu_h0l!|p;EYZ2bdKfg16)Iu_h(` zuo)|=c<&Y?le+)h+xMb+>i(_ zbv*`(&}vPP&}zp=gis9;X&6HoXc!D42ItlkL* zFdz}3b9K;u5uqIhBw}^04-!$t>V$^iS5xxqETSvkM+)bg;9}ATV|%JL{6t*UaMRbh@>B`Lg$J%fbeq1TB@e=ld75p=8>UH)uw9g~Z`r&D`OT3PYNe@Yt^uc>bTv0=B z;;M#iiy7x}-Z6KFC-?7bGq3ycVXD?v9Vf1VO`scaB_*cOc?! z&0-AEqJr;ZQ82I_a^R0dDoDuMf`aD!*(kit)=iX5dln@v_?yUYRdO#PIrb`k@Ss)F z`A9Kl)0A0PAOjirmZe(otI#IB45DFG9c*-icIt^b1&%5>0s*Lr+;Dsw2 z(FyKm5AM~zJyQt zTOXgH3wEI`g>9*|8rk!OYNC|c46i&$C}t7+1xCg{2=?n4xk@~G4B ziXOgDKwlY28pB^fEFy`(@eZOW8^^!WWpeN;U;+;XPm<;PQw_v7Z<5mTd*gP9Y?vUv z$U@&uiFULC5++aS7;y)@;z_q%kK!(zzO$0Fj7QQHd~-S|&m26Y^$a-r?lF87yiFcT zy1t3imB}@EYvfeo9Z16DT6`80jY({TsVez0{+hUSB(_ERCf8M$&ctWuoq3SaO8Aj7oed0hbNcWz)o? z@wkjsm$8W-&ct-xvbSmt1_cX!jxF}=uSx{ zGB%;!y^7cq{XU`o)r#0-e1G`!NY&L?9;zoFqHd`6HO`YClRd(!y-sm^Ty}_~S_{}p zJ~B(#aw07sg@V&T?u&1FQ#i#py{VKcm*4-kN@G~auSe0|8>o#DcOl`OW0M~1jxWAv zyK~vtL((p*)HAhcA{+ad%3O>}`tsJ;;XDh5B8g9`!Rp~#&xRP#Mvf@nnp z{ulO_WA9HWQ3TULbQmo<(T?NL3Zv67dfmqeaeV#nobYRjbd zsl2LJtxHQ>-6pRhs*PTVtJ~#ORJAP!akXMAqkL~#?d96Ix`VDQ*Lhd36z%l|_@pBqbuUadW zww(TCgHky{Dl$=$+81Hpe3~rLB867=PiwE!z}6_r`OL6=7ol zVa81$Y^i~nOpKDlnm`^`0d@<2oytTjTz7(v1^KsZ0jR=FH=_`-c?ZFYcF@DoFgkUL z(?0POrnK0(SpI8GWNFO^7kNfsbWDrm?Eyp*s(mJx(pvo3LcKsYk_d|gVJlU14W9^2 z&hxaQ3P)cqzB|d4HSyg?c;Nug>7Z{(hS6z60y&fvw+j=yN_{#tQ~v~6-iJc&BFLNi zA8Noq_5Z68*JGq&rG7_j;*OD}2pp76MUbf8J#s?5&>Yof_ z>}ArMt_eEzJ0num1Wrquw2p5iC*4b_-|;bpsd5B~zFF#YtU_C&9Y>)NCQs?;6a~?O z(ucm1iqwDg8lCz?@k#wEz#@rYq<)kxbG?aEo%(sF8KVN;!;hd-{{{{CrT%wIRCHz% z;}bGs*_Nr_WUwOK6F`uu|J6)IIP4{eJnO=xWO$cRde*U%B-L7^u?v zd@jr|Wn$1|GVwq$nfRg^nfMUqLRz;ROD6ut%HnAK?kF;G4AV{J){`p31PhsuuA4HY z7`io|dJ0-0Yo?=M+5#%z<51vq&<;ZEt7;WB+llgOt2Q!L6i27%I(7-}71?22h=rmi zi>O7toD_GqpB^Z5Y7Ug|!H#?vh1^Aucc5H?D+%}yl%^VSeM~CWK&guf{96?8J^=(d zP`<@;i8I|nm`H@5iE3Gp1LfLDim)JnAP36ld5ry+^fqaN9w>bV<2eFhPkONiJoIrI zC~shO6_~7*x}3hO>~v7Dq8(pABTSys(J2a|1*H#t%NYaZxBhyd5XEPpv<4PQ1Y@Ak zn^CgNdWK0mF8A`86YzH(h&suSpa;ra4fqX|0rORKHWQ=j02r}s%Yia9QW1^?5ad94 z;)wc`?L$q#Qt&IXhQ^3!fve*JbSXl>L5X(IL)tJp#UxCpA0QeLbg1JQosSW5#kbGm zj`k7SUQtMTrlk}x&tvk^iOY0cK2G`}O=@A^TVoU0V|fZpMUpxNOq8Ya*}6=;Yb9Hz z&`iF@i>e376i!cm3C0~2@PmGY#{AbRAk5&eXuv0&p4k}*Dq24gVfW}DvVBH;d(zp1D@9agdM~8Fm^N5EX`Ax=}q=% z2YnXm6vwc0h<2Z^DGQ5Fz6@@yEDtL_MQ36hcW#6ToaP6qhIh!6e5tH~_)`qU&*foy zB4b>F=tBA!JlgRi3_2YPa2`Qla>pd`=RiG4(5X2|)WvmVCEP-D7eU@hqO}J6CyD+V zaaDz)o+Pfq6kLZaO$s2$Nn%@(irHc!go{d*1vyFl5~c{-0|;`GxEl+06zQGN1U*Tt zn1=_dDCQq~u?Bo8Cg!BU?J(&IOx8;A=~aV{ABl+7gvl^@N=Nh#3Zez2Pk-<*NjL`U zNrEUolf-pkM-su9Byx3`s~Qj$B=_=_w_|E2>g|36JxOfUfKOJt*VV#;ccwd3PZ8rX zGGf`5lf;|2wGf0a{RlE++*>XQQ6Hm8ZE9&WsL_sEFcwCqPH`GBq=v|w_Cs{u(5aa> zgP{?5H43?lAaCAeYQR5l=4iwv{xqGnxZHv5`9QL?F@PZRrny_S>uDkk6O}3pGH-UC zP=t>I2r_Tp!;Rc1(qlMC3p#J+k7SIRz$3g^1HLhb^5*9#g()4xhyIL%)6oDGMLYUJ zBTSys(J2a|1*H%D4G82-?ogdKMDfX+rBopijJ(;R%dAhqAOt3EF1rU~fq46M9ZTt-ouXoc&MImm=A z{4*pftva&s-GwMbY{tXCXa~L15k{v@dHOEG6!9^|Dk<)MY$DXApH9tmdx9!?2!-55 zkT>04*MNVzeWwwZ`1sCBx7WAgkw00gjf1kO2r}K`$E$F(CBjjnS{7uw-G|Rp&U8od z@Bo5Lx8cL_xf|)_X@X9-&Uo@kP2h{YSOfmuYDzaJdP-ojRtggRnFpt15!w>%*bj{` zc}hp8D8Lp6ls@$S3)1bwVLIK2;*)OYsX`(c>2?_|WtmI8cp=m6zg_SF5K%k$5p=o@ z)qr2RwRfrLOd-aPWW=&9)9p2DZCw#Skm(j0uHLWM>m`UcFdFmTSt7O05FnZ&ziiZn z*E%M1P8NQ+NaoygXmYgU8?eLZ)G1GYuTG`(rbEPy6t<+ehS(>m%%f8?^E#q0Bb%a- zy9n}TUXlj*82$QFD zbc%v#LFq$(z5|(;h^1LQX(5VF<`q+gL@+Y%c3tM`4MYXWy*xe>f5DZgyZs0{^G<2N zFY~rxWQ%e6B{7DO5zDsBybg(qP#u^rL1x~stJDYPv6_JSj5ftIpNST@y3-_w5cEYQ z(GGfjEsRc`;xu9~MI$LL4~vRQC^|J0Y9W~}LLqk%?e-dGds8m^y3DvZzA~Xc%OOOfm_HxEnkY0i&=!9}j!N+%mjr3v- z_=yK8q4rl(m^4c98G+DX{e&mcjycc>lc#iaih^iC=|g`$1qpTg^*W)5;*(IvsX`(c z3H81%bFBiR6KXrAGAiI42dN|pI-we9z%QW&S_@+rVyq`4mTj3(dobKY#*GUg$b@Pe zp}yHvq6tW-oZDqWi59qe+zf9Kf;DJBw1eJk45L%0Jf*KuAH@W`SfPZq;15c@(B^4{V_N-&Geu_O|d%ai#-e4gm*Nqs00+Y2;tmrS& zI30V?%4i2YfC-bQbaaY>XhG@og-oumM(gAvicfMi1r|vJBe}ZjGS?3{)yXv!Lx2kS zct3(pu4x+ZORi;;RCMkl#-C)wvMrNq!x=?56hM&4^)6O9@mFzP(*z{fx3gt(i59s2 zR>}1t#q2ea}z3w~!_g-h2M*uz`;x zbqbie=lAF`7pcn)r@rT3;zh;6E_2S4zqz0K)0jK_2>PD?xCVT}>6v|SyNcFl#F#|h z$d|CfxxD93!`4A$V^v_j1bNTDqk$sC1rVr1JXBz#2>XSCO%cZsrnd*x5T;Xe2tP>1SD}!*2=Wf$r!?R{gx}JLe6iUY!W%DR zYy(+3A3%^pI4M`P=nAkR9}ty_7i{Gxcu74ALKPt~fFOtPV}}^qL3(2}K@Z{otX1!r z6??G;e7u8(@cS6v)I2V0r65tBI2}cBHQGUG9WBnC>YUJs^N3#5)HBEM$n=WK@5gJ4 zzt9JNGle`HHaIkI+y$ z^>rn_+iRQJCqI_$%e$Z*oJ)6A3Ls#6(JXwhGmMV(_k+Ty01v`(8WDn31KIW`_6aK6 z=+w-%y10(4luTX{aTeXhG>ie;5qAkt-(X1%oI)3&wR|M-stUFmiR7s|gUjU_5yMe_I{} z{B}QrUNE+5z-NYYuRDj20Yvyt5u+s;v24o)<8EuW_hkTK#!Xlhwj9OGExuP!1PoSiu-h#{I*>aTw5ziCO_as)f>L@`S7mRj8Or9!;hfXiXS!L6G_kP=ABd|>p(w} z-tObp+rx6L`0Qy#Xdgh3YsH?aiZC*OAlHgV)+@qPKSBfEs}ZdgM+Y&s5g3>CQ-tH; zZ?uCt$SICtuORm#-oT;W)SR)Y)||JPlE9ktmRNIMWBzRv=AS(N8C6JZ{Wl*4P{7Y? zKxO09q8l+HQ;B*74oZoxK@hXqtfkf-FOdj2M0E*51M%th)SG{RFCr;T5dJ@a%Ay^a zPza+_r#Ovxj|Njx+|o2XAJM5fA8ny}?m!`T5#*hZj%dJtK6*nVuDeLZTKx+5<7o<6 z`XhiK=cBENwD7$FSdkAA)v_Sxqld0mgf0ODIUjv_GhSUJy-}Kg>g9_K`?0U2Ch$Tp z)_`AwB{^yEqLm7hwNiXOL1>%~4_u9Q+y{*?c}hp8D2Nu6K3`G@-P2d5>-mT%KJ(Eh zR3QXB4^Djaj3jGlm$O$%tiJ&PVhW zBoW^kegx}zbln@RF(9<5rTgJ$v|~LK!syf~P9ta_bn=X@GBMb+Lqo@yc1Sg(NxXO3 z`Hegvbz|D8i^s~c%th)}v&9BBlehAsHK3;g=E+~Tg)u7NL;VPP+L@#QpMZI0rzWa+ zEGCAFjJT9-Iqf|Bup(>^AjoOwT&5yC7eJ8H&gvD4@Qoj#0neyJ)6Txt_zeiES=LVx z-iFvjJ7_L)ieuRKh<3!UlxInCov@`Q-H5eG^1JlRbVN-bWC-dCvs*G3B359-S78$W@ z%b|M3Dn*D6Ajqx5W0UbbhxB@C0=5pnR+U=^(E?Y}LUbuYkODWN9rUG@FgkV0(-VkB z1RZL5M!$%AG5dSXp0HpHWYQ05Qr$a{k5cudZVcr2bea4!AmaNo`d;%lFDkx0BXiD^ z|JEt|xkfTn9|vhtetSj_(9;6Xh4N|cN@`pRHSs_cg0R%aazr&ys?Yf-^ z4MnBOf*i7 zr{f%=80~ODEli%$(J2a|1*OmX6hilOC;CJUWTN;CCG zsEVj}_!0C#-k|}X%)^>HTSe!2V$>%imTftZyVg~NZ~X|?nj3Mul{Z40S{esxw4)A; zh0!TqRKRJ3NFLAV89Bj*Dy5q-R7o|Y3Egk2S3$C2C6d&Qp}I(yxkz35u7~O-FFFT$ zDqx=cs+j$$fIs6$&_nfI4fq7iGdmCWBO>4aCdL9X;!?KdQ2oscSQIc{f*h*XVZ{^{ zdIS*UP~Ch~5mNmK4fw%a8mh1F!fuahmgXtKk?hlimSu&hku?F zKj5?d2z^Jp?)InT&j3ALc?M%`c}l8>ZGY%LdH8G>vF72Z)AAo537V zf(1#u?#|8fmvXkqU&?tPViv6Ld{F*U&Q|&v9CkTJrY`I>1)BXAb{-vqqS|{-8%dRNE<}_+M&)!s%;-xb1Ng&r zfjTOEL|Sxki33${@jgeX!x1`XKGA1w2mNPhjDB#;MW|#B;J=;%cu6Hv=5YjygH;_0 z!iYV9cenz){vm=#zf&gkEq6Da1UOWJ^y_63Bum#qb?^e9B@(3{HS{7mwD?$mU4@v&@Z{k-m%cCO@O*8i7cTXcyrO2)v+6?Pg12S z{kEAm>MkT5IX#H_WtU{oFTw>f7LbQ|l95CVk!adO%g|Wz@-a!HACvQXX)!W-gE2`m zmT89aW6mLfk4lh!eNL(?uy0p@`LY}6H|boj!FL&6(eZ=$kDI|*BL>5lL=Zkwh}a_IHl_AX*LWI57ojRd@4`@Wl_R&x133KrLV>in079P-FDD-+Dk{*P6r-HCa zxPQ*llfF=OAhhfW!X3hb(-UX`^8y8DovgYQF+^y^nebQ*EDF~k{{QGY_W-M=_K)v< z=1iR~ju;Z6kWtAcDj|eWsZ>f~oGvqUI;S+F8Pio4Dj_Ow6pB#Z5OPZqLKH%X_zCf% zyz;*8*LZ)Q@3Z#a=S=a(v-h*s^L@VSy4PN7Up1}{`ojv=OIXFayms}A7h_xF>z18A zGBQe|tja)F|0qG$`E!V~jq^81JRU!g6GB&i+O=Tzvk}dIQZ!Mm7a6dtpB2kn{=E?U z`e9&>B^-%bklLWlK75|9e+ll2=i71Y2?8^yyP^lXmP7p#z74bus z5`Tt^*B=QTwbeu5S@s}^b6f%Rv%3#H*Yk2laG_XCs7-*a634 z9oYTc;iA7ET0S(+o~Pq^vNPy^h=GBx`Kvd7IF_w)>+2_pF7u-03k@wcU@!2SvonA$ zSm#Q|bmZYx0Jbe>YxdreJs>zv1WCVjNT5G1<`J~<-)INmL|-qj8-q^rxh%LY-PPCS z??Es7D=^x|AzUY^A0J<&R@f}eC%&D!H95#(!Y<&?0I}VlNzr_LzG7EIvHhvEmS3w@ zj33Yy)=Csg*U#ueJ&MOfq@So2tIg@UR-(3alt_=_F~w{1|JP-l{`v81_vLni$Ggq} zby!HxJwbn3tb6Gi-UU5LhZ&RTx<$_rI@yKdb*J1;=yVrK)Lrs8p>tfQe%)eDzH>Xf zP=mS|v2<~ved_KhmaZ<;sO}YFIoE|6*QKX;bGx}v)4DsE{><&}Le1(nevwcQ#t8D# zylzv4&U2v_b+3AfP%js1S@#_l6?4ybp(E?AnnkFu3$?1d;{-zeTn{uI} z>y~i*%^l!E$JCu9&cQBpY~44-S>{5m>pm{dp)Pb>-R2xI@ zG%s{Vj(&7mbUJ5s;O87c{2UwC^y5oM+})oxtgHKzY{`d=&lUNLHeQ^Q3Vo4fg){>5pz3Jx@ zBI1@XRuZsQ>@ZCiK97~sJV2?`rT<5|J{1x4|DPQ|EY`b?hhD7{0By(|DlHP@uKlv zLp_oge>Vets=(2_5ylruBV+pYYFGbWI)19e9US_bs%t5w5T^O|DiFV_G=9+pqOF^2 zgZIGGvE3Kbq3G-HtGjk&tAp8VcqeltdP=w$!#j( zigIg&kVa7!u}ix09KsnSwK-?^A7*x!U+$ zC=D8P+2#$2Kfb`%pJJ^7Xwr*WIizm0w$Ptr!{{MOXrV=)5k@;(Prq9?Y+GW!zRck= zK%Y_1Xv-UrVVp~|tH13<3@5sy|K=J-H@a<6)_VAF6#!dib=%!1cuOdVtt1+nON_qd2J-9Yl+F*F4q{80XYH|EFBM z<`7!fn`^j=`B`mO?u=UP?~+0Y+j0%CHy!NCh$ELuQhBPU%{;93Vp{<>9`@l9V#Nvi z0ng;!l48c{VUhW4`1KvK+ebcMJZ!$?K z6)DT=$io@B6LA%fr&+Khr6%1*8j^6xYndd3OKV&z6u5XRr`q@dr^{q1m zm?LP&pliCLKl_U9hK@v+?gHo?J<$>*oO_yu@=qhD#c?_ES^zq41h75p54FGFw%HV} zR}c66c6zdfSz?2VwCA6o*w|tF@F4ibq}Sg6Kc#pKk?v-9Q43T`HlAqzq(pEISX`b__kRc!Yqm+is(T5e3uOXjqqGJl|-yp!f0`Ns2Iq`Il!=Iv)8L8=E<3#)+ zwn?dte-RjegUe9%+b?tF3oj&1g~(!ur+BX0CmyB(mYU6<`dOL zkQqm0KlLOVdc7kN?*KX}wecUW0%j6nnb9Zw-9_=B0xCr;v+q9B8C-+@^r&Nlr(&DT zmr<;G2(~ybhD7{!^rRvh7cflwLq7Zux}~7bQX_?Tur!g`cfCDKVZqZu(>M7+MzQKe z_(c3Swn?dt>%bi!^5OWa0&YEWR)f1WmL@X$;Zt?4D(~qZJa*Y#fGGk*RXH^B*|jPi zk^K#kZ0NB}-q8b{l-hVtWu{lld!|M=X{3^!=!*}}ig_84evwQVf-gS29~puqqc1*u z7g>rPkxO`!=H!Dt?`dOV6L1Cqcax?O*Fx=pZX>`81`Po2CQXN-0if@0fSC_*v*qkA z<2>(W`CS$PNZvgd(T)035&Y|OwgY`Va@DKH`3(4GbE&G5_N8hP@tKsRIKC2(q*Jv` zSVXZw&N|TAbKC>dqMI~=xE2k*`0%F^6hPx;@WqGy2)ekUM^S@H8Zzf*I*lUy_PYS0 zn>4*6Ls0SI7a!7(2enfv#4{oZx!p~g?dJx7xw`0&K4PPELZ1gcdzMWQSPdeJ?`dq#bE!KD9-(S$?7G#Nz*xJ zEygdXu*!=2Nl6iYW*0zoljf?(P@}>sC%yb!P#=qhXeE-OfZN@qDH$IC^eL#C0C$sS z@sR=Gi`@Y3CQWZf7VFZrVb5nc&_B4NZqoF+fEyo5*%?*CYpLwwxL)E-*fx0xU99mD zZ1x%Q;iF(}Owud3HO7sMQjj@%>DY}MH@q0UuRBeERRTog#_f^MuH%Ly`iQBNvY}VF z6Y*!+CZ#q$ip;bc@?l3V^;l-~@K}w^{3K$TqbJ;4W|khuj7Dd|y|FbpTYxAtM=HvE zcFl|d6nWNj~E;H|Q%D0CL?hxQ@ z0iw*TjC^*@j3ZhcWJV7kB;xP0O-eogL^9K?a;9H_z0V-t`SyczWuKvgy~-Q>adzfx z+SC838O=Y-_YViyL}+*BbWg0ev8hDmjecY5N(BBHf>jGf7JtOo_b-k-qb!P)lewe2 z8oM&5Hz5=8351eP)i1Y;EuuL74@D~?VQL~?n@TCR0u{%X%cuxGRfU>}?_DILs=he> znv9A_n94$sL7~_>2`>lAs0dyqMD43*SK>o@{fK_owVrputkFEbjY2#5XZtr1^8J>C zo7giiMNgwLFerY=`TnVq!E5E;$`p6V1&>c+^~_MoA6z|=`h$g8&&CI1&D;OHQ-bD= zHSi5HJ%{P%ANK-07deAVHK;{zZ|2IDxpT?=qxclW_rA{MyEy&=;iT9SrtYn2qJH1) z9{Nw}4ZuYFb=&Iy*~M`gi{rnsO)7$^0BT=7226bv!utsFm-TTHh9>rCagi{&`sfiE zqWWm@M6NzW>W>oUX=zb?Y?>V$d(?+vZq8w%`Y?k_HLMTLe*lxRaOShEeso+MznT+W zaa`~BB^8k{H4%Tjj+L1CMREK)85NN*mDh1uCl}jPi|3!2Z6+1Llh3G$xc;bKY%{&$ zcqf@HH&W(k^xJq>z=JOmTs!lVwRCCo?8=j;r9BrsPepy#V(-glr-b_YC zBuwQ4a(kLl(Nb9op!WSYHA9KdM*ju*%MLUiLlb+kw@8>=iDyNIsKlGw!-E%ODY0R;L>Sloqhg!YC7mnwpP-YnB;r#0>fI@dP=_>DAb(keQ!zBLcdm+r z$rYh@WQdB;u5^<@0^;#jh zUx!{b>u++u6Jry5Rk28zT<#kXa)v1PFLIg=M>LW8ZG@S`CYSqfSYFr<%gDW9`sXlF z?#K_XhG~d7z(lz>gG)7+`}P2nvLxbC`|4u|Y+E-uOqG$)BZ$$pGXy;>SVqfqo5++x)bYzH%rY~xT4I@(j zI$=JL78R|G3tAgG5<|ln=CKIlZev8{GpkEFSH5>aCuQMlQf&L`TX_`W6Z9Ky{F@>) z#L&dPzgHwot_Uq7LsW!TPv(jsQon~Vx3I|-VRDyT5ezdbhlz4;2A66s_j3UzWl6-P z_SK6G`&5`W@I!K*IxpCw_-+KhbT%Pdu@(*DoPb?kNCCHck$ zwJ{F&`_rt`dXk~%^No7#w5r_yIuT4LKh8HkF%M&<-{(5d(-$!OojK!${>aNO^{OWO z`mnfj6{=>*P&8+S7t@$C5ZE9G75Mv8PeC`?PCa=S`4e9-$n}jv zNQWH6K2~v&-?Otp^rogh=TzVi$U*d-9$4nne@LjuLm}kK9K^m*aFO3Z-C}~j8N6dz zl7r}Tqp%b}2IQM7Ldg0Y#9l?e$Um6VM%5VqZ7zMdw)`T3K%l0>+Ny5YmT_v_1E6spJSi)P>4!Xq z&t=#8HfmQ&u6BnM_oF+Lvd~Wp;25^lZI~ZPl_x> zC*VW5zo17}pOQ#&wMZmfK=8r%_vV0V!E-^{Z{NFqeM5xw4f$3MY3JEi{y>J6>Yh!R z_XLzN1O5~Ny+izUGr{y-H_KIbfxjP#yX&0qk}dw%s{yP!)eV5o0Nm1ZWuyW{RvbSC zhon=r?c0lLt6$znee;e5d7bp2cM7=fFXl}=(0@2*5C@fPh7$jkoM8!m7_Ju80ROYd5Y)cwuI1?}4!E$p+MgBn#xF>8*X~+A zyxG}NSM&|7hdCTN=&t4EU$l-eF~eMx!?^BRUfFJ8lxl%tCgw1%yOxh0%e)}SS==x| zI@Gp;e9al3q}0Cste%fhFI@w3)LmUYcduE`J#zK@+O&)e6^k=3TAbmsL zkwaQ%KFT_C`8luA7y&S5KvxDG&kAw_700Agwe5R}s;SN*Rnr}}=T(!9iglh2r_5*j z&DxPse?Kry1oVrRu%(cSuXC4wWMl}A)jCVkEqUElP>Q!%#q1klY80=|!_E3dNZ*hX zbI82n)mc%GqcNb28PMfL#Z!>>$1&+tZTspli`N;xg6LIuuq+rtM|^;0aThR$6Y~A9 zl$fl3(X(v1Q0wCVjN&Ph2J$+WmaUBXpC?Yg6%K*#u17|lk)78^z1}x;&j=kH8Fk7( zx-`PX3{#cExFe%ZMG++ldVPUm=I1c($f$GKwGT#^xM5tbR5J<|$6v%JDYdWKI$r09 zSBRLth&ow6B)?8xC*=G8Qwp;BMKjq_CoX<(0xmvm<`!==CzvNB%`8s8Lxic>%q@2; zjgY<}hvbm?&3xqagCk(ffI*TJM#19vjW{Nq>bCcKJUmiL!J6F^Pn?XjBH~3*14_Mm z$4iOL!DS&zY9cT}dL#Wk&)Y$yVC|(uuz~(HXK^oJ$UBWZPfa`U)WXCtWGZ^|J9$=i z3kv7~0|rz86C^e#?hW>DBQJe2lWBXwFGZGP>nj%r3ioj@bqiThHXcF5HwRQ{e*(*q zvI?(Pwf(?l&WIs*-pt2Yu=<4s+qM=acoK%0kj2=OFb8=_`KIoJP-Lr-gztH;5IOV~ zdTp;sQmu3?IskkTpg>!YHUPiHNH^V|hGm?IEOz!e0mU@0QF@;6_ro z@yI~m^Nz-r_1MTcwH10%pMP^aF%#C#Q zP%&1*=3Y|7sm`RPl)gtgklJ*mMgon31gP*bATrmU7f%cWlDeD-1@=Sc60r&&I&(>D z9T94Zk+VU_dLpt$E_V{4KpNRWM4WlzfGV%#te|@is6;;i1O0gbe=j*pPh-XAB)oLr z(@^#YZoNSYz2T{j^agQEpeM{l8Wr$aPr}(G8)YG#k>5pxa(?9`($6kyWQ3L9PNWmQ zljVE1^Ue0OecVgycPO!c5~|5DNF3$la*#$yFC%9W4LhwcQ32UIgtONgiI<&g`*?Pt z?J1CcmJ<7(P)*X&it>`rsbnG$*;U8_2oGKY;m1bcWxupN2l8f!rh<3~Sr4i^s0tl2 zR!LNXDs_TlHAon9O21lJ4!(ZJ!o&~wObLCY_<_&V$mdORlRAlw@Ewt+anF1FuY6|P zT84B|7Xugc5~LgO&;AO2a|C~ho}pe*XMQ{}26)?h=oy2&lIMa<3>X~giOVR^^XuR* zh@D@nbQE4Ykut^Fq+!l5vik*uB6|Q?4B^~>@YOuRS6%W(xFI6k2aiRF2sb#wvf=wJ z;x8|+si9+YMnGSSv02nlARD1yA$lC%cl00*0U_)2$W9RN1&FN?q5}w7_qipWXkN%l zTq#uRi~F5anwSoZ@ST^ntS^6}H+T-buwNqYf!~W0@d)av z&=2q<7%>X{ORQo`N*4p$hKwo&Q_By^HHtFU4gzZ1PazfINw@OB!CH*P0cnGL(gqRf zk3ic4HPXHEN%zhpE!dww&w+XlITq3-0qKDOX?#S5MvephpamEnqd;VG{X$W}aug`OSqJUfU_Lqlo_a6xZD>epr-6v8{^!8^L9 z8o_xSxS-D>?Sa1(!aL=`JGt6|{d3@gevXs@|1pGj&VzTp>GU8og$H<^p!F8S6SILg zyDunpw>)?^#oDk2nU^{oAK_agtMTa{`t;26>8V)r$;js{e1tDWw&OE1^y!o5)5o3| zWL!xN0WRn@$UX_C0wKJA9=v~W3Zn&p3wj^Y5%|ADcu5|-#2pH10pNoE3mE}?|NDbN zmxk~mUY%0KS^+k9qyR7CBYa{ZMH*ZL| zPw}Vz4Tt;>Mb^SGE##Oe&AOsK*`F#rkaZWB4#+p)9td&Mq~&l;!3lE#(zp(%!Vou8 zS`K$IIAJP~&fxwCasQAO;VQKzsB=VY|7GFn5{2{s^hKN{W9TVPG9!>GI64r{CfUe6 ztyN>J7a=>%O2JR7$c%9Exfxl6Ulrl(*=*#O(xOt9(@!ro20N=71&{$lFRk+G zEC~*~b4wQhJ`M2jU)Ph@d%DoKI8$&Ask1aVhrp_3=ox^fAiu!+>u#*zAC9_%)}mJe zy%uR!muq000%~N!OI<(>s`hS0dIC8Ohz$;Fq**V~sx_^P3b8VxtRAHJRd(5@m0e0m z>Uu+_6VXa*1u_A$S%kAa*ihbVf7>%1($$98gM@Na!+LPlUq`y{W#lA+?~$dDY#^My z#hj@DU6J?!%OPhJCN^Ph$l}q8WLXO9wfv;0UVj7J1hCa>`N=`O!lWw}hhoSgUOk@2 z-i@i!D?cNuOI@}Q^eUtk@L{{cy-Kad>kN-g!eT{}LT}OfJR|s2TyI4B<9-+6Y!w^z zmb5O7#hxc*eo}(kz0lRJu9{`!BKK#IsZe}PIJ=CEYIlY0sa;(&i`C~+e2yx=cI703 z-;w2zv;>*`*^ziDU02(QrTLkKi7i+&Sgm#~OR8Os1?B1dv7kIX(fVq_OX*^pT+c)j z^%)Cyb@x)b!qy3MAEXVChjxeP0-MZPWFU~Yc8BQtn#}hgGlA4&omwNGr4?8fBW0yt z`52eM5j6T`ba!?2SCN%C9)sh6ODoe}`Axxm!W%ggjO+*A&YBC%$c02G&=P5|2N4ev zp}>ke7|Mu9H||8GPln4XU5a1MU&dNaL-UeTu_kqwBQuz=^1KEahU0R=*%55igw?iZ z6mJV&h~JR8pgzH1rIVuB_0UT)oJCqiColb$tWrNHD{UUD{cwIR@|*q(yhXW3Co%x- z;UKf$S)#b>KW4a}Uc?5K3H5T3%Vz2(PrA{%ghXH~ax&N>A9vHa4fEY{6hG00iB6RI2@@^M6JdYoWP!U#S;sNNbN_2 z0>>ijiRkwT8LslGTjZ9M)h%*M%IX%;lCu4+GpcDnaxJ-Ymk| zL2Rf1FRj}Nu?Gp|{PLSgU^$LQn(oQ?C+AxN=alX)Ou#biES5!B4}LW08`QXR7Pj*jIgO?wnHHF?UYUZ3wab8yN#*_uUxzS5Mby9MruCLBB&51FzT>?xl1W zLgp9FE=+6$@&b?nBe)l#Cx{E?c(rU4sqXu(HEX=|H?XU~a;#SOU)NF9R8}_FtG>_y zblmFR#abZq&S9|)<<4DFjhDWG^;)c)F{=mVmT?_uUN!B7Nb?3<0ep4vq!Vh(a_%Z z@zO^yeuj)W!y+h1TDRt6_Y=&eli&EF5#X~j*t%}v{Jkc#j-h=YAT`9ek?%~P& zBog1t^9Jt@(Jefg>vSnh91G;OT_L4wu-3+^HeQ@dUibCt65RkCA?7y4Siq)&eZTTmy_oOLgTt zK#AFYR+Uk%Rmfh*R#Lx@aCQhA^_OznGkWR|SiM0E>dLj1y=iO=Hu4*D!JO5jORF$< z#60}Przq9yLKMu|F>2n(H`pN7&XnW zepi}X4v>24MsUKMxP@gV+aN({n8?^Erf;YBX{r)gXR%v zMDac{8=AWVnr%|lQ+0H0bE^`rD(U}cBj3VD__6~pO;pa0?*&w46y+uL zC{IQXah&hz#@Yaa5)mB4MlE)P?U`=rnX1@$LOG)R<5^B3_#BxJiLPg7hnh1<$od7A z!@CzI)?$4k-di#usH^O`kr|5gl6r_KSaKPBDRVIo+DDZeAV{kQcrNj z4#kwCD!0d1ZcvA34TR|<7#{CYm}tBYKcyE-eKulgXnR=nxL0f#pLBtm@>&7I z9p@D$I>T}U;cRd7_Od0mhvh1y#U7TqRgqp&Pp@R;x(J%lJz11NrJo;W=d)3U z?y@~pdT1>6E1^6pd*0_Bt+&05yvD$AaW9r=urzrRmVX5-U)#RFm)3)1vC}Z+vDkA# zk8J2D7I~GxaAI$kab=?2UF zgtO&r#4^_Q3;=rIY;O?RKCIaG<$t6YYyhyX4U}s&RT~s*N31$(N{^TcKdE0~q9;B{ z4tevDVi#la*%A5ZVYHN<7@G|K8Ds)JXYJw>pP*$ZPmsx=3+UD?DLqCemreayo8dNX zSGUrJSSBH(IKHcnv&R==bNY~?o-dQzkPC6gb?GjyK=dHlP|QbM#EPsTlknXkdYr5| z<^f16Aph9~LKW(vvVoZAA^m~uwYp|?0MVmm^D*yrF)Jw`ZFYy~8M3`GAC4>s(r*_C z+0}z&#h6b-wg4HoJ4BBporJkNlGu;ugLa4Lk+L3`2O({Mtl1r+=gJ0Sz8o0{jS|xf5!1!@ z@*#S_qbj_rcYJ$GRhP<>de${{25e$F4bgS)Z9zsp4cvjGfXLhr83v^8GcK=R<{;yM z$XtQU1#(mX`6dUs8Hmi+AZvj13?M(}Addi%`7UG!kjen^XAbf@5SgDs8tu=epa4=B zbM;1c{|!XuO-Lsos{%;<9HiF495a}|Mk;`82_Qu|$e}=Fu5~}n0OWrG1i0$lU({ zu0bC_{|_LY0#**Rc|c@->A`rS8<2$oUzRjg(`%NX-@KOn?G4 ze3;uJ0Ov)(?oxBW6hMKFc!Yxt;F<{7OKJ`{7N9^qkoN$783FrB%>m~E6ln0H%##{3 ziai(R@j|IN;6nff>hl<@Ux2+L;3ZN4mR^dv6XvpNZ){2rGtvOTDLVBE?sAPi&J7FP z$3^Z#rRLK49H2mhS1^GGcy|QMO3eYirep}vOHVLE2e=^uR!GeO4+JRC_?6t30Qh4B ztd^PswgV{8v8%Wv!SQzR^I=_#lbQqe0w_?kCz%}sJSPH9l$ryM04PwSr>GTx6%p`i zsX5@)00lY;nGNuk2sm464tN(pfj&T11Jr-BU7wmOH3xhepg;n6BH&V~IbbJ%0*y!30$dpZmr0F)#r9*N)BxauUc81I2f*vBB@;i~$APyz zI1#xjTP_2qugj11xa^_X^4N#2;9O!I70(_24 z0Ms@D?Gb<&x(5Ri;H7usiKT!tfF_i5qC)rbrBl8M%U-tNNDBsYL^n~q3U7ISf^5Qj z9uQlmk89p15XN5I?Nk)Y;=oo6%d)bBdvgZ7(&`akWD~jz6R+J z#Cs`VX&*uU3qUxJ&XquFmFVb133rC(4(f)svV;SKOBtgUm;t- z4399KB1}gxvLCvcl{U#PR#KUf-nh=vn7@~Pi?u0ME`*Hhb_V&4%_(O{wcBGC<1NqL zh`xOEY3SWkn!KB1=^1#t5A@}{tMQiSrN}_M>#YmR&@am095AvseV>P$z?==n@;6u- zZCW}O>z-JLU&(xNT&b&}0bvf8;V<7xWF`L7L;rEoIsv*|TY zRjzVl&6x9w?n7pfP@tS;&MrG`o0Ki>k0(qF;O2kVkv_E$--ghq4~pD=2n zzk#c(ghy&r!Xq-|D&ak#aw+>1SM)t!339wb8W|}akF^ih;XT!Dp2&3xtHkf|k?*zt zV&072U;dTexTn{3bW`BVJ9BK7>Ck;f?-0c140J@#I-+iLiR9s|sPMlRSr5mx;;0@( zpL#Jk;A|E;?nO7DWKcaC51|kIj9E1v&qp4wIFI<{1C^{Muj5|zZ&kWlJa@rQKC?gP z&_(}4e#+ZMX)0|Ctdp^pS^96*EN!w3pONKkM6ev`hMtRZ6_<$zA1c%Kf%4O34>kyjETd$+)c351=n9O{JQQ0 z%T(BcIXhuUswD1QJA+h}`r7|8;Xi_v%xmPp(#%Lz4lK=#BTLk}!YU=J6?Q@Ff?A~$ zaefr%;Vxe9M&`})mqIV<72h(ChW=VOT`wtjl@Kp|3-djgho4$PE-PF*OD7FKMZwCT z3}ia>0$k#G{s-0!aJ?IGjSjiiVtxd(;~G$9)aZL)i`1m6j z*-!q76$O}sUk~$sRfO4xc-go9jG(84u|~c+z}PW8AqXX0m%3W8*qr*VA@~Ul9X53$ z?xNZ73$wlE9O@C(b&kpn4-4J%M+<7Vu_Ng!=tMR9cLoROPI!ZLucdpF4oN)%dHEQPIWA7+ zD3~*!Au}}>Pk9~w2i|y2!_!sF!k}VYwie1j{#~{fUTdNHu51fuS*XEo*?I-U{n_=m@M7drAM)n2;T)PL;Il^?0Fdu-CeH>B+W<-SP73KOTFtUG!ECMq- z!t{+Wdr=zMn-y|F9n1@0hHB^-bD=xFxyhu)A9JBBxg(=Be)72i`31in5%++IyBip@ zgK2go`F$%aYiWc@gZTyf1+}v1g{&?rEzy{?uDn`^GCM_VXd2-;{i0AKm7*n@22yH37V*Ea;^ANt<))cg%H(A1>` z^||{2*v6wVH@fj?HRDmRdWTP3Lz7%lKg#pI6`%E;TXGq`6_5ZMkv4$#-4u3$JEKZ} z9E|KI?a4)TFeic;+L|@Xm~a5%!Xg;i7b7#lToPgKjd;ESBl}qmxU3FlN|aVOBJr>{ z4KMpadvRcZSrTC$j(83MBm0CR4#K0k^B-Y?%Mwfq5oQz^*%u&l!L$Wqr}Qx|M40Qr$iDx+JS_xfjChtTL0NaljXFof zYYn}7eJ+@&HT2q*xnO;+AwL3z+;7^CCx)PSK@`{41@x*^`c3H(n5SVL{!nA0Uk|3O z!(V23J?0J9pp(`1c9r-w_{8-;q|q@P|53KzkE(Gy7}+n}pN9&-9Q#HBi zkQ-X`(v@7gAHcg8xarvxS0n$b;r1^Xa&FCWlS{HGm5JN)k=ynfZrf$RZQ{WP6(-6L zX1E|cd|*3D`CCHMusIvA@Jg@5@O%?0(hjB0B&LLJJcJiDNbKKma7lhl zp)W0WOqYQZX5pbcM*{A+&GecZ=%!xckc>y;hB&TAy20~O#M3zB8Nt&CV;cLiM0slLzZ%kL z*=7~Nm*vi(qZjPU3r?^d(2NIcU~KswO*YD_IC7(T#D~tP#}e^K`-n2*$~>S+pkjEsi()xsQtS>}%6IY5~WglPepsQ9@_Tgnyy<~=NnNga$pZ4S> z3=-sF2H|WQHjLTXQ*9s5cCkIL?C5jLv40ZEvFAT4AZHPMjckPMMZ(z|&6(orlg$6Y zGBwQ;P*`t&pVF=6IFZ6#-uTe!;lvEsK*1-0d3<7UVWKxFl;JkPx%KfTDt3=D z=0JhvN@wZmO;qd?Lkbhq1Ir9&>E@LxHl_T)bc2iS?9rt9j&$lU8dD8Bn~>~%z3?cQvwV`Wd%w%>FmkI*)YC1nLD=mTIG=~8$dod) zqXkcGk*S?grk)6g0WHfbf>4mDCj?WbCg8dSSIg8hE+4BWS+1USp~r$;t#P?pX1RJU z$Q2JlR;+cnnUl&Y$nOScDGTyjx%?8oUcDi9=m$a9lj7%fz2r*(GCr~DUAH33D8*TX zvwN`71SBHT z?pBxC{=@Ytql(~dr9O5Yqhh;G2t3imVVSG>5Ad~`Cs%q1K{=XoG}Ex-IIC?5bM;+~ zTzw~la`hD8%K%%heo?K(=5%sR{;SK>FlFkunl+eOPdZBD;Wj+rMmo1bclm6(Z`o*l zuDjVha>&B`in37(9`1slT~Wq&y^CELewjE#FT&o3BkxjfeV?hGdrC_&R-C3@QncyS zlgZR(G#e(Q_~r1lSAoh!-+l{md;xI^8-2Gs^AKUR+S5o0x!dzYT5c7Q8iro5eLTCt z_B^HifABv8^3`F5i5Z|fgSL@Gik=s_oMFJT++L!X!h%KbDYr>|Slk{gQ?zBdotNy6 zUilN0e%shp=($Yib+F7}EE`DgW8^W?ypwQtBpdauN`0do_or*P7b)l^8(mKU1>cHm ztqf1k;l7=4_5n63;1jlIdh|Yxqz3x!1fHHdp0VL08fgtAYKGHYGc2CuTI`IVi6*)h zJJSU>xJD|$QH`{jev%&H`RDw4rji;F6kld5{-It{X-x9Rw8P=Ni6o`82edCtv?u*^ zeYwp8VU;4qFCXCzxo!cPm;4&5dn|k`VHNFMqzuP(gtJ$%QSq*~Jx@EGEw(QR<=FD8 zSWev_7>>+_B>piZZ#oh$br;Sfuv~|%#(D%+Yji1Ubmmw<($AbtBHf6yM5O3R_90j4 z+i{b5wr&&lOe>;iLUc*CFtHu7DTK4_*eJgpZ6BZFF9mTD2rqrQNEZ>GBhAmb+*1Ir zK=x@v=OmoH&S)?!#Cal?CyisyOUeZ^%9OQm1yF_#B6H_pXHMYz>l> zLgp)&LS%lxZ6#bihI9UcuNAiJpFwKrRq{KxhF^YG1(st4G9TxRoZGQc4W{PfEXym% zTCDRiSXM24AiSntS)o|Vs2+Mu?O;71eAf{y^YM8D>wr?OF;;%(?v%v`lrkb!e&^gc ze(N92#R<>@k;ZL3?^}65{FXz&c?1Yq*C3ri9Q}#S6f2MRgS1PtSRO;{C_fdm-tW$h zNs6%^-q}maIdvwCV%vdK!8kNvJRxNC(vwtkQ;D}mwi1_`nJam*2 zIsQ9zJhd;5`es*Z>jhj`#mOt@k^_zh|0~F^}|u0=}H~W03fH9h<5_l zBtl0Uxzv4CM#Y+=-e^gkav?Ks@O_Y0_*@tINQn}g9s2A5p48X8QuBU?aCz`zrl zL%s|ST`#?yR*c<7w54TDm*45+@C(lSRd6|@Jr5la&Q51zolYNYYlNjK(gy377_8IP ztfR0GRO*)(6s_*(L2^=R%=7e{i;P&rcsw!?)}ugWe+<&BJkW7;slidCAd64cjNol> z?Sah1y-MyUvQf>PX?tqsW@<)=hme(^ZpL6WBgMLpmh|a$99FR>iL&akV=2FSZo{%1 zhBuJUV0n*lc8M|2h4ityjac488l1>u>tFn3^@Imy`hkl`>6NmT` zmvM;&&aQ;Bd$X|yd6-hkawaki>j(^1Dk)Z~8>zmu-;dC2qAVdh?D9)>8J12klp=Fs zd5~~+yfIKJeP6E(%Lrr*){ij!MWctuZ)yX15_T!F1H88_$deSy)3nLZUJ0!r%aKMW zam@$oU(kj}ccuRML0`H6n3Y0Gjq1{WJ~Cnv;|oY9SjQ61p3X+qRjHqZz;P4d97mCY zUQ#~@$q2p{*N>12+}9A!PGh6KG|Tq%rEQc@h|@-Kl?BwN7_8Q%SP5?{q1ICu5~{U5 zNXy2b{94}zxFZY$koB-M1DXBS7^oh7k8mKCVaN|y`(XWx>Inz3RE!HN!d4-l|HFYiKY$)C(NmpT=xKXr*Od;Em)!OX$(LDJcNt^^rk?3%D-N8X@oEN zhXKu}E+UC90OdNemyy$Q2uiBB76D28OUm~Fk;+WEQZ9!Qm2z?KonlibqG)u7_6eCFyM3Yo22vJIufh}rfW4T`VL$p4RKQJ z#K7cW(!B)CCwp;_jZ{y@1vynBeQ^9Rbd(aFQ5J;fh2;0ZQ}sFTRe^s9nT${2zk^Ik zahW<#r^ZV-FqeaQ16c;{s1PSb++K1KkkpfOrHx?fjb?NK*EhsTaeRLONiQYWv9ZKi ztxBnJh}={{AHRs$`ta<9#82U(D&cGy8zq<83B%r4+9JndeHDXMrxYvgD6dzCjRvP` z{|RGKy*;H*ySBq=22z4!t*-*dpqk>-Y}5^!*q+76`vZxnBxFQVYLtBTAWAOJ`LL`<9)sy-!r2rXl{|fi7#<^( zW3V2nC@-mx0B7VN=eA>5_CfG5;p`$d%F2DVCoAo!iP)cnjL4={`NzGS+Ck74sedXj z&Fz5XOGo0R^pVjEuna=lV?7OPjpLp#!2lVI`BJ0|$l%=}`qJn~%wv(+K&I^u(dS0T zVV;Jp2C{T_h`u>G9rGMyJCIj*hv>tjH)39h>~k7d1b2sA%wQt(qew>}4Zdcy)bc=z zYToKLRSis#qOqK6fc3`8)nwKP(l{ndpT=4ntE~~zL~2R=kzEN;>)4e5McYE*0=}(< zp1KiQQJ#j(hjtc`qCLTvW{0|*QxAd@=3`_nxROQteT*iO`WX1G)rS(b`cSmh$2ndyjh-qz7H24rMyjB_gGg5&(yTt@oH_)Y zFs~zvz`ct#s1KSA|YP9?3Zk zc_bXA)3Y@0+zlvi+|k=ny;|vIJuf4FalMW7gzsg-+3VTpNS|kW&OHlARfzv06F~in z!LnLsUYKfyS7)B0Evq(AuEt3YJ0~(n!s(E2XaQbzX&IZp)!|a_0g-v=Bvwp7ItfCr zI@On!EA9u@3EWw} zv>bVBaKhBTk_8dCmjhfkUs?{=9h@-L$W(CO2DoxxS`L>1C(OQAG3f)h|F5-ym~cZJyC7R|?nOA;oQ;mL^rISaFC&z5v5Q2y#KuLUjL=>2Ja8%# z=`$%Z;q1k1)S5$V&-J09AbvskC}LBeLtt8K9*V%@8Kezfn*q{LmCJl-WSA8pfh`sY z4**dY$G5SyJoLHdj7r5#MSHg!#FQP;q=6 zTjSe|Vtj>Os?KqqC$6qnvp9mU_V*#5w1}_11wy{(jPF?0cT4=``!&*_6VE(H{?a1< zZZ-V(B2;X@8%n*~it!iUH8WT$;Xf7=pL!VksubM$KNU*qT#^x_^)<|{fjvm1ioMjA z79_JYnCS-DOpU-v4)c+@IK3+;4w^rFX+~~?m#$w6^B}SY+#gu&d?1D17CgLrH!wlI zM|J=^?FUD9v@Z=@>0?;FMQm{IL!>TV{bc@!m#7L4kk0{Fp8t^Y*n8Z?W18XFhMv7^uH+tXP<;mA4QKp&1TbZQz z<<;KkH|Lw<VELTZb15gZ~SwBcZl8auYwo0cor)s@ZCbZ6msG|juY`))>B{MB!_Xx zGMuWw?otaoX_eTG#9J-c4M(d5W!uZhLC*Ih??JGVaCRaam3@ZoDSPcUye17|1rqPf z%TE~G8e1ArFL@m`nX0&i-V5f;*{q?!?fFa41Ekm*iiP=S`w+06_aSgwoTr~*)Qp`- zyk*kepV7?@{TEB;vHdZ1f^^?Gtg#@@5Y8TEJYM!F+jAZp2;w`$OFzbGBX$k(#wW!u zce9+wIEQ-4C)s91(h$PKkQtCZMmSr^MrFUk_AF{%6V=;Qh~_3Ov2;PUVr}|sP$8BjwJI~Owu-e1Spz&(%BCy$K1ls83<05!6t^^f6G-|Y zhR@ig#979qgk^k)L!Do*vCVWRT1118_K?jdobAU(WgKLC%D7%sPY}vc<(E-TgCR&G zWstl>ID3~lbKo6D=a6LrG8=1pWIfp8zXfbk?9SDII%o`s>Miyiqc32P(~HPz9NS>e ze&cAfzu8`69eH~R#OKI%P^F-3U1%i^t5C64g-=oHREo_P;J-oiwT$aRA1SU1HvlP) z-%E~C7u4oo4s)f-y z+n#nmk8%rfH&O+v2PnJN7%mplgD6yNY?w@)t?FlXavQv^BezfNX5CYC?c>=?ZO?tZEJ+JF5ZM6wWelpURj#tA+n1;;S#Lvr0kH#w)vXjd z7*nn~SA_&bl>P($Sl^ICN_d?A zfe&xxcc*}I{S=!2B0Y(oOgMWQ8&P$!JyZ>`#O@$ujcZi-9Z^o-K=30n0qE0&v)7t4 zWuDT5RXdh_Z({j|bq5AlW)vITHI{vAaLRx3dF1VMHmPrVGS1@E7TJX3;eQ5>QXxJWTHmU6STrk3^FXBt>uDN2cOf=YK&Nt&(X3 z8|W45ItP&Sg`C`Ct%$PLu)ANJnTLF=2?F=MFsy)WBeEQLZ^GF|M&M-+wLLA`oRY>y z5i$9dE`5W7F;@kmZA_y;i0#zP+j(Fpbo2%YVomla4+!KH0EEXDbGqzwek8A7vPI)d!?wx?95 z(PLtrF`%e-0r+n(yFkM(xMOV3azT0y+=*)fve=yHD^ z;5wuObejlg?=%{UwpvB|E_9aSiuN;_m;8^4Hf=IRlh=9}-b04La%c>ekBC&!w%eYf zZPrBa3`{O7A5qIzwBLfF$x96P-okPemQiA9#YQacY){dC05Khemu_?we6xu+KD%{h z6|bn^GP@}51H2Yl1LaeMvlG~ea=Puw*t-`(^Z_9wvU^&Vv8zcybuKS4+;l4oTUhE9 z!17|i@`huX;%@~p3WS&bTy5AAkn!2@l3(X?zZu|dNF$Dh&Z66w4VmH_`WN9`89Lkj z)8Ndf3qQe`&vkA&E`a2M+gQy)bf<`VJEClf?c>?B?a9?xavobj$Z}-|9;bW4a=!+t zfMOHj?EU7#$fs_4Eta{+0<1q{u+xGR4VhlDH>{~?oK%HbhO7s7aNKt%Rd-hy#3#UH zeFymgM0XIz6x`4<_=4~za%wM55$^*16={k-A%sf_$LbDK2-uMO91wR}d5tmdH=N=N zShx~ZCDVX8|yckj3DB4RKN&?n|8`&c`Oq zp~yz`LkffPg&F3ns7ys=Zi(y!au$$aDk{}#QG4zze_=cxCYq@>O~AT?UrIyq#UQGP*1TRiL$ipu46C)>0Oav z1d=`IO0S?^3uUJ}Sk!WGHBXTECZpsmVEcIXOWQL6|CUS$dC($Ot)TmZc6UPF4{tAU z-ST~RNRa8h+VaW{*b|X5@H0Yu&D#-*wjyYDIkGiQa_E7~#wq>5o@#b5RwgNK-D+1# zlE++69o|l)@T-v3_-rGbUCKsv_=xSv&KWQZ(eh4~tf2O*PFLx5!^yA0zv4u1*uq9>PYc9%*|{dS_vM8sQ28=?lC4E*7-l zZvir5P$^f_evWcL-wXqIOvOWJ?{3zwcszxN9Y9jly^^V696-fv1UVU*5A0u9?EsSE z4xkK>^ebr!RJ(3aASpF^bAK?I?YMM+=VD|nTrELmzYCJ9ykmwP5$A>+QfhF#1|TD! z68y`NZ{Qdyj&^L6<;sBT(3nMGm<|}I6IDw>UFB^Y0W#@ za)JZ#719~hW(;;jNU`o@mzJNSP_f$eg0$??a&ScG>j}XTA-k)~%oeHRb~uf-;hp$bS3#`|49pQ{aU57O?rYdv59!APRj(BJ_tVs**4@C2)`qoec7Dp zF&~heEK}}biOZDd$of>C#ziTlRr(#q%P{UbE-Ka3Pk77oKS)o!$2sp_+bStF#VWlT z!w$r57F>&!n*|*|;L&T{j_9?06WulUw7Bec*Wg4iDW-JkWXvnktUPvsxN5(}JVNyK zhK@8DSChYXYq42il!pWU$-kzHLYkw z*#}t)?J4+VzX@o63up_8)IH3Rd$r?I9>@%`33Pg1UD6p5rX$6TSC^rAN&WrXJ+t3~ za2BU`5RZw-0)_jtQSJxZo{n)S^g^7mlr=M`FEG$jxw`%UV@Hfu*FRyUuDz{)Q`fRv zT@T}<73gXGxIES%8B~fC&PKXWnfV>F677lfC*k9f0->?k8( z;bVI;{b?7KpOA6bHA6coJqx!^O7arJC&)@zb`s96FmH-(drnHNus(xui;j$ainas! z415#58))T_;%3P|0!dxXMwp+F2CQ?=*$tOIn0ZMoO}u5zE>Z+D&VxDIvi`*+_k#Oa zutIS?;cPE9YL$y^ANNL{LWdWk5i$%^`r!u9uEuP%Qrz+M9GaIrVI~`UBKda0avFrp z#c>DW>{2$Of5i6GUt88ivHE)jY<9gM$YfjAIbKFygJCE~*1&Qc(CkkEi$_4sIkE?t z6k;l}Lzz513GJYeR*K8yP&6-jfHG+h2cJn;PX9$3UCdtr31_>rQ6~G@o=leah3#QN zR%BcG2bnCtK$(=+H!%Exbb@6w;p}bZ&EvneCzAunq!4@G&jJxt`pUhat+jVRE5&89 z9-5c@<2p74ML2th zd3)J=ZBHFcA(KLEK)QiSpT9S>b&CR8DK3+HqIt;|lu3K?b_Wb{+IJbNOdLpwOk+bi)*xTuzjg zT}q8fRsjp4%p77n!Py1T&BV6}XK!OePvYvdPIliD$}t2z=nuHPjL=>2?1wZ5yZ=6T zf9Slk+iXwqx`6EuVl>hRRA*3DJj)UZ*&wG_%X=O2mHG^yG2pL6CgW2P`bcpD$^pVH z11HQ(WEr^myW!FwYP?)QycNP$Up8JUDtH1?UShZhc@LIP2xsqNqvL6r?deOk2SViU z8xYyD+y>2VGu)slFENaMfE6hDY7I2|RlxG2W0~SV526nU9^#`{3HupxEco%@Yn+s? z!0;(zC*|v~Y6A4p-<*_Xx0CWUT<%6sk7te$TY_fgmcmJSaW9%}Ho6l14k;nw^@Ovx zvav?rBEM~fa(?+IG=b%~--9evaV~6#^IL&)M%G4HPC*{Sdf0B(Q?ZmHTd|&=Z@tn# z;~FORGyPZ@(U!QB8hy3`L`Gg^Fib=0(+RE?%Xw^+{VV;81C}MkETMci5h8`vA=&#P<&|fd%F7=N5YNqGi@lR(kV%cg>19-0L_9oLJ79 z6NhwTtvQdy&9WiIjS_9qc>Rb4VDdj~GJ6x2(>cg$90wB4HfE#z6x*KsG)Z&lfar~E z2Xz$&JB*~bL!vK`)V87APXJSb>_eBme>YsZ7m(O1#9PLs)TrfCp~=Wi6oZhC(0ole z`#2lxBw6}=tX`vl!4_Y3P$?>S+C>h7ah`yTfS?_w?9YxM>l4t?o<3t3L>GiaZtbIo z1Ktk~DtU>a`@^hCVVN$Lj^^!UyV{9+!+;)?$jn1mqK%L$5`Kel_D(j|!lUH(A3{05{9!;~ zIi7+n!nytdIKLk_XJkDUODVDeYs=lNWmv93e!^3}h1tR};>5W@F9Na5jE75z6`HH6Yj$NJxVYpR6$kY(s&OklB|*m#%v_#ehHj8-3Auu>mu-u;{U zklpIzHZLir^ca<^6wS&dh5FFsI@1GPiB=)YNq9QpY=1UZADiU2giy{ezdi((<1NS* zoL`Xh?7%rA>#bOxMG{=V{bV=m8Z4h9ZLt0?-TyCj zzx?_Tcp#3`kd-*UE$2mnb4J$bSnfwY!}{%R)@4}UL>dg?fv|(~d{Z}4AF`aff^{0! z3$fN1);448fYItBgH^-Y|NTvU$ZqwK_L5>sJpjF^??;9~zj9alP8jYD>DN2@MSn*x zyV2j_CB>9JRn`3|npK+=s#{Bj%xmb&;C&LAOTvXsDD`F{t-5cOUo)a|e)-icupB=| z*5G`GocClS=Zvgdu@pYRdJyZt-K@2+9EmjI{4_D&I&wYrAxlT36V`OQB69Ko7|V$i zH~Kw-#?MPM`q`a>S%l?uKT?6?hlI1Yupvv?yKT?t_dfJOY(y4-+P5jKnLj8$jNx^} z24!7Nw?R2wi*#bA1GZe)eC{frXF_M$Ba-sh4M1u6#xH_^`ucwINOAca?--~ z@oXF0bE5Cx6Xscjj5+rh!30vA%q0wYdn@Uk$PchROE^20jo7ZTJrjqA;$UqTOjV)->+)CD)Uu1-%IV&o>33!Y4@{$A<`K zhqF=1FSk7{+7WsoS|S@kZNpHbMeAW`j#!K8f}?BEMfK2X9UA1q9stbm;i3^`6|xiB zW+1cQy2QPVtg<|VG-u{_M!q$5FgXF%-i#=scPy&mW{}(&=_egO{+oUxyY-W&m=~j`Pf|i3p;>!Np`Yl2N9JYpx8U81v?pQz zaGLsUBCVg?EWf5i<^1ydiNJC!e3}yDe5#!5v5|8|)>>GOL}p_x+0EJtOD|+K)^YjP z^d1dJ_!gopVY|1PpRmBaaa@3G$N334Pi12X%PPwk$UeilO^|OL+2}-W7GU`u>4-Ib z^&X@ZFAma@;s&8QXkK#4HEe8+{RK2TaY{eK>JP^@*t6fbM6YL z&HvN(E&z5`)xG$6eBi+V3KP`&=nW`ulgyc!ydXhBGQpIPgiHVf$Z;NLW==9QXP9%& zBtaULpa^OeU&Uv%TC0^;kO&1`@_(Q z*4aq_RdDfS(R72=j!qD44iIOwqO8nl4(8A@Z8b2Qa8}O4FQ|wZLpFb1We?ep^ zlBgTPA~Bhb`091|{T`Ct1o!@@CgSt!BzaUFjoX@)Xn48M&C{Y)5o`=6k;47m@#Nre6Yp%Dk(kAQpeliHHMYi(an zVf3sQn<9xY8WxGk+>fsw!|&}#_HxAB{~z#_A~BR9zxZV=gAlqs44wGwSx9=)CM{D; zm^35v!%6(UkB?u+kB9I_l4dAFejC5%+<}V$Vdy=@{itq{mgBZwg&)GdiSY3opzA8W z>csGp)ZOzmO(X7R;O@P+6CiKyQ7K{U(l-$Xpd`5u1nMZ6cTjN>6G zzK+S@AK~{EMA>Ge5YePQ&7|%^JjVION3eE5yqQ!yB=vES1cNWZZ^az80BsZ^n$%x1 zse2KRarWZ31Mxnaiie~=3&Lga?f4x+lyBQ8L^P>?VN&lvJjS^nzYil`vdUD@#6wc= zdKSz{{Z4@G!)Xy+S-ad_Z5(n{qig+(i#WQ9#ru9e_R%c&17a}bpe+$1$ zT3F%P4~S^O-+BWQ{xIS(&gox4l@afwsdy;k9`IoXKNG)KBg&uHC`2@=A2X>{h{re= z;r9^YJ&}ob`;X7TJtGA7;`dENdDd#vB1AN)aB>!ICtT98{*xUiiZkbgxnbXI{aRbC=b~vL^P?LOsa%k;J|8-<7_bv2WEG2$`K3myf}LA*n$cp1|89?JNOhW!QM|R&%WmL%Ik|i27Y=OA%*X}zF4_}0c{ER1;GyqewpBR3BFPA zdj#Jp_!|X(h2U=&{0_k%6#Q<%KP>p$1plPq9~S&!!9Okd7X<&Z;9nB_q~Ko>{Ck4` zso?)x@IM#)=~uGMj|u)f!M`c^iv|C-;F|>hj^H~5|E}OQ!M`W?tl-}l{569AtKe@H z{7J!o_+sYuAAp&-#P=prXtreERv;`)5D<*{e2u1SEUUrb{n#$=&cicwAL@kBxQ3-=eGEcSiBr z-^P|7L=P0VD#iIS_TgU82h2lAdXP$me@!Vp$^1RB0m7dc;AjNZv7oOd-tbF$K&SuCnPluTG zqQbIeSHTM_XoI3{6GcIB1BLS0S1h}7+4i27oLS<0eNkb1&(D_>j8B}YiCv5XTjv(9 zKD~&PPWL%5ecXZ9I4?PKd(%7ubI19d2$&2pK7vpT2w>YQ$? z^EAeUNkalgKclBuK6}|RR*+?R`dKd3^(f1-VsU#9{m(ofm0pbx&pHo9I$N9I89j*1 zGCmVuRkV%x)j6hUr!j+b&ofD&{pntQ5fV6W13Ja#`K$`gBwxAgIS70<{H3v(C-gn) zz+oPVavGyN*Eiz5SEI%o&t%-^WqdLBm5SH)_^Q1itXdx@YX42&GEL^cu#5w!(Fz}i zTx{_9k?-~%>wkgw*K}U!J@C2uy{M=bwe; zGmr|AK1oOVE@=M#RRv4g#urnp%ki`z<{B5%`rqy5v^8CMws0ojs@U-E3%5DdNAlMfFIInul) zq9s$HOJe{J~5?dXlYD?%lB;9eG*5C>Waapxy5~}{clI*tvUWsX1i3h zGT|V>(hp?psYdH{`zmyrXVG_DmWG0L<5=HS5MwekaIu~=^n59*X zUne<}5Aox1WM}3dIwx3|6~e108KUf}v8q@Nin#x@LRE4;U`YWJldT2)g8XDeaq-EXFN1-4wTl!*va`CTSmlj|@0)U;Gbv~fuwuL_CYCiLneGAO(T zf3*+pE}C+mrsY0bG%bJ(Al4wXeD**vYrnR*3Kg?HTqpPvD7U#+d?+?>fa9_l+}BFO z-{;~wCPvkT>HXn;57c(Y13<5w#5;cv0{le5plUr0xA;NPlMt6PU#WA)kA z>PG+iwX5qe;Zta}hv(X>h8O`NLutj^lS=sug<}8t1Dh_qp!}Q_`))b^g4=E_VVP8X zA!3vYFJNlvq;biq(Ow0K75{C)uT)^fMPGR+AbGp8I3=Pnj zY3^S=v}N-x&6)b@p=M`pw7$CCX^jrg9A1gPD@SK%S0AX)&D5tfm8r(a>WR_O)s2Dm zYgbM+W;%yfBEi)Is|Hq8eUTPSezM)39b4JAs&7?w&B~F+jQ=dC*6QKb^wM)&Io>!_ zAB*cLg^RtA=E{lsOnt5~`g1kG>Q$@a1V=BwoK?^DOgB-sYs}XoplXpwL2q>gVnB}EBpJbYpy;#y=oHKfFHElW5aV32m#9&ZO)80 zfNRL`Y|VNUus$4~okJ`j?ZdND669!6ltWNtZi>}zOtTy)J2F5KHG}%hSYvob{T+^v zM-HRr2Zv`70#~a(RUc)|k%PnO-Cfymefl15O%IRGHJLF!m~Bs@dSgM!TFub| z@)<%qjiyFZgrD0`gAb35v7TWF)^&{4kSyqE+QTCld)__UY)%Ev`rO}l;^Sj|G z`m~#7jL=KFs5ad}r}|ppC^z~Xtrt{V2ut!aBd#{wX`8yaQCOQAJ`8KSnvxrsnC2!% z?TAI=VxG|wYJn7=sUIvrP#D#rDCp&vyCksWZ?&X1j= z2Ag%rA@cI+z}q&NGL-51baU>o7D?zpQ50E5C7QK%t!FuK+Q9`B#92ds;psm!K4$B4 zU@DrhVFn=n@y?7HQyS7~H>Mix!z^N}Jyn~lPc>&rL)g5bdv>_N3cxkpoM&$WL%Xo9 zcv`+LqYqwWCbjk)#|~2poly1LJb+S~X$((+4bFkaTW!W3Ma~!A* z))ay8V7n_e%1R+MG&SCMY|J%hrt2hp4b^_sR^%WUKggWfSm1u9Wz>VMIy^PeG@}Yp zq)U`!%r~>MwV(;rGxmV!45mqW!zT_uCf;b*=Qz%4%t6u#`ZEq>&N+daq0G)emutJ5 zIgM2ks$*RZhJNM90m~OpgTgl)^ZfAg%R?UwBaFL{H+=hDe!1f$9CzwqKF%9G z;&5;^%tH8DN+Nw0U?>s<8WLNrF=K=Wmg~@=;gQD5@g`(cb{i6BL;9h@j)XipR-a>Q zK~smOMayfaYips!ryHXfNpPYToPL0z#Kcx&%nx^_NVD)U6EGYcwirdsGe9}l)!X~0 z&1B!1!8kEdWbUYeL*ffEa8HOV7<|aHW`;$wfNP@O*0@Mr3s|EFgs3QnmY(cn9`ypt zWfCYlyAs1rn$4iLgPYc~(JatU<_G#k?a>|`WrJ-T=`^O=D;qP|;K6^%GOS2m^bV{@ z`ih$#-Pem>azpuwRTG`k3wuhJ_iXClw6A}nvU*?n*{dcV=-jHl4{Yk6c)7%_TDklY6H(}*`6F5;hiijsG=a>s8~MO51u+rDMGhlm>eEZ*BB%Uou*ryZdNq^|LDLD<7(? zMqa(88+$58TS==tTY3K`6xMvMA4($olKJxfyHT9-BL(JJ{&L}=F(pl zOE>f!N2xab@1vFZ(rwF2{mV;hmzQo@Ub=L7Wuo#{{C@&!Ut5WC_DG)hm` z-vg!B7kf&tEB18C&wl9m6DN+9`g=;NdY)uPKdgNC_$efHywvmKhd%L%%K0FqFHFoIkO-xkq z@8}biC!VN0I&q@31>>%={Mbo+hYO;|OS3G{Nl@7;&}e0K>9wVv(i_;0=r(lMy+ltw zQJThQPhzCKQM(2{HToPc-O2BBVt{x{clDGu;Bye0I<8_|q>3h?=Sj`^RB3BZ>0gRH z$zA1d9r@9*V-K6guuXZq7Xtz%Wh0`+_nIyhCtKjuDU`FXr*aFa;#6_Dao$>bA3EjT z_`SZkyz=T&@AA^UrJl<2Q=qcae=YZ*{>xeKX(5-lAYQ%aNqXGTQ~Cg0Z^Q4?B@&dO zfM1iUpDca9#DW|x;gfyu1<%=D*?$~W{b6bFyi=wBDE3s|he3HkPo<8uE?EBmpjBUf z@>J>8p3==|VHWDiQ>4+pp2th?Vu6lTjwOf6cfaZ(M+8ze=R#qm;-(l6!U>x9t>aoo z8|c(2))U26r-DpkwleQFm08{MzRCyL&f3-+BugnZGgoZg$T#gFp z06K;0?o4OsvQIVMeIT!opw{OXrEi*w@XOK{ z!KFa=r%I^vOAUu8U4sIB_&7l_TmBUc$YYfUj$;h1t~^lbDSxlRG>-j|KQXoH$Bh5#VCVG(E#BoM^>nHTPS$wye-<|R)>qn9-zSwlU zbmQ{MqsZwK%=wz0%CnFAxLS&+2-sTrwIe@bW%%!|<&~FmSlrt4_0mh0mp+Py++J$- zgziV+uAKk%(utF-nUjb~yXDpk)8J&gCArT(*$LzTnHor9?Js>=BL$FXl*EGBy) z6||MZdp9voy-?hAOclQgzqp5~5FGnO7r(B|YA$Jm9^rruRGG4H}fVXCU?4>3I?Axs3Is&lG)NY;>H` zn2YyL`hK`roCHl?*n>iYxCfS-;_$O;HY36(kvbSm;C(l}KV2+tGJZ`&y`O%UBZC*2 z4Cwh8dRB|$4}9|j|8ms@nlb&Kr2huwTlqwg#0A&D_lt$%QBcFC($iRWM&3_v*npil z85H3jdj2!}QtHTfZ>85a3#lS}p1ywr-*g#%%7Dj_Y*gY)wrIMTb9`~P((?!Ct>fNr zFa3VRQhC4q^g~xekeb+6xy}@K6lMDeLoO|jV-l0rr{5RocX@GQq62})&>#K(5B)Dj zHMqNx(C6%}#%DQw=HYV*ebBI_7n|0m=WX;HKut@}wDInu*T&*KK?lDCv(cvaU0Zs# zjWaojIFGW~5wv>K`(EmU{+U7l9ThiKVJ<(S-(!e=>KJ)9WIayFPq(RkX&Zw7x=_U2 zf9g1xXX(nG6P2+_Lu} zZ;`)2k>34M#CZ_(7$){fdcGH)rfHeM=jitVCbq9r>6{9Zc=~pPeAI-Pp~Nq?(*LU{ z(otWeJ@ot2VzDw#j{LwW%1fp5*#K>PG4e|Y{rf`kZZOUhCpbY|VuOQRcjt1D6P4TuH5ca8J@f+EoEA}AhcXLxbcL+g$QY?0k z9_`*Nn@XqKCV&CfO8I{lizkjAtIU6(^iP=Jx1CqIZh2|r^3r9?Aqp&?SH{2|dG*bR z{2Qg>aWZWg8ua}5bg&>tMQauCY_Ec7dnp2WwH zY5ue{j3qrLF04DQJB|h}t?a?SPnJFfA?3Q#;hx_r{SZ>5Vh^OS`JPXJ{jjYLB9D6} zkO$~zT$&ml@21B(@ED!L;q!U=Yyg*glZf;?d$tRoL&%>_A_RO>SQOmfvF;U2z78Kg zW=|$GURjM{Yj`*V_&|Lbmc6n5(w?U$-=*j9h&=heeEIHT@hwQ=_pzY*ta4e#=Uefa zMEFEJ6FEu_B6DF2QTfn&8RpaP#+nq&Ju_yH;nHkHn_d47TZpD7iO zq5d)vGcw;rFaIMaV(|WlF`k6MGlXxUmyeRtU%~Z_ZC<`{Uj9$c2xwm4j(oj5(=L3p zy!;lF4i!4zRECYnH_7w-`Q&(>KVKBj^T*kcTz@_ao{rBE$v3~tKPkB>l4aqe-MQq# z7r4vcCYj1i&bWMTy9~qa!klErr!U{oj;hYA_;hwUs}=N<6y3Lc%sQ3HPI^fut9l+$ z4#Qmd6m=#SzCa!3!hYim(n4BJB<1IoJ8Y`pt1f%K1f5Bg4?u^B@^e1&tc8NeD4(;E zeA77{lP@x-D#=%tQaE2@KQQ#;h7e##Cx4f!o1{Zz! zqAxiArlXxxet7b=UVeK5x=UfijQM(cR*M_W(uq~!lesbR(Dy6!%`gcTl#knHI*f1H zmVfL!hor(sY}0;xwKna?XKK@ae3v%u$A@S`KNgcO&!(9npP9{LhI}VB!wg?SPhqk* zT9(Ij`RHppT|Va8jePi&YhIpwi#3zyDtcz~qrzktJWS7;v^C2^R-11smLDWJ+(-SZ zP!DGYc_H!bkaD>2JgU+U{rTKs`Ohg98n#F^1Yb9#qNY>2s%M{$5_on z+;CDkk16vt!g5ZId}L5^gbq>b!q|LNFr2yQ#|H$<{~%MtqtL!m3nyY2>6>o=<`6QQ zg)jL9gPC4@moJ_U_!b`oW-70ONrJEKg)Pc&`Dk7$IX;0GC&y>+!tP-a`J$buZBS7w z6EZ=*VVBLCuhfNEHxQF=(Q%hk7br}VPs`;DYd#tm%{L?kz7Y1j4x~O8T#TqBW_DM zdgaqwUFen1X!%+&1-^@wNrBH?<)py)e6uRI&G-&goHXB*V$z$8bi>d2LR3!5Y;?Z% z6eqx!nQjp&ymK)x}Ql0Er3-x7*MMSAj`pfFAP@lBw#AK(8;`|+)x(2rxAkNd=9n=kZ4 zgP6tUt2?<}%ZGGQ!-3D@__pKMdI!D?Sq6L{5+xX)PpgnF?-m8eD|&)2_=-yT-|+?a-yXH1A3x%2Dd{%m(r`TKj*svxqZN=08-!6?tl7wn)H|KVL{Gl#aL3>@J~mjd44VF z1(CEwgZrtRXk9=3ISuFMRg|Xk)9p#y_!<6A!}f89(pY^eXIiF@`rwN^w)??yjuC%b8^`&L?*q6M4meQ$nANOk;+CEpW z7hBa44V{0svl{tJKK*m$X)&pnArqQsfpyq0?^!cw_cz{>~t^C&~@ChEHn*VXMJhd zI`(CbG-$2mz!4;05ZbFwH!e+4=aKzczXSgqzRaS~K6JX!H2WMEgfVIEIqOR^&#^BH zP4mv(a-;?3bdEHv9H+t@X;3-qOGC=BFLR^;BK@-5~($KPRoC9OhqHorhmV9Gh=6E@MQxXr2^O7DSiHDJCk2ghA z9Pl)uTmBVnp7B(sTddF&Zq8s5>48E2Ox?^HtA=OtG;Nz#dxp_2ZMvK^Ih#kfG%}ki zCYyyuV!7))`DPr{^W~&<*pxRjq*>U!!Z0OTZcTRu4YJ0~%a}C8n)Rgt*4S5Cm%hR| zq7h5GsyW^?o0{WItEf5NGH4reZToS|!Z!roF)&ZyFlR@us!F^1ph4p9#}4 zVEOw6za>pi+5${Rq}{(vL|XbwN2FE1Ohnr8OGl*5zDz_~=}SkXMLtHvy#?7hV-aa| zFCC8t_A&{c{*`RRXVMP|+C6(Fcu`I~+Qv)A+m;iLhVL>N-<1>bb$JnK$Sz$K8m&v` zOe=Nic(h2zc)b1KSJyN12%!j?AU%6|uCF3yLYY1Lme z5SQ_!HMoo?O}}M4Y3GfecDI-B|7b#BE3nOHSFU+&>8#UM^HR^4{vBIgpTI?-QQWw%_TrNMXsc6bO*ZG+ zD>^g0)LS20!7E|c?!0lumKAc3-vraQwtW}wPvOp3t<%B<`>E#4#0vQned`>&MrTbS z__$06w@jyyK%EzZ3y~EBqz?-Wcz&C{>ZsKU(+7A>R&L?)qF;?AE!1w=dEGi=onVdJ zBV02-HryWGzH_Lyc4~NfWNdi*wvqWk{Mv+S+X2G(6Yf ztzS*lq!mTCrA1aY&uUHTp%=bbg+Ua3cnE0>t&K{*=HMJI2&M|W)_u1JX|6LD=mw)U zb8W;%8J!xON2|{ck5v`)Dd<-)pkNIzptYNwDO}I3;U3^d)BIOlu?0QKI(i?rop)(@ zu3B-`6<6$@YaTl6L+0u*0x+|u-ojlw@7v|;6-a?MxeN7UYNHa00!#)u4}p|fqM zx5lwz$Pg|eJra>6m%Z?s=ViyC!_y-el&;#Y!jju%5rNwgHr|+PwYSaTvSW&1-3a4# z-kCNlvxQa0EyqHmwSC-Yvv}*0?~qO`MWm?829FOnQY0${f3fd5L$pzIt@Whksb^&S z6x(TrwHoS|;ptdY@PVzQ#_NlQ@$6JUt((`>Mh6FdKd{aBVBCXq^~S0DGPq7-U%BBQ zP<@)+ts(c_HGV^<3DXIbsoEY-_oYkJjh+R`TF0-w{R@i&qqB!IC6PP$S6l(^$m!^+ z!V&TS@a^g0Lt)v>Y`2!pyL~)vR!2kNXM-|Z*mg2st(Wr7jJ2Zga*|(9b0r+b8qv;b zekPS3K{zjVBd6MQV@9Qp%P%)_N24_)wkdK_uT~r5yJ0V;0pk>gljPB@`i;)}9^HwG zZMR%)zA%MW$F%1~foeaeO4tI>f~^^!>a-@o?!xI{<5;tUneM6r#RcJIVG355=ws{e z8o!D54O)Y)VSzZB*h5y~tQTyDWgnR1nbESv%y++UQh$c&0N;w&1g4 z%{}jTow$(PFf@Qs#Qz$*=L@^9MTuq#D*dDiCk?dXlFKf=Bo&a?HW$Ub#tL`qOalz= zzHao+f=I%?jkVz3tvy1nCH812&Ou)C;n}HEhXtqAkPJtM=eBdE+8ap?Y34CNW)PF> z?)e528fsV9)LMYk0g~8)4Usb*85eqqiHanr15c z+#0MMo`of!v0!4$&bw>0a+dD5pUNWAxHc8FN0x!ctb8F?)WK8D31(Or zZ`JDuMC8C?s6Ab~6DAsC8n;RWF6Z3}qtV*gnDTsGlkQHhMzmRYk!~Vc`g5I=J0u-z z!ZaZRjuSTK#YpV39I(GtzoS!!rK-Kn!9%n8Qd5T8OH+yj!}%;V@hOQgU`aiaF9;SIJqXxnHSb!l3kGI>>6U@#udJ&v(=Tp zfAPZF38jyVIL%We2!x@9QeGM{FHBUfU6z(uhWNV8h#)&R{8PhuU8^&)V8bduy-7rP z&p=&CvrW8E+2b&6Xx3uIRk5l>MX``Cs@4zc0%#LqYq6a}%4zw{CLeJKomW*~1vP>z zz9GH>^jCAuIj!i73M{QCfp8qyDI4o4HZir6%5<<&HvHX_j24IGr#(IxYio-7*7irW zFKp?-!Z^6-!4`E)o!LQeF3Wd8N=nYJeN=Q?++Hp26xXF#H-y7&3X56{a4Sy_MlxDD zaBQJ3MYOe*OMkh4p)aQv3Y-oDEz2BG(}cM?W@;`R|J5ZuR$ell1agB-X$@?%La)vx zsE~X-o9BE`$wYISY0+VQIx zBZWfCfMq}WYHt(rOW5|R8t&_NiV)JLh?6^^CT>Ac&`kC=cXp;n>T_5_Ssr4EK1xr; zPV!G3^TM4dS-M*9mE{}8|3JK?h=fbiF59yWV`RL@o-Rt(?7nvBj;S@uGe-&#RJ)AxzTQS_w>6pR+BzD)`NT4Yp=ftO zEOT3I+RjJdWy-x^snp@um~Hl3pmrM!O~;jK&=*=&cqtJU7x`E zp)m*r0#ux`9QSP^Gfs6qTY1;`4*4rg%_uIlWknH4VVcUv(azi)M9;&umhNkeA8d?e zRSR*q#V*&091dLb?`}6nc3EJC^e)eN$L{H!R7`oH9fzbr7|h zY1d}u5DA8KYliK*z~KYib3$p@x-b%SO0y!p?X(cJ8cryTghaarAC4`i?g~Gcl5I&x znbFdOg1t-|hOntFTa+#7i4vEfEZLONFGZ5o-4<<1XiJsHddhW+Nyk27@{e7%Nqa9sKxfuUt~XJ)5HZ2Dya{vhIBtY9M(?IVrsB;I5KQ(Z08C zY!B|9-+kTueo;UzyeAdYfw*J@s#+y#CvBRXrDpztmq96eyyAoiCo2~xWI858$v705 zvN1yGz>Pr1nz%d;WePK@@ln{lP+j=B(nwdcMp5l^^xxWisBp!OTxv(eYKyy-Oc;5i z#nT~vNfT)pW!NlnA4q2^yEP#TK{L^B9G+>;9G-4=S}Q;WozZr@2i;BTv{ROwu=`m< zJoNxsz$_RCr)S%Tuj!1BLwbOWKZ(~wVu~N-^EXw~i(Y_;h9eF+X2xqyD(j41B_#Q< zvkGI4d0CH54rAK{OP3kl7|B0uWJliYl%{7ZD+;T5*|CKfh8=-6Cg@;3bfW(C*Kgjr zwYKXzYTW$!!?4@~9MGEjIy1awU@vjaRjt-)jh0NI^|3)7%oOp!7QEUA`32e@9oO;h zV*SwUoIC-MUY}O0Qjl5UHG>(E+otVCT|l{k5>h#sjwt)d8YxUPdafJcDbQH@nW~Ss zK?dlX$$AUo7Eak=L66rU@MMO{SX=CoGz?dp_AMLVV z2fXck#Mb5il4f5SoJ&;p+x39Vi~jVRB=HmuC19D5Clfh=K+?O4Yh&e6|M$WJazs+m z8d)=m*eR9^ZaoaHHnoUKD`!$kRe{qBt1*2bj%)JnT01j0k^8lbSU)|&qr^*S5J`K9 z{fTA?sIRYI2v{ZTEzQ}(mWa_3L9{B)DhDT@24=C{2#yNId3bF2FnV@RV`4HI9^uCe zADxkH`Cy?PbO;B59FGZ7+c15=EJK1Ji_z{!0%c!+C~)X_g@$>|aE5&R$poEwcT7f2Jo0boA8XE;K7?j-?*ADsZ>PabT z*i?nJajl{yEEga4N%4DGmU9e2l4Wl%R01Uw-=XPz*;-D)qe&X!m?;mn25NiivzUX2 zsQJV!jAjf8Y`xVq4R9Q#B|qg)?5v!&u_U~ZU>SX8Iwe|jNbykvNkryeZ2kzBL;vuM zSD_}aw+Y{K3yY}HQZ3?!m>l4Q%hQ6>IfQ2l{WM_7V^OW3OEIE|yrH(>I?oO}Djt*% zK#iI@X&v^}04FCUB`4X)rImPuSzb1vOxkXSm=D!+Fxncy!ZOUqCV&H@ew{YN%Qo>w zXSa5;BPME{R4?%$ru>H%n(y`qWH5|OnbsNMSSw@4yzgSUcf`jfJG1gWmLnT;PBTZ4 z$lp_o^qdk!GzRwk#EO&vq^(+rzH*{KJoU#er9Mg957)k44A(l>B$yMReZp&B!xQni zwS6RKhxayzj8crVom)kRecF#zhaA6j5vT~-Go<@kmh#t#R2DO5NWalHg-~7(v#|RV z&^U|2$&$C*Lj!e(3f-IZumt%I6tUP=fo=^4(&bW>6+Gnew5KG6*#@Q5b=g6x2_}Co zHHc;9T}8Am-D~rQWYs)~7h~B%j=wJ~6Ue?b+S-mEjt`6>a4js$*JhUGU6}JiTvl~* z>v22;YE9gk196RD7fVjY27|5I7Ya4e;Yt^N zB&J(fTaf)1Hr=8#2~QF`$%k4D+k-*HmUe_Ub!#rD95;v^rdTu3=9jDzNEA zcZNo`9&2MfmD8&B;*bNMA;l|m?#V>CSyRJK2WCL<6X-W^_N9iHOC}&YBWs>1Rguz# zJ)-Z1v}|l*0uo`@PAlXM^KK{Oa^F|dH&|Ohx47cgH7}1=5An66wM)I0WSiHMz0;40 zsF=z;%F=Sds>tR_UlFBqgpJ9tz^nzn2X~HP_q1AT()F^>@;G#rPtrfih3pI zu+jMNRLgGY@$Rq;E*(=|ay1iyQ3r+@+PQ}6RX0Gx2u7za%4gjy%sDgf%5RecO&E3> zOoDPc%4UOQP&Da_r~pMguD(vorjFzN5d%}g(D5qj)10zmK8-gvL!k$s#!B+Vc2!hD z;U>R*_cHD=yp@d&z-W0DolUcSx>k>k_@j2|HAB#Lb|Q1y>xHye>AAz|$swVb(XCgb z;{j|r);7n`tk`ce=SV^UY%9C|uw9^oQ#Hd)8bRvtnQ zh{RJ47PDr?)5DWyVso@+C=)uB%{UFrYifBHEYs1~LX}vb8XqJ>#uuqmbz#@`^^07k zY$HqVj&To zYc-^_LC#6m@k)A^6YW7wHpoefsbPC@(h~fr(e3ZtwKKY2E0+~Q%2=yf$(&_@oOhkI zhwH*~wHzcO?r>?2Mw#LD(y&$RlxG>I-%<~XzPMVeyA*5YO|yVp;_*z|Hqsk9l)+b) zG~?xqr*_3=$K}$l@kZ++ti33AL7Z;R+6@jj_Ht&6P(b0jz{n352woI0$ z#7+it=*pnN4%C*{o3NI|MMwmr*Bvg=cc0w?Io*-6h@d1Aq_mg>?bylE8dtPR zLGu36rM;#dl6*ASY-=spiL%(V1Cac12h_P?ee}#n|7^$HYB&7MoW|*`=^0!cNo&EN zPV}LwU_yDuuZ$?j*dDQxk94KitHfuo>;MMu2rHR4M~&4%_~E&J6}Q5&IT97?AM zl+?n#CDMdfp4x+nm^|^6{Q(^4ed}oV_1O7=1E^TZCt;3tLQEqomoZ_vK-y{3tG}&+KNp|IhHV{d#1ZO zZA`ynsAH~v5J!Q-kz*r6z36Xu#bo4&i$_0lWqQ|whRDDyIKgmlsJoKieH1slOJZSC zT?$LPcgmf5(tFdUdR;Fci{C>_*;u%kSq=yf8pC+3H6wJP%8_8pjj zT5-q5!@_e0k?k;6bk9-_do6z1S%;FYf3u`B0;5Ku(#*%m6AVL!E+YP%tjFU;wr9rT;I zX{5>`c9R!*f>?$j$laU87ASV&gSJIY0{EWD=nXgn<2XtSJIO(AOBLl+E!SOw56@9x zTWz74soP`|$YriC7My47sv)BjM*V_=c(~w{y8JXg)fD~E_WEEISEG0c!0tiB+#)Da zMD3P~1X8GsR8@^&Hn4}=FC1C*a|x;H+cp-lxzC>Zy$G%YBX zh^XI0p1*D+UeK+#cPXgn@!ZGDa3NhWBM1amZdxK+Qvx!VIZ?euKQlCt%TdNCms7eD z@j&Lf+@sE16$dxHQp+oCARH+-Y*5=|$&}NJJGo}(3P(7H+mot3%W3d_&>s>vY=dP^ zD?GtLFt>$Tw(L$vKod(HwRZQ^jVIaP=st?AS)n#o0isAGLyWQSBs=S_IV*i5cC zY8EFr8=5{g7fVKq(vhlLgj|B=%T5BIPAns}EKq_O^%2Dfy}Lz?Vxc`x!>yzC;G)tV zFSc>lveUu}Cdi}OD~T8p#IHqDJEE48WW@9wfn?DkV-xc$9xp#wAu=qZJ)MBjZ9mO9 z-bOCqTFf0>0F(1e$1u_O@N%v}r?A^>#+e3C(J8e%lFx-5d84{k0TJf07#o-6O=gV~ z-VwkB66{_v|7ogp@zX#qIu$Y5|V8@KZkX5f1^w}d_m;RVX#FnDa8xX-l z)@%|T8lS^C*V-K&9FvKcD83tIibMlWk$z_yGviISQp*{IGVa6}jw`cID&Q*-MRb=1 zM5348o1MV+7O!}A*ImU!%W#0FqCha8q_>c&z5d3}_UJf@Rr&hUD&`z}PN(JETXXH< z&iV`rVPQarR?f}#cjg?E3P;<$dPoHb9iV!C&~-vLQZ!>fSHRVTlmhJ-%uPq{l{z5` zGZZW(L<*+rhMXHXAY6?a58>P_^s0@P2-ESB=Yg0eoJ)re^w}xPO}q#coY*w2!(z(0 zk(M{Oq~}QjzTlWFc-n$X=BX*1mCa#7RlP+m#^_ULNRa>NbROec&pBnm+$bNxS_@NX z%|=^;)pfGhN8xabxf8|p0i3b5ji{&@ngb16HW-Mndc@5VO+QvisYP9EY&3ndz_eu* zW=`xaTjjX6L#(O+*T^&T#|U@nH_IWtc-PghZz7h|eFzx7L@P0UG-Jp~mP;a9EP`1^ zb5!A}XgOt?U*Z)Y%emOafhl@P;;CKf3aK=&5f;1KBURQZ-nVvEbDoZ2Wtw;$mbPBN z$ulTmHh6O3;CLwIRnM{6h*lwqbf0$ut&Ua0=HET9A{D9U;Q!xb;CPp9*05Q~GtJuF z(>8f#*DBKdh*EQ;^IkMjwBe!y#vB33Q;AuY;AhNeLe)7$cM09xrTGO1WG%ztrYpAv z?ZS}SAn7jmY3^JS(u1i>By;ITic7;cXz*cXiMmi*4+%Mm7^9Xy%v&DN(8=-)A{b0f z=&7CIXaS$wuTQNDo?3%+S?}pO7-uSVdbmk%2n54+o!MejHf@iLM9ZOIp>I3T?1kD% z#jWeP;I3`kz9afRxKbF=jO?d+dh$03RRppWheK7JPGc-ZAa-$Mi5f@xMJK*pX?Px2 z6)o;= zo4hDxR5Rm7D{|7k8T7Fz(j&eFo1jQAUZXV{8D*j}QuLzC=DB%0ve2WJ@$rS~I{DCb zJYIDfECjX?>d?5tW^HgVXmIb~&YPl)Jabua5)KqfwjZh+RD6rBcrq};95 zY-5R%BYzoYS)H3obj>DngO%k&TCP^*z`dSRiCR?-$C!y^&>UYf8dTjC8LC-U5K&yW z!rS4dGe9uXq&Atmq#AwHY%cSZwpV<)rI4`|88vu;cfYXxh(j5$E|KcstLz}<@{0Qt z+Fm|Zv;iP%Fi4kR(c`>=nNx=91{i`6D#0LEzR*S2vQd{jSs-^E*o+ZU*r;I*yPK-IFUc-hz`RTv_^+I-4?B z#>7pL<8sQFkb~|V9Nap%HSA{`1K^})${p@M>bhcO z%SB+?)L1kn!Ng4t${!lpeh^1Bsw{M^JvWT2WZMr84h`ea-~cZ-4WjKqHaAglva4-Y z!)urOheuk2^2*Pmd?wowdL41Bo|0~I$GX|`a=Mhc`gC(X8awfYv2}}F7_%csPZm_G zfk9Bt^zJ=A-KsIh;UoIc9PdV7f2<0Kw5`tbXYM=f9d~> zI2SK>FyD1uXPUL38VJGdRhWmwHUrNdq#0q@W_AX#NAPvPIl8x8Dwc80hHYO+B^-Bo zZxh; z+Be#V<&mlZF*D)V;Q5;hW`4-2?gsK_VG+D!Vp}(gi1KCD`G{+0*>=`V2&7w_gYV)B&e!JkjmSey~H=YKs-@SKV?S>l%_v|yG056PY zjW*>E&4p@fMJA~%uDdrok-DUcC+pI)Eao6uhmKz>5TmN(*r`X9B8EccdK>l+jJ;_) z9z|g(mSSvAQRtcx1-&<@7SW$=@$@Rz83TJN#Ok|EB=a#&`mFVEZoBAcz-Wy)L&P*y@SurF|Ts`9`h;M@0$~%T;mhLGnUpNhSmFAotDrzvhsN$2{i*hF)DNZ$-LXzI5ATN-WQ`?^H?!dIcE@CLT>L!lKCujL>^GM?x!J^SO^%Z#>k)smMYgOAPmaG^RZ4?=?0Z*ZDpR+q`X8O$5Soh5YbEh?I z685woXDYJJmwr?X97(xq|@5T<5XtwrZ*vUH*qB9DMWUopi z4bP`?=t>r!{%#A#)S~+$2?jzh{AIo>1iNeQqn2iGXgvG!P7)DJ-7qqY!!~sl9N5wWd&I?A>j$Y9lWT% zfRO~tSueR1`&A=T!!rl`DF`Qq#ylu?1;ygR2`e&dJ|iM?OUh`UNJzK+DszuAMQHuK zD$CsA6UmPi4%I8Jws{P0DJvG)`i@9M8=WFmSjv=SCuMc7{XCON!IPJ=mXr&ytOO`99aawV&DaBJT-dWDvM9Hs>JBf>hkr2Ps$LfG>qZ-3I z_J;f7GfKQ6oo{{p=h&{ytlmO71$}4BYe=3(v^KkEvf?HRV(UIv*Wdx3U5pg+DXzn- zE?IV$e$rSdV#zm&vUTZqH~)FGF)D4yOsNYE=?#^GupUJ(;7T-hq186MZ8AM5s~T=v z`2_850eOW<1+s&ab?m6I$pmr2LG#p?`~!LhM-SnI!!k-XJA^>LUN;e(5moJ!?#yQ! zcObTJ6E|0wdoJtJWqx|lSR$;NdzlNa1_E-7g=NbV!5Xk`4|-apWUWhiqv#K!7f&@juVSFLSJTZr|%x* zOD3@Z5WBoM5U*hecsxDks0*JGH0SFFZ<5m}F@F<5aXT$u<`{_&DbIH_y2#WqTJPvK zk|8Ua9zcJSw{x1!J7u`Eb&gxFuEcY$`;|_cV6wqh2Xf-=9@Qf-@AS1wf<5T_E>1_C@L&YLCND9!O9CGWY!isWG-t) zaZ53EE(?}08ZhA2Bv+YhH0Q8y7Jib_&o6qDuS*BWBF1qJ&u3G~o43|<{Cnb!<~Soy z#dDX-mMZAsAq)k~(?$k-F6N}Z}zHz-4>l^dx;U_Tkpt3$yKjdr9Q|b`RdQNc@*&~XZ z+De94WyUr%Ra(LkKRG<6$5m?7s-!mPt)eTCn?kOqElwRiDvvjn=klJiRvEysR=!E1 z^L=XS>+3hXxiO8W(C6z*WYYFAT%I$)X!I;5tJPOR@G)%T*lQt;etT;hS!JsNgRXraCw8bZeKI*>*t1 zgdt`QA{R#GJ$1A9W%jxPV?~)2xa~5GTuzp{MG7WO#U-@E*w}5%LAOf%Q1E2D=+VWq zR@=R2a4)v~x81l?%^=485~NR?Gr|d6f3AHF zmxC}P>DcrjF`bLsfolCL7InQU#3f~BUbo6KyOJ(EEn!GimZ}ESkJATNo%tPfUwRT( zvUg)dCy0J5oziO=J5Mid2Ge-}GgzA0Wcw;+^b5HxpJN}Wkd^=N=l&i0Sqi zKY=Z%e~}fBT|Y#8MY~j|vE04=^>(O4)Ukk^ZkNsLGFGv=@eb%6sCtOXWxI?I&X|QU zPa#E1aYu*Uv~vT{&W+QKm*@xWTvw$5ZCsjXD49#?usk02})J9 z>08%nIZJ&}og#m^A`>2!UGORS_0}TJ0ypxM#%O-PSbMn+`ffQ=T2eUFJmoaf!rK_@`EtUx!NDS zA+A(vry?$RxRs5wlT)4PSU;rvfjmEKs?;nXO9vIvl*VmWRM*Ry+nd6()3H!y56$<3 zxDdj7UKGf}vb)2ZCXS^N;av-pvsv*iEO@zPA$XQhIx}DVv=HjM3)5j((rPsjG_0v$ zoj&E5#L$3c0=9wDZ;Ym{)Z(51hj7G}97o8}8mDwImlbe$t~N2(?95^{8I^RgCj-M> zmz1X4+&@hjTh84mTJUBRWQUBd94&8~#@|-6bn0{;zDdJ6*}Lj))oGs?)##$2U#Rii z5L((CC#EtMJ!RSL-KlBVYKcdhu7>-1o&F`f_7dswVMvO0q@e#lj2k9l6S#Q^bQ3?P z8k11i%&K}67D=^+*clC3WF-Fix!5cV^;lKjToCdLr%{V`rN@jW)%JKU2`zD}KR&%= zH&!-oWa~VY(t*)A`Y{UM@Tn+QRHH_%%35;QY<+GxHA;gfj@kaeLTo=Qt!;R}t>^SF z+{=Yo+RltHOHna~WRSjzk4jam+P89?7f;m<>-kDsADl3TS?w?lLrUO4Jow+8e1u~P zXAWtUcwnBAi|0{Xxvg<%K}TRsLqxq35sV%4m|Cn%hnWp0V!}C49|w+Rmng+RGKmt` zmW8w}6PLDXJaNTcwtk^5v$VEpQ_J3b z;l2%}FTc~Z_?%qr#bs;r=4&ixm}XqhV@zE2rkW6H-Z8!t6A97gn?BqiGrFSf)3Z}} zwH#;5{fjbgm^!|}jzC&|i^MgjG~g1~y)eKz*O-kD$*W;vJsdU|-mZfIwgTQas}G63 zCubZ(&XNUi)YM@-TMZHIQt};UYL)JEHM;1eCvT(LE36S$sZvi5S;V}j3Uj2pubbZ= zmc!C}KXnx;-JC6>XVIdqry#yKO{Zj|3=Idz#bcVS_A2XCNesNy%B+J0Ij({CUr~YJ zJ`pI`@l`TBNYCJf()Vb|oXbYAPh&0{&C4}r%mRzk`UYno50oyiGQ!RfO3FK=Qw4Lk zY2#FLW?}`dO2zlX2GCr=WvQr(@~xyb7LuHd1T7Mgt@%15OyutSEZ$pg$S`WC{OQVr z!imAF=em6^8Vbw0SKz(@4)~G`y{uqY=jd=d894>INlWuZ|fFrPMih+avolm6NZsMcm*t4qCJ< zD=LV_C8xg7gLG!M>e-)&)1myCqx*}VSwauW8NHNU^LWjogM_#6$K`C`Q#kq)X;Iy1 z$W+(KF+o!;a?Q|-);S|0_g2D!mkwQ#?C2D6uKOV}Z;&u3vLWRG7(^Y9X>NWPo8@YF zMxWSqbCKU6&mK?+25mH$ZDFJJkMaOq*Q@)78iP%Id58#C=F=?9sc4bIuqo=?a08@n*6xy^9Y!4ajh#hlv}ataaW5VeefK}O5)FLSfm z^^X0Uq{(ayvh#fsan<7My00) z^;Vu97xGooO6V);?p@N%T!4F^!(%xTy4@h&sB)Z>4-9eWwF!N)BWeRP!-$1Oy9E@D ziqIA^uHTBl?MTcvRTrsPua>D)YzJO-y_~AKDXa5zsYZk=hMmk*202l-JoAsx!d8?T zq{yQ^C!}P^53!fLZMs&UGr$&vxr{yNXx40mL6(dkCNkX`p3G+lxXR}8!HD!^@58OJ z3{y?nn6cgb)Kd0DojEyfwF(r2xhWD7jX9nQj(Ty+RoI>2Hs1o4#FikD*z3Y>nE__6sfn6m&8(av|C3OTsVLVn<@4J*k=4ff7d$It$EJ=N$CI8rjLU<{pcit8>P`3$ra8 z>s}1uY!I20G}E;SbjW)SnXe9rOAzD<9qPn1tk#c<*~mHCjSTp7wHmw=KM3WDd1~0v z>tdtK&(1oqxCqBKGN1R9mzT^{9AxQ|^z$aygm$_L3T4`6ow?W3wPoh5jVwP`Me6PB zp_4Tb?|JAlEKX2E%O}RTe}jP+Xp;2t2X<80e5Rz;0iLt)S9!I>CbgW?7Op9Ryu((( zneqkI8Df-2Zos9qyU>`6=wJ)JBLk(H9azW|v#UQoT)Mo{)Fl*zGXRT7Brw728uQ zw=pF_?#Q<%o1GRW^A`4TXH`$O1JZ%J{v0R)c3roi_(frf=W*nSpB$p*faG!Uu=e(- zxNCnqg0=ZEuj=sx2tr*aXwG%{dpzcCbiA3oV{oX30`r6-Hm_NN>lW8zV~0HFtwxmx zto*QuW+_&h<=jqAE0WAuhxlhin3*<)IfZ>Q!QUho(@06Fr2$#d&#|Tsmml4(=4iP$ z&VMmf~l=(*R1`o%vsEZ3WK$D|gXK6@j({)33VZY_heR@IJ zY4RZBPg21mnp`AUFC{ANVfCqV zoaaM;%M~1ge^p;PW`I%Y>+yd3HGIi&lYbw zGEIBA1G3(c`k~SKEVUN)qLHhOZwxed&<(C$NXctjQu8R}NMs{ZUtnOnGlPt-l4Umt zf7HB$7!_LEaMY`_9i^{E3pZ}U(O_R4UE#tcRQ#MHk%R1p@+vhZGS zp)IEFkjceUwh&7&jo75tV-*NQX%G8B&K7*Mp0aCvV-{ZKQ;vMEJ}L-1*~>?-YqyL| z?VcY>9aNQTCtE0Wn&<6g?BnrqG#a6uNgzJ}+fJF{}} zgaU;-s^$ivc2TvDE0NS)>KAqplM_8tN{@K7W{F>ikAePIPAAwyBJBu>ZHrl8N7Y21=G8$mQ2=L za|Y|?l>oRLxU+DOJhPpiY5f9I&eFIx$<89KpM;U6q}_OhZW@~EZ$4KtJ2H1b5cr3T z$kH?HAKg6JK$FZ4kJdr*kqIHJR(3X~e3!>L#V!>lR$Rr5BSH)`=K)bVJ_>H9@-U8E zjkIw37?0nC-{0^7ri5?T!-1DY%bIcSFMy!UKv6oEF^2Wj;fiZ$fyZ;sSqLa37cM-_h`d z@Y9M5d{}TFm+s%!@PzOW6c_ky!F}8rl&Ps@ObG8#T;MAO_i_2{Uu#+k;omAQaOjH~LU^y@0)I!rxI`;F(v)WuW^k z@oOi9&rn?8)q?wU>E5j23E>vS1-@KxAD8VtsqLQ-?pIvk84t$vK=;$dubmK{skp%7 zg8Ovo{)C1ngr8Jg;O`3V#`eo1kGr@tpom+q&DUppZ@LvevC z1o!FEeZGb#gfCQF;5Na1T)MB-@Pu%?;sU1x_i^c-*6@U|skp#*3GU<4{ca6U2;Zx? zz&{Y&$EEuV8lDjTq2dBh3GU<4{kVoFgx^zK;Ij9|ZASN*;@3_H&sJPuRdAm!-F+IK z5Dq9Va8z&~m+mnQPYA~q7kHoGJ}%w&Yj{HVM#TmGrrwmuT@;&{et_rtm_?G_k^&exWIP{?&I>? zH)vW3;hPi}_!+@{T)KZ(!xO^KDlYH|!F}8(;r=%bPY8dkxWMzTiQC}_aezxO5-T@Pu$$ae*HZ+{Yy?y+>&)A$*_W0{=vCAD8Yw)$oMy zzbP*8dGC*T3Ej^Zzji|Si;4@pOmLqr-Ir^4Lby_KfuA`Rr_1vHhSnz`{FvebzaY3z zm+miWctZF`iVOTdg8R61|3t$R!v9oU;8|PaK0X`nXNX@rAv{NMftLvG(`EU8SL)DC z2tTX1!0&z_t{dH_#IKzY{-fdopY_2wF5S--zji|S3yKT8P;g%cx-Zi3gzyr@1wP}~ z;&kbLruelJ!gCcD*ekeCmvy~V>z)u^uDHP41ov_2ez}Gxgf+zlzEW@>_b#}9S;G^; zS1B%Vaxm@-x*OsL*>K;sXC!aGx&S|5L*g!vCeXz#j?jSI4M+EnA+1|Hk z`zM6ADK3!dglkCVGpP9{gx4xA@CLzsx_jUr((r`vM#TjV|598xmgy^6#)R;ziVLiK zI4%R-XNVuDZP6#hmT;N{|?$iAn zxc^qe6T-h!T;Qj7#_4_r?%x$Z%ol*4Rb1e)U2)tG!2Ln-YbS&sQe5D{-ErJQa32=G zc0%|{#RcAaLmc-uxL+=Q?S!zVxWEm2;<#79eWmze9SgWgae?Oy#c|JtyGQ)m3E_E) z3*5gqj!X9e@oOi9(~1jx)y;9-SHt}p@oOi9M->ke{SHL~2;R)fW z;sSqFa3A+UxZkDW3E_Jb7kJLCaT(5qyGQ)c7l7v}F7QIZeYzLHeX)iogqJEVaD(7J z?iFxfso@FXCdCC_FSw7p6YgCao)F%kxWHk-ecTbaM>RYltSc_CBe;({5BEV0PY4ey zF7Q6Vecb!ueuIW5gl|$@;A6MNZAPATn(!^~9l)n4F7P42eY$iX*YJe!w-gsR@S8F3 zqkE0`wG+a1iVJ*+;67ctuh#H{@EXMh-YmF}OZUq(JR!VAae=df`?z%9q2UQ(OL2ks z3GU<4eZPh$gl|+_;I9eph4NnMvU2%aY1ov_2eptg3!p|!%@G-%CT)Mxm;R)eM z#RdK^!F^o1f1u$B;lC;_@br(zeL?rr#1Hy2z%vvVxcZ?uF5SK2*G>rg6c_jxg8MSi z{g)b^5I&~3z?U75)1`Z#__Y(lTNM}h3&4~+6m#KiVM8vx8k^TZxKJ}DgXx+ z7kH!KzPxnbq~QtS%M=%Qhu}Ug-E$hA5VjQ;c#q&dF5R!y@PzPQ#RYyqa37cM4{CTq z_#wpwZvJFkH@dG8zji{nRdIpO`cxd3?q`c1)=q%Gpt!(`e>;v#_a)-jP6#hkT;NW@ zeR=8LrQr$T4T=jK`JFgjx<|zi@(y5Kae;gPYaEyE8^y1k5ZOK_LPubmK{ zrntb7&%|-*9u+^70kE#Pz%T!99GC7##1C`^_^9FnU-^4+T)OWPzji`+L~((=pN-?v zT@}A}LfEgkz!!Zkj!XB2;)i`xz>5_Z_?#1QT)KZj{MrfO^As0&h2Xy5=)O|J6T(f3 z3;Z8~`?z#}Tf-B=zfoM^T@S})p!=7_ubmLSN^yZN`29F8-M=V)?SycJ;sSppxGw|U zPiS~T_-~2}eB|?Sx^#a<{MrfOR}~j{{vX6~>Apbx+6m!{6c_kP!F?I%zDvUs!Xt_c zy!8ulx^&+re(i+tcEtsLR&bv#-JjF&gz#a-1rB^MPM7XA;)i(?aGl};-!HgNm+oU4 zo)CUeae-%kB~F*_v&0X3b%4)MT;T72Esjg~=f$s`5Pm^%fnO8cmx1obG&~{vhT;Mr z7u?6C`yVwtA^a!B1#W#TE(6_z;@3_HuT@;&DZzcZbU&`)3E}q?7x?9`$LZ4ji1=a5 z13s#_z`qmRr%U(WYj{HVUBv~S^Nl!Ny3ZBAc0#yZae>zh?$f1vr-mnlyA>CBpWr?& z-S=yFLik3-1%6s^AD8aWXm~>Sdx{JEbHROFy8lAM6T+`4F7ST}?&H$^eGN|tf1tR) z3r@!EK=%v94?1(e3l$f*M{u7m-9s9l5Z3_rGX(Lij_)1%C89ak_MWO#Ipj;l~vhIQw^TT)OWNzji{{Qe5EJ-^X$3 zu8UtgA)HWL;Qjv)$EEuX;@3_H-=w&}j|uMUM)z-OctZG);sT%d-8fykpD%vc4*>i{ z#Rb0QR2-M?2gI+P5WY=ufu9uImx1n2X?Q~TJBkZD`|&tkx}PC_(Axu^qqx8+!F{@P zPiuHW*i>BLs|5FP>3+3_Cxmw^F7Ts*`?z#}Ov4kxk1HVT}%Wp5g-k zU-I5OK9Z_l8}CXEn+S-=IxNkwm|+&O&SV%CJ4q*LCh5*}cP29|HknLjCX$(qNe?q@ za$OJ+(d%_r7I#DhL=;3oL`3weR}tLz>vdmnxh{xY-{*P0Rdu>L9rb;G@8|dX<2Op4 z=ewL!r%s(Zb@skP+{a7#LuPlx4;vRQ`e`y=%129wX8}CcxNxPokC*Z)vpeEyWQQ;<%gxim^ttftHU&=oFXeNj zt2*L&#)ZR2C4DL9rK>vPh;iY8>7*~^gQPCk5YzQMTg`o&3K z$~Q-(wFjK(p4St2;;(Q#eJSpezn;h@n4M#k2*0KFXuD9qB#xBX92%v zT==o`lfIPim9FZD_Zt`fO5CU6*N~quyCeSAxbS6LlkqZ5i8g(SGULKKI+MOk)7vbKj(ELs;r-%1y&s4CfY}}KLF2;D zZA-@cdB|Uo4sB217mW+QC+_3@KI9*m-4TCiT)6jCGG3W`O${7p@ie=^cVRY<5R17#ChB?tP~rZ#TOm&KMV7Bkp}) z1^HUDJK}4M3(tQ+GQH1-T#>Hoh~vhEmy7#&Uj+FIvpeF8jSKG<_r4#6e2>{3@m}M? z{DsLhP%cPUb;NbXg*(N4yp&&Pc1N5uF8p_K?@Re}W_QFd7#E&BolFDewbE4`aoD)< z0&yQN<#Dq+;)HSGC&axk7{&*bojOa&oeG` zJCeSX_mU26MBqNgg{#DU8oD8`HoGIPF)kbv_r4n-Z#26jo@-qA5^?WK`K4xe#4C*p zKOpXXDc@>#N4(v*@T=n9m-5%l?ug$oE=AUUI;?>M?r&V!EAHd%gPb+HBMulBPKbNo&5$R}?uc8B3#Y}sFXioKcf=Xv z!uN@LU&=R|-4SmwF8rXl_oaM?*&Xpt5Ya@FjPc#(18 znRChXQa(#M^l^Y0^yn935M>@1&fcqI2o_$f$m-1Ta@ZAIs8yC)r`!rM`?=rh1?lvyGUEKSA z5b_;ncf>o53%@AteZK_xQL{VZW5$L1?@p%onUD{V4)dnKgNzFg7WeT!8}cD$cf>=D z3%kUyFOb;QGr3(pew@lt-C*&VURxbS=8-k0+C z&F+Z*X81QG>8g(S9^;0WCViVAH%o`LKES<<3s;Ey zG*CX(?2g!GT=*a2-k0(h&F+Yg8W&!FSuzcjZ;%e-8o;+37ryE8q%Y++OILNow;C6I zTHL3B@*`$<#LpTRJ|^ycDL-y@NBpXB;S=KCm-27S?ufrLF8u3@lIf-Vv~*QR{F`y% zmMfCJl($NUu}t8Uap7D3CFx7~tWFKM3!nLtq%Y+Iq(l7+ zJjl54B5|J&ly{rm5id3_JoKf>cn^boxO7-A2RzcaFemQgJsa{`vpeFjap9tuCF7-h zv~-wn0Um2y_;GO`FXac!?uZW>7mi<8g&n*|^ZXJn2h$FX_;K1MXv7c$2tK z1LgOb-4Wk!TzK|X$#^NRl@8x-;IMJwuf%=4lz(k@NBoU(;U`{^jF<9*(p4StA>+cf ztCPNz+oh{IVyAK8o5g(^D8I$*j`%j?!rR2XFXh|K?ud677ye${`%?aIvpeD+jSG)^ zWiq{K$j3{EwJ5+7j0=0jeY})=&F+X<wXnuT7?x@&~1>I^u_n3!7h^^mUN;k`C_>a3ABsW#T>!l$V>` z5l=NPyiDBtQoh{mj(CM};pfG@FXbK{!f|o$y9x4y*&T7xxNxhu_ocke?2h;XC2W_QG&85jOW-1}1gt=S#%_r`^P7WclCpESE8K4o0E^xu-@ zVHxD*(qXV&1s$XX4)X=a7G4c1Qe`ap7}bmrMiYL#4wxF2KW$ z3!f|Q<86Vw#O#i^)VQ!m-1}1QHM=8bjSJr;?tR}4`8{TL#G8x@2Vb8|FXfzcRYzQF zTzG-FkC*be*&T7hxbSV_-uF7l*PGoDZ!|9afw=emPsl$syCeR{xbO*a@B16bzcsrf z{@%Fo58~eUkC6Xlc1L{DxbV<7B=g}g$cIaZx&(NnabcIZk9Q^HRc3d@)y9RR;@)>X zeinTFRxeuH#XM|_iU;Wxy6yx)ZUEwek~cZ>_aC+>Z}5BUdXcf=nW7d|2GeSZV_ zw`O<5-y0V`_~vAKKMDCE>9A%G_^@%|BjP^Z&p`gH*&Xq7#)V%O_r8?BVRlFSmT}?D zZ%L-%{g7{wuIh-l8W(;_+{a7#VY55pBgTbqcxy7=H$r}sbX7-ui*e!G#C^QiLB8JX zj(DSS;rh2F`*&Xps#)Tgc_r8>G zHM=9;Zd~{kaqs(8$X_$NBYwlU@JVs+`xnShncWeeHZFA6CG&yuUeclM3EaoH@IY}N zFXe;G?uZ8)7ak$*eJLMlc1K)fT)0@=`%*r^?2dSnap5WA-k0)HvpeE)h1ZLF-y0y`Xm&?@hjHP%#Jw-&cbnZ2-)mfWuekTU z5AywHcf<#b3;!hUeg6#kNwYiRQ^ti$uTMT>%FCpyI^qiB!oP_7cqu<+c1L{LxbT1* zlJOo0`5@`A)(3d7abb(NkC*ZivpeEarC}*WZ+a5Sz zTzJgelfIOXl@4plfNA5x)#5%4lut9eBc5(tm>2iHlnZ8e#C67n_lSF6${#bkBi?6R zc*;AH>7~3>x~d~CH!l31xR00e_s#Bz|7l$K(|0E0rTjDLs*d;zQ?tOPcexcbNan88#mEzu)@-=36 z#A}TUe-McQPMd1^HU(s*d;?=0_ax)} zFyxO&S9Qd@jSGJw?&GEWQ?onb&y5RT{N7}|lwTqp)<*$fW?cAdaUU<`C(Q1MzcnsA z>ZWA8lov^d^=H6ij0?-+K3>YBW_QFfw;LCJMcn&R{;Js>@$1Hg zJ?~4VmvXOk*s~4H8W)a;`*}j0<;(d*6#7?>4(5UTj?WHgWHJ9pvlH?ua)U z7d|NNeLo5LA+tN;!^VYQ6!*Sgg8Zo29q}>a!mo&X->*Xcn%N!k8^(oy5cj@+g#0J7 zJK~eZh0nSWF(A7ak$*vpeFg#)Wr_dtb^Q zHM=8z%((FL;@+3?7tHR6Uoyu`Thzr=mK zlz(J)NBoI#;qSz~FXi8x-4Xv_TzL3x$ut}R`AF$7*8yB)TzH1KkM~T-XPMm*GscAz z;@)>NX~n%xmEH!ggIxc8-ewb>o< z8soxS#l7!skZ(7;Bi>5$4hya*&T7Wap7CUz3*Egzs>B9c)fAq1LEHI6ObP?yCXhiT=*k#?@Rf| zW_QG&8W$EnlDs#{CF!b;IBHyYfw+&C^0?U@al*LpN^$S|a>!Si-4U-gF1$tD`+flO zt!8(`+l>n!75BcBzif6#eB8M3%)65JM)@r1u-+4xF)qAC+{gO?$hVr^5pOpx{Fu1+ zrF^g19r1qS!taTD-|s{If!Q7LhsK3_-JMMD-jMf^4(mOE`xzH575DK{US@VjTwz@J zJaO+!Ib(K5>@_aDMcn&R{(#vX@iybaFNu3!%8#1e5g#)y{F}JJ zg^!ARU&>!LyCXhsT)6t4WS&tzO*))i3OwDo@V(+bUdlI_-4Sm#F1%OV``!onezQB` z1IC4WeJq&<%6m(Py|lo6jSEi^_wiC*YIa9lZd_Ou_r8>OncWe08y9|D-1|~~!0e9r zpmE{Sdz0y126?%3nCAtaYFv1lxR00e8nffPD~x#=7gof*?*)*@&F+X3#)Vgkd*7Es zzRK*5c(rliE#lsn@(0ZBh_@LReo5T>QhwCzj`)~y;UC1kFXca)-4Xw6TzJ%d$vmUH zNIHxK0go{*JWJfiOZjx#klbM;@+3? z56td}KQu1f>;B}u?G1S!=}_+g_cJbBD(>T526?&J9r0A-!gb=_w+Ojpc1IjFF1$|M z`%=E%?2dS&ap8}}y)WgTnB5V7W?cA`xcB`lnFh-HNr(OgaDU^%<>Efx6_8IgyCb$4 z7na1mZyEBa*&T7rxbR|e?|TX4OU>?xmm3#;O5FQWe%S1e_=s`gfuBg;8|8zf!yF3m zVB^9LaUX9dsW-raqZW1LZ(Ed^ds3#)YSg`*@+4&%aaihEzm-!i)+e#f}*uumn^OZjl=FwO-$(ztMqxR3XA$Y+?{ z5zjI%e7U&yrF@my9r0@8!Y_$?U&@b~-4P!%E(U z;#T9rtHr(VD128-A158wvI37cF5D*WxbQ>b-k1BmFTj6nPZBp77xtZ*OasH-X>mE?M~n;a6Zi2_zTfPQ_<(WYPsP12 z<)4||5r1J^_&ag$OZoR^cf>y!7asdaGQE_KlMZa!f%RuU&`MyyCZ(bxNz^!B=eW@KGLDR1KiKJ@LA$MUdjiX-4PElE<9P>`%-?c z*&T6-abc^t_odusc1P?mF6d?ua?#!Vz)rOL?8y9kFCwc$v8OrF^;B9q|g| z!k3GCU&>dR-4U-gF8q+V_oaNN*&XpC#)bEZdtb`;o81u~FfRPExc8;}nAsiiE5?Q2 z7WclCzhibs{GM^)F`rGAhhrfhCmr55;PJ+VE#f|2%1g}dh)azN3*z2)1oAqwJ7USW z@TKD3_hpc;G`k~SWn6fRxcB`4L<_r8CH{IuB} z@o&b3C;WRd&rXDVl5{xB3;0~)!c)b4ysePi%ou6(xb+kuL^WqrTu%R-R&8&@cq%S*C%=TuGxnXwGqgXEIYQ*e@ zk!&$HoXwXrLzUhQ8(KHS!Lu8Bvm@nPAz!NT&-COf>$AlY)aka?)^=rRNjb-?z=LjI zWxBy)xnio0_EjrQ$;>oedt2wK&hCzton{y+E0r91u29o_wj%i#H~Xj|3Qxw^BXYjSz5H9Jzu;VB?> z@L1j6y1IRJ>*VrPK6qaiZ|QIaFROeyTie=KcXzIwT;AE`odz?dO6VBX2~056xqN>v zpDS-<=r~O@tQ*Z`%awda@ygQIg9qaCw5uc5TAsFb#R?`T&eYcSHp@Ci085-nEz3Jv z!)&$4<7{mWpID@hgLJf7#zqEa%&OI^R<7=7>*(xW+1}CC#SE_XQr5JuXm9UoUDeUu z)eUHGZRT&)v7%#TdmFO5v!ksI<-DV-b!9t?anjj8rnVKW-JR_yTdUeTySuvZ#5z#;@u*hU z#GQCp9V_sh+EybqZQb4Ns0dfKws&>#5?yUIVH!L$-BiPe7F*^&HB?skY}C9kR_BK5 znuoNyGkiV50MSEOT^|5hnq9uStIuBSD1KIYt5>YnzwGLj32RMuWtS&SrO_VN9IRyZ z09seH@?YH*R(96jLG&7Ad#SIvg^up__#PA_x(B>(Rw=|mbQ2xj9esVZ27Sb$yRdt~ z-z-XD!Y^?@ZCwf50ym_)3hyj&SybJ%_ts(M9l0t)&CRWB>-2YLp`zP^DZalbm~Ie; zjy@|?QH+gmF}~NBWD&MA88&g-9d!}^qx+6CASQUmHR&s62Xbf%7At7B^y?F<2QylN zYADl#wqDW@wnI?r7I&`bT+y~z?rJjP4?ZYExjY+yRv+XG^%{L|vdH@KV5N{B;+LmY zQIyKXTyMFO$(M3*@PXc5)RybBmD0w1Z>6^|Jd!D9;nG(rjb%nEZBZNP@4L1Cb8emW zZhd2!Vt;$3w?9|Ol!ilVsl>*D-5ndeg?`*2n>bd0LY10MjdY>GD(uj?G+02hEo!@j z%Ko83W?r;?h0&fN=58Xq;*3pgVe`<^#@H(J;t5;b^{F1?oy>ENTkiGlBL(=Qm_+wE z)zQ5&%o$SXEt{tBWv-#Ie(R21mFcM+yY|EyNug`fvTMiGp3p!VhsX}~#~iPkzDPZ} zzDhqUH{OaRp(i&mkS(Ef4dn*%Y?7H6PU!oQT4Lmj~@DI5nTt96YDepUspiooc$EM(j#8jhi@9DCIV!nl{x)?Wv}T8WEqej#h-VR?g=8vVEzht)?E$=QgbFPBm?-@oHb2YMM&OaCm_!hBCzg)D%P6RMUlZ8njHB zrcFnON}<2Mlr2-c-LyR=Tz7}@()t{P854$crQTH2P7^X^i~fZs;t8diW{t-WAk{Qy zn&=s*Uz%#FRx16O_2{|kQoAaZwb^1Gl~`E252_VE`i+dj2pNxG#aG*r^3pN^8WB)v2pYVcuH$N9`N;DrE7yhjVeE=e`L zB?zB>SaMRqTkABqc+=a0ib_H3bX`(GpX(!4Z|rqLy(-<_+S=WUc2U!fK}AI(_I-O& zkzUo>nreDSQt3-f@XiG+Ov$?fd@jP0fi{4>QmNqGjnwpiPryeM`@OeTr2VF#!V(fY zye}cs-p)OpEg@XAmV7a7L%>U!l$ zeUjf8s#!y&J(3}x9kZ%eu0KE$qJH{=MqQY$<8al~uc zs@L*Uu<|oBlX?(0cOC_8*QiqTHzsF)!<+PzC_4!!au+9pD*H&6m zMNuqVYXy(TG3z6#RtNv!4x7K(v{!H_T4|+9ZS8WG(6VPq`h-2H0N?tZ)!9llebLO+=JYA4V6;-( z%&tw-lQ3xf(4m;uXr3i^ivSO~Uvxys?{R=30pza872f=^?jD~-+9sxz-eue8wl0ZsTThCa zl5QbolE$mm*{Myts%YBq`ZlL+4%I-ILfzfQyQjs4lSiL?hhRf zmYsCV3Fe0TyR#-9y*CWGY~i@%XX!(Kmfp+eiMJZ?y z#0(7ZgG7K`bCYN#Hwa(`2KdiJfE_baJJA1Vd=+nGKz_%4(l$@xb|=QG3tX?(%)tCk z`@mafX19-5E2!{L#!-3I+E6I)G-^H4aA6$$xXz1Xt~$GA`wUvzE#u2J{hgRp)?(*n z>G5UhO^Wqu#JXc<$Btdo(=9v4XUDgrq}E=?(i3_hZ$lrX=e3FS@I9^U+M$e|ot)b> zjT*2)M2*~dbNtrt-ZhIF>PAL8y?gxPxr#j-#1a#K|CX+VW2M5F-iPp3mq)?En*HxY z!wzax5Eutr4q+ULD@4`S{1nzFtTskgrsK2KsV!3zQ{(71@d_Wu6)qZA5!g9CabXKH zJ*tdr^!j=}ko2ugPwrUApEia0D#G9~pejYR&I&5k{DY>wgMBKMu|lzrg9T{}@4Dbm z@YCR?Dz3J_TWzI+KPS9voNH^hRPbcNt?i$#!&1Rt5+UmX)?NhJrD`t~Je3T>kGT@Y z&+OB%MK!W+vnI(=wd_68W=&g7o3{EG?cUl*(2V)V5i#A3BXiAvY1*gR&3_Qh`|KM$ zqf(ix?%IT5gA36TnVhan%*;*WF7~h2&!MbB|IB)QbzJ%bLjAg?4yX=|R8w1LC#$>A!b$~)MY_4_g%A&qL|w)?7wEgFv6b}&bPanmrE+?%I$oWc zs7#E{RZnMI;mlOf8;`(*4K=je#^>fHXR9rfdv>CM(-PuYC@$e(jgPRUbxHa(zM2YA z*)l#g%@1MNrc?xcb2Y$GA+rHbvM{dx(R?qbaQQ-yhtcd*Gob~4ckJ4Z6dWJZe0XjIgt4XH){pp2QnD7ENzxaLLs1&3F6%}tE&xEO_Qc5-}sW!ui3s3neh zMsOUPw&>!k6O^`r+DKDLru*>*l)TL-UaS8n27}N*@&aGVRRc4|7^%d&Kw6!1sJeIVwfrT{2`x@-QVZ)#LSK@ zQ(MD)KJuBt;TYMDM<7$pM;;Iyk{Kx~nm!U6Vn;foPg5$$%0ctFERF2Y4w?#M=b7S2 z27xf0s{zeiY`{fw1t`&LJliXa8%ILVwO*-J9SS}aE7_vOK&rIEu{K*QV$fg8e5~y6 z&6hFn$#fNBWpwS4STmFx&XsMHG*}mFk@CJC3tX&K>Xy(?Q?#XdmQrtd1UB4Uxv_0D zO2Ftmd%2fEk=pgKX$0SuY^KlDn0&wk(Zoa+w~q1qtQj_V0|uHgyQWw+dTsOuA?|Z( zwH$eu@3{$Wn3Lz#D$!pz*Yj(%?C_fQ`E}YbKPz61UV5(38$FN<5{43bt*Y9TnDL~o z=9V@kErs5-QTdvfXNmH8bJDW06hCh~q{)P_jMXuAJ6n=^tS$;~Xlue?4->h%EvXKR z$5cW)mcgPF-QWviy}#mxu?~Y|sNl?VI@V&Aq^~f>R3O>gYtUbeijUC;U66TzFMO${o zf&WMm2T)Y#VU##_!&aXK@N1~HAym>9hxJaF3@EJ|#rvSERVpvsHNLrm8lO`FwfbGL z1ufi?znoIRSplz#uOb`zE=pmPet&6B88Cg3B@X9ZFp*HgAaq^YIG^CPK4qwr`Itj* zHt?}{jh&}-_2QkAnoIE<2KRTL!WXkLigt>(g-K2Y zsJ#aoTaK@wt}fJsNj!>FfUhjrEzbK?a8iY{ zHQtsi9jV}C*=sNBAHTlyBek~^6~h#pY(>20KH_B2N(D>Ip*H5)EIb7xVnb{3`S3B+ zCv9ouQX5BY>XxCkR;rJsJ{`-wQ*Au8X<0!RRE~+%)W>tGcUmZ(Ry@LnrJ@ZZnnS2V z7QWYZ^lw--#?QAtGcd}EAsc+z`%ufwF9e+^>htaOk)TP`m+9-ny38mB|3EQvT^d7X z*4XMw=qgUGZLG1!MX)=(zuLR^F=Hg1_ZD9@8m>J}&o`XN4vTetiq|mLeY9x0?!tKT zrK|?=s$rD#-1hU=q%mN7I+9-(Rn1#)7NWtFQ?{(0a2uDQxhBpRMfC%^#wd}yDihnr zXDg@~Fh;~44>DzH$4sSKqe7~oLJ_D{BL2;j7bR4EmCDvBRGl?JvHk%aDGW^4=<;Y> zV?^r0gtCOB)P+5-QkmJZCE;~}RCOuAw_;~qP*mx48q~CN9Q#c~hoR`rbR(Ny5~-?F+d1x@3SL^P;TXLQMf-3}5xO5&1_v{f!>Hm5 zW0Ijad6iUv^#B%qtrv1iahfF+jD>L}ZWytl^P+1|uQaCkF($3OUpV4B7e@$Fs_BXv z#oW%x36vBLNMqm&?fcDhiL7}w408=F{}$zkWjpTtb-}YW&Kf=kc0TTfQ&@&6-iMh{ zt?~fJY$qpSLMwY79}n;*N`~-2B!GV+js?PlQ5=l$li^&fEggXZZ$KDh*u$aMr|Ol^ zJ)8(xR1e<;rEOxiBqOgmXpP@r+_1(sg#Uqk)VD#7N&rr0c-KRjg8Z4u=4HHkPqwqu7@% z)<%hD(9Ze5J=t;J`|E~YESS0F&8c*!Rw7UTM`;Csp2!som$Z#vp*^2Tz( z78fd~+B=h3)Y`gb3(ZkB)@C2|v}%nEvbf$xt89oANx`?$k`kuipU7dpkpGwRwnGzQ zd^mM^t2Cug`aAiW$WV0S>N0d?=K>kZ{NX>$!YKQ?u+S)(N0ztd<^4L5qe;K$DVS#z z-~4AqyN@&SYxroqqulfw%)6>x&ti<+8ei3WMt+U%!o2u*%a+Iwxq`xhAvVj_FgNEF z4y+rT*?~4;(hyhO>ODqXNH|STukkOc6{D~f3FB_Qth0abHMN&?7JY{4=|*oV*0$(H zS6O1Bc1NyKBX-K?ww_-T*h-)r&uu$jh046z7V>JP*X2yBVz*b?1<%`7o!K;L^;DE? ztUC4}A2YB`hc+pC=vkfF1_2RS9!Ji-^bBos&MIbmKO<)*n=$t*=J4I6Vqnu`M|)k& zk@MiRw<+}5irF4+6tiU_R);9&@WC_Yp-q!3JL_VOoQJ2qjWN6CZwH5Awm}W2>=0(@ z^-XO)?(pWr8w}3i`-winIoVP=N?(d~w|cL*yI z%SCEu>5J|*v^gvkEkjQ=wWx!`s9Uydp4+)3y?G|?!)$J4k=xwHs@W=aRBJQSnEb#J z7Bo~APfTxKgHO!PHR;803FEOOvbvv86~DQ4$ubCiCbX&YABP|{zXEJc&EVU!Wpf3y zHA~W`rXvkzpEp;wkI!AWgi*A?7h?kb=w@<6ivf^e6jw#LeRBKE?8W?!T%O*&4JqUm zv;+w0!ac)#ncZRIn^F2LZ;+GeliHR=wd;1Jy#BKE&kmKDiY1l;e%)GH@Y>=d4&{>c zNywCZe;*U8B;qr-Y;ly%RDiB2l7`3hPbDpWod0hm?F=PNWyL2BMWuG2s^!wSalx)B z?$svS7b-12N)^(~v~x{(dKi}N~$Tq4H)BV(=Ykv8ZrVhAcu1coe-h80IP zotadog6H9#E{>v-;$R7ONuo{bnlRcB7VcCN$3plvq?$0;(cd?mDXmQfh$eJMW?Ri$ zoeIthL$+YWRSW-|TJzHI%3*Y7_d(NbT;r?|wXYf8cnoDk?`n(clNQ19Gx7FUHceIM z;Iq!^1a|pwIWMGw4N;Qg#HWJu6E(7zbLC=5i1Y z2uYQeE*11(mH0ddsv?Kp?c*0>So$Kr9Notw1J=Z0p?aFD&G8ES2p!2y(-&GlIWB^! z;FqSKKyRmZC7d~F+DlHW7p0K z7RCCJ36!(?Q3_Q0Sa^kL6x4~T?;K_-j*iNmpOkAp`WOrturNmRWX;DMi)GDvW|1mr zA;V_RTwy)7nRD#Z1;>QdkCh%&Nyk3>9}c}VAAf{vZaI$YIdlO|i)nT+6&zh3-7)_- zI_#*a%wY%-YnT!Rbs6JjWthzjr)xMy8YJ}%6eEKuMiZnjX2#4N1Z@)2^@ULs`-U-` zYq4e5VL>la9!4ICXe?O#y}cu5>I1{jvb429jAKEHEEw9)ZpijpkWfIQShjp2-@}4t z#z?}v{78RgG+!D)FqEFPkl>{{KNylJw;>%VQ^7DOCvR(1d8jy1&IRKI@XUtxt~9o8 zk5E6dfxFh$Q9Xjy>Nt&HZ5kUIi%=j)u`tY4=Osuz#a!P&HjN#rWjdFKN7nap585as zMz|U?<)FL}_CFw{V~|keVI=}aoHjtf`l}t2RSZj|f{hU2*pnT_9vdX(9LSim7%gHS zdb$k>Iu{DeAf&mY{5*5!#FaK|oe#NKK!w12L@YF*s)rC}d>ay3ftV?w`au#e0Ox!N zvY-vg9H*%~TtfQ!K5l}@CItt^CcsPiOu8Lu+zg&8_CY`bCn1cCj1)Gg2HFB?ER!F} zVV1QWDclNqXb90EueO2rX7cHFTxkltoEzy)ci=iNfY38Enk^R!SOeC9t6d09ZnSs3 zDwb&o#SKL|<9gd^D)r^l9KzcH0SgS6{tjGihPG@r+l{TyU7e~hcS41?Hr;_cpUcGM z1zIaPsh|q2l^ZBUutG(iR(!Y_1Z&KpiAoPK73_vag@+eK3ed@hMnwo3Vk)?pJ}5|Z z89^+U&?7EQbc=*ka4Bqvh6M`-W2xXWXu|>qt+7;aIpeW{#z@4lh#guMIH+{>Di!5}2RB$yFVY!9Q7}vPd&&n@d#ZtjFRI?mI z2S^34qJo7P3P38jmI{?sLmC#i_LZm= z-YGGBdhILms=iAaJO()6Wqr4asG!?dBEt7bw0dMEs)zSM#)VNE;T#tn9nySDkdBrW z@H3z}SB>XmEFo54E75Qv-!eB|iI&oXZW-S`HH`_kbgagVgDEvxUl&@f4&S?vJ4^8Z zv^q<7qvhh^3{x`(|lKmHYsi=~2(VnW6ym~;yPb`U@w$=KrIme{yF-O^suJxfNc zCFYL=!=-^rq0o~K5j&iu8p&qYN=K3kJ||^g0XuJ1@zXn&xS@cGa&aRL>giLk8snE` z>_vwu-z%HZRPeZ6saV*s(Jn=n3ceaf7P%`R_a8(T<h}D!Krh*?!g_U>f zMzf26%}m zrSqe~1W5x&j&0p&Y0?Js7F><#Fdzgz81{u$wirm!#=|NZ(!#y_CVbh3D;sby04pc!5H!2Rb^4t8$*EwkelWC`#`2hU z>t5Z8+IVjqfYn#E^mmq39_VGJRUdj>{heMJeCcGuqFV_Ol=rd)HG!Gxp%vhP`(M)?A zsyvsBXV6(21Bxqq2VIG4K$-NxWG)nX4LH)Wy4H%vtscZ_i72S8^Wvz$>eApS&RpwD zhnNc1h>aCZGgeFmXN0y$SL~y9pr&Diy#(04p_N+f-*Zt>8bd76{v@nn*A8DC+Yz^B z7zAGi&eG2hidXe&v|zASi)Y2;k@Z+MXhUxpxVSbr0V5tTMoX=m7o8XlTiJOiYIz-r ztx(a)dbm`~xhosPN1=?*cMFDVW2-7`j9@ofT!7VdyD%P&RdBV#Y#9HAQX7+N#^m1F zgw%CcdRr#2VUkrgL@fD@M3MYH%2?TDGFpIXp33)uCZ2)lW4TpwO*FSj5y!)D zqp9FS(k5c#N}Awfya<}DbyvAp?n%8?-ZZ~9I4NBG%vMi0nRYT(V^|XeiWG*3FcuaM z^>5jsf&No z_N3&f_xwO=kz%O>qTP+Xz;X1tjH38w<{JWx!z0Ax_MO#>F%TRMdDl2GTaIGKkZ8s<%Azp$uog6&mOS3v zPChwZpRo->TLyDZO-5z3av4Vv;FiX*&JUTq8T%`jO;2vAE}Na&x{VW%|HlP@QLzLN zF_}95u6Y?c5F0uu3G}eE#P?l)x4c4>NpU$s!WnU${$$=i?<}du<)cD}BP@^|GqeAH z$c@YXQEoU+Ngz8gct5ipI~8j_0!^3>(2QTLIn{(k+L0DHh{dJNr#%;KGA`sRV(JP{ z1^(Mm+NQZG6`chhziiX?ChQ#Ni%wY4a^LEG|hvBp}q!oo_=>c?1Q5tZ2m3= z#Rq|H-4j4@@*zehQ^AQ;qqB>a$w{DSgN<-3`DE}+51L|VZ#7#zY;gdHJEbNINE0$S>7w{}6mIuG1B615US zxl|redvz6sGFk#0JnoiI7*)e`HH1;LR5*Bi8u*6Z5g3rBH5B?w=cs*oI)wEYAV3n? zusj3eNU_kL=2^aHLcl(w-oZ2*lV{OXK)wKT1x&;WHOic!2~8}v7<<4m$D`I_FZgI4 z{gOV3*$Pgy8c1_cY7nGY#(6KSm!_vSVejm&+1W`g!`(Vt#iSv2isO;z%n!q5js3>= znBOp`w89wKE6GQ)Lh7>oexh-85sU!8(2_HC4xPLfjr^ra4|0VCM!-C&XZv>G&!_j(z-M8LdA+ zqp$-RxpQucYwgpxCJO1Di`8=yu#F};DsPq#^1;eHTIXnt`+D>AE_8gl}=cv zUzxcG+lzPYsEsIg3T>DRfFt)z<2dk|1R*yjwoPwlbY{c^0r)P4U%*c`%o-@j!ftbn z0#gZaLw@71nVPH4R&_x=3Cu0PMIUaTPqhwk)w zRkcNgN8o_t)yWm;E5ZSOa7AJ2ka9#H2J|Nf*3nypL-^qAQ=;D$5{}e^+elzUI5-cE z>OhV}j=w`?$Kx@yF$}H+sDUf^uYl<&PjS$eH{`tmgOzWO3>gf8gdspVULHzi4B2?f zadJu{#r4rOjN+)S$be%>6#@oO4xKYZZvi!=rOGJI(id{9Gy@qtnZHupg03e27Du;5JpqM-H{;*0fR!^6B$PHeToVOP;SxSH6Y>C$H)N6 z4H}^#m$y{G2b5bgLIVzTjY5E8bS>bQ50wngjK|aSoSP*ia^N5`8Rw`tKCcx#h0IVs z?P)4_G%_$qXaG$GkI7KzIXf~K<@h!~<`}A4J5o-2%294f_=6D>PgB7U1AJW3m&@@K zd{0wYib9F+L1-|V3VtF(-{|m2XfT=zekKDWk1Qci1;3Dq-{!~^@>K9EnfMLQ{Er&wPg9+HP@0lQ1%FAOJ{cubzD>pnyY&&J=P_cftb z!-At7GdOqV;>wm?J0_}J6^+V~>RmflgbatYO^$C~5qqS9o0CD~r6~H2G!7j5q=MU< zEXnxGS%_KzuWD$-x`%9NBE_p38f@=5T(&@sSDaz!;~?~ugmb*Jhg(P~3>Y96NAC*KV0&R|AjJ##3$V>6&1)BIS|DOd<)tCFmdkMnSC zgzBgUjm12k9w(4648`M6xTn->klb(kmzldH(V+cK(?4F&)cjvfOVLRx#dqW>J4x8= zl`Ca%&U4yR^oP)5M{eOO$L>QbSF^2%cCsV zK%uGx)vc!L88NS(5!4Q$SEwpMbw}v6A@th754Wz|7pnT8`iQA|Lsc(Scbf{m4|#K* z{~oFM;m8-HHOkMld{C8#$Pct=E=)=eNqIo3Uc1j;+~{8-GA94+ z;#mL1inD~1ZTi^g&_js>p)*xu#)7?i^9@09w3HdZ8K^jxJzc}u6$r)N!Q4Jne)#vV+&P+`c^T+Bw6#xt-(=a`2xPVIz4{T*eK7A z??rPIU;1OmqJ}Gke{S;*# zZvv@Gb6E@b3-hm{;w&MevR+CerZCf^ZN$7Zqrl9sg2ct3CQx)W_`-*ioYuiXAe@eX zl7snp^r0Gr;Gn(i{X>}nxZ|*mG4;@T3w_xZOlK^^o$-!9Z8t8ra#9Cp%xaCHZHLY} zokK?fH+{k}OgKx3PZYGQVRYt3d}%1V@uF?sUBO1^?T7>E+C4sn9uLH+9XvS|I~8Lq zYSG;&k+YMVcWvLffNNw<1zUD=VrBwc_ZM&ttyr|X8|}FnjLgN?r-;LTbn(!H^}OcB z8YN6-y&Ftu2NoL@abyNdTv+fSaWb^#bwkFM<`qD=MP;&Kh;pMMAH4+)LyXQZ`S6S1 zhK6C*H!A%K6~7Y=!;Lj4>J}_4{|!TJM5wqZ$7NUHyt-k?=lgO6JBvSyHx_`4Ctiin zE?vX8E@<>Vz%%)lu>Fq*H(vif&@u6bU_4U~Jd@wZpO!*r98AMUAO z5tzR3{0)>V1B~_YmjF2>usr0M4NCJXA{#!CIM5+JaDf97SP*edfEj;CSas9Tm_yC_4=?Xj(p6h#L zL67N-(89dH0%$Hu;ws`yjXIYf!GMy~eUW-yg}=%YML*!xYCQ19n98$5eSASqY2_p3 z09L||l%hCBLvWDgnB>Y@tNl9gOzxzFk**Os4DrQ3RN1*>>^cs-)c{pTUw> z49YdH#{O{@>KQ#VE{^tw9}s0$_{JZ&L7U~0fetcdTs*?0J6A83S zS{nJ2PM8g_l-C$|yesN()nwd)oKdE;Ix0rq8g)=vZnIyR9IdOPYk#D60}m*UA2ch1 zbBB`kux@sj}^3AM{e4W$cuf*AD?DdFCPxMX0h|L>y5|~)P=%5SyT9`qk64M4M<1UDwN9}XgURzVgWq3l zvaHR9C~!iH@)+kx*k=hcYUAlN$&|+LYKZGNk2l((pYgDNOXTvmv;RSE=Pa1>k zuwtZ&M)W$E2JH2OE}zhpq0tC@jn^1-96e4ro|D%WcfQO!bOsnk(bZIWNubvy6md>_ z)4uatqNg1YV#?lh0u#zXK2vZo@S$M);4}hPP+kyyI^o6KYt(|E4drnX}YuCq$EWFKU{C^$>M|~ zyzzI*fH6)K&BTqsc6TEi?*q1vHnQn9V7#Z!SbG;Rf2^UIH*s&BC2xJfx0CLDU>H9c8#$C5A9<1R zdC2>OttxNE^&gg*KS5oeb{Ib$8ylwmk=WcI?Fjyv*j}G@7(W{u7f3sNJ|~}Wn4H_o z*J770eyFa{gNc6J{};kI@KXdBp;^nB%?b|K=Y#wYZ$kOyG<>7RP%dI8Shm-yhi@hf=yKEhTM1>3uE^kT zC$#uQyf~8YBrQ>Z?!ih2l_<^_K00Hc~!fP>#-Fn=; z>gzrH3IkO?^eVJ!u%!tR{5aHMJ25`1oN>xx11ipa;9QHvfJ3a+$tY3z(^wh(N&&S$ zi?yr%;K_(ET#jVI~C!v}gc{hF`^ozEXjTU&jh;g|b~* z;f65W*b}i4nZWUJ97N3<{!Ogcn}ao8g|(Raf#tWcMRP{D!0%#>eh*WpFzAkd9~-bg zRzE+%DOSb*-?0fBCP#71JX88dDS1J4kr_W5cWCBgnKs7|xM`1#H>Tq$IV(b}I1D#9 z>au^6g{>L}&i3^7<#hhY%bJ*t{BewYVFXPP)JBrR@0S+!2@a19kG6&Ht)>n4K4A=g37fduxD6UXlsKt z2!*#bP6)3QhKTcT{@gLr_G1N!d(bT}YH1nYIg9mCTo|*YmD5O1$YtRl*Zhs_c*;DW z1G|WET>IaoipoBB<>NevW~QGms5Dx5PJx~5j3q0z78Wz?_DeY2nQ+k32(0*!(mMa; zO8+p9W893x7(ZcZjyHzdUC=%xt^HI2U42%{314G5*smePaeY=wD~(}f)6=}j=Vb_U zHn#9WUrbsCaRQd2o1WeS>zC~+Y){zfScxz0S7gm{*D}wXJZ}d=e509gBSpkJn?Vlg_rN398-%{w0~6xM2(u=zQs2ghbcMm1#E zNz&-~tf?_HdOY}fqc|XbfdC6vQUQJ)Xq3NcF^X107-wX{kL}=s`W2qO9@Xjip`B1O zKn-dN{K!tI!NzK7@B=%crmu${5qCG--O;cK3KC2O&U|v7<3kEpY?$E%H|8$16KPrpkKTv?Ujc8GJ z*f_3xGy~(TEKYPClPzy3_u#_ZLUe4lpEt`5M90CWga!QEwUWkSG@Vw33m=bT3eiB} zcA>>sKgDCUcpB9SS$S~G@I*dXokMk!JyIS+<&fQdSZ#uv>JX}Z zalN5lSaEISenIt=ZubB)0>X-#^P)7YyX{8H^Q1`5TkyFr+Q#`8bg6SZ>{k zgdCX7_2H>^;_eT^Q!3(0ow)mFWry1H++&gML`n|M4s{ITd356TpAF7)Q96-^L$X78 zg+LmflO4@x$|x(HNWr1F0yambyO4y#5ETP=AqNg;k;taIaN#3Ji|H<0_{i*re)j3R zaA7=-0y@fR4l*v1%evk)C(MqfP+~l|@UfOpx+%*sK7gKnEY(PN=>Z^fP+C{&37|x< zn&VkRCuBMIl;$}@C*n#axF7*1f$}&aj%l9^KC;$!aXmL%L}MARKF<|ufkBUQB@(a% zk7<3H2{-;BfWTNEhk@T%cT|L<0M=1*|YF(=WXm zNyIrE{WTs)W`8zQt3hH1baDu0-EdgmY9x11GGfWB&*ZQZ66wvM!o*X-Nhp{Nz|=6s z(LA~XDAH{_7-cOr$Qzz<*NPP53~L-QmFYoZ(dB4sMS6#&ihPjPJZ=*ckf_yKkm> zdro!~pI00}*2aqVT&5Yd5+o$?JXBE1zc#LIJ|A}{69=!KAHF&GKD4pMtz`SwjiSi6 zvC17sEVz%{C~JPCXj9fCm5w%U;he}~uD=(@gyXhY0dGbK9tYRP3V1RLikSxVwP;4N zwop^dTIWwwds|I&HqIHB6VmsBEFNwaKfHmLqm5Pbg}fR3UO3-5tpvx+D$WJO3#dJ0 zZJe~kF&z33ptPlZxx;JA-x!_2T0ZPLC&O>u;|Hm^$%ETET@%&_YF;9X-GaIM1kIa+fRi`RQcG<(>*czB2f(s$JZm7u1!Cn!=)28T?SC|J7x3iMxhIMgQvz0xFW}7QbFVq$nPbz&0)Bix z_s4$PZnS_WpU@}F6Fp$A?pP>JX8tG5Gt+}3!gwfc<4D_?{hu<|B37i8c{bMquC{$i zPYV103&T8@cR^=9fX_rp;Ku^T%Ptf#pTNJHFS1Hq`vsD~C-8amq}v!4>@O54^Z!50 z6)URn(dsX7E9?Rh^C^5OjF>|gqxrR1-M&x;xARea+1wE`3hw9tj{qwcMiwe&?R;^5 zq##z^b0#9JU0S%noqw=+I(iXM=^(%_<_BOk(;xuV2=J@=0AYPIFGQ$E5F7idNmN|( z%nKA-5bU@0S5n)wcU~A%Bf#(H2Viy7AOO_}@Q3*UP%ky`hZgRCn(xl~sewP$2=L_m z0IaAQ1fUuLo|+%PDy#-U%z!{o&ktl(SA#%iKp-1jta&CVWrM858U~^PfnKb^v6?_( zbv7?ds7H{O)(1fq9M)^|LU|JcURfVdb=&pL0(%QB&_r11qt;C z^7{H9QRO!;Ok_YH8?&v+wWu1L7br3y(3|V8)ysNzC?{Ca&%en`{b zcjf2nKDjE5Jan`E0~%kR->;9?_%iapI-C2J2UB<=7-zLq4l(& zE3@g_<~p3iFSKxgaG_|KS>H8Zjq)z!$DI1P{Om5-{0Lu_`gbc-BfxLx1+Z6UehAYe z$e-(i*b7k~z_f7xTb+CS3e|^*4G8pd$5xWR5C1aNhw>H#yS8C4MvV8Wamdh!z^|_h zY;Re8DAU6Ix;l6NvegIi76f~5T`;|O^&zB$^KJ8;@$xnBh8FH0sdL9GSnmrJ9Pg`h zL?-AhtoM%e2=eK=Ao1H+A0{>+&==|g#jj<3pxA&wkJkl?-p~3lksd+5T^9sncRB1V zt!r~r3FjZxJL4|-vd;4l^$7CI`XJFuJ1y8rTR_nT=?C9aj-mBrR)}o{IJ+FoZ3)Vf z)!ocWFE=91AJ(ufzel(!d)Q5J1!&dVtLGXKu(+G=q5J0P=uwpeeLo1CcaPuSiX3pI{p`+>GAh*_mCFKm&i4Q;cG z)e6VTZWmItsQBr4)xtQ6OyT}57GGJLr*15bSwc?}8d zGeA_y4;Ar;^5QmvREQfD@o(hCZ5O&i+^C2@k{8!_Qz0!P!r#gZ z+jvwVZB)b`&5PSeRUvLv#Q!rdZev)5xKR=RX(1U?1#Gwc~2+HFY;M3 zBVt9i43Df&=Ch_dVHG)378(DV&nUfq;H=1*;bprSqjJwWbe;FC@)=+{%2w56n~P+7 zLq1y=iYsyj2AM9*XUYuH75Oqevc55&H66Yya;7XYUYyTp1A9dtqayy6ytoGU3TY7$ zersM>!+wRZhzMVn7Y?t1iVT5~xn1e}1Wj+tYs$PoDwJh-vJINo>db!p!j(+9YW7)P z8!u@kq=%U?9mZipKBf0F0;OTk)rIM3b6XoOzM3#4IryZ7OBWu@4t&aJ?hNk)r3;6-jy~aab^wzaZZR^uUccm1yMnD)Wq_KIxVNqM_<_03n zlo3j+SGHp&1>FK+Wo1)VasM&)a_1`}k-a$R!!**YDr*+3sySx01xQc0Ui6<=p>tPzuk%Ti?^OnX##TTLb_RbUqyn_;%NafyLdb#rH@zckz$ z*!Y9`>*F?JNN!>wSqCK*ouQVaANXM#*f!B?y}81%dT?LkI!389J~ANZ=TkT*cb2GB zNTGm;1VkWie&Fy18S~qMe|3dUX5V~laEEe*-bMJ-ZNnqe!(&9o(q_6jL?*(|k*NrQ zr28k%5QDr5)QwUl3Iyam@qb=5A9Gc2RCu8OS>?yl+BX)t=@j#iRo|BBk;3AS z?Z3ZcFkhvu#})M>$0p14)PAK8AB0?73;_W+xiT#(ay9 zk(Dc1jJ9JutotpDYR-?>xJr5xZfC5ldd^k$GO8Z}v52Q_8Y|d3*es6XF;whVRR|HF@&IhUJbd-=Sdr7A#?e)_zHq|&XJa&5H zSnnuJr=JWmWkZ&$(N^5#Dhz{$E~3~Vvvqv@bo;^vQSJtLN~1z^R9-M)=XCYTF1(AG z34Kx+BZw8)*gLs}Z$32y?maZHc->Y>uUBO;9wK>UMg6SEY<)sqToo(T%$XQ!EV>ca zy+%ATr+4bi&dI?UdEMLk`x`Bw&Dgq08iLnQzOATzXd1lJYiw7m_=-RMdvIjZ9NrVF zyA;{ICOWM}&YH2U=1jEW@HoU#ao0I@W(Tz?rr(M3R6PC0Clk`NVGJh*~t6S}EuS#2THmxwz-JUbCn&<7v;_y(z zey)AyXD?b=tB{XQ8*8-p^g$aF-E%uK-ba)H8{HP!xXHV3hO#y1k{-)Q2bsqE9C3~C zWY=I_yz!taC2KlZv^r<%V8dE9P8~H8D#dHqZ3tjhi?KueE163#XtQ= zKAlrlX&akXafT*4hL?9}9U?62&^D|RZLNRA{n|Fg(7r1T|KKB$AKt8}r_*;eX6&L1 zyNRX0dq>aI9eD#)X(so&J+e5&O7Gaw3yVh<$BIW)dnD#9AJdB&fw^<}Jh47;;@HXa zt>@WjU823L)i1EO_Dtglv38k4wkIuL_EIZv{l@Xr8+AK|$NuLxVi&KOfABt_sW`d) z@7|B1h8_1L|G&8d}w(O52CGYYiZHp3aHMfgPUPAp+E;GydQ^*a{NQ#0%##?hkLijFVijO%nY6Y z{Iu4-N9`lCjI55N=|$tj&{$*n`=QZKB8vm#$*@^vuG%}Xjer@v_F1q%iF*r=Pw0>X z?{0f{5!T1Qfo%HCafsP&9zHwC9Lg^Gms6vkx7ka|hX+)vafCGcjw!pA((Vp+`I*)K z{SKebaMJ0Z4IWMUlCrmad6Tio;+l*G&}=Fdo}C>r{_cpE=Bxhh$@0ryIX1pE7(03K z%+~jfd-3e<09PBYW{VQj63BB5JWY&^Gws7QlC#3Sj$Ytlt&#Yiq(|cB> zlt1iz2}5yGq&mKNX10gLeG#fFR{woT>h5`JJbqeEq{CS9YztIj;!1sOp0y z?Ax`G7r_LJ3{zT6Ao?!L2sSM*m!vRz5-NqGnxDjL<9(VsIT5*1HV@jmDn6$+-oKN> z7C3=fTb#9iY*>yHW>bNVmH3)royfaR(Ajd%7xEVSS=I?F1}BND zw_tQ)bOCi_8htuyo`)Jte&ot%gFIwd2r3pP_mcYH-ee=E6)1!AwXE8*c*#jc&h{c9 z`;l%rN^iwwt{Lvk;v;!z!6?xS=4)u0q6pSF3D~B+7($<~ld!TMVg3$QvIT@gM>B@3jT~$Zl+IPoeay;)u+fXGc9gX}?8GU{ z8i#jv+ICFbVW_I%yuwQ4cu(Vmx~|fKY7=+}?@v0r*lDp4HX5FInI+c=Mqx1;2S6^* z$wtuuobGP(%5Z9y;IGVy_Lp&dmJN7LR)^=AVgi>2)vlF^HrP(Dp>J2HCz4O}9z5Yzr}S4uUf=vITf9Z?!rS^xZGO0XV$ufsWZ&N*VI z{&Vr_o}SK@k{x`SwP5S`=-`5Z!I7civGLOu;8FC1@v*@L-Q(LP`v(_not~Z;n74TT z;`xgXnb$WgrzrR1UZi=AB9^RJ&oN^=-8~EX7ZbV+gNh=3IU%_%SR;NVA#yA|5&c?1 zUEkGiat|kz(0Qctk(eWt5UPv>R@eC&6p;Hiff_qjG1RzGgdG<0Ip1|H-XE2^-FIV} zg$}_fVx5GC@k@Gw2ETa7$C-r(a z5qk=EI_yblocwvbPSgERZ(OW%@S7XL_~$oqSVUjh+P10qkKdBLg9eUKQ}Rk2=IySk ze+jBMQ&O&qM%^bcRnCew;s7z$|6?6!f$K#322Cm^XmYGq1eOZv4!qqer5IGHlth&) zX1~BwG2VN^?p)94_`tRid-==?8dX|WV=A(L5K*D@qTMR6S5M&qL6Zs#n%Fyobzopw z18$a&g4W$B$UjL31$EYl8Fik2aNw&r&B=G8ENa~l)To$54UE}=A^pU2!Dz z70ra^2W@tNiMGIA5ZEegHRlYPcdN9m(*xuEDsExWr{XgD5`jfQKn2oY*EhBAPFvE$ zxAl%t;NqZ91!nXm0!xB`3T$Swwi{zr|CV9@(pws|skopmWgimQcJDfx+i}poI|UAp z^^a^D807j64I1tKWi+NDhXoN8Y6d?t3*Mb_Dev&0Oy%X2!9F6eRTf`bW`(#LEjlv3 zMcrjtP^Z$e>OB9*z;~CnO7s2QX-}{2sG!bWT&m9Vj}Ckl$5!^H&CU9r*_{$6CdYT4 z!4)nKDph1orI)FV|DsPjn^q##W?x1!g~WHHSTb~JLzYhkD zQc^`#^H&~+HwnIZY}UQOJ~Fno_mqfqZO;cg$9+=^=!s%RPW1L~9h^Ttxdq`@2VwVNP_F6R# z;85-@;c3?6wMgM%ExZ3py~$x~@u$}V@R7r^scE{!arBk$KCVCH2%Xl=rRfewa6vc0 z?{YYf7u_Rvx5J(Bm_0wAbd-%NSLog<7N=}Q=Uas`RUiNlhdlAIwQY>8%mEDTk_gp& z*(iXf$e0$@*1Y2Q_+`GaOI!L&TPG%D4c&zsL}vl(tx0*jJzYEuy}qf(r4Hl&A)KE9I21$4Dx@72>53^|%L}61=Qnp&!yZU7jlP>((uV zez?B8Zc*VI=rXTVzEz^a)3hT#h;bqvV#cv!9T?tTnr88qH2`ig-RCTbmDF=%xq@c8 zMQD~qOAlLm_>x2AH}L$J^Fugd#rN8JLg1494UUp=TJ*-42x^2swal1g_G`(`EWSqj zWG+z}?cHh4wm1o00+G>hsdsFkzpxl zVP9vL%$Jn=;jPFk?Uv0BkSF8AbuzzR%X#8bYe%VvJM!jd_<}2{%fqm5D-XnSA`}-2 zdtvX-GsY{HH+Sz8i=)%LvrB=hMSX&yb@xPtS2%8I!afS9Tad9A2F>ObC0V@T6Rk8g zeUvPXmSfKAlr#+PoUnMCEb)hUogwll5OFK0=s zUtX6i;kA7!+rr+m+S>uSZKD`%@0a|1I+bwO?&}hA{sXlbt*9HdWj#b;kwR^Wpix`1 zUk?`bT7D#q*ZP{d8?e-0rNMap>pDO=D6coE**A&pdbm!dA4?T$QCxqs?o5iaWhR5w0faX$%ai-{*?(= z&ad+d(!9nEIiq+o$yTYfsI8JIrXzzz!r+9$^Y@HVvUl4E=9y58$md6`)G!ZKiBlqc_Dl!<+)1A<7=73cT))!T)}@lb-)fuOYxk!WOxJu*RMJ;lF;7-uSTVn;WElPTIeJU_ zUHVjxwUWcK^1Dlq`g5L@Iv2A+quCjSw9UIov&Al6K$k|pzE zX}qYCg@a-k7gu56A^^@Mm7Jb3m!`}XtBA;*DY=>Agh$Cbbn1Q>=2aEU)P1Us1>~~2 z^JL_^HqX)bq)NM?g5jKM!+LL?wW-rOz)h8OyU(}e=&g9cvJ4-r!mu14$}?7W_`SoR?xtHv>P_vbl$;#rn2R$*9o;wkj8ztz<*#|m!sm<7*>-XR^wPr zev;!P-uQo+XIR(~E9ZCBS*(h&v2WhfsmvcMg)*xef68;iNd4Dp47-MNYRex1rf?mt zb`7tq;B?4?vfTaTv%oNA7gpn#vNu(5Ho9}b=zB|!*G{AgoW8QxYOmc(^X!(;6RxPn zvEr`GbC{QQ^!OF1cUCZoCB@8M*LF=+p4nW%y}l~9)sDl#eos|)mt0cgXrn4~1FL6x zbKhLSRdC%_X4MwZ`U81(deAk#y@I!D(L%c&AF0N%_PMi?V>v!vNjLe==ICoz*rGe% zgIw9?^UREC#shhtf9}6jg>E(Y_bLpl!b3TR`LLz*Z&uJZnxb!2(oN4}IXb2rjH0@Z zALKc51!ec{M^!mi%ulPbtfVI@S(fF=O1hgV{H6-SH2uDkVf3f+^y9mFtcX8XVOWm; z&NH%0v**^8KiGWMB#X4?Rq~SM+Ba12E>aVRq`-B z(tUheH4ctxVO>?p+SJ;$)>ZV{Jd-8kwsn~OxB_pe#tvpRw^U)WX42$MW5jeO*ik)v6#ABysi6mf5*TynL^&O?RvuRVkDsmzG!kyHi+x@(ziiCA=&%dFP->R<|&%Uve&2_set{1s^7b0PU!Ha&d zQq-18xXuq(XN7v)S;_WqL$CVNoY&z-w6By?T};YQ z$%o6CVJk&zQ;jcTnU)&!fy2Efl}AW_)M}Uk9AsRWEB~KE7gQmlmjH4kb@6fnRh2MK8hL z$b#faY<7*uJ+7^3*c|UCOUUMxcEU-`S#x=O0_*H4jmy(*sX6e(c>fI9FE+ZDL1U>j zJ$XhEu-n55cK=q^fQ#V=)=o%logCkR*NFZ>JJVF^-O@WOzamf-_obGdn3K}&Ne+q+ zk8KHCl>h%0%|GcD%_~mEyHduif}40sytf|EFfpTh+7prNEz{$S;CGT|z389!sbLx2 zs%obh2vz1$x8KGHaD?A^OZR09M`p6%nt*}BZO&yxaDro69fwF*zPWg{X%^3vWhF-$ zqM9`&_Tg#9(3n^Rof`G}A&vGO}#(JWDMT~{3N)y8aMzmCW!K+H!JjqfleIW%KieLmlH-cz& zEBY$N2SZXD9J@+pGK7EH%XHZi48J z2=&O%x*NAwK-}J28o|8-7rbR`TYo^KxFu-mT{W;Y$yV$6cEk z98>dkK*Yh{$~8tEnHn5CUF3C;Rdu6|j`mK7*a@*!t3-z`Z5SG8?Au0+;ZkX6r@teb zov@-zxs65GMe(DUNwqiE>cLOo8e3Qk54p=hAUbjeCRx^#MbYWnP9Q*_g7C4w>vj#D zCW6dhyo3ii^GmoH<_7csQ)+Kofsvvn^6i{`Vgrq2AQd6$i)a;ho_(p$(Ol zHHg+W?5B=fPiRwfJY^lt0xrx`u!3Qv$oRzYN@>mgEu{$6GmfEoY;eC*$K*rYVP3F8FLCbbz%I60b#9 z_9~IsQCA$tZe81}Jz=AkJqXYl#jg>Cros@DGm$uSW2yX{*oa+&UISyASYD50d@7XViz`J$ht%w*u10n_(_?D)3nnT27RH0BRfg4`I_%`6Smq;IZ~^oo^c1&5CS8`8p; zFeY___!(;mCURoqtlqNV5~9DfZA@+_s^S@f}VAQ@uIZ+fEH{k(H)%#U|wyI_J)%HXpXyOfWO~zf~PPHk$U^^ydf8sx5D*tT8sM}#_ZX0GbGn2 z4|ok0B{uCRyVT)__(TUb0jTx^Y014JS)Jruj$J`nM@ue5UY&gf$?V8|y}0v=;>X<0 zP+xHhq`tiCxV%yPeOG;TZ#~aW+-w8LGUTo&%lLtlXYnSV<#FTmj|_6AYr@>XjgRRw zWpWy&{nM@|V53$|jN9E%Y8fBK43C-PAk}SM!ApwR!TfCJC!_Wjes=Ja5qpF&P4i-1 zmirmSXK4D)n}vZjiqABJx0f=WWr(H~WIc!Z`}F96SYU<179;v~^ZBqXa2(nQPAFpdFBwlCww5m{oSqR;9Oc4mGK47xUfLuaDNvs6 zy(1L1&&vzTGjb3So2%Mwz_k)#J@m7?b7gbG^!7%4sp2cCfn?tD>FuSd!G1mC)7uji zcg}%1mg92M`ilw^yl|np0$UIihe9YXTSltX%1Db;8J=l6RRhnpG8d#}^kNW+8&-2r zRm}V*l(xq z@m`ln5A9^tOxBE2aoh=ZMaie>2SBaxS^@MP&tF5 zb`_a;*SonAFZZ+X8CWJ^`N}A!d0vu-?#6!^FI#uG>zmrv_YYqm?}C5m`cnB_UEfif zwVYL)H?Qn6X1K7qGhP^{Ctk=hull@ONjktk+5YQYD_?FH@yn10{qrtE*35Z%ycaGG zda^_1EWXK_*L3p+*S8zrtD0>uTsXqlym9P7*X8Tow9t{(uH*A%T?eyxUQvr3jVD=A z!3hOG5Ox}ig%(~}OC8f~%4T^>qWCa3kYHeG>e;6GUmBxjnq3;6VxX94ID^qb&$~+x zEH2g4zEB<)QyNWRGbD@BkqAPRC=WAB|AXn9h>1qOY{0|YXo$t~uo@pr$tfCQNtLpuf_4TLuajL-;gb%{ZE68fq{0g zN}LF8UgP@X0+utqS$a~F$-!4{8|H~`m_L8MOw$*pGW{c*jA4f31xme*CG!uyXeN=x z4JOlA>X)X)Gl?xp#2QQ3xkvGmnIxBHB^yh)F{42bI-MPW&}x2by2Y3~vW_H>`L5-yiy(8Ob&8(n&M>|>la1lnBo0(^7m-#5myqq`K#J0W>{8qDEKe%NQ zKaBF;Fx@*geN>;^?iZc<Ix;F?GFz>AqQaBqjL;}i;aBC1aQRW;*JTU_f%JS4 zHzO(>lH8k$I~NrWO_)_~yH*WDugG^9W@JYvOg(K4+$1^g9$2<)l&>~J*{#(=zPIei ztDx7hnD3cYiidw(!mp@1T$cNNZrAJDM{5f#@u#$?z~a6~D-=WpmiT8bJu0x+@7ej9 zM>XAJj3#!rOg8Dx84;#|EQ8bg4|ES4gU-I=nQ@MOGuS)ohq>Z2ZCbwXL@F?`W$Kl< z?{r6PUm3rE!aI*IwQ3w=PCOa!*~yL{ZkmW`x5>F1Dz=Sn?;RN)SjU$~1OIRakg3vv zI)tb%7+Kf2?~wVOt2m|7w2C(rn-dyQ5AG(&(1L_~e7o7c77uQQyfBcx#WF|k+SWF8 zk!da5MR~5`thTim4{m|EIL}~;eu#9jt3pwiNMkz5SHJFpc42K z@DHirb3|ITdL_(51Ct@1T`$Vq2=%Z)_3pp)DOWtW70%%~j`op?2e-pHBF6~_4T}eN z9ZavE1-p4&=Vsjp9sFa3Zl@L&_s`IK))RZh7`(y{$S`RA4$Ps*!CK>i83ywKj%~|7 zrE&S}{7u|>Jk$AszJ|4>&Q%Ke)uyNIP5iZ~T$&!w$e4&pMDZz#2j(iIY1`~@yp=NSFmKV-q@o(f149fb(2hQLEh8la#fi4ACgcXy55;JzED z8RMG*TUP3)Gn+2DIc-HGfq85->N`i+^5Wt{4zZQ~eywQq&ZbTJPgeII#H=96IOJo$ zroVIFeuZk^@Ti`->2+-1 zl|%e1e!JU1-<@@KMc*A9+de!wJ~m3ADc_0rdzFk{{B+8jTJx%aU0W1E2sI3ONq0w(PMZDy)5XB3K%*h z)NDIP1#BG>PPqQ4fUQG9Ew4Mzdh_dJzGbzDgoQ?zMG~~(MPq^=d{(TtL8i8*<^1Zh z8h65))XF!+@$zzgW{35r)UthT(;Bvuv_=(*WM7#LrSJhwOs0~)qD$uBGM z;hHQlHN?*@5?ZS%ZQ!strWFvj_L}*(v9xxIkhSV%{MFtH8YE2+0DfKM29FRhS8u0kY+E>_0Y zU1rP{na`aT&SPFtII$O}%_jz~T`(6Qm{#^elT|8NNbWi_pIS3#Zu>i#t>o-QxEAom zr&n;?-_c{0cp7@vRMA7+j)}61SF^XzAXu%8aE~+Zo8%skF?NkkOrOEjUnZcHP3evm zsGI9}fuu4oq(qIAQuNp$Nkb9z7V*scDiz<>H`PBmJVD3mK&Cc+Dm}xl;eb_Oy}{N4 z8}h4ZjGE9{M`T+!eqVa1&V~^gd~Iy%YMDtvsgEOYJ9;O14D{wpH8I_~FqWaQ9|^R^ zl#Y9IE{ba!-Pl*NpqG6dcO1utv;F+OjWbT?g7^0XTV%n3W5Q3Y5H*XjE#qYKhtnQL z2&T_6cFb-E6<9EL0!-s&P0g}+24`Vx>F(|q#oxv^n^wqJvMc;2I~*CkPt*U}|LCC2 z;qpO-iCrcHv~OKG8SPm|t$KZ>5+iq<9yyt{7&!*tcl^eEk*Bllm(XQ_uw$bcWiH$~ zH@Jo_T(QL|@`xaLBO^@&Bj|y!=SR&}harR>>Dy$j8_CS<&`vGO`(2n7O zLFRTtJNW1wn;v3LH?(64f0F#_^!bms6yJeSp=-2HF{v>u;D;-whbtc*8^&;8J->{I z;tjr}jh0&8O;br3o2NnH+`RyxF+MZ_X<+msIZ%>pBZV$vQJNhYq zv@a@b-O-OAbsE->tdrluX($<(=Z!MBn7;QGu(NnzXXE>6a=(Lu}`_sotR<)6`@qKc>eAqQaT> zgN8oaexTx2_JgXu+J0=~*K7E-b7*ojDx4GV=;v#it`YBGea}jIt^27ez0UnqozAnL znw)4_C1Ku^QQ`bJX|p%Pq0N4VR;n{XeSYqLQtA`#r{bc=Z%=*r;t-?g;GyjI!BMvLlbp?%b`L7k1MSeB~jTCl?rk zD#%gch#586Sr7lB$X_d^aOA@?t27jRPJnoRMKiP~L4O}A z1w8}7_e#+2LWPu35xG$!-UhV16>Qs0=JE*mTUDXO)6sL2#F86TA((IweZNFA_pCxV z!$bULiI?BKiX7!^GTmaeCPa?AZD`2c>a&aBW%t!6=`A$W-x#OCDB%`lNo9Azq%!So zc-pvzmNlhOlC~++oAmJvwfr(2gNyxFUF@oMmX6!~$j8cgc1?TUqIPVPGG;Qey=qcK z(5SGONse3njtWcM4^}s}>m}hnk9bjp*B7r@=gG?Zq)1QH)0%h(?pe8NT~{0X!`j1| z`?ff= z%Z}kG%upt_V#I;zmKGAC!r{YHHWTL^&o9|sMTKQpjml4IR5)^2+q058YItg=S93Je zHZMUR*1_r`Fra zU8`CIjdCs_$1U*etWiRT#yK>dSu4pStLlFP12%8_L?mRDt%baSMsoC!^#U_1MRnO& zi)rKL`WU0}5Jt=96)(R*q;3Vt^G`gf;AXq;e|?|HFrAf!{ol=0+g;DP zp4Ggr7e?_b9NyaI{4W+A+SMgn%~=jvVP5vJ&pf!fyKNQ0fMxDse?vn|BN$W&T}bc+ zPsLc03526^D%(@-)Yu$P#b_mA*uk;6j)D5sIB^eo>~LPAW8sTKry`v;cYY$x!~To#TKY{1i(%cEkr zNZGQIhhrK&_<^w+s2DhhWNTmoSiefZ8Pj6N;{=*l6Dx{CkSm+Idc1@ci;5$hglv)2 z11-0e3vZd@aim6#;&@gvyrZ(3RW+yA6%2p5<8z_wz2T0ktV$n~aEL>w@|;RI$0i(| zMTF(G!D>oa#4my4sxNhlB;i{$oW%46H9L-u?b-22SNy4^;PId&yMqDNjXA->t7^#i z@#-uIQh$6q-!@in?a*VLF@<48Xg=8< zNZ-lDvt?7@n=4SYajLT^YVk{b)tlR~H2>$S`awq*U%kt^bI#V9y^ZJzJ^zcf-@TUC zVaR;Ly90We=I2tJWv+4x$H9ce8(d8%86cQ#2MK+5NXuxTa<0@f`7~)Uqga zarT(FmT*W_OLC(VNe^F?Xk46j^I&9ihp*>4LM|pX7#N(IrUs2HB9bif>Egz5o+Zl3 z^>=k%#OU(aFes}!y;l)BzVF@IQ=eQUzE{n;AJ@la!6HTODKNRksodg>oSz_I;=$n<#}KC(zeVqL*7`FK$D<0$=$rXx9(!!JF5*_z0BMb{GQsYh}6WU{+U zaoG5TLl+w=y~^Sr#83McwuPUPhRz1N;VOx7Q1@O|59vsVT?Zx*Wn<%vS+O?8eSU1xJCOuIGo1x$6>*hem;WJ>IL%3%oqJh9VoW|YoN^o7? zW9&J4o{c`CQ=`L^OT00l(kFwFRp>~wlOD@J)+TXAv1(duaC=%>j*}J}Ppawh1I^RY z)GkeW(@2p$r~Z=M+lQ{b%gb47mt!Y(bNT&H@%I$0lY(80i&fg!zYjA5OQ+Rh=2wFs zyd)4BrBcc9QnJf2+NsI4Zl$7bDVpi!?Q|rKTbaAZu0<`H8Nz04+sgbKl;1|!a7VM_ zsw>_Pz`MLRnQ@kGyD8CHS*u;?&(*J7>4{RxBt8tU`4L(VvqUtSSFfudmwD*?*zSMu zYB-2mpKQ6i{#W#$jee`$rgi^21)M?wy}pGqjUFyJT(L`eWtO#7X!jsJLj(1@2KwJn zul5;~dfMlIL%*75t2K{8XqCN*TuY>HD4u!$#u!dAq;Hpml!~1uTJEh9NH%~lQ0j#e zj&Ebh=cWu%%`4ucl>l3yXH+|m^Yperu=gG@4%arW>uRyD4ZQfUW>Tyq#s`OW1?TUl zbR0fYk zemwyMvEiyvQR?U{*AntL$uwt2rxlV>e|iu#XXEai;y<4ZMn=1t7z>+ZBCDToN-FGnmT_e zKBue4l}SC?I#~X}K-U&{l3rLwmFu8T97c}qZOs+( z%_tZ4$Axp!o*KosCgR~-F=x0o$az*!lcVFmry@%?AsAUM$>(rn#iSdvixKhYmW{t?y16!)MF#qWCMhtTbLja^2<^?dyqzP9j^IX<6}G33)|R7kdLb zO5Vk(LRs0ffXgWZz8q^OaDgjVL&47qlhv&allTuI)T53+_|rHgJnNJT+M#7$j{PG; zEE4fO5Hjf`0`HJpDpik9;1FrBf7`T9#D$WSOI3rD zrLl>mLO=uovuxt ztCkAy@Hh=&L0yjbcyrh0PILXI$&U(O*|ECRw&-vRwzJ98+E=b>YF1pun%mf74RZ#! z6Tu-xw~er;yE0}0L>=XDXP1j*ytgNJH*H|Up$%ty)Mj5#WUyn4jm;7pvDb6Bb5+_L z`-PnTvF7_71?y6Q1H3@19{iMiuqWdbRDr!^=GdKb=LGJ`wR-iXjCtjZ67J4dtxVbe zPP5g!c3l^~_AvcZFgXszCO3VF*U*epxeojvXqTv2?)bTlhk4$HFcNC*Q^(z1E8>aJ zyHSj=ad&ru5v5(bxN5Ltb2LBTSYtMOUia#?5^eP=-H?>I@;1+41wt$Ae6)q_FH>_| zS-w(t6DOKef#f1NqG~%(e#>f?caX^LSy>&!W$O$RSesZTDsjqDT}->nY4dI<7gNa$ z%=X4lg}5_WU0v%|tjA+(b=i~4WlhN6*Hq!D+X=p3@Ic|bEhDUW0oG-@3D+i* zfUG7wRt9F%#>}IBd7$emI9s0dWgJ<$41R);Vd1mVv6AEZoZ=`O@$gaUB$9{A`I_+) zyrd8uQhH6nL5)0)GMLevIGS`kqcA^d&ks{LlXMbIEd*NCU}k=q6YcL0{I<>who)C{ zYan+uZ7dP7b`85xDfc$dduC;ZEy_i?|#?Eq9v{@LV)q!<2gMRD8Oqqjd7R-6!vME?Jq8q_X;jd~X&F>2 z2S*>e6iugOG;#6mE#(E3GHex;=bwt98V25AW5? zZyjic)3K^+-Fn=cg`62&zSofm-bF2QKy>mL9$yAT1W7Wds2o1P?>Qkn5SBYdb#54b z_8TjQ%X@=LNItj9Fb&mkD`ukAhzcEmte-`eeWT4lkK#UY{G2HLiO)}2|4_{QmJ9oo#Rw zwA=?{RjMp?Os55(Wdw9{!z#2W-Y#n9OQRf>M}6^aRWLt|nURA-Uh$gvsFHgulF+rw zN%E%e<+1|&mJfZ;u@Mf3_&rT!TFS}hO`i%A zM`)=GZtnG+NK0EfN+ID?H7euCTQ6C#~$ZSLu5 zYm4GfS(%WST_$Axj^cY0miv?pnf#Zf8O%6!OluV7fjO*-l(ImG;`{&W#+d9{{DH_FJHUT(EC-J|d_}`OCgo^q1ds3ks zJ>!%+j)oST2=0j2y*ZOEPeAJS%*9ht>#$D1NA1s68(PA&S3ICX|*aHEW4tYitFN zNv|})qWDqAw%ra_1^3mC;_qfy`PD=rS?9?j?jM{)rQEhWag9+g;zR!-mc=2CpH^#&wPRsNXP`5HsnOI1lCNQkj0owIt5$Igq#z~M!qX1`!dz^(=jhHX8FdH zYE?!d5>Q4gyH%BnW~fp8=8U*)Nu_c^iO`x6aC=m#gyGm(XGD@+t5hnGqWJQRpf*WT z88AEB&h=y$E+vq`2|r{SwEdTzJ!WwH+mXqDarY_gLKapkoi}7q-&L?2dM=dW75w#!M!# z+u7jE@IA_WCJ3zU&hj0`+$FF(GMV+8SxR8B;+SDNjQL4m%kgi9@6jm!rU{gLZOJ@{Sk`62K&acsLEpi)CKX}g@(e_?6 zw`yB~F{GPs=4ia_Q&F{}_7|OUKGQvcH-0MQt=SS8hqLHmA{-KT5itA)qr`GFRzRHS zdaM;#ZLwL9mAN)cVI{=GwBt!tvU24l)FFsxl$pxe+s~{%8BT%sgtol`m?F3WY{S`f>lf1kNA?^3#&ExhNa$Fd z+E{kA;TPwEJ-K|R)CrW)qWF3f^<6!`Z>k*CS?mhAGR%;%)Y3#~P{lR0GRkSpE~<(8 z?(X_ZqCnmKeXdGjm)$Di5qu>$X0`2A6Rg5u9%7j+TBKWZw|Zu9<|BC#U%!ly>PE0Y z+GKI5bA@|$>=(0=lw4|RwzDANsWFKRky%Pcn8!($nu${LC(y&=`q7M#-|Wvwc?vU^ zjF^tRx_t&$rs2$9Ohg+V>o{2u-kBL3dpaj#I|}Z)+;#$=oWEN?vWZ;WzU9)K}&tY^HZmML_I%e{1UY;wkuxZU^Y^h$k44E~cDj6y& z=X3bVeYZ-MP=o9x`CNfzQ4)D%t?GPjRcW{^m04C=PGIC}Rz_yFRhc0ap4Kbm2^?08 z(rinrRx3+o?Wj^bSFIrL+v{hQ8A9P{wL+f2Va+Jbh8abb*2+>@HL4WPRV&E*Y7yHe z+>O8qg{RfZb6EbdY-UZQ{QAL?juErAMB-&|CS@j)HJk|}Qkj(vQ?d%dWJJnH+KBYm zAexRpR&`2ADNM~$v2^rF1ydS(Q?;r%%OwhNoet3{&Ya9dYz*?_OZh@$X5a}7=4hEr zfoe5ydIE`=T1JpJa#95+=PAt6GGg{(bS6{bo#Ld+8LZP-Cb!n(Un^FJG71wir`s)# zW=$l^#>^SnOwVRg;1}oIg;y%@Y<8@045wAHp4G+hgBg|)dD(1iYr&u-waCTFc?0iC za?HeJ<;H1bT^v*K-BWSBsldGu+e_@8C2L2Nn4l=2um+jWq+0MXc&svlXw%n_R=^X2={ar!uEq+2?1~ymrmsnK5IPt1io(T=!$9!kKRKLP|_`F}Tfi?OpJhAJ42J z+W=K{ByI5cE|i33sII|U;zzs6o^6a7bR_NZlNl7L^>*1HsQ^2&yHK+0CXtq;O`h15 znwcBLbXcqWa+eBr-7HQ^(k{O$SCx5)sHx3>7h zE;3hbi82jIJ3N(FqjstsE0S)OUDfv;h&|z5D4C%(GQ}kA@t0kxsnQ}@9o8oQy-Ni% zv`U$lq+QOf)3n52cINx2>Nrx3&wBLCDylR}xsIewUcU<^xhBbJuoij4uCiBYki3qh zJuaLDnyHv32W^r1Qc6n>Ls?0-H ztyL=6eALaTplXX`G$ieD#mp)yS|gj^+T!iI$XvB0$}}YHa8+K7+G)mdMC%9@0_+3q zLdguRk%sby%BRyGsQ#v`U$l&@Q#{*Y@xSW{BP}J~53e&adzB{kvXGtX?<&n{cCqX?J^Mi%{i6J`Q2m4Vs>DJU^i97=;79STr6~!S_xQ-b8Noc zd%8ArFq{BEQ*!rL%^BLr_}CUjI^-BUQrkxG0%qO^9U^ySL4w>FRf*fdkWUWU@G-1d z>4TG#ghd5k$wqyb9X$`aV7< zNF5G@Fa3m~(-?_d>SH6-mlRQr8KNI|u&LFQ>PehJB$*S6&tc)9!u80I7%MBxH_lqv zxDYoW3b2G9gB?Wn>D@Bg+u#yK)>-X2i!EGXqhb~=_AxApxIIk}ZsJT5(tCWULCI_v zKN9zD)5P-W!=-_|I^q*<$6)X2lY{unY}ns)%${v`qO4TOSS)co3@AvE)yRiQ3@EX| ztq2|Aa1!MLgn;)MgQV5j{^4d5MD*rtPzUGg*Bs^83HVyvcLsO8+Jltoeb`&)N_(e9 z`FHy`QPqb>@a-^b*0N>GX5le#eDaK0)Osw*Y>rRfKZbJj2SVdJtHQxe$?mLFiN~W zf~;&LSc>AwQ0}HtAHZhwD;4D{Dx5&vF~XCah+_>`&`DE{ax(E$ERxD8_JdlL?1$o} zoH}*J6tT|;&|~pUEEY?j0;niF3`clZ+NE6)kGOihjUQICx5v6Z6kHiQrTo0g{ZurR z!aLk=+T)#GV8F~x!`;t&s^(evVVvCFDsHY3zz8*DuW*tL`^PEUh28iGmgKdCpO%rM z0tTitYKaK$l5ne3LJ?mQe*O|T{5orQBBa#p|G~7wElku~Kop%~FD#Lllt~6!+@lZm zkBm>@;rx&x#splWj8?mH+i=8gbv!PVyT%pUuEZqQy7D_FdDIn+XWitWhB2O!$-y1N>ea{ldUR2I z-!`tin;+ZlSC8`q4{iOFm)bBrIx)l$!UMxERPnf21SKwZ^Y-NWPuL!6bmI0z$tCgB zSRlVO-X0p@(s;X9ei^?KiOWG8J;vQ-=veu#LGQ%7W#CrnSO|PB6{yy`vEvWq1SE)o)_+rY>Ujn`RfZOAmxyKfGXW87v?ka)IYUBBd z)@Du+bHrFam@;?pJUwChA{jtD_K%kHRXKj7y2etL%z(qiy-@)%+34gq{es3Vq@A|LW`p!Ss z*7pLJ0D=Cd`E~UdF0HG-4EPWb==X1_tKYP>uD%cW5)kP3AoK8Hb@kr^{saX20aw)4 zpSrxRUg?n@x;$+wbipVf+J`;dLn?R_7=w2fpx@nZb1*?FxY)xtNd>?4@Qk>aiBg3ox^eim?=hu4vw2VCmmQ>21F1AhS;njJKgwg5dIP9qiE2&k+tdD#0J`Z6%b!<{@s zlDXHzpGXDI`5NZB0U?>^C$S3hu@G2KG#}T ze;@GnRdw~syBWBW-#_y3J5s?rRy(+zRB*S4XSUVVKMQC9l=m&~cJKvK(T)eYfZpTk z>P4%6kAoxLOTPyG!^5+0q#po#d8mC~ZG9hkYSz@%*8(@TJNO~#kAMT$*3};bdW6@XPoV9A5^yT;cHm0jg(sp1I1o4pI09G(tOYuNUZ4-y25bi|1TF#|I*IGy z+HUo*^yb=n!7&~-k_sj~Tu3Uo!NVs=1rK@n1*u?_MF591uL&nF%HhE(u{PdV6+cZc9C4|;zHKJH=Z zXJ}908V}ETptfG{$*(*3I;r4C9$Frvp8`MhaR0;98~DD57k;C*Ua;1~g`|RydU%jj z@N*BdzR9=*ba@yh6%_x&!4#?B<==8}=%b9Yzze?P;9p4vmwwm5^6%Bw3x4V0rpIdQ z1ry(QFz}zX^#Z*w1@HHu_oU#GA3C_5RPekXIT#@oyvD;#q=Fay*ujTL1$+O*!J(vr z@n1N&@5$PF!JWT$@Y&z-{s8)a@8HNk@XiDt`=f&|KUG^Vxaq$f=zT3X@UIS@{O{U& z!7Kje;8mo8AA49C)zu63jvd@XD!8`b;IE{D7t}a7lT`4yhXd+(j{|S^@D!s{&;FrL8TO4ld-xpbeZY4;95cy04=4er0$V*ykqVYiIk=7VcHpFG2VW%pSD3_icJRJ81z z0JZ_!fh&Nw0UrhK1RnHo{oCk&!25ukfX{lk?CpHB0sjGf3-})J81N+UE8sI%A`5&0 zcmR0B!~3tQtG^kz&%+h(pj_acz}3KpcRIL`^djJL54VyE9tOSv{1@;ip!RA9&m$G= z>0uVBV2+12(&K=)0G9yo03aPEz~zkpwQ*z0|~|9~D3!=$GH4|`Z~6MYNl^stR|JMd26YTz@# zXMwK(4+0MZ-vE9O`~i5u`yG6r^gn?oJp6%FP;;|`JxK+)}nLf*U>T_y97% z;~suPDtOrksXuTuupHd9jqc<4Rm=piB!-F^Z{pkSocaaL7^B7Fz&Y2aSqhaS2<$~6I}dU!qQ`M@o}t-x13EWeX_0=EFS0(X1( z9_eF1-Cew&fw>-zB^BJ_;XzWt-+<_2==E^K$9dL(8$Eo2^d6w@ZU=Kn1=AirMJky4 z3C3GsnTHbTsle-j^MPADJV+||y@$Q-;W+}1@i0It_$u%<;4u$%pX7Rgxj-XuJkSMP z?cqnHf3uwJz>&aF!1*2?Bo*xS zc?Scef(wC*fQLNndq3}SV5^4@lWGp#vb?Tdzwhzz6H>u%JnZ`g@&OGVdPoJQc({mE zaJh#ENd@2Xu*U=3AK(QZ4k8sS^w3Hw==5+lso;DMA0`#tpmU-wU?E@|Z)HYhT4ePkk{HZfWr+fQI z*+8>&Yxu=3`rzb5G=FS-dT>7RQ|C?hZt)oL&*v-J*}%NvfoQ(4t-b8b%pW*o41F%0 zo^+h;gOl2&sHP<4uQZLALyO#jph$-EtxO;($)cT z1`L(`{X|3SADkfiSufj%(hQsf)9@kjR#(DU*F{5_JEDx;6MDfS_g!N4L`L@ z>J^Xn_GfkZQj;6>cYf>*KL!fG^trY5(;)vRlSe%L?GHQyklY2xT>zuV@9 z*?{CuIUBVndjPoy zkh`5qNe{TXqxzNpBq#m90fN3KUb9F26Hiu_E7?D0OTKJQUK+1x? zN6y)!{*hl*>XX9f7Q&^IO58iYtymf*!+F0dMY9Y>p< zA23&zu>Es#=g@OT)G7U+bm?zNPVR{-3(-xP{v70v$;n;*U`_PL%#90jYjbjM{EwRG z8^>Bv_D_)8oRb^at2Sy(#gh9wgZyfi2aJZhZDAIet;qK|uc<*paB8}?~*HyUj+u_eLT;sIE^#*d|vBTYnqH)*Z z8o{GTTuWLHC{SgE$7BXhwH9Hk;XrVzsPWna}IZJZjDn8XAtKv#ofTF z@yYSsjn_Ej@RupE@y6kM8m@80;cg(+_~G!qjIVLR;hIgj@xbBPH-qlqKE@CK)I|G+ zpO)4{ugKxW9KK%;pOwS+&*2B;@B?%BK{=dQDj7;`^y|Obg?XBAwcxCKm| zk@$MnLwm>3OQL1qp}phirO|5e(B5(MvS>Z{b-q6oqUYIsVk`Pp59!yuVI))D1>n&Y zuK!3rU;gE=@ALOl-$F>y(qd3JX`)Jz>oF)P5QnH9{zMaKLPpiV|-AM^2W7s z`d;vZJ$@V&JqLWY$Ik=TX7!<@()W4Nr>MVrqORxX;Lmw&ia(b}xR}8gf-lYB8^Kp+ z@K=GKl)>KtK9Rvc0e)Tv{|@+-8C-+Vtr`3k;P+HhR$9|8GUyonFkb5unzrf=$L+*9o;bYa~uL0Lb{SUcr zweM}<`iRxYB>d~(VLXcqdqqD5f7Fj>abfT158&Z>jtVc1p1}~F#rFc&{0wzbT-Y<( zA6y%ov%z14{*B<;Ao&ycEbzC2YvGT}F#HklFn$)Jy`vw1%c$ij&;J{^HeOHj`VQii zp-q+ro<9w)4WUtwUk9#@SIt{h{=?wf*gS#fPWZEV#b`5IBdzcja2XVQ)Z;tAf8xiR z7xKKm6w|M;@1J}mtDPI12;Me`Ywda2HpTB}@qxuogpU*2yMhqYHct5x{UeD&a zRQc}$*QN%y$J*loaBY77#@F{R;MzP6`sVTq)B;dwpJ{My)P4p9(swJk76cFU`u-JM zi>aY~4&s%m&4I6a{)ymPC_2vL9|6~5hsHPEukV3tbEwhdb-ZG=7#s8-1+GQsa6iul zf9U6IEF-V>xCUGs&!N3O2QH(8Z^2i6e+&LGKR=+TNCPF0xWP-K7f18KwGk5PI}WY| z#!&vJz-6?e@}%!E@TY#7mj739Z6I=6?0OF11tudC&9^1L8C;vgLH~u|GENBn?M`qR zX{fy=|6TC#r}{nxu8sR~ev3bsDTOu%R)VYjHiBP5d)9gW7H}Cxgy-WXa2cdL?D>y^ zYaxup^6$x%(uFct3dj7MRB5FhUA&(yo zE+fw!;HvLQ;4;+I`$PA48@P-IGyn^~4_uqpw|e{uaBYTbW-fl?zLdxFu>f4{Q3BTn z*pZ%p0r&+xzoEa}2rk2!Q{b!oe+SnFTev^_GLY`U^Aq~hG2mJNKg#PnAN*GteeVXB z!O`7b-{asi99iV?XBFwsneq1^a2YBDee1!sxE#it8^E>jANuFF!DVQ4ZRG0v?ERuh zo4Iqqb^T4?+8_?~KOa2&>3O;iT#N2O-}7goA48)j;OY902bW<=TaCjf!L`A09DM12 zKe#rVLj4{G*QUY$*V~tXSyol&7L&oInGwNYXh2aBNZp#tk*4}K6y0=JcNK_8xK!1> zRekB2x+b~-2|;|~6el#1sG#B#6QigYhxnd2J_YlXXMB*TK?P$wB_>-UejKC?RB)h!%sthz&|=)oxleN`tm~HpJ0A?o%3@&@QwTZ ze0(050epSm5l;a_$zpy zzW-=+oSSyq-iv^lSlK1dzZjSa!9DW)p8<0dP38Y9z}#$9d<+D01pfXedHxg%s{A(K zzrDarp5=V8e=h{SBH*8^fVn?(`~3@GCgqc!A>9B+K6l9uie1h1XO)^7ci4f)t-JGm`6oj0Gcg`wVBX&Y z%mfUzuh#%`V@;pG3z$jU+vNENfz2kc;L|&yAAex^ljGe4%tZ7NX@44+oBxN){dWR0 z!Dw0VH-MS!p!EGEFcUM?-aG?_feC}x9c24^888zs&pE*2KLcih)#1RT&)0#Obf)&~ za44#ee$VSq6btWQa-GW4Dlii>)E;~Sn8_GNNdLYL%*}kg{%lP2Q9*mJ2Ii)>%GW=T z5wL-)^K%>&<2n10;DLW8eJ%xNLh}{U|5pPu$ro;hnU7BaGs*fLg1-sO!xf5u1$;30 zi~Pj)hI%_Xm^5`5FvoubFq6sq1>XV8WZ8Gg`@Rj#BtYf&Ujs8){x;lCe(dXmz6tz= zX<#Nx4oZ731!iIk#KOGq1Hjx|zd-O$ftd`Y^gkUPVWQ|>X@3rwhZv5M`(MG1%I_Hb z_szgeb|*h`JRbypI{YQd3&;CKU?%M8`+oz>1fYMA`!@|>JfIiY-i&7om`Q+2pSJ@u zx&I?_|33mVF%fFfyze*+lu6!K%JY{1Gci*8^BNLDe(djifthUb1pLkZ9`r2umx2Fz zDlik;{~gy!-;00`MSDu08-baq3AQ)SzYCZNaIY5pkHAc@(Dpm|p#1p$Az&susQg?D z%mlrgaE<-B8JJ0KWJ}`D1OFcAL;ABnKL%z}DGds*_kwYGs6fZN9heDW`uz34OqzX@ z-2V<>CJ9am{-3~1#NIFb_Fdv{VINQ4cPtDulgie~{iDE4;#7XT37APuPm=4O24<4| z2QY!`@4o}r>KcD}D=i?9g@qHCw9`d+E^vxDvCfI)**LeSHllyN0W^(!emFr&uzU@1HJ#x@F zkmo-|vI4G?{$~O+>2;^zIxr8p94YU+4w%VKU2^>nU?w-{{CpXhNz2E}^^T1l9ZWQv z6}$tO38>s3;`?3$%tRKI-~R>tE$A1xfkxi`6`0BGDi0@}3wZ#)oGk5K2+RWuzYomu zUk}V=5uM*J0W&e{+48<)hY%0?fbUNOm8shuuz>`yT@40TG>#!_I?#d7X`yvp=T*^H2`?pY3k} zW}?$mf!UvBU>@9~zU1|rfte(v{rxsD6TbJz{ZBj}KHVnI4}HK)+PzP%?*eAhrpogj zz)ZS%np}SnmJPVj~cq2u5mQor#1 z&jseek_QCu2IfJH`$Qi80{B&spF?q-{_Tf>nPjc)eFvDyREiIVBdPJ;qY&>s8u;`t z`0FFUJRtTpdEZNbnf!bRF#G#aU?v=Edk+KikjQCr{lx9?cmKxI<3eC2h#xN3uLb7e z0=@rsU>-i*A@BPvFcSqYkozAufm|wkHv`Z7 z(EG<9Os;<%_;~aGmqF5ts?z z<8uEsz&wmgw}a2$3~UbW2)-AX2el3odaSz``~!WU?LPzfSAqUG4|r36=YV+__gHD~ z6~H`vtp3M)fb~aud>EJq60gDE?C_56puZ-^btV|2AMA9@Y0v z1M?7(>gU^lna^@2?mq?c{C|L%*sSB(a0%oM{j0ETw090L4_T?cyBwGYhm?Nr1m+=@ zZh8L$z&t#-0*2!AhrAH>1oAp7*B61W4fyeY05b_+`}bquz91fR`lZMVgZ|U!Uk1!W zG*?P{9|1o2pS`?32+RWkd*u3YFTx)Wd4H?|%);D4GL&NtAKI$^e_j|qmx)_*;CshC33jBq@|M)mC59ppK?SBK9hlFmG_Kx_Y zjt(CB{E*OZ5SU5ur^xjh@cN*=J-|$=*7>^~_|9+p@%{%e4}E-Go<9qMeA|8`JOfj| z)hO8VBR}l{<{{?S;cxQOD}b4>t?lmz<^cd5-}34S_k9AG1reyPNdIpD^YF?ca{Y-{K>z&6&L7)58`vB$mis4w znJljJ`4_-UzSsVL2KajLOHYUG&o6;_fcM+Ld|&T)M+Xn4d>NSixf+;B!-ole3-GrB z`aTTI1Jutrz&?M(1jdB*<=o>eehx4X1b0gNHDDfuxKG;q05A{up&9eOM}T=~|4D+6 zn}j|O=DQP^ha_}7)4)vBraZI1cLVdlh_=7J4*m2+?~iQ)=An;`a{o(!d7%1KV2=MI zz$}1phFt#|Fq7O>KcC*PxoQXFI`{9+2i70w^98_l(04ul=KS0W%)|S9AKU*NFb`^| zJ^B^!PhpRalk2BVb#$=!!|8(01?B;Em6r)%9teL#uHOR8Lu({>y=RC=_bL;2VK?=<}}xe-xO9Ey>Tk|Dau0&%MAbHlX_YAz&V^rWlewM>o;lCvosu@C$+U$MH0Qd5}o^e-khd zlPSM^1ek|-&c(g#&(DCLKIHxDqoFu?NK*NE6qtwfk3PV@|7E~mlKuXp4?Mo(W?&xj zI#k;G1~3mjo+S8$-PoVT`tUix?EmwDj|=SIWxzcAqy2jeFpDgx{`?d$51bw*?LB@5 z*CB7554LwAFb@xZ_CSk=f%Qjvya<>Fz8;VMbG&Z?=ApSNt`Xl0%tKG=AO0Mehu5k9 z+5S^uSa`_s33C51Fb^;)KP&?C(Egcn|7(DGC`#}D3GjpPx79vufS|A#hmLm}Fb`KV zZ;0=EB`^O0S#T<^mIo=WAFZ|HU z-!9}5SFb{XC zeYggghnKW}_XFPz`J(>d`2GXJzkdLHPSC$gfO+6e>GvjJ7N>a` z?q&Zz2F#)s+TR}m^MDk@*3hSG8S#xV@WVkCUkJ>Drf-w$Hv)e)n7`YAdD#7M(4X`5 zNnjr8JW}re4loO-93l9C74+jpo_tFx%S?%tAKyPw2_-cKG zJfyDk@k(G8pE{+(_UA5O9v0U5dl;C-iKtK5pI-p;Al-8WZ~has5BWVr@U_4^c&GgF zWndODdcIu$E-;IUFwdXkKlKJ&kRSWs56pw6s^6QyEaY`NuJQhxfcFRb@Na=x1VZKg z(3e2Ipl|;W_p`q{fmu-JQhEMmz&s?Y?Y|3{2WeFvJ_F1{+#i?c54;h4^RS=KlYv>B zjPk%tB%ndEe`Sd5HYka{s-+`r~;29+<^wuEgIQ-(fGs`fS+qcLkUS z{l{^g?^^+8@v@zA|DOZj6wu=yU>?GJs@(sK{|1ctR(W{=FbhW9CfDBpd`a;9L%??g z_V|~;{|Wt|{Cq474G+y%<@xQv8(^=W3rzj-THxh?pYH_z&u@GEvLASBaQ)}NEF!l7 z&vX1I-Gu#~8@zvfAutaZD?h#in1_mWe0Kx05RKCB$G|KuQu z5ikp_ss6eKn8g%s$2HRXE?^e7(e@vb=MTnpt|xv2%pzG-+r0nGS0H}>c%N@t17;z) z9k|Z%-3ZJBzS{qXfmv8Z`Qyp2ME?W%*#peO<$C`ez_){b>(L(d$;W|N(Cc`}6W{+$ zU>5w)`9A1Xh>x7_?ZZ=mc_>)rcQ>&9NRO+5&)o0*v3r17B;Dw?d5`x$&jYRlA1c>h3d{r7 zI{y2Cd06@ha=q&{&`*DZ!cd}58o(?pq4xb2U>-6*Lhk?Hzz+xfw;z~A)4nO!e+_)_ z78JM;dYJb~$o1o12mb~3U-_#C zn1|3Wkn6jFSrqLsY5(QGEV8Eh`W?WVAdh^W@^v>bi)#IMx&Oz&EP~e~?X7=3<^%cc zfX3b(O&pB(G~nYPuj_H0?Oh7Y;w2}`^DhTx!8F=8j_0p|Sy)8%-M;{TD`@Y~H^9CJ z`t)?*ivxe?B48HqQ~Ip}vk=xjGG8AC*55Js<8#1I$9Rv%-|XK%0<+kF&j0$G;h)`( z!VUi0kbCTY*_rK%c)4n8gf~9}apW);o{~y*>lX!i=ZO z^REPEkp#W}L%=Mq(Jk-)I`Fr?hXPN)?C&$*1bv8j!Y08>z()o8^>e_t{lKqpehGZ{ z!zhL%_n-S`@TWfQ<@3eBTbq7=yXzb3T5v37AFd-Y)mA0JAuUws$wMDOQF5aJ=6Jel7ZQ zl(hFVU={>~Suyna{l9=cdz05MW5D_&zwH8Mu^?^#Rlpm*i}fb1v40N%vk=7-fcd`R zw}2k-*Pjeb`Y!;pP=@M*uLHA?gwpefx5AzU@^B&WUEuHIr2Pi)CEy>G$6J9}>~u!n z_c34=2vU9cFffaHsk|QWHmsim`}z#vj|TH~B`^yvo*?~wIWUW4{z%&Y05A*iy;rXP zJMiV_cz$08MbDxYI-Vgae)*ApW56udrTu$7FpElEiEE_SXMkCJP37f5U>3dkuv|ao zHpGK&MShIvgY$t|*x^jM{yJb5$76e>_a}ijyu!z??g!Q%`}3XKplGF3iUvxX$r>h&RfQ@B1_`i%ls1obV3N{|$aU zKM2g?YiHnIK0gPnKR*8_z$_r5^!*_)i*!B@*LeTY?}WV#^zE6zEX-Dw>lXsEn9s8W z-vG?wQ6~$&3wRgkd4b>q;MlORtJ3#0U>3iv;5z9s49p^&CkoyT%;IRzmgnC9%z`o6 z-@gTBF%rcO1G6BV%EP*M;X(Ovyr%+h0ROA}KOdOI!q81K-W6aLN25J7^af^usrv-~ z8kogUR3ASLhL8n;R6ZAgSp@CNa{v2)S-5fiL3Vr(0_%_c`8Qw|D^dCky}P4>g%&Tz zHPT}@FpFGv3VtIni%jW!-wVtlNQdA$`+L|OuwU>WpCq^nychF#05JWv1~3bZk>0%j z&A==aTfq%{-{*l@gi706_a4k&Am0}QvqP&>!~i0bmvcs>No;wXCmzXJax;OBKvJXfIqXG#B`4b0+X%D>kEvq;TzCk3>Ae}4g+ebn&^~`1@C)Govp;O_L%=Ks*%16uU>1W>di)fa^&)T? z_pk5xIWUW~>HDAZe!OoN3ew;@$GaJrh4)lmt_5bn$W!I|+kjd4>lVRZ1!l1|+DAVB zGhqFZ9=`@=LA(+C&Fh_Dth-^Kw*hl}HvqFx-Aig&BOKqJDPY;9zG5 zFVvd#y+mCdw){+eWp;L-zK6x<`I^l;H{xR`iufA++rPyWq%m(!}|u7=XW>enpZcfBU>hSZrL_k z>qA+a=G=6(x~*>xqiNLrEu)p%Xiu$)4*Rh!P3~&UHnvuJ@d1L_=5lkjF}iPd0;A2| zRoSzG>O-yW=$aXyov4qux}|TiIlXInWSlhG)mUmS<=@pi)0k>|S3kIfRf6(ObS^Kh zwCrtVYJ6s?a*y>%JrZwDE z8DChK+1H{|mC8h8x;fYCj?T&Xxq8bR8m&n;(41=dxMh@c=j;2bhH-mW$7fa=oJh}} zy+%9-DV8JWjqYhJgIiQ!?Nj~u7Rc85`Gv{WPsI;aDty;@jpdQX;?$ZXzI$?faX6H_ z>XxyZ8Botmb7^^aw5wLFu0fKu9s3j-6nfxcZLv}thWtLN)?6dML#HNP2Wm2;%Gx^7 z2ek&RM(VhJjEvPHCAS931kDT#!PKy_*zm;gOtsnznc2IK?N>UNn^0p$_mE=M$Lc-4 z@56;j)%V*ee#~AuF&vI8X6DCwY-%l{S5~?f8_O$;b34r!+k}H3TbdTRyk!pz*FT0m zsJD7s-4OY|XgU+xPCT~n0=H6H7M6`lazfW?v{s`$hO}La#Efj-0-+i0qaJxoW!3SO zGIq84|9kM-g)V%MFHn4KI?`)N@tAQPUTr%9?cI_B-TzfD4hJ9gU=ZF(W3E0_UmPBN z)Nk*p)bJ@eey6a;rATvprg=5c{9Fwle60@Sy|^-Ia3^w?@Rg|T=Wg6us}0uzr+3hn zkZjIPR(H<0d+_nl(dt-jY~#6Gt6WFam*#7`&?w4S*37$5f^ut1We{%^!)IoeBDUEHGWO47RE_c3D##TWp)t%HpLBjt zAo|`=I!4$AiHn*xj8U!D8`aeg*4-ps@m0ToP;lYwn|l`UDK^{|TZ9s1H;+uIU(ph79&RZ;{guX0rpwva9D?^PMVUgGa1QH1swo&G99c8I+qzs4wMW< z71gEE?&_!-a7KrxqTAR}`+n2)+^agxcj+!Reyka)Xy9m!nFsr4S7zw`+xO`p^ZZe% zOk%aLY+e$toGM-OhOzCG^~;y$xG=mr^Ul8J(hxlSXo$FN>|!@{m2UX2TuTb~Wg4mU zj^op>({o&c6^EU9V6d@gWqi$JmD#9tje2TUGi@B-Xx>GVH`iCI)uD><)noV4xLae9=tjNJ ziN@;3_lXl38I{DZvR;jn&uPfyF0|+T1TGW9j(1POK5^;e#GcA%CmIg#ih5c;vr2K- zkt~0@H--J;Fss$c)e$lTdpI`g_$rq8TnwbAxs<4}u=mQwU0kV-&5zp1QJ|zT{*Kx# zKL$FtvT)8h=1Y#XuCqIHjr7% zAvbvPw_P+fN22K+XfADAnVo3FA{3L?w@#^vhg0;jtqtmm*h2_B2rW53xmFFY#&7ck zmbfA^@$xpNjLu@k1VzO#gytuj2Wz$~{a}nbw03i<*;pK<;jc1cJGplpUwY<;g8gh) z&hE~%FgQEDyKyd~NY#*UMFtXT1(R>Z8H{CS9}3J!RBfg?ff(r0O3hRnFZvl>osBtu zh?b$vxz*<4yshk+S;tJjOrM6sv~O45zuMF*2>j-?GaNHW;p0# zFxS0CJThbsZf`jvV<}UT_bsj9Bh@0xI)*6D-9~%h?T!YHgQI@r7A=WNF%|X|)&N*4mzD+`;f z7O$52tON71DCjlbt`$Kgdc+es&Rt{VCDPTs(ACWuvyLbZ2Wq6cWx}XCRh+VF2wYiD zyI`h&3x^`I0bE(&qYPV3&~b=PIad}@&u8GQ;*D+rN1n`f%ebZ;#T8hk2SntS5Tfz? z5<}F1g_*!3+Spgicq@HaPmOhwNyggAzGK@`zPH*WoZ^Ia2f@eZH)gORjBJ832lNnZ zOc33N7rW9Be>_VTH(MB5)UAZkB?22Zo~&N{3O0C=o0ssxh^j^ZuNM?eSDKUKbr_dm zG71rMk}iBnW}h&;EEJ=NZ!siu5^iUyca;lvzEF97^Jr%n8vvq?z>kuFh5zPB3JRDZ z@=sKpGV5u>$NATCL9Y(1d68*4=nMtW*cKEmdmG9qL)60Z*IQnSWpBsFo z5AJx~y1OEth769XMn`e6pL*@$rx?RvIH|K{otEe|73^U``)#(GFb+!K)k`Zg%fkqC zo84*k6UJ(mA5#k!kwuszB7WIYxo3&H;L#jJZ7Hkgw7xFS)HJI{-6I~gjRv%c8tJGU ztKtu@^)S-$QIHQSxJbxzEVqVztlETY1U$c72C( zOrnB%r)E}`c9rWuG54iLIp}e!AOp#d2BYlO(o9<6$3Dg;#q&B1lYxU!MP;kx~v59sg zwvinpon_=z^%00Qz3`}ykZ0L>i)Kb2&54<6hW+bnO-Qfo5e#M%4+=}XccjyU4D>cHRgg@&y~qg7p&HHiZ(*Lb_wy?kVbydQ?ObA z?Yb&#NEu=v3_!Pu+BzOhc}@&iHD|yo1IEiQ&P9D@WL1JBmt0coKD!6q z3u1HdIEwZ(OJlp7vlaqd7|o@nh4IOTkH2K2ZS0lJ*J4b=`q6pICGnik&=zy z)%B>~<>uInidkBw_NzYt289O^B5lXfh45_P`Ucv~F|Aqs(Cj9%23L@D ziPaG@ZC6&B_1KFKTJ@tSo5rF)5xO0A@*v$AzeAD&>J6I|;9ZZk`_WFyk=&TLsE5$ET5CUAhAqZ+yYWHHh?!ivaYmduibb5}#wB^l2- zDt;_p;v%IJE$Fx?zyd#6DLuM2!u`|yUN82($B-FZDoIZDbYnCzHzux0@rE?yHyes! zCX!iLk77zo0-8CZw%+$jL%m7wjlICMs4fe;>Ub>gHk?4qG;&;$Faw+3i!t`CN)(s!qY~OoEXEv%9fGT4|UxBAr<4RykGR zAGX0ku7B8LC$w!RzZit`)7(D9A5tf=3jsHJ7c4Y_Id`VD5I~+_eM=%kW_}CyF!z#B z4m@33F1J@~lenU?Jqb#&C8GjlB)G16*1##m5%TQOaenPTdy#_r4F zympb=+8h>R62krc@UPo#*g7pC+uGRH-jNer&p9()p*w{(`VVh*v#m-xmjOERb;wf)J05(fZjpI zrgzRfeWFz)*c$YMGZEeE4iA7_B518W5gl}~FOJ|8U*U4&R;CtLso%-K)#&76b0M|@ zQRuxz1k1T3JzN`uL?b(FWF5I1^uI#wZO7J)Sd{e)eM(<8D53k-ZW^5uGG+q~3MXY} zVooa+v%s)}ue@gOi{joA_l`>G?WBU@Il%nU~PB_MYx=V;@07|zGh zg$hK(XoOH;T9`i}M)-);SO~p=#gfIgRYP6fE;=*JLySz1G)c-<;);Y0*)&nJ9C5}z zh(OxB8I!nMn;mb?l`S1h44Mosl7iMjfJn8ZzOHOm>IA4BpIdu&t8Nz|DUeD{wZi6P zyGY+qpkzT}y@EhSUy| zBV`pxs`sM8xo`u*q)O_2zz-n}K5=DZa@l0F z)ELBHT&~gXJWBQAIuZ`MTyhe3*>N?TI$35JYDiJtUeEwFhx7 z$&FX@o+vk)P!h9(-V56pVxsX*?AOHE@ST#t&tQ`a;GM``Nd2lH z?g05x{xZg1g8c5?`CHQlB{UPLGZ%)jY)mI896V*c5Lj=yF%9Y!!oY#_^DM>uWaLVD z$KJSLOgs|xI!a*)yW{mu>j{)VcQ!!dG?i=GGRp~V9S-W& zO>HIig4JRntT8i%0mwSy687o|&KDy|RFW z^idQFiI&rbS1jwBL>DX+lC?s-lhxaDCkyEmOUqcf*Kq!+-T}JswEO&2eSBYQ`f$v1 z^^N90WI21RVNS|L%EY2XsmxtB}^1uknTe%?O@%LXo8DLSXk!do*pnB=GOV?Vo*fg`OE}Z z4V)&X^-h8hl05g2F*6N?B#z>NfmwvbgeFUUAneA``nFPvG)M_sCwTycMpbRtyhziy zDe|G77&;Pf3YPn~g_V*-jBT2oQ)uN41WTi`ta!}*X4Z&_=RUC7l|i$BvJR?SJSB?= zySg$N2(jmvnXq>2%lur;H0Gw4ciCR59*a1`9p&Xp27#97c!bL7pjBv^yl3_uqLHU+ zt-~G`iry4?l7)SBEvAG=%A~mHF>tlScepuqMrtBiMdmDBsBV-tVri_oisRp{t(CY& z`HW6wZoDyQ#i_WAOf5?`pRubsh4{afwG%~=;ES&OR$xZ8b$ZMOh3^ipGsbGK`C>9T{N z?7>L#pdi(T<2TpM>{B+;LMfoa6R&>F>e90n*8W-Qdoq-$0SZByfs@l)GA(#*;h{SblinP=o@L6syw%7Lb83oZ36g?nkp=R8mnrr! zkNSUM+GXN?RP8>A$w|pBdE0Vo)XQE|V1Z7HvY1ttTrMQLO+DOPv^_5>lTf(L9taLz z6!t)}(HYNvnR$x(>K3Ya#P$H19p)l?2;X{uspr*c>gQQmVwb%LwKsGcUvbYodS1&Y ziAom*1-bRMxMEaFEF@|Vs3?UvOD$=!!8bND5B)x}qp`P9t_1Y?62q5R1i1gy zut}8)KhrJ4VK!KogrwKD<_L+ENW94~H-3%dJdxG8M!L)2KD95Wy`l{=5u7BKuhMzd z`10hgqW>IrT=%*h+kl5G7dg>&+g>p*xy|6zmvRrH&5Vhl_*;)RIf*2@96hFPq}v3D zxSo-2%N!=25e_7oZ()b5L9iwb4`;8k*MaE{-w_u0OGj$PRji*u$ttY2hl} z$N(H|%%H*}Ql%hV@D4V#llu1*o}D&npm)93z*>Ny68GViaPf3s{#wn?_YDW-~@J zHbCuc?gaZ**aRROdwhyjMBrp9<5?jcAZzIZ``oCR)~aoOb@3ii(lciErSfRG zSXV&Gd*Sc`miO-o2ANOP)q%P`mNg?{6nVYMA9m?85cyk`u1OwB-fF5d#PNRYCy!dE zwoK{wnzKF8q?E*ElnuqOAfI_05o@Fr+GsC=8u*vE6jBg)1$k6G7(yV(-&l+eg#^B4 zma0w-gr``t{1{9{{7|{}DCU_K+(U2#*w@g}>2vr*(CCz=?2@arBerPHLb|8nSi_PE zJ5$LCkv4Vozb>faAYPLXa%d_vGM8YMx9-bd}PGFB95^n2{IquGGZH2jgz`K z>V~8F7wl@H~-2Cpi^ODz}oq62D2m5jikV(EG4`;jBeo-JCxxn#QNMZ z732usP}b_WeG!bPd`1ceF=A%zc!3fvHJhPEssnNac8an^q{teDF*EyR97&byJw_QU zCM4~HA6wfvT(HDRUG)JTJX@<$iEAdJ)o8WlI~1^;&Q_bFo;DVeH0U@TnF>K=L>q;H z%eH{eU~p$3FauE^${9t>cB$xgTGzu0E=Hp+q!Dm8altf2@3oAEh=ft{b=etEZ>Ou< zoZA|;`9hHBJ8R;)jQMID$^ju=u>%-gKG+`=JovV z6e`Hgl4EG&;s-(<@@pkLeTHcfDuoQBnE*b~R|;~V?2D_|%33^OyRuu&qtoW~(k}n@ z`=u=_9aJh>uLm`);#D|$XNNpYS1g$`*&03eHAZkW>Odo z)6G|Rw|f80B~6rx1{%_WOd|0?$Ak#+MO-hNimZ@^Lu-ST0>EdA z=A-3Ih4T;;@~ka`v&aUa~R%!OcJ7SfnMZ8IRfOulO8Y)aaw;;8u<}Vt*!=v+&^qFG#YI?QFsZwY1@! zC4aWk_qnZMjb^H7zcYl_FiYCYN~f(o+S*zMn=ZbWSq0gCx-y#yYPK2G@(#Tlh2w=% z84G6E_s?z>MhWGrf&ERvAPSym%dwaxv1L6IHx4E;*-*x0nX>2$s8v-%MzP5}yCO|k1 zkA6uI*vBL-C)faK95@+_;$mLmFsml;VNzd9<1HA6E(L<-!7l9X|&9|~K}Z70P#bfx)Hx@hS~tvjSn z6?}!FGNHP(z44t5Iq{^j4;VG3Pj@LaJ8w{~KelD=#$=q`34}wPLG}0)Q z@!K+ul8GLzGi}%@BM`2HRx~3}(=`;+G{^Z%zqjH?8M5~pnJMRN1%ry(R*CVZCe8`) zi$X6Fq>&0*I?svZ<_bhknSX2>2MGu6UdKqK#N`5GUOFNgO*hHmS|w!<|NUe{hm6SU zE2Ac&7b*KI4<|C7*dCijm&&;*E!NUyDrkX#F1g+I@{QiIuMb8eEaQ`$Wl}ke~uQ{O;do@Mvcw zIUQAC4BQh11B4tVkHDr61|kLZFo8@iqaQHD>=LoPB?yU=aALqfo^=Zf+iqV+tZB~^ zLGHrbvo7SJEj8DierAJiZKq3FD?Uy)Iw(m9qM=hyF={rL%)H)A$P%TwhE&%>RgnW< zk*|vTylJ&`sigtAD;0;-j{ zQr#>PWz8yGb28cF?%L$8-AUmGmN_o0LXoJvX@0qFG%O*j<2EL~YLA>w4kpP@9=W?% zHzTEMK}+idu+2<3E;7R5_$+s*jJmG*{$L1gRZ6f!2OXbir|c+0!k7UUh!gd|F@o2N zc&c368>b{SH+C3lD!2NDU1rrFhj?wY)4f#)z;G-a1g%R|U0j@Bys)vfG(O!3Nt*Au zYXcomH#pK-Y<82T)W+vsG$WyI0`2SaTVOgPYuyA39CptQ)`qxwG>Zbul`4h7`q*)& zjXdEiI@m2(>(boQld_?VqD{tE(``$g!X&o9&SUM7^tW5r^8w{!moCzR!iy?9+954A z=2?|d1KSbm?9_T!x><<@UxkAUQNxZ?B--dCS<6l9T2~;3_eXZHmhn=&Bdwu*^S+=+ zo>EGsJyxy0ObLb?*~O6aGrOhUS*Gp=A>0T`5>PS+x*!gvpOtc?Wz*`Hn=SpYV{LY? zT_ZLdpp9O^K$7iR6)3b5v!evC;w^3G* z2or|nLkl0iCk)klbEv`{ygau8CYNlH)Zvm`H0g4*_$@f9k-$~@jlVFeIT=y{JnVFs zfu!Uu^p6GyE<37Clz8m@a`4W|Vm5!U*HjXZ0+y}CJTT0D3fsnt(9@AjzP#$1xTRDz zs%bMNGNMll3++P@(VO+F$*2fmAF)ITo^Z;jm9t|M(9%q!QTBmIv%6lZNp$YKOjBc* zr{Q`A75#<}Hq9Ypsw`n#30Uc-G37T`jW?LHp<(e+ldNdWCMG7gs^M1JTEBxnX!Jf# zuE;L3s;_ugEtfXpr`?NwBu91yA&P+BSr>Pa(dVM-vZu_+$ol>=J#AwnZuX;21RC&B zsG`(Ei<&Ig52*{+Gl`V)@~LyNh2=N(sW3yqr;$5eruFJ8!1Xk>$ZuFMe8DHGg zwtz>7DJacAYva1C#e!tKl~#eZ5-tl?0XABI`G9STh01E*etfNVt=_%!2YtDmgw{N) zlbqZ3GfBNwl;j{%>SREwV^z6-8;2Y0{6PAngOu)H!3*(LUS(jC6-7<(DxWctHTKSB zTC11Y%JQqZ?q*bxv^F0|vbI_U%ughS01IHFhK?;AacO83*Sw-Disl+|=EE^JxjBW!|@jiqOq+8O2;Q{l=RU~?u4{rn( zo%%Ze4dGNihKlkLcQFlK1mfp!q*}_41x`GLr##!p4c3*O+d4nL5P6}7Pb`<4xP$*T z3z8&f$C;}aut>mAI@!LXS>Dft8RCS!V%{~(MH=@KPqbn_BX7&nw;Vu;IKl*UimSf7x3>io3X2{LvZypb5CG{A`}>3Ow+SL&NEO=*9NIt^0==C|S; zaz%R!lzEXn@RcwsktzRu;!LsB*547j<_cH1Rsbg6bu;1u5|n^um2XGF?xZP z&z|^8dDfKmR~6%{?H0|k>SBrXKsbZJn&ov!lElR8=OKcnikJ+1Q*^vOv}+vYBhg-H<%5~bQYg0+ zi8|`I5e>^|QX{11F3$5*Yu3weEN-8o7m_b^n)3>fBZ@SFrlF+{BeDC~JGd z!M1kP&9cnTI9-~S5)mXBM0%)F;hfGd*kj10dvWbLqny{K7iwW!Eg!N{;0&vI!J7QM zeAcGrHLGEQ=x-QN&PrrkBN5A_RZ`F%vOy3Wl9|bzgTZH3i|1gRjPOH)VrByQ$k55I z-i);@(R;$f<<{Rit$_lw#v<|#LoQ9$CZ!)(Rb_*HnDM$bj%%o}AM``bTL zuR~wWrah__>|v2=J8P~nGYnfM+3B|o`P#(*j4zeOM|FO?Ch+~~xpqabt&W_uTs^V_ zr6y$ z95ZC?qBF)&kWgWhOABTDQ0-S=!ThP^Y;B^{ILPwLF@k*>3>S(3KTI9Yu^a@digOTN zazmC6wwj1jc!T${Jy+o`Hx*Fh{GeI9Rq9#|3F#imedIPj;d$DG5ltg+sblSqg3`te z)KH^-^YGS)B0R{sjIUBj>3Qv%P2g~$6_(@KH#?E}vazFoI8to|jFM`AXn1-b^=?va zHM&m~0XZX8g6c>`6Cv|((cD$cOxTG!#IvjjH#CHg!1G(}fjIgX(RfF+iOc`@w=Dl3 zsHDh1_(P6nSpbR{-(IOT1_q5hExq8M^V}wZ0B&_9?yJPJW99Bg=9tea?bJAC-M03w zOfh;M9}#gpYqBO}K^90S#~uopDqtM8WZK7abAHaqY3x-{;mnrp$!3O(u`8RkaXXE+ zOxa611*N?aWj^=CeF-(D4VDcoG#b0JE4cP1OS?%ntk&)F!AW4CC)Y5@qL?HM<2WKB zPqh1^R<6=7Q^$JM=dMgmHSAWUUSES=ggC~jx&u>-IN z8-8m?81HsG3Zi>ETF|RmJ~dJKQK?dfwnD>RqF|8L>E9A&v}49IqJUce(|AE4R9>9S zfIZxh{PH#AQxNm9+dC^=33?ul^+>u?sp96$h*Re}47-PuWRVpKpwAW7)6N39R|K^3 z-OR58Qz^9FA4D~zW#f@2x?2L~J^uVw+sMBr)4AUHF14myW+z#^n<4Mrl!bSdS`q)p z99SZB`6nef6Bi8eBWb(Gt8Ab;rLY%dgWzR5K#q8#LUYF#eQyGlQ{a|J4J2HK9TJGC z=_*Rs&eq4|t8TSs-$38lSe?`sCTq*PR_1n}JrR9XPS*)b%kv9u)(JU%uab}wN$q8i z)z4$|+g4^Lpq!0~RbxVDCx~FUq>R?g6|;h6>p^YlSo1Vv|};JF6g64-lJgjOzJy&}sXcr2iz@?h(=ncG(KY^*6a%oGVCxb6mXQi8*e w!ypXJM;u{0P%*^`w@-2Nb^Da)xxl5=(0kVW{%&&5?vxSA&2^qk8F%9U0prVJ>i_@% literal 0 HcmV?d00001 diff --git a/sca-cpp/trunk/components/sqldb/pgsql-standby-test.cpp b/sca-cpp/trunk/components/sqldb/pgsql-standby-test.cpp new file mode 100644 index 0000000000..44f0a4a9e6 --- /dev/null +++ b/sca-cpp/trunk/components/sqldb/pgsql-standby-test.cpp @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* $Rev$ $Date$ */ + +/** + * Test PostgreSQL hot standby support. + */ + +#include +#include "stream.hpp" +#include "string.hpp" +#include "perf.hpp" +#include "pgsql.hpp" + +namespace tuscany { +namespace pgsql { + +bool testPGSql() { + PGSql wpg("host=localhost port=5432 dbname=db", "test"); + PGSql rpg("host=localhost port=5433 dbname=db", "test"); + const value k = mklist("a"); + + assert(hasContent(post(k, string("AAA"), wpg))); + sleep(1); + assert((get(k, rpg)) == value(string("AAA"))); + assert(hasContent(put(k, string("aaa"), wpg))); + sleep(1); + assert((get(k, rpg)) == value(string("aaa"))); + assert(hasContent(del(k, wpg))); + sleep(1); + assert(!hasContent(get(k, rpg))); + + return true; +} + +struct getLoop { + const value k; + PGSql& pg; + getLoop(const value& k, PGSql& pg) : k(k), pg(pg) { + } + const bool operator()() const { + assert((get(k, pg)) == value(string("CCC"))); + return true; + } +}; + +bool testGetPerf() { + const value k = mklist("c"); + PGSql wpg("host=localhost port=5432 dbname=db", "test"); + PGSql rpg("host=localhost port=5433 dbname=db", "test"); + assert(hasContent(post(k, string("CCC"), wpg))); + sleep(1); + + const lambda gl = getLoop(k, rpg); + cout << "PGSql get test " << time(gl, 5, 200) << " ms" << endl; + return true; +} + +} +} + +int main() { + tuscany::cout << "Testing..." << tuscany::endl; + + tuscany::pgsql::testPGSql(); + tuscany::pgsql::testGetPerf(); + + tuscany::cout << "OK" << tuscany::endl; + + return 0; +} diff --git a/sca-cpp/trunk/components/sqldb/pgsql-start b/sca-cpp/trunk/components/sqldb/pgsql-start index f5c0f87614..3f03d0b4dc 100755 --- a/sca-cpp/trunk/components/sqldb/pgsql-start +++ b/sca-cpp/trunk/components/sqldb/pgsql-start @@ -24,14 +24,6 @@ root=`readlink -f $1` pgsql_prefix=`cat $here/pgsql.prefix` mkdir -p $root/sqldb mkdir -p $root/logs -if [ ! -f $root/sqldb/postgresql.conf ]; then - $pgsql_prefix/bin/pg_ctl init -D $root/sqldb 1>/dev/null 2>&1 - createdb="true" -fi - -$pgsql_prefix/bin/pg_ctl start -D $root/sqldb -l $root/logs/postgresql 1>/dev/null 2>&1 -sleep 2 -if [ "$createdb" = "true" ]; then - $pgsql_prefix/bin/createdb db 1>/dev/null 2>&1 -fi +$pgsql_prefix/bin/pg_ctl start -w -D $root/sqldb/data -l $root/logs/postgresql 1>>$root/logs/postgresql 2>&1 +sleep 1 diff --git a/sca-cpp/trunk/components/sqldb/pgsql-stop b/sca-cpp/trunk/components/sqldb/pgsql-stop index d0cda096ba..eefade47d2 100755 --- a/sca-cpp/trunk/components/sqldb/pgsql-stop +++ b/sca-cpp/trunk/components/sqldb/pgsql-stop @@ -22,7 +22,6 @@ here=`readlink -f $0`; here=`dirname $here` root=`readlink -f $1` pgsql_prefix=`cat $here/pgsql.prefix` -mkdir -p $root/sqldb mkdir -p $root/logs -$pgsql_prefix/bin/pg_ctl stop -D $root/sqldb 1>/dev/null 2>&1 +$pgsql_prefix/bin/pg_ctl stop -w -D $root/sqldb/data 1>>$root/logs/postgresql 2>&1 diff --git a/sca-cpp/trunk/components/sqldb/pgsql-test.cpp b/sca-cpp/trunk/components/sqldb/pgsql-test.cpp index 7fb6b0c814..1019667285 100644 --- a/sca-cpp/trunk/components/sqldb/pgsql-test.cpp +++ b/sca-cpp/trunk/components/sqldb/pgsql-test.cpp @@ -33,7 +33,7 @@ namespace tuscany { namespace pgsql { bool testPGSql() { - PGSql pg("dbname=db", "test"); + PGSql pg("host=localhost port=5432 dbname=db", "test"); const value k = mklist("a"); assert(hasContent(post(k, string("AAA"), pg))); @@ -59,7 +59,7 @@ struct getLoop { bool testGetPerf() { const value k = mklist("c"); - PGSql pg("dbname=db", "test"); + PGSql pg("host=localhost port=5432 dbname=db", "test"); assert(hasContent(post(k, string("CCC"), pg))); const lambda gl = getLoop(k, pg); diff --git a/sca-cpp/trunk/components/sqldb/pgsql.hpp b/sca-cpp/trunk/components/sqldb/pgsql.hpp index bb37d125b8..f4da8db220 100644 --- a/sca-cpp/trunk/components/sqldb/pgsql.hpp +++ b/sca-cpp/trunk/components/sqldb/pgsql.hpp @@ -40,10 +40,13 @@ namespace pgsql { /** * Return and clear a Postgres result failure. */ -const string pgfailure(PGresult* r) { - const string e = PQresultErrorMessage(r); +const string pgfailure(PGresult* r, PGconn* conn) { + const string re = PQresultErrorMessage(r); PQclear(r); - return e; + if (length(re) != 0) + return re; + const string ce = PQerrorMessage(conn); + return ce; } /** @@ -54,19 +57,23 @@ public: PGSql() : owner(false) { } - PGSql(const string& conninfo, const string& table) : owner(true), conninfo(conninfo), table(table) { - init(); + PGSql(const string& conninfo, const string& table) : owner(true), conn(NULL), conninfo(conninfo), table(table) { + conn = PQconnectdb(c_str(conninfo)); + if (PQstatus(conn) != CONNECTION_OK) { + mkfailure(string("Could not connect to postgresql database: ") + PQerrorMessage(conn)); + return; + } + setup(true); } - PGSql(const PGSql& c) : owner(false) { - conninfo = c.conninfo; - conn = c.conn; - table = c.table; + PGSql(const PGSql& c) : owner(false), conn(c.conn), conninfo(c.conninfo), table(c.table) { } ~PGSql() { if (!owner) return; + if (conn == NULL) + return; PQfinish(conn); } @@ -76,28 +83,37 @@ private: string conninfo; string table; + friend const failable setup(const PGSql& pgsql); friend const failable post(const value& key, const value& val, const PGSql& pgsql); friend const failable put(const value& key, const value& val, const PGSql& pgsql); friend const failable get(const value& key, const PGSql& pgsql); friend const failable del(const value& key, const PGSql& pgsql); /** - * Initialize the database connection + * Setup the database connection. */ - const failable init() { - conn = PQconnectdb(c_str(conninfo)); - if (PQstatus(conn) != CONNECTION_OK) - return mkfailure(string("Could not connect to database: ") + PQerrorMessage(conn)); + const failable setup(const bool init) const { + + // Check the status of the connection and reconnect if necessary + if (!init) { + if (PQstatus(conn) == CONNECTION_OK) + return true; + debug("pgsql::setup::reset"); + PQreset(conn); + if (PQstatus(conn) != CONNECTION_OK) + return mkfailure(string("Could not reconnect to postgresql database: ") + PQerrorMessage(conn)); + } + debug("pgsql::setup::init"); // Find the name of the first column in the target table // Assume that's the key we need to use string ks = string("select a.attname from pg_attribute a, pg_class c where a.attrelid = c.relfilenode and c.relname = '") + table + string("' and a.attnum in (1, 2) order by a.attnum;"); PGresult* kr = PQexec(conn, c_str(ks)); if (PQresultStatus(kr) != PGRES_TUPLES_OK) - return mkfailure(string("Could not execute column select statement: ") + pgfailure(kr)); + return mkfailure(string("Could not execute postgresql column select statement: ") + pgfailure(kr, conn)); if (PQntuples(kr) != 2) { PQclear(kr); - return mkfailure(string("Could not find table key and value column names")); + return mkfailure(string("Could not find postgresql table key and value column names")); } const string kname = PQgetvalue(kr, 0, 0); const string vname = PQgetvalue(kr, 1, 0); @@ -107,31 +123,38 @@ private: { PGresult* r = PQprepare(conn, "post", c_str(string("insert into ") + table + string(" values($1, $2);")), 2, NULL); if (PQresultStatus(r) != PGRES_COMMAND_OK) - return mkfailure(string("Could not prepare post SQL statement: ") + pgfailure(r)); + return mkfailure(string("Could not prepare post postgresql SQL statement: ") + pgfailure(r, conn)); PQclear(r); } { PGresult* r = PQprepare(conn, "put", c_str(string("update ") + table + string(" set ") + vname + string(" = $2 where ") + kname + string(" = $1;")), 2, NULL); if (PQresultStatus(r) != PGRES_COMMAND_OK) - return mkfailure(string("Could not prepare put SQL statement: ") + pgfailure(r)); + return mkfailure(string("Could not prepare put postgresql SQL statement: ") + pgfailure(r, conn)); PQclear(r); } { PGresult* r = PQprepare(conn, "get", c_str(string("select * from ") + table + string(" where ") + kname + string(" = $1;")), 1, NULL); if (PQresultStatus(r) != PGRES_COMMAND_OK) - return mkfailure(string("Could not prepare get SQL statement: ") + pgfailure(r)); + return mkfailure(string("Could not prepare get postgresql SQL statement: ") + pgfailure(r, conn)); PQclear(r); } { PGresult* r = PQprepare(conn, "delete", c_str(string("delete from ") + table + string(" where ") + kname + string(" = $1;")), 1, NULL); if (PQresultStatus(r) != PGRES_COMMAND_OK) - return mkfailure(string("Could not prepare delete SQL statement: ") + pgfailure(r)); + return mkfailure(string("Could not prepare delete postgresql SQL statement: ") + pgfailure(r, conn)); PQclear(r); } return true; } }; +/** + * Setup the database connection if necessary. + */ +const failable setup(const PGSql& pgsql) { + return pgsql.setup(false); +} + /** * Post a new item to the database. */ @@ -140,13 +163,14 @@ const failable post(const value& key, const value& val, const PGSql& pgsql debug(val, "pgsql::post::value"); debug(pgsql.conninfo, "pgsql::post::conninfo"); debug(pgsql.table, "pgsql::post::table"); + setup(pgsql); const string ks(scheme::writeValue(key)); const string vs(scheme::writeValue(val)); const char* params[2] = { c_str(ks), c_str(vs) }; PGresult* r = PQexecPrepared(pgsql.conn, "post", 2, params, NULL, NULL, 0); if (PQresultStatus(r) != PGRES_COMMAND_OK) - return mkfailure(string("Could not execute post SQL statement: ") + pgfailure(r)); + return mkfailure(string("Could not execute insert postgresql SQL statement: ") + pgfailure(r, pgsql.conn)); PQclear(r); debug(true, "pgsql::post::result"); @@ -161,13 +185,14 @@ const failable put(const value& key, const value& val, const PGSql& pgsql) debug(val, "pgsql::put::value"); debug(pgsql.conninfo, "pgsql::put::conninfo"); debug(pgsql.table, "pgsql::put::table"); + setup(pgsql); const string ks(scheme::writeValue(key)); const string vs(scheme::writeValue(val)); const char* params[2] = { c_str(ks), c_str(vs) }; PGresult* r = PQexecPrepared(pgsql.conn, "put", 2, params, NULL, NULL, 0); if (PQresultStatus(r) != PGRES_COMMAND_OK) - return mkfailure(string("Could not execute put SQL statement: ") + pgfailure(r)); + return mkfailure(string("Could not execute update postgresql SQL statement: ") + pgfailure(r, pgsql.conn)); const string t = PQcmdTuples(r); if (t != "0") { PQclear(r); @@ -178,7 +203,7 @@ const failable put(const value& key, const value& val, const PGSql& pgsql) PGresult* pr = PQexecPrepared(pgsql.conn, "post", 2, params, NULL, NULL, 0); if (PQresultStatus(pr) != PGRES_COMMAND_OK) - return mkfailure(string("Could not execute post SQL statement: ") + pgfailure(pr)); + return mkfailure(string("Could not execute insert postgresql SQL statement: ") + pgfailure(pr, pgsql.conn)); PQclear(pr); debug(true, "pgsql::put::result"); @@ -192,15 +217,16 @@ const failable get(const value& key, const PGSql& pgsql) { debug(key, "pgsql::get::key"); debug(pgsql.conninfo, "pgsql::get::conninfo"); debug(pgsql.table, "pgsql::get::table"); + setup(pgsql); const string ks(scheme::writeValue(key)); const char* params[1] = { c_str(ks) }; PGresult* r = PQexecPrepared(pgsql.conn, "get", 1, params, NULL, NULL, 0); if (PQresultStatus(r) != PGRES_TUPLES_OK) - return mkfailure(string("Could not execute get SQL statement: ") + pgfailure(r)); + return mkfailure(string("Could not execute select postgresql SQL statement: ") + pgfailure(r, pgsql.conn)); if (PQntuples(r) < 1) { PQclear(r); - return mkfailure(string("Could not get entry: ") + PQerrorMessage(pgsql.conn)); + return mkfailure(string("Could not get postgresql entry: ") + PQerrorMessage(pgsql.conn)); } const char* data = PQgetvalue(r, 0, 1); const value val(scheme::readValue(string(data))); @@ -217,12 +243,13 @@ const failable del(const value& key, const PGSql& pgsql) { debug(key, "pgsql::delete::key"); debug(pgsql.conninfo, "pgsql::delete::conninfo"); debug(pgsql.table, "pgsql::delete::table"); + setup(pgsql); const string ks(scheme::writeValue(key)); const char* params[1] = { c_str(ks) }; PGresult* r = PQexecPrepared(pgsql.conn, "delete", 1, params, NULL, NULL, 0); if (PQresultStatus(r) != PGRES_COMMAND_OK) - return mkfailure(string("Could not execute delete SQL statement: ") + pgfailure(r)); + return mkfailure(string("Could not execute delete postgresql SQL statement: ") + pgfailure(r, pgsql.conn)); PQclear(r); debug(true, "pgsql::delete::result"); diff --git a/sca-cpp/trunk/components/sqldb/server-test b/sca-cpp/trunk/components/sqldb/server-test index 784c7156c5..c07d3b0510 100755 --- a/sca-cpp/trunk/components/sqldb/server-test +++ b/sca-cpp/trunk/components/sqldb/server-test @@ -19,6 +19,11 @@ # Setup ../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs +./pgsql-conf tmp +./pgsql-start tmp +./pgsql "drop table test;" 1>/dev/null 2>&1 +./pgsql "create table test(key text, value text);" 1>/dev/null 2>&1 + ../../modules/server/server-conf tmp ../../modules/server/scheme-conf tmp cat >>tmp/conf/httpd.conf </dev/null 2>&1 -./pgsql "create table test(key text, value text);" 1>/dev/null 2>&1 ../../modules/http/httpd-start tmp sleep 2 @@ -39,5 +41,4 @@ rc=$? # Cleanup ../../modules/http/httpd-stop tmp ./pgsql-stop tmp -sleep 2 return $rc diff --git a/sca-cpp/trunk/components/sqldb/sqldb-test b/sca-cpp/trunk/components/sqldb/sqldb-test index 05fe413d50..e910ae0059 100755 --- a/sca-cpp/trunk/components/sqldb/sqldb-test +++ b/sca-cpp/trunk/components/sqldb/sqldb-test @@ -18,6 +18,7 @@ # under the License. # Setup +./pgsql-conf tmp ./pgsql-start tmp ./pgsql "drop table test;" 1>/dev/null 2>&1 ./pgsql "create table test(key text, value text);" 1>/dev/null 2>&1 diff --git a/sca-cpp/trunk/components/sqldb/sqldb.composite b/sca-cpp/trunk/components/sqldb/sqldb.composite index a27332e649..1511e66024 100644 --- a/sca-cpp/trunk/components/sqldb/sqldb.composite +++ b/sca-cpp/trunk/components/sqldb/sqldb.composite @@ -24,7 +24,7 @@ - dbname=db + host=localhost port=5432 dbname=db test diff --git a/sca-cpp/trunk/components/sqldb/sqldb.cpp b/sca-cpp/trunk/components/sqldb/sqldb.cpp index e84a732511..0524b00bd2 100644 --- a/sca-cpp/trunk/components/sqldb/sqldb.cpp +++ b/sca-cpp/trunk/components/sqldb/sqldb.cpp @@ -23,10 +23,7 @@ * PostgreSQL-based database component implementation. */ -#include - #include "string.hpp" - #include "function.hpp" #include "list.hpp" #include "value.hpp" @@ -46,16 +43,8 @@ const failable get(const list& params, pgsql::PGSql& pg) { /** * Post an item to the database. */ -const value uuidValue() { - apr_uuid_t uuid; - apr_uuid_get(&uuid); - char buf[APR_UUID_FORMATTED_LENGTH]; - apr_uuid_format(buf, &uuid); - return value(string(buf, APR_UUID_FORMATTED_LENGTH)); -} - const failable post(const list& params, pgsql::PGSql& pg) { - const value id = append(car(params), mklist(uuidValue())); + const value id = append(car(params), mklist(mkuuid())); const failable val = pgsql::post(id, cadr(params), pg); if (!hasContent(val)) return mkfailure(reason(val)); diff --git a/sca-cpp/trunk/components/sqldb/standby-test b/sca-cpp/trunk/components/sqldb/standby-test new file mode 100755 index 0000000000..e572de6fe2 --- /dev/null +++ b/sca-cpp/trunk/components/sqldb/standby-test @@ -0,0 +1,39 @@ +#!/bin/sh + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# Setup +../../modules/http/httpd-conf tmp/master localhost 8090 tmp/master/htdocs +./pgsql-conf tmp/master 5432 +./pgsql-start tmp/master +./pgsql localhost 5432 "drop table test;" 1>/dev/null 2>&1 +./pgsql localhost 5432 "create table test(key text, value text);" 1>/dev/null 2>&1 +../../modules/http/httpd-start tmp/master +sleep 2 +./pgsql-standby-conf tmp/standby localhost 5432 8090 5433 +./pgsql-start tmp/standby + +# Test +./pgsql-standby-test 2>/dev/null +rc=$? + +# Cleanup +../../modules/http/httpd-stop tmp/master +./pgsql-stop tmp/standby +./pgsql-stop tmp/master +return $rc diff --git a/sca-cpp/trunk/kernel/list.hpp b/sca-cpp/trunk/kernel/list.hpp index 84eba6d82f..db2f457317 100644 --- a/sca-cpp/trunk/kernel/list.hpp +++ b/sca-cpp/trunk/kernel/list.hpp @@ -313,26 +313,54 @@ template const list cdr(const list& p) { } /** - * Returns the car of the cdr of a list. + * Returns the car of the cdr (the 2nd element) of a list. */ template const T cadr(const list& p) { return car(cdr(p)); } /** - * Returns the car of the cdr of the cdr of a list. + * Returns the 3rd element of a list. */ template const T caddr(const list& p) { return car(cdr(cdr(p))); } /** - * Returns the car of the cdr of the cdr of the cdr of a list. + * Returns the 4th element of a list. */ template const T cadddr(const list& p) { return car(cdr(cdr(cdr(p)))); } +/** + * Returns the 5th element of a list. + */ +template const T caddddr(const list& p) { + return car(cdr(cdr(cdr(cdr(p))))); +} + +/** + * Returns the 6th element of a list. + */ +template const T cadddddr(const list& p) { + return car(cdr(cdr(cdr(cdr(cdr(p)))))); +} + +/** + * Returns the 7th element of a list. + */ +template const T caddddddr(const list& p) { + return car(cdr(cdr(cdr(cdr(cdr(cdr(p))))))); +} + +/** + * Returns the 8th element of a list. + */ +template const T cadddddddr(const list& p) { + return car(cdr(cdr(cdr(cdr(cdr(cdr(cdr(p)))))))); +} + /** * Returns the cdr of a cdr of a list. */ diff --git a/sca-cpp/trunk/kernel/value.hpp b/sca-cpp/trunk/kernel/value.hpp index 87d80a3e2a..24688648d2 100644 --- a/sca-cpp/trunk/kernel/value.hpp +++ b/sca-cpp/trunk/kernel/value.hpp @@ -27,6 +27,7 @@ */ #include +#include #include "string.hpp" #include "sstream.hpp" #include "gc.hpp" @@ -589,5 +590,16 @@ const value path(const list& p) { return string("/") + car(p) + path(cdr(p)); } +/** + * Make a uuid value. + */ +const value mkuuid() { + apr_uuid_t id; + apr_uuid_get(&id); + char buf[APR_UUID_FORMATTED_LENGTH]; + apr_uuid_format(buf, &id); + return value(string(buf, APR_UUID_FORMATTED_LENGTH)); +} + } #endif /* tuscany_value_hpp */ diff --git a/sca-cpp/trunk/modules/http/httpd-conf b/sca-cpp/trunk/modules/http/httpd-conf index 09d78351ff..9f698688b1 100755 --- a/sca-cpp/trunk/modules/http/httpd-conf +++ b/sca-cpp/trunk/modules/http/httpd-conf @@ -76,6 +76,7 @@ LoadModule setenvif_module ${modules_prefix}/modules/mod_setenvif.so LoadModule log_config_module ${modules_prefix}/modules/mod_log_config.so LoadModule vhost_alias_module ${modules_prefix}/modules/mod_vhost_alias.so +LoadModule cgi_module ${modules_prefix}/modules/mod_cgi.so LoadModule mod_tuscany_ssltunnel $here/libmod_tuscany_ssltunnel.so diff --git a/sca-cpp/trunk/modules/java/eval.hpp b/sca-cpp/trunk/modules/java/eval.hpp index a1cf6ae576..daf30d891b 100644 --- a/sca-cpp/trunk/modules/java/eval.hpp +++ b/sca-cpp/trunk/modules/java/eval.hpp @@ -26,7 +26,6 @@ * Java component implementation evaluation logic. */ #include -#include #include "list.hpp" #include "value.hpp" @@ -292,12 +291,8 @@ jobject JNICALL nativeInvoke(JNIEnv* env, jobject self, unused jobject proxy, jo * of this function as java.util.UUID seems to behave differently with different JDKs. */ jobject JNICALL nativeUUID(JNIEnv* env) { - apr_uuid_t uuid; - apr_uuid_get(&uuid); - char buf[APR_UUID_FORMATTED_LENGTH]; - apr_uuid_format(buf, &uuid); - string s(buf, APR_UUID_FORMATTED_LENGTH); - return env->NewStringUTF(c_str(s)); + const value uuid = mkuuid(); + return env->NewStringUTF(c_str(uuid)); } /** diff --git a/sca-cpp/trunk/modules/scheme/primitive.hpp b/sca-cpp/trunk/modules/scheme/primitive.hpp index fd5f3e9755..6f3f71f4cd 100644 --- a/sca-cpp/trunk/modules/scheme/primitive.hpp +++ b/sca-cpp/trunk/modules/scheme/primitive.hpp @@ -26,8 +26,6 @@ * Script evaluator primitive functions. */ -#include -#include #include "stream.hpp" #include "function.hpp" #include "list.hpp" @@ -144,11 +142,7 @@ const value logProc(const list& args) { } const value uuidProc(unused const list& args) { - apr_uuid_t uuid; - apr_uuid_get(&uuid); - char buf[APR_UUID_FORMATTED_LENGTH]; - apr_uuid_format(buf, &uuid); - return string(buf, APR_UUID_FORMATTED_LENGTH); + return mkuuid(); } const value cadrProc(unused const list& args) { diff --git a/sca-cpp/trunk/samples/store-cluster/Makefile.am b/sca-cpp/trunk/samples/store-cluster/Makefile.am index 0f933b34f3..2f18d95983 100644 --- a/sca-cpp/trunk/samples/store-cluster/Makefile.am +++ b/sca-cpp/trunk/samples/store-cluster/Makefile.am @@ -21,7 +21,7 @@ if WANT_OPENID if WANT_LOG if WANT_QUEUE -dist_sample_SCRIPTS = start stop ssl-start ssl-stop proxy-conf proxy-ssl-conf server-conf server-ssl-conf tunnel-ssl-conf +dist_sample_SCRIPTS = start stop ssl-start ssl-stop proxy-conf proxy-ssl-conf server-conf server-ssl-conf tunnel-ssl-conf sqldb-master-conf sqldb-standby-conf sampledir = $(prefix)/samples/store-cluster nobase_dist_sample_DATA = htdocs/*.html htdocs/domains/*/*.html domains/*/*.py domains/*/*.composite diff --git a/sca-cpp/trunk/samples/store-cluster/domains/jane/store.composite b/sca-cpp/trunk/samples/store-cluster/domains/jane/store.composite index 396970a6e6..85d6aa3a9b 100644 --- a/sca-cpp/trunk/samples/store-cluster/domains/jane/store.composite +++ b/sca-cpp/trunk/samples/store-cluster/domains/jane/store.composite @@ -58,15 +58,44 @@ - - + + - + + + + + + + + + + + + localhost:11211,localhost:11212,localhost:11213 - + + + + + host=localhost port=5432 dbname=db + store + + + + + + + + host=localhost port=5433 dbname=db + store + + + + diff --git a/sca-cpp/trunk/samples/store-cluster/domains/joe/store.composite b/sca-cpp/trunk/samples/store-cluster/domains/joe/store.composite index 396970a6e6..ca7815d573 100644 --- a/sca-cpp/trunk/samples/store-cluster/domains/joe/store.composite +++ b/sca-cpp/trunk/samples/store-cluster/domains/joe/store.composite @@ -58,15 +58,44 @@ - - + + - + + + + + + + + + + + + localhost:11211,localhost:11212,localhost:11213 - + + + + + host=localhost port=5432 dbname=db + store + + + + + + + + host=localhost port=5434 dbname=db + store + + + + diff --git a/sca-cpp/trunk/samples/store-cluster/sqldb-master-conf b/sca-cpp/trunk/samples/store-cluster/sqldb-master-conf new file mode 100755 index 0000000000..cd85f1e328 --- /dev/null +++ b/sca-cpp/trunk/samples/store-cluster/sqldb-master-conf @@ -0,0 +1,35 @@ +#!/bin/sh + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +root=$1 +port=$2 + +# Configure a database server +if [ ! -f $root/sqldb/data/postgresql.conf ]; then + create="true" +else + create="false" +fi +../../components/sqldb/pgsql-conf $root $port +if [ "$create" = "true" ]; then + ../../components/sqldb/pgsql-start $root + ../../components/sqldb/pgsql localhost $port "create table store(key text, value text);" 1>/dev/null 2>&1 + ../../components/sqldb/pgsql-stop $root +fi + diff --git a/sca-cpp/trunk/samples/store-cluster/sqldb-standby-conf b/sca-cpp/trunk/samples/store-cluster/sqldb-standby-conf new file mode 100755 index 0000000000..d1dec9930b --- /dev/null +++ b/sca-cpp/trunk/samples/store-cluster/sqldb-standby-conf @@ -0,0 +1,28 @@ +#!/bin/sh + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +root=$1 +mhost=$2 +mport=$3 +mhttpport=$4 +port=$5 + +# Configure a standby database server +../../components/sqldb/pgsql-standby-conf $root $mhost $mport $mhttpport $port + diff --git a/sca-cpp/trunk/samples/store-cluster/ssl-stop b/sca-cpp/trunk/samples/store-cluster/ssl-stop index 97af3d7faa..3c52c60399 100755 --- a/sca-cpp/trunk/samples/store-cluster/ssl-stop +++ b/sca-cpp/trunk/samples/store-cluster/ssl-stop @@ -20,9 +20,12 @@ ../../modules/http/httpd-stop tmp/server1 ../../modules/http/httpd-stop tmp/server2 ../../modules/http/httpd-stop tmp/server3 + ../../modules/http/httpd-stop tmp/proxy1 ../../modules/http/httpd-stop tmp/proxy2 + ../../components/cache/memcached-stop 127.0.0.1:11411 ../../components/cache/memcached-stop 127.0.0.1:11412 ../../components/cache/memcached-stop 127.0.0.1:11413 + ../../modules/http/httpd-stop tmp/tunnel1 diff --git a/sca-cpp/trunk/samples/store-cluster/start b/sca-cpp/trunk/samples/store-cluster/start index 4612ca2770..2b3afc320c 100755 --- a/sca-cpp/trunk/samples/store-cluster/start +++ b/sca-cpp/trunk/samples/store-cluster/start @@ -22,15 +22,25 @@ ../../components/cache/memcached-start 11212 ../../components/cache/memcached-start 11213 -# Start three app servers +# Start three app servers, with a master database and +# two hot standby databases ./server-conf tmp/server1 8101 +./sqldb-master-conf tmp/server1 5432 +../../components/sqldb/pgsql-start tmp/server1 ../../modules/http/httpd-start tmp/server1 +sleep 1 ./server-conf tmp/server2 8102 +./sqldb-standby-conf tmp/server2 localhost 5432 8101 5433 +../../components/sqldb/pgsql-start tmp/server2 ../../modules/http/httpd-start tmp/server2 +sleep 1 ./server-conf tmp/server3 8103 +./sqldb-standby-conf tmp/server3 localhost 5432 8101 5434 +../../components/sqldb/pgsql-start tmp/server3 ../../modules/http/httpd-start tmp/server3 +sleep 1 # Start two proxy balancers ./proxy-conf tmp/proxy1 8091 diff --git a/sca-cpp/trunk/samples/store-cluster/stop b/sca-cpp/trunk/samples/store-cluster/stop index 9df37dc948..d3d29f9cb2 100755 --- a/sca-cpp/trunk/samples/store-cluster/stop +++ b/sca-cpp/trunk/samples/store-cluster/stop @@ -17,11 +17,18 @@ # specific language governing permissions and limitations # under the License. +../../components/sqldb/pgsql-stop tmp/server2 +../../components/sqldb/pgsql-stop tmp/server3 +../../components/sqldb/pgsql-stop tmp/server1 + ../../modules/http/httpd-stop tmp/server1 ../../modules/http/httpd-stop tmp/server2 ../../modules/http/httpd-stop tmp/server3 + ../../modules/http/httpd-stop tmp/proxy1 ../../modules/http/httpd-stop tmp/proxy2 + ../../components/cache/memcached-stop 11211 ../../components/cache/memcached-stop 11212 ../../components/cache/memcached-stop 11213 + diff --git a/sca-cpp/trunk/samples/store-cpp/shopping-cart.cpp b/sca-cpp/trunk/samples/store-cpp/shopping-cart.cpp index 5cbbb2feff..3a1df44490 100644 --- a/sca-cpp/trunk/samples/store-cpp/shopping-cart.cpp +++ b/sca-cpp/trunk/samples/store-cpp/shopping-cart.cpp @@ -23,8 +23,6 @@ * Shopping cart component implementation. */ -#include -#include #include "string.hpp" #include "function.hpp" #include "list.hpp" @@ -42,27 +40,21 @@ const string cartId("1234"); */ const list getcart(const value& id, const lambda&)> cache) { const value cart = cache(mklist("get", mklist(id))); + cerr << "cart value: " << cart << "\n"; + const failable fcart = cart; + cerr << "cart fvalue: " << fcart << "\n"; + cerr << "cart content: " << content(fcart) << "\n"; + cerr << "cart reason: " << reason(fcart) << "\n"; if (isNil(cart)) return value(list()); return (list)cart; } -/** - * Returns a UUID. - */ -const value uuid() { - apr_uuid_t uuid; - apr_uuid_get(&uuid); - char buf[APR_UUID_FORMATTED_LENGTH]; - apr_uuid_format(buf, &uuid); - return string(buf, APR_UUID_FORMATTED_LENGTH); -} - /** * Post a new item to the cart. Create a new cart if necessary. */ const failable post(unused const list& collection, const value& item, const lambda&)> cache) { - const value id(uuid()); + const value id(mkuuid()); const list newItem(mklist(car(item), id, caddr(item))); const list cart(cons(newItem, getcart(cartId, cache))); cache(mklist("put", mklist(cartId), cart)); diff --git a/sca-cpp/trunk/samples/store-sql/ssl-start b/sca-cpp/trunk/samples/store-sql/ssl-start index 46e46dd32c..9263e16dfb 100755 --- a/sca-cpp/trunk/samples/store-sql/ssl-start +++ b/sca-cpp/trunk/samples/store-sql/ssl-start @@ -21,6 +21,7 @@ ../../modules/http/ssl-cert-conf tmp localhost ../../modules/http/httpd-conf tmp localhost 8090 htdocs ../../modules/http/httpd-ssl-conf tmp 8453 +../../modules/http/httpd-auth-conf tmp ../../modules/server/server-conf tmp ../../modules/server/scheme-conf tmp cat >>tmp/conf/httpd.conf </dev/null 2>&1 ../../modules/http/httpd-start tmp diff --git a/sca-cpp/trunk/samples/store-sql/start b/sca-cpp/trunk/samples/store-sql/start index 60f5a2d702..95881294d1 100755 --- a/sca-cpp/trunk/samples/store-sql/start +++ b/sca-cpp/trunk/samples/store-sql/start @@ -27,6 +27,8 @@ SCAComposite store.composite EOF +../../components/cache/memcached-start +../../components/sqldb/pgsql-conf tmp ../../components/sqldb/pgsql-start tmp ../../components/sqldb/pgsql "create table store(key text, value text);" 1>/dev/null 2>&1 ../../modules/http/httpd-start tmp diff --git a/sca-cpp/trunk/samples/store-sql/stop b/sca-cpp/trunk/samples/store-sql/stop index 603165ef46..2226018a3f 100755 --- a/sca-cpp/trunk/samples/store-sql/stop +++ b/sca-cpp/trunk/samples/store-sql/stop @@ -19,3 +19,4 @@ ../../modules/http/httpd-stop tmp ../../components/sqldb/pgsql-stop tmp +../../components/cache/memcached-stop diff --git a/sca-cpp/trunk/samples/store-sql/store.composite b/sca-cpp/trunk/samples/store-sql/store.composite index 501d465b03..18a77c2802 100644 --- a/sca-cpp/trunk/samples/store-sql/store.composite +++ b/sca-cpp/trunk/samples/store-sql/store.composite @@ -49,7 +49,7 @@ - + @@ -59,9 +59,28 @@ + + + + + + + + + + + + + + + + + localhost:11211 + + - dbname=db + host=localhost port=5432 dbname=db store