From 07b8ecd9b29d752a8bad7db1a20735292073983b Mon Sep 17 00:00:00 2001 From: funman300 Date: Tue, 5 May 2026 18:54:01 +0000 Subject: [PATCH] feat(server): web replay viewer (HTML/CSS + WASM bindings) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wires the WASM module from the previous commit into a minimal web viewer served at /replays/. Two new server routes: - `GET /replays/:id` — returns the same embedded HTML page for any id; the page itself reads the path from window.location in JS and fetches the replay JSON via /api/replays/:id. - `/web/*` — ServeDir for the static assets (replay.css, replay.js, and the wasm-bindgen-generated pkg/). Web layer: - index.html — header, board, controls, status. Module script. - replay.css — midnight-purple palette matching the desktop client, dark felt board, CSS-grid pile layout, tableau fan via per-card inline `top` offset. - replay.js — fetches the replay, instantiates the wasm ReplayPlayer, drives state(), step(). Controls: Restart, Play/Pause toggle, Step. Auto-tick at 600 ms. - pkg/ — generated by wasm-bindgen (committed so deployers don't have to install wasm-bindgen-cli + the wasm32 target). `tower-http = "0.6"` added to solitaire_server with the `fs` feature for ServeDir. To regenerate pkg/ after a solitaire_wasm change: RUSTFLAGS='--cfg getrandom_backend="wasm_js"' \ cargo build -p solitaire_wasm \ --target wasm32-unknown-unknown --release wasm-bindgen --target web \ --out-dir solitaire_server/web/pkg --no-typescript \ target/wasm32-unknown-unknown/release/solitaire_wasm.wasm Co-Authored-By: Claude Opus 4.7 (1M context) --- Cargo.lock | 33 ++ solitaire_server/Cargo.toml | 1 + solitaire_server/src/lib.rs | 15 + solitaire_server/web/index.html | 34 ++ solitaire_server/web/pkg/solitaire_wasm.js | 339 ++++++++++++++++++ .../web/pkg/solitaire_wasm_bg.wasm | Bin 0 -> 222781 bytes solitaire_server/web/replay.css | 197 ++++++++++ solitaire_server/web/replay.js | 203 +++++++++++ 8 files changed, 822 insertions(+) create mode 100644 solitaire_server/web/index.html create mode 100644 solitaire_server/web/pkg/solitaire_wasm.js create mode 100644 solitaire_server/web/pkg/solitaire_wasm_bg.wasm create mode 100644 solitaire_server/web/replay.css create mode 100644 solitaire_server/web/replay.js diff --git a/Cargo.lock b/Cargo.lock index 13e9f32..ba4b2eb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4321,6 +4321,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-range-header" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" + [[package]] name = "httparse" version = "1.10.1" @@ -5280,6 +5286,16 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -7721,6 +7737,7 @@ dependencies = [ "thiserror 2.0.18", "tokio", "tower", + "tower-http", "tower_governor", "tracing", "tracing-subscriber", @@ -8783,14 +8800,24 @@ checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ "bitflags 2.11.1", "bytes", + "futures-core", "futures-util", "http", "http-body", + "http-body-util", + "http-range-header", + "httpdate", "iri-string", + "mime", + "mime_guess", + "percent-encoding", "pin-project-lite", + "tokio", + "tokio-util", "tower", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -9207,6 +9234,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + [[package]] name = "unicode-bidi" version = "0.3.18" diff --git a/solitaire_server/Cargo.toml b/solitaire_server/Cargo.toml index 3f99ceb..a39908a 100644 --- a/solitaire_server/Cargo.toml +++ b/solitaire_server/Cargo.toml @@ -25,6 +25,7 @@ sqlx = { workspace = true } jsonwebtoken = { workspace = true } bcrypt = { workspace = true } tower_governor = { workspace = true } +tower-http = { version = "0.6", features = ["fs"] } tracing = { workspace = true } tracing-subscriber = { workspace = true } dotenvy = { workspace = true } diff --git a/solitaire_server/src/lib.rs b/solitaire_server/src/lib.rs index b789a16..57f0b68 100644 --- a/solitaire_server/src/lib.rs +++ b/solitaire_server/src/lib.rs @@ -15,6 +15,7 @@ pub mod sync; use axum::{ extract::DefaultBodyLimit, middleware as axum_middleware, + response::Html, routing::{delete, get, post}, Router, }; @@ -25,6 +26,7 @@ use tower_governor::{ key_extractor::SmartIpKeyExtractor, GovernorLayer, }; +use tower_http::services::ServeDir; /// Shared application state injected into every Axum handler via [`axum::extract::State`]. /// @@ -104,10 +106,23 @@ fn build_router_inner(state: AppState, rate_limit: bool) -> Router { .route("/api/replays/{id}", get(replays::get_by_id)) .route("/health", get(health)); + // Replay web UI: a single HTML page served at `/replays/:id` plus a + // ServeDir for the static assets (`web/index.html`, `web/replay.css`, + // and the wasm-bindgen-generated `web/pkg/`). The HTML page is the + // same regardless of `:id` — it reads the path from `location` in JS + // and fetches the replay JSON from `/api/replays/:id`. + let web = Router::new() + .route( + "/replays/{id}", + get(|| async { Html(include_str!("../web/index.html")) }), + ) + .nest_service("/web", ServeDir::new("solitaire_server/web")); + Router::new() .merge(protected) .merge(auth_routes) .merge(public) + .merge(web) // Reject request bodies larger than 1 MB. .layer(DefaultBodyLimit::max(1024 * 1024)) .with_state(state) diff --git a/solitaire_server/web/index.html b/solitaire_server/web/index.html new file mode 100644 index 0000000..efbfd51 --- /dev/null +++ b/solitaire_server/web/index.html @@ -0,0 +1,34 @@ + + + + + + Solitaire Quest — Replay + + + +
+

Solitaire Quest — Replay

+
Loading…
+
+ +
+
+ +
+ + + + step 0 / 0 +
+ +
+ Score 0 + Moves 0 + +
+
+ + + + diff --git a/solitaire_server/web/pkg/solitaire_wasm.js b/solitaire_server/web/pkg/solitaire_wasm.js new file mode 100644 index 0000000..7f477ce --- /dev/null +++ b/solitaire_server/web/pkg/solitaire_wasm.js @@ -0,0 +1,339 @@ +/** + * Browser-side replay state machine. Owns a live `GameState` and the + * replay's move list; each `step()` applies the next move. + */ +export class ReplayPlayer { + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + ReplayPlayerFinalization.unregister(this); + return ptr; + } + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_replayplayer_free(ptr, 0); + } + /** + * Returns `true` once every move has been applied. + * @returns {boolean} + */ + is_finished() { + const ret = wasm.replayplayer_is_finished(this.__wbg_ptr); + return ret !== 0; + } + /** + * Construct from a raw replay JSON string. + * @param {string} replay_json + */ + constructor(replay_json) { + const ptr0 = passStringToWasm0(replay_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.replayplayer_new(ptr0, len0); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); + } + this.__wbg_ptr = ret[0]; + ReplayPlayerFinalization.register(this, this.__wbg_ptr, this); + return this; + } + /** + * Snapshot the current `GameState` as a JS object (see `StateSnapshot`). + * @returns {any} + */ + state() { + const ret = wasm.replayplayer_state(this.__wbg_ptr); + return ret; + } + /** + * Apply the next move; returns the post-step snapshot, or `null` + * once the move list is exhausted. + * @returns {any} + */ + step() { + const ret = wasm.replayplayer_step(this.__wbg_ptr); + return ret; + } + /** + * 0-indexed position of the next move to apply. + * @returns {number} + */ + step_idx() { + const ret = wasm.replayplayer_step_idx(this.__wbg_ptr); + return ret >>> 0; + } + /** + * Total number of moves the replay contains. + * @returns {number} + */ + total_steps() { + const ret = wasm.replayplayer_total_steps(this.__wbg_ptr); + return ret >>> 0; + } +} +if (Symbol.dispose) ReplayPlayer.prototype[Symbol.dispose] = ReplayPlayer.prototype.free; +function __wbg_get_imports() { + const import0 = { + __proto__: null, + __wbg_Error_3639a60ed15f87e7: function(arg0, arg1) { + const ret = Error(getStringFromWasm0(arg0, arg1)); + return ret; + }, + __wbg___wbindgen_throw_9c75d47bf9e7731e: function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }, + __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) { + let deferred0_0; + let deferred0_1; + try { + deferred0_0 = arg0; + deferred0_1 = arg1; + console.error(getStringFromWasm0(arg0, arg1)); + } finally { + wasm.__wbindgen_free(deferred0_0, deferred0_1, 1); + } + }, + __wbg_new_227d7c05414eb861: function() { + const ret = new Error(); + return ret; + }, + __wbg_new_2fad8ca02fd00684: function() { + const ret = new Object(); + return ret; + }, + __wbg_new_3baa8d9866155c79: function() { + const ret = new Array(); + return ret; + }, + __wbg_set_6be42768c690e380: function(arg0, arg1, arg2) { + arg0[arg1] = arg2; + }, + __wbg_set_f614f6a0608d1d1d: function(arg0, arg1, arg2) { + arg0[arg1 >>> 0] = arg2; + }, + __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) { + const ret = arg1.stack; + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, + __wbindgen_cast_0000000000000001: function(arg0) { + // Cast intrinsic for `F64 -> Externref`. + const ret = arg0; + return ret; + }, + __wbindgen_cast_0000000000000002: function(arg0, arg1) { + // Cast intrinsic for `Ref(String) -> Externref`. + const ret = getStringFromWasm0(arg0, arg1); + return ret; + }, + __wbindgen_cast_0000000000000003: function(arg0) { + // Cast intrinsic for `U64 -> Externref`. + const ret = BigInt.asUintN(64, arg0); + return ret; + }, + __wbindgen_init_externref_table: function() { + const table = wasm.__wbindgen_externrefs; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + }, + }; + return { + __proto__: null, + "./solitaire_wasm_bg.js": import0, + }; +} + +const ReplayPlayerFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_replayplayer_free(ptr, 1)); + +let cachedDataViewMemory0 = null; +function getDataViewMemory0() { + if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { + cachedDataViewMemory0 = new DataView(wasm.memory.buffer); + } + return cachedDataViewMemory0; +} + +function getStringFromWasm0(ptr, len) { + return decodeText(ptr >>> 0, len); +} + +let cachedUint8ArrayMemory0 = null; +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +function passStringToWasm0(arg, malloc, realloc) { + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = cachedTextEncoder.encodeInto(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +function takeFromExternrefTable0(idx) { + const value = wasm.__wbindgen_externrefs.get(idx); + wasm.__externref_table_dealloc(idx); + return value; +} + +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); +cachedTextDecoder.decode(); +const MAX_SAFARI_DECODE_BYTES = 2146435072; +let numBytesDecoded = 0; +function decodeText(ptr, len) { + numBytesDecoded += len; + if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { + cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + cachedTextDecoder.decode(); + numBytesDecoded = len; + } + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} + +const cachedTextEncoder = new TextEncoder(); + +if (!('encodeInto' in cachedTextEncoder)) { + cachedTextEncoder.encodeInto = function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; + }; +} + +let WASM_VECTOR_LEN = 0; + +let wasmModule, wasmInstance, wasm; +function __wbg_finalize_init(instance, module) { + wasmInstance = instance; + wasm = instance.exports; + wasmModule = module; + cachedDataViewMemory0 = null; + cachedUint8ArrayMemory0 = null; + wasm.__wbindgen_start(); + return wasm; +} + +async function __wbg_load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + } catch (e) { + const validResponse = module.ok && expectedResponseType(module.type); + + if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { throw e; } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + } else { + return instance; + } + } + + function expectedResponseType(type) { + switch (type) { + case 'basic': case 'cors': case 'default': return true; + } + return false; + } +} + +function initSync(module) { + if (wasm !== undefined) return wasm; + + + if (module !== undefined) { + if (Object.getPrototypeOf(module) === Object.prototype) { + ({module} = module) + } else { + console.warn('using deprecated parameters for `initSync()`; pass a single object instead') + } + } + + const imports = __wbg_get_imports(); + if (!(module instanceof WebAssembly.Module)) { + module = new WebAssembly.Module(module); + } + const instance = new WebAssembly.Instance(module, imports); + return __wbg_finalize_init(instance, module); +} + +async function __wbg_init(module_or_path) { + if (wasm !== undefined) return wasm; + + + if (module_or_path !== undefined) { + if (Object.getPrototypeOf(module_or_path) === Object.prototype) { + ({module_or_path} = module_or_path) + } else { + console.warn('using deprecated parameters for the initialization function; pass a single object instead') + } + } + + if (module_or_path === undefined) { + module_or_path = new URL('solitaire_wasm_bg.wasm', import.meta.url); + } + const imports = __wbg_get_imports(); + + if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) { + module_or_path = fetch(module_or_path); + } + + const { instance, module } = await __wbg_load(await module_or_path, imports); + + return __wbg_finalize_init(instance, module); +} + +export { initSync, __wbg_init as default }; diff --git a/solitaire_server/web/pkg/solitaire_wasm_bg.wasm b/solitaire_server/web/pkg/solitaire_wasm_bg.wasm new file mode 100644 index 0000000000000000000000000000000000000000..a03c60d3e76c5ffebf65d29da8850d341ff0a0fb GIT binary patch literal 222781 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 vJi^9e>#693!ymF z$p}zNy>ST7JojjjF6oP8=r3RQfA;o_F!l^xe-81o4Um2#V^d zafTZDo19jl4?^Ss>ZC6SfgdM;K{DX~b8|$XIcWBiHG-umX10Ru2?h~!CE2^h{jS&k z%uQNl&uj)yebP09`=7izGk6LZvzoz%hxS~lggG*YHR+;9_^2~`c#d=m#|IX*O%uPw zTXU(hM=1q~Kb>+?4S}1xng1&m&y;(WHerja0h@g!_3mkkw^&`T0~9g~`oj z8bY_QLoeJl5Cvh`>`vF>0I8}RtD%CJLS!uTrzGxT>djLTfXGmFk*RkkjWSl{ zH6qV@W+{`@*APVIW2=~Y=*CA>S@0DA7m1RhFJ6cn9G^h5=|keDOg?BZeJtm%be(O1 zYDxAj{3=~bYX&Z!0cBcU3en0Z6>gaDQYyKE3rJBwR#iY&i7rMIGGUlW7=2%P**nBC z?Sc=fAZ26mTE+Bu$;WF^D}a7E2lU>NsB$3Ew$;1B9ZAW1%7{AQ6pbM62#KfM|1N)B z0rCx$3#DQZMx3K;lY2NJZhcfnf1@4iQfWtxAE~FOx65e+hm2?g&YB<`n73fj!uiEg zxl-j^*yg}sYiQ2g;d$Eaz|*7(H>Y!bY4)PA;t;<%PUEBOLIfCN$G-^vvo%#e(03u6gia^s$Er2Vpn~;7zQ3) z4O4E~>>~%^YC7bqJKAyMDuoh~hOWoIKtSVH<(pFUVAkP+?{GkexAwxJJ=!k|#}B_c zIH){_n_n)zdXx2J7h=Tn6gtnOvHLBXVif z5h7ojc+Io2WUZc_O%i8gqgqebQ?61^&*6er80Au`ryIBw>*+>{RVh}er{|J9Kr*hU z=V`BLwOxiMHjaA~fd$y%E!kRQ1QH ze!vZkUHB7YwXvY}r)+S>4^~i*dh%tZE{Q#Ofsr> zs)DgJq%VpF>l2K1=JuuS3F^9q=#z7SCNvcE}{z00UhrF7; z^!Y~v&5&$TS2c$U4sLIiYj9!|JnKSMyqz1xGR_oS{=VMCUY{T5vsl72n?dSE@zM)&YG~krlfo^K;rJmZGGt_==Z|$Sq z+RvF@`@rZ4y@j(^i0ue#Nssy{ETUrLjJh zdA8&tCY3Vl&!D?;8f|GV_3F><)=7MZXA=syJN=~t;{&Z=dEdW~-AZ1i{#|fsQ)f2n zD2Sdc_Lwm~K`jt}t4I(iH6ie@yA9(L9^+^!<1SRHNk(MaoXR3OSET&*k0YgLk|9X> zO&-rp1KmkA-j(O%BqAVM>fprBvY<8#n*h!|kUV1!mae79y4dmDfhIOsd2H-)PuN)P z0a3F@rZ&4OrrCipYxe4yxpUyC=gU`a`;6&rzp2~yvF~f!baHCHIo2mf_wny*+jMej z+owq;p3SY5Og@nL8zc!kQ#hJ6hgDuIB&uxL76*XoOfeXbLGdF-apT4NXe5^vTkkgl z9|;>Y)-NLTyp%paz4e<_`yST9r?hT+?_O)`r%rAC^jsf=!hdUdx0lVlca2l}%eM(7@ zScwKP(qS)t4dUA4A*py7p~+HIAkuop}lO zGS-<(1@9Rn2yUNE_-@hpz8%bRnqz^f^huy*2E;T@1~C9o;sY= zrE1}5On!HDXrp?&UKspLIYm4qfF^3H<6U~fIOJ8fEMYEAN(-;d#ydQqyQjfJe{Nv?^A>IoW}vri^KzLC*q<(R{$CC^nU-ajagxyHmuz zE5uz`|C5zb^*|`^Am1(uyJ2+H|4$+K0mni5#EF0Hjm5w>R7b|rTX(hNl=!~;KQ)$c z@@XD1#QjWl?{k}(4iZ6Wt=~#r(j9D9B*=E z*tA0D$%a1sQEe5TajV)ZdBp)dWwUHt_w>c|P)V(@(>Lo=qId_U67+)LEg;jh0)kmg zXfu+S*&Q@MaVa7}&p^5P+9^sHDeqEeE3t4V!zwVS7z2p)lm{SE=pN1<;I0$c87k?s zT;I_a^+NHStPU(;i9oYezh|2uJy-tdE)364jY;1Tv*iUd-Yxdkpnwl1R*j)@5C!Wk zh4wHBVvPsEaKVny@YF;Zi^ylzVG$szB<2$-3s?y%M`dcp%*z6y+5thV<=ZBu zurNT_!O&u@(*q)Xr~$N!nP4rM*?>Tp;HSpgv0&4U_#00rFvNTD9_>;QqKB${1YA$+A#sCuQQ2QWs*a13Z3hio!rNf+~=D1vM8_F``#Yq{Q{Pn3D2hO6Q_<5+4>Ixv2Fqal3k|y8VC~Qb1B#_EHMx zbrjNzSRQ_GWmVN{B(gdx2|d`AQ;lfqlT=cdNRm^jB)x3Psw<}q8vSxg2@^>W=V{^p z3R3A*_{XAKb$`s?%f?m|V*2E#zR2VBvy-GJCnt8bo(<_ZK8->qyn#kD?i(CW5U7Sn z(74>QQU?%(ix@N?6J;$c0JX1^0Nqa7eb^jHdluBfTBEd7w>AMYvikfk57{KtFBJYwm`EdR-#GLKpM3Cn+~r_2+U{<7si-Baev zmi~(6KigC0D?RzoSo#?&^L$VGIZHoh`7idQU$FEGmOuG(!ii76Wce>y{$b1a=|h%2 z^mD@1T|MbLEq$lu-_w)6+tPPi{*j*ay_UY$^6$6weU?7flYgJ3AF%v~d&)du>4z-; zcu$#!Ed7Y(Ki*U35lcU2`A_zgdCbyJSpHKzWuCC~mo5M4o-$vy^j9qZ*`6|AvGg;R z|9nrGXDt1k<-gcd<~d8hVEL0`(bSiD!SY|S{KJ;-%e-Xyhmb~aZu!2G5ctyf`Vv@qsPU_jVI4W0Fvz1C&_KCu zhP;iZBiM+%I5|1VBF1A_LFfVoUX8}+BqGNcH+K16UdybwWbdS9PrDrq15FlDlJclX_6 z8zLDYGM!wFG-R4xYiS_h70NHggcpiZAf_E{7XZ_YN-|_w-6(S@%V^ra%bWP*?tt*# z=rqfZ0h$;6P=)+x_(^5_yT!evA-V9@+Vi?o#mrqAx)?xvV+E@?D zhW=RiD)r$DTY&;S_@e3zUvUqB=+~Z4bl6)p5$CXD7^A9MVjrqE0ilQhD zNG>xIoWhk}tmr)~pt*(durS{3Kt9`o&tQC_JwO*I%2xHPu1Y$H*L7-%> zlQOOrUm0%9s>-H9z+@9i2uaOgH&+>YOJ(f2uPL8|n$HDJHG=naBhypN;PUQRkE0!e zTXHCeq$wy`(>A9MoFA~VT`nQdTs;X#lB4slR1 z;WN{$7Rz~C9$!P?LtUHh8tDQ)zzmx<_M|^MIa$E}L;RoSK=^*Ve?hSu7KVTpx)Lg? zzSaqa{5=U7WxVT8q4lc-z-R=Rywwil>oqW6K8>IDFEs(+`faXZUI}oN(r+@lJaXUh zpmjQ%F%K!m248rnh>L}aS!|paEF|z62j0a^4u&YrR*M87wFOlKsFa=Y4qRxm-=)&#UN0r!}qEbXt2$2OwxVQ*-oM6HWid$)Ky# zj99R-`b436z3Sn{>BL&#ybo%gDp41Y8BXH|SP$CAC4b~G$3%n1KOYGkQCm7v7J zjP!$3NssHWWH@`O%fgf&#zW1eCEI7v7A*PzdctBnw%Q&zid~rurMF3lM4=Y!PJ~}3 zR5U;2)5cEXi8<^x;`eREs^qlUK+R00LF z5}3*=6_MDNG#A^ma_e&hPpF@v_YIcVJ&%)@RFZ7t4cvSSEb5+%ge+3mYrJG6AQ(SVqpYxr1GzM6}W| zeGVi2n7F*|yR?8@QAGr_haCbQ7Z0_5$|UR}1ck~s$=&G*NDybnCX77B+(OnTRC6(} zIqz~l+?89`tCp?yS#1(mGK|`*64z#rMi3Gtp+gPxA`Tyw_y_4cFTD94ME&!*)8$K-_mW}-x6n>(ZQY)Z=5|f#-+jR zUArarIP1LK+7hu17^&$QG24~EqbXQvsuH8-O!=hjgy>gr-F~Hosn4h@e=nZ;i~#8T zSv2(-5z+axaOyL{q@NHD20V*&hHVxp{YzLdq+wF~{Lk=CB=5zjQz4dArjNBPf<3FP z&!9j0i93AMMuRz2F>LglW9u)jPR1PQig%d(_i0wOWwBJr{+oiE)A}!=Ru37x%vwuF z#)*yZwbn+&m#h1&wc>QB_O|)7Ot(v{nBzfJ4lqdXF(c`PL0QbBRmcqp25^9r?Yv+W z7a|=;xbRttm0U0@9haIvI%SSOH-&F54U;){L#!zwJNOG)GsuX5p3iJQVLR^`pHb@X z8HNi^hQ6K&2(|&U+NQ1Nj5i9TVm1Q7^Mb$ypHHe|9F?Je z<%6h<&{fAS06*@o5^(^f>)j)3#$@3C^c3W`5&r zaDp1OG4+Ihl|zhT^`l84z5O$Dcc!=9_36JNypV-Wil`=fd@J8NI)DWYHly@uf`0YE zlV5xiRVJgo{NNo4MbpQ%F@5+WY#0iejPGCxZdH8z=}k$~BHelONo_cy;QxhT)_I(V z!I#GNx2b+r{1ii;u1|A7YzN56$piX4T9h7F9d2OjgDUbYMF^f4`}yDc`V*h#wfBf#9M}Pev{`t;d zJdk%>I$uxz^b?=>@~=Mi?7`>wpcKLXbcf-*Hr6^c%X@Cd*F3?Y4;UCp3}{?NmIwa#!a9*wRv^^$o>=a*Ug-OE ztaA}TGm$i1)q}Bcg1qWjbQr`yCI+^NvG9&$;Jr+yLRb)9YO;r*8_v=6Ko7hVmJ9qQ zyy{rt;Fa3=RFk;rq=D+#OI{F8oCprO`gR@Hv=OqZf0E^KfM{P)k_`<(B$pd9HEW?wR2*0Kf zdzTm;CN!?UC!C;-sT6Ky6uv)uVgCwhYB8$Tl+~2nLLS+9#9Ms@tNejI3S(m>4~wUSg7(6{#3^%4!WkuDDB)bhQRAY z{^S?`{LIM&y+m{*$r~}rwZmB|4L?AU5;?u!li-&W-O5&S=Z*(qx!?c$-&wzZY~=9R z^Pf9$VsJm8k@@YB{bO^{l1TjXg9pd%JrQRQ{x;Y@Ry#cQGn0=@K7ZTs^1-ox4znj4 zr9CFU6CWHKxr5XB;GvgzywGwdCtswN${mOFpmJF1feg|Mm8P8X0YR^m+IaZTp+i7% z?CImT9lYbtd)7{D2ng;-2Z@AmA$$tW2@tcM@86eHb#@6~&YRYiDrldvEB0WY0J&lkcR;6R2^RhZZIEi zPg)!ShhjSMFW>&wH^2IY6Zap?iKos7)}(Yl0MEsl6Pe zmoT+E3CMt%=^?f_fbprm957qR`2J$jz8o)1+PC8Y_oOk2jW7+9Fe%*CWiRUWpN#k6 zESY4Op3=INJ`m3o*E2pkBAw$IAKka3?YWbr!Y=F>s|MBGY!QG$RlG-0%@wY2NXpmY zM2G^nJN)RU^`}aD*XJJX9%B%DW`t#A%vXhNHV#MP0fDkO14YE(Qx<))$6Y3SPk$EK z%jE5;&vxbQNu@J+dtB*2D;+?=@}n;4GoJ;N+qB_0NSPC97L*A#cUk4fB-oh%-`^v^ zN4x;Dq!FfzJ(4&DZ53e?0~_MNuj;FZyR4oQs%OL_@mngNA@rL{X9)dUr89(nRp|_&f3CET z12XF2%feryS$BBJl6Dq8-C;L{ta?{BjYDOacae3Pu>r#-Y`xF(EHja)^;WT*!om>l z)_)GOJni>3m13p@)phhsLH3D-DBF8BrYcZ%9L~3$3se?qjmS(L(f_S%sLkN;ylS(Bkq!1n`BmwserDjz@dVeZ&(cY zIi8n_y$Y{~nGKw(gxOGHqB7lVU_pXa5)1OI#G61L3vFf^Fd4f&X~;Ba%xW4m%rro; zF_H3y0iUBSW`;r48wT=^Q4Le@gGnPZ1av^a6hpv#Ia;h{0Kmso1YWZPUZf}K{PgkP zq(i?V)miNhUy(?!2p1hYU_%m2e*i|I-+F*wRPgWt36OoGL)$;6LlR7E88XvR=9lf>@2(D$(^Gqa}|Ha@hDf;rI^ax%ijC;M; zYfv?M?r;TYX5M{#yN<>azPzuygV`PFQa~-HJ8iJFIY7~mylC)@m$4bZGC+B)X*QP} zq)T_Er&z#IX*^}cp2%hv(%eaLkx#k9X6uHKRn3ERt zeA9+_a|i1lt9Hsj*!o>Vxn{&7iGn!fy_eV;7c#a$5XE?u=o3ul%22}N-`qAEVn-(P zZ<=7KL#d4$Vg;0vS}PBwrA8QA#s6DrDE55*R$?K;UNt0| zVhJZJi^#;vUnbHk+()q*tctCquLLx(JKA#u&!oiUEG3*+j#M5{iRCTy_=*VFZSAC` zI6Wd>1t_5z6*$tSTAaT!&6QZ|382>*vTE%jC@#uufDP>5aas00ImrSLYM0sQQMp1r zytYY`9oPWfdIr^D{APV&E-j!4L}33KD|=G40O}e#%e2hkNmcIfTSIlXYP8Xmmf((p zc!m0H^FvK|^4d{|?C4J;aHfe(ZFa^H>!vy!Sx=#Ru3cd+NnJU8{I@_#es-03!6rBb zkE~a#sS5EXfc;);Dp_E!Mpwxhkbu*vy6UN1R{>+Dt-MN+V7wMxh2-^UE7VDXK#qtB z@k?%q*ZNe;3n_UEz0{I&h%3t9I1#CC9fe)~HxqUn<@$w6Qj7SbNID|h5)SOnZy3oX zSEF%{uog05ZSCw)9-4T}E~ho*gMrn=RiY{%%1KD8TtTK?rb;WBT`^@>sf2?qkgp`B zMTu$g)ru)P7}mL5qaY)rD`72N?nPJn#pWMKXxAX@2(n>hb&nvMiE>Bwk{mIt3b3T} zP%Eq*U_ob6J}p@&F3^IoY_Pz{qa3*|n7%1CN}=vNAvOxLTH^$kszy-8gm?!ujby&-@REyqO)A@ChI2^jz3`fOr#xR5Dz^rUBXkToBnS6S*P|#_wh;f3`)9a14}zDNU;|39`V?0I=|l zr?Ge~6t9UtSg-A;&{|Pwy{8avqRGkQK{}Ft<;Zb=+-n9r5%BDq>umsy--#@>SDx#< zk|PCQJAGmC9`W#~&ylVu*=oAzGP)VMY8EBiB$+Of;p-9A!~RuI_I`p(=r|!Tkcmw@ z8ZtnR#)`9oAddNe>c1JXvLc0k5_satsSW--;@nikIU#PPN1PSJKoN!saO}r04j$}b zU(g8Jp|n^gOo#k?OpE*9vstW#UPQT0&=A$(tv>Kr@a}&bR}#|UTg49~ZPej{DMbSn zwOC^vMFDRy70Y-F@G^D5q)`KVpLCDtMGJdTr7XQ8(0lc{jClJUDuIxkAflKg^W zPjskF4q8mpsTCabri}x3k126LnJ^v8bb-B{4Z2C~cv83XsZdCGPi>n;R=_;1D$wW@ z81w}YO7C$k?@CL1@XBAf%b$g>yL#VU)$X)M9W~(Bs^Ig<5ccKVM}MM#GFr;mZyD*n zlw-A!#R5k$XqPz5jZ=(ioDf9hLDv1e=a)8Z<8@!peZPyo-|Dqa%-x@#<)9Dhs4fEv z3t7Cu<{LH>n43`Pf;6evnNlGAa?Cd_n^~XYauGaYlu(!riS_z4IKD zyL}~nxnb+w)&X_GI>P&SgeCZ-I9$NI7;Qfb6wPUZ#XC`%wNFvmHbQl%tiVRAho`DU zCu{(E1j?ij@-dUInmfX2af#z2%*xwwCpZkzlhVlO^&CMOU=aek5vPy9s{Y(kb6gj) z6)bHn1&6FdatunU)fKBCsjUivu_J%@`M>$I-}raG>nvnqo*Ezu*xu{Z#qYwc8b&bR>Z|)m4O|Qk4xQYlRIV0ola?uStR!-S%|Sr zrfQkISj}Y!t|oa%H9L~pKvWKRQUIBJEJr7fGE!z4`Z$an^BM);d8`GEr*JxFi_@h7ZrFb`L4I_RdR4-|1Ln2=%E6+RAEL99Sh$@Ap98qX~P?IBy#WO>)M1?nnEXj6R&LaFQ z##ZGXgdy6!2;1h=pi^=bl?_F>PlY1h#Hi3H zz|Jobhtoe?h2zFDk-&kOKG#DCN(pf)0e5kM=p>F2nvKme{PRR93duEVW+VrG$&eWWRUBJZf>&_Mb?Cr3^~ z>QC>=bDn5M1Dz9TEC5n_TX5U6x5aDGrSyn94kOS7$Gn%c{=a&(5H)Bjv8;Zv=A*+k zP*L;~b5f#WTAN!SCFJ7m#x!M7z~9CqIYWgmmc@bN;^8!ShhbLFT=9XiXM+8N2q2WM zr4Y&$ACb-I-w8GgqdGXGu$culZyT6nX0zy>hPQ})(`SMkIkRTB2NwbnB!d2D^)=YJ zlG?0*Q!}UBe`1Y zMV6kgW&Ac&p&UUKv@~=Tg{}$??*cfFJ=%C~Xd_BnHhhk@qR{4Vg|?zc8|z|}@MvSD z+oMg-Tx|;48XdIh9ngl4ew@I!Mi*^G5E2M&zFX@;o`k{oTaI2H8@gkCwlwe z>>E!%xlb9ml=o1kxo0oqz$iA90d zFR%y)my`Nnp7;+T77FB`iOZ>_!S*<%Ib$VVp|n*G^?Cu)Y?}5NNN8Ueww5`(KW{lH z@8|5K{Kd)}ZR;Rtg53v57ZencxR#`uN3>4|t3VTc@^tW#Uc>|-F!nt`_L z$(BM7khqb%JM?*g!CiYX+0ykiza=T^P%J)I1zimnMgH>9D(P1WH>Egx9uRs{l&o!D zvL<-(chamLE&lXBU~>lWjHl(B6&enh4fVO1*7od9Yaanfv7J<34M@c?#Y+$h#xg3G zd|m3zL%14&)EUV+Gf-TXu43kSn|iQ@Gu}f|nU2bADRR~JS|rA-Oh|HVhf}rz%Z0n# zU|QI_+t(|Doajt2CtI)V29#}thQ1}6xXah+xzz_g&?73TtHTRoro#DCEGuQ6H|Qp$H)c%Lxw z@-1K>_O$?``WAeGp2`4sjMjNinR752nO?uvuHCkY7*YSXu{Goqp;l135&}Y~m+DZ_ zQjGm|+EP1jZt~<{#RcYtYYXXr$JrF=4OM&*3c9c+c=(Gc@i=?o!8E>+G2JlCn8zq+ zqX60sdI^8DqAJpRkls8phJ|%Qc~%Hy`vvOz2cm{wpms=PdQIv>Wn3*F>k|-UN5fSlqPrmP|?Xw5C zVV$XbBi;HS0))>@!X_Vog_GrooJ%!5qDRq#V@vlF2rtVrazjUH{8nidV6b&jO2`1` ze*zs88&pkS)K&z_5DUUxMHWN@;%I3e1mP@dJ%TpTKy8;6vo6f)qMzJ9W_e5fqlG+z z1F!(GF+q^6v1#9ttJwE5%#+nnU-k+m5vJY}L|AK@5HM&rMH8*@F)8;IH+;nvD)uT9 zvwMcc=^;o94TubEW^<*Xe34q+<(Xf>nz}yCE`Uz>pRG^#X58MkZF9t#p&pu8H$#5m zU*33Iqh{5=b=A>ia2HW?n&))uI+)C{_R~tc6>q|hCSrj<0;L6!LD7uw5MzLWKcpq` zxuCD==J*x~%Ci?VHL-!SI;A64tj)V~-O$1IkeV1rTP@m~49d&OEo&;&p$+V=leKN< zI9*7zmR?D-o61PAP_Z1C3#)>bqHru#Q4Efy0wQo2l~M5n1}(#c3{3o077l`PE-C83 zFPLVwnT;)-rFj+>{L*|#!%@C84?pJ|W4s_~^{zb300yZvxKw^Jg^t0cgm`N0Umu-~ zeY9r;p5<4DuZ0~%fB=T_;cndMK@fZ5J6YssaENbvt0EJGlYc?#0B)+|JxJ>G-?rOo zHe*VF<@=Ls*sK(~WfNs46)-#uq}V0~D3coTE7evkSQ=DR>0TAhfapuItij3}_+iq_ zJsI;*kRcSjfmDT1KwAx@yok}urYTsp3EQa+zDE5#kJ1p!UR385RJ>m`8^eodhK2LPdqS|IfI0irdvQ%rX2Pmbg@_by zez9PBCdJMVnTaarZi}&Fa>$Z5)`?csEjk71wTZV^Vv$bNsi^KV`TR?#85TG0X7F7T z44R-*-AdUQc+KVWs#q8dcMhxG$G^0?|KOSM*Cwl&xkLZH~3mxaya1lS@Lepi}7 zVZnI>_GFP}gsrL51-vOTZCtra5VrDrf@tm{RiVQZXnSJru4=2*T%t zBAF8^)`%z-Sp_c&PrzjZzDA>s5YFP^gg)EE!oVZPjDn1#EgFvS_DD+c3g~y)l6IWw zYNq}8Fkb;??SKW0%b6i@xkxZKbC@?XehX&0lf!I1^UTG>STJLprEv!Hpuv3k3^3dI zSb{k=mp9Ff zpDfJ9KA1HbpUNABoHvRFGgE@^9_GWL2igzwwH#{H=Si|hsSoVKOtiYpTok}rKZNU& z!OiSnaGQ?24;JnyNxl+7raru)0YTh}z0on&Vh-rAgWX+`2^nXk%Jhi%Pb;{t>;{>M z$+uKtcq{MFyr`+EjTQ~W$k?E+NywsC9D|JFOw|>A)Ux(b(^F#wJ>XOz<;~1#B)ZpZ zA&v@W@0FaJc|)ug@4(kF;3|9zj(q_bSFPWsGxi;A4&Kn0oAJVpyOxed)0{~2G5cyp zEGoyDAK6?BzUvlIZ9^ah(mQQand4oKZ$im~DblN=`xuSTsg}N%v_?PeQC%4jup&kL zlwt*M!`phO6&1a^^cdU93ak?rTBo5^!q#?*@e21#NMTypZQdkv-jV1D#$kv;dR6pT zv>`r{r5_=E51!66SQ9+|$uS#u(x*T9#ej+bli_0gp=rS0>`#s*>@LP2CPnSaV#7zw zha>IgS=~I9-+XdxL;Nf^u1a~!JTJIgT`?HbCyDGRq<4eMLV8a)-qNR)fbdv|drE`t ztr~f3@qpZiG|TM7U*ax3FL+*6V=g|=;Qk2R&_Mk#*A5dNQ>L%qxAnZWNb7l9cgHie zbq_9{-nOFi!xyu*UOefxUVLqBee88@44dWk>sje_Z0uo40TR&ReKE&lSqPoD?BNcV zq2jT;ifPFodRs^*W5ix22_mu(dk>vM%H$osQ#J4%OC^(HW$eWJb*1_TbnRug`;E1! z?p3gxmw_kxpkr|-Eqdq-l+_)eR!RwBqxAxXNo0B_0}Oyq3NW@?=Q3w8+TaK|=)^2* z#!c4KA$}?=D6|nRB$MBO+SCDRqYjG1E)#Y#z_3*Num!*;1=I|RpiekGP%rdhi*<_* zP+L1dUG6c(^kYWy=>)y+9r+Hk(ALFL5%OgxDjTM5=m2%C2MS)A5h#HD9s+f5A5bNL zVy&`+srylE8K)m130F;HalrhZfMZI&1B^^xLklBN4#7jSK)~eikk7b@u@vzRu9<{y@@Tuhecu!t2cZww;QqdF7jC;);Xev!iPLLjC8A3A zxWaBmb2LuNR5Q_{e;$>OaqbRv)h*8C+5!gAHZhCC(oS*~vQdJl6??EIDB$%g=WpU9z^|3Q&8uy+ zjkfOPVR~0^*Xa`zZ-wXJ4C{7OBarlB_Z5HI_%uB9DOfQX`pBGs09wqn8Q5TxiTCId z>PkvFSp#NmCrcD;!L*^}Ej!WWNC)@(0eu7UyJXek@A#F z$iB7#P>W7ZENN6+?WY1_rpP;9ON<;w8R_%x`ZQ$FUKC>$k1oTmToxi>$nRL^i(*(I z<_8hY@ravGg@Ofrs~nDLeKdzB|5~|t-b1)C!MSVkek|}ZRA(RU_D8e$k9OmJG9&e}?+Ef42fW$c+?E1&rhnk!>Z4pL45aUM$*vq^8Au*=Q7 zW=MkcJ~ppIdOmJ58+x$ghdp|TEo3bS^z@N@CFn7d3q3>-8N)*ncM|A{gr4aL$~b1L zh-kQJeaVjhLD|~Zhzg2PFff3~_V^G?C@xrnI-hP|+0#fZ2HXW~Ra;sKwOp^#Ydu-suR z6&o*-v~6-MWC^53PcJtog#FP?Lxc6_@*Mgc4cf`*(Ewfrv7r=b-!cQVyabSU8N7j# zS~{{=8v~C!1Me<>P-iwCbrh;>=1g`3Xkiw~2{L7FKx;@?*5!g?FSM%UYIGHsOu#*S zN4oIIlbylGWQ;q5?}*SR&OlGKZtrpgxMF72gRQLuS>2A7g-$dAu|W?A!%rSqY!Mfz zl6_cl%J4B&H%(DiQ+0!e5w@8z9sD=VsB&PAPX5y75k^OKf2RMm(>Y*QeLxV4(iNRX zsQvV$TRP|Pomd$It}(%4!oXIn3YM<7Vy47t>+M8q4f+`=lT!Cy>=n$HGsA@m3!0!n zMfW9~j&xa?N+K8ZEV z>8(c@3wAt8mv*Mdj&g$BAGJQrF{4isU0S2(C=PZ`>`8$9@$V4II3_p#z#aZz#e!mz zl-0`a?S{YwPF)-eu~m?wGs7pplaABIgGu8K;&2p9BTjCOUHB7iHW4Zm;lji1c}i8< z^Yy}?ekX0iwwn3Udv=w#7r;LxMiSHod&_wtSu~L>*5QwwTzU8?gYjK|WCwAS)8mKU zx<#i?V<_oxLyZ7z+tA(Je4gE+C2_Cu#AitN6**~|Q;4-fJNe-MUC7E%k=^daklYexzCcL+t|wA4Y^m;wj~uqKVG<)z_fUoy|l(V-uMbav@J_K7$K>tRZf*q6+G zFB_^U@m_Xjux^!Ah)KSM-f+1Q6(whHJ$+1+`IwL3$J)VCEx9>v?!NX?B&e|u%&C1h zXJ30s4321EjugaPSq*bJZPzWO&oToQJ#V|o{GJF!n=IiuILY7yCPH9U6CgqzJs`^2 zqS*{)S2QFJXsA}F&`;q+dl_A9BA|&nqb9dX7t5l(DMqz51NYp4WQU1N? zL-ZO|skMFdq6vizDBI-(r^M-(g;L`~S=`Tb?gj}zr|o5~2^Ae<6E{r{^D+U#19f8A zKF%c04QJpHV}b!rDrV&$rkI!@5V+^LBi7*ju);-TW@;u&w9y_^Tf=TpZI!L9L6NTE zhE)*{)YfocTaj;TXl!`D8`O9X=4tTi{e3NJ^3!RN=5)(w318Y!$dL4p&9JFc5RUf_ zNE-i#2{h-zClcid4CR5fu-rzQ!J0@=3aYUy&d;2e!cG9Z~D*tcK`Yl5}1 z>I`JIaj@!BmEe-UPWhNwnkdnqk=AOexAL}mkF4JEx|2ti?6n{gAi$*Uge$Vu8~LpH z)BSyQC)+$m)5$k4zO&}-y8?Oh^=_vOguKdE0KxawZ~$&B+E_TaR4oh>7R*K8CqT3C z83m_4;xq(#X_OxN_s6^6AhEt<>KmuX7B2U4inoM~Q=|a;shQJK9^qG_C0{DZ_(&8o zt;ivLfJ4}W6p#Mv5S0#T;>WHB93ogHtUTmj9x-&|CdcOF!y^>a)*dcvS%kwSWA^1n zzpFQIF~8#HF-Ee(UD>7`a;|>Xu+IvbQOGXD+L-~LR{Sf!XGd)6*0T zIFJ|RSU!qAp`wvKV^G5?nH>y3Y^r0Cz4b?W%f62xf`cRuS*gjy6q^=XNEzsd|A7c& z?aW}EGR{t0EIUw0=o}QGv-h-M+56sr-UG*d@7Zi_J!j(U)M2P-@3M(TvtV0yG_$nm zS#u@KNHZ?mj0}gWApJ!#ixqiCaqL!62X_jY&d^BY4g{yeyRe9brmVw!;=*395^|XK;Jzc zPWErBCu%pGDr_8Gq5NQKzQK|SA=BH5Dn450};mj2W|0#IZ4qDXawf~R3_kq^CD(`%Mf8KxR zyywpwh>A@*{LVYfZPF5nGYC{!HTx`wg6OTbPM7ztS=DyDYi6Cptt7-q+YkxdQ0-9zoJ$(0Yk@!H)I5JkFR5K3i?9Y2R4p+wKw%6lruPooM{UKlHP_PB_!XqK2Wz znNTFTR>exD;R>BA8y>~fT8aUs(ce3rr- z%kr4e%1e2f0liMROydGUcMQ8rKpM~^*kbVNoWdjQg*zpK{_PDvSQ7>T_F1&~f+5zF zZn)>$D4^)XI+1L2MmpHZ3W6X<|C9Db_8xRQvelwFRtRLK{Jgv&VHiU#$MtMIRPF)x z2~0&b7OB+G6m-4!-M+nUR-#=AtSFTeI4sOpFhK2aG&wL|Ts2h4^xB03yQK{!+?~5A zyW7mw$tuBb%bsiqf3|dxNrHpJ#rG!3+9%XXFSc^U6_4EtoNc2o^vwHWz4dnJpOq;4 zcJqq93GVAD#bPQlY0(s2pbJq$yAleqwTwdNPz;L`|}H zt*9yw6V?>V(tMS=;#$#0Q7nnRO3FNeuaXSBUH4VW<(||*98j^2ZYb-%N*ya@zDlx* z%2#Qml=~`iESbu=1 z<<3jkZdk-xx>>=pt`;c|k7Mb^wOvdF!Sdc}*x7jjiPRCCx#Wge9 z>r88ub?Ba^m7jRdNZrxrm@~hes8}L2s>=V8r?uRZN0(1)YjB0su|B&fetdSvEUeYB zM%niA{k~^9?Mg9+gp${Wq9T!X4Sc8AHd$W{{@7m$zz~Lnn2I)FlC@N7(n>IGO7MIw zix1qajmEOZbsCJ^%a}Vc5oCVAi2^JNS zoR~V=s66*X+(f9YQFtZ7c_yuGE>CFI!JO5s| zyT>!-64K*@qiNEFLk1v7aRQJ2FC*)zIf@Z@0~ygOC;yl&ZRrYd?I#E6$5MNvd}ov( zaz&AQ-$G-HI0T?r736GLO1HUugs1C{a7KJUO{)vLqkYmvDM1%T*O2rr&?Q@Epg@tB zx;IJH8~M64djlS@-Vi(qK8*EAe8)7Y2V1ty5d**ul(Hu*VWajUlZrg6da#Ww7)wi> zn04Y`9cr1Jv?Cnxfk!n-4GB<#`cXa*;pv2_`auPnmOukDmq=YVW*^B(v`B?|8gS`U zaOo_A3(TFtMT;-al9uzxETO?U#w;a)r7(B_9YW3Sn?aM8hbJxH;_~NQ(Y525vSAXt zhJtgnYr>YRE+B)FX|J^HSLqZ0(1K{dUcBhiz2Gsx|6;8R0x?twe`%p`Jn=Ysty@hM zqZbH;sLGjsp*Jt$^qopv1Tal@dku*wa-d;|hqz3cK&ZLh|aA6$^eEx%cg< zX;<)fk@UaR&-#cTe61z&BK`NdbP=WkZ+J0{XYzv(Ag6dd8fW;qg6OCze~G0_ZuCUQ z1x4>5HSkwLf+!E$=R8x%qLjqqkjzzu@)AM!k=G1^Qk-~R;b}39jagA1r4m6b&#Dw%0xusf-{_2M*&3>POX#fX3}(sV0aGaQq;%lGT@Kb*Z<-U^jovbPLu8 z?k1IS(g`bE&FF|VwGhivP*W@*O30gJis*YWy~s#V78KJKC(0t@pxgqY&2Q|aaxyZT zT9=wt39+ord`rOzDw@X`Ek6v4%4$J^)l1^cDhdb1f!tD50C7|Qm8;U$sBuEJM#ZP0 zZ;<;JZO~19MPDP6D2n+^x)2uMRMA`Xj=(&Xi*|~No%58T3tb)$+v_xXSQ+v&3ntb~ zqw}61BzB(cA>%p^&7<=(W#=I^$Ljor$LRcwIVy{==L>0(P1z#j{3lyv7`#_oWc496f_#C| z(6IOFs8L$g4F!0}Pqdb-?YMM34=4RZYj{TSs~lxL;D;kIK%Vjl6!MfeK`R^UF9GL4dM-xTqkc{?3TcQ(mUT_zm z-SRE_4pR5D46b}vp>t7n`U|Nf}@0YWEuDx!uHRKX-!TC8bI|61##ZC>( zLLuZSpMRQwMo0ln(suac24wNVM=w&s%CnW8C^?7TBM2Od{pSt!H~%t>^jszWJnGMQ`V@w`@hn7q+J3yJ}63c~`CK74Ldl z*RsZ0LaSIg8SZ%vUWD1;%%AYbMSOg} z9_Q8LgGqdTM9EMUOn8qb1n-Hkj`N)XDzgt$sB&u9d_gxWgb1s z32rGocmV8${N9!?h!NKMdn<-&GmUq`P4&}#JViT0??KbxORlF_L)hL{Z}gpY^#gUI zxA4@Y-cGP6_7iOMeRZSntsA|Sr^J7#|HQDKa8Ex{H~Qha(c5`S;Ds8!?Qt~viMr8` z*Nxu6QJ0C}*U#J`XeBJ2XJni`K?|K}Kex+{o%XOpo z@YIC7PWa2m(dakoM!#M+dOuHl-qU*@N2A}a8~s+@=z}~p*Nski;Bhqi4|St|UpM*? zPwmK=PB`*78vVz*(MRh>AK|H)0m=LOI2yf*gU93E-=ovj9FV(tI^~yWc2?{t5Ukh) zF!uuq<|kR7zzsxu2pMs;F(c_2zaVy{nL)d<&l7sTXTmkaI=~7QFAG>3IsMIk!<~?7vV>*bb z*)g*Qz8U*Y*|81kn4K@u_S3G86Jqz7uICsX8v`+edId8-KZ?WMN{}ivR3LSTFYoy| z%RzdMdT!?)wWp*8*ESUF1@ROu)R*DU%=cFQgt_+9__qkLxiHxHw+QfgSVEOF{xypX zy1d$3lgCO2&^(}GmdrBvl_KAWkeELo_d|cG{(iOUuhfg~;i=W?uE2POQyXp+=T64` zU(guy^OAr~lSXuX(OKE0T;bWgomScO<9m#nuo>2CEHa{>3ghEy2i#PP1LY<|hQHXA!!FFOR|+)j-dO-Vk7ojR$VdtU7~~%S8}onZ1_uOGs02I| zUDZc1CjVX3jHKVXYNU1Ardx@83beFf@!M*eCtjuFM+1jxX)#rh<&g&EnbOctY}5wQ zAM(hhx@9cO#y)Q37Pn?Y0#=P-W~;+PBPZ$AKhu%3@qefzCj-|Bj2wFZqgd$yd+YJ8 zb&Fc8XV)`z*Q>p;2R*m%h1C?0h+%tNs) zd>^8i`nnJDg0gHfWg3JMqbs)G{fIH!ab>#^Y#H?T-YT(-QGf(=qwF>8Lu)oa=tmCl zNlU0B`hk;*%ovt#hi?3pxhVDIp3+su96E^6r;%3&^(KXn=x{92;+R;cQOuoHdJSil zsDhA>jJvX{Gu|P~x09uEKZyBtgj+OL_1&V}@$4p-J~P1yVUVp%n-(t}PnXb4n^R@g zvGSA^)XhN811YHOIhS?iv`AHizg5m1DzzEfXdkF+E-lt+T!k;B1V2od%^+ztJnI3o zsptH?w#+4=Z->huAE8xcgkTiPnP8r7xu}Ee*tQOu={yoG4NtHjRXm}TZmks2=AGwE zFejFdXfGs&fNP@e2e=tQcOgD@{w?PhRHIQ+sFtDc2;wp^f%O}0VW@IoXsG@lPklAg zn;4jHeQlK)L6lwqEkKhlsSEEj+MdSzx1cmU?0veQ*-7y_J4XRL#q zze>ws(>n?a7LNj#I8Ca|0&?y}PJI{VQUi`oBVg|04)SFN_rX$D`jD!cB@f9KA-z2% z578`FD{cm>Cp5@D;2#a_D^*)Iu2u-tO7XXK->5%Qv2}yz*1XP9_ zE%8)iDqy<#n3=!yfbK31C&EsqzkHf+QPW5d!%Xf@ctvXJE0;&zR8E1qshq3?hMqLh zWIu&BRTFcWwN^Dm2{py?k(FmS5ew#?;@uMVVLyzj+PVWM%h7LYWui5Yn^VDdD1fVn zmgIwnve@#49v_}ydVmAz5W+#+UigReDDd_KCR%+UAJbeOL648Ip7C2k4z|p~oZS`q zT&n&fHA?i8aVvCp(DlxaZGlr1dRuwdJI1@#>hD%-Fk9dc@Db7jBuRh_IDi zeEc9avk}%5;^f=dP*yi2pczMIU0W~6jOm&0ECaUZ%-K4Z0rv^5JthQYp^+xptYoGZ zqdLJ1NXo}B3R;TmQRJy{(^!wn!&ANi5{js)jH4osT9=pyHLr%Ny+Pq^txGLWtfNvf zAdB>0(M@L~!9{%#NVrBP4V3LLG(UnNXmBv>uIVPipBjQMBz2y_s{bJ&Slg}l1?JO& zH2va83S6IQ$yKBdpJ<(cgnU<^uopD$!ZY_k&Q7P zb~FnBXvN$|Eo{;HQcTmh0{#iw5M@@}1J2FUbh_tWq*Efs14Tjsrh#r^m2K1^`Eps< zoJolpHu}7>FfVFnQgR?8rXMdjg*l!XH~fmBng)Ggn9D5+AJze%nE(+l z7*QKet(ih#i4`zJGmty4Bl=m{^sHO6c(!VRnt%&3(zF}S(AGqDTvMnC>kHi=1%e&( zNwmDLdmiBJgn(oZ0t$AOv12~j4a6^~k7jn)QY(X{>t+OMZ#On$ORU)p;yEq~mO@>o ze&PTYIoSqWAk{nMiP}1F$C15mMj^{KsG*DDy%3CQpizOHp%n{Eb>nd6M_g0S9R{E% zo{%5E{p!dcHtL z|1Ho3t{sB6wHIXoXEU=cEINBizW%rZSi(q0U7;EN{Ij*~Xih13>V;OLLd*0*r$jR#{O@R#A3>PF~|mdx>& zm53I@!ZV%VP5T505^-Mknwf+mD1_1YW-}zf&geVB^i_~J+Hiuz{Xf9SR%TU2APGbz zNMi{>)LmN*4#vO>)WX4ve9g6o^Is_PG zJh2m%p__<8Jdxo?&`b4%lflGhH3m_{5m=0$AXk3~J%dxS_b54z4+ zouj}Ss86OST0STCUCn6)Gy9^AaK*w^zSeOo_DM<{U$0j&HLI*b=0__91yx&mr*bk2 z_0RNE%ll_rxoanyH)hQT>&rqq*|JPyl4@fYmu9-wjbtkbo4gtBe$>q@Z| z%m@xMm50Mef9pbmk5T6Z{Matts$Wjx($o?^5ncoT27zqKZ_t~zS1=Z z1h^}>Oq)GQn4}sK5^?|TJj7YO(%r4PgFuL*LaD!%P-7bpDrNLqLYq3oZ({H=DsZa< za|h}=YAiD|u(r2_Y@0*~c7+&0*j8>K80Lwt=z2_}_JntX7s(M7ANQ4&@mmM}RcYn7 zq<^>k?!0;er+h(7kIUsE;GTsxs3AIlj9zs?B4nc#NPwgY%XFnKt9V`5`U_7P`ztqU zIVAuN14!7lm4VO=IYj~}E_h3iJmHFWbvT*1f!~BwI&%o`N#{@UTCRr;+}ksGTaa zWA%0yeH69xI(3XcvsZF^Cb@l%aspf%ugLlIN?2HYwjE>Ju9$irprlJhcO68uUpDnH zhgl4#o<|Cr#*^o-gQ_NJ22~As_{tSkAs8UqcKFQ8CCbd~=Uh}A*qn(fs}`h?Nw4A` zrIqGS@A=9EMOvA8aO65dL1VS>>6eGYFXs`vMn_(tiPGt5^6Bk8BYl8O8O1DzI`GRW zO8H;vp6p$B=@)DC{{%1iMtA;HeAD*OE_#R9DID%ubS~oJ;G^WLO2eBTWHtPoa0frO zJgTakn?|^c=S+|r{Ck%yKBBUa zfF0opN}A-hB6SwaFcJ~F?dXRw+2 z>6uHEHUzH?&bCu+z9c^$bH1RR%iyX;R)ML?f;JCpkj$|Sma_DXrG1uqs%|sh!L#kF zM|xtXJN@r;vWd$(+WW{|?Unp=VR`jtOhaAFl>19r^1z_59hT9KTzSRJZwzP2Yu6c{ z*AB&tr1>(b-8|VqirJXbuI>5g3Vw0-nh9dh(=vx$_rP$Lg#guyN$RpK?CDvuktu5y z`Sq?G&f0;p7*$1*bJQE*UARbDN&-=7v9(CK6F|OKrmX9E$~tLn5vLj{>$vljb;Q_C zHdEFq=2i(ol(LROma@*uR4MDMgi#lr<_z@?LV7(*S!X5hx0H3USiosg|{e;GhWL(c&Qp2OR1m$GL;p(Sk^G5%naUUk7DEKjq~n zzwXXOIMBmqk?^gHyaaD6xlta8e8n{Au1x7DMVr)gq-cYVLd6)iMq?@3j8kJ*Ybnpn zPc9Xm1I0=BwGUouT)Q_hMNgQ{19K-s0%mgXF)QihtL1iwqy$%CJiju~LHE?5StXbw zIhbXjQ_pC6my)#UoKU3zlcHyc3ITrHdcY&~fYfvxpY~FTP)d9DfVz1Fg8xXNp7n5c zXQQiNLvi8{*X6BSqF|C>`)}+(Y!x0t&m}##O8s)WDN#;j;rAil8Jv*|36wSgJb|96 z{13VgNE6f7m&M!C*Nd&4Br`RhF(4eo)nLj{n$1=%ms>eSrK-JBQx1Jv)?UlXkvGW7 zmCE>)<=R#bw|y&D8W>iV>sUG5DXd(XM0{nru9dR`rs-dqGJIvZo|PlxEjW|0i*QlC zbRM9*f-}VU0T$B-pg4_MK?UZfEENIl?vFsM?W}|vloQsprJF|II1#e~P$Ni%aYtE$ zw(|qR&v+wW{lTznIEi=ZevMC>7U&6EiZwq;Dru2d9!oJk2j`Zv4lH&%g;}#?W*xJI zX~L!5PEg>R>W+z*MzW<9!WcEwO^Mmo^bif6P+ZGZcj%JDv;sqR!5rQS$kx3En#G?MA2K~Zynx6JN){5L zAohVH6g((~)%U1=u+B8@%~;gGtCRsLP)IWd!f_oJK}?Arr160PCoyFiFxCY=_$e1~ zrU~l%@Xp`w|2((%>Nec_naQ7LpTFtIzYxCvjThL>kt@%+U@M(akQ4(a(J88T85`ACrc#zML0#+b(f<{2 zTCl)G?jGR|%wTI?vE}545aet|56c=$n;I7LLh?*Wf1R*bx;eL5WZ}+-4-qM8vxB*f zcj4+sS+B27rH$05K_GO9-bgJR_1B)S5<)Gv3H4D3ZS=!ZWQ-e)H`*A_=l`}jp1Zkg zjz{^2%JC?)S9;Us=`bMnjS@?a}e)#s_c1)J_6TmY+(pGh9Dv28wB?&WJo3qQ(`jF z+|0Nn6RknD;_&vbxB0r9qvF>|Wq<$ogV#z5GA{ZO&%#ZHush|~+u`fqFTbvEPvMc# zud_rJhwKuLVky7grWFSP-Pzi|uai$IUS((0n6_4OcnsXsPB3WFmsZIuhdN+%DE$KC zA5Mg)XjM&wk7IO@xlT@RpiXQknJBT7U5zq2EYd964Ix{U$T~IE1^^qPfI(WtWF*ar z0=s|@r72-wnub~d9Ff5ZOY_gWHqEpGfj(#QgZ9Z&t8sm%@!?f+H3bWq1XP$}gUR7j z)AD!tItxSGHhQp>-3i|^cn16&ZRhhhyyqK--@xA|E1PIOuS>iAMfT`K;D|_(6PN<` z`pcCuwiAyQAgI!&c4+B3Ip@)YEaY@Ly1bVR!S$z&URv?8Pl2VkIQR=YBeL#kNCwYP z%>tEWVQrjd_>~iZbLlhZ$?pSGOwTVH&dw+Q2k~B+C85oYclqFlE2e$v^4(At29tkK zX_4aQBrkqA^<~5MC0feu@Lr)F7VO|zN&NGx@Nrm=))0$o>XNhGs4m!4N1Epr1()S&KL zhJ!c6P93@Y*K9?^R*=S)wPJ#qH0+I5pjgUpJ9r~9-OuJ5_#*tGcs+wHs8d%>*s7ys zz@EzmVljR|T!d`~z-tVyxcqd76y?kO^Bl{d6E#H*i*A^OBmW(w@ym#`sH9|_n7|*8 zNc=JWc#|qZk_T-KA>j<<1-r13ZAiH0p5cVt@+MYw%TsKX;XAl+cgn+udYMz6))LL^ zEGDiTPPiK$kdSWY%BG7SZ!|Xz_d8Dn9KF(b2@eqVy;~z29%Dd1#F2;_KHjm&FL3p- z&`H^buoyo*kqHKInn+UNZ3#QV@8(B&>|sU~(c_#n%`{kG<+QbvunRg$9qdz;xwa}3E8Sc@AW{hIYO)d5z2EL+Q_w4@)jm|9 z7}<+F==zaSDd%}K;#Ia z!V_F~p-dBV!ta&{6n&#SDlDiREv(=%MepF%ry=dKCu3nhFbAFm|7ECDWD5Z-G6}0MG#$q3;sh-D7}zLLbn9 z1opWqUXK|B+$F%LkklODu(fop2KY<~a0NLZ1Y*yo zBMm~yX*6hUaq^zw8quINtJ0t~tYF`Y^mB41OVW%L$u&H8vBs$qv8tV|oJt*Zc-Cyw zSzO*L<}Pjsj!*4GSuuS!`GgIxt zdL8IE5FB^_db%;|>8wxYX=9dH1QJ09jVpW01bYqfL2H}DR&(nAX+ua50g8OS0j)W- z(`%?DGM)UQsr(hyuZbc{gV6i5LV!D-AWo>HjUS412;jc+X^}kK(zY&@YvJ-Mt@YtR zthb!yII=r|V^g)_Bn&$U(-zyv17)1-c-B;VB&nO@tYyhdZ7s6D(yhvY>i62!BB7e{ z!J^G_3RH_V9-JlE9Sc6K#o7SokO0k> zV+KrjnXcJ<9RQLxDS{5S;~YMKT$!xDw6-_A0Zb~^H%R*)BXs42AYQ%c*0J}-gQIR8 z78(b-K%*iSez~g#b3f{U(C{&l+ND`N)dp&6 zyt!QncIILczvsRcEd0uE!dwX&P9~$S1kGMEXkozJZv!y-peTpnDZLYxuTput%3doUFS+;pB zWIXP@v73iw55*Ki<*32koE%6RL}evw(aFiT42-ur-1s6*+Fl*qJL+}4 zcf8l5d#BL^B!UTIr^6+Pfoe1uLA(Nw{y;X2I$3TQMlK1TS+2H>P+2;5mq5@g+mP)P zwNmbsx|O2bE3~3fX@m-yt~bM*J8A23U`c-Clpj9@TV4@E)Tk_NO$*qHNrQ!Tqy+wuGy^X=d;;V>2Dr z{;xHLRsdfh@qm29JceY%@efL>m2gdWsjtq^FO+?ye@n7p9{?kk9pozZNuD88HOHDp zm*|{V(h6Hbe3GvY#y2Xek;C|yNEX0~%&=0OGR>iO*Ut}eY7IwEMKG|;V7#ZRUPZ1o z>eX51WJ6=#Jpr%k7Hvz>0;v1~7ax6}w(t1e`C-QCYr3Y%A^EHqyUv&GjEk zq*qsqnjD~dApiqpx^LkChGmm0EGaJhR8B-{RMX?#(^b_yT{$3>6eX(d5fFGxOAMDq zguD8w_775#7%a65SY~Y^)%HzvG7oAq-?4qDX`~QPXYzT)Kfnw~#sjyRKSndi^si098l*_3(y zOyc=dHO`aA_WYTuJb$Jcdf8ZEN-O>mFUlYH{OQkU^Qk<4aH{ue%RPV0;Rk;y`S)Dx z?mqv8yZ+hvi}}IX=Qo?XmE~s|>0tJY=rt78$#zsByz1;iSTi`abZnW3jxF8gjx7`B z*n%d?w2oNrbhY8E?1j48m=$N|&l8WJ(`;bcjjDj9M*M_g+vTTfKOt+|{e-Nl{DkhGAdy@EMfb3;1L^b^odzAxx3TB`t!xKo{Rix%dHlc;WeDS_zSRfkod5F`xbW|Yq!B1PZTs)e>$41Nh-*WZ`@QK_IlHZcR{maDwbg%@`btx z#vJlUQ*+bSYSkc$0yW8YX=DS$Ar++wQy(@l)VV1eC+cfb5fA0)>KnvI-V+%^r-Z$Q zeoN7oRqu{FGlU!i2g5-O@$(lzQMLml*? ziFrphovX{%d;5$9sl^ZDEin4cu(|n7sW{cJvddM?Wm4TCLDM%2|H!O)7`;VrKB>kf zUgH9)^CK7nljcIv<>FdT#c>kW1FlylgKlT&P;k|6nHb;|FRai*#tM6 z(--aIawR&t7Mz1*%jVEY#sp2Ux}_Tg%tOK}6P5IJ04NL3DDoc`X7V&+ZW*VjG2=jy zrY4MTSp%xe8>RuQ#v2~e<`lEwZA8D9o*Dem7+~r23Oq-BZ}5#@SEs_KvGOHyeCh=m{A9C6^U@`Or`G4> zMT({BF_~zy#rtS^rCKx3!%gr#78cZ2kcT=7D?ZXu&Si)m@yk0ZhL^8*_$)|Bp5CXv zOsjS2(o2{s=JVN_vGXtCyaz*c0BB{I^Q$su%$xST=Ku0aZ4P^vsQF%H(3@@;^ibuw zL2tTY(9_0}L2pHUH|X^$gC3`+sCJ5{)Xa?>^#y)!%b+JfAW0b@P&LIl!`918n<>tm zR;cur;dIlIC(Wf-UtX71*sESwyTCxA)Q;0`#4}{0d0`EJ;M%BgaIw0t{iBqE7c1co z=Jbal1)HE)DT@&6Qr5mnzb4x@#o-^ZY`bVnxl{u9;D0RJnmXu*EZg4RhH=mFA{4^M zawIaqs*p|v<3J<>97cl;0J<{9#%x8BxunJ%QVN*&5VF^<1yuGKXpm=ip8Oof^600L z;LIgcG;GjunxfUqP+2u|lmMvxQ&R|!fO}R>0D!lNmV}#NE@2rY>-yhpWi6b}dCBTM2eTWw(G8Vw zd#(ch7^`SSXt_Z*;6R9Y3hm`D?#RRdK$GU3(X_Nl>C+PKAgwHcbesDfK~@(2T_Qr1 zZ$EHV(cR6yzzGRgE-P0Tdg^E)(UW9jz8ONATh-me?%DZf+UEP>=j}Ci9*#-Z9>8fG z##P76PtH%j3Vwm>Wakh^jlNDK?$57z)tVx*aj&HXfISwt37l4560;Bn!%d z-Yge;vzgw&oSpmQ#fF&l^v952>wYGXq zh%+ey(uD)_>vv&hcQ5ia`=QF0O7+UjizrI`5*3kdZnqjlFM-qfiV+{e00qzt;^c(v%*&1`U4#DzggqWny2efgg^YG^JG45jun!jm z#MNasYQRuite-DcM)Sd*xiu0!6@gXy7Pz%Jx;JqoA`VW|GW9Qpm;B$jtV|(@A3cgL zFGuZR8P#=3MDBvD-zRbP61zIt@YXc+sAVY{c;P-$1Hi~LX-zCC@~jTlv*VKGz%peH zD${;^!7T8_N2RR>W%#zCn*4>N#ZW4@1o=t2TLIv})P9ne-oBs%epT;cf?53PqUssu z^pjQ2ym`pF?c=L_0>Lh#Hg3ML(^f zJfX`qDWTWsjPxfE9!b}9a;ONOwxuCyX$dg-!o-O9AYMqe+;0g2DB91Z93@fOP>gK% zwnpa=$W7IP{D5L#t!YgwsR<4#w1SS23^f=eQ10MwR&=~Zwk0f)YlqljF`?ltcU*m4 zcFAJV+ZMD&IPc1SWUq-8yg2DnZu{G>w#SzwW=`sV{Db(5t0ddXG@ME~h~enjtd5jl zEnII+`-wi6AJ3P6oHL2kM}`wWy0QdgWb;D7P|3Sjiv+z02|DC(T>%NHx!R$S@dhO* z9&apqcmzQm_8=mGt&4N;rvTe<4j?DO-3}?j-1A7v+yh|^SX-Wf=K5iXV(Z~)F;n)!^el`_kQ%~KPnyMi+0K&pwWH&xBuHa?@5})c3;`puJSL{j;;9rY$5yx3?Ehv zEvvBma|dH!71Qndn;HzVrh1ke8z3c^SJ0ZOk^u=Rfmvo@X<_$&r(OCE63STNUVvZ= zQ%(tP3uNkKv$l2q64_xkWG@Ek@N*iQm!I{lT7FJpfAh0eoE54k*G_W6x$bm4Dkd(r zmf8=O%Uj2C74W0>S+;svBs@>U!-RUxO@++&llzQ zN16p<7SL*e?U+9D(OkH0$kYge{44?xARIPa#1I*EGI$$L!v+nw#0E@1C%=G@Xp&=T z)f^Wx)IncXucU6MhbU`l-g_uVQQ28rVeLgWR4KEhPG*7GYGD?qXuX_NtPb>pwUeP7 z9lTLWz`^f`$^FdR4w6i1@L##+o%t>O56S4}%Ziq@u^t_(3L!6ZT|$zNGB$|NaBPSC zG&BDuNm?!bU;bz0(XsQ;;28k)$|N)>D}}%GkEe4995sdhTtCc#m=AYgV3JtmBmvG4 zFos>F0S47b%IH<3p}T)3Pf-7A*f>t>O9WUK-03snjD>K|es;K$)6l*h=GHRZW4-Mmx>qXf%4(X1ORve~WZxLzc!rc{@#8 zq#y(7-qszI0$|Rzp2|?y3ZN?_}Q6hSi56Wa{V{M(-Sg?QJVY! zvs>enlkEvHdexJY>KTr_Xu|tTv`oXLFU~`1SPU3D$J=rL`(>M!NPHNzV@Ev{#+C);fkv_EN2nxI{8Pnw`zXHS}-{Rvus;&FhMGGjpd#2U1xTGJJ1 z|CNLGUjf>Fn8d~?JT8}tBwUda1Gto0ma+z%?hq{S^5!LxoL2hj2{uB7qE69E9p~5o zehc4IEoUS8aC{hQ4w|P|y~Zgk`;Gg5VI7?rw!mz($&R98=0@NYH=v(pm-#t_am#@K zz?yYVPVGq8LNgl62y99}n(F4T44`Im=kzMOuZ(Gpn}!h>Q%&^-lrE-LPXA^Eh5_NL zYRY0E+C|kMCDkPCPDf-O3zgVXioz<&q6-P(9d>;>qf{7#WkR-gxX+}gektDbjpK9i25qm2=2OD9j zAQ3q9AF!{@%NetXa4F5wL}gxPu=0G6dD+-G`6Y;&&n4LwLDg)sY-=|#iy|pFQH*sV zW=8oOmDbPI$$H7Eg2pN9t>yMpe&^j=?xoe*S2LI$Zus!yT+Mq=a5Y!uPhd4$ogc+&9tFbjujXn{wmppvKIUq!${P@V zfUEf-S+G{MzZ!*Uq1)-0{k1d3{u+r;Bx6R(u(i7VwLQlEDu$w+i{eRFB}EOiN%kYO zHONz|oY0};=)6*ZetIBL4rdil=t$g{8I&;q5|otISNKU9-dXgn9QI;xFis&WZLbQD zUupBBr|IMDDfC`S+*Nxj)!=dT%)*u>3Sgol1yE@XmdM>QcJGG@WYG@X4U3e_L!ZkNXy+T9= z*$bqdSVfue$i7mUAS^JyL}4j$#;XwO!p6srs0|o~;c+Wd;>u-%H34fCT;h-`1L!Hp)3WliG0#neh)lM!1iP@>%LgQp#&iUK z+cLWXT7p_1>+HN~rKN!q%Zu#!eD?`Oz)%P!ITq|n$Dj)_vaT_d^~f)P6po-}zNXS$ zSvnNwpSiVuw4_R`_-HnjBzEf5zMwiik`E}qVxF+f`Xm&g zVeipX7q;?y!^3Cm_Q-$d_L8thrvpnCFi*@B0SKW@>C;MC$-XWF9vyf0Zpldu$B$&U zsq%gTg<4LM8*baDv|Y(bbXP)<`a~T>g#X5E5Uly88!8wwmw!nhSXVEmIMk@Dw4g8)=ZwH?eVY3Q)Sr2=m+dp z|CHQQWf>$EzztwAq^Vo=t-GRcCck5NgW#<`SU{r`4`mU_s#5cp@SqLgq}(vfxh78X ztf@!=t#(XnLCX%&-cN5piNOm~l-VI9cCJ0aMCBK(-SbQbBqev4v}-de#%oi4>l)Eo z8%isU!D=fq*)m&uUt?`6W$UqVT7%2mS}LZu)V63T9hskl%#ykPb5Mj=O9e#Vxxc%- zKhR1iY!PXAVaZ*WLwkq2vG9;3zK^`*T2wiZ0wy`h0*EP+iIA0xN~6BV07@v6%yC+V z&>XwLxWMxmI_&A6_DbWb_@x5WJn{m z0neLvjHr?J;FfP4O2SY21EsFygN@gGD5Ft)k>n6$s|Bxf3!iM2l*T|HunM=S6I}TQ zDLOmE=K!mY7WRjfti*X@KW*#0Ng5$w-XhW(<)Zf!qpv5C(B1M<;et% zq1M&vHDm+1q#qbuy|$nNEp+(y9~PM_^Z%HcClHN%$7|;;hJWz7(zQeJTkm@9ypWRO zuej8c+g?i;Spm{*6-jt9=ky$C=4n9NMfBlo=h^b61O#%d4rBj`e!#&@>_3^BS7HDA zCHqhHqVMcKu2sqfG)4G*&(puyp)yb%LqE#b39m-OJB$96!+vD{CyUAD?7uPDQY{M3 zbyAsd@Ez={KVo9Qq4fTC4Vn4Ix8&B>ehj8C++jb1Iql7Ku-^{5isPh95hln-Td~4# zOh%FwFko3jacKRc*pfHjR@Aj~>0A-{9MeAW%@rl#hK9VcWU zzQBT22M=X)v2CpuwZkv4G-{Xhzu2mbFs;+HN7jN=K`?o^`{1D@+UuTcC7eFRXunNVpW;rD zAh~_8WhTlKo(j7otXR&FWDV1d^PC9P6sm%8WFJeRJfKWuQb0Dl$HA6|P{6sfv^1gg zNsF5%%{`-SCJr+i@gUMtfC-6aT?iRN zq0dZ~a_O9rq*Bzx6KBjC0UvAap_hU#iRJEDOkc2m%uP}s?!xF*7UVsLppc|oRL$VjWT)BV%WS5mIOH1c{rG5iO36+ z7yD!C7_;1izopLo$*(tG8O7iPQN4PgJMzkMe~T~S6?x@P1bdF=3}YVK)vGy*;ZWGk(abY zXebP#Sk8{0*P_;?3S#4mCe|IY77=mOIiCBETF|Bi%UEYn<&+$s`s9Vwyv9lP(PRVaH3no_;S#h^VMeXK z0UtC)FR(*PHDnM_!r;J+7U&D$m(Kx{Ue7+jo5~ljYmsA5 z>G-t*PSFY=X4bu(c`${HD(ik5ouEQq5cZMB$=onErJn&_>GNV<>$BC}-zwoQ9kFD!Sh{xu}Z(OPs{4W>g*1+A) zE|Nl$Ruy=NL3oTY-2Sn0c7aQ{ zrMg3W57$(8k_2%^l`q)rg*YIEz16E!4)jGat897YOuLK^9n}>1F6r+b>)j?biwFrn z(pxZKaUeEkqe3Pr8jo!YbSmT?ZV(S5Qa_3)HG;=vo6Vb>Jz{GUz(Jx@+%87 zFUXR{pH}1gF)wo~(dOSyEZgO`mrS7SQm4c+#ctgQ#hNl5N6L=-*W64-5=tH%LtL8g zZ14@_H`~Q1xrV~?a$B>(dlGHK2&+|a-?+MlVTfbaIAin^#yoT`vtJXlady6e>wNyZpZe2J@4x1Y?|vvD!mzMM-}=gR z-~HXg_q_jpJ(53dYyQ6bU;o`NJov@iAJijZl-B&;f9f+={>3d{djEIzNDPOp)$(zF z4h#XbDhr2M8ZA=YZqa|N4vQg9>A01J@f|6d4t`F4TD&t-HS&&Dc%zs`vk9Jpn43K< z+al3=V}1@|0zU=#!OdoT`Ythx>}d3<^XFW(d)VGH>=48#da`qfmAtDcOC@n`?Hsl& z)KX!aDgiYHDnxCz_6&1>Ie#?WW3^&zCWvAW*eX|iWLajXKG9VJkTh$6S4F36z5ZlX zuV|Mq>zdVvn>E!{eam{Jo?)KYN$dJN*L)*q1YGX<=e-b~dE5)(na5ZN&;0R1IF5zz zU}S&s#!lG?VCF$^@cUjAngT1Z(=4nDz5!g|d@m21Azcc#N!Y#?+y&<%Zdb$tC+md) z#3B((36^r)4>K;&CqA&KFZ-Zb@8}2RGORWtk+5AxA3g3@44fyJDcgoVf>Ea65BQlz zjA|3z6PFO#=f=^*5dsN;JLVrRtbfaDew~RXB5sTsCY$Yo>9!4s%SE#p(p@wR;!szN z;94760{do>R+%&eoT-U^1a@}&8R_m%0(Ow5-+X$@Hr)Y8y^42vS#aAS*Gj{dprg_L zh+ULmRD$eUa4V)~((D>fCU(?kL(}ifN;&D0oYaPOx;dLt061?k$Z$^ z-Bn5gsnegNe;@w)QP^4$)#5X@^4|iJNHTL$l5(_TyVLDWO!lXyXJ!X$fIgiBMn?Q_ zqdzcTTvcQTc8ki;89K|d4PX3&gIY}_;Qs{%xyC9%Ah6-{^e4yH`SeH~GAHw)s?L{J z`Os)3i&0B{Chz^MedsHzRJvj0OT<|@+$FVS;jdPy^r4YTk1oUg`3mC7p%hRUSUI7 z;UlUrSyli$-jWJEhCB7VGk9)zMK4?lN4Cy;j2h3N6+UYpD$>C%sSmY4u9P@R_fIo@ zHU&}2dFelorNJ*%g;VMZ>&ptLCB4F5s)Ah5#M7PFfJzCZ?pdssQ_5LW;&zgir||Md^Ijumgm z2f-x&Tq5oY)~YKtASb2(ls-uU6$%9L(_sFQxVxrzocqSLM7dCSj}3x*WIt$IF?Vvj z!2|I>peBGAk1c!qn<;B?b|#~Y^>(u|O>ehG=RpUt%PT|Wm?`K|tq>UXcJqPc$2Sn> z-3F3A_CT~k@PZ9lOiLxs$^v+D@mreHe1Y5zNcdIIlIo+Eks+Y9LkP@QJp4j< z`*qmLHD_KAjSqzv2Tyn1QE}|XZ@F$>h=RBv^m!;1h=gJ79GvL^OZQc2@zyW3*clp;rIZtxRX9L57ImHNINk z6Wsv%Q$vvzp(Ka14g;9tnpfzE*vSwR))vY%5*E3_6;LwK1UCDD_NMAJbAuH1v?@Rk zO<$@EQ1S*E6BrI(7Sm_AD+Ft+jo#nNw_^GXOTAHtg5$-pJTScZV2=(rk-x{>lsZAL z-BZK^!zW^3cuehK=`V`OIxu_+FOfNUETFCAFcO+l`oJnMyk&vm7VVDX$|7XT0>j0K z6;$JAgH)+n<;q?*VD%MK(oCdE#d``r6xo9Ig04Z;#pou3_w&@I!X_f_XG5OMfS{~N zV7D<3ngUQKQ{aG?x^{!whaI2``h;DbB0Yy)4a9ibm2sD;V}q~eZip&Z0%S7s9(+qg zg`dGNss)9}B@B_}l5X<`CsMit2h5_`EH)qyzhDQw1`a6J8lhs!Oe&QDrDEdBV27}Z zXNb+wEjwmTI84SOtB1g`qE-S#ErX^3Hj^1K4W~g=1Q-5MHbx^2YAJqReWkatF+9|C zz#mE#JMd4xPx*O-v)CJ@@RaHU8Il^!Y@6O`3;B~nAwAY{foj#57Dm#Q9!Ib!kEOL} zY++)uN=5=$_G&1r~vQn)YN-61z z<+|ILSv!uF5vN5qpA7yj)?AhZGgk1!R%mI)a^x+cPF8Z9F|0Ut=$}A^5DHNEaJyVe z@-3}f0W>WQxom}yW(FY8tZaogo=3W&qonYjphfR8lUH||5g~%JpOj&hA`|r?iHfLe z-2S5FCE?6O$pp-(CR~eULZ>F;+{Q*COLj;nv@@{pGqJ_)Ezyn^_H1vL2BBgouGx>&}Ws@r`TIm|tlOp(6$(xGT7*W9S zw8O?lUjm0}aE+nV;2m~5W%MQ5vhz2q69Qm%g>NgqGz7+UK_AV zdCyd2mffCZf*N^>VZg2F2dI!7hNgKua?*eX=_d_Ps2pu`j56Xh&lxCN0S3W3MOgb|&lg!Lyoi-OO^aW=1VSC*N&IPTSuiA9bY1+8;1JvuOn)jxs&=RdzEvDfm7 zsu3G&sN8*oqwS8Iwq&rkGdSLhsd#5OX zQP#n50(7q;))P?$thHJI$CD*nb!l2r_#;`eCu199vSiEo30GjwKfMq%j)SGS#>p`* z;`&m~1PjM3*?c9sNjsV#XQ2D{+$`*7%SU~GK7Dd}Mn*G1Z-BS(TuF_|!pCEeCeA7Vupxx9! zb*Hi7O#M>3sllQ_DVlCktRx+TqvaL8%qnML)~;#}9^Qdr9+#^cZgq$%m7^M_c3@+| zi&!l&hEAmMalict@&rs$v^56n&=B;_^(# zQSGpyu7Q*xK1?-K8ZBR0`t-6iY+u>_dX+A!(nVeRw6Ziys4TrfrBAO)m+Ct{v%W0N z9F(Owp&C7ARl3yOQF?7z8o-yOVda5PRk~E%QFoJ}}NqJ`KAk zA5Ky`pjafDLbrMeDkPcQd3X%kEP^4rh_XW2~&Z zJ||GyAb5~(-I49V-#K}rXE4ig| z_vc|U9Q+VHy+U4DEa&6!eLNdh+O zM(7ZaPHb*)CCax@I4ZDc@bsObJWa%T6UMZVvY$2DtO z-d`9S%{9KWF-zu%m($GJg9#p-oiS}isvkR`xlo)s+#) z{^@v`oRAHxCv!b2dHmtv&xItU$3P&l+-+mwQn05sa<~)}i8s?QoSWILyihU z!6S(jPvQKf;QDI`i!rQAVUN(PU!WOFX(2g(-KON>_l4Mw*7fKMP#Vk$3iOLz-s1bM z?X)(zeOs7(86Qdhcigang<8X{nUCL}ut_XZ0{j7?)so=qbcMLF%VGSv+gwfp5GB9l zvnc~$jY4Q-#D;-6LwbqIo>^q)ZPV0njR8<}jjMCT`MT|&$A&;8GV9fgtB<~f{yuXn zTeP)fTlMu#$<65y9^^dcq;=jl&-(PmrWPtSEffMM8moCNkHOiTfrAO{mV-Pjc({*; zgvOj^;~s#9*E`;z(E5eJwW)6dxwcY)5ux@(QAxJ;gf4dX%PnM4q(HkxX2v@y0o6uX z$4^g4j9=6sAU@>NWMlH-Tec_(8`ozfAHQV_`PRH9uk8c+>{kh$8ti33it{i@h>vko z3`I6thWLoSM7cNeIf6g^t0vmv8P9a`FEe6}&_&{&!&cKjN3&`#*s*Lp4_R!nZb};i zE%d8Nx~DNxq^e4f&_WhUz)PWwMco?wbv9I(uGJbyBDD^H_u0Xo!L=Ptk!>?Yy7mx7 z!x5$=oDJAP5clf(<^y1fZ>O^9(5@0Kzb8-ovTC~=NoVN5TH?LM1(*!U=el}07+S(J z5hk!a52hf>#Qtkj^cd}eoelbIZ#jVT;!{IrMdNJXJJ{4xTLdJ2LuO_FOjlN;-UNPBggdgxQVSTnv%Dz1BUd21BSX z*aS@=ylW=Q7+cB-A*D(}$mhERPiUrA4{2g^n07*kO0ya*uVj?KQrC<|Ly6Nwluyf4 z`oco=u4f9C1lXv(q2SC@;}iTLvCTMT>0y@wbjlP?39E}j`b$dQ357?f1x&oN<*W3 zPO~-JI$1b%Aw05-4QZCrIw=2Bd#8YAenaQ9<%tD1BFt=LF2U!2{q`+5lhOyx9gbMv zdHa@2Yy({z2`A1Vb4s+qi+Ye&G9(*D- z#srKKu;ggRDsznZ4~sN?Tb@nmutknxILm*Iz zc*rbHJ=KpV;AzNQmbRyOvl2_|!r*5vg#C zC6O{=yrJ=m+M+&3-g~ZwDb$d@AdA1U`f%55yL`2Dy$#yYjg0eDETz3j8eCX<7e@JSG~_I`#ix z-Fo78__<71IX%IYdRfu&ryUY#@PdE;Ptiv>xfing6|~U1Y^W-~Y)T}{N3Xu_ zW1gXg4{JG^sRCIF?E%qf>6~p6uv1=4iWW}_?_x(sKelm>+Q~q6gwcQp)g6 zox=nf0JgbSH5OMVx{y>BI}ew>ddQIL;1>jqo4E^L(DT`aaD#4^z6L>(l*#v9%G7>= zp>PVGN9CW;A3hE!7cwzhhotRm4c-I~9X?)N=h|9fDPwDMB@M&7gkafyx9As})y@3M zYhs`7)A{c`^ysUv_`<OK4UdB)ZIQPExR z6(0SgZ@&AjANth${wCQq|H`j_@O`)4^_t&brN*^h<8Qw7k!$u{|BXL-fEsUq@7Lb5 z|10nR(-)8b#%`~1;2%GK|J{2Yz4!<`k%(tut0-!{^NVUa`aDbyZV#g;}frX>zh7&#czM_{*R9R zgyI-(@Q+;g$fsWSfqOptw%^({fB!2!{fF1w`i=kjykmUh@Bj4r>%Q~OH@>33YyR^e zy79)(ed`nNKg_9useqe0a8m=WK5=!{f0cHaVeriOU}MD7g7wcTlww6$4D5Y-*n#0d z+_8l1wx!T2Yk9}Dz9~sjR0H-9;#54ZrAX2d!~`UKHs*Y3v7rM{#=p->wc2Y zue2f&RvOn3`_pv8VXc^EQ|+v?RE((+AX8KD7#Yo7lwdWZ(3HsILXNA1UwGCzk*i^* z$EF~VYCsxsIDTtAEgJ?Dc))12NZ)K7EWo-bOvyDDu6ftd71%-N^h+!r9F*xE z0Gj#NaR**jh`g;(ZqX+IGutW*OP#jN9eiKTRR|&UTy9ZF?-~AFVHezRzT@Rv$qDtl z^DtMeX0*+0G~N$fHn8C$J*bIOU;=DNQp?&4!uagPY`<*wW^0yW>(wlG{WsUB(ds~5u|uT+&jrnk{xPkouMYcK)P#w3ZhRhC0#q=fX%gCCWU&oq z6YB`a!B7{SDzQ=8tQvdHbP7?K{|7xVuL#qtjdZE0S8McJi*ux0L$9XM$q0l%^N-oT zDDqKasffKqGioF-7Fp%Xkd=1k@gOTm3F|~;qk+~$N=}Ss?9G>X9ilq`9|Ra~osf{4WqI(G4u0~-Q)Em_=MDMm8>l|h>Nfu5 zmGhsR4@>X9`*khnz1lZW4thiY+gJWZ*XF-h`Ub)j%R3QFgwh#Ju@IS;RkLD@$?IY?wp>RCX&QnBG4Y_QK_MfNf8+8a=;R(pjlaruH+3pZ{ zSLqP=8kx(yDIq?C@n!^dDL4>mLFE~T33(AKmLHN`=X}aS55ygS0xS>Pkj%p>uee^` zfsas8X`jPG;2XryGJKB!fW0fc`g;EWDP&?j;W6rky$>FOhRERnZ4#mtZG?Oddy^z> zWC*EZ__D6i9D!E_G(;0==G)<~j;MCoxPWKl&}S$i3yPOewiU*w{_+L&mo{nGS}CAP za6OnE^*OO@bU>fc$8q_gG&E-eO)%usSPF(64JH5w`UTmzmyU$Fu={VLaxGlXRX8== zT0OYqn>-kXJIV*2jtVaXL{oIVjAYh9*q*?AA8> zX}m7qWUIb`j;QLGI;*^C6deMF^8||v(Ad%ruV4@Ec=S*r5f%18oqPhhg*oIbTDJ3W zs+et=<@5%#w+V=riW+|^&(SSyjhe-MWI;=kMah|;Y$`lY#PBEi7M^9{^ppakjV zSbDZJj4(Py%n-f%4`ukr(Ht~4agxs!N6g{rqNtHPI?v(1?`W5d^tKMx` z@osbV?#vbMa1*nUZJ=w*zjuE1?l~*oy`Xyc!WHjcT)lhAigy=P?=D{P?$YWVZXC6G2(Hb!u*{UsFx9UF2yuCHU3yrP_|?B)8EQL95;>)0@ODb{LEnR21>VQVJOGjm0mV?Bj??mi^f=PzaWDzXp714x|FJ6Tnr zOW}XS1QfXQ9N0bV$kf$ljb69!ps$^Q`5a<^l;KF&M>)7bJY{p?Yx+i3e#072dLruL=i(k|j|d3uloBe^u-70aqCi#A3uC+re#S4U^U zVSdcA7t%Rce_zB!(*I<{6t20ZBX}pXBL^=w=z?j0t`H5I$8Zt5&^C~p{=CqpgoLD_ zFRD%jQYXRi%NEJ>!xDWswQZ#g9XU-?0ChWM{4=x` zJ8!l^$^P~gYXts}^X%zaWQ$G! zwhqEfU!#TmM;Yfruyk9sRTw=fj3jI|H2@pu=txVOhX1X||MM_gl;@?ogFWQuE>Xv& z=$GC}GK#!qOSP2ni@q&24?V`pVF8kg*3-fV&ZqFh-IV{ZoMZ8#g?W`~9#NQW(PqF_ z!xl2Dv?dh?4NZ}N@MQI7$0GlpdfvM2Wx{_QW7FDd*64vqJott_!}(^cR8iBiDS0<* zuR&Q|^TiMRgQ%qX$Dq_d$ukIiSZ>e=`2bk7%LahsUZMqcV*eR3o_TVzBIVIZC$D|N z6Q6VnJ0rDaWa|e+Nk44GVH6_h5*Qr**uf;6;%{(j)!n-C?x^m5qP%;oT2;rW4G9Jl|z{J|p>W-wE<~Rvu0$UYj=; z`FUH-w>iy$JG=8oZ~1ELm!%`8FTME*d93&+sg9=*N8t|DR`rc!e0#|O%V$j^9S&V7 zIDQfk#)fbpv4;5mrsRh21mr_uzz)fY0{FfhVnFC6&y6s;$q_}~zqev@>wI9$E%ZZZ z{9Fl;XJzLUxrsDH<_&%?Ete$6nYeT);(`*#DD|@_Ixtgiu1G*Jljrm3oQ3eds}54k zGE{AiYmh3>5~r5TWT5g$R8UN$Ms3(X@(UNuLVUu-K;JRCW1Mu0PHKmV&aoAlVhN?N zRBKrFyyF>($m28Hz*4tRWy%#Vz+kOiNo+m`BPqQ@9pbdBYtbB)@T)!`9Iy9Ma(#m* z-K>9}I#}#&z`an5(o<*M8*yb*9FF71B{Z37iHb2@nGr0um0TFsGIZP* zaFB1Q`3=b}UkQ@ux!#!E^pzkf->&!SS`&;2FB=qdr$7+yv}3-}NOec(E5Y2J&JVCT z$6t#LpK|GgJTYVeH26#NVp1%Uug`>-e@iF`!!m?TxtC7qbL#ok_j0XoKCt>X{!B|i z0=i`y6d$BH;vd$(aDO`Zy&S;-VAn5FyGFL=Fp{S505^tW#GEbPU5gR;Cx=Pj^;!~; zlW^+Gh6y1ia&>*c;%j(syPl-!?0OvwMw%b(K;_=26h9X&VnnJoBxtYR^c`(_{Lsd4 z(zxl_&1`yD-bxa%Fp#znE(`i}-2D*3`b*=tzM<^G@V^Ic#0GrVC(AZH826HJDlDh% zdmCh!toOaKvw8myGZGz_;%&=ihHQ%#uNZYUpp0iHYqcP<@<5t+mZGMcdD2<~@d4c_ zTS&_Eqq`_bhA+H=iEfGU%RS<)s%pGp%Ud3<-oW82S2Vy!_3h(qV9)MjH*k#3FR%K6 zNSjADu!Qa7(r6v0`#U5QXK9v2sbPWxz`o%w@KZwBVnL8ur9r?1ZVv{78=0z2$yzBJ z@I;@>VGFwQ!|;~IMgM8P*2*%zA_Qz3-je&M9}?ZYJEk2wd}Bj9#_qIteDw)~&!(ox ziYhDZe~_R!gUt0*Zy!UEBRw{~XQw8_MQ5&S+pvd^nsIz@)Hi@ z0_Wg`@X2AJbVUdrZSP{Lw?y`mO+RMZYCgF;uixZ|CITMU-5xNVY5LgYMX*3djGM{I&yIh%B<&saP_qX{)ru zj9b_xLjzR(6CHCdWYd(Hd{Dac5}F6u63a;gZy9#q5PNpy@?T@amQ5Y29a?1ayd9B7 z_mrTy?i=x3BN>{|lXj~#wzO!GSs#f8O5o=5K9PJ`c;u#otU!d42hbWQzBd!%)8#3q zX~oafBoQ$|>xJc{PD9?36v`lbWI3h-coM*xC>%x?QgN_Cl=lt%H0*|}-^xcaGJteE zsWDLUg{~%AgU{QiiLF%S|Chb@fNNs;{y;YgO@a~;>?I&77C=x@QIr6pVi&P11PDc{ zglYj4RP5NhVn+eHVnb0Bv4Pj#JNA0*{e91D56BQI)lT@I zX`L};v!Js=*@QCPVIMDm$|jCJ3-bJIinJwMMzr# z!+H{q2EnpQw9v>5=OE)G9$vn&wm|fuci0x7=m5+bvJQZ~D7={A*pga{$4K3zli6B&rbPtRp>PMF3HUZ zU>@c{Xx>IgmMfss*l6+u`Yf$A)KPy&eay~PCu4?vf$^egbNWzMc2n~qdq;W$-cc4^ z6$Cz~KxPyz3ulFZL7;)muL2~5(+$>$>|gGuL;pSf^a6zG`2Bw%1FWJE3v>_(C)Cx} z(&cD>{DvIo^eTUO#`&y^8{b0U0Rz}k#W$YJnU%faa`rP0G7pP8!8!yK7$>mcIN7UX zb5_y*OT zygt1>9XRn8XbArE}<;*AM% z*-sYjQkBXfwvPEv*(bjqoBC5WF_(~G-7t8#A7Qz6U zOSTXOOU?*Mev=!ImiDN9cvRE_fWFDLnviPo+lR175`bsfNPP0_Mg$?#2kTopOtMBG zbR>1FCLc+KJ7ZIhe}qtddIN=zh!H{u#yga2NF0)%bcCV~3%6uvgHjs06{(fj`<(eT zMF0*|wji~JCSOQ#B#oJ^A0@nJ!K@_0aQdJ~v6T*cL5RKgtr! zs~7yc0H#(^U4!vX9R)`3C`te{NUvB8K%J-~lk1F<;f5Dy3N@R4!v+KWCxRhKaYbeX zqBs#_!G=7{Sp`C2)8ydGwA~h+nIr^BQwj8+q!J1R6`|*Nenh3isa4Yqe1-KS>6PR( zgFbt!iF_|i8KfG>?qpH_ML57stwUHDCJb?-ZE=TTf=-f3)2?yKZ=kD1O23q%z zB@99tmN1m@rwPzE)E2DMqxpV(gI=ad3Gm9&oraIF28LeX4kioF4*`(Y5Qx7D)Di40 zpwWQoX$u|EXhCUzii|XWp$uLiL_=darAW2S6tIAj*r%N-`pnORFj(HB1aFGQql6EJ zIK?&Kl??vb(t%@D$eZO$Zw>xc9% zh)DA9z{!IpmBS+tJIq`=H!bNUUaR;o`;7m-1Psy;X6m$f648&U$>pN}NWCK!MJ3a` zoQS#O*}SYOn+V%#F(24fxN^|(mfX&RGUf{*RH2S0RFJ}}XUg%7 zw#0JTs$_$K@~Df60MS@BbHZ?zsLO!m1y(Xun^UXIXbq{_T2wDywa0K{dbd2`Jg;gS zKxtBK!T@!f>~@u!&VK}-DI0eBsseq*f2_@`+Xhgs*vAa2A^)DT(dJ#G?DM%fwaN`M zST$QB1t!oQ%pgAj`hpJWl62swg4kpRC!VJ264G@9r0eiaWF1J(JYWekPr=(%^e15b zMgu2Hpho~qwlp5|x&`eRB*_A;VJkTF4muTkRS-!tE=OH@LV#?C#rsBntT<_+8AvF~$EG2Y@u_!V(-1F&7cx0Qs7E91y8CJi`WWBT+a*0XneZ zPoMxcP%ni7Oe+JIfR9r{5mXP<1i+0!61e=ovMdldX3lUHXjXPvV5!w|WOeBPqslA` zB$6t#ybkEgyX@d2;ypubkc`O+ApZ78*6&d+lBrmiH%|zuiayHaO(YBkR)lRL?FrNt zz+b%hOMm{-lfO_z1F|^s7mAKR3gG~BvEVOK{zC3KJWNvoov*s4s;()jYoh8J%V!Vg zFX?znI|6`CWjiUZlJOX@z|_+RIN1yQBdJIh*Irmn6pMhXKsCmAx>G>AJfNKrMPMtc z5O^7O3WvQTga2@QV8X0@JWC4lalDhFT5rZZZ9)nWA|9*N%lS)94P(sU1 zIgumki*bbEN4s8@KA(x^kxZ#@oXc@nLy1RFD1RIw^$jByEW8)u1Q+tS663%YKtL`2UbPy8SQhXCmNvNBPu!`P+(mxu z49&Y!wctG9^Rk1LV90#$PSq{tJ!S6H(htTlU5MPNdVngD!HQS8Q)^$tUv$dJKq(XkKOo3KB}DL16K!EGesC7 zJ;_XnSuz94(S=Q>(L6DB7nEG3TF@q57%FgkSk_=uW;#4G0)s{Dk1l1RIY?4OX%>;~ z^Nh-&61pnA5qW@3<#_KVTLlPtLTaNH8%6Q;k_Kv{fv5#->?$ob zCKyIv-ixM+Ghx;mdIj*+83v>KX;~%ICYpGoxC)E}Y9x?UCZz~?EP;tDY6y$~iIFkO z)<@9-PE^{06WDPT`8zE;j$}7|%LWtwuzgugP#9TJbkNlVwY?}JR{}7GIu!3nwPTwf z<6EjW8*5)QQXrvIi}^tDGq`K|oFk+L`R~F?cfs;6g;C&oG_9f}WU3OcMy2d62wQhF@l&A)!` zRet9D-49ER*Ym3wuOCL2;GI1<@eV7TN3bWy#%1U#;R(|WZSMNq-yd377i?yVm!s+y ztE4Gie$OmLL}dkA?)UeqDZ5h@kqL$l6!yc;H6(`7rDUdPOw{is<8N7<;I=dwrLt31 zJe4qr-@yjR#LH8mcnh@~Y+U0Lf{H*Hu}wM6kAp2^mI{1dCkRn3gx<8P1Pg8xf%fr& z&HN#XMx_hTCa?I)iY>{*&0$#2^nmU4L2U*8LDpzV(U zm#Cv`XaHEd2^<5Bz0_g)kfb8X!lVozXd~m}5Tu+7r}|UhBx-_gz>`4vBn(x;ViVCA zZ`QKLpa~!w8OMUi(JDw=TDL+QZE7ClTQGJ~A9$Au_yFM$TxE1a%Ohoapm-nv96C79 z0k^IQwj@~elJ);C0f3_cct@P8q$#v1PDsU=#YTY@sKiza2fIH;J>HX!@9G7(hqR2t~Gm0_?e3 zxIj{1XBFOMOAE<}wPGrmeaE_v?vrOZ@!ye>s*R2Xn5qDSBrioUWpfnw7;9D)cq3Hh z6Dz%lRjEu!<2%V0j1wnbP4vr9!BhYjG*k~qO6f6FzzvQq<^x@TENUW`A|4g>rD;3t z6obJ<04^d#>5&6^jI-FIPu$o0}k@jZ}&4W3uWVVv2a8lzV zA)~x3UewE=*}~@!6&nRZmnLy~Nb3sSZU|u%H3*Tk)hxnzi_U)%|yS zSL1qA2^@Y%85`!Ym*FmXpD?JzRn36V8r&u3${U{u@u9WL?12zjdE5okfr8Yy%kFvH z)gj!4ol_cj!HR*vKgV62|KaYxPHJmQJP?@bhG7ErF(Xnp(p5z`;g?d8VzSOA>G24tVV?WDjuRx4DNvf*XGuo|=$wB2Pg@ z17@Gmi*eg2`%hkE(TgTOd2xwenEvF&M|x5DCofW|N)>+cVky0lmUI73JC^JPozoh!S?)TS~y`SoMyO|`X#{F3x zFO`rSZBU&92D20i-Qg_yLbHNL2SGqEO=P+u%=aeOVLZ)}VMLsh=c1CTrUG?;0Gnh26>mgc)K-^>m^k70k7gER z^6!~h0Io+imE;!T51czHS|gV;B@GxWraL{<1f$O@ZEPTTkFWUuPyI4eAP}h*w!yb# zK>HDJ6wK;Wbs+pSg0-?pc!x1`tg~@gCOn65YvX|stp{GmYKVFiMIHe$nHD>Wa=?#) zX24Z(2yk(Izsv>a5dO|9mw1>k}PX-V!%{3r|I5I*8Vn12Hlx|MVRLVnye6!I=Y zp74q6wN!y=Dz$-}GSD8t1~A_U_YM5*C<#x%a*5RNM0GF$(==gHkd?$VO^^>?3Q~Ib zh(+D#Ft&!~)44?2Oo4$BNQ!IXW+)Pg&^};E@uv>^2^RtGAv z&>}Ek0ODC6T8tFG+#Ie~SzX2&e^4#9C*@+4RH_9rCdLst@pLjWh4Gr82A&(DX;gcf zP!mw31%{5-E#dSPNld}T;alKMVWDIkd5n>Sh@fdkIz^TynAo{wob2Nks32HEvr}`* zD`<-*4KTQ*{lJhQ_&naAKPCt`RtJzZPS=zPOrZgo3S~bxXFFwmzJS1D zwk*?j*G_CSsbLVG{Wt)VDhESmP*y z4Q__muXxNw(mSNe#g9TngLFL3c%n8@Kv}tXywvH#1_iHDl1JglDBV6;;7w9NJmG)* zs8Q&L5{f}HNII*w{=hAZe+9~dD1kTXWdrD8P?Cy&Aq$NbaX|8b6Z(MNL;BM|!X2;L z`UB5k6{?;wf$-hdABb0GHlR4UL{LIFQ8m#Z9ycsGA+KaIvH_7uz@mX4wOAYZZSrIf zm*&zlXtMih1c_S;@~bmgQgR(B^?0Dm7{#l^QUo+WY7+GU3T4xlG6Po# zQJ@3=0sx5vAbgyi6i97jJ%cFSI>XT!?EFL4OEf8p)#EIpuQT58hY)I>C`oM*iD&Un z7tn*69vLB&a6?o^Grxi@%GA7rX1a|3^ZZIpK5&w#1-@;D{J>t~Z0h-ypG<-fnTlge zF;ingMAGGSXkMJv2Cg9yralou3)9L>PwiT!!?ppM=1I-qZ8FA`xHftM13|kNsm|8q zyPo(a9OB=(x#i-x(rP7INRDWUH-;0vkN$@!(c@((NdjIX;~5Ut?8rOlX`H0ms3!zB z@KG{Zz?4hy5>nTJjj9Q0p4p=>kdtYSBymM5pR|B!M?@18he@-B{9)TjFvS3PCWs~o z08S8a`0x1xKm(!|Mm|6Y@EO!gvO~aPC4jX28O{Pe9!Ma|{7+xZ5oqS1$S0aI%ZU$& zBx75W1!EdK1kd54rP+VxVKo)XP!XsS$crcN+ky&ECp)@D&ynz;4x~o$O9`YL5h?2w z%@azo_!?mRxohB~4>{QsOp_rb6n@tz27wTs@*@F?#T_%bDJOp0_MzAtV2ddwodLjnlqPp7tUhZwwg@aQlp)Z} zj&=>Cg4uq7W-u(!)$s9}u}9c>kZn51Z*s`NA%$=i?CwWlwa7r-^t0UuaoPif`r@;w z$wt&9h}X$552|8OWFkOd5k)~JlJ}eKDop!ak?g82S=X)4k{zp`l+8mltsO1nQud34q05!Mj1u_P}97*m=;A?ZYlAaO`YtKnwa z8kB|jVrvlji4t+(AHq~v<0^}oSy_Ln4+H-^5t6f=wTWEo{K@2en?NJjnWa>l=w3s8 zUQEdm5=)ju;~%!g4%ZR0@s1QYngEe4gPg-p?sHXI-^NAyFnFsKZZ;CPKr60&F(_8!5_>FF?c2N+o>9Hsd%MyP}f<0Z~lFO31-Y7C&A7O9i4(+&`Z zs!kQdk~J{wVKAW4OlTVzU64wHVK~$SeJg2&?s@?AMP?olsviv2 z-~eO_nJYBvnEYjUNQ{*Z+5om7mO!!$*Xh5Zo+VB(4n`jcvv>LK#)m+2wARQC{h0igg7EpZ7kZHc4RO9G}-0{{8Y3E%`q zmSF*}p0V{RaQ~7Z!eUHQ41z`;^(eC_WQe8#f0TvQ`Uwjof>X1w(oE~mL;o3r{J#Rd z=D*rAwf|MiZ9b!3rcmi-o#d2hvm|&NV z$N65Q{zL=(LHMZgg@jLOX7dN@eTY#Kl(;`r?*W>6|3OATqz`ETen29VX^A`yiPW`L zF@S!*+uNG01O8Nv-I-<0OAXdyEi-nWFv${r**G{aL>9QQ8QT^gTLSY}smi1w?!#1W zn79ztVzJl*>>ScsD0GBZC}EV77@OP@e_M;BK`&aB0{MxTC?gRl!kiPo?}GjVJ#hT5 zj9D+#R^$DHyyRoeP+ewf(*-6zFxeHYCt^A129M^(L8Q%7|1}nM5`(Ef>T9#t$``#LFLtr=AYt;i-J0vae&y!t3)l zgh^>BQbvUQ9iRcFL{k}{y)^Vx$}?<08UV*UXsY3&*v#e7e`sLX`c$@L0mz{C<{=+5 zLld&CG41aMkhG!=Uk)=R-H(<|G>L^j@{Ni%Uvb%M*|#mrjQ-V7EfXJyre=e$JLoHcH0?j+hV} zHRQ>Wd45JQr(HPBERiNlb4aK@$Ps&jsi+YfLYK@3(H;*#VF~Xj7K%HUh6n-|5rLP5 z$&-`YlMcf2>ou1`>82C}~|J4=Mb&AT|FH zl9vXOZ)r%rJR~nQB)9MS>8bEXPyrfH!KFb3^PmFMp#H=lT4*3PDGjj+579ymv9pG@ z7>_E$_ZZhBM#p^Q{2b~UAy5~?OqL8#nYWsla{5;x;q<0G2h~&!s$*${xWoNerB)g^ZA-&x%fo4< zhT~cqPKzJG^wfYsTt`XE`tV?S{!uXfHDItRrUVSOGN%seuLk3c+JJwMtjAH=YUV|3 zg-Q88#H7k}a+@DplmgzV8muW0!zGnLiq!@gRCCp3K(+l5RB8z*91d3s6jBTnGN?dx zFWt}IW<9?86HYh31l-~>;E-bAkU<6RcZXl9X{34Sikb6(q-r=$8q#GG;40;VH)e&Z zNDv{Js(P~fnnRl4v>?%=l7oK&#HZf?(ecMx7!Vq;!;NGR#uS%ym7>_dE@U@xBUuM+ z26Bdj^e(ANZ@!Zui^&I$$pvQ7+R+`r37Ml*hRV}!j)=Y{(MZ$RxaGe%iyQLR(-k}l zP8V?}T84^414*eC($p23Z-ILgJ|qT{#30+05*`n!NXB)Pagx^XnyQmn2_>i?u@ZmR zO+ROn|5+O(bY#jTNm`~=^ZEu>2e7Tn&>nKpFnt5PLVOiy#I#D;rZP){#13V9oN7aQ zI{gD{2aN^G28hy15Dfzxa!%Zq|61b)0|{eJfUpL-sZ7vD04_-7!}o=>0eTcl0Os^0 zn=oo^G(~GPT67$ba+qh~-6N{GPZo_w>a0qCmEl{y%`~}6;g_t<#(bMunN$(f2NhxM zV0tp#&a|r&G#jxUhfxy*s;GmXi^OCK7M$WaIYh``4lH9G%4|#o8o>+1UZaQjFGx!g zlz}&7(%LczvMRE$@)g!~l zQf)}Vw@ A&822oCT)SVH`AFBgufa-b4eN=ZdI+WF8|2G=c`0Ck$R~H~%g(Lq2p9 z4XhBuDp?PR^*OW-@q%UC`7{=6p!gAyaAM~3`>kx~Dw?7Cr!rOeBar@3rax3Cgv$PY z>+1fIOmJdKsXJA(T_T?NLEOaf(5K|6H~a1WX59z``n@cmfVvEdC5I6Ka_pUP5W8zi zIuLW09iW7kqyt}-pA8u+N0$@Bi$`Buxsowgda1bNmQY-W(HJod4sjRk#A)0UDzYWJ z;yUS;uM$0_A-Fkc5`lgq0)_nhK~K06{sLr`kV#s#Er9MO9hUB))sTd-7Q*X7Y;K zEs|Iois`*%M`_Ie?hADBcTWJr7~M=_;1p9YK~E=eN~EN0;f=rlj)#OMX^;zN;e7`i zd1ws2*XfY!r{6J5g~%pEK=GyXbP!i02EYakW6Fli2v5-5K#e z!V~a>AOHiT+3i!P6ctpBq*o_}VwSfcGndcMgHO|H3)Q!jomWc?XoT6UmO!#qRGs6q zvX%CHF-C|JB}P|Q_Cn3*81%&38fb=`?A9}6X^ckD1Rm1qIImsS3~5pYP?|vYcy%r( zD^KSPvgG15NE&I98z@;vlgwO;q_!rxnC4CODXGsIEjf&|kTXQ!@b2n3SH$!tbOLI3_b2sTHcV~oRJ-#$ub+M=UN0K}= zirz^sL6a7PCdu)1YOWJ1O%fHhUI+FGFAJ~+SRe@y|8U_X{qRtdjh+xeRo2GhTp|5? zSBNy==FJoeN!I0Z;`uX$fuWI#h){X3R1pyo7GW<{P+H+DjS7uW$bACj-oXl~PnfTw zytl$XFjU$O8GNM{xgy-l5tIut=#~it0x2@Z}M4ZKQ#b z^eQk^8R)B!=ITi;s1&6%SEu2BDE;q&%N5wu|6FD25_R)ge<-E$NNH|)sW*B7E#{M) zs)NdOjlDE7Kp_oAzoPcJM(hiE!uKUT<8sRpwBW!{)-Ip0;HZ#LJT{7uhx#j|eE+Mu z-b~%^{5!v}2sT^_>H?JE9~poTCHzYoi9hq1t}-%$#vNlG6&e&8785FsmPZ82LnAS^ z23}31ir8?4Pb9D@mop3ujg|)o`f3Ul|NJ#FMJep1xn*BhP=6g67yjd0iCn2vL_`LL zg-X4G6@KXFD$PBSmCQLMX`R709#I{AnUeIgX$ z!SXn%n|qJ$1Tt4h|Nf*ms-ibAh!F~@9KX;obw?>V>wvHjg>{HLRPL{^wu*>SMn;8O zM}~z31Dk=n))-CDpk-_;J5Rgjma2ZX#Mnp0TKb1ZSqBGtThmu`RYv%*dwLiF8nE^W zi%_tq3?Hr8;95nXQ2N5hx<%_&O=cD^kY z&E?Hn*){zUUT9Q^wO??gt*^odHH?r)D*WTD{UZXEQGW-#JUBQE@X!jskjTFSNYier zr*B}Kr(bZGoQGJZyM5#l{$bV;U~Onb94ndcBOhv#(kd{_(x!Fu);@l%eC)hic(-WL z($5;S;_HdQ!T**`ty)_(WuN&+MJid1|2BM|fQYcrFo14u)x0@_9V!ouR$%aWPW_W& z{$Z?9M*6aHm2pbz$N_6a^pXEFT|!Op z4g|Xj`EgkP3gQqAGUDS2M5!1K^6&wsDj|3!S4JOq3BCnD;ry$l__G06e1LU zztMsI@(_h5#8RZ<$8P*9gZU%FQ=wnDJVMEr@pr`)FoKj=>u`((lc)bo&3}V``TnG1 z{$c!5;jzSjoBy4+GC)#xe)e^;V@Id$4fs&8OU$qC5QE-#CsUg%!s!j%d<*D zsWKoe3J}nWwhm;>N!bfQLoQb=wFp!4egtVQ9&n%ZCEQSs<5p;K@bi|W=ObMoY4x7~ zH}q5g(Y;Wez?IT)U1?2n)HDR1vHQ!FVY-qlyx) zma1euT&W&9`1wVIg+zw=z_}5r0-!d9c|hF&+TNc2l`@dcN;6jg$w$ z%MufcuL1(Y$=}i&MmGi#4i5Ou;Fll|6)Fpt6?|_o3STOd#*Ofaew!;vxE=WI!|xD& z9mqxJ6CCBO^bM4U5E=(4;A&GU!{xpTB|cF7(Rh4MFW=MC&*-Q0_XI;Og<>70fOesN z!{d$#l9lnRf?p531&2T<(+v~@DOg){U|5tgI1Wq#`~mz62A;wfKT9G(rs^eD! zKlLBgy(WHgsY@VO7~ltng!2T<7a5_5jEX>&q+pLsKEU0n_En+4k9ra=9N+tbC5f}1OBNo;o-h$&tJ_Q`Rf4w>NuUhrsVP0Vei>BG1*GS z;qR1@54$E`n8&V)lPBpa^-L2w;rbxDQ%kz8m|Z;tSI6STO;_NWTKmx6^SCyz|0c-5 znM=IcGA>W%%%xo%*ROfBGgr{vKjc7$Gv_eF>u&#B&W=;I$JW|t;?nc^?ell5cX63{ zuA5HLi$s^VZnusIEw{UDTXHGRIrfpu453AnMw6u-T8M13UuX5{AWZ&xclf1=9mW{d zvA*9Rw}a`0dmnGwyzcO5N?Pjy?Han8Z_-P7KGoB;N~res?K@|=E#Ew{z5CydqYw0dyf z%Z5G=FZB3#hs_yAJdB;TElIjZ~Wm3HF~+_ez_KXT0YLL>F7De z9e3|`YZrPgIC$F&x5A^wDHCp)caeRrHtb=wfnC-)^t^4;Gqp>lZg&T^^F7q1pVyL? z-9~@t60%b(boo{5t}d?*-o5+Kr>n`PSG9)To!_;_;_%f`wTimVko!#tj1YBu^P&Ai zQIA&LBHmBGbI3ciTgOkWEA08QqFc2Q1-~@RxzKIde0$f(%<|oRm)*@MnC#Tu;mEb~ zyRBln8?>G?CGcZr_qEQ~-i@hwyZemUXQNiEtlVS!uFjPvckSAvqH%>M=Qob&QF%ed zwI^!q=rQQqxl{XBJnpez|G3-P9ZY*BSU0#*Z=Od_&rdIUJ^wtZXN@IxvrMk%_Vjkq zdcV-*P0x`Y+B*b;8ubeC$g6lO)~i=Rqvn09&70k8M2iC%H})Rw6?~xoam;=9KJwCP z-?SRdd$-=OJ0!v^u=kMx4a*q@E$dzD;x5I*6=!;zcemKTa+ZAlqIcBWYwoqfj|?fd+o(^yuC2FE4(Qm&YT1Mp8=OY>8J#z~ zURLKVeFne&5L)%>y*|p}J15niRny~v>(P&$?0YF^=9<_Iy=8(Q@6u?9qe}w*t_^+UqACo zJKrpC+Ar~GmHNtKzWr`KSn}NP%YuGWHXnS`u-&PC&xbTqZtJGiKd1$lYASEt|F9GH zI&fE5|2+*8TirghvVWuIY5A86F7|IB>l9n@Q-uKsEG!>C8tgpaWyJf{^_s^H$eJE) zXf4|?;6%0cfjJLu4``oeeCWxFDg%2IRC}{_a<_rDwVHnD6f<^Uy!oh>HB7PxF0~w_ z?S1*lz_FkEJCD{g8?>^G_3Xuy`VN|+-)5Jy<&;75?j3S>TYO-UgLKD(!J@Z=x~1PS zYo6SAaMR9(bJA?(gGXJF?dg;-XYiojMvtoBI5s#=+2wTjac)Szp4WA{eQiD@^|uX`_>+;??vugwi6SY>vf0P3)??`M|dC7d@PIl9HKUU{Fx>YY7U zU;g^jajS{S!SdMA?Q>cb%#fcSJiUpteZJhF`PO%53O>mvaHmEj53%uH$0aW)-lp(A z%N2jCZMMieS^C`5{mm)w)ej!EOt;ncDOyq7p?8A4&w+6pgJw++_p$X~(8-~&4aLbMp zDgFGWkMX?wZP--551aNpyWxG%uho)akLG=P>o?v-yLj~OCjMvL>TaC&TJArw){}u- zhR^kXY`*qo?FuLSE5+#bJCh;^xG?)z6TQbR0?ONeX?aW$6wt}#tM}46%L4|U%lS0U z|6IUkx2zHV2lN9scF)YbxzjOlp!bCfRqsazzO+AC{)TjY;CYv{fXRJs1{(A&aM}=P zJZyTPvp6KYuuY3;+kOc# zI5_FxW>cNe=@FLAYOik-y1@VQjoxmd+hVkE2bsu7oxjz4zJd+mf*8 z#X*hiYjg;kouso}&wE6egOU004x=}Pov0jga_-{0VF`l^68Gj+3omLt`jkiYp5e|Z zi(MW|lf(P0&oimta98-l+07S)DW8W|yv7}xUt^h#_00amg9gm_vU|t0;dd^K zxZd10Z}`=z)hZwS`fj-U%VmoqzFJ0{ee1kjcfWVU#MiSY9u1urkzw=k@kqCm5n|6# z%BkIj%9GK9PBp!4rySEKLMvxsu<}&o5wjgPmn*e;$7S5f(W9vIU%O_-J4vIbv`gz>+r3Y;b@zg2#r_kc_sB;KyK!KD zw8`ixD;i&V6+LjV_2lRxi9NrT3dVcK#ak z;h@B{;Hhow&R2aJ+OPAEUEOs3)|6RGV*Q7@g|`@WI#%#@@Cm0Hx^ZKhMJ80b-8Rl9 zE#10n`G`1&f|+fWrLKwVHX=sy3@SbSgNY|;2lWw@|9@(|k zr_JJ^7b87&Ml3BHXFlrfgsQGiYX^+_*rzCHqF(B#R*mxVGxQIQI`Ue%vv2tiqu#$v z^~>yOJ-W@j>bXHPeMaj$m~PUEnLoPgl!k)~W*3g$^lm}xFEvH+i=()dws%{`i)L}_ zyIc#2zdgv&t;hNm@s}e`)x6W^LVW6Ut-CcEl~34xX>4dOd#8kksdbMP7epsCi_C0W zXJlqVTEXLSuTI=bD4Ck&r(*44Qv~~2!CWKng(r&!z)YnDY+O%hzYUk@NVrHSUpY|j z%}FU!PjutH4c^IdeJ9{`OLh7a(xiK;(}-_ix~DoVM!Hd{_l8I}DU~)xnsjk>*==Eb z8Gn~HEtPKi-Fr&Y`wl%^RVp-ju1S5CW0GDO`IG0N(lGB~m>d7eE6m^1jKR;|FxydW zs7Sr+y-Mzz@P45oKRy~=@`xF-ns2^?X6B`y)K*~LCmiZOGGM}c9fZ3tOAzR8lEHBxi5{HG75&aKl#M~D*yp3e22h05r}zre>5}%vtyc++6$*FF(O%%3@rYVk5vXO zLKK1nLtytSVtwGBQuu~O1qZ8bwtwqNR=W_^qZYgxIzC#iJG{~R9`&WzkSAmzb=3g!5|1R+V zh7S5~Xv4pXLH`XM^uIRzVOIaI;?lng{J&(7p$z=aUyrMM_kG?R^KFFTo=S@!JgB$1 zoZUNzqV>x%ANH9dpRqZn))Y}x`J_2Vs+bRZzU$4BbM?YpPM^9n;zO-0mmmwJc9)pL z!;-uUpDeO{qVN2{|4#RF(H+b`2_775zxL#;ce2H1lg{>i8Yf)w%CO>r*r?vlLFZli zHlHHvFn`_p*r17(^pgzE2g#n#=)2GTT;Kel`6ud5Kb~JP$nMG0^hr;$$M4(Uq;>n6 zkA*9?&R%!^m96oGcO!Ls+*zG8>E7;mx}oFNU-r#e zaLF#X<&5QZ4(=+aC#h@s>DzRdj^nmZT5D@zpno>w!-sEMO%~j{9o(zE?R0~qmD_wy zNX@EqYU-Vt{t1`XI&5(JwCwf#1}>Wy$H;CJRXn+%*2g0@2{v=CC7r8y!MU%aWAD#3 z6P~vlJt?AIkl&*g7M=Xs+#Q-Rt!7ryGi^@cYQgX3p^)sO4{V8_i#e&427SsjtydSADBq271qTRMJI4k?^&RA6c9p#N!FLd}$f zfRBj_#7p)z_q#VLVp-i`%Y?0$Cw4#d_`tV1HM>v9bm{0k;i%MmyWf^?4OW`1yI@ky z_~EDY-QL`?Z!f!SKe{GsdgkyY>$W*~<+YCqGaDsYu(e9zp);o4T5U7*INo?spMG8?W>c*HY zesuNNfw*-hLtQBr95BmL_5KS}&hnEbl(fb_VU z#nm0}CpNg1J@$0}4K2%^u$eANN!_&b$(CPqpD!3EZvS3T}qD$2!jFd}2e@&=lpnhadZQ3YeSvW>CWA zr4xtsj9S%tqorWzh`0sQQ$%x}dLPwE4v8J}=Hi8ft?QH8oLMtcuejj+E!(1#o?hpC z^;1$8y4C(v|761Qn{5VKj$U-zx~6ugN4cHWTfd&Xso&>mwY*N% zzij^U^6WM*`xWjO5@*zQY=6D%^Lh@4qo0m3-(IE4@fD%Rd=0uxiS84yB4ow2tD}#X z`!c#{i1qAsLUB2h448kY@rYZ_yJr8oWY(4{BL{`G8#w4m@Ud5m=Q%Adde&rt_F9{W26{P7lXKjY zk{ZQ+%kP=f-Nx-n+u|n{zUD3Z?tj0^?w6q(D!CfYUa-&Z)|{9c6OzZhT`<2&rCseq zlLw6SxNT8fKQcG|TEF{66N{}cKdRoW$NWyM!XC{{HI05gq~P?6_CEUt>WEkG-L}p> zC~Ac6Q^QXoFOPI9e0*!RMZVF1&JWJy+sLxL`Tl_sNpxhnlob+_bf5 z{oHPGQ*-~k%LWS%QD zI~-+E)8>f%*m}puMP8UZHpp(4tTk8`?hAFt=0{`pIi zFe%~9B|ppM-s#8uPmla!p67ET;*{6kRSxT}Cnkl|em7w0@s3WhkIPSWuPk4scQ5kA zxP6y;_x0-){$Nnt$;owQ1~;%u^?!TA)^+%$pu`>SS5{uExtn`6Z~wfLMdQ;}S)4vm zVbz1g7o#_R$xTWxIJre9(deX^Ja|YAhs~=_e;nhfC+(LQ6z5ajCjZ%*yv3W^Xh+&L zy>tAtS5D0O)Yo~7C+Spl`Fv$xn_ZbE=eE6k?PA%<#N*S3{dHBRn<11v2sIY8&;+(W@4jb;Z z7;@IAU$xV&={I+mTYh4IS5oA}3z^Ht_dh-VVV9%r!&|NTrLoS5x_x4jzRf7Q*1&b8 zj?YNF{Y@Hr_$KUdI=8t>*Mc_Hk3EY~4s)n;cb41ITAsU)N!z_?l;S;p*0jaX#zu_X z7T;&;mKKdZ`M28QyuNOah4Q5jZR+H`{xBy0`q|k}ZgU^CedAw!Xw|l2+sRtj&P;XO zn{<6>c&m<+O~e~Iob9x^XNLLQ=qWnYo?V`Lsb9H8*UZmnwK-a4Rngh>_Y=++C+c5V z-L-gct*IjYGjG>*tz&w!YtgcyjTPa^CniLmt>YiaN%J~Jw`re$`o`IUWaUj6_xjS4 zhUJQ4j#SbAv^uqaZ*I6G;Pr`v9=n#Dh%4Im%+GPE@z~+}7o3}QyH4hqrXG%+E_QvH zZ_OQVb)`X-6{Cjr99SVOYiFC>FFL1REs$t?ttXEZlwaO!WpX*A9Pa*nZrtm(Lw74y4>_I;YROQLm@n8}O|0 zFS}yjOlfy*_QJyc)tbJK+%xw6dE2JbjO`ByHr8ot*L&EV><$;9_j_2KT zxmujP*2K{3&D>qN?}yq;G8$fAUGa+1&MkZIzu57%(^-?qzJ}*#RPnp<*fh(x`Jm1< zD$Y4tZ%^T}pjpkI?Bgz#-+b&-o9BTCC%Eo(TKmkgN3S6cAN7N@wl?g4&!|_UiYr%d zGq`&1;BCX|@1|!&?0z)v{)>*Y(v(+b-F&^ZuVJ9V-}LE#ohdy}@2vXk%_i=7?G6M6 zG*x;;Bq@8$oARlW{gJ9pvf4$Dy8HI5o3rube7z4#XZ}*0wAy>Ld2r^H*8APEUEg)M z5wUhi;oQ6~6O*#1*-qI#IjBd)H)BR^Tbkjkux)R>E>vfQN5qOn^6}?$zJ9GR(p|q` zT-1aPf-jZE+j)9EY!a!HbHDe)xw6mm*J`!QuG^|&rzUA@SAOo*CgGRETC1CkHyQZu zP^WtimBu|E`^oJ76=k>i3*TJ!EZ^TRW99D0H&37PYIk7kFWHi3?dP6IufIT7`@>Y5 zI{C%39~SNT);m0*vun)DFJ~4Ret9WBx2)Nk=T9d;+VQnutox|Y-N%mPP7iu$wc7XV zNS}Zj`hhtgHYxL0jwt-%VA;;J*BW`{#ohG=uQ6D@PiN=Uz+%IXHS)amUlsM}9NMY= z%e?Ee-rs)p@x=4Il~*PX%#OAX8hj;We$AUv16>==eXlSsH@;c#iTmpIuk>=>);(_% z22A$PUDNnk6RZADN2d*od|oBnu~nxlv#-|dx2^lCgXxd2-R-$ITc4h_ef#dd=9OkH7*qb9 z*Zy-x)#}~}41PNA?YCQ!>5Jzb&UpT2>H(kEwLi9>dTeXbmmPD1l$*DV+Pvod^rks! zclY{^ay@nJ`jsK4-fkV0dAGvbedU|1m=v_m-f6^(lR-;nZndhI?Ut4Ae)RPG-~;1b zV!TG2^IdW=JAI_?{v*R5Om-U;tnKMNA)<4Z?}eHjD_Ra&bR_?+{koz>7ahvqoqsN_ z`PjJFZ4=Mr9qc|;QtO-Baj%zMj!W#4cen1bcd9L8mf)3rM?f<2)OV8F* zixzzv_Y}L}qqq9CoyaYtV**nM-CGaYrYM+Z^9> zr;5(y5!o&+t2pinEi9L_{_2tmsRN2lv};L*={ud+@o3$_J|Fu{x2$XAHr93BGG9fX zR}bG?ZvBuk_o~_aSsioY8-|<5e7Nzh@7`IB<6{TdJ+GD@{pi!=fjd0fUg`e0pC~9T z#<=+7hL?4N#52wAJv}roWzK-5yDmR{(qWoihUddY?onUf3Ad#fZ+l!-c>GGmG3lp2 zZx`KKUu}8)We0P5pI^~ichpLk1?N0Fzi@39a=**!S;?07jwOt{V%gWgaaDNOw4KE} zm*w18(|cEtVb7CYk8i18XRU75yi;q}x>j1nN#m_!l?CP}hK?<;Fqq=Uot@UEZ|Xu)c?QOf)o9@}} zG+%b~!fVUX$1at3wi%Mv{@&C4J($z2>Ckh=?9q`aMV{;4H=0p6&!_9Es8NNTw%@uE zxM+9vTkZC39DlTiaFN;N-Yy3NS320i$+;-D-e)&JbDdAr&>Er_`NadowFLA$*U z&#Qjc|LC#_C$AcM9oK%ib4QN!=z%>G9&&vuwQAR~uD|)yfHqs!KddWgD84h^AUfA> zwy9#He#DNn4~2`;r_Ty^*%jDs(9{Zd_1+&mI8(WE%AEUJ6}B`rswLjBYge02uVQji z4|WP0+W6P}%@*ly)nA-@vh7uMvE7aht!mr$z9tP8Tio7sYigd)<@|b{?vrNM)g3Uk zLRPDR@tqd;Yxy8E?n$SOn|fW$f3aj>lBJ7T)%gu-T)C>4_CC0S&E5AwCWiapztEfX zt$z*Q<4dR2IDGl^Gds)4neDC39O7LgZpX}+us->H)&;{o!%oz?SYgnk-LoI{-g9F7 z!)*tb8FhR(fAz!Gs~bE@NH_Q1+VR5ty6r3YrcB#>ciHJI`?PB16P`?)*v{m`vu7)l zGR?J`1{AqhYdmdW_WDOtR$Z{vZtIkn?zzLpM&VI!)5&geI>(J(&um$7e>+c)D$^2A ziSO>4d~wh1^Pv^88!g$KcBsOV4I2uF4VtWf+BZt;dO=igmw^MvcKFq5s?NTd<4iso z`Ja37;`aGx4pk5B7^!@^ILK?<-1FUBJ-XJ8S~c*L#i8*#>$mNCYu@@BikaPpYc+e5 z?$@--vP%x%yK|{x{(?sd6#dAFuCdXcxzQ5V2oCvMn^RJJ3m%F;}Y2|ZA zmyqe>{MyaUS~$N!v`_k+bhlM;mAL!Y1{{dr>^{n9Pwye+`&Z5N^4K{1`jUVe7ap$J zCJC+mV(0qux*6W4!|Ts{5PnRn(%h}bekt(S6Ig!J4zu!K4$m9u<)GcBaic?$!FPxC z9F;wK;m#>{v<594F=^K{r!84Cr+K}KshR)MvD#DrEoW*EXt|};3y+m8t!8*W5Zp-d zvp#&?H8?2$_TJrXY~+(o(j3}!$*fy9rbh6(NuyhDsIFIDf9Sj?86IXw+@D@Oa>>*! zbxMnz`*WkB2KO<3R5PWI)#Vu3`JVBoXDS01n47PExa-upU&O`NCd8b|+i#h5*7t!+ zm;CNS=WKKHzC5q(ljL?4#n0Qk9GD}&_VH9smj-L5ojdtxQr6}tyJxrVkX3tg(XVb} zRzIzJ-T(Dx=PpgQ7LK`47(QWk(W6A0&&EUFc{;6_D(to{E~(z~c5N26c=PV`v8K*x zmHOWeEm!^+m-OrQ312?Dr&JAHa%^&^_?t7be~DZ=y17S@?~0)@mzVU9uBT&^zhq1! z(N{OSIlT@)JF{WJ+;>`LZ<2DZCE53G6XkN!c;7;&7I6`Chs`|HVA9Mv+`^Cpv&L32 zY^$9ewYkZ=-HF`Mm#uuR8BNYNcYikWa%9i6TJuChk3FvZ`R$oU)ho{Q)hphc{ATZ( zntNWStd`H&G1{&6lVaQ8Q+FQPG}awbYv#0PGiMbobN05f{bt{J+bTQT^)WjSPB{B< z*VldJ2Hom*Xy5EP_qMK^7#Fb5s_Ui9P4@3b)k>A}KX z1Ifwml`3rO;#A4%)~>KkI=`+~SR7C38CLGZ-YI7~Sh-|RX#e5sdh_GrZ;v;2y3pEW zb>Q@O`_4VhDg1ixN{wzQ11q>Fx6fO>%}(YSKCx-jIqy^S18hDQ%9AU`oXBt(wcD<7 z`Ga5fI*lkkH+%p2t~CO+qEl@hwg(1p)Xr%+-f;7QgPj+)UsE@^V~viPhu6B-ifDE< zvBh4dRX5^FSF)AU;PU!!yWJs|8Ka%iSPbY z?xn=<+)QcTr3=1Ge=M7JTwFHYGp}sg{B@ah;@tUV($c;A%A_rVo|Q>|5Ymzc&7Who z^KMN7Hlo_9*6we}yaF|Abku+`obn@iG;(CEb1 zOVSS}YSle5sU+>4dH8W`mL{DzqDprC3l}x%)XY%Z*zprI>23Y=+gA=)r%5k=dZMt# z!87V~TC%aDyw`wab-G}6wbWg!!&a-)_J-2e4W=J2RHu{6&3+%-y8Rec+Ob%?%kF~i z^yR8_&+Fa&wN4)W^{6VnYOdLs4vwS3KC9B*mTV7ioSt=f37?j}(7w~v&Zt_;!+hEz zIKRftyuLS*-|}hOBZDgj+s_qOTFBCl32nEU=pG$eI4_r_CCj=b^!y{_Nk{2b>B z+EW{Dva z6*9OH9Y$!Ce>5#1@nOcQR;SM;UOYd)L+Yvs*^A+i{d`uA>)CO9LgUM8I`#_gzQ(bw z!CLc6{+>HhQx_<7Zx{9KQgkY$NcQf|w%6a5xjY?XG=0q2Ri+b1RCxJ*|B*QXW*2@n zU0Hru<7&Mv-)(HYNBDS3*rVgAF44=@ynnq&Z&+TvaB=b1ZRgxOp0fK@*uiXJmHG{O zEK60)ZsO#9L2!P3;*#et%#OT?-<5sZzMIqJb2pP4XFYzu<@#F1go!s#$BZ**)~4&M zMb?i~mc8~k;d5?H(YMZZVh?_*7j$HJ(EhfQQu7jOHmLk+#PbfVySqN0+}Hkc(eR5; z=Vfj`e&@yHsCiEcPB~BO{xGM?%6&DTKI`q!;M1YAHY2sj{mbpGE<*~|`F1^Xzw(Z`!_)U(@p7}T^=O~r z-PDsdUtJ%1Ox$}dW!0(;m1=F5?aP_(laUc*oN=<-!v4Ouf3bWT-*)cY{3nyr!o9NN zr>MAA?a%311yfonu5UWtrJ=Lu>UwRAE`8iM{;SEgeM?_e%C7LdbHzd_W$V@jV3@HD|R_{>b^BIjcmA`m8Rgjmus=fZ3D~gQj)AWuc zeY_cWIp4p2T<`XMmv26{b5*MWRcGuJg!ijolu>TzmwPA2hYj6cU)c3&tX!NwaOkGQ zZQ6ru`j6?+=X~pFF)yR8rkNhu?65)Z6WFz2__>f-m5x4aRr_Q$`@JGh`$D(QvHd^Q zJ)&?->y)82@@{USWtS>Tq8GQf@Gbw?dtt5NP9JIwIW#+|hi%TO)onOM`B^cF$TxAm zcjBM8Og|>|e6VNO{(uF?Yj-cIGZwm##2gbhvWH*5|b) zk6v|uSai7fNn)F4Zl~rLxkdE<<>m4{bu8q^)(vslGwV3YOaun`L;=Xt!If48IW z9K*$*Lc~wnw_Lb={*7swLvtp|a?Cs4H$2SUiJ!Nn-;O3vW;}V?|CamP+(knjZalry z(tn44L+jwz3;LT58b3Mm*;wxM&A6Ni!*e%0eCfZT;`)_|Is+~~c{nw^y6-c=WhvLLCKylEE@yN7+1lpq#`aooa(3B(7p`4$=05u6z{%UiXR9C8 z4bQB)GhT}F})5;Gjx-IJPEogt!1@3EVnvBnOO}dg?`J3zWQ3(%^_{A(8#U0Zj;F3`;DCPj7xoX_^l)lyRI`>7=jB;jE_2-(ygPD))}dCF z6?Knh*134TV|MzuZ4Y(N*yvjL=$eF@IX$`uk4ZXyr2OH|7uU~ERI4mIGSlTeFn@mE zga01b(jk7tw6E57-udB@Ve@AUo3VLq=WX-vnH9lpopM%4JiEGfrGts%Hzd!wrrq;$ zC;H6ZhKC|ME<6~*)u}V?k1?`m>Kh@ybbtG&P7nXQYTud<-=tTr3R9LQ$5i&Mcp~&J zZ=&<_sM!5x+O=>wjS}+ z#~&tmKK^LKj|&z|nV&ZM{9AEb*L1k}UzIxBq9ukP zzi+VTu4(UY>ycP(`dxot-8*~OnVnVj^GPFi`ivo)AEL!)_UE+Ru}GeH=u+G9EzdY- zT-Ix9l@y7Bi(;pi8$Ade6zx3-%?dODKPJ8FB zxkD<|eD$Y^TD7k>eLT0p#&0&K-uHuV`7>`n*X8(I=QbXi zw>KvpZ}4l6pqSmwSHCo7WAx(H)d#)2a#?WWYyU(aavfff+iyj)8Z+v-a;`02H?u?N zh(EvTbm@u4%{mX>(SG6DgdSNNLMq33&SqC`(Q^L9eZLH!_w=Jn9_g?(EcSsBOCFe3 z;qbPr9(iF>gW1v%e&>=G7e0~n(9}0Cc8om}QgP>Ide2+uog+_<{%^s9e|Ng~&6nlL ze^1!C?ew=bY8~Y&KfAidwiR5J%%rA=6z$0!OQz3zzVWA5kM411&zw1^%r|TRq_uPoqGw;iZ zyj<_v;NO2+J#cUE>yc}}`E2H~>}!>uJp0K04)y<99rndLzYa*)add0T-)AMH{81rt za%}ykjnC}+@#2dqYd%h_JU4pTpz1l_Rw{?W;w zc*hKEBt8C5`nOdoO*)_O{ae$Og>Q6xV{w<+b58A^kd?CV$+xzx8ep^^^77_Jj;Hs2 zJW(8z^yRNR`o$i3mVNhf(4=RAzi(gfY?X7DA92?C_w64})#)_!t97T3wTxf?e#3Du z)%>N={=a4n9J9Yw#DT0=_I-2D_xH~ll$EXMK_5-;-h0~UK`mxpNZwoVt#@{btB=S! zwc+2!uYENAU{dP8!F&5}dxttGxW8NaYD2p7u$5CX`6_Z3`rT90M!nLZaz?Kgo}fnj zcaZ+G(Tfv??_2Uk%YSklGkBoTo(f`)(^sFrZ<&*#J8FRJ2=ilG|8Fa2=uZkbMabarE@r1gQ&JC@+ zs7Lx^6WtRt-aoMB*ZW@itHwLSd&b`PZq+_nk#}k7HBUePN9Ku~v_Fq46@GrK&91#) zPhYU6*@n)8K07w+yVx(h!97;LIbW!9uvwdhDbH+s@57ljEBxYh9oxO-@rxfXuk_53 zuQ!Fyd%j+HyZMWj*82Fqhb#6N+3WRt*GGQ2XSP|>AggNjg0av1)%RGn@&7dLU9sif zmY>A`aP6u7v(nZrK9oN8?J1KkMI7A`|MLcHs1)66SF$?vV)=b%BIxdabGT@0;g;=n#Ce))#Y(W$Q;( zY#^MQ@WroFH-42{ZB&P`4>UXY9#f^m$@)V>R@C{o;*4PzdTzeFw12IQO!rS3ZFze1 zS@*Zc<2$WhdFX*9mo~ldAa$nQqRKDM`Xx9tw*9i+Gft0M*tpJ|-Y-2LIxA=12j4ep z`sTK?tNwa^$Y--o9en-oBb%~DC%qiKQLnP&z`0fPo@sJs&9^I3KHbpvSnBRqqA%dc|e1)_1E^ASAA)_EobJee{9Zxe|Bzp^vmio z?|=Ei`i!SGZff#+X8jG*R{V1AgV}?k;t$u(dj5$P2Y>wJ{;HR%JoTvl$oxn2i4Ux5 z`OxFX|66wH_lMSP{q5?a8c)1+j2$##`o&eX_vcg{(o}WAEwRzjlb)S0I`1?DIYuWa*%*AzuwdpnMAN;!9zJyEVuSQer zrtX`4&mX}r{-RbI@yWC6+V$XEqHw<37vDc{-)ob0?f>#i>oZ zEtoT7>w;sA*?GVIxH5W4!>Ki^y>|A2Pct6;TdniO*YExLf?7vzS@X)Cqi5q+Q$5a} znjJq{YNc+cKCLn%w0-K+cYQPcTW8Qa`=@MQwz|jO?r&G^z51I@Gg{pHe6#8OmUUiw z>e;$`%OCjp-(#Iyo$Ehk{dZ3~U+?hAk59byX_fF-epV_UexsxEWUD&aV_GkZT)N`Y zlIWkmj++oZy5fhC-_N8vKPZoR;=}rn8M)0aH9Guj`=^fnH|@0xf3(OQb>Y8F{j{&% zN)T6lmzg9j|2K2O$juL_1Nk399{=ULd$dX2B98b*ZXZJ(?f!~#xOwZv)xVhcPxjak zsf6K2FGWw--EKwuaod`xHNJcG%}1AofA;Xlu3y(SIp0b-6w`P^r_bMh?qX+kfcvjc zw?#GK4lZo>QrDa+53GInz&l^Bz3<@}Bf9P0y?)Lg-P32E?p}$hvnFfkwH<@bCJvw7 za?J2*mm7XnfxVV?Dt2n-))6}o%^fjh>iUPSeVA~C{kXy3+?VIFVpk3v`S8{?5472q zwz=&GOvSj*fA{!){Hn$mji>KfJ#pl{opN8DJZz7;H#f(4zh516z=`)LEjy0 z$FF+s{ny8Qy!ztRbIrOQdc5y@b7%7E^o#x8y!z*bMSV7X_05}KJ4Qaabf5dVL5p|n zO%3VuOW0)38}EPY=z1!*<&5x;6{Y8Q9af#c`0kKK@>`8QfBV6=_w4@l=S52=JpD$^ z{bFwOV;h|9PS)M={-C#iQp3A`JE77dSKkr8ozB{j{O#r4L#lojd4ldgvH!x4fA1Js zJJ%a^WzSPnf2z8A+qRzu%xy3#Xy28o57du2(f8M+n5O4q-`Lglp|3u#ob}jO^V-Ac zQpS#+KE8Lz$W;$L9P;lxIjX~q*b0wL z`R8JzmtS^Wx*$FIRilafUs7NH@2|y2KFrAq6+hbaO^-v{>rL1=xxcq+x1gyt(?0rQ z=IeJyl$-Zty}65bz3@YioSkdy9qH9KTl{@<`!{AUT~@{Y_3!=UmGgsF`5K=)ICp)MI5)?09!}uAoXAOT#?87px7*FTJ#NA6b&GC^XLy$9 zcsI}U9$w(RyvR!)#>09zkK4n0JRZU0^@tuxV1T>H32uQGJc1y21yPW^jFlM8K=oDFz6Wt;&dPG6=ilQh?R<#5E}+YY9>j*$`rlnm8GxJgR|ZU+g5B3TJykyRvOtOD*vOr9J= zusrON{17YGiy`$O*)xE2YsPXBTn}WjLdxvhGqO|dy2Ybz!@mA5emBBV7)$2X5IG9saZGkvag!k~hr^5K zodAYOb$rL;Xo$lBch@YO8-t$&D}>Z>H*i%(;QL9u1Hp44AG_V6hvsiL|M<$336e?- zffC7y0b0*!-O5(f3nJdk;rP=P?eO87DBy!|B&DVU0U7ure#~RD40J|%8emWe*fco|z*rtj|m-GOm#FGqcmv(=rIM4;jc9|8`g+fl9nFdbY!{BGQUo zJ&Crih<0$5j|!tB%asoakBAJ43JZ6ZD<4HgM3xH<3y-*6*HGLYEuYjG)xBf&x7&m~ z#r}Oe+b6J0bcw_9-QPjPG}Nv`lwAeK)6J(cF=W>ogvW<1>b#;Xc3Se zjo%Rg>4^o>2azW8(a!%pev{ZPJ53Bof$6^rq^}|!SbhaOzji?WUick|fkfT~ryRDa zi@X#0koO`V@^0iq-j969JCYB1Px7(ux?aCWagK~zyS|U%Hz_e2!P^<+KTOkPJqJV> zI70xiOT%IQz&-6oTDV`G@J%Y!9p4BwbKL9ywx87tY4W?b|GN*qN%i{U8zI(?A^0XV zWjMY`Irg_*r~1eo*oMTYMCz!?Ihi<8b@G1(`7b*I|2aI8@w6=s2O! zc3Q@}ll96@Cl^RBLz>Wi`}$&}TL+{+MVjC?+1K|V-7O$}0O{TV>0<@bgsze6q~5N) z(PQEG;ZokG?)GSx|N8d6mB0RdZ~kx4fLr++ zGU!(Rh7P&;zmdal0lHnRO5jpl zu+0C*#+07@K~LS{=a#5iJBQE%U^>8?Dfxz`7Rk$T0*B2A#=E+=t^88yO zb%Pv^TOxKtz+~M#xf@FAe@i59q{DFwL~j&%{w)zctwl+^OH|U0d6&F<0(h4|K0-}S z1H24DmKm2e7PK?~=#)sBvO(aS^I>ligcu7}2UpSwFKNQd5=8O5%rV)S=8is4*I2kh zP>p0+TkimAR!xi@fj-Y=C3D5ulfC(AgA#5CPN2pT*o)$iC69O~F<<&=~j=R%SbeDw|lkL|#yE z5T2RHII#>V4|)jvCVU*ZPI&3DIBex%sQ-KlzEg3e;Yi1EKMulklROzXGI5|NM>dX> z5uY7s-uHKPLi<&N@2~OLn|D7yd>}tC}7Yyta%rRrJZ(=x^eo(d>L2C6Zb1@b`u zSzVI>$PIvPGT!h2J4J2*{&^AtPJjUBFO;Y+vBkhx0wA1}4jf^#`f@TstIYv=5@5A5 z)9@0O^3NLH3Q%mZ4HZ#NYS{8a%}UG2fu<=Sm3P`~2vdt?!rz)&PXhuhw!DG-N@gOU zq_M?{9s@Mur0kS{YsqP8Ky%K(OIW3m7PBy&8tbv6V`DONQh*XQHiq2S1h~i;q4rCW zQh<@1swL-XPAxSR@WQaE2ByBPrUHwFHzP>M(36eNAgEOnAyh+AX4ea#&nhtF^|8>_ zk_nApr2PQpo(#}t;AH1POqox`j#4qn*zE{Xd8Va6RkAa4^a;ROHnp*4KI}D?nWLeF zNkgg`P|3B>0OqU$8jHLUUOGchB^57-ew zR9hJieK7FBuz8wEp<)RBe+)tX#+b<4O~ns^j5#tE^pEfWPv9VP?s}CovsE;9rjc!u z2%A2P!#!3pcrbK=agZGY>B@LqC-j2QQX=1z-{c@V3X&%CvOJEvaS&QWbO+=&If&kZ zTqE~3#3AA!*gQnWC-;*2;c;ep;^0)(g$stK^S@l7Kwnn`prjd2vZ0q2Zz(Llkn@WF|`WdaV;o`j}D{qG=p zyGc0g577)ffFn=-A*lX8X75oW2V1BF7&bWK`9%6>{MsvBkEeo&!QKZ*{C3{@yPEFz>kT?6G& zl(#&ECk91O^}{H`MFpc$bT!)LjCPg7&tMALEMWB2bk?G4)9q*~B$Pt1KGniWQQ34o zYMj$Whf%@KBd7ps8$wE?LxaOa#RR; zoRi+w&OyCj*WrAe8WrORPNE$yDm;enOFQtME~*+GL_JMcuUL+17+NiYqMADyyc;S> z)u%e5?P)p^Z`P7>qXB3-2yfn$4y8_$hNCbfqN9mcm-?Ps7~}wCSdgnRa9&=-Guj6^ z=w88HB3RcXN{DKLcMW&4C^v*^?W`X}g|?w0X+DgiLR~cFbJ8v}47H4MhTd(quGJIe zL!3b!DKrup5Kb3ft~@<3l)PjW($>~_jF#U~<6wN(AXjno7_*gh^1q7;a)eRz-&DBE zMLmJ%yQrA(#=&Oq1=G%0biyu_O;MkOps}d_l~F;IG%*;b&>I+s)Y zFgiRaf-dih#@wqIbXUzv)ZKIyx>~uKLA65bfV7QqjipoRmz|sF?erdcFa34o{;&h| zLHaQDZP0i0Pt?z@U+B{@f4csqF9uzrA{(`8)4R{yXPgbA(N z3_ADaURR~6f_Kp1hu3X<`EAd)6=yy==UG>|@)asJVfnbuUAp(^-AB`B&3=6DmiONO zVAp2{hHu$gqh?5GctoWtf)uxA?Kg+Qyid$q6B6F4jgd5WeuXsOj?-s`DsOH(fB9O% zfW=E=A~`hKM0P9yt`Ih+s^$~t=|3l@{nrP>osW8_QcPp&RqL& zmn-I;1`Qj##kg)gdiG5iIB3Yw;Uh<>x-m9$!h;XbTDk7!SKj?{tSldF8w+;zeAUG-g!L-~l_PCjz7H>`4aXw_Do zC8ru1##9cf>#Pw}qoL@!H>jm6JR~fnT}&faWSHQL3#uOCiVW%7-Rmyr4v7s74{qqJ z6-wuR**`isG^}oHXw%Bo8`i8;C9F3d)~Q^zknrGcp^d__BRaHc8r&)p}nJ*{t@;NaZ-&4Sw0rP5nCtGnpQ?dnvB3!)}}*);b+GZ&Tnu7Jk+ zHus+VIg$+;M~Pi4>>D1 z%QW7s7RNHmv0=}+(nlUYczRCXf0=ivz4nhx+(Y4v>+_|K|#U6bVzV$NLYpN zni16^tCfo`9~tF}c2=x-S6F4LimNJB%~?IH233=;Q#r=jjBXJTOEE5%=BTywI@kKp zi}aL1~x%=Q@BYm3w_`J2q@!=;YPX733xeA@TYkKaq&D-DEvH#$oe@&hK*veJ!?D+7b zJ%^8UTlDtlyS~`dy?39%_l@*DI%n>tEn9cIx9g*W6)IO5HvGarSFh!!+<*K;`8ug- zHEa1Ed}!m#$4~TnYkTD?wd-{0+Pe>#G!H%e`iEcdKlNQ;#%)MLx+WgMnyMjdHPIhnzwb^4xJN5XMg<3mwUfC^z+qg*jc9D zloPHgokDB4f-6kkP(F8kP)x|=n$BvWl&htScZE2qkl>IC;eDejh71gGx@v}pIYXTx zPH?NvNLP?EBA6+0wPU+Ah392FVos@1?3lj0iFAot^-DX%!I z2T!@;yf373Sk*8xUC zv)C+X%C!nrLt9p8;jCA_ZdC4U*ObMTBkq1=K~PJuICS}{VY%0_#?y*Yo&hTI{v`c7Ya8^WZ=TO&uVYySQ)(o#4*3*?cD|r3N$SN*& zg=_NRh9QwbK~r9hX&Q_RkGpc;an^7~m3t9(?SY`*M5b+q!%h>Q2?2+HYb~O^)RM*l z$Q(*VQze3H#7SVPE5wglDfU7p_osy;QjDtzWLLxW4=fsb$r=ap!8+y|*2|BB8eY-GD#G$OHSNeK&B~ zc6pFvk33l4yJE28aNQw}Z&%#6@%y^NPM!R2_?N%PBVrt^sr9dTZyN>OZ}A zY4=r9rB8P){;0~;^z}zCeQl;~oV*K{j+$v3x30qFlV&>Jk0aOo@+mWIA6$LSOxrjYC$4Tc(>CtJ ze^);+(;NIa5S6a&Hq*g=T!z?dUz_QDew>8v*N&R$@_yU`_1Z}@{ktDW;Gt`$%=B)5 zT>mrI&YS7x{y6(ruU$6Nq|f1lu=I;-L<+DzBo6(TYebttK2}_~)6@omhxW&5*EV-X z1J<-ZZdx>VS%4nPAIF?v?u_7Y*m1=v4&E%yj`MxQ^eBW+qd)HUc}FMnx*Z4mwy8mL zIPAF8ZyW>6>vo*zS;ufQZO3hvqck)9n?H`S5tVGFd-&rTJ5W%P;4|GHXE>Z9+8Bq! zj{6%=5eW!>GyXWd`P6JPZO6rJpca_vSN(BnA5lxqv>iA09ktR-+i_f%sSRd&xIeC{ zGX0vFw&R>wdb^qa-XC|=lm5U=+i^e!z1vKm@W1t3$%!WZID}TtNHcB61q^gnvab96^wXU+ z&9v<||CqDBnQr0tV}H@v+)Ueks4puBLjMc})ZLptzX+xgSQ^-V1HPgP-*^krr%jnM_`gTP|)${{n2w6y}c+lO!BpB|VdBRMcl-X}1ffpq9_!1~a5USNHRE;=wj(NB{!ZZr8L4d29nllXEHzfR)gY5IE--_K7Mw|Xz_ z?2LPG&*U>3rVneM(&DrWdFzbXq5UDI{_*tc!{^OC^r||jHVb3Jo;l&XBHkU<@?_RM zr~clvFZ8JEgTt?UzP;MR?p4l)b$;!Qc|tu9yJ*8U;T zM18Yxf9n048@^)fda1r}cdeoOI>eVBa7}$TbKveOXa3XAHr_t)pO22_9{nTr{1<1A z`u<4>${Pb`P;Nui(H>hr6iDy(r(DKmHZ?hG+qAB z*2|QOSi2mR?!rFPN$@hy(0$m=H6@n(M;*LGZFM?2jltx}$&8C@PmJI31KPyJp~i7> zKHqp{H1;CS@)-il8-k3`6H#OF7Z;akAcVxDupZtmd%OxOQ~j*{#Ywq71!l+5dTLx; zA8Y@h2`H^Vk%FT090E#IL1J{b$e>6?@ERUPa_e4?U?{vmC%`6Kpr&2R?8 zdUZwMjiC1VI;POux)oU#HAzGrJRa36p$NCGF^pSP83gsnyeuMhjOrsZ`&!Sg;z^?Eeks~D2*^`hNS zw#0IppdlJb<~YF+q|k(7%eI;+po7gW_aTHyk_ATBSdSrkbuS7f!B4UvONeHYIE7=v zqq_)vOp7)#ohOjM2RI5uRK?6{oM3L!)Fj`P$moFu?ky+fpDA&1*525Cu|=<*fpP5L z3mOl`*wRIV#|YLmRa2GnUCCD6!&DD~u2j(@<7IV`<3^y>vs2>YjN~kwP*DU-b1(+y z#KmFj@6l&s2EkcAIKPml_9$Kw24=8m6VA;>ce=&O=@Sr=QbAPF=c#FSmE+>bE@G&p z`Q5iEo&Kz#WScjlqV_C>M3>1Q!H&=3p~tJ;UF6)-6{17Q6-J zA!f_YfsMS0zmNGw3eV|=qUw@Y;aG2_uJHy25Bg$aO41lKK}OOz^lMyPf)0NQ4aJx~ z5x%T6AGyH?{V?LbP!Mluswk-}Yj{-MqX>6*x<2HrDvbus#)Hk$y5cu>FeU|CJBgEc zHI$;LAiNUCD~9UEl=4N1lg#{SUIg0_Y=Dm>@4o{|4uY`x2hu|5wn)%RIgmEU6I2G3rk-z zobZiCOO>&;wvYJn;+YzUSVUey2%{`}J*r&29k%gKg!9dKbh7zE{jqs9F}cSNXx<)e z4+jiA1Nk#_awAIM-GXG0ItYenD284`DA-<@oS^$~ElKu`#a?S#(pd6j4+0xCx6X>Z zftpKt&8`LW71LW}MH-)!mFP=JBSS3F&1i;OV-dNjiVQ1xYqc)e2$}E+!K=fiW+DtO zzBI!it1qHB$%IyU%w<*-bY9gJ-s7(AEtoyuRLn3`e@4(@Lq}G_EqGKz^wjB5R!T5B zBPlc6p7MEA%9oZ7Kdtz{z9;WFNH)FTtdUd9bjx=SI?I}4KEIP3URF0iL{)|Lf_!m; zSE^g)?)D09PSPa7;{k)g%1S+^xVOf`Q3E&$`p2t}Yy#=a$ht=gd^O^NWs^C0=c(vZ zpS9&4sw;?KS_~c0wYsRd6|KG)U*gl!iKZ|EeVve%0cw!}nI;3xfDzN6eQ_CYw1%W) zC;QUV#VG41W9cY3?%n6>86qW-iQB+25QfQ4Sa$X>( zDyx#@kwx8*8CCXbO}XM4&+KEBMCM|Gr(t2mFLQIx%w|kHE)ptUTwWsunL6o8_Gq*M z63rhf_>$>x0t0&&7Z*?5ZT#yGDX!4^V@84&oxLv#8GvTRLjsl`yrn1_q6VgrXB1WD zMX^O=pO1LLs>2j7m{J`<*$fZjqLFnJmoyAs&@e2tvE531Cv)#fyi#(SoJCeC43i|R zq-dR#l(bZzx!~iSu*kJ(S!UKIKg}@9A_N26X#obp>fBU0H7!#I3vCJ)qRzP`N%X3c zsL8Ctip9N$eYDEl{lp3Y&0Yq5I(==x}~xTBIgyn16FFyBlE3_r3~f-SCU4X-yM=hySWKGgV8`H zw&g?MX%(>O!SgsSj(D13nU24=`Jm}-tXN<;4a>Yo!>nXA-8+lA{#a{D1h(Hz&zZnNx`IRM1$tblG9bzj zrQk&lVO7%vN%WP-RNfj7YGmlTbZ>D3)g&S}m~b}x@1JvVLa{@|EUk+fH<8G#DlD{)Aj=ioqCys$gZ(Bw22wg1~FTWT+}6yrrOfaRaM^R$7c95v0;E zs5@a5$xhB9GYVe2C9DTlHtRk#y~*Ua1s`A%-Ir#IPgz zLM{EtL_yHNg+hw)dU#dg`SxuB2aCnzBoJPxzsc`pj!jA@OG6%~!$`7b2pSPx00p9m z9jaJrq6{7A9699BGkjz!bd=4}OJuW*v4pbrg->}_T1qE4jYG#oDr!C1A_@gqjs)yG zTxdFb!NPlV@K>s8NM4rhR5hL;CEz}*dRV})NMqf~>fEACQ>V-AuPZ9)=Aa*AJd*Af zylmIo{|K)vK%XMWg03^N;4!+1WMuk9qGDDDOcRWIg9TuVfNAcLb+@4~-IH$%7Z28w z@P#%T57i-&SE>q|DEaeCs@qG|*vNG>&U*d=bMn@6}5P|dr zim2%mPyYYz<0Uguz{Ny}Z`b^XsjMsGg(}RRNhSV~BWe=#nCN z1Wts|=vEE6ciV!DPeE}F7(Eg=w`6&O*=($;t8P`pNY@o;(E4O)LJIU`|Ac(C z^%I}03_^OY(+5kdU|l3vP*1bvNNb~3ShiRI7h#q`P*emip`Arg%&U2F)`0P8gXJ7s z)bhWnV(NJl4Ml-e?qS^uFo~e@9KaSHVAd1!sGux~vdHi%ppsP1qXV7HdZ@KDbjVIh z)~xjb6~vtMnWQ+87d6qN1A~b-+-^nZ29+uos5Gl8URHzlgws`R@Svhv%_i9;wi|d$ z2qpf8}hC1iLy@@ zA+9qJf!+6&j@Lvx6K$DaH&;M5vRF-1^OfM&x#D@qVrlZwvaIf9Fi8Y2gO+98%+T9U zV+|gP8aD^Ai&z#6&#)22j`_57OnVb42n;d-9f~*O56zXX#F-l)S`II*ZYez*qbfiZ zZJ;F}S_zsC(k^oD5jW-m{eyw1Y!PsU<`e{u@j^ugVkuz55`JVpLR(;gCW=&hA_f+r z>AI*Y0yr#DTL zS%auph1;woq7L#F>%zP7)G*p6qe~J39yz6K~lfvrBCa_sS!s|ax zDh_r+gu}h0LNCT?jA}o$z(PcN(z5mB%`20c#k_&S%1;{eO}hkBza2QWd`6OPk2dZ4X<8|w$)NfWhO#5PGt8)UiRpQ zsAAp;9`KrOW6T}V>Ff97S+eSdeM$roXJ9bY^wGTvzMk3lXoYo#Ym@<&QP_#ldN zi%?PnZcl@fns;-aM7DT~APMqA77yYVMA%kg^TT=~ut}wza(-0}ia@;yn4f6KtlI=>=kXw0W=Ert!qcMk>w2|%_PIXs0Ibw(E;ICu~s%XqZ0x1ZEP+2ZxG90NQ-*g-WT zIX&J~V#URcBSy19y6P7j0?%e*d4jl+mf}P7X$H6zM8=}O5^%Z;&UVMi-sU-21-cVU zQQp0HDTstB2Lp!Y0Sn+|+$k*!_P<{@m8Tm5b|S=57KP^sR}Sq4A1Dr1i68amcsRIdu* z+fs;_DhwpdZ}97>uo#H}rcELT60IIgoMi2X3}AL3g8R{bZm4&7UWYjtK}aeOlIW*z zgfaB1VzY>N2*Ym*F{fofM?kRpbklyO0sm6cVTp#T0Iy3~Wy%fJ0;{qT(dntMNxQR0 z-@&1fok~KRt%Yt}D~psDYuB&=^6%g80B{st~hGRR0)Pr85Bp(lCp%VVLGq`{V4OB#5$U8O3Nz{8y20 z9J$Zm(=l)f&NR89r#sMqlR^-Hd2>SQ$J5 zPNtykB16mcD)E{22A|oLQ>c_XIR7o3zR!e4u&BUPs%O4s-fw8{oRN{1(GjZf z8#Ih&5W@geN2~%zDOR0E{V&)_IPSr&Gl+?Zf~Dy|iul)}cND`SL>h zpt77tok4N&NtWkDafGGtaF|KO6`bbz9ed1$#iFV(xe1CUa;gN;8-7aaBNT-0qV>B; z@P!F%eY@q0asw({t4GPJxVf@rnnel4y|-z`h6&74d|5_qGhrIFAEWLJH*G3nOobv` zN}$^SRJ2E$jaS1uUA9+yoa$h&F{b+mh@$EL(VO^!Ky?fe!Q$XD({jdZ#Gpvl8#q?z ziWdu=457>r=U`kF!!r5X2fP&?1KqUwjVTO1OV{R-8ke;*o}h*nH#AJx4I(_iU7#Bl zqVB0iTG^Uo9(7~+6y{lrDT1()MHm~#BVu+-Znp|lZiV6IQ-C5Vh2;-?#f`Kv9pQUa zj4}r3-q2L(3=6BHF3RpF;SrjJ71;FDf}oP+IkFGsUMdvf=K)1i>&bALb;+Z@90QZQ+6ys;SG9Xd*hd^nX%uQyHu!xvEoCg$) z_qu_BuW)cLSwgia$Zwkj$V6Ac{qR!oz?l#37w`_|M0P0!n^X}Vl9&ku)F>GqX@pU> z-P$myHR#EJW93l=QPP)Dx2S`Fhk?!#_b`=n!$0*|%5B=nZa5wCu};rX74mgHgzEI= z#VM*g#e@<+&A9#R7$aj6YA6PK+_lSa5ZO0ZHP)J}3%INYV?S19mGH zy-e8e3;IKbx7k~uHeH|-0DZuuF+0(`mI%X;$B^A#s8F!p>(WZJSwmBIYnM{|T7KOt z=tZhuQ5;zhc%hbBjSfXT+_5|c4=)Ol^BSvACb1tB>*i=zFfPv2K9hkAfka`Zkn_0SiA&m@q`c?U4+94aK6xO0(8qZ?Cmf$AS~9fS)ed7|UJ} z=%>JYG)}?<^+0;pS$-WggNiRC8w`fmB@~OqnW=9YwA0s{sW1nIB?wD1d?`xEkbkYP zMh%P|Q1rn|LG=i%+wiO}iG?;JD-vwe#SIj)0|;OsIuOlct%SboYG5dwp<{6~UO4WF zaE#ng(o=7n9$1BYuv?ZSMTAVLc-WT;FJsnf)Yo>B2f={c7-HC3^L;uy@&#lAeX*OJzOH=H`e4vOxozP;PgO< zFwUTX0tv#!zH$yc?@UW)aqMa!2kE~Z10##LRx4=}UZJ)WZpS<7i+Hnb$H*Ggf~<&5 zY$P29(@j*D8%}=9?viFk5W#Q($s9uoCUFj`HyA=x55stj&805LlBs;hqkaPIsc= zj1TZn2c1rX(I3wSXFx(atf7K3MU~M#lBgrP1v}~R%ImkGOoMSl;|Vt!1HFKPw@_>` zVr{^hZVh46lbx6?wo;w_?}koEw$M1SwBjY5a|3y6%-0WU}4abu6Mf)4ICNF%vgLF<4vl~joR3NGyyxQ zzXF^AyC1QjOC*TH>)BS;0(A7Sz>6w$+d4wGgty9CfLl_qTJvT8udDPWr`g*V=# z`raZBkSM|W?S^}x7cntBwyN5B8)lmdy23*=K%5?8ZFuGVTV(FBot6kXYCt;SRhE}O zpdKh&@5TFw3CvGzilscom+7BxU6a!kIl0Y;;QEN%YqOEnz7^|9o<*mGr`$h=q~CVx-m za#oUiAJy4iGPN1I`6#8E+s8 z5lI~x{9=%0^+g~drUinNH3Uy9g1(o+#Q%>Nd3fUHy%K`0^uat}e4DB8qPh!@NgXKeqMdzc3gQ%!H2-J(=!V~>}JN++f)};M?FRW$52itqTs;zQi*sqqpBfra+tOZVhCa(RmqOR-7pQ zQ2M&VuU$15gs@}lQG@d;Crh7IcC&D6cf&v}i;&d4KbEn@!DI38?`7e<4G&pH`iT-t zO<&`)MZ#hciGy^)&t-hH$D_00K`}8k7S6@)U#R;^G%E*$!4odb4qz%Oz`i}1D>5uC zsGd21ezlqR0#m~jxnL24xkgVNokc>YA?)aq=9b~ti9keTB-_O zF3_^m$2>!jWl@3zpH%3OJitSMH@sW@J+C`W;TV#!fB4Gj*iS>VHC`a%i3Wnm2uB08 zJc0o|!l^R0DdYo$h@jFz;eYk!roXoN8;8XTjE+J$Tle721F1-LLu3g!U1SdLId4?t&BSwipw78`@RdPm>VJ>nWQI3Gvif6daw%MgpB9TIFX>>kphCpG2D5xd`zARvsc<5x|n~hl`h}v|zQ!$LH zxtiMHpaHwSpv7Q>gDKKyUGyPDDsu)MOuR=@(r40r3i7h%upyF5mTByTSEL05g5WY3 zese(8iN|s#n!xmz#0KebB{f7C;6+AN`A6tdiTpVLjv$>W8E$BoI8OBmFD@@tMeM7Ry=M7b|HAJ$inQ>RX!;*jabp~bcC5J8ah^Dyc)o;l*da~Kw5@| zJ=smp1TaJh_}4giHL|?O%_&_0sDZ!z5e|otV?lwD%mZT}HvuqHBZuAN>hrzH3ACKG%t+x9+{Ke5)b>ug0d9^$Q*x-+z2~R zh{l6RAc7<;q&tdM!wbwJx{!xzk#i5ImnOV~2a%76s)a>Df#OAG zo+(}aJfsb*1Tvb1hvpmM?+UY+ZeN<#y&mvG#th<+d4WXMBhcAUl_g~udDr`y5mZK% z7_eM$8;72IDeaH6EhL_pTf)IjH!n&F!G|IuZ&)Zy6+j#{ba8M#~D9P`Fr zG)bu{O3c)k)0~YUR-BkoSgE*z?timffIl)CUFHSNg%wPKQ=MA}WZv`i17%nKkkHH| z6}IeKHe|n05@7>$ARx0i;8!8K3G(<#x_NP}Rfx?%^SwwHE5pHi6oKM!-!+3={W9Dt z+8s!~^RpI^b+cp=Q4a7Vo%aGt0q`y`C5Wr(3IX_s798Cg8cx-v92t2UwK6&g6doUI zX)^%2C}T`O^W0!09Md?x>K?F&H7sJ2<8K- zh(O>H+Zi(*kc~+bHsD2y@uUmnV+dLrLVHr+_ym|aT~(oKBPM1d3hsUG2kL5BvFvOOq(&;MYWy^WL8pNIP=0`n2>}VIAOrye!Q-|LN_k~lZk*e z`4oLL;!Uuz4&1Rf(b%Jq1W=R13|ku?W2)axrD05FVp7Uxx?wS6$E+u45-Bt-E#+0Z ztY&mpHvptZ5E!8;GhQoWeiDcZkS>Vjh@C^c{p)4S57W69-i{uGUa~OfGh51-AGoW? zjkOZmO~huXTg#Xq(424`(OI1X_NnL<-zZ~#=yBnMXt;rq3bB#%yjj-#n#cf;2>#4) zH5FBHTN(3vCAh!=!v-9$q3EpkRvGgH^M&I?0-T1p7=}@{({a~*42J=pfRzA%1@J30 zvt%Gp4{B!kEn(CpDM>K8k)VHb2oi9|x6Al&;N8lItnffD%K_0$d#8-~!2n9YP9*hX z08}LJpxyCGS{e|OZv@{K2w3oL8J~)$K}CmvB+MKIO3?S{ng4UAL%(5!g>x@lP*?;E zYdpdZchVWflIlWnZlLqU(3AkOZV|YW)}uD>V~H$!T`NGF;^G1fL?6%{$~@5Q%`x+g zULVpO$om!<#pi!`eq|g+Ya(O%J9z~YlGY=ryXf0*o3!FBC5~g^TqCLg=HWyy`w^XV z+pVDHe$sd=1X=2k41uMK7&(9te|$4dqr;mMu}+ZDWF3*{$|v-sGL5I=ZnjygJ|>G* z3gr^9o3#0q9#~v~h0W0z&1R3^SRvcyGrD03%d-WUXqL5`9&$%202}+~^eBt3%x@02 zd~`eC96~yFPxi+mnmof7v~k-sDSPxaC6^4mTow}9uiOjo1m?Mt3E2M!xqFb26ilk zEnO5mhv-42r6G37MM(zOWE`6(q!P}^#6L^Y4udZN|6ZbNT;W_tkgK?9Qb=&J;@0qt zqjZ7|@_#EEI20J4$LKl*QS=Mkah$F*5FsCdIQs?eI8nUlZ4MwSJk^?f1atXYdO&7hBTc@ehnBKgZ&+&nKoG){eNQXJqr8}8#P0!X5f;#x((F=Epdo*t z`{wK7LPeHhD~JL`o}~NPMOsTxp)yOcHAI0je=N-$ggu%A965kF5lI28sh>)d32yL& zq+!np*5D0}`4! zDhR8m!NVK|NFTSt>C7Lcc{~Gja~=@JfURTTqGFte*l1HYt8oeCf=@B===FoffgYN3 z5eSg*9)Z}*^AKAABY371=NI1o7{j=gxJ zN&z$(UT&JA!X-lzG~v>XG60QKgC+rJN!U9{(mj{yp7CViD{dy)3sW(C4XhWi+lrEa z4V4&<*RIeFN+6G>=Fk-LuVQ5^mXQaIyLqP;bk;T6U2NHTLP8+{Ki7GuTv<>hjN-}8 z8=3>G&CmVjfGN&mk?#vBO$Z|ZmoQ6%VkS(3sFLHu#xrSCoi7AN>k(n(mLb?dVe^3o z`Fy1c{I?7qX745uKA)<&=ra3p<_G%V|6knE5!od164EBmZa0CgrBU^k- zcOD_ixZ8`WP;`Y$)wbhIFecr^5x$A;0DcDi(=|j_^B{D*G{f1aWaic6F>U%#lyqX! z%>azinNDxKDJT_3Z1R?Ej0cF2(6$2u4AFbcBhE%8kQM8a1&8#gv;S?bHKy(?=l>#X zxHwe$n;x$ckiZ$Jys<_A43l}x`Tysj-N2b9V0SwpTR^>tpeasOXFEsdIR@oJT`&hy zTwESTPpRff;FG{u!VaxNvIoYop=ysio95Tmm>bOzL^!ao5~m}$NrdAXBnZIJ&vCN( zZ^l3b6}GaZW}EKE3|42D1p#gXryH4<=Q_Ef@>u3Plk($1(5=Fr=tU%!8=zH;`h;^a zC}V+GrZS1A#+Lj?Q+upLw$i$7ea<~f(#V(p+lx_#Aykr12K z$QrhxgLuRn^KZF&&;;GS>LEA)!4v>A=Xsd`Rz7*_)q~~xwso!t?wKB}$&k0Orm5E|jnk!gL5wOoo5H^f|rQhzzj1JOFsGai#b|sdK_^4bKrthu<8) zG&yx;sdGZ@B*@sPgzO!HkbmXHQs;y<){BT#7MtT@GgJ?=s?<4Uo+tV$3kGJ6 zoc_yC$82w;d=~%aF?HLlcLH0qXlH@j@%TbAc%I`zfad|J#|EcROf~#(pjq2L1(IR} z)u)Yp$=R-$jD?1=?4chvQt&d-?0mP9{q87Jod_l>KZ;>UN4mK%qvb4tGS3QSQ@Nc z{%yA4cEG^R4lp{{vl?;4o1ErmgGJ=L9ten#NL8OSX`Bh18%x~WOyGP8xGoHXT4-=c zGDLQ>Gk-)c@wGE?9sA=45p^w2!-|-;E|M!?zx;q<=7dbd_6)2DxFE8}k&G=HUUjy( zF%N+y2Ls=1)z_SDZhSu?9<9Zjyp0b5dx#scaDm5huR9yqM8mYq`AsZ|*d7n$1z2n< z2k3sqy~WwkzAv9GCQ*@KEkU4wqRCKUisIH%3E+@ovVy8o)ZGE<+B`>r%#ezd1IANx zX+@X}K}5<3t3W$KVl&bRh&B}zOTHZGVd*%Lt?C(>bZ9d6Gs%`m>y)cMEGv#kTq64d z>skvX#~DN>zgmlpl{~RbOk)HrFo*;Z^cdiF2rU@C1>QD}U!ksDUhtZYPBhBk{(vXjTQK%h-pMozP+fJ6&;m^7*Ck_*Fw(O~6Eus0 Y3R}<6F+5uk6K-a+&`gY_7HGEr1IeNXr2qf` literal 0 HcmV?d00001 diff --git a/solitaire_server/web/replay.css b/solitaire_server/web/replay.css new file mode 100644 index 0000000..528e264 --- /dev/null +++ b/solitaire_server/web/replay.css @@ -0,0 +1,197 @@ +/* Solitaire Quest replay viewer — palette mirrors the desktop client's + midnight-purple Balatro tone (BG_BASE = #1A0F2E) and the dark felt + from the engine's TABLE_COLOUR. */ + +:root { + --bg: #0f0a1f; + --felt: #0f4c30; + --panel: #1a0f2e; + --panel-hi: #2d1b69; + --text: #f5f0ff; + --text-muted: #b5a8d5; + --accent: #ffd23f; + --red: #cc3344; + --black: #1a0f2e; + --card-bg: #ffffff; + --card-border: #ccc; + --card-w: 80px; + --card-h: 112px; + --gap: 12px; +} + +* { box-sizing: border-box; } + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; + background: var(--bg); + color: var(--text); + min-height: 100vh; + display: flex; + flex-direction: column; +} + +header { + padding: 16px 24px; + border-bottom: 1px solid rgba(255, 255, 255, 0.05); + display: flex; + flex-direction: column; + gap: 4px; +} + +h1 { + margin: 0; + font-size: 20px; + font-weight: 600; +} + +.muted { color: var(--text-muted); } + +main { + flex: 1; + display: flex; + flex-direction: column; + gap: 16px; + padding: 24px; + align-items: center; +} + +#board { + background: var(--felt); + border-radius: 12px; + padding: 24px; + width: min(100%, calc(7 * var(--card-w) + 8 * var(--gap))); + display: grid; + grid-template-columns: repeat(7, var(--card-w)); + grid-template-rows: var(--card-h) auto; + gap: var(--gap); + column-gap: var(--gap); + row-gap: 32px; +} + +/* Top row: stock, waste, [skip], 4 foundations. */ +.pile-stock { grid-column: 1; grid-row: 1; } +.pile-waste { grid-column: 2; grid-row: 1; } +.pile-foundation-0 { grid-column: 4; grid-row: 1; } +.pile-foundation-1 { grid-column: 5; grid-row: 1; } +.pile-foundation-2 { grid-column: 6; grid-row: 1; } +.pile-foundation-3 { grid-column: 7; grid-row: 1; } +.pile-tableau-0 { grid-column: 1; grid-row: 2; } +.pile-tableau-1 { grid-column: 2; grid-row: 2; } +.pile-tableau-2 { grid-column: 3; grid-row: 2; } +.pile-tableau-3 { grid-column: 4; grid-row: 2; } +.pile-tableau-4 { grid-column: 5; grid-row: 2; } +.pile-tableau-5 { grid-column: 6; grid-row: 2; } +.pile-tableau-6 { grid-column: 7; grid-row: 2; } + +.pile { + position: relative; + width: var(--card-w); + /* Tableau columns let cards stack downward. */ +} + +.pile-empty { + width: var(--card-w); + height: var(--card-h); + border: 2px dashed rgba(255, 255, 255, 0.15); + border-radius: 8px; +} + +.card { + position: absolute; + width: var(--card-w); + height: var(--card-h); + background: var(--card-bg); + border: 1px solid var(--card-border); + border-radius: 6px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); + padding: 4px 6px; + font-family: "Helvetica Neue", Arial, sans-serif; + font-weight: 600; + line-height: 1; + user-select: none; + transition: top 180ms ease, opacity 180ms ease; +} + +/* Tableau fan: cards beneath the top one peek through ~28 px down. */ +.pile-tableau-0 .card, +.pile-tableau-1 .card, +.pile-tableau-2 .card, +.pile-tableau-3 .card, +.pile-tableau-4 .card, +.pile-tableau-5 .card, +.pile-tableau-6 .card { + /* Per-card top set inline by JS (offset = idx * 28 px). */ +} + +.card.face-down { + background: + repeating-linear-gradient( + 45deg, + #482f97 0, + #482f97 6px, + #2d1b69 6px, + #2d1b69 12px + ); + color: transparent; + border-color: #4a3a8a; +} + +.card .corner { + position: absolute; + font-size: 14px; + line-height: 1.1; + text-align: center; +} + +.card .corner.top { top: 4px; left: 6px; } +.card .corner.bottom { bottom: 4px; right: 6px; transform: rotate(180deg); } + +.card.red { color: var(--red); } +.card.black { color: var(--black); } + +.card .center { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-size: 28px; +} + +#controls { + display: flex; + gap: 12px; + align-items: center; +} + +#controls button { + background: var(--panel-hi); + color: var(--text); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 6px; + padding: 8px 16px; + cursor: pointer; + font-size: 14px; + font-family: inherit; +} + +#controls button:hover:not(:disabled) { + background: var(--accent); + color: var(--black); +} + +#controls button:disabled { + opacity: 0.5; + cursor: default; +} + +#status { + display: flex; + gap: 24px; + font-size: 14px; +} + +#status #result.win { + color: var(--accent); + font-weight: 600; +} diff --git a/solitaire_server/web/replay.js b/solitaire_server/web/replay.js new file mode 100644 index 0000000..e899a63 --- /dev/null +++ b/solitaire_server/web/replay.js @@ -0,0 +1,203 @@ +// Solitaire Quest replay viewer. +// +// Pulls the replay JSON from `/api/replays/:id`, hands it to the +// `solitaire_wasm` ReplayPlayer (which owns a real solitaire_core +// `GameState` compiled to WebAssembly), and renders each step's pile +// snapshot as plain HTML cards. The WASM module is the single source +// of truth for the rules engine — we don't re-implement Klondike in JS. + +import init, { ReplayPlayer } from "/web/pkg/solitaire_wasm.js"; + +const STEP_INTERVAL_MS = 600; +const FAN_OFFSET_PX = 28; + +const SUIT_GLYPHS = { + clubs: "♣", + diamonds: "♦", + hearts: "♥", + spades: "♠", +}; + +const RED_SUITS = new Set(["diamonds", "hearts"]); + +const RANK_LABELS = [ + "", "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", +]; + +const board = document.getElementById("board"); +const captionEl = document.getElementById("caption"); +const progressEl = document.getElementById("progress"); +const scoreEl = document.getElementById("score"); +const movesEl = document.getElementById("moves"); +const resultEl = document.getElementById("result"); +const btnPlay = document.getElementById("btn-play"); +const btnStep = document.getElementById("btn-step"); +const btnPrev = document.getElementById("btn-prev"); + +let player = null; +let replayJson = null; +let playInterval = null; + +async function bootstrap() { + // /replays/ — pull the id off the path so we can fetch the JSON. + const id = window.location.pathname.split("/").pop(); + if (!id) { + captionEl.textContent = "No replay id in URL."; + return; + } + + let response; + try { + response = await fetch(`/api/replays/${id}`); + } catch (e) { + captionEl.textContent = `Network error: ${e}`; + return; + } + if (!response.ok) { + captionEl.textContent = `Server returned ${response.status}.`; + return; + } + const replay = await response.json(); + replayJson = JSON.stringify(replay); + + captionEl.textContent = + `Seed ${replay.seed} · ${replay.draw_mode} · ${replay.mode} ` + + `· ${formatDuration(replay.time_seconds)} win on ${replay.recorded_at} ` + + `· final score ${replay.final_score}`; + + await init(); + resetPlayer(); +} + +function resetPlayer() { + if (playInterval) { + clearInterval(playInterval); + playInterval = null; + btnPlay.textContent = "▶ Play"; + } + player = new ReplayPlayer(replayJson); + btnPrev.disabled = true; + btnStep.disabled = false; + btnPlay.disabled = false; + render(player.state()); +} + +function step() { + const snap = player.step(); + if (snap === null) { + finish(); + return null; + } + btnPrev.disabled = false; + render(snap); + return snap; +} + +function finish() { + if (playInterval) { + clearInterval(playInterval); + playInterval = null; + } + btnPlay.textContent = "▶ Play"; + btnPlay.disabled = true; + btnStep.disabled = true; +} + +function render(snap) { + if (!snap) return; + board.replaceChildren(); + renderPile("stock", snap.stock, false); + renderPile("waste", snap.waste, false); + snap.foundations.forEach((cards, idx) => + renderPile(`foundation-${idx}`, cards, false)); + snap.tableaus.forEach((cards, idx) => + renderPile(`tableau-${idx}`, cards, true)); + + progressEl.textContent = `step ${snap.step_idx} / ${snap.total_steps}`; + scoreEl.textContent = `Score ${snap.score}`; + movesEl.textContent = `Moves ${snap.move_count}`; + if (snap.is_won) { + resultEl.textContent = "✨ Won"; + resultEl.classList.add("win"); + } else { + resultEl.textContent = ""; + resultEl.classList.remove("win"); + } +} + +function renderPile(name, cards, fan) { + const pile = document.createElement("div"); + pile.className = `pile pile-${name}`; + if (cards.length === 0) { + const empty = document.createElement("div"); + empty.className = "pile-empty"; + pile.appendChild(empty); + board.appendChild(pile); + return; + } + cards.forEach((card, idx) => { + const top = fan ? idx * FAN_OFFSET_PX : 0; + pile.appendChild(buildCard(card, top)); + }); + board.appendChild(pile); +} + +function buildCard(card, top) { + const el = document.createElement("div"); + el.className = "card"; + el.style.top = `${top}px`; + if (!card.face_up) { + el.classList.add("face-down"); + return el; + } + el.classList.add(RED_SUITS.has(card.suit) ? "red" : "black"); + const label = RANK_LABELS[card.rank] || "?"; + const glyph = SUIT_GLYPHS[card.suit] || "?"; + + const top_corner = document.createElement("span"); + top_corner.className = "corner top"; + top_corner.textContent = `${label}\n${glyph}`; + el.appendChild(top_corner); + + const center = document.createElement("span"); + center.className = "center"; + center.textContent = glyph; + el.appendChild(center); + + const bottom_corner = document.createElement("span"); + bottom_corner.className = "corner bottom"; + bottom_corner.textContent = `${label}\n${glyph}`; + el.appendChild(bottom_corner); + return el; +} + +function formatDuration(seconds) { + const m = Math.floor(seconds / 60); + const s = seconds % 60; + return `${m}:${String(s).padStart(2, "0")}`; +} + +btnStep.addEventListener("click", () => { + if (player) step(); +}); + +btnPlay.addEventListener("click", () => { + if (!player) return; + if (playInterval) { + clearInterval(playInterval); + playInterval = null; + btnPlay.textContent = "▶ Play"; + return; + } + btnPlay.textContent = "⏸ Pause"; + playInterval = setInterval(() => { + const snap = step(); + if (snap === null) finish(); + }, STEP_INTERVAL_MS); +}); + +btnPrev.addEventListener("click", () => { + if (replayJson) resetPlayer(); +}); + +bootstrap();