From 749e70d3f3d10409d1235a1dd2817594ca79c199 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Mon, 27 Feb 2023 19:34:22 +0800 Subject: [PATCH 01/39] Started adding a WcgiRunner implementation to the wasmer-wasi crate --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b36842a027e..0696a72caa7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5998,9 +5998,9 @@ checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" [[package]] name = "winnow" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95fb4ff192527911dd18eb138ac30908e7165b8944e528b6af93aa4c842d345" +checksum = "ee7b2c67f962bf5042bfd8b6a916178df33a26eec343ae064cb8e069f638fa6f" dependencies = [ "memchr", ] From 1d26db153a0d1d52260d68e5777f3d6147151361 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Tue, 28 Feb 2023 22:58:30 +0800 Subject: [PATCH 02/39] Remove the (now redundant) wcgi-runner crate --- Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0696a72caa7..a0080384681 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2309,9 +2309,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "minisign" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce49953dd06a44e1034590bb619bfe8900c29500053c0c0f83e9260a34466aa5" +checksum = "b23ef13ff1d745b1e52397daaa247e333c607f3cff96d4df2b798dc252db974b" dependencies = [ "getrandom", "rpassword", @@ -2681,11 +2681,12 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "pbkdf2" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +checksum = "f0ca0b5a68607598bf3bad68f32227a8164f6254833f84eafaac409cd6746c31" dependencies = [ "digest", + "hmac", ] [[package]] @@ -3386,11 +3387,10 @@ checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" [[package]] name = "scrypt" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" dependencies = [ - "hmac", "pbkdf2", "salsa20", "sha2", From db2a66110c1c9f511ddcb5bed4f9ccf9aec6efea Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 1 Mar 2023 02:21:10 +0800 Subject: [PATCH 03/39] Miscellaneous refactoring and tidy-ups --- Cargo.lock | 7 ------ lib/c-api/Cargo.toml | 29 +++++++--------------- lib/cli/Cargo.toml | 53 ++++++++++++++++------------------------- lib/registry/Cargo.toml | 8 ++++++- lib/vfs/Cargo.toml | 8 +++++-- 5 files changed, 41 insertions(+), 64 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a0080384681..7acb6141226 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2435,12 +2435,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "nuke-dir" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6842d8099b88d19a64158a6cfdc3e9ad82c738c041dab98280ef7ba98d64fa" - [[package]] name = "num-integer" version = "0.1.45" @@ -5052,7 +5046,6 @@ dependencies = [ "libc", "log", "minisign", - "nuke-dir", "object 0.30.3", "pathdiff", "prettytable-rs", diff --git a/lib/c-api/Cargo.toml b/lib/c-api/Cargo.toml index 14c03c2ef25..b515f774bfd 100644 --- a/lib/c-api/Cargo.toml +++ b/lib/c-api/Cargo.toml @@ -16,13 +16,15 @@ edition = "2018" # `libwasmer.so`, `libwasmer.dylib`, `wasmer.dll` etc. But it creates # a conflict with the existing `wasmer` crate, see below. name = "wasmer" # ##lib.name## - # ^ DO NOT REMOVE, it's used the `Makefile`, see `build-docs-capi`. +# ^ DO NOT REMOVE, it's used the `Makefile`, see `build-docs-capi`. crate-type = ["staticlib", "cdylib"] #"cdylib", "rlib", "staticlib"] [dependencies] # We rename `wasmer` to `wasmer-api` to avoid the conflict with this # library name (see `[lib]`). -wasmer-api = { version = "=3.2.0-alpha.1", path = "../api", default-features = false, features = ["sys"], package = "wasmer" } +wasmer-api = { version = "=3.2.0-alpha.1", path = "../api", default-features = false, features = [ + "sys", +], package = "wasmer" } wasmer-compiler-cranelift = { version = "=3.2.0-alpha.1", path = "../compiler-cranelift", optional = true } wasmer-compiler-singlepass = { version = "=3.2.0-alpha.1", path = "../compiler-singlepass", optional = true } wasmer-compiler-llvm = { version = "=3.2.0-alpha.1", path = "../compiler-llvm", optional = true } @@ -51,13 +53,7 @@ wasmer-inline-c = "0.1.1" inline-c = "0.1.7" [features] -default = [ - "wat", - "cranelift", - "compiler", - "wasi", - "middlewares", -] +default = ["wat", "cranelift", "compiler", "wasi", "middlewares"] wat = ["wasmer-api/wat"] wasi = ["wasmer-wasix"] middlewares = [ @@ -76,18 +72,9 @@ compiler-headless = [ "wasmer-compiler/translator", "wasmer-compiler/compiler", ] -singlepass = [ - "wasmer-compiler-singlepass", - "compiler", -] -cranelift = [ - "wasmer-compiler-cranelift", - "compiler", -] -llvm = [ - "wasmer-compiler-llvm", - "compiler", -] +singlepass = ["wasmer-compiler-singlepass", "compiler"] +cranelift = ["wasmer-compiler-cranelift", "compiler"] +llvm = ["wasmer-compiler-llvm", "compiler"] wasmer-artifact-load = ["wasmer-compiler/wasmer-artifact-load"] wasmer-artifact-create = ["wasmer-compiler/wasmer-artifact-create"] static-artifact-load = ["wasmer-compiler/static-artifact-load"] diff --git a/lib/cli/Cargo.toml b/lib/cli/Cargo.toml index bee665e1ba0..f4dad3883ac 100644 --- a/lib/cli/Cargo.toml +++ b/lib/cli/Cargo.toml @@ -26,7 +26,9 @@ required-features = ["headless"] [dependencies] wasmer = { version = "=3.2.0-alpha.1", path = "../api", default-features = false } -wasmer-compiler = { version = "=3.2.0-alpha.1", path = "../compiler", features = ["compiler", ] } +wasmer-compiler = { version = "=3.2.0-alpha.1", path = "../compiler", features = [ + "compiler", +] } wasmer-compiler-cranelift = { version = "=3.2.0-alpha.1", path = "../compiler-cranelift", optional = true } wasmer-compiler-singlepass = { version = "=3.2.0-alpha.1", path = "../compiler-singlepass", optional = true } wasmer-compiler-llvm = { version = "=3.2.0-alpha.1", path = "../compiler-llvm", optional = true } @@ -36,7 +38,9 @@ wasmer-wasix = { version = "0.1.0", path = "../wasi", optional = true } wasmer-wasix-experimental-io-devices = { version = "0.1.0", path = "../wasi-experimental-io-devices", optional = true, features = ["link_external_libs"] } wasmer-wast = { version = "=3.2.0-alpha.1", path = "../../tests/lib/wast", optional = true } wasmer-cache = { version = "=3.2.0-alpha.1", path = "../cache", optional = true } -wasmer-types = { version = "=3.2.0-alpha.1", path = "../types", features = ["enable-serde"] } +wasmer-types = { version = "=3.2.0-alpha.1", path = "../types", features = [ + "enable-serde", +] } wasmer-registry = { version = "=4.0.0", path = "../registry" } wasmer-object = { version = "=3.2.0-alpha.1", path = "../object", optional = true } virtual-fs = { version = "0.1.0", path = "../vfs", default-features = false, features = ["host-fs"] } @@ -68,7 +72,6 @@ regex = "1.6.0" toml = "0.5.9" url = "2.3.1" libc = { version = "^0.2", default-features = false } -nuke-dir = { version = "0.1.0", optional = true } webc = { version = "5.0.0-rc.5", optional = true } isatty = "0.1.9" dialoguer = "0.10.2" @@ -79,7 +82,11 @@ cargo_metadata = "0.15.2" rusqlite = { version = "0.28.0", features = ["bundled"] } tar = "0.4.38" thiserror = "1.0.37" -time = { version = "0.3.17", default-features = false, features = ["parsing", "std", "formatting"] } +time = { version = "0.3.17", default-features = false, features = [ + "parsing", + "std", + "formatting", +] } log = "0.4.17" minisign = "0.7.2" semver = "1.0.14" @@ -92,7 +99,10 @@ tracing = { version = "0.1", optional = true } tracing-subscriber = { version = "0.3", features = [ "env-filter", "fmt" ], optional = true } [build-dependencies] -chrono = { version = "^0.4", default-features = false, features = [ "std", "clock" ] } +chrono = { version = "^0.4", default-features = false, features = [ + "std", + "clock", +] } [target.'cfg(target_os = "linux")'.dependencies] unix_mode = "0.1.3" @@ -120,12 +130,11 @@ host-net = [ "virtual-net/host-net" ] emscripten = ["wasmer-emscripten"] wat = ["wasmer/wat"] webc_runner = [ - "wasi", - "wasmer-wasix/webc_runner", - "wasmer-wasix/webc_runner_rt_wasi", - "wasmer-wasix/webc_runner_rt_wcgi", - "wasmer-wasix/webc_runner_rt_emscripten", - "nuke-dir", + "wasi", + "wasmer-wasix/webc_runner", + "wasmer-wasix/webc_runner_rt_wasi", + "wasmer-wasix/webc_runner_rt_wcgi", + "wasmer-wasix/webc_runner_rt_emscripten", "webc" ] compiler = [ @@ -133,28 +142,6 @@ compiler = [ "wasmer-compiler/compiler", "wasmer-wasix/compiler" ] -wasmer-artifact-create = ["compiler", - "wasmer/wasmer-artifact-load", - "wasmer/wasmer-artifact-create", - "wasmer-compiler/wasmer-artifact-load", - "wasmer-compiler/wasmer-artifact-create", - "wasmer-object", - ] -static-artifact-create = ["compiler", - "wasmer/static-artifact-load", - "wasmer/static-artifact-create", - "wasmer-compiler/static-artifact-load", - "wasmer-compiler/static-artifact-create", - "wasmer-object", - ] -wasmer-artifact-load = ["compiler", - "wasmer/wasmer-artifact-load", - "wasmer-compiler/wasmer-artifact-load", - ] -static-artifact-load = ["compiler", - "wasmer/static-artifact-load", - "wasmer-compiler/static-artifact-load", - ] experimental-io-devices = [ "wasmer-wasix-experimental-io-devices", diff --git a/lib/registry/Cargo.toml b/lib/registry/Cargo.toml index 217b6609686..aee1820cd97 100644 --- a/lib/registry/Cargo.toml +++ b/lib/registry/Cargo.toml @@ -13,7 +13,13 @@ dirs = "4.0.0" graphql_client = "0.11.0" serde = { version = "1.0.145", features = ["derive"] } anyhow = "1.0.65" -reqwest = { version = "0.11.12", default-features = false, features = ["rustls-tls", "blocking", "multipart", "json", "stream"] } +reqwest = { version = "0.11.12", default-features = false, features = [ + "rustls-tls", + "blocking", + "multipart", + "json", + "stream", +] } futures-util = "0.3.25" whoami = "1.2.3" serde_json = "1.0.85" diff --git a/lib/vfs/Cargo.toml b/lib/vfs/Cargo.toml index 2cd89312488..b80452d87fa 100644 --- a/lib/vfs/Cargo.toml +++ b/lib/vfs/Cargo.toml @@ -20,7 +20,11 @@ lazy_static = "1.4" fs_extra = { version = "1.2.0", optional = true } filetime = { version = "0.2.18", optional = true } bytes = "1" -tokio = { version = "1", features = [ "io-util", "sync", "macros" ], default_features = false } +tokio = { version = "1", features = [ + "io-util", + "sync", + "macros", +], default_features = false } pin-project-lite = "0.2.9" indexmap = "1.9.2" @@ -33,7 +37,7 @@ getrandom = { version = "0.2", features = [ "js" ] } [dev-dependencies] pretty_assertions = "1.3.0" tempfile = "3.4.0" -tokio = { version = "1", features = [ "io-util", "rt" ], default_features = false } +tokio = { version = "1", features = ["io-util", "rt"], default_features = false } [features] default = ["host-fs", "webc-fs", "static-fs"] From 414146c36b1344227f639ff55e47a6dbea84eddc Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 1 Mar 2023 13:14:18 +0800 Subject: [PATCH 04/39] Fix the C API crate --- lib/c-api/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/c-api/Cargo.toml b/lib/c-api/Cargo.toml index b515f774bfd..d367e787b3d 100644 --- a/lib/c-api/Cargo.toml +++ b/lib/c-api/Cargo.toml @@ -42,6 +42,7 @@ libc = { version = "^0.2", default-features = false } thiserror = "1" typetag = { version = "0.1", optional = true } paste = "1.0" +wasmer-vfs = { version = "3.2.0-alpha.1", path = "../vfs", optional = true } [dev-dependencies] field-offset = "0.3.3" From b0e182aa7c9ce7460093861ae62031d6e39de867 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 1 Mar 2023 16:53:33 +0800 Subject: [PATCH 05/39] We can run a WCGI server locally! --- lib/c-api/Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/c-api/Cargo.toml b/lib/c-api/Cargo.toml index d367e787b3d..b515f774bfd 100644 --- a/lib/c-api/Cargo.toml +++ b/lib/c-api/Cargo.toml @@ -42,7 +42,6 @@ libc = { version = "^0.2", default-features = false } thiserror = "1" typetag = { version = "0.1", optional = true } paste = "1.0" -wasmer-vfs = { version = "3.2.0-alpha.1", path = "../vfs", optional = true } [dev-dependencies] field-offset = "0.3.3" From e1c098ce53e05594b5bcb777cdfd306eb903a771 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Mon, 6 Mar 2023 19:55:03 +0800 Subject: [PATCH 06/39] Started implementing version 2 of "wasmer run" --- Cargo.lock | 11 + lib/cli/Cargo.toml | 42 ++- lib/cli/src/cli.rs | 11 +- lib/cli/src/commands.rs | 3 +- lib/cli/src/commands/add.rs | 7 +- lib/cli/src/commands/create_exe.rs | 2 - lib/cli/src/commands/run.rs | 67 ++--- lib/cli/src/commands/run/wasi.rs | 2 +- lib/cli/src/commands/run2.rs | 402 +++++++++++++++++++++++++++++ lib/cli/src/lib.rs | 1 - lib/cli/src/logging.rs | 32 ++- lib/wasi/src/runners/container.rs | 21 +- 12 files changed, 495 insertions(+), 106 deletions(-) create mode 100644 lib/cli/src/commands/run2.rs diff --git a/Cargo.lock b/Cargo.lock index 7acb6141226..8105f035ec4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -436,6 +436,16 @@ dependencies = [ "textwrap 0.16.0", ] +[[package]] +name = "clap-verbosity-flag" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0636f9c040082f8e161555a305f8cec1a1c2828b3d981c812b8c39f4ac00c42c" +dependencies = [ + "clap 3.2.23", + "log", +] + [[package]] name = "clap_derive" version = "3.2.18" @@ -5034,6 +5044,7 @@ dependencies = [ "cfg-if 1.0.0", "chrono", "clap 3.2.23", + "clap-verbosity-flag", "colored 2.0.0", "dialoguer", "dirs", diff --git a/lib/cli/Cargo.toml b/lib/cli/Cargo.toml index f4dad3883ac..af12480df22 100644 --- a/lib/cli/Cargo.toml +++ b/lib/cli/Cargo.toml @@ -32,15 +32,13 @@ wasmer-compiler = { version = "=3.2.0-alpha.1", path = "../compiler", features = wasmer-compiler-cranelift = { version = "=3.2.0-alpha.1", path = "../compiler-cranelift", optional = true } wasmer-compiler-singlepass = { version = "=3.2.0-alpha.1", path = "../compiler-singlepass", optional = true } wasmer-compiler-llvm = { version = "=3.2.0-alpha.1", path = "../compiler-llvm", optional = true } -wasmer-emscripten = { version = "=3.2.0-alpha.1", path = "../emscripten", optional = true } +wasmer-emscripten = { version = "=3.2.0-alpha.1", path = "../emscripten" } wasmer-vm = { version = "=3.2.0-alpha.1", path = "../vm" } -wasmer-wasix = { version = "0.1.0", path = "../wasi", optional = true } +wasmer-wasix = { version = "0.1.0", path = "../wasi", features = ["logging", "webc_runner", "webc_runner_rt_wcgi", "webc_runner_rt_wasi", "webc_runner_rt_emscripten", "host-fs"] } wasmer-wasix-experimental-io-devices = { version = "0.1.0", path = "../wasi-experimental-io-devices", optional = true, features = ["link_external_libs"] } wasmer-wast = { version = "=3.2.0-alpha.1", path = "../../tests/lib/wast", optional = true } -wasmer-cache = { version = "=3.2.0-alpha.1", path = "../cache", optional = true } -wasmer-types = { version = "=3.2.0-alpha.1", path = "../types", features = [ - "enable-serde", -] } +wasmer-cache = { version = "=3.2.0-alpha.1", path = "../cache" } +wasmer-types = { version = "=3.2.0-alpha.1", path = "../types", features = ["enable-serde"] } wasmer-registry = { version = "=4.0.0", path = "../registry" } wasmer-object = { version = "=3.2.0-alpha.1", path = "../object", optional = true } virtual-fs = { version = "0.1.0", path = "../vfs", default-features = false, features = ["host-fs"] } @@ -72,7 +70,7 @@ regex = "1.6.0" toml = "0.5.9" url = "2.3.1" libc = { version = "^0.2", default-features = false } -webc = { version = "5.0.0-rc.5", optional = true } +webc = { version = "5.0.0-rc.5" } isatty = "0.1.9" dialoguer = "0.10.2" tldextract = "0.6.0" @@ -95,8 +93,9 @@ pathdiff = "0.2.1" sha2 = "0.10.6" object = "0.30.0" wasm-coredump-builder = { version = "0.1.11" } -tracing = { version = "0.1", optional = true } -tracing-subscriber = { version = "0.3", features = [ "env-filter", "fmt" ], optional = true } +tracing = { version = "0.1" } +tracing-subscriber = { version = "0.3", features = [ "env-filter", "fmt" ] } +clap-verbosity-flag = "1" [build-dependencies] chrono = { version = "^0.4", default-features = false, features = [ @@ -117,26 +116,11 @@ default = [ "wasi", "emscripten", "compiler", - "wasmer-artifact-create", - "static-artifact-create", "webc_runner", - "tracing", ] -cache = ["wasmer-cache"] -cache-blake3-pure = ["wasmer-cache/blake3-pure"] wast = ["wasmer-wast"] -wasi = ["wasmer-wasix", "host-net"] host-net = [ "virtual-net/host-net" ] -emscripten = ["wasmer-emscripten"] wat = ["wasmer/wat"] -webc_runner = [ - "wasi", - "wasmer-wasix/webc_runner", - "wasmer-wasix/webc_runner_rt_wasi", - "wasmer-wasix/webc_runner_rt_wcgi", - "wasmer-wasix/webc_runner_rt_emscripten", - "webc" -] compiler = [ "wasmer-compiler/translator", "wasmer-compiler/compiler", @@ -159,11 +143,9 @@ llvm = [ "wasmer-compiler-llvm", "compiler", ] -debug = ["tracing", "wasmer-wasix/logging"] disable-all-logging = ["wasmer-wasix/disable-all-logging", "log/release_max_level_off"] headless = [] headless-minimal = ["headless", "disable-all-logging", "wasi"] -tracing = [ "dep:tracing", "tracing-subscriber" ] # Optional enable-serde = [ @@ -173,6 +155,14 @@ enable-serde = [ "wasmer-wasix/enable-serde", ] +# Deprecated. Code behind these feature flags will always be compiled. +cache = [] +cache-blake3-pure = ["wasmer-cache/blake3-pure"] +debug = [] +wasi = [] +emscripten = [] +webc_runner = [] + [target.'cfg(target_os = "windows")'.dependencies] colored = "2.0.0" diff --git a/lib/cli/src/cli.rs b/lib/cli/src/cli.rs index 5b65f312951..e04be7f8202 100644 --- a/lib/cli/src/cli.rs +++ b/lib/cli/src/cli.rs @@ -9,7 +9,8 @@ use crate::commands::CreateExe; #[cfg(feature = "wast")] use crate::commands::Wast; use crate::commands::{ - Add, Cache, Config, Init, Inspect, List, Login, Publish, Run, SelfUpdate, Validate, Whoami, + Add, Cache, Config, Init, Inspect, List, Login, Publish, Run, Run2, SelfUpdate, Validate, + Whoami, }; #[cfg(feature = "static-artifact-create")] use crate::commands::{CreateObj, GenCHeader}; @@ -160,6 +161,9 @@ enum WasmerCLIOptions { /// Add a WAPM package's bindings to your application. Add(Add), + + /// Run a WebAssembly file or WEBC container. + Run2(Run2), } impl WasmerCLIOptions { @@ -189,6 +193,7 @@ impl WasmerCLIOptions { Self::Binfmt(binfmt) => binfmt.execute(), Self::Whoami(whoami) => whoami.execute(), Self::Add(install) => install.execute(), + Self::Run2(run2) => run2.execute(), } } } @@ -241,8 +246,8 @@ fn wasmer_main_inner() -> Result<(), anyhow::Error> { } else { match command.unwrap_or(&"".to_string()).as_ref() { "add" | "cache" | "compile" | "config" | "create-obj" | "create-exe" | "help" - | "gen-c-header" | "inspect" | "init" | "run" | "self-update" | "validate" | "wast" - | "binfmt" | "list" | "login" | "publish" => WasmerCLIOptions::parse(), + | "gen-c-header" | "inspect" | "init" | "run" | "run2" | "self-update" | "validate" + | "wast" | "binfmt" | "list" | "login" | "publish" => WasmerCLIOptions::parse(), _ => { WasmerCLIOptions::try_parse_from(args.iter()).unwrap_or_else(|e| { match e.kind() { diff --git a/lib/cli/src/commands.rs b/lib/cli/src/commands.rs index 595ecc81530..a148799b745 100644 --- a/lib/cli/src/commands.rs +++ b/lib/cli/src/commands.rs @@ -18,6 +18,7 @@ mod list; mod login; mod publish; mod run; +mod run2; mod self_update; mod validate; #[cfg(feature = "wast")] @@ -34,7 +35,7 @@ pub use create_exe::*; pub use wast::*; pub use { add::*, cache::*, config::*, init::*, inspect::*, list::*, login::*, publish::*, run::*, - self_update::*, validate::*, whoami::*, + run2::Run2, self_update::*, validate::*, whoami::*, }; #[cfg(feature = "static-artifact-create")] pub use {create_obj::*, gen_c_header::*}; diff --git a/lib/cli/src/commands/add.rs b/lib/cli/src/commands/add.rs index 885dc1f9b38..cc66722ef0d 100644 --- a/lib/cli/src/commands/add.rs +++ b/lib/cli/src/commands/add.rs @@ -111,11 +111,8 @@ fn lookup_bindings_for_package( match all_bindings.iter().find(|b| b.language == *language) { Some(b) => { - #[cfg(feature = "debug")] - { - let Bindings { url, generator, .. } = b; - log::debug!("Found {pkg} bindings generated by {generator} at {url}"); - } + let Bindings { url, generator, .. } = b; + log::debug!("Found {pkg} bindings generated by {generator} at {url}"); Ok(b.clone()) } diff --git a/lib/cli/src/commands/create_exe.rs b/lib/cli/src/commands/create_exe.rs index 3ea8882054a..cabb2edfb38 100644 --- a/lib/cli/src/commands/create_exe.rs +++ b/lib/cli/src/commands/create_exe.rs @@ -2012,7 +2012,6 @@ mod http_fetch { .context("Could not lookup wasmer repository on Github.")?; if response.status_code() != StatusCode::new(200) { - #[cfg(feature = "debug")] log::warn!( "Warning: Github API replied with non-200 status code: {}. Response: {}", response.status_code(), @@ -2134,7 +2133,6 @@ mod http_fetch { let download_path = download_tempdir.path().join(&filename); let mut file = std::fs::File::create(&download_path)?; - #[cfg(feature = "debug")] log::debug!( "Downloading {} to {}", browser_download_url, diff --git a/lib/cli/src/commands/run.rs b/lib/cli/src/commands/run.rs index 610637558b1..03d1dd0fd53 100644 --- a/lib/cli/src/commands/run.rs +++ b/lib/cli/src/commands/run.rs @@ -1,6 +1,4 @@ -#[cfg(feature = "cache")] use crate::common::get_cache_dir; -#[cfg(feature = "debug")] use crate::logging; use crate::package_source::PackageSource; use crate::store::{CompilerType, StoreOptions}; @@ -11,26 +9,20 @@ use clap::Parser; use std::io::Write; use std::ops::Deref; use std::path::PathBuf; -#[cfg(feature = "cache")] use std::str::FromStr; use std::{fs::File, net::SocketAddr}; -#[cfg(feature = "emscripten")] use wasmer::FunctionEnv; use wasmer::*; -#[cfg(feature = "cache")] use wasmer_cache::{Cache, FileSystemCache, Hash}; use wasmer_types::Type as ValueType; -#[cfg(feature = "webc_runner")] use wasmer_wasix::runners::{Runner, WapmContainer}; -#[cfg(feature = "wasi")] mod wasi; -#[cfg(feature = "wasi")] -use wasi::Wasi; +pub(crate) use wasi::Wasi; /// The options for the `wasmer run` subcommand, runs either a package, URL or a file -#[derive(Debug, Parser, Clone, Default)] +#[derive(Debug, Parser, Clone)] pub struct Run { /// File to run #[clap(name = "SOURCE", parse(try_from_str))] @@ -48,7 +40,6 @@ pub struct RunWithoutFile { pub(crate) force_install: bool, /// Disable the cache - #[cfg(feature = "cache")] #[clap(long = "disable-cache")] pub(crate) disable_cache: bool, @@ -65,7 +56,6 @@ pub struct RunWithoutFile { /// A prehashed string, used to speed up start times by avoiding hashing the /// wasm module. If the specified hash is not found, Wasmer will hash the module /// as if no `cache-key` argument was passed. - #[cfg(feature = "cache")] #[clap(long = "cache-key", hide = true)] pub(crate) cache_key: Option, @@ -73,7 +63,6 @@ pub struct RunWithoutFile { pub(crate) store: StoreOptions, // TODO: refactor WASI structure to allow shared options with Emscripten - #[cfg(feature = "wasi")] #[clap(flatten)] pub(crate) wasi: Wasi, @@ -83,15 +72,12 @@ pub struct RunWithoutFile { pub(crate) enable_experimental_io_devices: bool, /// Enable debug output - #[cfg(feature = "debug")] #[clap(long = "debug", short = 'd')] pub(crate) debug: bool, - #[cfg(feature = "debug")] #[clap(long = "verbose")] pub(crate) verbose: Option, - #[cfg(feature = "webc_runner")] #[clap(flatten)] pub(crate) wcgi: WcgiOptions, @@ -131,39 +117,40 @@ impl RunWithPathBuf { self_clone.command_name.as_deref(), )?; - #[cfg(feature = "wasi")] - { - // See https://github.com/wasmerio/wasmer/issues/3492 - - // we need IndexMap to have a stable ordering for the [fs] mapping, - // otherwise overlapping filesystem mappings might not work - // since we want to control the order of mounting directories from the - // wasmer.toml file - let default = indexmap::IndexMap::default(); - let fs = manifest.fs.as_ref().unwrap_or(&default); - for (alias, real_dir) in fs.iter() { - let real_dir = self_clone.path.join(&real_dir); - if !real_dir.exists() { - #[cfg(feature = "debug")] - if self_clone.debug { - println!( - "warning: cannot map {alias:?} to {}: directory does not exist", - real_dir.display() - ); - } - continue; + // See https://github.com/wasmerio/wasmer/issues/3492 - + // we need IndexMap to have a stable ordering for the [fs] mapping, + // otherwise overlapping filesystem mappings might not work + // since we want to control the order of mounting directories from the + // wasmer.toml file + let default = indexmap::IndexMap::default(); + let fs = manifest.fs.as_ref().unwrap_or(&default); + for (alias, real_dir) in fs.iter() { + let real_dir = self_clone.path.join(&real_dir); + if !real_dir.exists() { + #[cfg(feature = "debug")] + if self_clone.debug { + println!( + "warning: cannot map {alias:?} to {}: directory does not exist", + real_dir.display() + ); } - - self_clone.options.wasi.map_dir(alias, real_dir.clone()); + continue; } + + self_clone.options.wasi.map_dir(alias, real_dir.clone()); } self_clone.path = pathbuf; } - #[cfg(feature = "debug")] if self.debug { - logging::set_up_logging(self_clone.verbose.unwrap_or(0)).unwrap(); + let level = match self_clone.verbose { + Some(1) => log::LevelFilter::Debug, + Some(_) | None => log::LevelFilter::Trace, + }; + logging::set_up_logging(level); } + let invoke_res = self_clone.inner_execute().with_context(|| { format!( "failed to run `{}`{}", diff --git a/lib/cli/src/commands/run/wasi.rs b/lib/cli/src/commands/run/wasi.rs index 6af4b3c39dc..e34118707d4 100644 --- a/lib/cli/src/commands/run/wasi.rs +++ b/lib/cli/src/commands/run/wasi.rs @@ -121,7 +121,7 @@ impl Wasi { program_name: String, args: Vec, ) -> Result<(WasiFunctionEnv, Instance)> { - let args = args.iter().cloned().map(|arg| arg.into_bytes()); + let args = args.into_iter().map(|arg| arg.into_bytes()); let map_commands = self .map_commands diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs new file mode 100644 index 00000000000..18334751452 --- /dev/null +++ b/lib/cli/src/commands/run2.rs @@ -0,0 +1,402 @@ +#![allow(missing_docs, unused)] + +use std::{ + fmt::Display, + fs::File, + io::{Read, Write}, + path::{Path, PathBuf}, + str::FromStr, +}; + +use anyhow::{Context, Error}; +use clap::Parser; +use tempfile::NamedTempFile; +use url::Url; +use wasmer::{Module, Store}; +use wasmer_compiler::ArtifactBuild; +use wasmer_registry::Package; +use wasmer_wasix::runners::WapmContainer; +use webc::metadata::Manifest; + +use crate::store::StoreOptions; + +/// The `wasmer run` subcommand. +#[derive(Debug, Parser)] +pub struct Run2 { + #[clap(flatten)] + verbosity: clap_verbosity_flag::Verbosity, + #[clap(flatten)] + wasmer_home: WasmerHome, + #[clap(flatten)] + store: StoreOptions, + #[clap(flatten)] + wasi: crate::commands::run::Wasi, + /// The function or command to invoke. + #[clap(short, long, aliases = &["command", "invoke"])] + entrypoint: Option, + /// Generate a coredump at this path if a WebAssembly trap occurs + #[clap(name = "COREDUMP PATH", long, parse(from_os_str))] + coredump_on_trap: Option, + /// The file, URL, or package to run. + #[clap(value_parser = PackageSource::infer)] + input: PackageSource, + /// Command-line arguments passed to the package + args: Vec, +} + +impl Run2 { + pub fn execute(&self) -> Result<(), Error> { + crate::logging::set_up_logging(self.verbosity.log_level_filter()); + + let target = self + .input + .resolve_target(&self.wasmer_home) + .with_context(|| format!("Unable to resolve \"{}\"", self.input))?; + + let (mut store, _) = self.store.get_store()?; + + let result = match target.load(&self.wasmer_home, &store)? { + ExecutableTarget::WebAssembly(wasm) => self.execute_wasm(&target, &wasm, &mut store), + ExecutableTarget::Webc(container) => self.execute_webc(&target, &container, &mut store), + }; + + if let Err(e) = &result { + if let Some(coredump) = &self.coredump_on_trap { + generate_coredump(e, target.path(), coredump).context("Unable")? + } + } + + result + } + + fn execute_wasm( + &self, + target: &TargetOnDisk, + module: &Module, + store: &mut Store, + ) -> Result<(), Error> { + if wasmer_emscripten::is_emscripten_module(module) { + execute_emscripten_module() + } else if wasmer_wasix::is_wasi_module(module) || wasmer_wasix::is_wasix_module(module) { + execute_wasi_module() + } else { + execute_pure_wasm_module() + } + } + + fn execute_webc( + &self, + target: &TargetOnDisk, + container: &WapmContainer, + store: &mut Store, + ) -> Result<(), Error> { + let command = match self.entrypoint.as_deref() { + Some(cmd) => cmd, + None => infer_webc_entrypoint(container.manifest()) + .context("Unable to infer the entrypoint. Please specify it manually")?, + }; + + todo!(); + } +} + +fn execute_pure_wasm_module() -> Result<(), Error> { + todo!() +} + +fn execute_wasi_module() -> Result<(), Error> { + todo!() +} + +fn execute_emscripten_module() -> Result<(), Error> { + todo!() +} + +fn infer_webc_entrypoint(manifest: &Manifest) -> Result<&str, Error> { + if let Some(entrypoint) = manifest.entrypoint.as_deref() { + return Ok(entrypoint); + } + + let commands: Vec<_> = manifest.commands.keys().collect(); + + match commands.as_slice() { + [] => anyhow::bail!("The WEBC file doesn't contain any executable commands",), + [one] => Ok(one.as_str()), + [..] => { + anyhow::bail!( + "Unable to determine the WEBC file's entrypoint. Please choose one of {commands:?}" + ); + } + } +} + +fn compile_directory_to_webc(dir: &Path, dest: W) -> Result<(), Error> { + todo!() +} + +#[derive(Debug, Clone, PartialEq)] +enum PackageSource { + File(PathBuf), + Dir(PathBuf), + Package(Package), + Url(Url), +} + +impl PackageSource { + fn infer(s: &str) -> Result { + if let Ok(url) = Url::parse(s) { + return Ok(PackageSource::Url(url)); + } + + let path = Path::new(s); + if path.exists() { + return Ok(PackageSource::File(path.to_path_buf())); + } + + if let Ok(pkg) = Package::from_str(s) { + return Ok(PackageSource::Package(pkg)); + } + + Err(anyhow::anyhow!( + "Unable to resolve \"{s}\" as a URL, package name, or file on disk" + )) + } + + /// Try to resolve the [`PackageSource`] to an artifact on disk. + /// + /// This will try to automatically download and cache any resources from the + /// internet. + fn resolve_target(&self, home: &impl DownloadCached) -> Result { + match self { + PackageSource::File(path) => TargetOnDisk::from_file(path.clone()), + PackageSource::Dir(d) => Ok(TargetOnDisk::Directory(d.clone())), + PackageSource::Package(pkg) => { + let cached = home.download_package(pkg)?; + Ok(TargetOnDisk::Webc(cached)) + } + PackageSource::Url(url) => { + let cached = home.download_url(url)?; + Ok(TargetOnDisk::Webc(cached)) + } + } + } +} + +impl Display for PackageSource { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + PackageSource::File(path) | PackageSource::Dir(path) => write!(f, "{}", path.display()), + PackageSource::Package(p) => write!(f, "{p}"), + PackageSource::Url(u) => write!(f, "{u}"), + } + } +} + +fn get_cached_package(pkg: &Package, home: &WasmerHome) -> Result, Error> { + todo!(); +} + +/// Something which can fetch resources from the internet and will cache them +/// locally. +trait DownloadCached { + fn download_package(&self, pkg: &Package) -> Result; + fn download_url(&self, url: &url::Url) -> Result; +} + +#[derive(Debug, Parser)] +struct WasmerHome { + /// The Wasmer home directory. + #[clap(long = "wasmer-dir", env = "WASMER_DIR")] + home: Option, + /// Override the registry packages are downloaded from. + #[clap(long, env = "WASMER_REGISTRY")] + registry: Option, + /// Skip all caching. + #[clap(long)] + no_cache: bool, +} + +impl WasmerHome { + fn wasmer_home(&self) -> Result { + if let Some(wasmer_home) = &self.home { + return Ok(wasmer_home.clone()); + } + + if let Some(user_home) = dirs::home_dir() { + return Ok(user_home.join(".wasmer")); + } + + anyhow::bail!("Unable to determine the Wasmer directory"); + } +} + +impl DownloadCached for WasmerHome { + fn download_package(&self, pkg: &Package) -> Result { + let home = self.wasmer_home()?; + let checkouts = wasmer_registry::get_checkouts_dir(&home); + todo!(); + } + + fn download_url(&self, url: &url::Url) -> Result { + let home = self.wasmer_home()?; + let checkouts = wasmer_registry::get_checkouts_dir(&home); + let temp = NamedTempFile::new()?; + todo!(); + } +} + +impl wasmer_cache::Cache for WasmerHome { + type SerializeError = wasmer::SerializeError; + type DeserializeError = wasmer::DeserializeError; + + unsafe fn load( + &self, + engine: &impl wasmer::AsEngineRef, + key: wasmer_cache::Hash, + ) -> Result { + todo!() + } + + fn store( + &mut self, + key: wasmer_cache::Hash, + module: &wasmer::Module, + ) -> Result<(), Self::SerializeError> { + todo!() + } +} + +/// A file/directory on disk that will be executed. +/// +/// Depending on the type of target and the command-line arguments, this might +/// be something the user passed in manually or something that was automatically +/// saved to `$WASMER_HOME` for caching purposes. +#[derive(Debug, Clone)] +enum TargetOnDisk { + WebAssemblyBinary(PathBuf), + Webc(PathBuf), + Directory(PathBuf), + Artifact(PathBuf), +} + +impl TargetOnDisk { + fn from_file(path: PathBuf) -> Result { + // Normally the first couple hundred bytes is enough to figure + // out what type of file this is. + let mut buffer = [0_u8; 512]; + + let mut f = File::open(&path) + .with_context(|| format!("Unable to open \"{}\" for reading", path.display(),))?; + let bytes_read = f.read(&mut buffer)?; + + let leading_bytes = &buffer[..bytes_read]; + + if wasmer::is_wasm(leading_bytes) { + Ok(TargetOnDisk::WebAssemblyBinary(path)) + } else if webc::detect(leading_bytes).is_ok() { + Ok(TargetOnDisk::Webc(path)) + } else if ArtifactBuild::is_deserializable(leading_bytes) { + Ok(TargetOnDisk::Artifact(path)) + } else { + anyhow::bail!("Unable to determine how to execute \"{}\"", path.display()); + } + } + + fn path(&self) -> &Path { + match self { + TargetOnDisk::WebAssemblyBinary(p) + | TargetOnDisk::Webc(p) + | TargetOnDisk::Directory(p) + | TargetOnDisk::Artifact(p) => p, + } + } + + fn load( + &self, + cache: &impl wasmer_cache::Cache, + store: &Store, + ) -> Result { + match self { + TargetOnDisk::Webc(webc) => { + // As an optimisation, try to use the mmapped version first. + if let Ok(container) = WapmContainer::from_path(webc.clone()) { + return Ok(ExecutableTarget::Webc(container)); + } + + // Otherwise, fall back to the version that reads everything + // into memory. + let bytes = std::fs::read(webc) + .with_context(|| format!("Unable to read \"{}\"", webc.display()))?; + let container = WapmContainer::from_bytes(bytes.into())?; + + Ok(ExecutableTarget::Webc(container)) + } + TargetOnDisk::Directory(dir) => { + let mut temp = NamedTempFile::new()?; + compile_directory_to_webc(&dir, &mut temp).with_context(|| { + format!("Unable to bundle \"{}\" was a WEBC package", dir.display()) + })?; + + todo!("Figure out where to put the compiled WEBC in a way that won't fill the disk over time"); + } + TargetOnDisk::WebAssemblyBinary(wasm) => { + let module = Module::from_file(store, wasm) + .context("Unable to load the module from a file")?; + Ok(ExecutableTarget::WebAssembly(module)) + } + TargetOnDisk::Artifact(artifact) => { + let module = unsafe { + Module::deserialize_from_file(store, artifact) + .context("Unable to deserialize the pre-compiled module")? + }; + Ok(ExecutableTarget::WebAssembly(module)) + } + } + } +} + +#[derive(Debug, Clone)] +enum ExecutableTarget { + WebAssembly(Module), + Webc(WapmContainer), +} + +fn generate_coredump(err: &Error, source: &Path, coredump_path: &Path) -> Result<(), Error> { + let err: &wasmer::RuntimeError = match err.downcast_ref() { + Some(e) => e, + None => { + log::warn!("no runtime error found to generate coredump with"); + return Ok(()); + } + }; + + let source_name = source.display().to_string(); + let mut coredump_builder = + wasm_coredump_builder::CoredumpBuilder::new().executable_name(&source_name); + + let mut thread_builder = wasm_coredump_builder::ThreadBuilder::new().thread_name("main"); + + for frame in err.trace() { + let coredump_frame = wasm_coredump_builder::FrameBuilder::new() + .codeoffset(frame.func_offset() as u32) + .funcidx(frame.func_index()) + .build(); + thread_builder.add_frame(coredump_frame); + } + + coredump_builder.add_thread(thread_builder.build()); + + let coredump = coredump_builder + .serialize() + .map_err(|e| Error::msg(e)) + .context("Coredump serializing failed")?; + + std::fs::write(&coredump_path, &coredump).with_context(|| { + format!( + "Unable to save the coredump to \"{}\"", + coredump_path.display() + ) + })?; + + Ok(()) +} diff --git a/lib/cli/src/lib.rs b/lib/cli/src/lib.rs index 5129d48be5e..5e9d4597aad 100644 --- a/lib/cli/src/lib.rs +++ b/lib/cli/src/lib.rs @@ -22,7 +22,6 @@ pub mod common; pub mod error; pub mod c_gen; pub mod cli; -#[cfg(feature = "debug")] pub mod logging; pub mod package_source; pub mod store; diff --git a/lib/cli/src/logging.rs b/lib/cli/src/logging.rs index bfa6148bcfa..a600165d6b3 100644 --- a/lib/cli/src/logging.rs +++ b/lib/cli/src/logging.rs @@ -1,28 +1,36 @@ //! Logging functions for the debug feature. -/// Subroutine to instantiate the loggers -#[cfg(any(feature = "tracing", feature = "debug"))] -pub fn set_up_logging(verbose: u8) -> Result<(), String> { - use tracing_subscriber::prelude::*; - use tracing_subscriber::{fmt, EnvFilter}; +use tracing_subscriber::{ + filter::Directive, fmt, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, +}; +/// Subroutine to instantiate the loggers +pub fn set_up_logging(level: log::LevelFilter) { let fmt_layer = fmt::layer() .with_target(false) .with_span_events(fmt::format::FmtSpan::CLOSE) .with_thread_ids(true) .compact(); - let filter_layer = EnvFilter::try_from_default_env() - .or_else(|_| match verbose { - 1 => EnvFilter::try_new("debug"), - _ => EnvFilter::try_new("trace"), - }) - .unwrap(); + let filter_layer = EnvFilter::builder() + .with_default_directive(log_directive(level)) + .from_env_lossy(); tracing_subscriber::registry() .with(filter_layer) .with(fmt_layer) .init(); +} + +fn log_directive(level: log::LevelFilter) -> Directive { + let tracing_level = match level { + log::LevelFilter::Off => tracing::level_filters::LevelFilter::OFF, + log::LevelFilter::Error => tracing::level_filters::LevelFilter::ERROR, + log::LevelFilter::Warn => tracing::level_filters::LevelFilter::WARN, + log::LevelFilter::Info => tracing::level_filters::LevelFilter::INFO, + log::LevelFilter::Debug => tracing::level_filters::LevelFilter::DEBUG, + log::LevelFilter::Trace => tracing::level_filters::LevelFilter::TRACE, + }; - Ok(()) + tracing_level.into() } diff --git a/lib/wasi/src/runners/container.rs b/lib/wasi/src/runners/container.rs index 66de75a1bca..810f5b6c0ca 100644 --- a/lib/wasi/src/runners/container.rs +++ b/lib/wasi/src/runners/container.rs @@ -192,22 +192,13 @@ impl Bindings for WitBindings { } /// Error that ocurred while parsing the .webc file -#[derive(Debug)] +#[derive(Debug, thiserror::Error)] pub enum WebcParseError { /// Parse error - Parse(webc::v1::Error), - Detect(webc::DetectError), + #[error("Unable to parse the WEBC file")] + Parse(#[from] webc::v1::Error), + #[error("Unable to determine the WEBC version")] + Detect(#[from] webc::DetectError), + #[error("Unsupported WEBC version, {_0}")] UnsupportedVersion(Version), } - -impl From for WebcParseError { - fn from(e: webc::v1::Error) -> Self { - WebcParseError::Parse(e) - } -} - -impl From for WebcParseError { - fn from(e: webc::DetectError) -> Self { - WebcParseError::Detect(e) - } -} From 06a4daede747e8b5b17de00486bf3aeb1d8aa2dd Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Tue, 7 Mar 2023 01:52:16 +0800 Subject: [PATCH 07/39] Revert some unnecessary Cargo.toml formatting --- Cargo.lock | 242 ++++++++++++++++++++-------------------- lib/c-api/Cargo.toml | 29 +++-- lib/cli/Cargo.toml | 46 +++++--- lib/registry/Cargo.toml | 8 +- lib/vfs/Cargo.toml | 6 +- 5 files changed, 174 insertions(+), 157 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8105f035ec4..9fe18ed172f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -69,9 +69,9 @@ checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" [[package]] name = "arbitrary" -version = "1.2.3" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e90af4de65aa7b293ef2d09daff88501eb254f58edde2e1ac02c82d873eadad" +checksum = "e2d098ff73c1ca148721f37baad5ea6a465a13f9573aba8641fbbbae8164a54e" dependencies = [ "derive_arbitrary", ] @@ -224,9 +224,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] @@ -308,9 +308,9 @@ checksum = "38fcc2979eff34a4b84e1cf9a1e3da42a7d44b3b690a40cdcb23e3d556cfb2e5" [[package]] name = "camino" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6031a462f977dd38968b6f23378356512feeace69cef817e1a4475108093cec3" +checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" dependencies = [ "serde", ] @@ -332,7 +332,7 @@ checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" dependencies = [ "camino", "cargo-platform", - "semver 1.0.16", + "semver 1.0.17", "serde", "serde_json", "thiserror", @@ -386,9 +386,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ "iana-time-zone", "js-sys", @@ -400,9 +400,9 @@ dependencies = [ [[package]] name = "cipher" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", @@ -586,9 +586,9 @@ checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" [[package]] name = "constant_time_eq" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" +checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" [[package]] name = "cooked-waker" @@ -834,9 +834,9 @@ dependencies = [ [[package]] name = "csv" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af91f40b7355f82b0a891f50e70399475945bb0b0da4f1700ce60761c9d3e359" +checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad" dependencies = [ "csv-core", "itoa", @@ -915,9 +915,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ "darling_core", "darling_macro", @@ -925,9 +925,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", @@ -938,9 +938,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", @@ -960,9 +960,9 @@ dependencies = [ [[package]] name = "derive_arbitrary" -version = "1.2.3" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8beee4701e2e229e8098bbdecdca12449bc3e322f137d269182fa1291e20bd00" +checksum = "f3cdeb9ec472d588e539a818b2dee436825730da08ad0017c4b1a17676bdc8b7" dependencies = [ "proc-macro2", "quote", @@ -1312,9 +1312,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" +checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" dependencies = [ "futures-channel", "futures-core", @@ -1327,9 +1327,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" dependencies = [ "futures-core", "futures-sink", @@ -1337,15 +1337,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" [[package]] name = "futures-executor" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" dependencies = [ "futures-core", "futures-task", @@ -1354,15 +1354,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" [[package]] name = "futures-macro" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" +checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", @@ -1371,21 +1371,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" [[package]] name = "futures-task" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" [[package]] name = "futures-util" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" dependencies = [ "futures-channel", "futures-core", @@ -1738,9 +1738,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.24" +version = "0.14.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" dependencies = [ "bytes", "futures-channel", @@ -1966,10 +1966,11 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +checksum = "76e86b86ae312accbf05ade23ce76b625e0e47a255712b7414037385a1c05380" dependencies = [ + "hermit-abi 0.3.1", "libc", "windows-sys 0.45.0", ] @@ -2073,9 +2074,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.139" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "libfuzzer-sys" @@ -2149,7 +2150,7 @@ dependencies = [ "lazy_static", "libc", "regex", - "semver 1.0.16", + "semver 1.0.17", ] [[package]] @@ -2582,9 +2583,9 @@ dependencies = [ [[package]] name = "orbclient" -version = "0.3.42" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba683f1641c11041c59d5d93689187abcab3c1349dc6d9d70c550c9f9360802f" +checksum = "974465c5e83cf9df05c1e4137b271d29035c902e39e5ad4c1939837e22160af8" dependencies = [ "cfg-if 1.0.0", "libc", @@ -2803,15 +2804,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", "termtree", @@ -2885,9 +2886,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" dependencies = [ "unicode-ident", ] @@ -2949,9 +2950,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -3269,7 +3270,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.16", + "semver 1.0.17", ] [[package]] @@ -3494,9 +3495,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" dependencies = [ "serde", ] @@ -3518,9 +3519,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.152" +version = "1.0.156" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" dependencies = [ "serde_derive", ] @@ -3557,9 +3558,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.156" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" dependencies = [ "proc-macro2", "quote", @@ -3957,9 +3958,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "test-generator" @@ -4224,9 +4225,9 @@ checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" [[package]] name = "toml_edit" -version = "0.19.4" +version = "0.19.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1eb0622d28f4b9c90adc4ea4b2b46b47663fde9ac5fafcb14a1369d5508825" +checksum = "dc18466501acd8ac6a3f615dd29a3438f8ca6bb3b19537138b3106e575621274" dependencies = [ "indexmap", "toml_datetime", @@ -4413,9 +4414,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" +checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" [[package]] name = "unicode-ident" @@ -4683,12 +4684,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -4889,9 +4889,9 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f7d56227d910901ce12dfd19acc40c12687994dfb3f57c90690f80be946ec5" +checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" dependencies = [ "leb128", ] @@ -5064,7 +5064,7 @@ dependencies = [ "reqwest", "rpassword", "rusqlite", - "semver 1.0.16", + "semver 1.0.17", "serde", "serde_json", "sha2", @@ -5184,7 +5184,7 @@ dependencies = [ "rayon", "regex", "rustc_version 0.4.0", - "semver 1.0.16", + "semver 1.0.17", "smallvec", "target-lexicon 0.12.6", "wasmer-compiler", @@ -5329,7 +5329,7 @@ dependencies = [ "rand", "regex", "reqwest", - "semver 1.0.16", + "semver 1.0.17", "serde", "serde_json", "tar", @@ -5366,7 +5366,7 @@ checksum = "4232db0aff83ed6208d541ddcf1bf72730673528be8c4fe13c6369060f6e05a7" dependencies = [ "anyhow", "indexmap", - "semver 1.0.16", + "semver 1.0.17", "serde", "serde_cbor", "serde_json", @@ -5599,9 +5599,9 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.101.1" +version = "0.102.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf2f22ef84ac5666544afa52f326f13e16f3d019d2e61e704fd8091c9358b130" +checksum = "48134de3d7598219ab9eaf6b91b15d8e50d31da76b8519fe4ecfcec2cf35104b" dependencies = [ "indexmap", "url", @@ -5609,12 +5609,12 @@ dependencies = [ [[package]] name = "wasmprinter" -version = "0.2.52" +version = "0.2.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "003f2e37b9b7caac949d388e185ecd9139f51441249a23880b0cf38e10cdf647" +checksum = "2dc17ae63836d010a2bf001c26a5fedbb9a05e5f71117fb63e0ab878bfbe1ca3" dependencies = [ "anyhow", - "wasmparser 0.101.1", + "wasmparser 0.102.0", ] [[package]] @@ -5637,23 +5637,23 @@ dependencies = [ [[package]] name = "wast" -version = "54.0.1" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d48d9d731d835f4f8dacbb8de7d47be068812cb9877f5c60d408858778d8d2a" +checksum = "4984d3e1406571f4930ba5cf79bd70f75f41d0e87e17506e0bd19b0e5d085f05" dependencies = [ "leb128", "memchr", "unicode-width", - "wasm-encoder 0.24.1", + "wasm-encoder 0.25.0", ] [[package]] name = "wat" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1db2e3ed05ea31243761439194bec3af6efbbaf87c4c8667fb879e4f23791a0" +checksum = "af2b53f4da14db05d32e70e9c617abdf6620c575bd5dd972b7400037b4df2091" dependencies = [ - "wast 54.0.1", + "wast 55.0.0", ] [[package]] @@ -5837,9 +5837,9 @@ checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" [[package]] name = "whoami" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45dbc71f0cdca27dc261a9bd37ddec174e4a0af2b900b890f378460f745426e3" +checksum = "2c70234412ca409cc04e864e89523cb0fc37f5e1344ebed5a3ebf4192b6b9f68" dependencies = [ "wasm-bindgen", "web-sys", @@ -5896,12 +5896,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -5915,24 +5915,24 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_x86_64_msvc 0.42.2", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_msvc" @@ -5942,9 +5942,9 @@ checksum = "cd761fd3eb9ab8cc1ed81e56e567f02dd82c4c837e48ac3b2181b9ffc5060807" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_i686_gnu" @@ -5954,9 +5954,9 @@ checksum = "cab0cf703a96bab2dc0c02c0fa748491294bf9b7feb27e1f4f96340f208ada0e" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_msvc" @@ -5966,9 +5966,9 @@ checksum = "8cfdbe89cc9ad7ce618ba34abc34bbb6c36d99e96cae2245b7943cd75ee773d0" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_x86_64_gnu" @@ -5978,15 +5978,15 @@ checksum = "b4dd9b0c0e9ece7bb22e84d70d01b71c6d6248b81a3c60d11869451b4cb24784" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_msvc" @@ -5996,15 +5996,15 @@ checksum = "ff1e4aa646495048ec7f3ffddc411e1d829c026a2ec62b39da15c1055e406eaa" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "winnow" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee7b2c67f962bf5042bfd8b6a916178df33a26eec343ae064cb8e069f638fa6f" +checksum = "23d020b441f92996c80d94ae9166e8501e59c7bb56121189dc9eab3bd8216966" dependencies = [ "memchr", ] diff --git a/lib/c-api/Cargo.toml b/lib/c-api/Cargo.toml index b515f774bfd..14c03c2ef25 100644 --- a/lib/c-api/Cargo.toml +++ b/lib/c-api/Cargo.toml @@ -16,15 +16,13 @@ edition = "2018" # `libwasmer.so`, `libwasmer.dylib`, `wasmer.dll` etc. But it creates # a conflict with the existing `wasmer` crate, see below. name = "wasmer" # ##lib.name## -# ^ DO NOT REMOVE, it's used the `Makefile`, see `build-docs-capi`. + # ^ DO NOT REMOVE, it's used the `Makefile`, see `build-docs-capi`. crate-type = ["staticlib", "cdylib"] #"cdylib", "rlib", "staticlib"] [dependencies] # We rename `wasmer` to `wasmer-api` to avoid the conflict with this # library name (see `[lib]`). -wasmer-api = { version = "=3.2.0-alpha.1", path = "../api", default-features = false, features = [ - "sys", -], package = "wasmer" } +wasmer-api = { version = "=3.2.0-alpha.1", path = "../api", default-features = false, features = ["sys"], package = "wasmer" } wasmer-compiler-cranelift = { version = "=3.2.0-alpha.1", path = "../compiler-cranelift", optional = true } wasmer-compiler-singlepass = { version = "=3.2.0-alpha.1", path = "../compiler-singlepass", optional = true } wasmer-compiler-llvm = { version = "=3.2.0-alpha.1", path = "../compiler-llvm", optional = true } @@ -53,7 +51,13 @@ wasmer-inline-c = "0.1.1" inline-c = "0.1.7" [features] -default = ["wat", "cranelift", "compiler", "wasi", "middlewares"] +default = [ + "wat", + "cranelift", + "compiler", + "wasi", + "middlewares", +] wat = ["wasmer-api/wat"] wasi = ["wasmer-wasix"] middlewares = [ @@ -72,9 +76,18 @@ compiler-headless = [ "wasmer-compiler/translator", "wasmer-compiler/compiler", ] -singlepass = ["wasmer-compiler-singlepass", "compiler"] -cranelift = ["wasmer-compiler-cranelift", "compiler"] -llvm = ["wasmer-compiler-llvm", "compiler"] +singlepass = [ + "wasmer-compiler-singlepass", + "compiler", +] +cranelift = [ + "wasmer-compiler-cranelift", + "compiler", +] +llvm = [ + "wasmer-compiler-llvm", + "compiler", +] wasmer-artifact-load = ["wasmer-compiler/wasmer-artifact-load"] wasmer-artifact-create = ["wasmer-compiler/wasmer-artifact-create"] static-artifact-load = ["wasmer-compiler/static-artifact-load"] diff --git a/lib/cli/Cargo.toml b/lib/cli/Cargo.toml index af12480df22..82d0dbcad51 100644 --- a/lib/cli/Cargo.toml +++ b/lib/cli/Cargo.toml @@ -26,9 +26,7 @@ required-features = ["headless"] [dependencies] wasmer = { version = "=3.2.0-alpha.1", path = "../api", default-features = false } -wasmer-compiler = { version = "=3.2.0-alpha.1", path = "../compiler", features = [ - "compiler", -] } +wasmer-compiler = { version = "=3.2.0-alpha.1", path = "../compiler", features = ["compiler"] } wasmer-compiler-cranelift = { version = "=3.2.0-alpha.1", path = "../compiler-cranelift", optional = true } wasmer-compiler-singlepass = { version = "=3.2.0-alpha.1", path = "../compiler-singlepass", optional = true } wasmer-compiler-llvm = { version = "=3.2.0-alpha.1", path = "../compiler-llvm", optional = true } @@ -37,7 +35,7 @@ wasmer-vm = { version = "=3.2.0-alpha.1", path = "../vm" } wasmer-wasix = { version = "0.1.0", path = "../wasi", features = ["logging", "webc_runner", "webc_runner_rt_wcgi", "webc_runner_rt_wasi", "webc_runner_rt_emscripten", "host-fs"] } wasmer-wasix-experimental-io-devices = { version = "0.1.0", path = "../wasi-experimental-io-devices", optional = true, features = ["link_external_libs"] } wasmer-wast = { version = "=3.2.0-alpha.1", path = "../../tests/lib/wast", optional = true } -wasmer-cache = { version = "=3.2.0-alpha.1", path = "../cache" } +wasmer-cache = { version = "=3.2.0-alpha.1", path = "../cache", features = ["blake3-pure"] } wasmer-types = { version = "=3.2.0-alpha.1", path = "../types", features = ["enable-serde"] } wasmer-registry = { version = "=4.0.0", path = "../registry" } wasmer-object = { version = "=3.2.0-alpha.1", path = "../object", optional = true } @@ -80,11 +78,7 @@ cargo_metadata = "0.15.2" rusqlite = { version = "0.28.0", features = ["bundled"] } tar = "0.4.38" thiserror = "1.0.37" -time = { version = "0.3.17", default-features = false, features = [ - "parsing", - "std", - "formatting", -] } +time = { version = "0.3.17", default-features = false, features = ["parsing", "std", "formatting"] } log = "0.4.17" minisign = "0.7.2" semver = "1.0.14" @@ -98,10 +92,7 @@ tracing-subscriber = { version = "0.3", features = [ "env-filter", "fmt" ] } clap-verbosity-flag = "1" [build-dependencies] -chrono = { version = "^0.4", default-features = false, features = [ - "std", - "clock", -] } +chrono = { version = "^0.4", default-features = false, features = ["std", "clock"] } [target.'cfg(target_os = "linux")'.dependencies] unix_mode = "0.1.3" @@ -116,6 +107,8 @@ default = [ "wasi", "emscripten", "compiler", + "wasmer-artifact-create", + "static-artifact-create", "webc_runner", ] wast = ["wasmer-wast"] @@ -126,7 +119,28 @@ compiler = [ "wasmer-compiler/compiler", "wasmer-wasix/compiler" ] - +wasmer-artifact-create = ["compiler", + "wasmer/wasmer-artifact-load", + "wasmer/wasmer-artifact-create", + "wasmer-compiler/wasmer-artifact-load", + "wasmer-compiler/wasmer-artifact-create", + "wasmer-object", + ] +static-artifact-create = ["compiler", + "wasmer/static-artifact-load", + "wasmer/static-artifact-create", + "wasmer-compiler/static-artifact-load", + "wasmer-compiler/static-artifact-create", + "wasmer-object", + ] +wasmer-artifact-load = ["compiler", + "wasmer/wasmer-artifact-load", + "wasmer-compiler/wasmer-artifact-load", + ] +static-artifact-load = ["compiler", + "wasmer/static-artifact-load", + "wasmer-compiler/static-artifact-load", + ] experimental-io-devices = [ "wasmer-wasix-experimental-io-devices", "wasi" @@ -155,9 +169,9 @@ enable-serde = [ "wasmer-wasix/enable-serde", ] -# Deprecated. Code behind these feature flags will always be compiled. +# Deprecated. These feature flags no longer protect anything. cache = [] -cache-blake3-pure = ["wasmer-cache/blake3-pure"] +cache-blake3-pure = [] debug = [] wasi = [] emscripten = [] diff --git a/lib/registry/Cargo.toml b/lib/registry/Cargo.toml index aee1820cd97..217b6609686 100644 --- a/lib/registry/Cargo.toml +++ b/lib/registry/Cargo.toml @@ -13,13 +13,7 @@ dirs = "4.0.0" graphql_client = "0.11.0" serde = { version = "1.0.145", features = ["derive"] } anyhow = "1.0.65" -reqwest = { version = "0.11.12", default-features = false, features = [ - "rustls-tls", - "blocking", - "multipart", - "json", - "stream", -] } +reqwest = { version = "0.11.12", default-features = false, features = ["rustls-tls", "blocking", "multipart", "json", "stream"] } futures-util = "0.3.25" whoami = "1.2.3" serde_json = "1.0.85" diff --git a/lib/vfs/Cargo.toml b/lib/vfs/Cargo.toml index b80452d87fa..5317cb6a918 100644 --- a/lib/vfs/Cargo.toml +++ b/lib/vfs/Cargo.toml @@ -20,11 +20,7 @@ lazy_static = "1.4" fs_extra = { version = "1.2.0", optional = true } filetime = { version = "0.2.18", optional = true } bytes = "1" -tokio = { version = "1", features = [ - "io-util", - "sync", - "macros", -], default_features = false } +tokio = { version = "1", features = ["io-util", "sync", "macros"], default_features = false } pin-project-lite = "0.2.9" indexmap = "1.9.2" From 6b624af5d4d8b7055351725074f7b5bdd76dd1fc Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 8 Mar 2023 13:31:44 +0800 Subject: [PATCH 08/39] Fixed some broken links that caused "cargo doc" to fail --- lib/api/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/api/src/lib.rs b/lib/api/src/lib.rs index 9e968ebe4d1..8d50d4ad73e 100644 --- a/lib/api/src/lib.rs +++ b/lib/api/src/lib.rs @@ -81,13 +81,13 @@ //! compilation-time and runtime performance, useful for development, //! * [`wasmer-compiler-llvm`] provides a deeply optimized executable //! code with the fastest runtime speed, ideal for production. -//! +//! //! * **Headless mode** — Once a WebAssembly module has been compiled, it //! is possible to serialize it in a file for example, and later execute //! it with Wasmer with headless mode turned on. Headless Wasmer has no //! compiler, which makes it more portable and faster to load. It's //! ideal for constrainted environments. -//! +//! //! * **Cross-compilation** — Most compilers support cross-compilation. It //! means it possible to pre-compile a WebAssembly module targetting a //! different architecture or platform and serialize it, to then run it From ab2f65c143f30e560ccdf5b69b1c06b0f4968678 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 8 Mar 2023 15:19:53 +0800 Subject: [PATCH 09/39] Added integration tests for run2 --- Cargo.lock | 58 ++++- lib/c-api/examples/assets/staticserver.webc | Bin 0 -> 2441803 bytes lib/cli/src/commands/run2.rs | 13 ++ tests/integration/cli/Cargo.toml | 1 + tests/integration/cli/tests/run2.rs | 243 ++++++++++++++++++++ 5 files changed, 309 insertions(+), 6 deletions(-) create mode 100644 lib/c-api/examples/assets/staticserver.webc create mode 100644 tests/integration/cli/tests/run2.rs diff --git a/Cargo.lock b/Cargo.lock index 9fe18ed172f..0713273176b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -55,6 +55,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstyle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" + [[package]] name = "any_ascii" version = "0.1.7" @@ -106,9 +112,24 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c98233c6673d8601ab23e77eb38f999c51100d46c5703b17288c57fddf3a1ffe" dependencies = [ - "bstr", + "bstr 0.2.17", "doc-comment", - "predicates", + "predicates 2.1.5", + "predicates-core", + "predicates-tree", + "wait-timeout", +] + +[[package]] +name = "assert_cmd" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0b2340f55d9661d76793b2bfc2eb0e62689bd79d067a95707ea762afd5e9dd" +dependencies = [ + "anstyle", + "bstr 1.3.0", + "doc-comment", + "predicates 3.0.1", "predicates-core", "predicates-tree", "wait-timeout", @@ -242,6 +263,18 @@ dependencies = [ "regex-automata", ] +[[package]] +name = "bstr" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +dependencies = [ + "memchr", + "once_cell", + "regex-automata", + "serde", +] + [[package]] name = "build-deps" version = "0.1.4" @@ -1897,11 +1930,11 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "340dd3d6102fa919bd20987024a6d84954c36ec691ac1efea37742ee983c8dd5" dependencies = [ - "assert_cmd", + "assert_cmd 1.0.8", "cc", "inline-c-macro", "lazy_static", - "predicates", + "predicates 2.1.5", "regex", "rustc_version 0.3.3", "target-lexicon 0.11.2", @@ -2802,6 +2835,18 @@ dependencies = [ "regex", ] +[[package]] +name = "predicates" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba7d6ead3e3966038f68caa9fc1f860185d95a793180bbcfe0d0da47b3961ed" +dependencies = [ + "anstyle", + "difflib", + "itertools", + "predicates-core", +] + [[package]] name = "predicates-core" version = "1.0.6" @@ -5243,10 +5288,10 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c4e7a2a3363ceeb2ee60371af9460748f2bf53569b58627f1f640284ab07778" dependencies = [ - "assert_cmd", + "assert_cmd 1.0.8", "cc", "lazy_static", - "predicates", + "predicates 2.1.5", "regex", "rustc_version 0.3.3", "target-lexicon 0.11.2", @@ -5270,6 +5315,7 @@ name = "wasmer-integration-tests-cli" version = "3.2.0-alpha.1" dependencies = [ "anyhow", + "assert_cmd 2.0.10", "derivative", "dirs", "flate2", diff --git a/lib/c-api/examples/assets/staticserver.webc b/lib/c-api/examples/assets/staticserver.webc new file mode 100644 index 0000000000000000000000000000000000000000..3cd41357ee2b23301d1b028f5f811a23ef05d7c5 GIT binary patch literal 2441803 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∓FRd&xcZR%;nLD#mhnb-LStlXlyUdQ$?><0BQzL$>U{ zGIzrDjsMNo;q^0&b=(rgh?|X>h5Df`vn4(nllc|Ol8o^dLf-28zc&6h7n+S9m;={3 zhpxHm$W_SDd3vU~ zP}iSn{h869RsA`R7~Yzhsh?~zKf7x)Q%f_Q&h(o8G^U&NMyJu_@5#FwtrJrX1hch; z)$VM!JKLIVpISvuS(u$AYkQ&9o$ai_mF60&i=EY#x#sd*Yi(|AcJB1Np69#uPIqZx zMgKRK>(grst=WaOM!mgQZ=VuG+l!sWPP3`Mt1J4wLw}mf`nx={IK8wueR_Gd)1@o( z$JeG?-DZ8Jg8&3(FU&F{o9$`-Uu)KzQ!6BP=bOvTsnxY+XPO&GJ&bZm*X#I$Fg4R@ zUUPM`rQda(dUN_@2k1=Cz}BW`8v4_PUesq=&6#@BCDfHV&7aw>?%Miu3h2(Pc27+$ zomx2ET$^1vzS6DNXY14aY1TV4^$udy%2aD<>cs49qdi@pnm*B}&CX1xHKXA;)oLtHH=3s#YmM3E`uzOT{CsPEZDxLLetvCXe(m`DT6=!2 zGrx8Usehq~{4u-GSzWB3tS`2vmRn29F#Xf>NG44>umB7ent-+gLbO(=*IN4jbZd61 zHQQ`0&9&OiR(q}0nQ3*JtxoIs+D!Xox6?o=Tj;E`I!K)>U39f;uUTuh);cR|-PY<% zeYG{aI=5C|qf9`6Ucmo#ew4@GZnLGo_JY6HtafJBR;gmG(QeJmw&q&(4(+Dq+1AxZ zTGvmvu5Y%k@3d|Jq-~nNAf~~kzR;jS{F}ad`qZgbXGwV6uItxr&&;+LX4@-#&|aRI zn`$>_yX{pFX{O!jw86!x=5lBHIQ7t_PRqL2=(Z4@8_fT?&ipL>TW%lkwAT=*n{#c7 z?zB&IIy1|i4!2#ZM)c@3yA5Qsh3VCH3n6%Rq1&11qJy-Sr&^t<*2$?ZY@l^&rQTUx zXu>m2@IOiXztElqiDuVY{J*?5(^{LInXQY<)KAaWPj~94PtjYX;CgFmdSPJ}ksZ|5 za4Z3xPUqAD^Q>NPw3@BvR1*cHH9bQUn@wi!UDKWAX*f>nUDMaiOkX!Uecjyjb*<^^ zPE22YHK=TVPfvIFVrshCnVTkQd1;N`62BI|F27T!rT_~F-EM)C%QN*hFg<&{(s zYVO)obIr9mP;;)cyfD+~FyM_w7s|8LJUw@OcJ6p*u0B0CKRd_lX`h_yHoL9mlO)ua zPdA(MQ`6G!=38^i^R0!M`BrCfxeMI*e{H!lJ9B7$Ms%okSA7=d(&=7%!!<{A<#C}6 z!GXjsOg9(imKRR87EYd6pee0WYpu0~Yvztmtsb9UYfrb@t5O~p+O0Ka!E|S_-sHMnI!OQ&X*PIc$IOAV&U(n@2A znF`@vYIc?YcLS9QWLch?S)OWKea*G?R=b7L*MaBHi5{M6wN~3*kgW*^U~1ZI4Q5{{{JzeqLR2tNF)jBBw{29 zyDYm4yF{WSAqh!HvPp;`h9=C;%+b2bI<+zJhwQ=#HNmi z#xo7k%*wR1;R3CuT*(#-m12=5g>6=fBV+u|@r!s#zHv~63h`+al^P~cNZ@@cxsgO} zBsnlLT*gO?(AeNBr&i^vd{ss(@u6(0lFwH2naW_EzkD*EFX!_k`5_E2-#!!{!YeT- zps}ZtbnA6SvxQ^=feT57;Dh{uhYFRULXtL_DI`rsI*>x8Tu4I7+0?I+t{0NYt^)3{ zSg9j!9dYY$)=ej-6r|;Y-3-xYQe|8yW{?~xu41e?VuO;*ycE6Z2)<>oI6&5Lj;%rw zl}vKg2!EAT^?_CO?5cWY0721qwVVli_R?sv!aSL=97a^b6=Ie7;d%4WY|8p?RswQK zKBS(@REl_;OmVm}lH?CR7f+-a1SYYb!$m4~RvF=mUo zkvJZ*o+wumWd;eAWVw#zXE3*NeWY9;Dpy9zc+o0eyOv~b$zQ#W9U*WsSBX>0MXO1^ zD(H=W>J&X*9Zd3s*CYgY|d`hnr2;lIdDGT`Lx_{qkV3HdKxema)HFaV%4^zp?mO zjdbY#>$VO#GE`y7u@oicqx&lcgu&%KZK;S#gS~TI6^q-ptCKz%I zloE6#17nHgV2v>b4lfWM^QtTHra$tB9^stp{57|@~pN}^s#CQ7VGCF`ZZ zAqGS7k?thblgG{~10@!#YMEqxFjb4=D2FILf25sf=oY77Ly34bTOZ1^3R}t~tP?Dj zhnR(@>7j9ZdHfmc156vrSWJdKIa3_M07k4kq@8AHlo%6T3*8lixFiF?mH8}gh?NOu zgju@6EVJusK9@=5Y6*N`t}u|n=o^OQS!&Y-jjt|yigmg(e&-pPCSY+Tw`G|ovh`O!z}HZPz*S-)P<{|hM(ODhL|M= zm!+aL_Mv)~QfBI7V{^v3#=6IP#^#RA8|xkGW7(Jy$zVN&rKBtTF(5BvwDCIQGCpZO zIX=ZYwof_s*%p%Vv*5sl3?_tM<6Sc)FfQ*Hh{GV7fk>uGg}K zc+x1iAoEU@dZC1LsW7ZqrtdE$vk5Gzl~TQCo$5*)M)<{;AzaX?m2=4qN;Bq>%&I!IQm2sRa=k#;n`Oo_NH>(N zr)&IE%kh^Tjpv6(GkLrnLw@8h#}nQ03==@QEsQ+Dzy(e5U$vZ1GCWV@dg8gBfm{z` zZJSy#2FTENGqH&0y5hNR8dev7e0ArFL-B(B4HXzpqTn(?3^+4clC0L^46))V7DSU3 z<`?A5Upkqs6&Y%z5~*ylr?0a!{L$Of>we6i*V)PBYb0LdFJ;z|h|}0}xt>yPn9QsE z^^L^qBg_W)-`YSq*@aT5VLW=B5kNgb$#O|P*#tx1`si441mjHD^sXyj%n!wDnZW^O zC7FQ)BL@1y?jgF6)Zofu*UI7$pA>&X{9IYgtt=8;AFeRPpr@flBq}TEcSxm3d#q#z zX-j3?aBXM|z#oImp=vEd$@#)zt*r4^9UQ<})d#VhT&a{ry39zjm@n4T$x;c=&rF1# zGBr@_PL@j;EmN=bV7g~8J$EqOJD6tp#Z;iOl38dxQOsBP8!Bf=AXg;nkPRSKRWkey zmWBo@L-G26d8hgatJHXQERWTKb~;o_>6Q+veT-D9eaUj3UrGK!jufMDnvS&|o2%zX z=p!qGL)n4MP>RV7ds^i*JqC5lh%Pmh%nnsXY%EpKb68Cx*yDA67;Cq+)#=&eTI~o?yhcSpRQvjh*8brh?A+6jKOGHRQPbRFp|$D zbGdB3n@LV(=GGm5oqu*?SF#;`p*c|R~A(<{Dnad542>-J5$M-1iDba;{WSq`O)Yc8k zS=#|9Gr}khnxm|+PD!Ebm8xxL4b%og!D^vAHPe8@$zsj@u-PG#clQtfGJCBvZb*_e zZaKkdBvBrs@)#qeQ;f@O2x`MZL>|yizTt(sUlgSe35u zM?J-J!wfK4Do9jp-=~;aHCkFVYCVJXQ_TO0cu9I9(-5N&3Nlz5Wz0*#s?}Oza1;kV ziqp1T6-<^Una#3!X}%iIfzxomSv^o_j$ITwa<}GSyRK1xi@U3#B^&;*?9RlT?uOsv zWXnBt$8^alTopb02vcP9n57*3cAc4hc@VwwN2gchk53n0UGchgT=jIB3Rq6nprq(IR_tb85LRmY^6L@@0d5a!b)t`Kxu+28IhmP;0qWwN*5sG@gP_ zjxRn%zW9{+vJZcxRpF1xI~82Pjn)PRYn5D2HCL||N8vz={F|xaLU1jE$=YB~Z7`b| z%n~-p6ps;Z4#9@0=izd0xR%2SmIveJYwG!OqE;9f$&D}$%+*G48?`zf66x3<%+)dp zmTXERrR+#)tR5e%7X}-~JF{!~WJk7uaktND?`mg*vG)aT-Oy}*cA7TLdfsxvY<)Nk zvly9tce2B5jx|wew&tE;nw^?mZ^r=!>j|@UOT1^QFx#r2E7;N$#(F1Vw&va_P`$l( zj9o{TfN&Y9WUvn&TgQx7ne5EAf7!?aA1B<_$vySkyuhSbTQGehZal&7 znS@zc8sjyt!!CgCuhZ7s8`8y_ERWJ{Sj#9dY=$Gab6Z|#j|#f&amfA{I|acy!u&QJ%4d_!4pt%C8%o`-IYX+{Zk`?w zat)*0U^8jFq(vEVo1{<)jzITyZ{9hW(H7VaRYMM;gTvs5P+u+sZ5lk6cs%iZzQC?z zumD<1-R6^}LMGWE8QV1r3zore`%ljI*~pag6K3TP>pC1ewMU&-u(?J0bvms^mF$AY zZx5zF=cFkai^>V=_%M9UHa=KN*%|@)PkK>H|592BZ3Z;k--~?qO5|Qhm|t(0YOs`W zJCD++Qx?qI8BylLu>`a%Jf>6U?_G(?*un4 zR~Eq=`pK|8GHT5vf+ArPeVmm!EPb$+aMPD;f|*JXY$nXtZCECjcuI6;JD@kTBUxh* z93b59;|dI=)%=2E(5(+~dXKD_KH$a8@xrp%5>v4wJSvo81W9`wL%bjczwLuI>iKN^ zW%&Bf#-EFi74jV^TQ*+t<*+o^KMA&p=In%7AZhF+%paSCc`{FS8xTQo2%c8H zo$(Umy%B_>A1rsUTthzq?-k9mVFO*k%&VMiE`JKrVUyt?SVXwB*+yHSJm!{z<d~Ez*Cywpe|0!|WnV@YaUT4dA>^gL?!({Um=ttqR zJ!jVk)!SKZ2&P=^+NPf;o|Z{017hUNqMsOiz7MtXR9FXR*R#V`g%`u)+i_TC`e`d} z7P@c8MkgC z_uE3azaDzIAeeGZb3YKu@1}blwjnnQ9>0v_Z%r-ehvv%`me0-`uuN!66CL4(4gCPT zzP;I&K9y2rWNXLyf=%%F?aJ|(K%9a@A-m!6Z9L>jvYAIGas;~H|A%xIGFcf9f>~#w zb5w?-z(EYU>5PR9hQjeI(-u~p=mQD&Z9mi%e5`+sm`azyfs(oUMHqB47U>8hl zZ`QxbKb%Z;4BP25(pdnH$=|3S^9?HqZ>1m3@-Tv9upXApEmEc0S-P(BFPkT9C1WL= zu_69E(rvW!(3Thhm00%5mPUhJXOWL({n1>ZlsXLEZ*TQ>J8BS)qEgn@PQ&Am@xnS{ zT^QfNP6>Ot9qcgdz_%|3+_Md787n`m@~qe z>#rcZRsD}*_M8%BV}h9}-2kW7S<|Tob@(U7$5?5u9&97b#!a&6jM+O?5bP%0#yW1? z9IiEvk8=(}GauyUPc~rIVijR0L~E=&a5OuBgv++UMreK?Zu!%jb+AVt#@_*t-!FzTGT!8vQlSo~$$1by zzs-l`v_piPdtr}v^fWwvAH|qq$XUKySc`Q#9<`~&BCyqQG>1#pf?z3O{=CKViu9f- zvjzZ<>7Ct$vaJA~ZO39ge6jKLZ6TI%kJ5L(AS?x2EkUr4aPu>vY-}+c0h?@%_7-yI z{Sr@8%y@|W9c>_6uzuqU3`Wq<2dT`Eg{S98pi<%dz8sM~*1@;MiH@D6j|Ckt_y% zbDPIap`MFwVQE=JpIDbFG2992gpd1fYt(GZq{a?w zHpZjs7!I=G2<|7`_gS_Bn^r!J_DGz%#aW}Y8fhkp?amBxY_5Y7Et}!-+ov1Bxb6Kt z(9bM)zRHGo$M}{j`5b{K^jG7$Y2dNlSa>G&{t+JAsD)={#M3Y@v2(U%Eix>D?$0l* zJbBIrB-!@s;OI{l9=|*uPkqB#c-WBTco@FmEcq0NItpw&Wv!kL!sGjBTT`%Ov{uWf zpqt(zU&KMSzOF9nzOQ-QVyB4B@peKBZE#$Vl!`tz%cDGb_A-`0_vac`HrlQ|I26q| zf-HQ#U$!I4wxGE&%A-NYmPV>P#wuE&+vL~*Pb(dUZL`c#l5k>=4&ZAwmf(1(Exp*X zTW}g4Ur!vB4r23N-!GrfRvLp8`1=U=?VQsdHEY}b(EM>nDqky%Ld&+I)ic35<>R-3 z37e@`w!q_;m)(g{YQz?WQX2mJcKk*%>_r{Y1L<@LLRNwBIo35UEQeM z_-~GQF(2t9-1?cQ&tuaqSWMW&_|$5NZMMolCK(>sWDNv*tM(8crs}Y+fphA4($99- zdD~z${5A&mb&+A81&;D|=&j1hq10eMG{0{%iFk6VP%Bt$4pxp9s+D#-Ux#0W|4Q;w zIfpn$$7vPp|0T`#AC|0fEo-P4bi!xrWv)MF#f{bEG?lW9@HVdu9EwfQO3FoO%|5)& z$`5NE&_bUZwk!I+O?emyjffK^` zX*;~Yeh=Yi)MK_5v@K|zW;oBy)NFbX%z($*NvN+-A-N1Wu`SOiitxqIZQMCQ&yJ=E zn?jf`>mZUc5ANWIaIhL4v&)Hb4QEHdTL|~tS(t4(VOw496f=Cg;PZXSpdI#N**#kO zJpzx(-jGMx+VZ69&XPyATDSc+oBkHzn+~6!hsiQAmmlPeM7iBs3df~OjT8Ar#O)@H ziGG&dZ19@1YGb?MX*HJTFgLphtp7kapX|y$)IDfBsxNI_ z-^2+gHB+ItYG3|8E* zD_9GkuM4H=_;^~)%Dw$;e6D`NwX1{hOtdS`d=c*yVg7npn7)h02?RED*ooDcAegey z`D3SdJ0WE!1vpE;$A8(PqD|>t}wTgc4`sVb@oO7BRKajWes2>12SsO!9~zT!FS@cH{LmahrD1)6VT+S>_RQRLuu!{@idFt3Jo z!2S!*uQ;c16#iEIY-78zGbNZqxLz{#2Dd&E?Hh1DE?7jE-w&Y|&cb5v(EPUFP&oiX+oXQ$#R==_x8$M+1 z+%i4M`1y>@@c1@OU!EydstoK3b)IKQ?t#Z29~!~h{84D8t0<4~AkrdNcN6^~2Uauj ze1f^(RA_$P)!W%g)#$wwx?i5~Awlx!hvwG{GXoCZGyZLnZm5T1yFIHDtZR|(I6adL zw*4_W9mziEzJIXwOB@zw2YWh?LHGMKo@)#y-*m<}-%eA7``9tU{dRBi45v5~l!{Z` z*aJLPH=%BA*MQ&42{RuXhA~jFjYcCC&ypU;0psa-N4my7m7PUc2Vbi`V1ln!U{@~K z0iW+TOuh*|=N%5g7b9KYKEv}j*2&%6tQSj%=b%`iaUD|(9xEs7tL#&hj@d+E(4eRQ>%EH`5u%7T%{W!xoj`G;4`x4Lg zgcAlk#vW{i-~5;J8FplsxgKGy*57!Niyib-=@@js{=;%|gq2koX6N()w=}mk<7pUM zvq{UA8GNn$ttW4&Vz!C$L$s@<#JL)o8|wj071LPTI%vM1w|p6BHJtO{v%+(qoyM}GDpkv;ZE>?58ejNiN%&o=CTy#UJp17F z_cBBI?eU;gyuDl)tk~&|4tp$;w3G1rdqSjLsj?D=O5z)#`*jsQa!lNv(0m`$5O?T6 zi?}9>S2yDm-V^ZKJkYC`NS5*lwAif;bD!|Y4u^gTUqpB-yS1}p;k$0icAkl$q@CJ@ ze>wbqxlJ~ELex&Kvm70rn+j`dJ^X$@JyF(5YBzLWPYrZ)yTM_2{5eDekC{vm+}6y~ zLTA z246MUCBD$#hC)~K9UM{SyiT#$&eNmeB(P9A0$&W7LOwfb&+o~%w;m7kKxZ%=+J*3( zS-!@VM;tbX`1;`U<;-SQRe74ko;S>|fNpi<{9w@@wg}b`)=CHV2t$abc*uFA5 zS_yVQZ}hc1ClMTIk)HN>?WwMI^WsP0@y7_Ju9XF*WBi+BPuQ)fqL(GEJv*5>?2Y_A zgqiP-!YD?tm@xCXQ5dcnGuZ!1z3P{BfM=Kjg8NRn5lN!PBaahFMYL>Ev)MzWppb8oP6%k=L8?th70h1Mu3M zw^1*ar^h>X8opQyJ{H8n{&~io&3(qW?6$C5Ed`6mQRxjn+&JnYt?tMe8M4v zVu7A0*zm{FaubL9q?}FSE7C@i!ZdzffyEQ!hC-alG+DGD=E%!(D_v03H`zNUP`uVi{Tw^cpq$n z?)$pXj=~2}w0}yzyWsQZ3vQo>8J$f&;5h=1>Bf~WJpCO^x~Ex2p5K`>jquQyhH^RH zPVu_E4**+R_2&t?WkU5O^sBa{ze!zR2FUGj(ZmxvjRDd@)-~gmbT1@c6zj zv+GnI(qpLEv_Ff5LN28{zZYcDRP#U?;ob@ntmauos#ta7dy!#85O9 zO)KyP@cZ)}<7cv8NpV1kPAWdek%YFFYfRwUDJw9{^9b|%PwFURW9cQ({5lA0iIwLx zG_wo&pOx0ftyNm%?UmO870Sc$O@vSQA2SpezC+=y?8Nd(7P14Q9jvpE_5pZX>4f(I z6!TS%Kk$TiyfB<<=Z!ok;q}Kz)J4wDNyYAO3)jNb2JN*}!2-g}2TjTVg*O#QN4Q+wevJIhQJ5n7@;&;Q>YOG=U zVbQ^@S)@u~t3C>^tv5I7&SV?lT)v%lXB=K(2_hU1wLNf_wH8;7h9uYzf!8lbSZ2<) z^Qd)r)H)51?{|$SeAbM^zr5ipSPxH2|LV@~@kSrcKDI~)hnhG@c-VFt>w|Dq8J7Jx z^yYp?{SpJfDX(bmJ3>X<#`DKHOM-b}Ny^71s!`W7i_z1#zjKgKbhe1Vr*b+}hE z@sLq&0Nq7Ra2auCk!R>n^WDLE@H0FaERB&u*4`u55lvP$!{^T#>+L)|%3~LMq4|2^ zd>L;PN`xDKN1$81g?SQbumJe8=Dxp4_HeYreh9oaPikoF;i+4DBh^A^e%@g^sVeP+ zX<3!EzYbnsMf~MwNryKja~3=wtb^{iO(zovE$unk=rI=B|2BC2dOd@emmk@g^@H%W z@{9R`(qw<)G(1+16aATG=FVWm9%}B>^X;puw!yyun)T_vUfi>n_Cl+2unZpGm*p7; zXY9r2#9a-&xxeF8BhWUt$lJ=*u=hjr+Y}3HL6-1VZIR|qWSK&9To3<~ER!{F z#)@{Tgg$|I9ZyadjoaM8N#f0Za`76s(}P*@C!L?k86@Ek*Y(4(H7^t*&y9rH_{xpB zT-Y{+HR{+Xy9xL0DSVfwbM3)F=zhDhO-&kQa1xr|ZVSAOhhd7IDrdBS9Bl)x9msFm z%T0nl!ffo@D393-Py6JSKx^d-oj>5+g}mx@jLJ#F=ldjU0q%Wm(Rw`#=PJtv_+Qi_ zPwjJtQR#tGW}x<5*B{ITZ`Juc=GFr+wl7!Aa=NeVF60$r@c3)68s1jpEZ(ol`n$J&%0% z!)NOzZcKxQSS7aSRX7a7%ae-1N$CDq%eYwO3eSa39cpf?I(NlO7?}%0_w{FXz#bj1 znPsp4kJ5RcD0CZ>I{EB1Yt%bo{+h9+87`rPZ~0~12anCCB6}KtfX2!U&DS;WYYvVP z?)Mcci@gASPLOV%*MxqnlH@JntbstcvNq`wFExrX7q*Dc(U3Gd3hlfFGgtxL*R{P9 zgEJ)dG++2U*&2BKdgc5Q*GDAVd7WjjwN)Ct--kDW2796T{aN_TA^+H`sEi+$vC(J-&Rf6P~c$g=2_vf;SNchY0igXY87HF|)!%-p8R^A0)f8 zSFi+AR=ROVQ~k#CR=q(Cx?g`*Hd`yFS(Q8VHsXcw#YnG}o~?Phojv+N`201^Fg@yH zoUbGD=>Ah)=!W>##{GQ$`159s-4suoMah%S0n)pvMS5l*6Y_*FcxnRYY!6ha?DF6;czmB>Z^F0X=4xnuUvBN7Si>pt z)@U1tZi1)TFLDt;b%2*P^27=}yIb)1zNf}6{t@_m-GqEBv#?Fd=_`9_W~w|n-?;7{ zwM=%6Z7-Guc3XGt;FYGG;&bzrv+~uJMd>xHNgB6X=L^@TnHlgb^jY}Wj;nU?=JjpR zTlsNEAFS^aU45e+xwKPiw$vQ@zGKi^jlZQ!dkY>9R9Cnb1am^KlM8O%5&6Z5m2~PJ zn%~#fSr^e-d$ep7EQPO?uVV$JG~5yX%L{Ma-ur5J!+s(3=a^5PtG+lOU~n5W-&R;3 z%U;8z#%y&jbiZu%c3v6Vuy219o{4oHdgxpg4mV$(Tx{;YIBgQ18=3*l&)e!RQ>^BT z+3FB)7Va2-B|fq&g#Sf+H~MGZ4iL_;iqQPN+S0N`4~{h3*{=@nF$mVf*UDCTYQ!Fv zExV)0`86mJ#lc?Wqe6)7$YXOmeW$t``plMR@(ah)8q}Q}FUQSAfm%*&3I# zMa!#c&x!Z!Vh7?oL-$gJOD{aL7AAVUMcxgX3ETO!QnUYxc=8X2>)j7WdoT;&^~++s zD-*>IJHy3+JPu3oR*-g{`lBpq_GHFDM@NS3KA4juq8@>QuUkJiEF!;=uNC);_ z-XN$p>%i`uv4T#8=G%$MV0(1Dpo$m4VRd@@QYXC4d&k^8!1O1{8_}0TZ`EhHaZ8z( zr!x!Utm$g_e1BI?)Qati8lEG(vn<#Ok3Y|z;NgjR`nrAan2(Rj%KL|d|8F5b;!i^x+( zn%ie|&P~1?J8+jvSf+jOw_2;V7rk)(SdfO^YOHTpe5`}k%I56qkF95?4en_{3r{FB z?6F%!$5P4m=%M?=@HY7nyfJ&ub~>GoY2w{elk2T{t^czl{Whd(jL-vrxSs9#z4R#W z0uA4LR`1{$fOhNWlkm2z!|0t4Tw$^So<=(!ta0w2Fk2sSeITb7_`Q!X-(O&@cHu*C z7+R~b#u@hN>bjjrL^zAdx+igLKg6{ao?7JhtkITvq!$wIuLY7f4<0iHfM)9fE*%~} zvfnMz;UcThUe`f0S);LLuEY!Pd7OjY!(gju?z}NCq#tIDo3K`EMc#I6a1cJf9Ux22f=5eFw2t9pFKH96-VYLu<7ja^^fToOm`(AS=Y}Mz+TO z-rDG&KBwiJ1Zmx1x~C_YO?KADoF>e-8A~78I7^$#w!N~o&vx^bay*OTI^prpHP{{@ zV=RtvmQzd5k_Mw~ZZyd=fwEuW7D7;gHyj5TB)LALZEzukUN^b~H1r zBhajl#?SoZYQgEVrX9%^jp*0|THTzs=D6HM!-+Y?YzM;hm^h0ov1 zwoC0Sk?k$gH#KotLwva5IhTF##gNr+KeFHOT+Io1{BqbOR=o9@moeE4pK}kdYPNB^ zT+d|bgXWi2ZOGPCZ41HP3Xxh0Un^P4bcp0cPZGXdF#KK(Z_9px17l=qZy`-IuG?*c zzt#MqEPfk`H1Z#6!Edc_@~fNuxRqsu@dU%$AO^jajYs)tXfmGFLiqi0K$?a25^mK- zu0`mr#sTIV?H#DRdM4NakMCbhCf@H8ZF2@Y;qmLxcp|x6*ETLza0veKy(o8oMlg9z z!`RRw+e^bS=kVHOY-l=kzkhIf@K!-RzPSJ%zunQM+=WV{v7$v9j$TTvf!4~7xG5yq z3~i!M!U(nR&`V5pbxt57sB}M+!sdtWr`n->3C&pP$$gq*X=QCH@itC*F$evN74K9?9m1K z((Uj~tOs$H7C&{6uvTM2Zt4r)Fm0#IDvYC#DQ-9>LSU|?3EI}Sl8en!oVZNdMBn)mNls`XT|um`>v`8CRAX=-1Q3qYxRc&xoe?|gF(%htW^ zb+mQ^2e%ZUgeh-u_T}-pYu2InK)14a^s~LrGFS?~^*v|u^9%st{_|C=-=^%$XmlKD zGd!*Qvt2p42b%RCp>8wWpvCXQg!$up-b=#$TJ_)rv8a}Tz_V|~5a zY_-a=kv&AVm+){sBb+;!q)A?T7+#)JI1H^--x_l0Z0jkd>wMIBe4Rg{|6k|yF|o%J z#^&XbjQydRfA?t4+Yr7Cy6MWJ7cFkRb=V*V|Q{A?-YC!b`;Lyxgm^k|65#q_sp1kcU~W1 zzP_#1gz}Kq66me`0~g)~S!llQOebZ=sq3Km^IN;gZ7boe`aEJ)Y>cv7`8k`YR1Sl! z?~%+VS)~d-PPp%X!pBVUS=O8;t#4(^$wGmF%nWEvvXQdQGweEHi@y*a-$&bpyh*}C z`9uH2qix8tny}D6YrO*T4@CVbIIyx3v4MKb?~)=CE2hCRobwE;*OUQMHe zz3{ghf4dYBn0!vc(`x=?^4JVw+FPAYCgg#_+geQVeb7RAT)DW1jx%3``L@Bk7kSS= zt<9eL$xb|U zc(O%2vt8~z?HI9ZjVsIn-qt)Gk7%=?`E|f`%Ju|Vc-{MA=*|AnF1V#bXH-M-K^h)k z=jaHY?s2B|lEIZZY>y)pJJ><^xqQ2IP=&Kjv5)ZPc5bzpOCEtX?gOo`p#kKwrwRAl zRRcLO^-)(A*RCewmF0|kpxgMz_oGVQu`#Jy3ZISB&nOFZv6^s``HXNH$HrFSw2kcw zZ_G~`7~2cY%GgK?N27KFEa69>n@LY(fDO&I8kXPQ%FSsptF5W<_-kdxW120} zfcl`f)WND`und~->rCEoo=o-?=)RwfuH`m=vJtv(OQC#R1zar+6n2WXx2|6eiQdcIe)qkzE)*&?=!6@i_&+x1z-4%bCTHr z&DY;q$`)*gx5qm^4=t?%R;1NiBza5bi$7rmc}+Bk?*&ud%IDo4icK z?IZ1n?$4diNH=`_V}~>F=H!Fp#GmV>-y%LoKO1iVU|zJbSuTtB$M)uSs z`B>7r{*TEJEi|-{e+O~x++3r6{!}@l#IT^>J;aN}((9~a7p1?z-n`6`_<*Ic)AwR5n9aK8>F*7dMy=zbm4 z+s9}}Y0k5;4$^{dIvE>_kB!-!-d&p#Y=zHXJHIV>D&<}Jg0|o(e8257httB(dR|*FiSV_;@4VE}HwnM^ z`3`RvjtTD(z8Y-tBl-)4Bl`IlwFT!uKPvunFLC&^@O0=VUo7V2`^7YedxWn%*WsnY zFA{%Uc&6}X;pL=n>FpN2Q1rvX@$+2%!R0Q$Q_63u@Ks)ZcRk0Yw@~!oPH79CM*2zN z?+LFF{)6xq;iDe?nWS&=_lo`#kA9x$Cq$nlJnaf6@5L(50^!Rg-*Vv@U`v0s@NJ}T z`q(DCf%-Q3F5&+WJ(B-rq;Kn*heZE{N6$#VCq+Mr{;d9^`YK7DX)kp0&hqqmzU*;< z=+{f$6~aZ;&l=(1seU#J|F`ms@Hxn1`A2w`@;@a0Seq;VDdBIcJZ&?aeD{dINBF(Z zcKrRq_ldqn_+*ry@Br<}=Ic9zZ@Jj%@1XFIWUsnB1f04`o65&4KkEs1E5&q6| zojgh5{|mPAM))@LW%avG^dETi*`EG?ulBn|{6F&eyFC6+$zSXg|4%*s%cP$pqW_0S z4`}BmUzFcdJ$#koNA~)D^l#-mt@J(!eg=5@l}=wD5ndqtkm9F>pF{nazgaDOsq)(> zd`k7VO?V6G8UH@vXF)f4j|iVH{RS^~`FBWv(}ZtU{)>fg6|M^}5#B7k$J6KQuoug3 zx9Hbk57s^p34dJnaZ30lQyqV7rjuu<^wlT)rVAZ?x$qlg|7(TkdiC3@^tXt9t@4j> zUGnc1{j~IRKsZkNR$nKDbILzs z<)!y|^lANCWS{RtUW>m~{ErJC7Ji4yGwEsN9L#pO+O2TzwGJfJF4$xqJJ+cpYWGt?^}fbLi*b& z{8cZ#r-{B_^c-|+&&Pz{;Q7n1L$~rr_WVog)A*zQ@eam2W}lNfUHMKyxBfb!zf$!V z6aAZ>Ja3ue%D+hTN0fh3IB}k%uMytr+0!c7&oT`+c0pml{Z&bhEL4K?6tmsFu`R@mtej+?4n*WJEsrGzGcnECqBm5?> zJ^v;7Tm41zlh;P}q4>)^{odmBrw@Dd=cs-r^*DWAD0)nI!v#*BWx_AL(BW;u7km60 z#eYQf8^qr^*QI|e*xF0K@I}hMD4bP&trPw*_GR_8Rd~RY|Hs&?>1&VZ|LNJ&hc0sQ zkBGii^&jc4p!`mW{y22oyNl>0=vIGi^PK!C@^7r)Z&ROEp2&VaE_<3K{vFDHvG7ln z-wNSPYHxMnj90#YRQ!#i{}BC|K6XX%MUVW`J@UtgM1O?*tURZM-yj_8b>(?fc#-f4 z=`$((ed^QlTPJ)}c)M_1^}ApAA<1__IO~{J z!mks5zwmoJ``&!1tG~49kAY2}5q_VCw|e+-4^NeT*DAe_JlCbSMfkjFPQIu=se1J_ z^%Ca~c8dT1N}v0Le<*#N5T2>|_T&Yw{NES3@arIl>j;6#6oIj^>xE zq`ys~&-Ussuk!B@eF%Q@Z&Caa#XltabJ35D4^9iOQv9jcIr(28{YCVL6n}x}4{E$s z7v8P%ZV>JkeW&m|*;9ny5y>O^5{~x@}<@b8%HeQ)3d=d6y>w}TKyiob~i2fqg&lg3H34h7M-$MT;PoL|}@ZZp$&7brO|A6==Usm|rQGUWNlm2!H zPewko$Nj=x(#KKZt%^VCMwkCw=*B-?_}8S@xLz~&`7ZxX(dP><624A&neY#keqHz& z*yP_B#Ya9X-!9>Y)E*8C|48~eCApo*9iYy@^2CTPvJenzmfi<{QpbkKO*|N$R2NU@-GmcCj27lqf_|p z_+KmU(g-X4wD3l-(Ifl<#a|=(KTLJ{-6p(C_<-<7g-;2`@E2Ae{r9*LrxC$Nxr;{$>xq)x(=Sea!aK+u-q^_Uh*k;70pisQzx+%`SYV@B-l%y};>b zx$rd}{X??HqUi7R@(-rF_>p~_EB>|OUn%)E3x8JQzx~25hHmwJM7Trw2e&wRdxd8R zU!(LQ{vV0HMD#Bz{WZeBk-cvg{&P?M=c|9*C;Igo{~Z&4D&=cze^2wu`xjn%lRf$k zY7dhayYk$m_88%3d;I??c{{~_9Blq`xo}?n_j=*e;@>WOhtl6C{0GsG34clYnRcs_ z=REQ^e;w7|IrtZ=j|HMXp!T;^_=VEq4soG_;Qs$SmN?a zDgG?sHt{bM{(x5>&lP>C=$A^K2+t5bE&B64{tLw)rGJz9$JOG$UU-A><%+*m_{CoO z4^46HYp>`lz*e6T9t4|y4vW4LZ2j3O;VL*BAKu~gQ4sDCeq8=yvG7#S-mlSkWO)=H zeOh{Jghyo$TZP{xyifSEs;`s6dxfXp>EziY{sqGC@$jpKSBU;v;dR2V_waPmH+^gu zeVynBgfqe?gs+yqC*9@b$$Ip+2+tJ#Z65v**z~bP^qJV7=|3&JL;PEX|55m;@Nwy* zt>5MUA+@&|!gEN^>U**9kLbT`{jC`B)BY|0&BB*be^&m;Uri-H8!t!u`P0GSc=LrW zzl74?t@vf~xA}3jo0^WNi0pZX@V@h1{6oUqJ^9wF{HH~K z)WZ)-p0<0O{9mQ~R$nuPyOiGo;SY&_x$sB8CSQaf^3t2@#s3H4isFA1Z1E#JP4so5 zUnaa+`1!&+gtrUt75W$YBJs}vn>-Qjm3~%;{u9Z! zTKE!`H%jlLo_=nX{caHd60oHo;e_-Z^`}=;f2PmKf1VKkHpTxt$-77RHu;-2DQ% zA=t{lUpTJ#k^lOV?BST`uNFO6=Hz=G^C7Fh>B4=|#|*IP?dysk`M;N_J|q8^Bt6SN z%I{^0AJO}j-$JF|q4-OMzp3=I!uKk@h(E3PQTmfEaOK}5{zK1pc&G5N$DdbvQT$sJ z|FHN=9{>H~kMh64D{q|owen7W!0E55`tA{aiqc;p{6^um!f*C))syc$wTEruf34(; z>g!jc?-%{OviGCHTcpoPuW<6+|6Es(GlX|SxBBiEzD@qRBK#rb3)_?MY}xlt;d>l6BbL5|PdF}O-8Ze_c4u)qm6<{H^3$DE>$B zU*;c+!tYS~iTeL*g*S@+UCFyc_yv+@pYVG5!;`|_BLC3-mpl2cQ+l(6mrix^^$UMa z@<;vgH;~u*ueG9o@-kOn8-=$~U)Bzz{`s$z-fq!9M1Dp;B>ebAF27U456gc{`7YW#MTLx%}2#>g4GWz5;!ky#2yY z*LqBJUhy;1e?{~e;@>FzIi(-T`#kj3*dP6!^uI&=k4XMQ!fS+shn;+5!ZRbR_=|-X z(|#=dr0`zPJ}0aHTrK(u$+tuJr@}{s|5JGC3YY({!Dc`G!oL-Lt?;brF8`?i3S@sf zMW5}_FB1K@=ua1(5qJ4b5ne8Qf$)0an=f(sZ4tiJ!>gY!c|<=?<=-zn6>Ro(T=){v zCl9#%r-MWPDI5cv{YUgGJv__9U0|D!MEuVNTm5t@y@BVs^cM-=N%<_l6~ap>kKw3% zH`0C^_g6kA`&%de`J`|ByM#Zf_IFJ9(_oW-M#7cv-&KDrgr6b*yhixIO!_|| z{8ZstNtfO;g|ouX5#BC5P57vAT=qIS<>DuWX9-`Y@+=a5q2gDB2hpFcr>+;iSNh#1 zyie_8ukcrej|;zC{8I*9IuCgGp!j=4UoQGG;fKNIA1cDz#lJ;(2>GnOBl(s|{=K5F z6h1EedHJ6yLr$LCs4uI}=sf7RNZ;&rmgt|8|6C&cd-;c~aDaUn|9aterN2e^TZ{*c zzE}8*p1=5#hwqWRk$tXI`Hm?5BI)Op@P|~NyJxxb?329H(hh&cOaFj}&y_v)iT}&e zZ&aUOP%&H;aeonX5pWRzFWA{(?>TrY;ThP8=gE}_%CZek$>w0TYnwlobo%Q z^asJ#{!a-%sP;5H}k31vo&5@C;U6L_wB+%s*eN0FPHy2D*Od6 zy^l(NlUBO?cX{}e9{#k4KkMO_NPp9m-X7sT;g1PN^Yf2OzY%_^7yrwY&-ArI@srZm zI^oxWt$y|icTs-B(}rDnhCKeV_?L?Qb?LJr{4dIXqwq>E{;L)Lpy(aSZ${STm-F~X z#Ge-ZO7ZU&zEAZPwVy@OXEYz$t@=GG{(jlhq@2s|3C|wC?cpl?W>a$by*OQ;g6U~42%f6O~{x#Wugb%Cy7176(-WK6UJiNxk|K{oYbsqf<9{vpa zG5K~Y{m)8Y5q|x7u6&0@|DNOvimv>BuJTM5eiQuGzx4^<;MK<>u+gLXxfT7|`fghM zw|MmRN^h;`_iDZp+2fJtxb(J*ew!Enm7*UM{Ufs9)57AivSm_DYja^?Gm%GW7; zhnN1NlCNL%P10Xl_y^M0M&WnCAL?6pMCl(Dez($VE4lpNM|~N8kMK;TAFW3{uKHXd z`a|bCeQXf^0Ccm@UBd5B`bUKyr2JMNkv_MG9+X}Fx6@x+{OQ7vN}mgb_e!3m@OLk8 z{2PS7ExcR!Use9Y!pqg3P73G1R^G`Km;VPO&kW%Y3NIA?8{uWbf2;Z_3O_{otpAA0 z*Q5H_Ao?+{z4Q~maXCIw1USq-Xmdr-Tdg2UDspo$bhH`kN_yCG}(F zTPplM$x{*jXVu?k;T|m7()+0L+bsIWg?9;mO8B7ggHv4jg1U?U8RWC^)-2(F7G5r#!hUQ#7unC#s2}rJ z>qP&NPpYpz;ZJ}~zY+d#;+y^Siyl1J z(X+yz7XKRIFH8TMh2O(^gVld@UguMiZ8 zJz%3p_(J3}|1x#Vl`l8#%=UP(1*;UoqXrQZ|Thx{(|ZwqAwMW`medzqwy~h|2@cK_K_8SD*CYc+9doX z>2tgAFIE4Cg#W{94_~D|LVb#U#S2`1lUF-=zv88Lz{CGd`c~gP;y+*X=y}(FzR0Dw zRP?%6KfmzgISCH^SIp&qzo(B^c=+q8pJ;ylMcK<5<#&bJ;}+rbMEGOE zlOA#T_p3b7dPtk>EhhSFgck|_*>qRlsQxY$eTC>pl>TbrgTh;de+ahv*dzS7?CqFv zpX_1EtDJnFdY*d^M700$OQqK-`j3^~65(aCzl!h<>d*AOMR|+ zX~Nq??-QOToECnW^uJCxuKc$P|6KA$={+cWJs|pwDE~Ds|9?Thrk|<8Ujdtcjqo3& z{~pm_toX}>uLfKE2tSYdvHrU*`V6q8w^8`j*sHa_$Uk%_y&a-2zSPn83EvL3^dtP3 z>_2*57yeP|$I2fQzFzT{3eT4OMd7K)Z{^)6+$H)B;e*tt>GzQEuT%f+Or||V)%P+z!WG_*Be2VnlFaB$lUQzf7 z)#qB_y6SJM@SW(#^4l-`YtMh(rT9lgzen~E;ko2z`i}IIl)Xms4SD!Z>3{NCSKi-v z`K_V-n>^D+??hfJ{{rE|@)v30yOrKL;eN>z*~9&!Zxj6)s^2}rTjg($2*1Z`A3LA# z$`|cFO_IJRz23?H4V7=E@NxOqg~HF0zet0v-8~`x^`d`_^esF}|10tryF@<#Hho0+ zT`K<((f?cibkZA~JS#nYpZ4_o2kI{z&x-$cnECc$3?;grI!@`w#v6!_%PV=i|`Q-=Y%7B zd;t5f@^4c7xbojEycYX2dp;=qu{HC8s{+|%va3ue~dw4nW89kE!&7@~I zl7EFqf4k_B{F{U$`Tt5dlK-Ugi{$^Z=#l&%6prLSCH_v8=MTdD!l%JzUlIMOY9A4O z74>iR8P$IoZ2ly|qvU7tqw@ko*oT$3uJnh&=C8L2j}hPclPLaCu*Kga`j5e8Uk8Pg zviB3hZ@|8cf6|*>{d`aI&J=zO|6}P#{lgliALUn;y)F{}R`{(v5&!GpZ!F&k@>_ms z@xR$i@2%j*^1M~!nGNC}Q~aI6>y-Z?;jc-5Cxjo7{-(XfmG2uWZ#15J<_nxWouZ$T zzl-L#FOa^X_f_45|FHU4B>oRmUh7|@@;;&dB1*p|`I6#)i|`uZ!}7gE3z(2YN;zh9DG#dGS|!@lSjF8Tu=e_n_o` zwa5Qj4^Jn))&EiP-ynZ{TKM%I|F^)F{`B>({@xe)>uVg|D%>af)5O1Ac$xGYohSdE z=oQi5BY(P1_%ZpX2!CAkEuvqd{wvnw@?R(avs?79s{J1qejE9jzT4jF_&3R(JB8ol z;YZ|;mx%s;$+JRuE%t2fW4-Xt(ZAK-PT_x*zuG7Kjwx<``MB_-k~espljq}Jdre{g z=AUMW{zK%q`dTQw2Y$nmy-h#Y;Yc5kdF6Q;^<(w7Lh;{>{I=h{R`^}u(4PrUp*>pu zdxUpO|A&Ng8Xuh$-Xt77e|?ecYs#apeD73!&k~*n-Q-y!{BG4xMfg1VgZ0Aa3vU&k zD!f~`sQeEJx1n!K|CI30k>Bcn$_6LT`=!rL;jPkFzwrA!{r$E0v!Xw){MHL!BYC3d zZ#z7^llE-&6|EmWUG@?AlV?&tHon=e^foKM{ld>xdPjwS_-t2>;O*}F3bnt;KR&4T zJWcdlN#yTcz*Fzy1t;S$VgLzFzqq5dNCv zKQ4Uzc`m)F?{xWJNBSmjpYY$3zu~3A-;jJ2;U~bBUxdG-{-JHTOK-i(w_f~h7r6YQ z^|EWgmi}JRFZAdadw7TPKPvu9Jo@A;%}@so<*@w*`Q@Odep_$>DsMxl@JBJoG~zMIb~KK*>|5iY}L;r6NV`v&6P z#wWq&_74WZCve!GEEbA!Uy5dJ29 zueT4sqtAEw{QzMP@_C2CSMWO_z6{@KK7Y{=$Kn4&Bj>wHpu?n|A#w?cIw8-ySu~@tkD;COJW>Uz>cAF+_kuCsGyWqu)cYBMfdBP+2zIm_LY1`xF2lxa5*3QFDip!`)wbe{zAfxZvPqG$1@0Pq`%0+mOuC3Ruh%j zy(aNJrpa<8HiCPK^~6$HZe7e*%0cW`?#>BI%jP+V8s2L+P)LsIay)K*!=0oH$=N0D zcT3FfjmLZDbSLM|@9La4n4CLj&YbSv-mbpnV0UtUs&g<2>gk$4kerQsD{-UM>~bX; zDk)>GGM*f$4!X8hB=0-O??-&>9ryp+=^s$~3DTa&XOKI3F^NhcHpqMVW5_XR*Aa$y z+giEpa}^)nuU{^=b5Via@q_>3erWTk?S-PDGS~U#jhq@x+5H>z2bEGGYcI#gJ#+26 zIlzc_WMrg0Ud2V`?N+BsY9wCDOmXjgIhEkrXl{NEYpE;(FXJz@ zb7OkG!hOQ|GSc#Dd#u=9G)!Si73#EHI9GyO>@&mTiA1W%oy!&OU5pRX0ihx; zgHD^K_+4r*7Pw7(G=v0jGeN3Y9U!QkEZXhb2ow;Op^(pxdL(44lPtO{lrm%75?RPk z1V!pCmf}OXI1EF)`#)~?dY906vYaiTd}7!wa&%^ucCNq)uf)p?wpa5J;947e4MCx3 zeCG@K6!%#w@Ds^Amm+f|MP%d-xH~n^ zAe>Pz++N0Q$qB9iDU6V%nFa01a-y9?Hs0=h%2|kVJs#Dnv^hakUEtP=)=@$s+MPvs zsX3Apqui4A$C6Ai5Hqu5U}bTO6=yXO$V%U$Md}vRsKTMp|KN5)KW~10rUCvlzi)p1 zf7>q}`>pf4-ym(f8z;ht`E7oEZLDcm5z+0c0VK1d;r%s456jcV_y5=OScN6Rp2VD9e#m-}UB7D!ZYRy3FrYHo zlPPyq8I67BRk2JtmQ3NP&GjZ<62qTHMTiF2;Sl-S*sNG2Z;biVX?OR@?R?u>?D+UP z!{s8e6)V!BkMM1E6s467TU;zy=fzJ}i#Rz%px+5oAkH>;?5@!$jc$HNeNYd-8?n`q zh3zMf^<%w!Z0tFo&$WE+PYh*lGPUb6+Q#~`v1++cE!h~#?h%UeSitZ9@mMHbsT7&d zbal)RYsEE}**Pvb49C(7f8Q4T8TtI44K5qsM);dgb>lb3AA{d!3yF9!o}k~F;QPqa z+&EdiBK8&W(1#adStehpD9t~oU^XU<@CC%R@<#Z)r@OQwd?ncKuZi&YiEm@_2>(0S z>Lqyg2i!6*1;j z@z{zx>7rJ+iQ2eqme!RGvfk&V{eXv!-pJqY(bt0Q?xU#ee-3Wc&D+6Dp~vYT@aT_u zbi-zsQF<1?5&w*eXspX`3qRR0ew6M};@P&&`GlRoZ^OP{G;7lQE{_HMCxeJ?mLBugang zyDRCHe4F2VBj4s1X7X(|mazM{%dcBoWx4Ml_)Tdd0(TJCT zEo{~~=ZEu=JNbPVpF8;U^SPT(q?3F2eXqhIJud~{$LHmIIy*b(bar)iclLD7?VQ)y z+u7GSe@-WJq^>#Lb9&~?oilGv@0`9l%$>UCbai!gclC75?V8uc{HbexcW3vU?ym0c z?w;FMg}?&;~7+cU4Hx2LaX{@l*FbLMuFw(6?(ONF+dHqfx3{l%eqU$boW8EU z?!KPBxqb8cdi(nN=FdmO`D8zzq~{ZDK0#LIsC>3IbuUX_=4%?mml6JC+vNYauc3Lg zn0FKE`kL)eJwLSZ@8b8(&LaGM`X2Kw5&jRbjcJxwmY0_2mk%xpt(kSDp&L*R1Wh zKH$Ft7bL>(wcmPo_?`O7SL{3X@RoDTeI2VU?zQjtZ@e_e_ribM-1&aKH#~pu?kD)} zx$;-TQ*I2_9O)hX{Pi~mTMoVc{+`;6!M;0(a-aS1jlp$qUvYHV_itRd{-gEh{oO^2 z`hWg|Cyriv`=WPz^Ny!~?ZlczzrOAJUp%M%qlzy}m{+FAt_~8fl-Tc(mhkp8=1OI*VYw!4CDSkuuEkBHne(g6G zq;I(_bN`LIp8MD>fB(LVul~kY|MiyV-M0DU8(;g3#ecp0^S`(%aoyq{Uvg>hZ~v^c zIKJh`-ukaTxOjBmv|m5*4~G{odE{#keBtNk-}>0{8&CYx@Xfb=p?m4^zkd4aTbFOy z`HwGN`}en&_q}h+oPYbbTOYmlOOs#q&}Fy%W%5=3eBNbu-?r!X->v;?{PnkWKJu=q zw|wFgx4ks~-E4N}iQB&VFH_gO@%uAwzy9-v8%r+>rk7v6F76)#Qh zz5V_b@BPIckNoEL+^$La_Z^+18qw&d;c z!8c|~Prc(;zj@hDo_bf`9i>x`{&4R={*GIIH~+j({{H=UTr#%r>sNj1TX+1`rfYAm zY(MwTX)aOZVj{O%K<=oq$_KgRt@BhHX zcYXBZw_f;`B}?u)f9iS1pZL4i+;#C^od5X#%RYA3gMawufzQ1EXLtR@XI}qF;4X<3?DSy@isf9*4HK<#$B-S_u?-|u^BxzB%}z1N=CUVH7m5A$E_n`oal{QJh8 z$`a$#Hk}`J?fJwpuN=>+_~nbl<|X?^S>LRm)HZUHz@d>*Uu-W#hL#-25@0!#CTK`+0WA zey`+*WVhqp`rJCydRYCqS%>=cA35wj_YYUMu`C*PYsub0L4)@U>l3;)b^EH{hvoQr zZvA;p(D1778@DMtm_7XT`6n;eySZZc{4KkFZrAtd@XMpRmc1G)rQ~;G3w<+trtAr4 zSM%N|PTAJ3D&)*Z&!n^uuHJiM|M8S=VNsPH*WFUz@$YouyR-qRKa^g3wsml2>ZSz~ z>IH_qn0m;2ecoH=&!qONZm|2}(~U>O@Av-s`FXJ;x-<*=Eo$P-5%>E|?a{R1KSn&& zX{0gh#KjRaZ=?*EW@$O{nO=cQRy{myc3IB-t@xg>BGNilpJ+x^h-+<0=hlonLcv+*-0}?qS8w*jPiPB{{87~UkSZ@uJJ4B zKcrjpPkr%C`uG2MFLLjgG@#kp6VS;yG9+s#|9%$n`EoSyje(X40Bf7fGO7vq>CPoIk%Iz4pEJ9A#je{4a? zm@Z>i4y=4-?U-Br!&8Qx{%p+Z+;+cq>*$`nch^tl1A0VcSH2Q7v_a&g>|v+3=cF!u zDZ9J9`{`fb`YL|&;QoBq0@V-Gqdvk5j$F3 za`tgqaP5h|u;^py6$6oMz{)gsnhsJtNv<&}fu8{lbl7k&B7rN!ThTiOP z(3zhb6>%%;sTON;M|}L&^*Lid&fPM2)8w)5*z#VA+qm)c*8X`TvOfLP>znetA41=E zJ>^)R_en%`?!2VadG=xZ!(Ys6Fm6HqOKb z|GRAqX4)Tpchsw+3O?8u^2D197Z>dPZEyc?gZCBm*m`YYEAeJQtFo1$!+g6GUWgAr zu;GQA!mqztysc5vs=|`Py}CX6>Ia4PT@UZt;%h2eP}-?$^Yy)oR*b!IYUtqcMbl?o zU-r$aXNyi{{yxoD`n;&)wC$IcoN+InuqwZOXw%5zC9_PgS+XV<_o?qUK62XT;zNxJ z-(R}wZ1ME8{Z-rF^)5NmbK245CJ7}2=B|pk;Fw*KwEo?OZQ8w2^6iq~mBnS3OFX_{ z@3damYW%PUVVwgPr;N`}U3Bx!*B>4K)u)rc4DRyo_>+%#H`;aU*YSxztX^4qt5fN* zUk0o(znxY3(A6am9Vl8>x}o#$7p4q;ztkmtYS|-kV%hr>Mjj11)4gm)QmORT69r{Q z%lEZ>{q&kLY3QU4U!{Cf_P}$)m-<|GDQ~dAxEVMX~<%Rl&T#-I)5 zV{Y&2vc>+-^4@QkP5&akVTH>}38#)dGq_@G;bIr(b5#{PEfeEz9eK6lhl35y+%$Yw z@yV^2P4|a8Cd}_!ozgrpX+mJ!{!8b^J~Uxl=Hzjw-g$dM!)f!M?(o@96Gp5GoHyZ! z|HP76*E=N{(kHg*^46*bS&vQJeE-FFSA_1LnD*2+!TqCeP5f<_yYK$*yHsxdDXCrP z3u7yv4O;)o+{d1*96Ne&Nw=vVRtmqQ9SU!1o;0&-`E<`Sy(e|9UKbeSS~{uE{>8mk zFMMuN?Bt2IeZeOum27-C=SH>1#L!0_i&r~aOFB>y4H!l@zc-`%^xwtMQnt7Th$R-O z&iut=rrG-VZZ=I^J}qW`yR`jF4o}x!N?eGK=ns$g?_pY3tK;W4&;$QOn8pBdSI zaQynG?>|v`)aR?DPw!v2KswvBz3cQhKbu)}UugLBb_-h_Jhy+s^seO_d$*XfaeDRs z3v+%t^v~(Ec2ae@(RfY=Wq|%mIxQ_Qxl&u@=D{evH3H6m!&Ncue|zfi$G~KtQ{TS_ z+)js&0Mpt}ecwi`9ltMdYrI!C|L*0=+A#wDg&(r;zy7DLwEv8)MXk%{46=Rn_P_aK zf@qM8CbPw=M6|isUES*4o6Em?fA5(8BX6?Ny6XBG%Wswg8VmZXHsf5xr62X1zuRVf z(Zi#b&G@g{qsPF~pqirtOESx`<5ffhH>$n|w;$ZXT9n4E9{cLB4R$a6d&2ZS6Z>kV zv|Z(pcPvA(4_=THkXM#Y`v&P*I0urA-9!H(=frf_oZG48xeXyjHbynQdBBZ{Jswhxd1;; zMwQE_nfv($fQIsDPe(%;9bslIb!1G-xWj9d&MPz{GJfD48Rm@d_Cl_QySyoK6laaY z&f8sHq2$7VMlv99jLN`iozlX{HUMM zuVX_GZu{;Am-zF&1pkgaJZ+80F+v?Qr=%bZx+xp2gw26#11^C}V^ytX+61q&t-_Wd z4CV7_xU{cQJ8V%!K|!r;7`7AP$gccfnrHb=6^+;PNQdV1WhemIomIRN*s8-%*LlAI zxUKH}OTbh|L7lsF4er*xM@Y}itTEZnoC@Wag-)7Ns-hZKwooGCU-;FwCH(~k{{vA9 zigA_<(xp5XL%9r_I7N=J#g2)k#TeN9JW3SAh_f^{vjpcK`LQ?IO6(}YsSD)qSYr=Z zvDJ659pm{5{HSd(nCOg)ViJa)<|X&Ba_qS|YrL5c{7E)KX7a;oYJ_0;lkFY?MdK0! zKbp(PrksIi(*3YW#R~9@>7J>lk}82|yr?|oyx`jz@TYz*>k-IAL4~s#e#BEr2R=CS z3_lt>S(6|*GjSjS2K4=kpDZLC>?ANumi!zV7sJ?pya+!UKfl67mt#2v#n^{MWpY92 z$gp^OFn8U1veAx(Y|Mb4Ki*Njsd2N4iy_3ZivYifI`34WTY=3+?ZgmCc(no$rvP#2 zM{Yy7oz;MK!YxtW|JnUnbP_W9XJ${x#F-4t1DHiJN}Yw7d31gzBh=yO-N%9SPJ*v5 z+?#Nzo&IB4L5)#{qg}xPL40oKn5*NgK@$&d7j6xGnd_TH!i=Ru&B6XJSN$S2@@+PO-6vx=^20Uek!~FUnc+G4iGKRukz@P!&p@X zdQ?(Ug0i8+$MBzR^fDYZ!7*IExeMXoEG#LXq^J!T^_o9atz3t)DX$znK{&-j;h`Wk zM>w8?{Ua6886)*sW1xD-3{*tvYAR5)T;OC#pb4m4>Tg67K{c-uGD~r;PXE3V?-O~^ zl8TFCP_RfUnDU%}!h{uN-&f%*ofIn{5*o-0q<{pJM|srZDp-!I z0Azds)H#wvL?riU%-)Sie$mLLaP+Ll7n^#p)1VJPX+C$SIQaJgbq2KpH3UhZYluU< zNEVZfA~{CSDyDTU$vddd+^>Bz=l~#BkO=x2JkEoTgZ6-SfZhOY1pUWjzs`9Ew0)r5 z8|3kiEd8lpoxvU|M+yrc5D__WP*n8bAu+LW@d@`0O-xE2HasPjwu;^mnEdu5?kc!Xf}R4c z233QOlRqc}qkP4W&rUts;+<4V@<{>+&2MG5)u z9uw#vj;a6s6DW$7>nrON&!EGS3|s?x8uSe4U;cbqD?iqzt$(}r9XfUj2&`Fmg!W>6 zSik=FuAY(DEKmR6E^_|OJ}m1Y!${k%IqA)>cBr}t*TierabWv@GnH6=6kZ)AT+@;J zGh?KZ{>NkG5A;uc-@rM{yz=zooE+8S!L34Np$>GK8-58xWp;V97Ru)Vvvx zQL^)?*aJ8kcoXPF&`Y5IPTi&#R?tzbVjRiBLW*>`E2xK2a9@L-kEM@>>CRjaV8!m{ z=;P>Bb0QI|k;*pmdTu6M8p|ply3a@Tz8SOy^fKr_E=!3MXF74)Ks{O9sSD0w%1ajI zS{d7pd}JZ5C8+FHaKrP%W5Wl9Cxs`3M~06GPYs7(P+NHo*%>a1$GR$RH^uFtxIGoO zm*VzO+xwBpVVUY33Da* zk`A~CF4f%=iu;V>ZdBaY6n6()(m(dXr8V_Y#T}9t9-9|FC@(xIFFYYHJTfnQL|%Am zUbtFrKYw{m-&S$kD{d#n4N}~$irZardn)dbysSK>$jZYY)hEfR_#~(gk(G+i2-PRG zSn*NII~#ndypJgEQpH`Zxa$;mi{ieixbG@%7Vhok6aHPeX94>EhxV*vP^7e+yn;R~*HXOOJ@gTP~9#GaQ zh2Lzr)Q0mFcZuSzQrxwQyAdv}5nh2yb+uh_sV&N5=^tu?@+A5vf&Pi4e@4(hsq~Lp ze)slrA8V+%O%%6<;`%9WJH-u9+^&kt+a5)TrPhSYTOKZNc(}aX;qqpO%Uc~TZ*;h7 zKB~Zv$~{+c7b@;@#jRG{b&9)Laknb&f4+Z#7$K*@mgHXb%qJfF@d;VM3w(w zM-N7IdJG-h4=z?$@%eSiakvgX0!)Un92}P|aFpUqEL~>i=Iu}igrR#U**4c2E}9fJ zNIFBVZ7vN+3wg)6t12 zt)a;{$sHaxU`W!?umO>3tNsZMq;4j0kelkgTY!94oAi^OAU#e5){lXsz_8CcGYhrD z$+WA5iX&SudSr6aK)M_}6+BxaEZJ9TiZ7qLrd!kU1w9|0W%L-ua*sg;m4 z!dDd0ZI-cg5s!{u)76t=6sS~rl(*mtorT4?;;3B&Qui2f_tIH`EA%B~g>z;XLy?hh z5%KX>T2TT|-0Y~J`>77v_R{Qrs?tpyXlsD%goSh<90kh9wVz_#GRt;OfGp!av~^d? z17;)VxH^>Yti(k3}a<6t{^%cycf$YJ=uxM!GOdDYlUWYq!w3;lUG!N8pA?`ibVUYnaElZ zuH_e(=F9oa#nt)(eRc|pi%Y0@c}3Z{Y{)OEqR6zj>+cL08{jCLR7iE=pm6P|-8#{Y zO3q9v5F)F2Mb`2v3S~xUF@D&dn_h8yijLn?0`TYN_!?N#ZWH+>hAdve5Ir!(W)@JI zlTcr1zOt-R{t<(cyb=t2xm4N36N@slvr+eDJUQHk%`2dKR6Q}2a9N9z#K@xCh|X-~ zfwsjnvv}80x#{kB({)TV3zCP?7W{OPkQnakYIhsaHFA(dHo70T6@xAIe)Hr@eJBH^ z&3B@?eJdX|&F2!5pF|&kl-qI_OR#ixMj+`?VrDzjKkK4{+V4ypn#T9YnE!a+Jr z-|z4Nu91%zbp_Z=$F`JuL;H}DkJh?)ZLm0K1T1e5(dJhkMjz=hWjJjxsTd~+Ad&J) zaYTWx!7?e>gYVU<`S3@4sxKASGs(J6O+Mt&tItRhcu-zRKFb>l7_M^Tv8i}h5B?;J zKLM%w(x-Sn4*IN){|VsFLDWvN08kG~$X}M&4}P9_NBrv6b8%T-nF+gXV@iLzd@Kz#xR9G95>|dcjrkO<-C#s`xfA^(_^@Vvu*PRlEb3 z^aT~~QE=UK%O(|#2`t989ui-Nw5d+XF4_g8Vwz*AkLht|V3IPB3D9vI>WZCq8cXpB z6S@MAYeE$`zj4pRQ=!a@ymGFb)M&`2c53(}G8A|KWh47~t8R7)zA?Owj#0>c3b1a#qPDe3h zHe_2z(%R&`@Qm7;O`jYbi^zZ^Ds^N!V4}#vRp*){0&E+>KLz~nEHO?C;hau!QJ}0} zr9(gDqZ)m)hX`bc3;HV1)?9xz%M{wf=+=>gZ>FR1NsW2m(^#1&w;)MeFHiV z`WEyZND7hr@XvTAon29A+qT7|jo_?gQKcSYOr) zz*I++Pny#%g1!g2EBF%J%OHK2E5JX1l(K6DSB`O&7SlHX_!$K*p5!Tts!_jx5fJrVm5Os&km4I>$iuQnr|* zMvYs5N>B$r)99l9KR{RnE48v3fm2h-Xav3f|mJd)>Q{@4wX_%~;Dh!fq6wxRsraD*?12yYZIf21Y zSu0J@w9*K!lp?i(bS#q5Vczr54QLFn0g;TXD+AFWf%s%tUSJMa5t*fr9R6K|B^~Te z`OfVp@)t_zm}wchB;>mq?>)q!IqV+sXidm%FOI%_`1+uzJiQDnLoGhpVJN=Jk8~cw zHRB}*BNBoOUuwXIbFfOtme)P%)(j>;jK|`NvAJ~0a!f8AVx)`HI94hLhrJ193!C6G<&pwL(}JRGrYLFU}?)>^IiEA2-omF_Rfs zN34~6u&>krXIO)=4uQs)U0j$x)`_(qbTX9So^7VAY?AuRdSe#&x8`Zc^CIa|q~ExJ z=$Xny&z>ME&wrC>EK!}SX;7MkDG#J0QNCzBLiwR*BGNtR9fc*GJp@Gki268%rGAI0 zne!w+dPm`jC-qCJZ(4V~sEZ&D=qcLlWqd4d?| zQfCkLPtZr89iW#%&x00&rh$q;8K78DThL{c;}g)^pjSZaLDiszph=(%&`?k$s57V? z$PGmGK=n>-Ky^w)bx&BWM|w|nPxVRlr@HiBZ9A%4>NjdT5npNpibtfj3%w`)^q%4n zrZlM?)v#*cGs2IaFZA|cpMws9wt+T+o&Y@rng%KdWrI>d@t|-}2&e<71;`C_qZjHF zbR2XD^bY6^&}PuHpeI1HKoddvpj6O(paGyBAb(IpkPWmIdeBYKkD%{Cr$J;bAqD+s zK55PDqF!n#8>+AcDrm508r+8W9;55kD+)=)f4j zl<0V*m6VEq5P|-UA20;Y(8vK4hH?ND8Joa^L_`k-8W0~B2mYyv_$Ofij&@PX@d-(B z@v(`6@J}R;d&NY@flUnYicE<_pvXA9M_J36&Ds8363%Gaf4!$W0Iny;uF9*F?vK~Eb)z{$T3JUIuRL)PNe)q$4AEv3&Y!_ zq0w>3&>-+jjE+f+ye~RpXlztG&YsCh4GfPSG%yTYBU7RilOpa*jz^NQ5%^F_SVY87 zd^3frCuRuorW}PE%@;hFEyE=wIF7DvhHH4hi!y^ zMTN4Y6;&~klTAT3!lKZbC8&TBd{_mmmgvBEZU({U+DO5Y?emDO%X~*NKWp!}ilG&Z zOyf$)DGrX2ljc$$0KFc}sX$Ob$a+H-+5k;Q=Wn>-nJ1+)JyTlXGN~|&J|O7erfrl` z7a|}D`zdlV^wBR$V~nbu2Mol11;0*3-dZksZSc(|nATxUBKt4x9n>@n1=lRo6kHKT z@?8cpHtcwRTd?B^SFL!C`NS{T-42n05t}EMhzV< zfEHWaMpjOr-@-xWfLM$e+V9{Vd?;vn;F~f$3RTpY(!3J%Ncl3vU4uKJNb_qVwb~iu zvDPj`KqBu;)W|grO#M}^M0M~YD|`b99a~!&J93nMpc`GN9d!G#rF`JyOIu^Hfl5X` z?TSM{G~EcJZ$;8(QXzV6b^xvACZRZl6IQmrV%P}i2( zs6^WQ2?$dgrPj_PRSWN64qmw!^Z|}Ud1sKep3xQQgNP8&G?maSLRQ;J0gJiQ}q0MR>@h$s20yh+bgpDBHc zM`2YzdZzR!4T`5eQ#^X7hSxvq{nT(OA9|vVsV;@5 z_=G8)&m%q9r=Sl(2S9IuUIuLfJqLOkvx;< zs2a2sv)2Y9gG zKtF>nfV!jJXx%{T1zID}`hxav0zqW+rF9(jJ+imc`aw^$E}`|g8eZ+E>Ux9XQh4G? zL~BZlLv2OxD7}^-hw@B$ARgq>dWd*aIC7hSC_K589`U8H#EogR@o+Oi13-Zw574hsIO`8O4B7&E3PfQafm;L`4(bQ;2iZX<26?c(pv|CX zK*gXTpw1vO=qJSe9CQS<6Z8V;VbCPd7|<}#KoF(j5Ap_?L1!=?0s`?#wM1F)vFN+a zqAWt5+qev65c8xylVryCo*}|9!;&h<;z;3gl;azqcL-)&rc}>~P&@#6=L~UV^_@>O zdbLS=qs(MXHxIMAIx{Kjnx4#K-bFKHFj>>|Ebn(wF>0nhrdKp%g$rkc3kqsNVc~!i zFZgsJrYhb1hKTZ^AzE*+JJvFYf0q>qyNl9{PgJVkZKhcnCM{@kB~E9luIjYqPwl|` zAOyRMTElA3mrS=rVVcsVRrDRpiaKuqseLuYmep46SnXvSBW;KiGEGtCYBF^nT30H{GUdFE@&biT-2`BF(QPP3EzOAs%9K?Ux$kM} zVNKdxNv5cEmI^i9=5ERzyX#7d-DPp8YkO6BW3`q;+LxSR*hMyUD;)jmhTW+JGul6L zkfE4chs&V8LoGrcJqO5g(uk8tOeO0X}0W+RYeV3`PO)y1$NDAk_|P@q-BP@ zwS^zgNDWfE_}#QfK7^DKX=9;w8gJ-DUT* z%3vzRuR@Gtp9p89HzY6NQRDYwBk4!B%pe#-j4uf@g?K}t)SMkNKF#VInj3ZrUm7fI zqmc>O;tzt;7%a{gkBFTNG16DY)#5eD$7nHb5r-HXik0}wNxcm}7|ybH4b!AUY`tNU z(N8QA3Joo#4N?TVF1*NQ88X;8!7MG2MoS%7iqKP7%yt=93IoJ}!Y@!be?#s_w z`OIw$c#%G+;y49U-bts;2A#)(%e^gQ)ei`)e|SAswRAZSjQnh52cPIg>nqYb_k)gN z@#6r4{;mdAH5)C}sk6X#U2tJbx=qBX_~IWQXoXO?>w0ac^gT zA5!%Fvgc1+<=+P-O}6$===*qpb;T*e&5(xm0?(GWy7=>vk1Qvp-6uA`zukL!*XImv zT6`Nv8TuDLVQRqgkq>^fqjdFW#~%!ASbuNAm-!_{gOAiZ{`kj5<6myGIcM)CzwQm2 zjrb_Mw_DQfF+0nW4>i90oAXEi?a9CHJ6Uz|`=YCdFP}{RHPNW`pITL&Q&8R|8)w_m zb7A=#J1H<5hhvNB8%cLITXq1B@|HXLI)d2zkbbC2|wWv z!j}}t!PT&6hK z-lYz<*TJrJuv;BG1en%fDnBQ%KK=2)e!BM)fc5#E1x)#)->JwZeGEsMeErV#LnIQ| z!M#uHYkaF@!^!K%IF3KLeaDS06L0@={UpcsPx8YqFB-PPgoUBzN{tyYHicH?DI0+JWabE!a5z$;=x!IDT*5rB)MLuKI4u4T(e!D@?5HzbN|9 zi%W0VIUaua^-+`R_nx`sMgxv}47(oNeTn<7_ip%b9KSp&r1-m~3%|bM$ML?QIob2U+kH4Gl}D+2U>4CygL7}>YHgC&we&*nqR@j&)>Y6&G9cM z(p^(>Hazq3%>s_w{P6CVk6k*}{oJ-6W2 zT8@`YE1!EL{e^2U+}ga z-)`;Zc;oabNB5rTx1z!ALmZoWb!flaJ?(73?PDB&w74v9g`eO0=-Vebc00&s{rK90 zH^IN)`ooeaUr*4;LcCWCmOeD8^3xk>&@S{y}tWc=cmVf z|1|%L1UM7BY5)8X=a-w`;x~n08*^@G@~CCstmAyd;I3q|@!`KU8@2mK{@2Lx&8}~n zKG!iXcCo8Kvlz}SK2p*o`;u^?tx&-6;E9)?Sn*8Z)8Rrn$8++hy*j1R`eT|fmE(zC zUrbtaHtE%g!fcLr?O8c;@dG0tSS-xvxX-Ai`}ZVv+rLp*!tpEB%YILLwf*D!gjF1W zm0rE#t>jc9`Iwjq+b)P#Ic~D5|Ld0@-7wE& zxWRG9*~6c6zue-e!yrKl;eJf#Mc%Ov=futbLwAxp#xxUiU;dn?-Lgy--hz;rOm<&K+~_*wVbR3a;~5#=vHS zd`|ok>u~=%?*}RG@659= zO~g1H$9E|G+o_81pHS%4v`>QfJ@px?4_!5=ap-Td>g)K+I=B_|JgO5ld>deWdFk(= z>hX5qLAvlC0T0n(y4ykT|FBOfXQ9%Z^7%O$rFSnEs%&J?D5z;!X>EhjpgJ=(&Rh44 zgNsn*WiL8Qfp^LsV173F-j(vmI4do+>eGMsG0M>Ul# zKJ`lr*aW0Qh_sN$QXeM?faQSjVb6kx13dP?CA)MeNWwaWe&-ebs#|kJT0UX!K2}cO z11^>;%tD#Lj~pxhQTdR+1V17gS1__c<1O>;)2Gj!Rhr??x5yp%yL!3h?J{f*WIm@n z6rZB&Xp=qZIn)7O!;vo4PYGPg`%JiYxQ{CN$-wiy!n}$wluu%$=JPoG&}6(E#E0@r zx+qCr8ru%~O|f;f;ZM#^aZGbe^SAkTw2kE9)$)-pI_i!_%_%Go#Cj0T+9_AQ=i~(M z2B4tI|5yHsi(GGNJ=8-zxPv@EcdZU(T=&kC>th5q;F?o?{D(i4UlRCr0zZ7R5npJ* zUzxOi>hAd)XCo`>fqI{ZAINk-ws zCyp!Nm}@DFBz$P9V^e-Z8v#5CGW27J;_jFuc%0mq2f}Ts@t{xU${Z@;Py0#gdpW-R zj;93Eak)Iu5s3q~9C4_8FTy2xbgyr2|4;cN3;*Fy{KKE2&QGGBF2y_Bxx7^WP31%R z^10h^G$P3XJ*GBM@i4p((&29CbEM;_@5j`^*$TdE`USWgF-eyDF$MCy%8}sJ2BhLF zJX60-gCSr(!jP;Q84wUKik~7;dKiRytqFkoRtEG&gr|M?b#SRKsPZq%i9cUTpEaN^ z=1&j!%iH)9vb zQ8RhhPp;p!h}Rn7$=2orQZbF;?jR-@j7F15G@C4DtB1|U#oOM*)!ofrPjWZZukUGX zBs7MN+1t>>+*I%pTQqVQIv6^+1PDQf&SDqgdGQ5ty|lsdyLjDrQ@mxkZQWEkY2G7G z2Mte|H-Dke7jE^2#9Y4-5ZEtmRQj3Ok370)@e5nt+_q=$frDS3J$IW)9`)OG4(<`! zt55XcQL`V#%U9prw)f!SBWKSs$<>X&4eb>z}Y3M8-4%u*Y+Iy_~exzel9IrP+qaLO+euDFa6`~eMde$^+f+=%YzoQ z`0&`_+i~$DMw%`4+}j3Tx?EJ;qffu^$c2j%$5!k=aP))YpM7)dHvW)Q%bBO7nGu$z zlF4JnMz^XB#unBYO%2`_K?;=o6H`zgnISO$!3G(W3w782D3rLIJZkigNsRU zYiNu!H#HA8i>Ai*1ZjYwlR=O?O!e%cQnS|SjzVc%>#F_6nVStwOfzp9Qq7I5Ue*To z2KI3#o2iK@)!e~2(AH71OM;=ZOGl}R$;D8$5w8L}#~P~ET6!Dm8G4&TEFFw9Z+m!I z0zEnzeCzqvtC}y(T;}c4aPAUgps|-(bn~)S?PytUull5k-B@+oSar(&~dKqk{5X(S|-Bj+<+%Q5)wN}mY^076t#z<8Un>MVqHDfK3MU%PX3=7?iZ-K*=q9-f9%6l?r$+;!q1agT zcJ(nfv$PQWgmF^7_>y6ZxE=c&ABe~7A6q{WKNU|1r;Yyw>*) zufB2d3!Zvv^^|#!Eq(gsHy_wyGF!X%={xMFqaR2Oyt?-oHhlW}7hig-+v)lbKJ@5Q zT4$ub7#E-IOndzwO?}K3n@fYn-Ft?vd*S$J)*cHNtuxzt_07p!u-KzG{q0MaM`T^S zaXT^TiIo9?ZT*v+3k<1TcWyl=G;a|8ari(S8{ zSpH7IolB5x{7G-z-0JNJ4!ZND{P7WN9jJe$u(sY?ABpkhS#o(!2!G%wF48MX(#wmT z{00+WB}X+kWVE>4vARS1 zAVUKu=o5DZ43pU>#ey;!QvB52~XQ0=boDmXN4O*hlP%{Hdul6QTqOe*r}hEW&+)XtrCj1kvhZjuxAO zpCI&b6Of|OMewr=b2D4Qs@6$YT@MbVCO z1qxlkRTPaVcYDzyT%u|d(DB{f-JvE5XN1R%%z#o#{;(@P3;s+@Fbs6*EKL!**K3Dz z+6wxV!? zcma7c!EGugTgYb|)d$`>4QNy&%mU)iXnFJqVIk6!1c%Mv#9PWF8Uj$^Q05SNXd`3= zTqc{40O}mQjgk@=S~u8eq$j~tk73efLOjhT;C7Iyyf9_B&|et!G)q5EJ7*>K&* zB_P|GRWX)-*P!bG1J{CK9}t@Oxj=)gZb_Oo#(gjDu##|OD6}^Y;;zOLU%ZXIB(V^i zjN%bI!4502b)&6J{7^8|gSlYOC_Fzd7(VtkvHUTz|DIV!c7Hz$6JHk$D~E}!JO%z6 z1w-sRCbqCI{0~x*&0x8>C-RZ+Yi7B_5d<|0KQk5vhO@hJI!fdoK;oL4vgSD*k*zmXhT9 z?_u*93UCU%I^!!LU*j)2OWy;0a1PxsPf33>dcfEv02FL-50TA#0)T=U4;a}ai{v-P z3zIGg|;q4TN42SzH?cs+$hYL{@d5 zlAULw%1fv{uY;I<=Rw&$Bydbg@6A`R6(m6DUvC|^}IzoIjK8Fv5 z_C~Pp1Sx!&iQP96FS;SrQ&%LmVxhu}`H0N9RAH8~S!4@V0^CG0o5VO*w} zy-Cc@2vVGeCBW#P@y+=THaY&du_ory9Kon)7tX zvt%<0(uDVotZ*FOpmGhSSMbTS5DSa735Lb5Vrmb?Gv*BEA%UI9L{FFjuq>W~?JUFdX z4^#17{U(T+ik|RR2P11qLwG!RcD`(2ooQffN3b(v%xv3g3I?U9v5&;wX#~&<+*Wim zvd3s(5bM5+kwY2_#O)xy*?O@%2H;L`8y6wTBR>k~yel5<- zZqO*14Q}7=7iFpN8yM_qi0#G5S$mYQs2^~VA%0`N^Yv4g1yHU+^hejvyUJ^^?Te~paC`2fKl&X!o5pAzTw z6(;r)^~`@51k<^%M47>EOz~1)sDYhnjBx3Q6c%V?p{)Q40P?eqY%c+NGo_ozc2hqa zf;dYaHL=~)Oxy8hco1^h8gK5yn-^V7>=dPnS~Szg3P!?mAbrmatG&I9Y;qS18`9WP z3_(Zl=m66YA7AS~;1VWdgY>r4*yag!Yat23ccg~4xpQD5A#lUg&Q_7h*iHcR8)8%2 zcjy4e0ZcDS^=(rS><{MXlDJ`NVV$h=Xm!KTnAz7T zK4gNBZkn1|m*_lr5Uck=nTry{%B-{>Ls^GIxov54AnOjKEbT(pUqYTj2vF8%BI^m1 zC(8P-$a*dS&-&8{Rt3Pbe&7LoC5D2jS>L8)gSK(NsD<@Korj$Dj};%xK62Lg>pbMF zw^6cQPY!~t8!;tmS>GkKWUg75k~SmhAuWCF^_90RDZGoZp1tYAa&S6LFGUGf>sZ*~ zC_Yt&@sI)59+#;`Gzb_-c4Hg+LjdY~slKs;wS~fxH}eQoxy!a)Xfq1$Wo*HLJEm&_ z_6;yX)KW2a$PXO`V<--SnN5JZg1P@=!XdmBt=bHLrXc ze`>EKMOadMEgdP*daW0L)@y?R)Lt8f=eoU?^VR2uJZj~JJe1tj^jd29*k&~yjMr7L zv2~pg4ekg*WpgVImkUMRW5|GpOzPCr%nGV$e!&`T$XbCt)fH0;G>@+`Ol)XpJjV#q zx}`Wsnybu6(;FC&0eMD}X70xu(n&~5*oY0T1e*CU*)ee@x|?`^cT~^OiO`8S2MSo0{LWZF z3SKld3)0llMs_+GZwQ>kC%L*0!<(<6o)}+XY)2yA0EpqlarSG1%yB%poUuU{st?VN zB04@avKQ(BP}mC?>f+Yc$bI%M%-UExNJDAuAU#|rG4J7k9*C0o5!A>euqUtz;wjc0 z@d3m$Xczw1M|YyCF<*Q0E~}N$(wygYYS-ff-X0no1Ml(#K%iR$)tG3LYNze<)mxpWz(#}&5J^AN`I}F)<4ZyZd@UoX?%c;}+WL+rq zwc>y~&klKT-f(SeAbZ>$h=1JZVV$O=#YIeWq-76KiomPt3u8lj0n*dPeu;i;AS=6?zhBKdhw9Jt%FP=NxQ)QP#dP_O*>f^F{%1b>sD^ zjAa1O@N_XDSS0|d8w}H1l)f>)GJ4w|P_oQhm$E!Y$ufCRmMtkt4#~rM(_tN=!)lIg zQ7F(tq$8a*Hn&+Ggl<8gNV3`9MRraDggjzsWOE=p7GFjC+42C203d5WE=LhC1u*1M z1Il+DFH3;H!(n>?ujbM#;_=&T#;O6h2K6k0Z3R#?C>xY#c9fzON=m)&>{!Lw2pd$m#{0?I4pNWS*Rl^P)r)JSv71;n6MB@e2R zFLhY05oYhDRJE1(e1rZxNny-A&?D``6vpJitGcgJwd6sJJL|B@*xG51oVusXH&|;^ zBYB)hLTa0G4}F`GN3Av`4}F^w))ESxBPYbQ!1Kmn8_-TI?$%B4rnkH|UV?5ItOy0#Uz9Fk zh#7O_5SpyH=B)AHsaVe)kbQUskx;NF>j&zO$owW`{yZfriG6L?ka;@bLz%a=0Dmt4 z8k{cm0fGS3+}poV1}2Rq=?7y&>lP&~?!kq^n@SPBrXasS2>tji1}B(EZN&PvQvf9Z zgZ7G6oAEnT6oDeKxqI2Ws3`(Fd=S&-KvV1ol>9|k8%^)$32ZZX+eokV@&mvGZ6lpF z3V=qw3+c0!0P@7lHP>}=Kv{F$383i!#{pCw;0i^O)n;aU00pqL2LJ5_tILMj7#svb zMEtAF8?Q_7pn2nT8#8M~^TzEu^M=9XuqDkw2cf79OucQn$Y&J*mr!3IpUVNbgc^ik zn*kIFWg`i-9~ja8R_Sz_cs4Z2(uwx3`04`ZbI#mJaq|-VIs7a@tK$>(q zPOntybOk_@PL{SR55}dF16Y$z{RybjDFpz1P?k<505pI|I?cti(gpu^>BJ{wFH?RLUqX1M2ZRSTGu08XUhdR*t%zvKZ`6l9BZ(?KY^;o;k7yZ#k>EnYE+NLl%iYDq@ODP3-nD`)>*tS|mzs z!6i|NWF`;dGEnCsbGfZ>vC2U(OVf;C@kaztlRP7kNkp3wLI9}F`HYYNpw0-ncvh<# zf>zEx#150%o8%dxiuklg_fbVRulqoxLZZ8x-m0Q|D*&a!MfXtvO?00J(2}V&wFE%6 zsIr{bNhec{Eax7)s!d=(Rn1k>u4v{$rA~NmsFE^t9&#nw57uf8RJA%Iz?2K2jm}9k z0)3TPn-S5Dl z0?ZqV;QvJD1+7#jPe#Q{1h9T5*pPP>XBn2%r`>1VEb&a{+Y4T`mWdXT!|^T5YtL?jwJXeutBM3RiInu=?o!u|D02v5TEnb<|ln z-{DYkX=SH*P(rl2Q$1?Qd5XeUT6bIFX^UGf$cKS3E%}HKZ=PhMtG4Xp9wZgG+1C<) z0**j~k=fTlKsEb@0PqGQvu^?bZ!j|Z<^u2rBeQQ61ydXB?=}0nQRVXnt5zC}#u#$j zL7R+uVMe0C)XCUNA@oZH@}PRumVe}-Un&sRgzI*t!T2mS5)GyySy)9tm4%xDG+B5WKqm{`gLpt$7WxBdvammZDhpHa zTuT;~P&8E*RufP}f31nS0P7x_sE<+rb)r5GpiR{D#dd9?_5#paSe>Z(kj%%DPo1dU zsS?M*8lo<`xCfu8)hU+ObFtBb*K-iKYW17~pw)8~0kxi&6Hw=z%>-)dc|V|5&*urK z_3YIJK&|H}0Ii-Y0d)1eP7bK7zyP#*J`SMP^A(DupK~l-!C$TC5CU>NYx4*1szZ$E z!qS5V1G}%2JPSz;Vaqf21DLB!NrU7mNm^aLOk~SxH+@OXY7NqkNl#!!+`<m z`qt*BC<5yIltC?_ZcA1IX!FxT0BwF+N5TG|nV&xS|MOF0_Gjm(ooISZZk`9w;!LfbRyo@)YtCO2~dRJmD2 zk@RwNIYm?D=6(WyG(TOV0P6hY-a|J(`2%S4Q-6TJWqvY16O+{WDFs}$daeS{>UkXj zb$;4OK&|KF1ZwK}3ZPcc?jZnbJ@+S|)^iDfR?pP{x_Uk;2bAZh^8i{s(;r7v>)8v> zwdy$t9$GzT5Kz`cOxqgvpt)tOv3~6-YlYDV5gi6rh|_UWSDY|9enw*cWJUZ3K+8>x zJxE}K5u0EcW6kU_+R-v$6RX7niFKl_Gy*t%&o0r97J-#1X7&{Y`xX0YFRsC#*`i17$ms0=kHeY(Ikoot_pa2~Aw6KRc*T)9$&QE*w%=KMFfV zXlMUMNu68o=^RO{vbwS$gnR^m;aZOzYZb+^i*9xt+v02}kocBZ&q`H6e8~gH*y}Mn z)d%@Bpdjyv9=6yOs36J+Nenj>AOV2)ZY6GfGJJqJ@ zK{aZn8dW`%TD8||DJ0IDivHN0)>K;ws7-YgKx?Y=09sSw3~5bM+1n|_reTA6Xk{CL zGI=40)K~JeH9?th_)0F*v&dBx0F`Muo->G%ECuaj5sPxn7wP>ZKYJU*R6VFhEN?4i zq7dLbx8G+iSELc0et_wnc^6TH5MxkUOc z+svlnRGu)MyaFkd_X$Cc=OnLk3_;1ag_-ri9=vb?R~x91Z=xx&H6g8zt(H&Q3EK=d zJM1?JZWxDe8|v9+qXkL`T$9?lRszfg2=Cd%H6PE_^t{i@eKel8((~sHT;0FHI)C_Kc;M45-`VI3D+lil{`gf{lJF|r2@`SxE6jocRKJlg$Ey^?-5LpXXr z@+a&vc-Z!!5~=_q^M!`CtpL>kl0j-``w(C!foBY`u|WtOC-Ac5<9d5AjAsNAee6Ht znJSU0)^9)V$^9B2 zkovyW3phE2Vw^($ELhG;ufn)jZ#GVx5m+X5w>8PcPzNBPVT(i5TmX_pE+T@>1t66j zJnT;@P0pp{GO3~c3q=xekH2h;v$aDy>nJp8pH)a&D6y`C~fU{Eo2l98cU7A|DuE* zPPu*2&`LYQYNq$I4NYv@&|BTn2LW7Nx}yz42wXC?us@eA_fte?(nV7@>k6F*&y#i8 z0XYb7|+4p(pJ!N&=d`Pl7v zruru9RV@+AJ@g`$JoF-#<2oXi_kxNV5zDbo#1d9TtS2&jg>rFRYGm(-VpBHwpe0%9 zQFlK9pi+Db#!XV6~IdPkopN2oUSr9jFcRK>Ki`fOaaF*Aff^+QE9n3VCXc&ld!tN_-hC2=~xkQ;zJGw8tVr1I`ZJcm>Uo5hrX4)NVg=*i2V(n z$DkpS)urWOOjpqU23<5@N~52x6N={#FX@uOwe}X}L1ljHPj3$@^IHZF`tQweys7#8 zR*h0r5{LJc`E8*L{#)|gg(k6eYL;oTqbh@f!3DgPCOp-H3wfq(c5%^h2)VpUvY0p= z!mQ)w)Kxmo!h+6&bFlj>KGfuV7H+EZkY|z|2WoL~wTJ71(9C1)rt^^FY*m`uDCfOJ z&AEu*$mfVb-W)qlIaLn}(4T?OjAH%-RHImb0;*9gg+Pr_tOQUqiY+9d8pU=JP>o_& z0Qgdzj?FpH<>d7}Ul=6-Y73)W0BvDZ1)wgBmQy6X@o_UnQ;m3j8Dcjzu!&kZ8*Z)#?>du|kQPxaDSg9ue_iA!n9?;n0 z9d#ikqVK5ayt4MGc2x4H-BC$1sMS%)J~`a`9lH$z3MYd$~~fW>Zf9gXMZ^xVwH)dkboR_^a@+lSc4RW0f;Msi@avX#@l5K9b)2PcRK;9Ch!)8$Z zJ%ba%q`y`YAbpE;*M$J2Z}GEt>j2cVcRTUSJ3RQ?RmGD}C~J{5Rq^B=dc~7GxE`!t z2Otmqc@V-XUzZP2XU8c!YeheoQvg>8JR|yPN(zP*lb+L62KUhG1z0sHm0|xLMWu#> z!=z^sDH6riJg|RbFF}!251!3DrR^ySWiw5O)ofZXDotyY`L=^&yMTgNU|WnFBRE{i zROC;F#?P8@OHmX(>nueiY5wzN%)enNVzz6@Uk2qbTWH}j00o#!d0LEmP5`JT@R;a_ zwhaoGt0V?_6m}Zg@hcTuDW*Hlp3{|z;{e*Br3+HdYU3$?u*fI8g-Ja5LcTI*ET-!?F_hsogk z8NM-<*GghP5g3hY*7Hsq*|d=W_>PJ6Y9k}Fr2*We&6{^HD#d;H$8ZQ% zm^d6&BEFBNlG<#NKc)Z+Ao-m{V5#X>_&!1p3yZ7=_P<^*vMd5$;=b3URoK9RjXAPC z-t@tzW4gnX9J!us*DoWN;xkx}NvTN+%TDt58J}6Q+vf6*pe~fdwypTJXYn4{G*8KzLfU>w8kkkyoeC7#n<$JY z${;muEwOT6fNX5Q-TO_gVD|e1Fs7Hii*qdJZm9epqJD&ZpPi5NBTVxqjte&)M#XrDN?;WhEPzl=R-Qj*F zxdzWztQS#Nd-0yv)mJn7V{||TH9Uw)q{9hAxc4u$*hzA_;$Z$vIkeo9}MnOb^AQ?e& z1_22oL4u%2QY4B3Dp>@Pi~8V5Sb+HhrTWjlHZvQ(7 zx&7}TjAoJv9@b}=)ObH2gliha^dI^S>?G{rOo3~2)n*@-8eA^LWeb4(EfrIo zy?lgpZrv!91Gd`-tYf=@kR}nrcF(|65+O7yWg{HhZG%S4kz~6Ku-$%O9NXQ2?Ia?} zc0bzcIJT1r*+^2Xg`aEevR#+2aW4)%l5IBznr;Cd6JX1B(}37&drYAzH)1zJG~#2@ zI^2ja+kj}qpCBzdH#uilM}S~+IgMB%q<$1C4EucxHphPRp@c*T`}KmkBtmFa-9|X} zI{^DJN0R+^!hUCgaqJg$Ith_vKc$SR;*!v$)Ri;~uum`|t*v(R7s;zp)M>xKhdZfMIg7>9;0(gM{3P(CPC%jc@2eve7OU2T zRTE`8vRtF(Cxb}L$NL=lO0N~C(CJ6P)gHAzBZEPs8E6KeVJVHuFp%TVD5P$NMf8hJ z{j|S6m=AJhJfQ29Viii412gXLxYEYJrbfHsm=K&o{-Y3}3?>v|zu0KL!-xa*LScBY zYlur%y)UBwFmMsT%><3U#L%4oE}~i`Q4}L#k3qHbf)IoHbW?nzb8ED-6ezzS7hS*O zqt9W7{7n%OX#^q*6kt!;Q_+7*FzBOv7D4~%d!6DX*Y3*-v2OWWDeCw? zybX=2B1+D;IRR{7@q=_oENF{QS6HR2oN$z)xqj=9R6{T;jP3cWp&48srBeymN+@(R zwVzJ2u5T%Ng9#eFTE!xueL;@;EB@${+iLjyXMp0h9O{Ig24s{!~* z(HfyIMls>CqHTm`JM&w=Tj4C_dq|Bx@8LI|+l~*E)CGP7+pl&(%p+@y6h`|224!T* zbD*R+0OxZV&QZJ}{b4lW3#%X%QbMoQBf1FUZ1$Xm@mO!-HVc8OrT7U-oH@dUD6mn% zF5;a__?jEiq-K`MN}5m^7oys6Jz(Z@BjWJ5oPtq55yh29f+nf*xSUQ23DRi1x<&q$(b6N# zTRbzuXeaAilZ)3aF&RSdLl@?DjJDW?u#A=gZlS?QBoR&`2Vo_;0{iWhiC{yM8=gc6 zJ4W$^nM$@D&GRrDd+um14Y#!{C|(vIyk@HajAJ&f&^(Q{3qbf*>wa1CY;g}T+j@2?c!>h}~n#Q3G~ z3~v@g7&-=!ohz~LXB229H+W{6^bS#X2EbG~4ns3LA4sh>QlXLY_zed&FO5M3Sr8nQ zOOWTc+o8G2<1U-W=|$rCr|=J=ze_j$EzEO&av1EXsj`Qeq2KxFj-S~}b znt^UT{4|`a8UX1DSBYLOf!0o{k~#|BAHCICC2i@T(uTZX-HA3h>NAXCUZgGm2A*i+eBAr99_jovE=@=u7k$`crsH&;^h zXs*&(Fkz_F=H>Kjl*pbgi{-&afjEmLm_#^<97K`_`#>g=9!w&VJXmwL2fHPemmVw%cO$(XtN<{=gXK`dY!r7h z@BpNqYWMJD%Dm@2(F4~TV?E&+N%(f5_WLshkN!W^B64^SD1$b=z zFajc{IryYPzi^-9psds1SH;Meumau8t&WirYoGE>VVz9a2>z44`GC#W(-hqq{YlR- zChD}Fo9`7~+qQiKu8Qx^Yo$^sv=JSvPzj*LDmHEe-o{|5RVY?0Z@)mPW*R1uxN{AY@mKdnJ)u$n8sQPE1=#+VAH!}!xNDm@9G!}#6HFd{NP zU+hO4B>n0$L_fj1luzJ1#14))I~idOY3jWABR(3>?dd{PXwC|2_K!_2O86nl3?klG%@uimBwK07MLD@Lu0gGK$YvKIK%CuU7USGg)%s~gZP>>6Iwkh%na z^a?S4I@kn_{}S?Z1EhY!&Ey;W(GKB=f=^jig}KsryI5US5{X9~)u|09&WATpc(jDA z7%^@0W$)srQ+WgQUNLT^MwtvMy^l?y1SJSqy;c@!6FMq13_DBpSHN*ZT~O&4Y#<6? z#oHQXi4F>Y)V@Cdly)c6;f+_Jx%#?B$$3`dv-MLa%bGu9rcX1s1cpV=>omQ=) z(sZ<+jupB2@ae8z@>w5M!t$eIg7Aa9Lm=j{`naPi6+{dDpc7>26v9tTZ$D_ml4o-> z5{`9bYdAjaiLK+uSft)S=IRaXmpDyTcZRm&XShfyR-kz`1BDMi*;Gt~2NpyuN=Ri4w zCK&2tOY3}tXkuSG)5u!STCY&{adtkV7yD=t1DubClKm*rCZ=#ck)=hZoc!KL)4#KI zON09cwa(bOMWzgErPChM)@}WH9}NuJx_K%%Vy0TAZ-`obg?upVkp9ggqOz~bZt*3& z?koTZa-`04x<%#bm}#JTa~^})Yp3^#>dpB(3hiHv{)++#N}Z5T6hKfSry2f)A$pHU zvlHV9_nv=|=GURRsCbcP_Zb{+qIyM|(+f4KnHw4`#PTb$=po-5qGJjHnQ_mJJEjou z-%1l%gUFO#88AG<1qrSHh}DG)5?VhD<-{p$>~LkVsUi!Atj>SSRFQRyOnDgH9!A>3 z#{SWp&VddzNEP{PNED#JAh%9`hNYQ(^wr-|IrOJBrz0pD-w7SV_Njck$KMr2Cl z@;uSV5F?4OPQ`A1F_H-DL{2jYFQ9oO5owxytBH|Bq=`(4EG;r6vLoI&AKwMRcp)^H zupVv@kJD~sE}tgb|-KDB|8 zFW^|=JHN$NBwnQ(*KA-i_8 zrj*0Y;PV~qGzT%49D?CU2&mOgr`D3P{Re~URkhNjX^nd0FZluK0bnnGz}AWudbtn5m)yRDDPwGf=43tg;bZ~@RcW$3_YMXZw@L?;`O3mlJx z)NtT~e460kE4anu<3dHuB)DWn%@S;- zZuj6*7MI3y6JpIyE;#WlZ{ddKG_{mtmPf*BmO$pOlG2okjR~c2!KJ(6NVw0KB!<#+ z5L4osU0@a=qVwW^{7c39O~em*d1^TLg1zwPy3e+Zyxf)@M=Bt@!9kAI<+( zaE9LPZsq4R+SC8bt$1njR{V&o)p9G&?}9}uett}{R=mkBaI#jc&&ZC}S{X*+1?qI1 z;FhRp+tR&S)yr>Js0CJgTsLBe?L54SZ29;WGPSQ{8J6$+ay6afjUzCp{OMWjsi78? zP3fZ#*+gUsI65%N)^aD9l}%>o7I--^!{Ub84LboNL=QLz#5k7L8Z!Pe)wPA7!!!cI>UjFCPrleybjDFh{_{aS{!45gQ$Eu3b*Y5h_^8N+Q6}3T`68} z1$y8b2LS6W3tPoNH;D;f)-%KVLG1(p&r^a8!8C#i_3(0{Dgd~1 z+|0%ekCISgB>)l6CfEqjE+*|!as{!sN?$W+DsDe0FT#y5Pzw&IMaU`%V6uYR1i5#l z41hje38&=H75M;&UJ=5EpD6b{aI3qNe4+j}0vuMj8@2>nh7ne{8#V`H_+_UEchl!p zbY7Ov;ckjeMdt+&=sy9+`=Ax$NL#$I%TNscvbqs)0QgnojD`(4FI?K@n!uI}#)HB5 z!^k=KUm0bDSs{VwiT~BTS)FDh;FU#$GT2E>QU>ijNtxyV9A$a}aFiJbz)>dfvTfjk zoXfs&h-;qJh-3IRPK~+t8Nmm(+ya~nyg^2wmYo14jFA2>h*<>9M@~vVBVF)$RN6XL zXdGV1S3sp503e=Ae21R$Jpg_#ag=)vgxFiwp%Zqcp#yNruoHlV5&mO%Br69gMsO!| z0WKa?ss|nTpFZb9 zmCClZCSNIfV2YI!Sm_PTyDBaDSxn$UIr|VXJv-=*>D&l0zGpyn2=B&bD`Ep;d>@Fk z>@1yozb^v8C3kEn5snSjJh{-O3geHS9aWt#yGdpHVuI%Z@_yr^pI^5r`+vdx25g-R zwg&?sy#8Leh#dA6+Gmj=l(3>BN$*J>j0-IT)}s#^hI8~p+xD4W_EB%V;ovgpUHWJgU&5vg zzogR~8*q-rWUZVntyA%nRx^DQgC-lczbt63CzBxz8<7qi<)&ju`oR@zxs1pt9bZYL)YqB>;1b`WxIED@sb zOp(UszO&K>#PziU0Gxiq>UsK&L^%D1LLb^HWo4CK!Ofkrb~zX!`sW^Se9wiRptK5J zK!y}$Q~2It1^}F4bcbzLc{MQby+g;D{|gN$)oDEw~ik*nj9`_DyHH825 zAlUy#frCd6VLLX48zGztBRtL|9S|OsB*HO@UJBbWb!%GfNi?A-Rob~kr$>oG+)WFC;PgN4vK|C?Sr3A{tOvne zwm4*X7AkIpSg5pdD>}ffXcyZ?wn@Z7Wsr>%rskqagi|~R;Y1QkF$#&?B|I`wp=#Dj zJjA7Cy5o7c~JfuI~;x6JbcM+30frnm&>gFm% zY&!Dpi9V_o9^m6}Kmf(Cbm22IvA){+4i0sA6~&9K$P~}YYfoN9?4Jv1kIh%eC<+0b zk4KsZ@QCg`92-!q}=y&Y)3ZQYKLRm)I zK&5^!y)**aq@nRp@J+=L^cLB0fqt7}B_K)jrh39<>0{?bE~_wE#M`AhAa+ zfTnoj+zk&;gn%Jc@b2J%)D2hpPD-t7f2>eJ-Vx)GF9}f_HU8Ui?{$h0&P0{GPRyLbQ>#Ls; zUA?bv^|$(H1y5^Oz@~BN3*1Y%JYQuoXx=E8mnqY+-SZ>^OgYm>g-5vY)>?&1Ju69z?_xfSgKah!sT?#&eH(xD zxAC67$7?3}5}{lP+%evt2fz*h>Mbl}=Gv4Ubq#7z(5C#1>y!hq%_GvJenz9w@iwI` zj(O^1?j;25ypA~pmIS^OkTzzLLesIt@x6gw@L>g=dN42y(}q%Qe6$hg`GPXKv_{uo z^;-gzHacB=5kM>k?_1A8(XqCGm30;BHQZ+N2=K6dPznueh|Ly!!bh!Muz_!<_^8?x z8z|gZqnVRzpaZ^)!RJw21Y;v^cm6yIfX-uJ*5z22Pqg`p)iLPg0s!q$h68nR5A_uQ ztZB74opNJ|;tSx_Oh;U2?RpUa8^Hr~!%*I-C@5@^G%FDtV4N*_`>#4RN6+&;2Fi{b zcs<1cyN|z?(y|jyJr>)UevWx+BMIzAT!&Gt4wom@V?-CiwmO?|$@UWlSe@U?805!A zNulVZ&Kljs!22&KyL%DsW`l6yy1s&Yn+&kDF;f-l&%mQFRc;+EDTI8uDel{;(AkAh z=LM)U=_j2IN7Y_^C4RMm$?(pXC1uKVgLX>FtB9{ONCGqP&5<%v zTEVw88Z7f!unFf#xS=C7nEo#2YEs%?TMLn;UBxCt@i$N&ZeopJ!P4PF0Bn#19JW-) zQb+(3V+{HR1B|ffo@NN5u^Rxls@$!8R0<=UVEg%|MlXM53-F}z0L!u&)R_fv{j`4( zhu;iv{Y0khfd=K@w?+4ThG_XF0Ni%kL(%cvg<0#s4!n6i27pCp4&v_HPUyx!{jDnX zyNjx4woSNpbM8y9b%lVhW*RhLg)MEs0)yt?vDpZpCA`Ju`5D&9S5T#m%WSsp={3rO znX9nD?e^F!N`-tzLG-71wWECwHtvlc;JXnRaan7&bxOp8Dlr0Sn9T#kEH)@>5jd-L z(7JIhg`S)T;4QGV#8da!4z}wnF;k}v(o^h=QfcA4wrXRBI_VTx%(&)lFwm#$Fq=z69iO|QxwjQnTgX5rZ8r%k_!kmUR z{q04aPMwE+n*nIrPo@0~u-YD=@E<-(T#Gaa52hdPuhDFbw!ZAJZ#%^7NbxZ!EFk+S zosMp`^I5qO_XluFAt=@H&gsq10I&vYFgD#}|HNq?U8K?h2AGmMk4jT_+i5Z;XmoC; zou+7%K_iaZl#N~el<9~?A@vJv47a|*4; zT-Y~~L+O0OsHuB(8p>Y0A70_^pP|qNcC`TPcrxeS#tIf!6@9xP#eU#}jYsQ&kT&%P zoqo(8B=fAI6}n6m#vu$B^CAZTS`tOkl9EKkThCAQ3n^6U+8ZJeme3eo2VbVC58?Cie#v+O*RF&MH-16E@!D0ja$=oIEK3>fLVsT75~{3c!#D*8kX@6=cV^R>C+qh-AS+#~MY z;kf*V5m(6G^96=%jJVKMF$VYy%EG`57WY#XgW52};ykLB>~2s=RtSl7w{}+3GDc@b z=tefxJ~qyqS+T-kb1NnK-y|uAHd4`DJ_8ZSKt>EP_K$(|dxg|IZ z63y}(0G+Pe&60s_z3uv9HZzZIRXoCp>Fq8mRUfNu?vtS-o*xEM{Beap%Kgv5Cl!Umo(}kAgl0>6*(@N^~N&O>plzD6^|qBw~fm?X!PuW z00k$ZBM!kc!xx{kfnM15N$76_9=6z5G%Cz&{E+pyq0u1tgCK&38F3R4YY?yMf`5e2 z4c(+a0V2y@J_a+_es)HUTOsnmKxD+ZMt8>Z%0V{Z(dPlv3~z?eDO@_1_JC<3=M$N7 ztCCLVrK0CC^BsU;8s@=X{3RdlW5coK@6LqV#P}6Fi}~KCaSA<#dz%axM@k`P9s^Yk znDqAn8tsA$4CXmV?>PlR0(LQ@mqhU}W#}GxUg@}tap&9>v11~ybFt6p`OLr38z*3Qazl_&QA?+Zyq7~47(pW(xK?3u~WDh`zJXH0QdpZ z`CnlD92Ef+E$yRcpSLNgreYDk5VDx9%j@i;#zdtTvi1-`BnxeyFGi4fd=HJZ`UThrdGDk~AYcUX4rujG0 z-o#SB0%S6ei9?GwQ4RP_>UK=LwWYm%j>R%n(I|ik6I&qf$GFB|S&!6IA#m11G)P-d zQZHcZNH;QIN0oEohOiMwfjdzr4A{fs)EBU?z&RtbqKHqezljx4Iuw7{w}>2(KObad zYw4#s(}2N1i&_+O_UG66=rrTjvv(2emnXhJ+yoeLSVgS%)RZWl{>l<;n1UKN>RGyN{Yp2WeB{5zYXXrFZVQzhmF;nyF@N(TbUBVN;EN5)z)y0d?7 z9;&fsj4q;LhX(SRtSPh;H_aO1hgfTN+v1~_Paw2HOVj-BH|y3A%*b#BixrN>V*PfG zO65ic1uHK|*?u)VtW^QYwdNaN==3Z49Rx*H#)^0r8kHrqILzc;mFB=s;D=_EkQ==M zXMmum^2kN$9J#B}-`aj*DSQJyg|%RMlEO~e-u&H14Y2kG$@E{nU)gXg)+*ba14MbT zufeRNpSPsOd8DQQB+GUbS3kbIX6X>Xel+V4@Nka=B<#BtyDZD#0$H%~xD~~^jfWMR z=Z@f!O{~Q`xI-NDodu`0xkUhYMsOWl0pRtRr3Q7u9s>BSmm@tu6Zy8Bhf{ou5^S&l zch_z62VZWB9S;diLQF2a`locuqRgm|Dxf{VlriUYtkCU-;;yK|R}lK)l2z>8Rjp!s zD{89Dek@k-cW|V|1^K9&RgkAa1Y9BN2N*a5GKwu2G|kU#DtAsG(BH*=hTGhQ3hAU{ zD*}o2OsN#Hh2oSLr?ggyZgUnu3tSRrRt|>7l1qD73j&gDZebRkR=#L8q>s=OnLC$Sp)p2Dad{ z9#%((&k@>VE4F-DhZATS9v#GG^G--8q!wL-QY>F<@l>?Mg)-H)Ou~pP84!fMuZ@78 zr%Z*E#DH4g;t+^}runQL%bnq@xfO0ewh^7)*s7&Lc`@#?R&nL5^4~~IjdeEUZ)1w0Y*Zre{_QsQJQp^&@8qn!5#|{N!{H*me_#k5?f>gLCW$u6k2}D zB`+58WDTu&Qx#isto26_$+qO~V`&}tm`d(O-Sa7xPT^#nx!F_a0p06EhDu!*5Asp{ zAA~Cn)!1eUZfFaRPP7rwlCq`F7~KTEmUFHr;27JqZKbSQD(*4iz9DBj%dQE;RzPCMK-e5 z8>H500%k7AHtHp)e+(7DDp+oeowwwCK7&GCaa9S_dt6+vN(wc=4D^1qJ~-E`_@hXt zFW9A0U0kmOpOT^onvB~&r$Pk4nHJHkw3w*0yGh-X<<`v_6|hD}F(q&ps(4P^m&O)0 zvWen4xh@NJ59f|&bg}czoZR#>=TLa2eT8b%6bMwB&!g5$3~zR zkkVO+3!yeebz)(KS+|isFy&=*R!3o(!tg(5=?hch~1SH*tdNpNY-I}oXSQ;T0iK^d|sA;#O^Pw z6Z-f&Yh;hJ6*hM?Ng82*nHKJr2URMbW7uAg9p(*u$8T7eSSzNmI?C3 z`qIt3BU&noH2ggbSQ>rxQL37WMCg2%Q18Y@=V^LV_9?6e%w6$z$lKLYy2t?yT8?kz1 znfHhSFYdCu(8s8&(9(>d{w_H0ST)}4Vk0tuA@6EKXu$4%tQ4~YON%Yrp#PGNEg?uiQFMbsU6zs^cJX*{^#X1iwaNq3o4~ zjONJ@;x!VEAO%%CaE}Avyes0gXzHHVND?RHxnCGZN`>_3W(nAvts?D~Glh?S_#7@` zNnj!D)&MkjB}mw*1V$uPLO`3YQ0nHmcMZX8yZA*4#R9GYINx|9eW=dkSTov)!ZQ>z zbh1SfBB7OO2FklQ3YAP9Dq_R@>M&ux-walR@KUfv!W1oas1bmikjJ)&&#i>aC$?D# zcpi#>RxJ3;W)M*lOgzXXEbwOtwFjai5RgI%Z}_X4tsurhkS{ZZcDKX#6~MxBz|zp% z5Cdul(oLNsR7gBaiY!Tf34 zwsv7&V+`BY;c0viX3{;FF2HDUhjg0#9Oe{D6m2~2WegZ^{l1Muo%jRnYZR@Gi7PQ9 zEPQ#qi(2_8SDK=Y?dPLWcp%Kb18Mw}hkes0idF(;@1tKMLCF6JESe>Tq zxA4#Q(kX`10zY6TuCcOA{66&sIs*4q{7#!4pKfG*@OucB?`>HJ{9cBKO$Ax!PcRB_ z2hbNy!&{FDkh~T5KYlA}SQ~i&NUermq<{6kV$m;v-ZjDA=mS7%MRW!+qeub!%HjFP zp0+$A7`hBIv26pOhy2(oI^ah9U}8q1S3GKqG`@Q8lj;|VtCb>V5 zE?K#bJw&-0Co9)dXd8#J$a0nX56k6`>VS)XvQnlZWY-*QmxuNT@>e4&3>vm8xl%$+ zswTl{Dj`nwS(Jtu&>AVtEfWrRl zX5tV8#FdCde>gM@Nm>IT#)RVj%;qE{aS&om_@fS&C4!?wK@v@3gw1_ zXBp?bM=v7gE)wB5dq!|Gu;wmeRE)=Cp;}g=)M8YW2xnB32stV;9ETLnsMruy;*5%q zfa)0)8Nr&nN5wk8c}B&?KnM%SQPDv-qhd2#jx#DsMAE3(0xaH9QB1Aft$4m_SR>kg zeB}xv4owB8IhE6pjEQ&vj*L#ldJoT_)ohJ=jT}M z!VZL_=V4)gfG5yQlU93}xwJL=a6INW>2z!G+8?Nq%rqg}W&Jy*>5|Me+hCemF4L_1 zD@@Y|jYc%66u7GTiifnt^F$;TFDCCVvDw?2HNqc?9+_OCC+qEd3~Ts56wQ+q zPu4vl-qEoUrh8&;a44E*Jd+}3{pNUk;&3Q>QF4i%tn1)(M$9S>MX&x-#+m2rDaWDc z&G%!h3G2(r!{jasJ<3y?y#d)ON^|AxGsD~}cDY)`*Y~sv46>ealwr>}$_P1*`p?1y zyag|_{(21FOY?}cH&7BI&d(rM2N_w1+Eh(~)0Byd7XDc>q?xN(s}_lH{If(z|IDyw z)p8w0aQyQPP(A*c5y|~?7@rpP_~#fPJpS21IQ}^!SXhqZpCuy6KW7088z*ViBBm1V znyEJw9~0$?<6dWmBWs3dI4LnXku!mO`0btH{ChRS&CH$krL7vxVo$u+@uD(o_M(+s zSvUWSv+ht-qslyu-W!nfADK1Je|oyI9`_eyjVm(jq_laZzr&S%p8D?%^IB~_WOGC0 zKqzdTe_-oj3si8{YR3Tl4QsWSN6-#a!3MHV-tLMWd|vhJ74ro*X)yxYci<6jufG;j zHF2eS1~;x=<`I3b*nemYvT(C7An!js2AF%cv;QCw&i;c$I6YY+WKU+;(~~d5AWlzi z4XURnGa`9U?hTx$Cl3a~(~}*9)00Qoa-5zl5lKCH6j<)llh?_Hb@(+z!{WulUa_YY zz^v>aZdh?p!D(2f0Q?ONi&QNQdR76P4?K|_*Hm7{<(*M=6ndp3ivJdXJwcrcr3a81 zyR{z5LjYK1irwywXd>#nS);JQ-A|)NXua7U!x9%~h@_qR2qAq@*lf5AVSiqx5#f*#mx&k3L=6e_=8qmpF-9D=GX^6C`DzMy4FW7b2Wya^i73WRjKSq14AAo0E0M+T>)dM-**8_^B`mANRm1OaTMM3E}n6 zuo3`D0{H)cGW|`wSLX5zN?xA-n-ov|?5V5LMXtG`*s9z0ok3qRFaSX0n)9UDj%T+{ zqgim?)o3CMctFa7nHRpWe-`{1kq)k-^}8y4g73NKMei}v-$un@A207JT*S6M4D^)W zPhT+o1$4E)7AUt$v$C%I;G!$t^w9=vY2>Yqru7{HJ8drmU>IIbZOV#|;j!-GJyw^` ziT;QO^eJwCdJ2hxAK-#7`%I@RxQ$zo>oIk1gBIgbzX0BN5|2Fbd`v2qQjrFDJc$LLn8~^sI=o}h9yE_4i|~=SM9dB5HZy4BEg)_xVi|T>PTt<@ zhVK&!Lg4AW)=J*rGm9PoTy%y~-0Wu~Fx_B8ISLH#VzG?3 zl7xD>U~y#lo{iv{u0SkGj(9aWLdGDKNkk0NS(w&}8J>tiY6Fqu^RvoM{9Y~-Bb<<% zNs$p-OSLN4S~v)K-0C3Yace`FL)w3Eo;5_RW^wSEEYV1H#Qg6dS3h%96%@##Q>!u2Q zam}Q$Q!FW@=3s_I{Lv3(L9jqvs4TVtViNJ~#;m{lsn`$z+weAOb}^HR)#lfRI8(WV zn2!S39yaLX9RSu~a=a6_A75$_q+;bT!Sn!8B@H^NK{QMI2KK*x)fOE&Q*|h=Ew2R| zXS#5OPPx|Ez~So#-9)%8L5W6FdATJ-bEY03Ur%gf;GU~s>wH%Q2bl1ZPE+580G77(5bj~I-B{}*w+%YP z#m)rE?w{}+je%MK#^XDnAAE-*ltrcuarwB%O*_qRpW{QPxNRz=H9M?Puj@9&Xs*%F z8~;-Dv}ZJGc*Yj3#%k0A*Oi2{8MwKeX%_^rqMj;==}+|BaGULi@`%#-rp=ZDjrfub`+?HLCc74ZPJ5Awp%9 zcz~Zf>ZGo)bsP99K5Hbq*{&aO&1{36si(Hz!SZw|XUe*b?&8N&GO)1*M-fi&4r|R# z%Pa)s7DIVbLCy4jTeUhbp zTN@vB|HB466c120laKn|x*uEBT?*}$`FMcTn{|3uiuO=EqCJ#<1n{WyfWVMJ3jHbz z=K;2?GN_0&uSeRN3L52$maD3@Bm+DM8q#C%|rPcfpS&-G+5U50|I}e zIv%@u0FQY+z~np#3?{owWZ-Yq`T<3|%}c7dFFJZIzSoObR>cTiH!@J672X)JS7){k za4w~J>cT)PyeD49UhvUiuns*j%z$?|xB zLY4fa+?V2E`)>iBYV-h}!g z&84kmRiJ{+dHvni3Ki!jrXo_r0|NV2BX9xUo{MJr8P1aQ*-znNBV*peEUW^KeQsin zm-sP&*XQ`?3kJRe;ASHg`&swisl1#^71uHoUk``kPh0x{e8QMGC!Ed9;6^OgQ&Xtn z`$?NWU@=2~yqAO!_b^Yp5#k;uCYh)35Hkh7-+~gr;u~;qrKiNJTc>9o9j;Toe8@Eq zE`J(JHW;)50n-voaie8#DC)+Yt?@z};yAFqxy9%oAoh2DhFJF00dOqX z*b{&|k+*guQ{2kI5!FU>R2y-d%>0&5geETi8d_c#9P?hsi_p?t07Ry&Dv4)H!@#yR zIh%*#0Uk!0N1a(%X=X-M5jKmfp4IVG@PCWVQ*(c*2G}vg{^5Nm{MHxv z-4(8HZV!!4ePmMSV$q6zeTzmHcLk_(EPz*o8l8VXNSyw+0J@^ zYlDjVG^RbOhGD@N>WBZuURLML{1%Rk@i@79^eRLRH(|}L*>sxQ6V$q4#nAU+P>4nL zg7j%!AI<7xlL{sJY5WAF`YeD{Mc*cRzn4v#)Y?x^;A09RmGN;{r>fbcj2nn=o4TLP z_z?nvZ@nUOHhL3DZ`{1zdz%r zs&ira%9wL*<+C19;*F;fuawbsG2+0)?=|w#tv!(NS{Pfe%Mi90K~p;q1yBO}u*at( z+s`n+8;FM!2d4ty3gWOlMuA8CbP^B$I*;P$s_GG^Iws=SrWs3oiwWdu0!Duv`h4A6 z>NpkqvA4E}LM!_BFDrC%H`0~GQ2v|K2F8A`(^HJD!qP~ujb|(GL`6~OqA3*Bhx!+d zK-aIT^gH%AJ6BAh=s*8L2+9h%0FY$lM1z*Mfe0iab$BYI$%Q$K{^VyG4MZF1n-ZSw z^1Eo9XsHZ<;RNQ^>eJkue>|X3-L*mLcUsXtZHgeZQ^aqOk7dW7XmD#^EW{TFJ_yi= zqKf({u)fK76V{XwB@hpEFYaq+{=l?=xDyDqzsd$Oo7l+OX9JsK(8Aug(^N1J^=gAf zA?*N;fljf6qKfuZ1-#6E&-z_)9X?z6sr~ynKG4p|!PB<41HL4`!FTbPE)px+#6jCznMewaVHZUDq_uE5A z$du;eaQpdfn^JU_M(=1Ah18#68Lik$_#j&Wpq^y)S7(&!zcIi^QDaOR*^Il!L1rC* zr!AL?25DpgX8oj?WIc~_gA`p&8dVji?p?538@^%EnC>`RQdMXwI<0nczK^n|3(_b& zi(=#FV?%M6EB%j)K044ZNYnV{%U#^}iN>4VX<x@}pB5J5bZ>EE61Szw z*V3uyngG3pdqs8&I)~S_0u|4!?AEPC~FHWx=J6w2zoYTyGJ%(b0S z*zbQSq;B0e>w}cK{9}?yG^P*lxhS_jtWBkFBu8HJByS zAGoZ`Vi+(GcB30x;x7kC#8J~bFY+Z-Z$yC9GH9FnF+8=r#%-Y|*XUAi9xYeloJBSd zHvrmK35Z#NakAP)T~T-A%9-A9ok4}skE&(D#O6N+rg3O|mR1DPJb*`ZWJ+YVh-pZF zVmyMsbFRm*bMYSoD@OXLI@@Rgq;|ys zm@8oiDq%1dVAX0N7dJo;r~s*Fcy>0Do5Y(Kaa&&rQk{+%Fg(E6HaeC4#ioRZ<09L) zHjwXzLg{S)&5(V?>!Kt z(z1*pI`^v$w8`VAGYDVA6jG~j3pQtK^fdxg)foq71H)BqP6@#BS=u7R@yf^PF~+O? zG0(H&MQ->UU-<=kI;KbN-<2_*eG7vm!`rK&pZfZ&R8flN{{8wse5Z?3dGVGCzNJ5E zREqPOj!DG%L--CMvjTu;SGR}oN8Gl?!83MWp2eNw9GG&IfVyAtNQ(zR^at9*qgR39 zeynvzC<}+@0EB2)+98CH3IYxPZ!jwNEmbm&dgNl;3K95q{J3*gW?uolyBvy z+z7S;HgxZS&#H6_j~zIXQS~ljd?0*|AlZ}e`Ir*qY7F+-kg9y>qlPvB>y+W0^A30v zVBNdn)~m0?lbYU{5cg+2Y8op|Q1z4+JXX4tKm?b|Fi|;mIW-#?4iVNRF+KUM3#Y|H-34O9hLyMoV`|=7l z)92=emDSbU+SBj~JwN_vAI116goWpFtj=7&A&bNTDS_*R0Uz>}| zln@=Rpoq{A^}#JBmmFS|)SS%I5#M4GJhhYYaF|k33uDHe{s#n56+Bffp0-jB$BHBo zULk#l(RNJnv}zV`mENk&AsEJDwuDE;epj@Xd1eL z81cLh7Y?Cz$`$w17PQrHY5+xX3qY5{n2CSCK+Z}Ujf?>>f!Q9ziyF9_Flt8s zo2d0Hi8{w-9*&lml?!MT06ar4oQDL529NFI){k4Bomd!huhipIIn(70R3d zpeX<&yFp8t(i}kD<_cwF%2;jz-xovSUs*@QpV$ub26yc58r5K#Zva@ni0Cl}76C{Y zN>+K7A$e8Q9Pn7cT*$ zcBoU{ROSj7EZ&R-b^_B79GHfHBZpaRWD=ZnsSlk4vAwb#Ct3|A)T^Zk-wZwr1a?9w zJYDgH7P%1Os_?7H5qvXPCJ`K4k|X$bu$x2N5M~6NJH?+>@`U&r?qwj*q>^q3OGMHQ zVRP0I1TY65Je$y$GVn@}wU?{XVLNeI289d1qQo+7zt!t}^KzBMcRbodkeK7ik5Rx@-Ezd4H# zD{xE65GsRi;UF$31wyZPvJhNB<`kuZIoX8}4HE>AChbY$gL4Q|up&N)aoJKPZ+I9o zN(s#?9V!vti#&?pHxvjS!|#Utd$E!w^bJ}#XYS;6*oAQN3hqG{?1VHZWjJ{C8p6o} zK=~7bDlD>&fp=ky0jRHI47{h9;oGRM>j1JAO6}Aa+m-7pTGkgM_`bII7px2YGh{(F zrLqgEe*JeB}O(UQ1mX@Hk4yXqqvK2wCs z{+S0u5L9+z#!SRG#Z7Dqe+}P8Dmx#28FtzQZWA00iS?!=g&?ai&y(>#`8eV`tK z>e{b3A$T@FFql?W!O=K>**bhj(dOYjM}5}kCXPyGg^)e;2>*ZyW3P3JCSJz<#Uo#!n?3NVzKsHHQb z;J9-l1v~Omlenn_;;LgT0g9VVcvbq)!P-f1EEy@xsJ<@5MIBBnJgG5Wo5!MkuSzeP z_d5K}I>~ZJ*`czhc}s-Vyu%w>!Uu5LZLz^`X2DhCcf#bL8ID7L%z)d4W@ z@7I;sQ0;bz=>QG6cbFrUN6d0AgfUBl;qWhzZZ^@!U_&d#IGe*XU2w3bk)8q>Q2I}8 zLE(cr%?ofG64t)e5p1b=3(Qkd0CvRT?2!|4MTJ8giOxaDXmpGa1D1?N#|SR49d{>GA7aM<$K4?z zPgI=Q1*$m+e*A4d4b>)sg=;b)Z&dEkxC_`T2O>8k@VDzSTre!O zQ*=HWhzSgW2#HwTBbAvO7L#y7{-_wF43F+g^=wXJhJPyCjzu$-rzT5~+ z6TcG{s%gVD0elZ2ev}!YUlE7J&MAInoVop%B)H)kB_#zC(H`P#<>S{E4D4{h`7fE# zAGqOFwNYM_cw1Y<4@9D9038=+HY=e$O4zuIJ39O?yrT~OVlWH;lp&Po6j5WONCQ;t zIbQ+u)R#$!#7E7HsGCevi0aC^*o(T?mC@KzMke9)@F;wBNQ?(qAd_^g>-%a{j(axm zfAFUNJsh7SqlV0(U=N-b*J4JL&n4q#CXHTXU+Gsv{c+O4V@@v6!vWO{U9v-vGa_p? zC6zhGMudRK9IX^G3!b!QNf|7JD7@G|6B*S776XhjuiS&gcOSPuY4nj_!B|=W0 z8BU25a{A0L_XRn9mT=PanKA5j<@8y?&h)terq7JzzR8LNc^+8{LwGp1nl;FC$W9Dk z{ut!><2V4Gxg$G6#gKOYEAt)A4WJ+e-DDE{vHHR{XGbt`g;&ES}6~~L zyVYZaM?D82)pHP1JqIDxlZeP~7kQ%M(U%cPD-$%@a_Gp~oHwjps4$KwW2@u6o;Ymc z7JO-;PPe!P7gj?{uM)KaF`mm(L``eXv=KQO5mqvgxdxbVVBsbbE{57jxJEP?2yT$! zqN>k401gL{PcbQqzshusTS;*>Mes^@JWXaGQOy_(A~0sktO}*;9LN!zh^CkiKukc( z6ix$=TM0ngBiVxndt&?+-nSJTZchfJ_Z`Q8?S1F-Z`=E>!*9p?9snS{?*VAbeqMTC z2`72qqu}5!D7~+QrT2AUxA#4VMC?nY_m!~YeL)LW!%5Ef&;_Lrgx|mjN!b9rmO3~M zzcb)>f*SON`=NCf0q|a8HZgY8!teMAW}pu|{|#g#Dt$v9F)~Ov|F33r9Hs*fyea|G z@h|)(hKM$t&78EsmT-Op@H@7f5*s$aJ_SIolV+$BL}gk_^@EjRAC#{9Jr@-;8=FR6MxV<|Pg*jV8HCtT%!(KFU?dqyZCJmW4dKxs8b zc*gG;ke)FR_otpQAIM@=ZJvW2xIDt+vZzJyjFp&N8oMSQ&-nG<;~C4Sir5rkE&dVD zc*Qn>@Qhr?9?$4jPkOZw@7b`v4&uM*8O2;cgWJMD?weN!FW@c~MQbgWthJW^2gmUy zc58)urZ5x<@&;XVZdDZk@a9}k2GD=PyfHTpz~4BlXyfiXtN_m{=CcA7)s&*|tYbj- zodW>wKdUf#M~dqmlS8ZjI2&Er8Bh~@SsCM%9u-AaQAOZcdj zkuV^{nt5%6Smv_YtIYp{fhz5nVyXrhOc zh#`iuV^pbw)dDYE;~0=bOeFxGv4EXR(!#Zk#fxzu(e9*Tdd8wQ!|e~S62w&fC1~ecc-k61FxPcrniyvC&{J<|Ql_^A0Q* z^T9oET(ek{4r&^4Ua|#1))`52RW^agaE!1G7mJO57U>5n+(``wk3Wu$X_nSm4Tqkz zsobs-V)Rtz$R-xMK=6r0aC9T=65uvULOMMh><=IxfcOqdhF}YnrV<0|m9RKA=X}`F z<W*mZ^y)fer*IjqmEBFHYKCj)p@ z6p|Bj$EnMSxkNY<^LyOMpH0loPIixDN5-AZnqB;8`D@?2&T};C2yYO6F3Deuy`Elb zmVa#XXRPh7G3%i)6cJux99yclnp(^*<})B?7wZ6cyaQV($vYgdcyZfH-qPTDg{Y#A z!}-q^uOn>}i%AQ_ny=dk?$JW!qr7;v^iMX6Iho`T(t-Q0+J5ij8q@xfS>fcm%9=kSi*x{u7nYujV1>nJA;FeoxwrK@ytOy=swss+YDSK+?JfaDuy(- zdXDG#D_sd^>)9&d0{qFo-T%0H=2Ew3W``j?GmjIV+Wsd74o92+PUYS+m*O&eDwh#S z$F%=f)Dy#)yK6Xul*W1LMjBM}w=sO4v z54DD|fgtiuKzNwFSKuJzUV%i&fnx|#gpfjB$ruNi`>VW?A>pJe8I!@m%L92OL&DCL zjCU|_Tn7_hCt*db6*i9*!&RRcMOHF^)wLK!cDYB9uic|a5gb%`C!*IaUi)ru%G^SX zb+%6#$vh1= zFdi5-pD;MPfwe$zEr&39&_bleEhbQt03cpn4d@v0J$)bXqt z&5Te!wwc^bhsRZS(~)pe(_xIe=}6dVIveddM;5jq6cJ6Q z5?AwRyXmyC>fCBN0~nAKkSPE>6A*9HSz__pO=pWG#%emp0LZ4pD)EfRX*v=in-0V7 zrXyi*(_yTq=`cdH3(<6butyNlbp9WE-vM7$v8_LQ?{ku~clJ3+AmjuBAyh*zQUWSO zih>mZ6~zK78nB@#gdhSU5Ks{n5Je1jum)7bj);obu*VJ-#Eu=?z5nl<*)wM!)cfLn zSMPoA{qy^An6+k2TeD_OTeCJ9u4fQQ0+;*dewzp*Iyw`H_)E18OXhgir|;jw8OQt% z=%fp6Hxit_%aL(0mUr1tY_-KXdVhTOMR@CveO&xfTW%lUM`UaE?;;qu@w|!%81BfP zly{#RVS4jxP^2HP?a;lMHTyf9)3k;hTyDGGWdMo^EV13J?y%@9B~WD*3-5ER{Du&^ z%ud7)dl9xF0E*6ydl$nTZVAF&f3zFMX&YC=h&jnDn#FBoSeeAdk4K^{Dv`V{edXO< zOm;Ow9YJM%k51kRdY0%$UWG{v>{;Z77A+SxO$)R8KV=JiicD$qoiAF-X8bsh&3LCW1OdL(FY`JCf4`+p|do6cR6gU5+Qsk1r+ z)(B}K?$Zy=4#QP{6{44Axch1Ix4*WGmg-#ud zM@+OTB!VnFwcKeStqL_lS``XEI!7hqM94(a&X6<`F&VE5yrv+jKp~9w>H%0lpnJs4 zx&}wbD+u(0-97C3HwF_X)3QolA?mk|_4|6)`pvFm{n`ihBg;-jBKOgtQ4%p9_49j$ zo4|bE3P@xVo^$Xm>JTDc$n$I2s9IJX31p*ogc}uWYZ{gHG8$D3m~HUhKhzeb1ippo zPc48U0Pg7%k3WTQIm7!!auJ085v3nq#Q~^?S9~8e z0_B+ZQR4xa_fb^@^!upg1oZo;wE*h=J_^Mp21A!o)>x%`79|tK3lvPP064z%W+-;# zde0R(@z0h(-ymFee2<*dF9QJ_0^yYj1g+kUIEn&v&(*H?5uVtTAzTv6sP8ofzefN# z)pcC24S?|g;_J}i3l4(O7J&`H+pgsRin^w5pgE}1E^~-bGbsYDt~ggrB{>;Q-5t2z zXG>UfBD}$uqpy)^Np?oF_&tlDI02x({>=#MHoITpWlViE#vtCqlesmc6@n5jpUSKZ zAD&vJLscZe$K(<-SDkV95_6^bVHrzxYwX7ePNaKrwMvL@&=NlkuNI%X1LLlzM zygf1S#}inJfzL;{3jh?|lp6R{MQH<{h+yFR%kXrOC2^E9yTn)UZDtVjF;~*edxflRU}nzjW%GcA{hftk6EZ=-LfrI~p#a?obx zr3f1{^C1BAYSSduX66PFEC>y(7lc{kUxa8g?}q4{fkDU8@QDb2R=^Kw_u0hp6SV<9 zBm$1yq&4<*rZ0Bzgysg=@t#_8Phpe^zs232=w2MBo>oMzSRwRX!+F+)#|DF3S5`vNar&HD(Q;vm`NPQRh><0{*kG#m;_O zdJv*O=qPV5@?kc4)#40Cx+2RSshlm002z2?RUZJF#Qp1)_QJAAWFLjx?K9E5=#lUi z*L63b#=;-kgID33R+yEtPj&FVmoI>mk<&939z!tN5l(j{(Gn8T8EBIcaFcln zG;;Q(z|cKIvJ-sq(=A#ywpaEh^m_D{6Kv75B{27*pqWT|Mo$2D1DG&0BEHATS@wef zHp2bc*90D6?(}^n*&h~<%P+&DLgsyFVi5c%uy+`peHa@>S5K0E_}?&T9enx9-XE>L zN-PP&S)M(_k?ys!rwDrl7|^(8n>s?#Y`*E?sMu7TC9 z6raFYsY(JrEvUWW(YMGWwja(h$&G+jyLVv%Wa0?`8w>;DJc<{LZ zwJ_hWXDoVAwEZ1xJNNLQOio4ZuE{L$PY4j4c=2)i{_Zizli5fF&F}mtk5?E+kqmJk z2qEOjgM0jwiiA20xlkpc*YKrnJoN@ooh8>{=ZZ4(uIB)1hweyvkHf+q13m90%juQp z2!6Ud?{8M*0r-zSh+%jpOCI}>CH92?y}DypgR%SRRV3^ny?ZP7S;k1Kv<=V4Hha9IHh+F2_%h$P+)O7@>hzd(p=CIhC>B*M7TiY zy{nXAj3zeywKNya5TTuTlY=_45W6L*~b# zl~NOibk8s>3b%5Y-3eYa-y1G!%KiC z`=i26x0f@-Y!0)1t>k+6j(8p&pM)E7uO2*%LfVqoS~mZ8ZaUTxHJyN1YuWtYnGg4s z=Rt=gALLMFwUZC_QZ5FQS6a!5v((I)T&Cu|p`qHA4!~HNh{=BthD>s)8+&WCk~8Ea z_IjeNyEz002Vc@tQO8gw1DMHq$Yc~Vx!O&993+Y`lNWfh;4FY^z)RSQ$1R)xN4Gzp zA@xi02~1?pO1S%-$LJR=oBu~&{K-+#FTtHS^-y%~Jmpj=`7#m&tE7n++hS@LB>Pcu z6)86|h7=&fokkvv0X zNm18*dnU7#lWuasaJBGCp7-niynh98G2$>j_+w5|c~*)ngr!4~+Co0{7mo0}mHgu+hl zkvQNRAwEGIxsdE%kTdT^oF`-bmh9gn-fa{PVr95*{AK8l@d&SdzN2?7!c_>L)D!14 zivTPqKvyp}LXoZ|pcUz60)exE?F z=-7toN)1dS;c@k1YeO&(7@eoo_|ON8KVfE~iexKjBJ+6&R(1}taf*V1L=&0CGgGj% zb4Yvzd0`$@BjxR&8FE^@juS5qCe$GJVin6KC&%Rbkr0gQR@dD-jF7(Q61Tmo%Ahhs z9-@fZ2kTwCItvcc4gzbEC#S7?lcz-0N?GbOXf7jlKmOeobDAQ-T+x&{g(b4@6iXbA znkTW3#^OPy4aXN?>8OUNunz~rB?0TDMY?B1k72c>mIP#{CV1mrIQf->9E0x~FkX2$ zo3=oWz`_pJF3!^m2V25F8$YZo#M9S8856&*TB zh}Y4Y!jDncH7#xNHi6Fpyp7}3Z!yUi{z&z7Zie`>9e}^7o!yzCMm*Nk68*3jEPOt3 z!ikE%9AbqpxUpI1DUri8APQfM`uhiBe=uNq;-x#n2FBTpYh>%HHnY8-I7j|3gNicz5$Y$(d!G`9AmFlxGy~YWsE&P zDjMNSZiO=meYQ3t&TkB84xtO5vBa5V-7SFRb#i!wbsl7i>oDOL?r*sz0cWu*6om)i zs#H>kyP+EPc9U?;ScpqN{nSh`m+=c#iJy8JWo1W(9dn9<=1yLgCx!bGp9%Ro@*uSV)KFh1)E5 ze7NsE26VX04M%YzV%F)Dhv`Eaw(1UI(;9xR2#zVr5(bF)bQkIU5dg#4Ql;qCuAP_?{VJeJ6y6 zS~73G*hyoEIXyf1yt< zx%#b8Rf$#e`9OMA#^wG-RrIwBC&r>vQxp>Zb!Go$&kkf|C#uS3R@2`{dS#cTs*>WH zt}F$ys5(U<;a^wwU*;=BR`v{4*^Fww?=qE@MZeM3aQ1hq@-KV&C97iOjVIBjDw0p3 zo3j+({v1z7=~dy|{q(B5|6hv!zwA}Nv+fhz8)KbZbfJ|z_#jws#SlK)N}how!<$_Z zeh2skLOK&F!p?KUR7>FFL89nA%ULxsB44o=U1lXmw$GF=B#U0Nk}-VGo)52zMqAG1 z)1uNJchOnUwOlMVdZ)c|Q&`m50*c4Dzw)SPL*YM#fmGy!f}3B-u{Mw+ttIJ2(WB?Y z@$|3yTV4~h=ryqlv2dY?^>?Gq!!7B9u?Q~L)xOYf2W{=NT%q=hMRQO&c~CD`s|P8e zwX4s8<8e+)SOW-KeiMO)X35v_0V<+f#gN;ZSjsvl=VPsn`Mwo4`1h`fh&+ZnT8_KX z5+6ajTeY>E=}R)iiy&^*!*UjOaKv^jKwI^;oQprU#4ilv%*y%k0wEqJ5gbZBiXxmw z*yG9^3M^;;fsVL?<>IRdTh7i@ITTw?r-y8n1FYxOG4|)J)bT{CC@?%#wpp_CEO^Sz zcdMRgFWl)td)rm0o_#rfoRj{JFRP;KdZVatxZ99Sv6cAx>G&|s?}eY-6JPXZ+9u?1 zNfZ2Z#!oW)eSE$yTZobMt>oVLrsY}S@W`Z^7|h1TJ#?3Y{E>OC5{G~!Qr+NJBn4=S zuy010_BQ-P`@=6E-O8^l!D4uaV~bV5uIyt)Pya~Gi7V?PqR+rg@em_=NzP2|#ys%j z{5)HTO_;BTwzujMF6JKP0px+1&8{APjV<0;9TP+MbQ1e-RSRmY%f-;WieqB}n2VF4 z0~-4yLU6B>;rP4LT$O+Xy_UgFuR2(g6QR5mi})?GEiniyv!Ms)#yC`2JS0R6Thz|q zGsu9j^m}}3kO6qD{2t%?s~mHVLMEe-;jl$r{X~pA1-oeo=fZln<-rzYH>RsT$84dAb=i(p(0DUj} zJ7%d`XQEQh>`2^w860Obh{&8^W5wV$Kmv^lTJ8@(vBV`o)+2_O`e&UVLVRsCjy>N+ z-B*!f_m-{wdHA%aPSLY3F2%1$n>3<()XwlP!#0T3gd}@tlRUpm2$qF4-&N8t4P_bhH*6cj zS9(MD&P|7h<%;5M@7v;Ml!~!uRj=rmDViVWaqQ)si4w;{;5hCsM7S9)FDPCdchf?! ztj&I?jV6#ye-X9O2tDqe!nj+&91qTokHwH#hw!k?ZN0;hxE5iKH-8HfmIOsfS#Jrh zYJ`;a&q4?#>o_f%i2QcQ{JO+Xs=@-HEAuY#_dTsyKBMEV~{OHtJkuOeE$U?PS%L(i~|3$FoM(S z_&Fg8POE24OCgM?yHj!4?wnzZV&?p$(^PnSfC*bvmEvAU069I>aPnV&$PyD#=mgM8 z-JgWATmZxoKulSVXHYz|xe|zjH3d)4(hxj7OGEJVEDgcavufm#c6t^@$kVg3pi&-B z&qe@fbCl&ur!}u2Z3fB@?5O;uAb2mp$yzgoMwnCv!4CqdKjoE0mqW|9S0Ic#;HhY=)EG27U%)2x~n|BF+K02fs$Z|o3{y)H<5kknCdhewuh;ZLQFEa^8 zQLhCV&HW#MXa|H8j7u{b_@9Oml!K{|14BVMSc+0K!pMQ}4g`8Lnp8OfPYkv|q_+p{ zi%)$6rC}vK_xfg8l>P#QrR2w+!I(QKD1Gh?&0@Epa1C?1y*dO-4R|~%qY0!2JPD<0 zM5;0%!w-e^KLqEmWJxejDj|z@b?6LrHiAXJxv zgKTNOctlR(oDm9RwKmQ%@7{Q)0d{G?zdM*#P-UVI651qR>x(C87Hc6)x;Ii@2YtmG|8xdnKlz1Gh;poTdIU_2LM_?S7c+LfmAaY!eC5;M` zZQfNMR2tXbO3pl5nVgL4q)ur1g&KYf*c!ibB*t_@3*RYqV@1a)zM{jV$w_Vq{ymeE zdzi^MWKzaVI=hLlN2yGB<*H0hY!*2=U@)2Tl6WJf$lqJ}x|!wp3_PBteL zH_EyEMIolkaF^Jy5x+hUFV zjH^=!et#+P&9W4teq99L+=!Z8R*8~VD z9B*dyaGO=CQYE4cJ{J?2 zFE0f`Oav(U;4JfuK)`UcLq!WN~4BnVrSO2ltllp6bHNiVbJEm0P_1q^GutG2)CJVxXpyq+Dt^a%}|2rZI*~SJ6Y9M z-a-9SR^Aek#s%(|!Kf4$h)CxGH-EJ9{%tNGl7F!qma0L52}exm9rJ%!qF}02FX9%( z_==hWK}7f^wS>bjsU;%(l3F78(ZQ9YQ(2go)PA2pYf@dHr20l{5|O6xhzPW1Nucmf z0cye?t{H2D^YvI;x9eDAP14315o)Y?l!jU+fF#5z{W}0a3gR@Tj$wHR3Git2UyLw& zKW8sQlmbA{Bb)z|W5{SIb`3QYj^6KkRrRtD6lO`R!as!gt9Lj<#@f=hWOAXETsr|9 zCTtES<5re}H4F4u5k#tA8jrQv7W@zk9*fD1-59?IYv5ux#!tc$?uYoW+XF80(q4oS zfp@EQ`;2dJgM0?k$f~dwrsxBJo%|;j?VOo~ZxggfA>%A%$~_BT@8*5v_inR=VNq*{TC6L6-T+og)ZvOn1|F$c^abLjLLI9&8Rz-hgs5xVHhK@cul!>OVhtO5zv z*=E<%=uul7PZ>J4@tPpD-VmMDHX^^9KKXcz)$ciAn|8+%{)yMro2?nmtltgiHOLUl zasNG|K^hI-#QDhKyc09TyNulz%GMs$1wUi(6Mgoi3@O`-^I?VB|915W_r;9>oK+T) zwOm{Tz#S#TtR6xvt_R>;Sgz7EZE*&GM%$JCSnLHRw_G^s=ES|IG`U@zXf}T|+>`B& zM9pDUFYMlX;)mw`(aei*y8&of443*Bw#*Ri3A9NIM_;}aXIaE|M3L>Tb;MiX-?Bnv zt8iXsP#R9TNfDh~~(DB5a@!HPn|DT)D_Vn0Qp z;S|L&nqq%Nq2Uxog{C+_QD`_tajB*_P*G?&MRBX9I7m@wI7RWerZ`wpXgEc&MN z6dF!Z{HQ4oQ4|_ZQRHDQB6&JgQD`_t(NR+jQxqCbQ4G=)!xe>wC532y^h7n*wRpdR z)1seSL7a{#d;|k|E+h-{l~tWPREWV?jhuFL&h^|tm%&fNajk@XHFglrW$#DCVF=t` zAGMWdP4U-)(#6m`NO(c#<&HUv(vSP=gmZZf=i74+`FSd68bD$>Qaa}&sVLX|abgY<23=3v; zZdO1cV#iKZSyB_0_sn-cJ6gfag6Ew6DFFeu&l0f}N|l)!1h1+zBJGHdyQ<)bF7|o2 zoZgndH3Z9SwI2#rL?W~ohg^-&UK}*ypLAIO6~fx?2Bx4(qt!cMlGT*G^DF+we;9y! zdMFd{Ha?@m64Mb*zU(GW+N4^{0|NST73B)%xdb1oe0@?1Ru5I;0R`F0hbrUGRTPBf zLzP%oxG&r7(wDEs|3P1JCz^bfXElb)1uQ1SWx{D(HVDmS)0>*h8u9yFX7`$#L$Wl~ z->8e0EFPKsL&?(p>1)X{2rXGeq)8T6!}^Z0m_@GvLM|w$EQ*M;Ii|WgzZx!@#jRzH z{s@cZZ~===qyA3~myI)Qu}m@8sqS!tE$&DSmp2iIRfvE(O1zHYVx4D;#sPmR0Zjmh znMF8Fw-f`RWlc&z8iEp_5k>;qAxTKqq}2D*6oy%( z*p*qt$#Oy}g0NwhCit@z@hw>4Ek?l@x=!_*qlI{Kkzv-uhzlf34!f@ahnYh-jXB=} zk;a@f1ev1|hB*R0Fn4865pZGVXxK0(4M9n2ffQ+y6h=r%A|g$aIs%a`vwZa~a>e(mqXAZcfHsGW8SJvA(3H8)>9}q$q?CSGT zZISY*ahArfhgldeZE|pzhKJnh$>VYzJFzCnt~nCFj_FukpS`+Rp$qa8Q*|319hC)c+y`kGK&J$X*B~81bN0?AL@TjWj~H-Ui3 zO{Bcr4R5gzKgbdNvO$6|YQKrIZu_{N_?f#G%6{Rxh&T#yBl=p99%t%L8G?~lK7ql} z3iqk@we5qdhI71Ss=Ah5dLk&^hxDez4jM_dsK8Qpg?BVV^kGm-@&TEwoT1rxjS|h8 z$w+0NhO1_~JIZq&eh!w~U0@H4op1Gh5pg;8{kylYoH3Wcq7frucbH{ICVT;3*mFIx zd(5&T@Ar+0zKdK5NY*u=kPXn4iJTb`I~jd3ijYqRI1(bWzH!8}ZkFib*;b_cT)d_@ zH>QA+;tcW7BLVQl;Sn)%fGcCvV}r=8&qc%*ri`NS1#rMSd_9N>ocnH6TtH$10#`D_ znI`~YFGDjTLvajnJyU*#_~D;h;-z(nCoteTOI*|+DG7YE*b-Z&su<zd92w4%+ z2~WWEh;M8u_^UOC>|Y_O<*Wu(4sELcxe(gRH&W zM`3_!5WOufn&pYEU4f&W=*W|8vE&i7Wf2-S0&keFxk&-SE@ylL*!_O_G%C9p@!xK? zMEA!7;BT9wV%3WZV4mjHhjUs{hIkBJchmz`~uZM@K~lx)~9&$u`ny z-Vc1#5mhaPII6j=>X*)x0aH~Ik7|Qx+6c%IvJWzldg1#EaR~;Vag5q;?uMVw@DurE ze>|mm&_%|U6+P~vsQByw0EeI{$3H5>)5$DRCEr`$5fS#SnWE}8E9305GsG_ih`^Y# zA}t5Q3m2Rn$PAhf$7>cif|VI;^I)Nq9b|C+KAGaFOH>9cF*j|>2{MR&eQrdot{;#& zSE5cU71`y_{Sn0;5m|&v27E~QQ{hM_sSI2`2i%moO%zQHifgW+7dsmb;aCKmh-5SDOxi; z-*Q%0XNb&)ViNz|#TnwF2N4GT>{S`!JJOs3;mbsyIrd9Yv6z@@%Q<(hC0-yUauxOt z9P!z(h*J-~!egr@uB3X&GVmI+i=v=3Y6&QL!jb+8mfQe}PoUPN1VG0dinkt7KGBxk z3W`peqBulRupz4QxCa#UwI=g`xR^Yyuf}x;Ch;YYgW>|jND8piP~5RPs3~-py%~c| zQb3#x#UY0VHGLfvaLb@5!mYh!j#?KiSpl9!G(TE}^4M~A(3Vx8_yk;)rGzPdJS3>c z26FaYPDnibl!8A1IZ46)WSz?9iax^r7$h>5n@Y{qMR4cF)y5UW;?Zs)gCaJP+oV<_A!gEZ7#s2m!SXuLs@fwkg_3%bV& zz+^V4jPUG&7$3N4_^5~DX)jv%)=k9jI927)nJF%g`fmk=5SF_G{mck!-t=ci?CS6{ zBf@DcAtH?>aUy>2)suN<1hG$hW<)r6X0#G!&uk7+@|jVOKun0B-E*4|ER92F%vQ}K zfiw<%AZRZUsnuj+>kEpmBhXh&YXgCA0|`yGc-R)FHwNk!3>Cg6m6ALfL~;mhiL0sM ziiL@TaWBBCVVH<37VVAS)DywTjzb*r$iXpja|zZBVZdp0WkmEIf*8zi_A0DCGG?uh zhzm)Zv>o8+V<6H4ui|ecZWNaiGhXIAcZsnOq$v&5lLHMy;JZAZ9;*j@ET%Pq9T>9y1nXJHOF z9rsT+ua1Zlu+~1k6^tiSc#x9S&cJ(>GsD~(_#61&6IL4-DbVOmBOT{sjmudocWB~x zbS7n*2N1dQqA`8G&51F0c*@N(Vd@I$iFe4P0O0Xcc>w(Wfh$G896hlxDHG-`i2Wt% z_N$rY)ia`UX30HI*!x0ABk$apAv!|e!1oab2p4H`nMx(5XQRI@4MxP%mizqz)v%^) z$TM&(sn+kwu8#nZwOsB(wWl@%y$`lEY6a48-(fKM03;Pa#bHnzOmLZ#)%{`|rlY;N z3!QAg#aXZh8m>NJmV2esPLSq~S?8^1E3#q4k=e2`f|+YT1O9PIlJ)>ye-W zz^zWMY){e5pgp%aaoHY?FzqP@xdhmr(g0A0MM#_0o-RP7wMQd#dt~`TSpFSONfvvo zTmik^O6Zqwk)BE|_jZTcdNqO#|8^sc77>tL^Jr~`T#x0h4Z4P@??u<}LlEt53Yv1C z)7xdo5yAT9&ULbdl#l&^X+;c3M8oF*jn`SXgVEj1oe=ei%6d7oUXO$g%ivhnkS%Tv zA1c_%{lRo zQrkyvnQMzZpUV^_RT);~zA{U+#`abMpU!f`6wEIKvN^ndRE=<|uRZ|VD;4AI)!7!? z!NQWc8AuqvKHSn-n}=IO zZ~@RuKio11{cy`5SUo=6(g;&M*lzI^9`PfQRmp`J4gX5dN$4Os(s%^i8Gt$dWradI zRKCK~ILRV?qArQ_+dWO8M;}@wPhD3bfZ^m+e|H%s_J3o82Zb9v>d$L1w4rKn&cc6h zgDb)fUhtI0Sb;mGblB}3}u5*%ON?G z&)qeZMwnCvVHQy$ck6@r>=nw=lZiv&ZhNC8K0(AlM6jc!2VjlpvRSAfP{^$_%G#BHfz^a7Hn4I_il!{{|o zqzxmDNFPRj2bquNm|>K4Z)g~0cR$Ru)~OziJH9dGYDR`fJJSMGNH&_5o}B?qE>*f? z5W{;a-7yMb-RKR-Ev?ZSVH&;H&MbW_K!E);z~OZ@CQDy#U30x z`(}72^oOot?e@!XvwmEPO(20L(LBE=V*1^p#$-uRw7I(sQ;tD&kLC!k-y*!nC4K8? ze*A3!%h|Ld*ZUOVwG97+hsOI}hNsX3_|?3R%Y|5kT z^#Pd1ICY6TQe&kBTP%(``6<&6v#TTMkUd>cLw;r zghjTEHt<%0=W7Xk8F6Fx9fwCMc!f_MuWw5s#tw>z-LVmVhLs}%rd z4R3(lv60~CZa3a%i(&ws=HPUjUwv2y3NwwqgjjaFnMR2SO`{$koYW#kr@3&S#d&)t zljFrnoG(raR>`+U9t$c(*v!=<2;hy8M^F9Z0hj`^?pJeic%I%Zz?pfv6A)?hv_Y78 zx*JH+=4p*c&C@+W5}K#Iwvg8<)CFy6nRN-|bvb|%ihxUfG8E(-ZJnxcr6>pETE^?a zI4g)YLSztTFm5Kj9*o-wXo(Wo1?$1M2^q}I9c*U{j~lrWEVnvC`TP9^^g}^!mb_^QE_u@sT=J$Nxa74b?y}?!Bc$(` z@hFld$k*>x0L-Gb7t)f~!TwV&bq5DHvq07elgc1MOWha2AH$Dx$dB9?gy@G=r>FT5 z2_aJaSdRJ_e#`*<&@eyJ5adT1g8WEBkRP*=N7@!3jF9|Tiy{p_HUls%dk|@N<;ODt z&hSGcOe%v&@gtJ=ONJPA9@eW^*5Z8zG>-hnP^33{{O8?bqSHdl%3g(YtHaS;y+3F> z$-x(}5joA0nq@PNt~yPJVxnf*4!~#@0mBfz6JRbakc-hS1&A~%Y#n0LR2UH<6()BA zF9Daf6L=GdG!0`AM#F3k@-aIBjYw&j_dycUFe2AmX$wqaroq(zQs*-Qian+CHNxn8 zjnFz@!&>KeMx%|+A3{Lu{Bi(kI{!-)R?Nb*&YvD;*e{4pV;B)3hRJos5~QFal-)!t z9Ww!JW?p&%*Z~0DBqxBJ%1{?|CZH#PK>*AIP>KZ}yCOUR3=eQ-0yqkYwC*to(> z!djc|(TG&{oB)zg_s9ug6zXCofC>O|0uc4D04-;8EvgnQgoaa8FSc^8M%<849Cx^q zF$VE+Q=RnPcCY>UpF}ZN173p+5zOcaXEMA7-osn>se-)K) zpgMhQMJ_)Ud#6(HBa_j**LTLi-P5hlWQtC37Xg#Y_QAPwa?W+?&ZMlZGH%1Ji}Q?K zeGrCAVkUmLNuXXW>)0BJ&O%D3;o~rIK(1v6TWR6pUpb;_FW^U`*t-fqISW2o??u0t zye=ef5XSwdw`}fEP9@8;fM`P{DBqO zrwpqrCeBTdNXx0&-7qCX1MzASelC_tz8N$3VoU0BB})j`zUIznH+bM0^9nr3iBo z@;t(1Foi7bi{TQ%MaWfHa~KLPLM{#=%pyei-^^5W9Aqdm?k~L}g~)6daozDxrVw6( zcpMw1?@-4ftX6BQozHcEIkvR)~R|ziM!I{?mT&cdLQ@;qrG`JryG& zS-WS7`fxK`axmyFf!X3@(p_g+Qp6ig{6YEofk#3m%N$O6^fbH;Zt)+*1gLpg($mUE z1#Z|474UHM@e}hpEE82e5p~KqraXeDcPQ&Hnm^5X1m_(rSwgoV?(_RKQ~;xa10QB$ zP>RR{jWWcYx{~v5hqd6$ppw-Xk@gsv8rXaBXMg-Sjk7bwQF$D#mb34bYV^PprSnOj z4AC6~75(8b|C5Ngy9>gDEysJ;5=>nINBUu!XFECKm}fIZ#R*oO@@#ZUhS&;otcoF) zb9)7DH8Gkino%`OX0@h_u|!X3i%DXjr^h5!%n$csbP6IJTQdNM;!4U9Dt`F`I+(fqy22r8R1S1 zT`voJj}Zu$z#iPY7evzuyl&Nt-v(egfU;i-<83iA*D?I28nIgt)+6>})Yyk`nGtIc zdc+a|mZ}XYN32GqMyxx3lMqV-x-vLj6aLGn<+Z?!MM_jC?vH^9ut9Wpieh{NPsA`# zRF2M<&*5tT4+N~A!y7nwlfD7*5Fhg#{sX`{fcbb?p4)4LK7NYbwh3EhP+@?e6gTk| zEKvwUP(|h1B!2zJz^Wp20ohRUmX#Bm0PUd>W#2XQuZ6DAuu&ccp_PY7RK5h;A7q4a z$ezNlv}4Y`dnrCJq(mlCz5hCh2*i6*)N-GJggk{vl1_512JUM>)B-`x3&d{j!L@K` z3IylTNeQda9fdM-uTrfh!ao6G*A@tB*-4&NFYy8LFo<{R3CZ~mptz6}SyrCpJQ2fz z(46lJxF2B6c>@QWKLGLF5w9H)oB=qE^BR%H`5B;ssxX`H!T9@t*$)(xvSCMe z1Q<^QTifZA`hFD{uVM2B!XV@uh}eA?S@iwxo%t6uCx6xVZ)RYduhbu+ak#BRlrI(E}Qx^+2#ZWM2CP%flJ~W_h?7 zfL=H6V1)iAXAJ7bteZ;!n051Jlu6MEubV#wjw9Zzo4*MvhBcq^)M5~3S@=Vck69LK zL~2?1Gf3D=AYljl=YUCB)q&(5U?mc67y-%k&VbG+Lv1G=Xyql=K%*3ZoP(wEwEQ?n z_6S5)p613ls(T`?BjeU4#HUF2Y%Ye20EKC^45KwphL)*RXnt z4E`U5Q8!!H3}t7Xicz;bsECN1cQn3T#v$AdllQ%MN5v?1`%p~Y)7oKT*e?fGjio@@S z%1Lv|C06nWygcGdhAE5HH@G+i^}67gAJu!ADRbmu|NfzXarRL-tv(%TFRJIw zU5rCLgxg*0xpDfvSqA`z^4`q|*D?%$H(q_tR0P6@@p3tLUdY!C5k^9BLd#`IcBt^y zC|uSkT-mNbCUQrl7BN#U?|{b3S1LDMfD_s#sOVK{@pED*v*a4I>PD524WcoKE_`K{(&?sz! z90G4;w(zgLDuwX2*>3C<%+Z?S+>t}vV?(g!MBIlRMwzT+53kX%Wk1QAt1L}KYCl`U7GQ`dn3>d$@_0+M;mwYGRs=^DFw-`z4r@l%;%%G5Z!R-6i6 z+}K+7a52L{50@cqdUzB7-NVxv);+w0fbQXqD25F;7u6b}+l9FJLl}BBNHyig265h* z)goM3kss%knK%stE4VT%W;nPqD?=D}7T%&~gcyY|r|cYFwO0VplZG7B3xKGsaC11Q zS1`vd=|}JS z>|G6$K=$wzAc&Jd_i&t5TZe|CS{|!ai?EawR%r(#u5KX3ItOFXi1pT>u12hP03oGV zi?u-*vHlh$X=1GrMyxeLi?xPz_e-%ZK|R0#Db{5O%gVCxBLHZz9v?)=MqAgbo->UW z5%*z74BiA8z86|_>g!Q420C-f?O0-SXdR|RJyN}U*G%y!Mg4fo{{ z{C2@;=7^bcpHXR-G_xeGpMw3{h>hyQqJzQ8oR^73PsM3YeL)HDR)|J+?64OnjcpLLqChP zybD%br-ZA0H(GXVxSSfRSoj=;tk>C0bBYCjhZufD918@7qw$z@2w)6JchWoffub)A3lwg2uM^;YnaRz)nAsgq{8i zga+7H$Spb060fqoQ(?7#@G?sbq#Q>8yx!Uts~M9AI(dW{$=eYXmlAaqPa6n&zq``ZZm>PW=t_8XFdH9{-7HuQ&A9qb_7LVR`TKaL`pm@ZM)&D1mO)64XgH zt0|hbmH?YI9a(J#pqmvtEl4_%Wo>QhKO2-qSeCUC$yqoND9gVp1kav;J^j-`Wk@jd z=y>dm5W%do-Pov53FjS+Z`LeD@3THH$C|_*4+NF#rRMPUyt!PJCSmw`el!FJ$5H-J|im${P#G(%?$&3JTUi*fzCjFHoSi;lZYwXU#ojsdCSY6x1k3b#*it4=f?c?>3 zya3@@BOAx3;>mGmgr~h<5a%jj5W-U)iT{yBKqhiF(*}zrA~kIgBj-OoZ4e=+8cZ8_ z0QZ??Hfv;q*n!U~BGz=~kaq4xfe;X$v%u<(|MXvC<4cOR2{0IQiQ5C1ZNk`$ZF^iX z8#`Sw?ZMof*8xvQb*FX6&gpOg#-|D=ehxNavXeSA6^R8H;N(RMl`wHlIO7L%VC%c{hQov)2w9V~TGU*RW*(WU4H#Uq>+tVvDRis@>^?d*d5XQttvVdKcl8 z-UVRvF2Y(t?Ie-WyOR{_mEHwl6qNP~dJsy5?lo&%!qC6QiRvF&*A}3S2nyfrkovf?@sa##~bY7kdQ;?4) zFM|_#!qlYtT-d-NFR{qnoC`CabNPS0f9N4g`Hcxqo)uk-SXr~>kR;n8!3n2&Xdg%LfU)w7_zs+fEp`QY+Lqz>C8Q2|vdaKf1Y){E>E8Dy5C>Y~0gF|7t zx@a*J-8oQ0`joH~K-hGb8JR~9ti43&vm_#@Sj<_HM(D!?D9Uq)Hgr4yo$1lC4e?VpU5} z&b5-`--t>dy_HjT8D!kBn@zeLWT8#E9Au$Qx`aatY!9@iu8T-v$0|dwHvI&O=a4~AG2XHCEe{cZfL#L|1huXv7 zhvIZmyctaWh9IlT`T5c&v;tvcWxRlZwlZdAIHei`QG+m6#xpplv~!3D+LRFk2&nMF65aPOUi@YQ_Y;1c2Vtlp!1z$6TaH)A>XMXGYQnn+0$| zSwb7^Q*c;I1g9z@Bo9WgENvIdST4ZQnk^B=F1CX7+Aekh0nLLI0C>SoBXwp(d%+e4vFHJ+xyfh6#^HL)A(s}TOSr{SBOH0vYDsgFU zI|P6+6eTJ9BW!M~aZKUY^^vFivov_sCfme0|2d>cx|2H)JlHXgs7!ALMHCr80*p*i`@V9MK z{jdc!l^TBAE*k#&Py(&tr-NTo!}r>bb94gK@HZi=wE)b*oDW#oDyiX@r55H=!~c`5 zPS^0uey`C~m--CyQnWk4(Z#xOOjh3LD!(X|YQ#jU*W)Hh&fP2HeEPPT@^Ev$d;zxu zVeMjFiGI5XbHo0R5w!M=ORBT@mEu>G=JqJdi!s$ zf@@HOoTO7a?UVJe+Ha83p&GkQp zyDMfORK@f*AYT@5NU#I9ccDonAHpe-TuMq7=gzppX?#@|;q91G=vUir$ngbzqRm$gAF;LV}f#U}M5Y(X!a4muB5yK7FSWHnofdj`_mb|-}4&H)6PW9Xd zmbktPV({dG%o;&HO~>AhOdB6&T2+{79E@S6Y1lB0h%}}Vk;XJ4c3~P(yE2V9cDiAj zL1?CFgl3wC4bwEjFpUUS&M-|Q!c6ndcoUYFnjM#Lb57u6@Man}=KxBs!N>VF_E&Q+ zcg%8g9y=n1kelp;Jg^xT*)KMF2)&jY}X`EA&kmjEyu^FaW@Q-s`yhd)^*5#cF< z3`?6Lh)7Kl{@20Uki3=~^KBu7Ql{d0RpaI)!N%M@4|{R)gk9WquV}vTxm717gCy9l z``oT;1ht_tWR?`cw%t7!Qba1&iL4X;?wE;*fy{}@8CKM99YV-O;KvvlnnEJ9FSs^H z(!;movAeMoBSk|X!oJ`Lr}a7!X}z9JMA#P`5xUpw;tTGP;i(2mUvTF`d9f~RA$`G3 z3c=DB++lN41kx8=SEqUm#V9Pl$z`5hY-pKj~1$dSq{OdHkypF>@TCqh`?g_A9*jNCL>vzCNqfepd>|jP!dk-9wO4Z zCry(vPa<^pAc#Ndkh4*Tei5a%J_;0CJw)lH;=C;p(XTx?^p<4=&_aCW+Ymsh{ar3DwKu5+Bvm%`l1F`1JQwj=AC&?4Bl>6*>9szpAfWZp5&%XY ztp)JESs$sF0n*}OfMT#+{hFuj8MrQzk3|}ljE658Z0jl?v8+bp&WWhA_h<2@WBc98 zBwb6>mbdYygIez^L`b1qPoZ0ZX&MN2V5Iu08=~qo@-fT5=PpY;hR6#LS@}35?wR+6 zL~KEACUwV)m#?;^5OQz#^@k}0PwyTMrQqJK-c{Jn%?kE*`)r3v8UgO@?m||z0QBC@ zZFW0$Of||>Zc-1}t#<(8ULYbYy$9^pZ-&^t0|aM+Nqbm@UW=Py&4N58?TJOq21sGn zDrG?4$+L>xC(eQ?aDXVeJp$JXv<;8VhDo<)ZsO`cvY(|ekr0l}mBMmjR zwhPy=vPJLhAoPWahV_NX2Z-;Ecx}?}t=`3?Un7EJJh}UB1fm`?Q?>gh%udGc z5x-D55Ld!lus_p+?XC#~`#B2su}Fp(rJ4FqiK>f@7nD{z7m;%2e-TXG07;(##2uin zB;wuvI5q=<%l=76S~>p9Aw>Pj840%mR#KWmuB3$b0wit}`WH6Y`R*&o@>1j=x8Tra z?rm6G-2{Y-EUC}@Mp)TA30J3BL=N9N^5mfEhqUL1f+q7=(EjFdHQ7OY<&3Bjn+#d;F6^%moSU9)ouQm^j|W z2zU=z_6ND(egVXnK*&A^C!|BiTY)Gb#Tk$aeg)(KAUM?I>W@wx(-1r))Cl9lQzP`z zBENx^yvr6`0Wx3dBs5l~@|2D*ivvJ9ifjy0GQc>#YzssN5!?8V5+!PcaaGr_FG%3+ zTIuwc_lO8S3aEU=^52J8jzT04rYc`W*#j}mOHtgU4wf%pk&FOPF}zs5A{ozc@S3a& zVe^XQL5x6hTrTeUnoJ|K=8Cm|vO66Gk*Z>NM?Y_23ib}ico>dja!uf_#&{L6?@+mQ z$eBG*acJDPUIAe;lf85IotBjKxp{ z1!YK{?0;XLLYR|%=>)M1WW!nHv)EVgd|M-=An|-V4Z-v6{z!5Nl1K`kZw~?@?R-0o zkmuVwP<4{a^X=H&(D~0aq@~bkAzTW%xe&ORE`Xw|5$4p$AX4rVu*@|dJ)qs8TsD-B zf^#q~LatRif{o`Pd|j|3*iJz22x2pL*%9QS0{VP|D@(%v(yhA3T|qI6#o30(vyD;$ z*bT&=$0uKg0KiVbo98*A9AWMPyz4U@F&)4k+W~l7VJ$&2Ha&|gtr`McWtqKYPc*Oc z`q18z2-(AWZ)p&EZ`lbH|J(PLU!#pul8)Gsp%$Pw1d>D!;+r~hZ@GnlmZY5k()N~r zx+KYyGRkO6_J}?yGl)NVe`!RhGfJ<#DI`Kfq=}G0Xb~!5h5wfyPy7vSl$+4IPH@yF z=vE~{Ip>34w*?~9nSd6dAprhb5t7QNoW*KoG@XD}MoR!_WmJQ(QAQg9{6S^JRq+-i zW7DNF+DU*bV)uJ;P!wpcW1l`U3CIJKn56l0CN@k3oHn$70d7;~d$3e~QkhxuWA}B2MZKMZ*;?6F( z2#JkHon8fw447Nq*gf&>6x{9PSR)a?8BHigF>}Y{#*TPQh)+RH_RL+7a1RKQFJPVEh{n*1JgAy~Z@=Dg(lC<2=Aq!065!zsR3fL!yP zv0=Vz*zkP;i2pmcI+E|qHOzMnr}(~tbqe^-*f8HUoZ|aBQcJ%3M+SFZEzk*-_u5ha zzz{+%tG9qd%z_j|#GZld5y8W&xi>V6-GZT^VP3Rd9fIXW+wnN|(gb9Tds0vabI=!U zv8fO+QaQ}_`estVG%Onmyt*VhP_6<)Vi5lYy;{mT)wx%PkXrVtSL52E9H3;z-tXeDlEBM$p5F}so7Vu${Hs6Uu{Tay zS#~p3c2nX0?Qtba9x$k$>(37)BTmFC5XXP-7d_HO#{>T}M#pG1I&fQdZ-%lodPI$m zC6s~n!RV+VQ1{WX5#)6q9a}*B7mSXbtW%vwN6vgRIv&L6C;=#$aS#SX8G$$LJddMe z6o9mmk)XJ4bF$sFfnwwIkoIXCs;sn6+ek$C(>4-8)u%sgLxfg+!X3Hm$nd-;@Tyi- z%Z=amkR=uXn77__4+=}&HKjS#`DZ%HGV921eMc65@hg<^ zD3bdK<@6nZxo_jzaMxQpjgwoEy1qh5-_<<*A1~y}1-lgW`g(8E;qwgXOt^BH?Qz>W z1bgMmt0C&#zLpcv+t=v?>Mr+7Kwf9LuL1F2pv^Y2PIcC1TS)yI+U!4n`>GB#N--wo zbziJkMD1Uf+w!!dn~JcjzlIa@bK9U>Z?e;+V%+|j>YU?d+v8GYCsl3=zeeo%b?dGk@Gwnw2qB9)Q#T@)2mvBkI0WVTL@D{gxz}CS;erx zid~BEMjDJsAECtnr;SQVAEBiPYagLQ5Y|3I%NY)Qgic2|{E{*U6-;|nPDI@u5yl@w zRhJ;oX;X@%liM1E!&d1$;idZumyT}9B8k8&8Q|m3Bk@KiKBp+&5$)U}6RURaWLUN{ z(KT>$mWwpgrq+*rgk;RBfbhAy#r8l_4TDWC*<@hFs<)6N2k2>&60({l2-mrqbV*gl z#50vksu2i>T~g7AEKM+o_``yM9!+^NWcA4@DI9flNj06-3b~}>N?J<1c1a~Oqzg~& zl8T7HU0)*qWyLh!T|uA{Kfk14RtqwjaD#XW4?qrVtfI_1qYbOEuzu#F1&k`$yVhcRjgpof=hZ{I_kd9Bki6w!afh?%M&F$$cA= zCD@nxbef2?)9EjPkiD%xylxQsblM>F>9j_qPNy$^9&^*tc-F+Ca2k}Y;tnn%rfNUp2c@C+t~=qYUR=&-!k1? z2Vd%MRz2TCmT`1(Wo+%H3%e&jy_;nXAlPeEyeQoFj+uy%Fj zla=3tXb}1ATMZ;XiSXGn@Y5&zh>&v;X9}`UBNY35I%V|H)@DqkSx7`03pFCe!kk@M zs1Yd^*58$dw5Vsn5Y}Q%=IaaPm5vgS=Egt`my*B}`qR8Hd ztGn+_Zg={Iu;c<40$~q3Q4~XE>dMDgYicony= zZ*>G=z!N#=rtx-jKw5L5k?1ZQE<5@0_h%6UJM3#$-5XQwt2;<@m zB5I>QA1;pAVsbBCTtB$D(W+^F@)(3yCjz+iWnW&TG#%;aGO1buKjSi~deWPVlo|k- z%cL5aHkU~yt_Hx@EciWRHmxO^mUV#=5mLeM7jLKVJIlq$ly$)qdo$~TCy9tIcq${k zx!|dsfN9qhR{w9m;HiRDnhT!l2>j9up5%)!6w^-R7#Cj27hhJQNcG}NwY~#}mdwZU zwG`4HM8x4aest{;5z<7=wM!AgT)Pw@ns)8ddNd*mc#C;W2zb+BWd*#6$O@B7MCP@W z?8*4r|Mp~DxZlDevk!2+`>sC0w;u15QSfBJyuxhm8=$J^pe-1n3&MZD%3NcT#--AGYyBG7bE z7hH>mHZ`ie0LgVkD4Du@$-wBFwmyxJm02$G2^siOW8~;J4S^IRy+&o2$FC zfjnZ%SL;TQH(9L{xPxQ6sP#V|=8I8H)75$~sg+s}g<6jWD1|W}nmm!f zpDnd6r08w6ZbigTsdf0W)B}P)_qJHLorL1u>xMvIZ`#tml3>)1h#Qa=X5+X5xjXwXCioH)kUEuf@k0;f@g*# zX>`l~XN;~p+C1$h%jk&6GCG6!8AiwP!!|m?w$TyJGCGN{jgE+|j4nD#IDAjN`F^u9 zx+UzgMcU|A5@@>7tpRzHjcyZ&{{u!>aQ)9Qx)M?=qdUz$N(h03?`VAwAWwOeaFvC~ z93?D65&z+%gypD`dM1w&P63b=BVqsB7k<#3h?APxT#Q%Xl zUcxptc|x(0)IZV3|NEf;72+ERMC-*6V?1+<2hY5j zqxM=VJo(Y+Nh*g|Q-qmS`sJ7O5IBn=#X3Ao#}c{Q!S{QoB?C#7(>Ho7!e;hPI%s6`k^7vJHgZD9PK(5R6L~O%zIpRnhdMV$-!TjRk0dNkVADbik zBI~r*Fy)XvejEg7wtF0?heDoSFGJFESN&w}&LhlcQvBgQ?FHUi=5KlG{7>jdI;{dQP83r#u z&ui@;imlfO(b?-I!c%OL^Sz?*CLJr1dG_$y`X67A$z!xSs79RywJ3GDQxFud!2%fo zn$|108u`lrNQ-z|=OxRWKKp;y2nMfAVYnAZV8$1_>=>a$_;=57Da+VPLpA1G2vsy= z%NM%R6FW5zZDtXu^eZoXT1&P$P}9Cfn~h|NP?CKQe3sYZ@!!2Lq{LWQF&kU?&Kcn`$L7LkIY z%=4z>z+|nGnqL5bPkB;?a>buu0$RBS1S~IDhuSs)h(G5Q1zmAvWx)-2@}1XKevPCA zK-RTp9Z-OMTPI=GD(~+v1NE<2`-J0AKU-UbQnT(?lnDENMI!9``w3^=-%mu=g?a4Z ztj{aRE+36+d(^++JVbrUHS=NfmzCV)VVQY3o&1=EkP)B%=4Z^NqM1?Dry9WakNWtt zbYD0SkJJagEL*4Kb7*vSh%-DHO){TsixB4QP=qjNha$wkJUbL#2wLjH&x%=vyxNwz zc)TVn(j|`!9qIV;(quysU79R{qUkv0t2qq5!9}qR0AvXh0Wd>P6#3u2M{}J%Xu-*Y z{LIIxYZSjkFg`rNf@OU8dF>)dAieFN>6siE=NcS}jE&^~d#`0M0zhIRGGG@f;Dz4B z1n6LTA@^Va(oYWqK*?lw%fdHxb^Qf0oPryf57IP541UFH6OPk}&Ok`{=8aONM2NfJ zQV5)c5^eX$E%wjULm&|YPx6h`0#ach-_h>=w>i0@0aVjsF`sLEHf|`Wrsc(wkLA zN6>D^_&M#j`sKMQBcmlVb3}lc#I({_u%XNq)6tx1JH+B4uacv{Fi{cHHhP8fTDb^e zu9Y(gbFCa zG1t&oJX?WGnX95Q)5W;0n6tWRt1uIpi!mp5Wx1o~CMV*J#@M(eaY6L7<6XyPU&Q>b zxT7x@m~nXS-VBan3kJm%YEMiOg}ZWB;L2}tMemjgQGyHHVq-9=x#RgW#Vp4p=s3(RO4^{9 z{a$oMEh2U$jWN`D)h;n{^1~{p`vh4#V@XWRUxDlk5{}F7d&NF(mLq1eT{k3!j*YRIr8c*e(b&!zvp34uRo@SL? z(J4o;PiDSF}hrLo22;J-d0L>N8aqH?GS5 z-Zp&tZy9*l8?l66Vk3(64V3abM%iLG{zi4Sa@IXcKCUH!HpQM8M%ljd6So#VwjMQ7 ze$qj&Kg1CSKM1{r2Fh9bH7E#j_G$*d?uxzsh<=>tgvY`?Q$`$9N>0M7laJsf41KkPRd1iv;Rf>Iq23Se?~Y$;R?N4syr3!D#Q>iZx*BU1vP5 zG}V}7@b%v@p#gwq_6}S!K;SO4dFlaBRRXw*Hu?RF80v4%e58eSW)AHS0A-|kb z4j8%G$}gu(0nmG#?sk1GJ+%PEmgQw#X@lt`x~f;t@@2XgWeC&|Lxz5Q`o?Ij}m zAPPyOVlT`c?LT~MM$@J0$Pc2BglzJIDE{Ggu{Y$l0Y1E1_W}E*g*x9p%*tI*nJ?;CY8ujfc=|}HK#zhwnXt3{_kncM@jO=?YiZ+OheGjfx z@3lqtZ4epzuBA|oeeVu>DF@p3a@28zK|Ga6`5RG3gpiV=3m69yDJkOu3_`nrA2=Ie zC3FFk_eK1K0KTFmtv+!J0Auwf0F2d-WLjJOM5K+?Pe659Rv#gZ)f15mdCK=(X!QoM zh1E~ibjs@AM>8u>4;qsU{)+E1)e_jr>yYF}nw9}Lx4oaF(XV2XjlhVrs( z-XJWSm-g{z5Jo0{AM9f#5Ru9EfXRzG)J>C5!aj-t7?UqU+L(O&2F<57`Df8z0yuV{ zG+Q2hhz{LtNtBGa!6uEZG*^I^+d|iSoI%3pJmna48mA-govzq z0Z6i}+90%5KXxsK6INmd_BsHQzrY1E9N1R@hz9meBr_)7<~As^9@qyntxdcfX=CEG zs5{HVBZM(=A}I36#0_E#6Td^#Wd`=Cs7IPOhrnt8(ZF6uzzpp51k4cF0Kk~X$0#w& zJPg8^2U?{D_RXM-to%8cNN$B?Yo1PAu%03xpD5indW0bsa#0R?7pWe^cp(&|@(EVB9ru(Sb) z$m%D<>Q|yrY4xRGX$^qL>Nf!}R$p)j(w5bi0FJD_3_xV{LWyC_3c2C zW%Usvvifcy$+CKb$XI;|NV2TH*c7X+KE!T+E8rrlZwWg!2xawOpquuF21Hix-UG#u zYvyT4$N~NFzF2OfqLRmB{{3fV*7PM$#EQcOi`ATC6sUpl!+{#HGZ5kKfgdctPKYUx zPp7GFDscvuGMtdGNu7J|l$dj@1s`&-Utz%+BT;ewogoi2C{}X_R@QRecusEgD&%O^ ze_pP76>{Qz=2gf*jEjo)HdXmYKPQA;0&>E+T>op5V;YAdHd|E+&Eb z_TMt_L%$v#^czJ@&mVpNkL2jRtndF3M>UAP|3^fYRYZu$Du`h@(f9uhB4ZWAGNQ?WCKE?I@{x7Ijvv7ZJH(yTd+wke$ymmMv zrhNdQsEnA1$PyC~+Z59P6#2g>rs$)??aAMzxqkThVr4l*{ECkbyB#4?xp_**BK^r} zqg0@!WL&Or4@$r&-g({?CmehPbBs3Y0s>M`Co&dYh)aZ<16vI8OFMi5*Kr=2oI9H4buqfDv zyS0o3xddb5#>8ZRZrn&2pksh3d*k+f;D?OV%!zD;oxsyDrMu4H12GCm@p1i+{CBnIKAbaO$B(V6{Api+Z;t1 zf|6HDh30B0iLgJwPD{%A06P)p8;wY+_?mR=Q3FSwrkTMPYuLaN)H-hIwi;N*r>24B z+rNRr&4XawLJaWU@nKB%&#`^bJsvRePWT?`@#vys7kN&6zm={yXEy-PASikjqP=qv zTs$`BIK{O7>0lj-mRobfC|ArZ#*_QK#3zUAcsCv%`&csX{S^o;v~tAJ3Aat&MgYq+ zkk4Q;i|GfU9lIf!_dVbSL+L+;p3*=8Dccm{o|bR=X6M?pYvLPS-)SyN`A0G@g^UA0 z%liDRDw<)Vg^1BCsg(vM5@>^HR~BhI-h~Dk9S+U$K40gEix6=>HtpDH6&96R3+oUj zESfBK#fzlwO~av)$@u1}Ac3r$nuR+cn2hIlTpqCkYY}%`nFRT_g*uN66=J_$8FB}l zsiZOd1>=ZtpDn>pkJk9XB_$&5PJ|fouy7qBxiSWw_McM*QP{%;N?ww&#{wZ<0#k*J zFen*~j6HovTt=!3T~gs&jfk87;D~>qafNrpoPQ%A ziNbpz>z|jFCU*)1WO|}~ohRBuOocBw;m5lxC%YG(7ryNDPF#4nQa&PDE$$S)p~qgr zy$`~^)}JtOp>}e5)jI{m?=%9f6TMErO(kRZR}?*nco5&mHpl?uU##(4yr>F+XOx8q|FuIE2Aacqq#_EhVt$Ue|D9Y>_?VNGF6@^p?tpIxUbue- zx3RkEF;PYl=6a6QP9P(h%wLcrcIU%ko|G4Y$I-I`q3t;X@NBLZTvLWGZDPt=cr^kZ z_aBXkJb+d|b_)6;y$0zM|LC?0iUA1BVot1e@`IDc2~kYoL4@x50w^PJnxFgqnA1bA~8_Q4!#MJ>YI4d zf_whW&%fV>@7@I=BY-^oa+Ic zvTI=?4XdFNurD}^zL2(NV9cV=wqQMrPJa40rasKSTZ>>d(&D#5oV?UYc5l`vk|JZ$_VtNB+XaUWZ@>L_ZZktC-U%7y+Of zz=@}#Q+5HcgaA9`9Q4B~0;W?M3FuBKI1*{yDJ4ipol*wizuqZlqEpJ*!qar8OaX98 zuV2nzj&zGy?;KZ*K$jIhg8jcN zz_zv6$MfUj6IgcPr*NLzCdn?G_vwo`-Y80LqUW!kaeXaeTL_F>%%p!zvt2#eggAmS|ToYkWuDg)HtU>0% z0sJpcuF*!}4s#*I*%#rB=XManUF;LXTQ^^K^zFzaU@At<%k%w5v{n#N_+gAgj2lB0>Gd1b zo@8o~qh|KHAh+gC6eQdy*|g!`BSPH=MK$I)zXX8P(el{-nBn(+H&>*-@}2aV*Sq3x z@W!db11H_>{+MW)1~4VhNq@5t$I>vpNi`&#*xaw;Vm+Un8#u9(M>?Vkv!>Mj2`3$g zh@R^QU1w2<3myj-Tt~pT;Cceu z1vfCQU2r4Pkqb_|{U33`5Ny`CNH`i7;S6VCH<@D+M=0>@tK+quEU{d53^eRw{E&<; zG<8v;MReyav=RtO}X@F{tWWAh4FwRY{Ni7R(1+#cSSOl_Pe8#id605p$dlq(=I! zn#7!u$Wba&k0xbWr2BCJnvRgx0s;SjLTj-Npc%JnB{Nq1l_9DvmWmaEv0)#Oih#QG8tPuhb0lYR;N zC;3fcKOpdh(kZrQ=@1t3V-(}l8B5K1LWTB~QwaE( zw$YRgY6+fr9%oGeP>qxIklJ(r*Z>LVfSIAlD7pKMlL+ID8N{#`;>koutX@dL>aW_N zoB!Fy3_RsW1UeJDB1;)40#Xc2<)03CUy}pfgn;U8SbWT5W5zhC;A#L%0Cc_~M}*W)P~>qprvzf}+#c8aeyJP9B0Cphr4m%3#4!ncQ?136qnN=~@6LGJP;IW9FTSOh*V4nT`+_Iy?KfPQW=| zoyCq!qXZG&01Ft4hgeEVnTNAsx&|Rl_o{3Pnr`~M<~iawobyjiIBn0k%oRhyjG0j{ zZtsYiVm#dB2b?9>qv@&5erq{fZXjT0%bNg1v*kALW@gKSkv@?D3(l6y37FaPR04Xo zJdbHTTV95AG+S-}U;-A4(K<@nM3D@fi6Y$#3Mzq#A{p33ks{cRBCS9ss;!A48Q7XF z=W({Y2~CkR<>1S!@t)QiK;J^Mdt8pNKY{OJzJEGwdjrZtut20lykFQ6BL6CbXdga| zMdD^4*y}U~{{>8!4FXwqM^AF*{R3#E1t#O6oP|dSGYgLpW)@CFOIB9s^t@I4oNO?)HkeN-{=L4gj1b86TN~G`Nzd z3M-H%NAgr*EdX#6@TBZAJ}~i+RRqkQ>}1p?wX2&G`bRt_1QBdcuT!1w_#;mo&NNLj zCk`V-#OYNa(ZW!i8bpTEYd}IT6LDH;iZz_#p`;&vp`k-3g15Sc3hZLZZ!YjdqbIx^RK0LEN7=s9SeF;@d; z%#|41Tn%i@HG*w(CDJxm16$_0_2SkS^VHxUqCu&`KnG;cv4od{z0~81@wC4ZUISQ3 z4bZ}CBw&P>c;6CUF#sdH!AM8K8%@9nZz2ILyy;A9;mt!j65bL3|C7Q?YT?N-x)j2b zA(Y{k@HlUemN9K8W8;I^J=6l_gW6VOfI>8c^Afja=K;CmMe6HedBG0L@bWDLkQ$Tc z=WTouGhYCc2j#{^So<<|xXi$Y$KgT@YzDEzw{F|;$3 zlrcG-}B!IB);lY zqJfaFIW>RU6{EnJd^3u#IT10`Aj-Eu$k&|8Okvz#DhCi9XBmmSbgA}*REKGttbjQT zBFYsZGFN>!Z@AVH_;_@al=Ku-mO5Qax&nZb^y#bMRj$)h2s{o4K+*;wCH(~?Z4fA+ zYq$?2Z4i^sfTU+a(h*{F+|O@-qzxi@k(TuNsHrDvl9E0>Z-A6^EgBL@dKrL7(yKHe zC4B_)Wl5TdEJ@o4De3j5Fv?AQU`e_fdAF4G0*#9#Z4i;9BSc2hDj0;)rE0%FBrXo` z0U=lC1rwm!ZBS?GaxL%y045(n)&4USjuyhx+Kw< zvpVT_v(VH?J~uz_ioNlG2PtHLoO2f=yb5@^bKtpCamPIYjL73Zr&u=k7YrVkdSIW_g1~lFwJ#2O3Pys(lYv?ZIa|9EHL;eb-o*gN#(5d0=Fa@ zLS($@r-u;#$i+(EpF*Xn3tW;4cV7?1KUCz3GfIIS!`40OLZ1^~#uWEl|v#*Lz|Yvbhmki*H^Y7c&X~#BthYw<~kR zW&Hru;mI>=9dRJZ-UIOP__%nfH-I?+_FW$n%dn0}T?gQ(x|m3@faWOR(0Aiv0Q>P$ z{jTaA)KLzo)w}12lY8RHLv9oYUP>`N?6&n!{z}OWwTaYk@zDnp7~Yi#J1~qARCLt; zgU&-uNga#W@dr9~ED;ld_}oUE=*EQ~`@M2u5T;1|#SO!9jrbc8%iUzK9}vqh#HVt- z;-CZKBdZ8}?sf?-p5co102m6%J04^L;{=}UBV^d54IqY1MBW*AHh|B*c01tam#c*s zNhlA88W@3@2movBfTzDIn8wMkfG59d31Dp>msnu$f4bSm@Cb$f-?RZ8>{F$>?@Ui`d5 z90Urk0`u<#<8*pN=%d(q&wYkhz**)3H=XwgfYAizyRAju0u(rfP%E!6xF6ilBhVV$ z-;9XSN&w~ykeirRC$N=G)7Fg9fBgs8^wi3@+HK?Ov$hI08}fU!4uaJrmN-f#=#!Rb-;YDH`gPDijl zIBj5kauGF|GWaoRxiV8vE0c;wSBCLlBEdYY+ z#$o%$T7;W7hzJ31*4h8|lMG_m>G6&r^r>VoB3Hm-plBgA`C}mJh%nmxB@ovW0d1Du zMug0QZVRa16>OL3vLg6i_F>dz2BEu51ka<-IImCr;C7J~TMxiQ#g-v^Gh~m>YeonY z6^jriDrOKy!XoUAj(G|N4PvuViwu|(L4A|~^J`~dLk|c#DjB_-bU_AzETa)mcmwTR z!*>4Y7D?UOq}nM$>48?b0s$M5a=Z@VImo>)5Yl6;bqoCmAeIPGEe}D*7R`){#k(NK zjW9NQB)~a6=#e?eXK8#xI{aBw*^tk^6P{KVHlL+tWL5|=+pL!Hjn4#cY ze@;yNy$BeLUBY$R0k!Z;JtX{wQx_geki&5_V()|ry&R7Fd;TjB2%S)KvNYHmB(@mC z$DnFC&b;v^+!tD!+R+QAVNJnIatt5n_0JyErvGN_Ai(qiQiH?r=5Ui09u7b3{^ zihAiGcpRcE0g#%At&j(wSEOK1X&9#_YyuHR!;qAB+s2-o6BA!TRa5dyI5b=-fTJM^ zij$c(D{JwydD7cy@0NK zJpk2`kb@l?cPSa0@0Elc@QCP71O~m3gB}r54>9oh9QX`E4t~-P5d)d40nn%V5yP=s z4T9^Sss(=qw7}~uO=S_-czvRwQzDFiVPlAh{EI;-nFl|hed1MF zLUHn*t1wFiU`9lKKTnN_(LgN=zwnpV=Fh|IgSB0#1wTdBre+`Wm^Ol6LZIn_4+>H8 zN|t=JmUE+3a+}wzk_Qm5OaA9_hH(tTBCPG*vt98D64I)7emF<;BER&y;t$q7g)<10vTOL} z2P%&o>D$Bxh2O2uASRuK+0I)Q;>y;3_~vIBf-4hF%kVXDN$X@0!!E-u8v9!m!|-xA z@CcoMt!o+xAk`)|BK*igOd5^INb+Mtt)ke@|iO>|~g7CO6z zr(lpXh|Z&&-Tb31gqq<+naDCSwT?0ok(G%EJuMVrxK0&KE1UFMqR`*};*86lw0~YJ z;Dg~%m|7}K$5=A?Arxkrr7)`^g$al2hIdCM(#n}i)NpR?kF`pdGnLbSk3lPo1y>*smL=1117w&8$ zT4JaA$+fDC8!EKi#CZge!_H5QBI1Ipa0yif+29qJdc?ABL?BeHs zstRH+!TNRxPsU7{0*C2A``lf^kB(5?NyM;k;>qyU1sRIM#W6qen1$H8r=S0~PZR-# zy7x1jz2dV>y4#)sGUcJz={BMPm#ekXEolkzRMmjQRNas+gy-xQex=(%IIA5*WVM5c zZL}jX(=PSS-9l%q;_g?KnjdP*=Bz9A@ZiK1x|W`VmktW^buEOm+D=4P+ljE-P7BsD zOw`zIe_&A9ZhN#nafjX3>j#A;+oi1!+HI{F6z;S=+M3^1%egJ2lDee~znOn-1=8+R z2r#y)pI#w|IMmHOr4M!>sMGI*!c26zR~>LmdI?Mco6TxFnp7UBIGd8&(FUQmqvfVH zQ8CcSO>OQ^6Cqn<_NOC+*`JOOW`CN9)-25ft_97ylqPf@NHYTIdjEJ4l`lH_2*nA6K5X#Dj6a&8@p@^ z)tei;_yeA~V@)i4xZJglPWBUF^Gw+0nQ#`*MA$rYeV@g%M3~)d)|mr}fBA+niGHpW zD9kJ=5Rokfy2wZhN>#b`!_>y9NkdQlP-_|Glo}gv7V_9ITYa@bm;yjIZh z@7Rrc7yAj{#?+S%24i>v7hX-rnz$IU1IT8?{kAqU7ve|0Bf?_lk?MZ|!HBLddVVjZE`jf_%8f)G{YMdEJ zsf7b|V^$M$QQQydfY>^Tz=0X*j8^^=@vY{MjM8z$i_!z98s z%%9_oBHu%)!d^1hSV=^5sDx70jwN%A6%pB1XME3AJ`R+YGx`kx9-)bx5fL`egl(P) zXYovg&GWBwMn6XiP4K|R_x!XJ(DJsAuE4QZjHA+!*ZR5QuwqE$(YW6ocDou6^Fftb z5$_mI!pu4EF%?Bjt&A5Xxc^`fX8s+)m_f@o&?AIdvquOM(KLuCHsXK%7V+_V{ev54yu|t)VroiYJ3Uh-z#C(ECo@z||2z0it%j4!{ky9P&yC9Ig*C z^+zE-N|gth!XcpD9hm9F9FFO6v&R(zW25MG6K=0_Erk61blBqyY)>E$2a8@eJ8Aiv zr$NXQKmJLmbqq*KNK)tY_FJHFR{}v%0@2bhLd5k(AULD!bt_+xmG8{HXix_b6`npu zh);pq8&s*6FgHIR2p8wSr9teN+upwnHAM(%AwL`|L`#rJ_1`hKr{8EHl!XjD52qmw z$-vyCy0D@jFtVbTQ4#O;Fo;Om4ZgY+mOH$jBkvPPEs8lgvtRM#JIlz#sB(Ywx{OU6gObf$bMfN1e9tX)LQZhR z=R%Z0;Zi5&bPA3`x#a-(ox)&wnIonED165&N$wA_3IMHE7Y9}QVexFJ4u(c91JL!Y zc+2EI09FC$b(Ak(G+xj2zwJe1f5kIuh^3ZxeJ7s8AO3S^pflRW@IKIFKyVXo&6s!f z=J!WA0bkGKL8sLE96#V|dTj{c6}>#ZqBj75dOgqI5&onTN}+9mIE|8Dq2D>~Wi7tj z@h+YXh}g{4aZ&gNI;K5#sB8Wl7iX@-K?edKm*F~mv@o?l4l^*3Q+r~rypAJvn1h~* zJ=M|`caz{~5HOKb5$MwclStt1f@aIEJjrl1b4;#^^*@~#9C!ob+#ewOGkLybu>nAM zq`$jlv5`*twl}s%yj2&K@6GJ z*qJujnF`uOH8mnr2|$Dug67CH66uJi@c^RcP0eKb0hy|q>48B(2V`1eXIg1zS`%f0 zXob5GzF4XpLe5Gzg5PP~*oxlb!2B|g&1@1u2$*YcwTN;3RD+dQ~b_V8nM0$r1^EQaojU}<2FLuQ1eV{CR z$ZfzI5IuKuFxt3#fh7Is_mx?sAJi}T+Uonr0@Um#LF~=P)#r*8C?!r)bi*6O%(f1KO<&nI(Z+_4@e>uGjh+uoB_{zcXWkQ%$vn_bXL@d7 z@<)_k$Ml(gvH&!zRQbs-f#1aRIb920n> zlFYvsRsc9XEuD;G1Wfz|>7wp=uQX!o0crV;i%6zHR?bJ~rjtWZL@m>8lX-oRUXOI2 z{x0X(EO87PIAA#*AJ;rN3hB{IALb{YLZhZIt(mB1dQ4I_dws<;6e8|47N$ymO79nf8-cNptVn#BJ zzGX|E-7??x29hH14Mme^N!6{8Dim4CmUPZ16ZlSz@>14_RMInwX62#&(L zhh>lI$zk53xTzOF<+ljjEq^l8#g#Y4n)!EIh(0r%ln5IvOyxq5JZm8o$rl!;@&=Hs zvk;0Te9Ee*79>AzMbh0SsR2n_3!zFWvoMv{gJeewp-9GBn92np`Hh88BxhNe%K0EU z(LzWPNKp!K737qDsz?g3%?e9^;{p6X0p>zZ+Y}(4#dG(B;g}(=)p?${{EupgiyzSt z7X$CogWt=Tt|xBLgI{{JE4rSi2E6_5jEk8n9dA6r5qGUsW2YB>go~t~R3qWY{J6N_ z3YDIXW5m~E)}Q`Jjf%H9+HEe{H7@#e$P?*r5{KTb+{-0+mfqwiYwm#uh6cd(CLIcDVnxBX}@ig7;nSt{lwkKOQYXJddu}TC;V~7)k)ZLb&QqRu8!*<+XZ9x zygWCRbK{~Jb}%D$31z5V zG!4}ZeC0@M7tIly;>uCke2&_LIpXM%J24nTGI6pC&P^viM)nA9oAlqdU^P4^`sgg^ zBo6qA7Vv${BH^O${yGf$237+<2t{J|$_zTaQ%k?pg5};lsf0KDpqMy9>)PBaVq)jV zl&%GZF>&Z1)VR^{KKR%Xx6V{bTao9AQ!bL}_{UGgMD+%xv~tnnU>YpPaW2K@wueFr zC#=6kvHUg$`LyF;A5^Q=av}z%LNkJPMSIe&lhG@Qu=J`k39KQs6X7vx2%RGPM9ruw zWLgcOwMhSrA=H0I+lZ{ob5dc0Za!!B>6p_#@tlol^b@aXb}%24tuyS%3CiagZX|4R z(|QYTQi_{sqO!fMD^E0E72i%3eAQbMbB@9wPnvosM|yQ<)atC58A} zDj%Hbc;|heqaK`zKnEB4@*AYyIU7~fF?}U(C!Vi?*`WDj8(2m$!Wqw9jFuh)?oK{D zSInu^z>Gpy?97=No(Pwb2XEat^_El`;Wn3X2JZ*Fd(#)5D}9)5_T9Zy6f`{s_TzF* z>Rp6Yzoe;m-2U)_-Ul)D{#E)8415Uh@w8rgDK7KpaNHjTjj=FRv+9T(LGtv?$@U-N z&9)Ut)^#XIEWiQ?>3#b(7s&)>By0F!X;JdKn-E-J8i9(1+UL&3z)GKM#+H_J4#zc* z7QYgXrzn=Q0q0rHhVajDHi^VtYK%XW?K~lwFf%dgS3vQ(7+Q|+cBcTsapxt zh^TPdHWKMfL`5XJTEhp2lhzijhm&My@I8@b+)>I#*)5T2CA*bK|BSxQ|6aFE4qzuFMIx}rL@@e;4x7YLxn?wR z9Rx(H2-%<|J%h^tuR+CqcJPyVGXQKNu)EVz_;s4p11TQ26Nwi!M%H+D&v1nWvjG2o z8^J>G&*g&1TX2vz<4v%1uARIKuF_V#9vIG1W9KhY?@nNH3KS>3-c7q|qDEloK)ut4 z>Vnn+LoXPcP@-uHkPZ3JUhl0>95G~9u-M-54ju1^XV5`ugo@n@T|E5(FO{07&V%vH z(=Skf7sK`2n%?V$w>LGVx@O(I62nz&>0EVSE8SIAc@ZQmcV4~(zwk9)%{~2d#Q~UD zrh7YK9=3=m@|W>2-3Q+Zy=}2Vz#s%l@Dr2uJZUr$d#1wcHGzb?Iz95w&^?RBi}YGQ zae;;hO1OWxUQc}q$1CH7`IVZWha}hozasw{jl;1Pk=_f!fw1J|?~G{r67|m-Etpxx-NP|HGKlh*blrspqn~^h`pR-ei_Kft<;e{Qw57qYw=1`V|vBM zt`f{B_Azh4RuX-&m3HAr$?7Y?X?FF!?nm`UA*#f}PhxGyqx#2n^+ytM6i#J6l3jiN zy_)G=Wc$c;`a*oRT=vazY(g$-QcV!+v>yFVHsNsSg6!0bkV#75L>!El8P9jZ$8@Kj zz!EP&OJ33~DJSB0Xvtn^uqBB6dfk$~B+%l&2WeG#?EpRQT`nu<3q`W>C7_U%Kl>yu z9i~RjbHWFoQbkv@sB2L9YF+t-L|jfW=*kO-*fW*?ysrER!n$&FxUPKEIxYOgvhwqw z&Qkd2Km@Y#)(=4VH)5-g3>^w=`hL{9N!Pj$5sMMs+-)hs^z7?BQ^BWrSkLrgxcoO! zeFK4fWcx_BWf9v##J5^|iJg*7l|t%R9lG9uO&dkohn5p z;~tXBbj_1OiS0giHog=q(t970Blj26xC=tQD%}T#m`#md;8bMZwd!R(Y7TqlE+gh} zKFKHxxD^J!->t7vDc)|L2P&3J6P?bQ)aK2BbY`Wv4^@)JMt{);LT2kUk-T7+|S z&v4Pq?YaP!mgzKHxMbse=u?Mz|%dOh2D zniF2B`DfUF(`xuHm zc^TeEp2GCIeUjo3M^rF9q;=j4(B4|4JCr(D0f@X)P{lI9tZ(bC>0OIY^g^?XrhDQ3 znjP7*Gr&$(*L(_gw(8kOPKt@u%zlLz9${y{64}e_p517&+rs=1-!T3f%bcQnz3>EE znD-(3{{m!_UpzU#FMe?Lnp zE*KV-YrXdVsTM*m;KDf;1|&QA6&6C0_~&t4!M_AcS?{&;@3~hMyE_q|cuBv5Rv#J_ z5Qhd8$TFTn+TgWKPTPpxW&nGph6EF?#yK3M52sdD&4AF*WY%obWEIM=Cevr2T~!LiOU)76v4x{=*hR z_2N~!7d`e-S#CRjx$Z?y5i0k}P5QmJ zlJB-6>1>m%2T7rYP^Ii&3eI|dh{)8`QwoZCH^j9y;? zK=yj8xd?Is;Gy=;NVCIWRqC3KOJK|qf`{5aJ4PY6dXz8xzh@z$L+vng>b%@=#Nj_> zVdo-h{pvt8p;xYK+Zt3_*(bMcxc>rGrsShHP5J`59Q=#*%>G*evGY zZ7kpEMi4fQ$a@B*Y+@ZKQdU^-0D%6v@Et;anq@05wCpam`l{RyNBSy2CMht!L|&*{ zX|5PfFH{AJRj|O=i-+MXVrO7B@c?Qw6fTE~FOf<56^3~JXTmz^8P7V(TXmtg`ZNcP z-0PhjsyFtwvo;DjximlLmVcyz)=lhr=Y?6&#gE z!R<$~dSG8Bq>;YvUCJ2LBN?*0q#~dKaw+hXa>wkJKQ`iKARwUA_b(pov$7>$inOl^yni7Aw#~KF25G%ADI3goX_v;C|Tc1S;t^+?tKurxA7fEv_i2} zJ2*=Ee=&ZC!Ko-9H4E4%AXT;!fDTBNGi?G=QwaQ915yPHNL8>JIXPT3Hl}*|4jp(p z%IePzU_e?M2YA!TWgE2mE@=HKb^xXNJ?XTr#)l#K#m=fr92wvdN(ydG&k|fO#~xUc z&wi%&c@H}oK3)+AXgbVvAqe=37e!>GEFL(au_wd$F0SgtB1?dEkr`x{YG zReQI2SY#Jj`iB;sw7?3!4RCRO1K~|=!61S7z%R=ZQfSE2@;R*fp9c8}yd*2LtX^eQ@{^;~`TMF< z+^`+YfgOcsqUtm^?dMwvH8tMJ!hodIFR>76YJ7*D8q4lJ%Wdb=XGi^ij@#E?bg!ys zch+-`oAd`;b7dfQ36`OZVm5oK+d6qCrcHwZaK&>uW=*4!mb0c=m@7{NVCKrxnYLFv z^MI(Df(o*lFvaZ+QE-rz^0t>io$&F+l;ei(8RhK|m zdszr2tVtFIB&Gh57D5T@acdn>bp?b)M@(U1EiJ09gl5zCN7B2>9qeDIr8kTeSGlRY z;gH@Eayrk=&nBPa?w?IQ$1Mt0p~_VxzZSB62(n!dfU;cx*@|bhZ0A9?Z2%bA4q#f# zHfp5o;!E9@a%MLY6jig_RCW_)xjW0J5f8Ia7%Eju9!7Ky&P3_1G<9Y zlk~zT;&Mh*wbWIifFWqFaY=i>hykWl`?x}i<^i{5_yX9Y@QA1!fLQ%O8#0Jdmtb?l z+&)4IUZoM;K0<_jb4DIvb^C~j^hx&818zx#kP>;o9pXQyEAo*IO&RFde5Ps!uS9eK z-`wn!3T88MvzH?;nyadFLo&tY_hp`2asB20Ee6$o%2qv_7#CL@;xL2^eMuR-fi5>0!P=)a*-3xtmPsRav%uJqEnLCi_VBd z$TI6xnH{1s=@_!gBqF;^Nn)27k%-_e=-w*b&S2aItb+hh=YsbZV8Q>a(zj%r>v1Fk z0CcV34Ny&CdPz%E1%orjFZFCW^vocno-K!-eTXbn5vga(p=Wp4dbV8Z*^$UDC&Rm; zOe5pEm+^{VaCUK^1f{$`H&0JT>g$oO3?oTSVNb&Ya@6${al)BJ1b@ombY;1KJ&C{PO6*NXSfYcn3MZ!C529aIV)noVdTL zkki$k`#3G4PZvvs_32^>%dc33A04UkfB{v=!ILtG-cJUt{oxiuy?hfMsyRE9ndX5r zo@5|rL`cresRkmlPBrX9gng<(a~7Ry=tcsyoiDkYO75=R9^A2zCUEB;{;HCI)UpM9 z?@Y#2WJm9b*2#`O{X4CeH+lZ%y;KIS(yMOv@{oZM3YnoD3{b{X9DHP68unr@oS@~0 z%{5VV7v#so2$UZYQhw%O0ufmU6UvD&2NSBP33?q^$Fx}o))TPTfpwIseK3KDtb+-h z$YdQ%pnuCcm_S5yFac>H`=^2Zvt)bp4-08Z{~Txc&%LsLqF4TVp;^XTUtgv@;X__{ z_;sp_&>N!aVXt|(dVU5WLvx*v%^(<>E3{w}niK9U^s(&Mv{lgw7-wbIKI{28d#hqX zR`eWoLAd*Lz|YN4bh*}SXXQNXb5G=S7Gm}liCVoaNUfWFrSF%c>!}ii+l}Pwbh6%7 zR_?wXZ~-<}o3nRv!#j0$3>{+j&aUrg?Hm8;C-dJ_6&HWPl63YSZuqdBzii9=6+fB( zJ1o-AfX|$Lts6dL=f4j5vrZ)3!Ti>Obpjx1MyqpXJvA!uVfwDKP;q zORxcqt}r(5^-cIHTI@B--aY{qh8go5F|rP79IG!l{Rho3uX+-RSZZnG|ot z_v7u=7GV2jAaW;`;OANX^k|Kru9$aubKY>pd%NLN2gS%N+}Y4-`9L=E9H5{L@tQ7c zb3_R$s$QR{)8~N>z_aR){lxcZ5Sy_V;0|54+aaCo`WLpuEf=hRL*hQW{=aQef6vUB zh7{WKD-H?C`hTzZcWW9eTrsRG>TgWeqyG9Ako??F_^TA}`;qrOwlD9TYRU2G%Cj7C zI=ZF$tK@U2yMc9ooqaf}!|?4}_heOftmdXpuDA)Ft9nzi0d+UB?#)}&J!<>PydU&X z>RgCpxGVaj!ta9*PgN`OiiEZ|wX-elq`KFW`7{59I%Y z6AriYpTA}Pp+A}b9=PT*)_!;q=)A=D*kpkGAt;l+14b@F+jM zr;&EW$#|n<0P?Du2%dad8kOd;iwY9%$}~lltP>vaO#Do`fF7 zG^YBYt)I0xUWh?_wtVYn3kN!4H$Hn5Lt+#Y=RjmQxvMTNmJbBQn~wh@#xD*596_qz zGP1I%2fiK?cai!XM5&&(s8|0Kbv{mHe9qd}IDT83`n{i`z8Y(BrwgdpI(~PX`UBYy zJX|iLHgE_rj@7;0@P~0~gas(7`?$H`J!NVlL_}e| z>*pV?2LRe^tLL#o$~&hD@m)HLKKRCsaOKS_9BAcua)znp799JZ0cE+oRpNVi7Yc6_ zo?Tw(CwS_QS>|lco87^1Ik*)dW!t; z*vD15EOBf{x3@pWLiE8YED`(xmP^0#AQMhqX;y!pGcp4k`N!m{=2ut*5WgGU+z*eIKWYN zeoj#gx;1CKid)|?YwSMF2`Id?1i(6`eG%+fw@9=Yq5ihQ0=?rdWvBBQBGKptu8N&p#SUBgGe*jW8n z?f$G|fA%;tN15X->`xB5a>DeP;?Aqt{X0i&ECw%kIsrM|ga&lK3;jus3t&R!ta3Woezw(0Lk5`yQoDXK6`Sjh1yR zZBUa(%X*MUa%=#Q(H!2f_e(V=`9Aa}u|YN^?*hoC80q*)v9=gSzr*-87$BQ0(k+W) zY8c%J?|%`5EQirhf5`A+GmOs103e6aUT#1!ma~A~xG$9AoI=2evjPCbDTmQormbO= zL!2H)DZOQ;5K3_s0VBmt%xFpRUksK7f3u`m0w5#BGCul+nkc1MjsnmWDa9#BTT-k5 zD5a?M3~g4EDt{w1BLS(`kzhw?2FHt)ENIuZ(RdMn{1j@a{6B{k= zO90s1|0-3?cKW}3>arF0aQZyFB>VO~ur3GhRiC48sjMT(P&xXRN;{r_QQE2G&Qe;R z9k=blyBg$?($)dUC~Z9-{bHr{zqk9doc&qyjGjv$&i>@Py4i#G@rUM$jqJ~HZa_{O z(17koqd&=UBLTy40y+?JTnxbG_+OamV30=~j|Lz)&hE$U$Tj-$Y79IwHjqMJn8?P` zfidBe*?Icdl%!~7QQUs9D|l&e_gYZ!ypNRDF`$4hxHTtyq7GJdzs2?K1!MO*d2Edb zWn_^BR*@TaRA;8UFGi8Cz;#H9Xio7D#`^P7BaRLTw{#~x@sMZYW7kbk7n_t`h24rB zQjWZmr1S>f^L$9Im<_3yF4SuzgqI>dFZ&V;{Yft<+eVj*(mBqK{y7?fdWb+YO)|F$ zZbmX!bh8Q^l+JL1HhAS~*(lJ>bh-rZ&ct9z;9*2bm*WgO=RFCOa!7US{G;Ag)xd7V z!F^lhUvr##&RP!cOG^k2J`y7b^H(~}f<5PAp0FRTADQ3j*>yO~ zf_h7@by7j~rP$9Wa09*&d>uqL6##c(gWh9si->x%v;Vjj9~mDv!s#EJgM4*(I&LKL z?G4hE%-1pA#(znZ9!}DcP8t57#S1{sX0ZU&)y=<6Bl3w@==2O9(1%uU^l{ptQy*4BiJTYuLu?osNmQ^VQQN==p)$Q72k3K5#qKg7u}I{ySPYomuI8 zr+Ik6Nh(t{5qCQA@C*wfzt4WJMlg#+EZP!r&6bGDEf7IH5S!3$<`3RJ1m7muUjgzf z0c4s!rPn&Ad&m#S6A=>ep_9s=Z6SJoOAF_}a6erK%~dvQ_bm~nTOzt@#AuV{c#Xj9 zQH zhEu4u_`fZI{_<{sJAP*X9OQlZAyd9F@q=XpfO;ls zmo0s+QN6fS`h4Pm#mcaTvt=*((wCH@uufCmROCzO*lk}TVat~gjxGpR@g6yNd6iG7 zt6)lTZ-s2a?VfJJ^VMqay7blT7QgA|A9<;25t_k^iZNK?-<4 z!g$_F!kgovalBNeEXNxmjN^?E#_<}2bi5^KZsd5&G_Y-p=ZKZ%c!~J0INoy8a9aEn z0RIMycX!1k%sY0SBTmDC=h7dY*pWCoa(;iLN9bVxPM*|cr>6bXT=6RWLuq#>@PB|d zqDiGaoMf=?TiC}S5OZ4R&3F^41z_OlL|TMVb}WKw$Ugq#RPr5sJEQ>iT6nKtFc}J1f^@5!{KO`$IUKhD`_syl(`g2nXC>eq z;x8)GqOu`7egih83?-E2IYmh}V?2OuHDNlR=_b@7ZJJPzG^$Lp2@NV8RZkYSs6G}| zA6@{aC<&?l0WN19_+sd)K271s4p_CRl&GSxJ zjSkxfdT=uJAdCCZN&maKXJ3?tPN#@_BC@!T5Qck$*f#h7)HMXVoez}(!=?E!iT(hl z0?2Y)6qZC7#}y$=A4Le$M-jrbGD6sMt8I1(Dh$~!_AaN6r8ox?vTX+O-)|po#fLAc z-Up5Ah0TI5hkK%qz(}Vs8DKWC2EZ}RKrN4Sn29bNF3sdw9wJ=CC_%iu@=3vRXyI(4e*)N)a5 z4Vd(aqa{y8IBYF}Z>;8tmwGs2Gk{+0I(Qd*c=r?E<%684w2%^oO$mNPmbz_~(6$F1QxR9#gESw;3gD0Km5JrUKXkppS1S;`bIS?}_!j=v7kW zcXv}Ti}hJ7o00@9+Go*3&=s@-1!VP7T4mcUaJie=XF_d~{cR z5_XGt^I+{u#6HcM`dJ~k--%Yfe`=sy60j}YzXg7Vh(NXY(kpR%V2WndjT`KU7dfi* zvwT_t3*Cam9{U8=u#0-q){s3kWewf&ZLFaZfVPI2_%_zC48T8a4I5dMwuWs4v^DGo zpsgW$SjZZR0i-nv)sWUCMCc~Lr?QF)WHVMV7J#venE?K;SOpCy%_@ipTLs}XtB{DW zRS*%j3K=PKfz$!4t8a;lDV&rHZg{Zgjqh!7Vq>ILs{;uOkWWtdFTw`WKzO#QK~`{Fv7+%lfn;MDI;hpD5wJx)_s$0PwfmXfC3Yr#V4TAbMD%IcAy z9q~dJNU@14s|*`#xzLJyf%lF1JTIi zFcm;2_@d`QQZ@rWZuTl>Y>~{%R0OT;NN|yX-D5-gYy;=v`RM8EF*`3CX?4qd>>b>O z0?_*q7en-fZpxQ5MILZS_#;Dzu{Yqv)8@e2kYem3R<>KaP5BWvTiF<^rGH0&VB?mJ zwQ~GbA%wJt+vcZSkMt4?&PyRe_F!*ijmDIymrKhg>KZ{Y#zLB+Mt-xvcNMV6DyzBs zB5Fk^LPYQBtl8N?ML6LBC)ckIA!N-~WvIH7Le}h|ZK0Y?!hGfR0D(plWye`r{xczj ztl6J~nvp`*?8=~KM1*Q48-@zfhW-fD>hBkb&Wf9x5KZFdCKi+SN*31`I>unY%?4oxUB8Hb&Sl4O6qcP4&pp#@kz2k#$@ZY4-8dkOODrj?^xxM_*_ zzu2^RWF=NcYOcA1>i)SDEm{??;6yBaNk#)eE)R_%H}0PPQ5wZBZ6-2 z=81U4@_%v4R}<`Z&|lm<8Pm`C+fuIira>+JkwNuHARBGppngQ8JY0NyK!=e{lr4(- zl>r%HsfN)30wbZC-{c&M88g%&gP=y6J{(cj*YOI;Y`Ye=Gwl3~Hi(eI3hHqmX>zSZUeG36?>bn7G>qx9d zljgffy+@gP6~2wB*8tF_z6{_0Po}<(nFCYbtiF}0?*w2>y~qoh`d9#ZHo6$!rZO7= zn97LEP-Q9r=*mEyi8Il7H6*yViFYEt*W6h+zksELqDJH6Azi#%|#PBUEZk|X%9R@N7|D*S@7OsDQj%-_yO z-ZIOQ?=#HGLNnlCv!6Fzi0fXp#nI$zTO;M}&&@y_288q@-2F*IaQ7z-!QG!U1b2V# z01rmdBoFTXgb{N0XBlKLy>cA@(on6eG2$tZo{D)lEaNx@ibjcOURbt8N$}tGh8=-EHCOo{YTpt9uS` zaV-<8s}ZKU24Siz{1vG0GUSx4nHkhqBTRi)fg-KGX$aOg4Z-@RAz0rV!6U7{VT7#j z?r?pxu@*3rzk|H>>-#BiY4z0zlgl7d_4QuI4853Zj-*wTc`s(?m0WW;wtkn7Nm&R~ z(#l7_Zi}O!(Xz&fkh0k)0Fh?pX$Yzz4M8=eA*hDQ;E|?=FhZ(fK4dUfz5;-$&~oIh zuZFb&&RDrdm|O;tQiCXbbpp=+>0tU>*W)*FJD{SU#yS803Tar&iLx*9TeaVT8<+ya5sH4WRKU=a0=2n;=6aW%#woJ0lzMbbNEqDRD_DhE7|<(ggp*#`v3Hx%Zt zIS-gDlAPnT@Yl=}Da0U%_VKwXgq}9}i&6GsWGiAeti}AIZMc3DARumuzZ85lf)k0% zzkyGFLJh+1+W@W(iscXuHu&?}U4+;1KvPzT^An7rRsvwuEY29}y~x0IG9qXGP_Wl9 z*~?gJ71@KEjHNyUYW4*aOMMmyHeV=~x&bH}UQjQ8Jj#CsxYocig61=xY7mH`#Tir8 z2+Uo4##J@U`HKv4Y6RynGRR4Uj8y0#r$&V4GMNie_$*cVCSHpgs80b0c;7>cbpT|i z=OlbH025s+o@5KIF?GyU!$us9Fyauw1~&mdjnLxAnCn5Hf&(xyR}BX-*Bxk{aRG^p zuFcqnqhtYs(Y1*oSjHSSq0KaboLiRHq!8M)U{P2V9CYcQV_5~nC z@YqFWG6~(oWA|7AfL+65*Vs$|-NIwH*hxTliHQ(016)m)FbLBn&IAb!!*mIQ&|N|! zwA>!MgunpB?%)+|!%7PPyMo8APyxVngDL>bC%eH#K~br0;E${k;wqrqLjowF*dGtX zbwCsWA^mvfuzH9)v71E-?h7>=lu_jV5e`QqWb^?E{%lNyOA$hmjEgMGZ*vZI0fA_# z8TUS|9-?D?#4khZQLK1VAxzO9pq0p!2wgNj+dYhtXbwJPB>mSiA?_|j{W9&$kKjgk za$p@`x61q$fM^6@pxsi~B(X2s7nw4?azy`j$dHRiz0X{)9>*+e%)^sB^kFkC@+f}R zTFzDrffw?OMYH~I*rEp@89Ml-H!hH(Wy{*xz9@9W;Yhq31(p@t9eissPR40Op`GyC zgJKd8CxIf`5AQhtjE!9)P!?JSkCBbPTZp+p985$Dn~uzX6;q}iz;P4@-{$_)Ap}<^ z-fFZ%KI+Ie_wwe#r~%MXWxfYsECA)CGS`7{7768MkH0^PX|u%^T#A-;vJ2yU@rH<| zK(u?ym5<&KrsFe@-WWvi=#7Epqc_6;Gq@gxOq?u%Yr?-RglN|`;<_ush_R7YAZ&IL zay*F-sn#!!#9dho)n%QPS}#DNRBIQoqgo9@t91z|($q>snp*D%0_AG8qB-S_r7}F8 zFdS$dM7;8Eh;*|>d)xj9&>wr97){!EwP7Ymn`}_87W85)Wj>E9~ZO z0w&n}B^-1nVt*P~yQ{$&&qq@8(YlFuS|ZsIX$x$RLG#71ma;{5kqn-%C7^@n8vvw& z=YPjT7ratyg6A3`=N1f}8-xy?6G5kFg6A1HAuH#BI(V)TCU|ZT+)P;jW7Y`mHo?xl z{aYbEMV(5?`#L-@Sh*bAiWI#L%KqzSAudPBY_j5IvDWVMAw;I_z8t-0$G7KP^dMf(*sn=VM1R|}sq#oo z3cwh}<;YvVx2y_q#sD?K=l{5skl7^sG7K2BcR>BC`;OoK-zA@b3Pa|*r27e>KnFiMgqYZ;F+E5L?O{;?q z-W6;?RpKa5vc~>0+J)?1oU|LCJ?j$(+$!P)JhtHT1i7tEAN6wnpVOH+2GktLOr|~ zfT>q5x={TF?*JTURi?o;!sIdtqYc&I6<{sZ!3LiLv4&|j?BQt$RxJ&|s-+=VH6qfg zmWE)1-vbI(zzC}mMp%OgHTYlZ=h6t1%OFx!?7+A@rIC~C%!i`lnhqFxp0jQKU#@rL z&NSz_dVYC8*O;0IzhwLI1!^y>Inv8swhP@4Fm{lq2Lu-#?pFb#F%fccA&<29A%-uV z7f};d#8E}Zo44WC8B(Q0^ZSGEd$x@Gk7Y}IXh+p1Kmb6;bI-2k=9;OgjgNSCmqB;I>v=}KQ;zz5sdH$1#PNC;NS>;Z0rtjW1N9AGE zquD;u1P+$HpfH)lpd5EiP!172ABb`W?dP7Lh>`%xpNn*K{~YikqU}x5#=={HAmdKf z1#yqE-scj-oE=eqB~326iFo7LcB@r_?A)$zk47#!(tGvz56QC$%_a@ zBY!o5lN4=dHK4{9`QA-{X30oo~sxp*1iy|PD>d*aJv9(wZ!m0irLx?dO zV2?lSpQ0GE+=fla`0HYF(D7Fa#-<74ud-a)ua=C_+uv1`&rq-CzL(+(4yuTVlglAa zJZcrh2Uy|=*1uO2@rO;))K{vIMENn1hDX2-KQcp1z~hwVm*ID>)*_~BPa6>2KA49Z zpi^0OKXuL!S73d2WS97>2&qsWE?bZ6-rmg(nwYR$!kNvwE~My{P`k#A6>DW2@JUqM zMQ(lK^AV5HwL7wJJ9B`Nx|ET$_M!<{tgBlm6T9~CrU2H^7V zB2D~vg9apm4d^cpx+oFNL@djF<5VSvM0^(EWZHkai`s*fhVdPqSDz9xjPliy#_ruA ziZO8>m&ae~t&3X$Ntg8T>FV^_kwY#2vyd!D9*p~m*VdQig9ftrUj#bfc!W&D%wbga z1=Txi14X(dIm9~9WmKP*;ltxQuj!Kyn93c+Iv|JFr@h14ps%7TcmNp;d%-7a$CBu}(W>Muxa) zMm(ULg9Avn5t5XDFN=v+|D@Ai|BEfY$FVNO^VmL?_=%9DT<}3uTvV+odsJ9r0U?>@ z92XHEnY6?I;D}F6+MDCB_h3qYzLO;mF{S^EA1*w-spk33d5$=X5P71S$HFg5r8D}e zmEQjAV9*<^PJo^gN_!5!cP?GYc+3AOaK8+&l~2H-GJQV+9a+sg^x1oZ&}Z*CtjU>) zK6|ebd%qz7>)HGLh@ci6V0A6ltcZ$1a5&|s1qU`eg%Y2@#)w-M_|XC+lz(WqRri<~ z*Fhf@b(?!-i0$Y+EZ%>f>cPDT zcPnwXUzCFT&ci)@<7vB+VqfT8MU~m@HUK4E_v~|Q`Mz!WB1cYxswz<2VmwFx;A1$S z5&-D@Z4mqGfX-LG12OFI+(=4)o*n4viWe-g6cUzy?s(MeGIIC|?5N*$1gKl%Jn4Oy zY&?fVgq&M{-IQ+K?lP-ZhAC_`KXeTxa0Sh8z(kMCc7U zBH96=H{>*IcEB{k?0^x$!PM-4X@uDUtHCxKkrc33`$q9qf$x`akEVNa{q7|}9<(Ec zLq+28x0F4xH;yhYFd8N-H5_jmP|&nT_vqjr60`x~-t*7~#sWFkk1orL|2kKRRzbLL zqqvJ$6GbI_%%ka79gl88DR_f}6y2F)VASU&4h>7Ep-=X)|Cx_%A-4W5OVvAA{GIG9@N9<_LoMebzXf0x4+UTxcx;0%}MUOar;XnQrlk*+}i&k=(JLkMG~^AXb3d?ATLj|8)+cTi8Ji-IIgp zA9fIjc5siX?;zrt^Hg^p1oIg^wuRp`a0rBtxxgw+^B_m(!y}|&Mvu%(_YmX%YdysM zVGmK+rk;oB9qIpX^bm5sZu4jV+JAQ{o>fER$yw9P=N++u3(xTp`Ls>qG_?U-J|U6- zjeMC?dY9W&4!ds2Mzt0y9~jN#a((R(hI_E@*9hy>Hq19kG_?Sd+gL6UtG6eGg}`>AwMcjvy2h`$`n zCfWcy@|0-&uArZQt$Z&5x>0^Bicy(ppc!3Ihr#Q zzgNj~up@Cd;*@Ij_Rq*G5CvWRMpWJw89CD`oQ_}BJl2*C8m;>XYiVX3IVW*7e&uKV zKxU36M&T&YW_*wOQ_>rPo!p)HE_>9<@s>e$fxcX}-6~GZ1&|M5}b_;7qNL zoLZJ((5yStrsm4nStY(r?5qlaiJfgkF6zd_&UOI7If;p#8HA3VX@riQeS#eIVrTJF z)QO=~>}&@xoZ*|;nMQk6PVbUMx2|9MR1%Qs7?ZS5`b~XdNI3YB#GmTI*@h`BRI~O!ut&N;| zi2q&)meUI^=QM#ta5;A&aZ1?A`{ zzl+s3GGT&vH|%gNc+m1kUeP3e5^Pb!ut)zG*rSGNll~f*p+Ued<2R;p=pLU`kHca0 zIJn<#!tu(WNLscO1fo0&M)v~WilSTy`*3EeJ_iTe?97`4!` zoawj-T7!FKqZV3D$APxE9@on79bI{5MEnuA%1G3PGaag0yV7Ml5WDY#u78uf=u{X= zn$Xq}x1yho+7!PNhccLxORiBbMEysCi2>oVX}C;S^N#XgMD*T-upJ~^(i1{gl;R;+ ztf5Bju$)fEMnsb?`2IXt#fN?R%@qjUJ_o+@Uj&6~HIXkPtNH^Ef59aYye^a5PXTo zpZKYe2+5-xPO6T?Sxiz8!G|gQQ6Y+^eQnntSf64u&JpV@P0zqQnvYu;#7PlXK5n5A z`f&^4&j9DQP!yfps2*0HEL$T?*&1QW)(A<#vNgh#Z4kO_jYyTvhrd2S*&G{2^+70! z&p2p=@jYn>`kpideNPx6eGd_gSsLH-JrHTWMSvZ0Dm%66%3#mjml{1WJ}y|z zamW}wwZQ#b(8mbxVR`u|Xal}~`-*4_sQ;N2k$ewg7mL&{0K^9a z2!~3jyKtz4aN3%lh_p35x4F{R^hD@2eS)EqA{2r!NrGXLzWnadRGxVsfp2-{9cOA7 z9+?VQg+>yOEkJAx;OMhl`NYIBeDg4kd}3l909vVhVqzmR{U@H7a8RxPbW}nl?}Xjb zsdh!_qtD{Fr=FX1u51()@1e&`%Cej*5Q*|&-%C+>ld2uvH+T{!I`}BXkfgN5b%W%Y*JY-kLNFDLB%~UvZ~wqeL7mCZ93L~x*%2p$*c$_afw#m7 zUChbEBwTp9H3YL@At??81!w4*Lc@{*cu{;3C};qB6uaZIsJIvt#7P$=FZ&icMKT6E zG3ifHkwNcJr#t)$^DXgB52Rd?I29V%h5sh4N@Tu$HO|s}jg!i+dWt2zy2-e_jt1Y4{l@k^Pmh(8-px1+eXxAj*+B1%jRMaDYb)CqWfaU_w5(HBU8YKoEvx|p*tg!Ot}r>nCt5bp7bDpL-K zPPnnTTk&iPj{O>G47B`O?k@-DUrs>hMt5@RO24{<1sGhfZ;O z?!>ogMe#QPx)t*Y1g+Se-$5%@;@h-h6@dRhEB?QArvv|2yHh;PqJ|Y4i)yV6NLv)| zoTgcnL1>FI2z_FKijZ0Ki3N?=`-z1(vZOs9NJMCvnfP=tMozTj(#nMQ4!#%T+p=+k z$z7zn0!K8fWu%RVxt>_d)K-zK#4G?C01W9@kT?xE$b0&l!>oN|Mh(2F7Oh#>@ky9>XJjPI%VHt)H6 zV}@W50>)|`Y2*z9unfQfw;2eg^1lQ2dKmqSkkS7RN#Pk+74%9J^~~E0meP8)Xgj=Y29oFV02UbLrOO__zraAQP?ej zDX2$5<3B1PGbvah$!WSo;H{KkODx;=TOTxNJbfuIru;8Wz? zgybp!lFtuN%Ph_3dXOzPd~j$L2D+Bnsv`y7Im;mnf#V~sy_GP@Z2-Int(J+o({Pg> zfcy8N%ro(w{WC)HKcl{gG97-ksvuM-B2yx*{W-`<6%fJP@e7VmA;7^sJp}8XDw4@S z$;<}JVO}&-F-kh17mnb2kepm&EapVJ%JlI$KBP&cG4{iCZ+3bzTBmW|gin#0R3JuQ2F zsSp*g@};N4H^@V_vQYXaEnE4`5pim3kj$1_6 m(t@*Mq7nwP^xWi_?aD~erNz=3 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%0A0zCThSj^MG0rt6)zyaq7S1X1Wr*LcLhQ| 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

?L?2t(n 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

#|X2NFEAE;xky zpQI~o3QCrTjT^)vlM!s{L)hq*hYfEGHdYDPyhA8aIyoQNyx5(g0U#8}AC54lS!^@U29xnvX&7i(86kHo( zrE?u9UaT#UybwKNgwJxGZcrbeq~k3d8SM(#kHCW z!@YIr=-_Z}QGM~@Q6tKqmrBV=KXFi)Unwq|EFNsZ1JY+SsIx%5mG9vhTZXACwjUQRK$Yd9%aqZ*Iq z5*I%deO*z_C3&mj$0>$>9UB~4odM(c>va@oOzJz~q{^b9f5gzE@}TfnL27@^AY90} zmaJW=^}`@Fvh{MS*5#WZ>x-z>0|4!tUe6y!{mix&EU8|~jpN3w@Hec-L@j>Q+d)y? z7l@I8WihKZZxp(Nqlm)SsV3<66Z_qy>`L49+es-wjV95BckIm{{F_E1eZJT!yv95y zUcUzz!=a4t@bvh4MSb4R;^*LET=qO=7KSBjdE<=NFL@A#s2bx#2I*XQ#`K2 zG~Egu)8cIqr*(XqA^TwgB}2M6KGZn|Z9(assYHI^@5S6c_i*xB=8eH=uDuyPC^*uU zk@n7wfIL!GFPofet*k1l&G$Fio8zN5!1*?N^Y8lp8~Xm2(f8jYe4UjcU8u!I41dps z=47X5+{HHR&&@G6A|VN-W+C)X9E2Q_h)^@Gv6C7-QV`Wjj#@=Mf!NhL0GR;VgL(wJ{^ty-_ZK56k+)7B@)oN2*t|ASg#n4QA?Gw zpu1>_LDI6+(T$brd$pS2QnoLSEn&M%`9`jIyL*@`!fbDM2VyiY+(XuDU;F)Ii08Q$ z^gP{R)MQPY4FcY%Z=rcTmI!Kmu{D0AdopZXztfE$>F&?t0%#LT(ai6Es3opUR@5kc z6?R*Unh8h!*R|QdA%UOJmEnXohJEUHy3f6wkn${RLbJmOy&5*I-|5DWbQ?6GhjS)m zI2TW7<>#7^;jo|3C1Ibhg?;LGy3f`VY8yf{IF|_Cn#7{8!KcCo^*d}(c07vFSfTX{ zZ;i9?`j}LrFQ>6HCljaiXasX~1IIX}ao|mpzR|2N)Z{r9;fEnQ(*N9|1-=vNKhikMQme0i~{OMV#i z8`)<010^BX%HnzH_&V3J_dQJv$zHl>F+~SMRQjPyIhdq1^}!)ko;0TGD3V&+b>aXn z@R-a?i_L|{6$iQ7YC`IsLgKKf>%_>F*qcO9C;)z?Gp({zae!=-wO8| zFfHp36L$S;Y~)EwB`)<1X?yHz$(64ZVmU(1?<0PCfStdPZ{6&!EoNu25#_(E+{pzd zW0N}UtOgbI(XsR`H*lsIAa9+DC9>*Vj}}pK@Ukv71;0m)_}U-pJ!^^EM}u^X?y>7I z?CP0BYf(eAd(()mq*;CQ_Ef0ZznW>gjKXTDU*ZTYc&wGa%z4FQP242M4o-n7cMU}9 z_p(&AVZVuwm=1@_u#Q)=FH8*$a^vs5t*IVom0zW@DqT7;jF%TzB6E?A_wDp}*Ln@! zjra)Yn>vm6$2sF|o?7uME9FoVj(7hE#2Y}Ba#p!uUxs%`rE=Q4U&uDL$i2Q7`Rn)B zx#6YAKsoMZBfXTQ3jfA>si=gJ?yoibuLkRA)82N}(yF6Nk!R@WSnFt5+))?VofNs7 z_O_$>QEG#DM(Z;>x`_x&OvpWr-;Da%L4+Re9>}T7EzF}ynC8+6l?B6<8|zgLWh2o3 z-ZaguN8Pd{GQ<*0gbi{pwCd+Y`ia-)dh4g$ts_CU`q{R({cLL0&*sd2t_k~5B5w7w zb#ME5xm7=ZWXHz=Mq_AR!R-kMh=O{mjN$&efum@J2T7CM+BTx1q8tT3D{eOv@uycu zpOR8qUtsbT+N+mDI6jZL<%HQ%*}NGXHx^QMXsU2E2KROqOK9E>iJ#@$4Q&a25?i^m z_&%0OtJu#ah>UlTO5|`1UGv-%*h?A~pGTy!BcN_8f?9^i4G%V4CCp+QUWX!coUq2pTY2qu#dUA1;HQpSud6H3tgAH0u8Xg*a%2V`v> z!7Zda17C^Af}Pi0-G^hK!xv9Y{8N}~u1%X-fD3uh@Ru@t0hh-mnn_mr5n5(7-|0x9 z4C6~gV&BH*!P_+ple?S&Cf9Mj_`9Gm<<6agz5E`z)dOYRq<&E=S%n4qx zR)FfMoh51rs2pZyjz(eh=H&jkl3n10^fQAlr!r_PoWy@}eIn$x(Sxr#GlLz(Xtfz! zgh*@m?eR9f7JVG{#J(#v|rQ^>;4o2KGC8% za%#bi+KAB)X>B29H3y;T-iBV$!cJU8O$wxoZInJ$lpb`&rgB_1iPJ z=`|KnJ0;B`+_GuhZrFg%jtpz#cFu{u_!B2q>bNspE@zPO^8UfMNvOusKxDc?JGsGH z0Ok6HHovJ@mEk*F+{+{T=eU!3v|zh#*Cd&QeEw}$PGrwwxJ7w$I~z~I>2f#T)io{V zeSJNVJxbVp>qv+tZ|v)*h&1YVl`a1U7`HC_Uqxcg-5u-{xk#rsBoH)O7l-}GEUXh+ zVK~h-zBM!txkZTfA_lQGzSjdn3GJDv)23rxmA^Q(wOjz0v-c3utc-;h?5l*}8p}7` zJTfKc#M{)e{A3Hn@FwbW-+kI-F0JL2gid^dsKgs&!h`_aTEI3zCu5rgt7oxnk+17V z!JziSmsu9Y&A3k+ujtNHlr$@3Ae`G|;UI$s3&mN&?`IQs{l0pVZev1lR|W^WYH6i9 zG3K)H5pEum7EF|u7O=}6owO>OJ;?8w_hf|Np^CpUzJ!p+@jPQ(T^8Z$D_=RTf?cCZ)pEjU43+Q@1JT)t8B>EJdqBiyb`{wl?;olS8Be)?K-D#&>f!o)d9W<;~`!bFOE3|D6{ty}Rc4r|FIDP1dv zUYQj!GLR2bRK-IhmLzE@!?yB9ZRPeQk+6>Z3tKx0w@;vIK`Df>IT4aI>;6>2#heJs zZu(;MP@5OIGn$)*DQVA!8IqK^tVDK;celd8d%(c|M8V@8Cmu6(+_HiwK7ULK9*VHE z>CZt5R)wTsdPoZX6q17JAt@kBJV##b4@l%t& zQh^*=`&bPE`7K5T9xsr!#mt~|sG<1Px{+vi8yI_$LTT*g~+eC6M^|CaOUv+$BFLrZu_)==l zn{YwZ!FCPjQIdPQ8x@6fJJ#Ca?gZRE3;?@RZmV)vy@c3#x$de6AC0&{e~!~HJ`(BE zFXKLtQx+8LGORPL&*@N9*qD1Ts1+B(GZxW3Q88M{NhRblyKRyWW=+!l|G}K<-P;aG zpHH|9qgfYY_?bEB0wm&k)P}Yu9Z;ttXh?wJd>086>Fk~|FEi&Uxo2r0Z66gXbX2H! z92ID&*li@wU2E)O}bbd_>rGdnvrkMGFCo}HR&q!DYWHNps4dDSuZd};YZ5Ur zUDIW|(=|o61Y%S@T#l|O=AD+~TJj-0A(zRAWcHLG_bh!XmY1fonDgfVXD$A~02P=0 zQg<3rQ4lCll}CUE}Z%Lk{fVX`>X=L4sOXB0Tm0ks3p(_4Y_kATy}?djz7lem3K z5GA^jxc!ifnr51U?VBTTu(;s%)lcY?-;g~Utw1A!6edsK@C0hiy0dOSZQ6P(4 zIzj6TtJspLS8bYJc^2IMtg z=rhrL(JYd|<+^Qnd14r8o1n2K!@a?+ftTTOw1UFO3P})l;^2TJtA%DhKi(_SDrKvf z)(iglQGjv>fJ3z5u5?lYw=J(`uR`3C-in0r?vhE(1xqlObKjS+*~>jbT%xXpXUW=l zAdz4>CVfwmPfvG#fcSC;k^cCW<1aCg4u&f}KxzRme&I-hR>U`@gQzt{okQJqXfXAA zy{inm-ksU96l~VA4eUK!F?x@cmPI{&jeyTUWGV4IaKb}|?3+yVEBA8R2V^qK(fBY) zH+@jH((%4$hAn5V?Hrb>6mX!iQ(n3MlE0tw2k; zfJCyl$yZ`1aNEu;+Wzco#l+f1sEi||RMFXodq4LWxJXT`eRYZQ%G4_D!+EOuBBtV0 zyaGQyx)hb6k*f*lD*aZA^r0HjY(FA$le4oAVgsxU;JG_TOT;%~NIicL)2_C0_Rkz= zBOiUuZNva+GQK2lkM5s*NbQO}5^u`^hl2#_9V6s0s|Ng*53e%cv`fp22=J6-P{hMf z{2bjm(7>6+UYPg@jjbAT+s0sd>}Ju`zW4`RIg0r{K~x1AwQHhuxw=yakh7hNa&p#W zNb{w7dPPq=bnjqsY-oqHT={j}bv{9OSUX|753M$nrdaLqLB#qN2r07#iO&cBfK3IUYMX3|qY~R8M<4ztzqgi7 z#I6P*O}^4BjkMcP#dE^F^N+zq1;_FN_Re`?rOWY_6%VZ z%kk0_NkYT}k=E&*3H?1?Tfhal9jZS=yX{sK;0T*c9096gxYRW%r->7SZl?uZ@ddfU zdOTtfXz)-G^a_rl?Zw8ugk2z{`pCbQPTqEgACcYi5X2aQsiC9rVMCW$_9bEr5imCgk{B*DZFVP7gs5 z+x(&4(D6)Io1Dl#WTC||;s_}wu|3A2Q^=COcNK1ebGe6NlO7f%f&X(8vXPmU-m|7y zQCTr)ZM3B9_s`JYdto^=sX_P&Z=6~6kUW6UqBBenDKF2II2MWz!jfL3w4-_L-ayeu z1#SgJ+sN1ASZfzszeX}NCRuL28YyCTpvuZhGZ$AOWplB#aGxZs%4um&ir!Hxo3O8n z6Sc)}9}MkYxHS7~V9=Yi^gj^K%1Tie*M5>aTa#n&3O%=_=e$2!? zZrA6|m4z8nm<{9GSjV+Ljz=))v2i>=*c;k(D{<$_Y4awo)UD2@FjmlBjrC@(sFJHA&b+YB#<tZ)K_*o*At);Ojo=YO_WRzKI%GAm=qHi2A>Z3VACU%MnUTc^F%C#)NnM4 znz=K*V+66S%^W^5Ax2*cW~&>iAN7wsTzx#tGl;S2g*GN`6HxKk}A|EA|3x zP(<(*zbAJVBLigQUjR_85i77fG{oH~{f6dFxn@f>~ zKOIqH2k9bdpOwfcaGOR}+Hph~d3&%!pO8d)IR>#uv?uVB{s^^N9*k-ZCTg4vU%?*Q z1j=|qI0|}kaiPRTb+azb{^DA1Auu9ac)=xpd#VYHeS&0|csDLMi-I^)R{R!Yd+(3X zw=MUH9!M(3LsjrTkV+uOeL|)Gh9V)2S|$$TvFrUOFb3%126^v^Q!>0K^xfZw&J*!K zh%*MJ_VH=NyMm^*4}+!$nnUu>g094+{dX+Ax|5)VIC8b_-#C|+xNp{D&|G+9&>7?J zo`uH|+OP@`f%J4S|0Vsp1rL+^nSnBDc6P!X>Cw0$@u_rVgybt56Q?y}fvu1k@xoRxN zeBA2-R)(F-F@!Vrmlma2q21B(5v17!arL(4W!COd!$b}ZM{wfAbqH2Y)NktINjcf< zxk#s^nd^6DdS#B>%EwRG$Dr}@bgO@>f;G_`ehFSagKy3rs!F@M3r7&ewUC&u3&HC4 zG@voe@S6ry1b(=tlWA7nbwt-LA|*7gMlz2_15B7NkZu9@@TT`x2=31aZ0$jITPDa1 zA2%`UWa`%*p+-ko+A|*yLh$JZMT9@Xy)YhaPytOh!}r%M}E zkKcn3^c2{i_-td9cD0csdto+OVQQ4sEvKA|2X85NT(a5u75&1_8 zlm}Os_ToFpH{p$f=bR|}U>fCB%zoQMIN;i9w6tT;5uhSD35T3_J7cVm-6U?pyG~Z* z!PC3c0|>O2*Nl>qE!jd8c*Ih~jt+Jux^#RkgX^r2t`e*FbJq|A9Kg60;~^nLX@=gc zQXIP5r!-*AL0~JDwgF&lHSbi=`g_NS*>i5WMkmfRmPAez%>{?Jo22>?f}p9!KpClD zN=!W4DcdxevKK}Uj2fv6tx{ykQsizSCrFl0#_pP{wB{NNFq_$b0t=HR82YC&c$0?r zu~9X)Br`ark49T~e3c!EW_CcLUpl_30Q-}xOJUeAz~s6sTJI@ndx4j`7OeB&s*1ox zg)VLx?-RdOIEL2auJu$g-OFN;#H%A(d0fuOM1jTf z3uMb5H?2SsMX8yJaAO2JE@-j>h5vxrnbLhi1TZpK^^u366tv{H6m`gSPk=8I)!ZlU z$n-wQ^tFh+=))giF?>zR{Z42C|U|wJsg$W1Ad)0{&C^>XQO4_>+v6x(fS=)Vu>MmDfFs7ibduN{dQi%Sd?(!?JfWD_;7a+> zemG(pvMely*>PJ0iIF#oy&O&lXUwAK?-MXRwH4AqUIzSNaEAB?PK2Xd(BOA+N@}r^ z?8B7YAC^@65+#6L;Y%I}OQ0h9rnG_(C6#I=DZ(agVZzN9-POMJ;=VaZ9p zM9FJz^(BvoCBO3}Jt-mMj7I%LSaPB-*@u#weaVwyNtG|@Mag1c@>Ezd)R*+8WRWj< zIxIQCm+VUkuD9xEO;|F-m+VK$jlN`USn^w6vcK8%l0U zBrFD*-rgfTlaq88lBWbks}Y-S?SPBfa89I8j)&J>u5+VtmrF2s?SYj;A5qNMKQ+~+ zi+_A0$r+pA`UE6QOxOnunn0%8S^S;I-;0B?-a&9tP_}OnTo{z?7X%jsW&0yw6xC5< z+#tg7cPF5Wol4^NjtRT7I6raBhPe1%W`gVgg+Y&>DyBmeE+sBs<;#x^zE({}#Ma+G zM!63q6NXfX&tUJhTk;{S!6LY2=n+g}jSJ@b-4(YL7lbFOb_-(mb1r=-vS!e4bVjI% zxLARpEIwOSaXRPKYtghVltn!4UqtjoS^}cn67jx=V&z=+JEZ7Xeew(Vnw_zU{~}Fw zq?$(miAp%==dLFYl`^7j#U5X2TM^IL7Zkt2j2S7~~^7*^%@&(W;!w?F%8XxK>_=ns~B>aJs-Sy1N;vheb$J79(YX*O4{@JJfvzP{QMep$TB850pjX`x4=VT#o9bKwd>wua z_6EgnCoU_JbBDT`FGWs=V|Q5Ax>BL9S+y zM50<|gIqRkP;e9;?HcB7B#-%Xj`Q|toGatiB$|tlb~dsh=$Ld}s)7^=PDUz0YPXu7 z=t&_wI(w6f6Y}!%3i7_ozxnz3yE;h)m7lL){CDz6zpWlzJz>De!NX4)a{S=mj;O8~ zFuHn3ULFPgt4FI&UbKY!h#d7XmwsMN*IIu~6j2#cl_uqsF6!q{HQTD60o7wh*9;kO zIKKxrJeCMbm4*PD^3Ew&V@Wa1#Uf;*SC*2>bEBhh{iQ! zMD3 zpxa8ECV%d(D1*|>A67vTH*PDrlF{3_S#OtzZ?7uzikttztpc3Nwt<62!9is28BOM) zpBNDCFHU?X-}d*PWx|>3R*;Cgyd8Slm22VN>w|7r1)Z)$(@oF}mWo9QI?a!NvT{ME zd7iWC<9cDl-hOP9{LlVz0mFV?!+s4SD*7)WJc7gNUG0=>@-!he@;rVQxTqY`qTBOi zc(9G%?-#x=R7?q!BFPv088@!bFRZ|EQmWliR3YYPPNkz%sqh$gLgI*gbU*uB)!z=( zBe#@CyJ1kv3fJ9U|6Wn&y7T%d#g6Ua8HBofQFGhKdg_3YWNtS4t$N$cTN}Q6GS3=W zjL3?QQ(neEy1YikWdv0DtcriFiZjes0dBcp;)t%?=bjK$6t3j&keor;QeQ~r15%`% zCM{Xe_{Qa$U|?@PMP7WghOAxvRD1N2FygTnZ5Xi$RWOFfX=VVC&?gs1t&A38BVm zC`GwLIo(Xe!B-z^xYbZ*SUE!(>4#EoZ4DQ2%0Kr|WRkmk=)WJ;*e&*-P0BKZ%TPa< z{cJEpG?@J~n9qm)2A%slghO(Dt&!gdI(>7Y^GaOnQ@9nl2?T zP=77z?>yh%yRG^=mGf|^BEAJAj3ZmJJ0)!JR0SUX$ddO+8UEoI8}Qkw+yP&lZs1$i zz^jq+}bpI4?(aFWqd!kVS*pRsp3Hz!=(y0^h%8_!sQ)n{UvjZHS_HAcCqvp zicyebxnH_3V@Pp()CMj;;m06U7-lQkKyG2Jod#C=27Vla=#H>~ zRchc?HSo9^xWzZ{WM%_KrCzWG+Fhu(D26b75R{@_y2XZgPT0eH>fsFauuDCh?tA#S zRS&0dNn!-6?Y(fG6=&@CcL;$f7@nuJxNlU`{zcN4zFuuGoK=zm!*d0KE7A>wFbo@* zrv{!?1J|j6^}d0HnGF~SZjJ`n#$I?`J*@IQuont{Y@6XKbZgp=@n%@74jOz1O>|%u z7cm-c;(M^Y6zlF%Dew}G}|O%XX{5si&U3+OsF z*t*;`(ZlUtWxc&)6w_WMZSw7-3~rBf%7B|qyU98$6za^d2IhthY*qu8s)1M4z--^Z zwpIeEANVt&T^(>HRi-MIwCZ-RpaKkMr%T4O{}sCg+F2%e)$*6 zsuKKpD#Xf4=-&z9!GVG|8V#gK}`Yio8pZ;wcwwp$|lo^^dpkT^4U z=>6Ydt6F2e79P?U#+h2tv=YQ)iu6VOt^fjw_2<7 z!&YC=*y`2F7PWGPZ{_7yt-MYvKTOTtEeLgPvq-Z&ev+wfjOI`p&-cy4d_yE+WjBB`pZz2+A>4HBZI4}2T%BtrdCru_@tUIVNB9-e_>z`8$6_X#OS=ds_GHL zj;|UXYRR<(dQ2967^XUSD|uv5kTee{saww*Z?ycGGfed8xA%7DycnwoHYD| zq2u+O1_-kpIk*Nm*~F+bWSI4?DGnVQj^npuPCEGnuvkAez@fv2{4N4)SU=rjCk8e2 z#KA)*s5ax$90%8ou==GLfMY@|#n_?MHdNpnPJpM8Lx=uh@NZ8x_yUF@BSxO&Z#npJ z!iX`H96yw)*u@7;h97q3Dd*xtuRL7KGA@{~(&Zupv(>XYA)ogq;U!Vtk(Q9~n+OY) z;L=qYOZNXIGEljz#eYPvKE=~2;68BU=(?cS4^Xbls~O|Mvk7qA0UNdplo|LIE@n}? zKTYs53JE4vMc%4A)Dhy7i;x^&oB*&~?Zp&x|c=!^5 zRI@ig@?bV^s;6XlxoAogncZpxuoLQVY~EKMIW_fmy?d>oBR3`v4XZmb#s774wP{|S z0240a#QZs?S(me)JlyfNvHGgpGcInkE6!HV@k zzRN=QbvED6I0j=uMqr3us$AxNCAa?y?Wb>0{FAtNf7f5d|LTjeg z1Yqtku}Xsh0yuO%NA6cebYB3a=#I)*P<&zvF*-s}@Y8Z^chZN43v9jI4T;8rQb^lT z3VEy-KP7J;72Goa+=K8<*nQg&erIad-N2H*0EWT>bCZLp%A7xG**6Y`hp zk2_GYcOP1YrWE8-C^-@`x)Oy4C~~I~pGj3VO=4-5;hMlQy_=}x&A*dq+8qpDoX6SuMKM-l?6zVG{~^^1)+cD++pX<8o^eJFBIpzdNsEjS7;Kkhr@SXVfJ{ z3TNW}KvG55hwwWLFerH$hv{#-e^hXVbH=Qq9?a?Hj{WWJj~n=1;#QNi06hm`x?riG z?BxZOyzlB}cc{Q`swPld{97Azt!1cxAM|_&#!zEy;NFgm=FS=_pgomp_^}$s&_~bq zh%tZ13dO7__f0PvuP(c~r#cLTJ@Q#4Tk;=JIn^|ZAS|GApO?`()ijIA%u$QY6oCe3 z>)Nq3EP`%7vluF9q=D^29l?(~$gRafUS49Bi7!_pq4*+ybsrZWdrs9~GlA5soobd15@H=;( zuW?6Q;|kSqtE!<8OQmdmv|4U1gi(1F48=Xft;NEut82hhr56s><}k7rqN7(e7X{r< zwAmid>MrpPOivMqz|7F&DJu(}-3*T6+S+wa{GGStNbmhetimzs*X>)mr@fk!7*R63 zL20}#8n}-v)uvUd^`~)d0P_~hk@3lKRf?pvgyk+<9`u+V^nS=T&NUP2*^=E{N0#6+ zBH4g`P+*Yh8yN9))#m%p!T~sZHIo0c4gAWp-NwdazmcS*r6zG~KA*Z-9Th?-+=35` z?N7VffrJ9f-hf|o*OH*LD-p^uZ9B$q#+Kdf#b#m#og<^VCERPX3GVI4_EC?HcPOc>~#Rw4a^F8;Wnfj$qNsYZv(mkW|bh?#Ds(ASE~h!oG&?VEHA7a&Fl{d zXWv1T=CYCoctQmvM&I<~K0_$u`e}y%A{|riDy(>B%rALa!Hx*utw)IHEqGiv4oRh# zs;%QnKlx){V_#wduwyWQ4g2a5@hr<76mQPUP(Ob+Rrste{@>K7AvcguHc##^DU83B zevvjOurhbwRmyor>53HdyO6-UFb`$H{AV19Fqu4xIsdduJnrb`r2AWDqL*OJPfbia znmPR~p(%OSkoB(K-cg!SZ*SlASI6ayk{vWpG2&dgwxt3wof!0c$7b3mHzax((70RtY}lbLgM)b_kr{ZE)TBt9way|#f`2f z@HheXL0B=S3LU#k$M$_r4&7x{jgL7 zI$(xUJjlBfg@fO`gorDA*iI54X>l{2#s@0r!{AD=st;QzI!Gw(NKf}Z;SD;nj~A2p z2q~Yd!`5et%$ob-8De|d*Mt>^$BRO3xpytxS4E~uqK=(hOi0Or1$|iT%a9sHw_eL* z@qf)@(HPzq_YXzH1{||5lYsa!0wSW|0$sL0H>KIb*VDx!jH2fg>yF~B1Q+pQCkQUF z(-MG-t$T@6&i!eLGlG`?=3bd}ESrM;4)L!*$#QoS5t2FCx%0=S4|W>sB@?K59hM+H zCDgJ6HtI~77e;r-G(Ye#6oX;-$!ntALOx+XHSFef57^&-_SzPfO2|6DAS{P${0}L z-i302D>I=SI@CNa0waA$FKw&K0+{F4iOtL!ELfipjanoK*a=r;qsZ+C<^5O(T-9jn zh#S){Knj4DNN8Iwq*xe40T>Xqv88?Q`sN9v5bA? z?%e{=rVrjH?~X&d%Ol7-p`UD9U9X(h>j3s&NrY9PE4pzPfVS+Rst`LBSESh8tLRM6 zkXz4au94gfHN#I>1jT!a3p2C~#P-PizK>+^KPu4ads8cUsPqf)m=r{!=^-q1>IY&X zqzi?`O|a@{iJ_|i4Jq9ijz2ktWoj*>?`#bROH#p-AgPCBq(ZyQ9m!evO=cFpY_ON# z$xwF<|UzCvp@enFSq5s9LUSp(l4O{>i!srq|6$_?nOrTamRx9uT1Ta zons|`?dsuXEVI$pG4p8jS^UL#t%JXK@(H!ipq`DU_&ignFU4m_4rk7wOH8pW)enCGi$bpHk z6Q1eUv3?tQhD^?$k-P-KVZJ1*M+$kH5ECI@0(Zq#Luaowfgj$>4%iPxxN%l(l67P>V2cnsV3RuZHV zCj9Yy<*n}JYE$~K%zdJMZlU)OX$8TuN3hRkW3S1t;qO5HR_d=-eLA8nu9rTa>x_I5 z{(YXA_vzeO_DWW{UDPY%7dHTGQn^AC1f}ptM$p|1wv6ESmVxxl62;vpaci*T?0z9s zRJEsL3aBQaLJBV3<-DK_VgHwUJ4m+=+w(I1PSPaM6`eKe(BP(NKW*+ob`(efEu&iALT(jY!k0a>cepXpPr z?Wt3dlunVXcZyz9r#4Z!9++^CpbdI9ifHqIj(62XXusifq5avQcQ_^W-=iVzv{h)$gv?G zOxePCLg~CEl+FRrXG-T)Mj+#hXS*`4M}@I3=SJ9p&2XE7jBDRPOF05l(yecJ)dL+x z-~zC{WiuHA_HI0l_DL0jGU1&wLkaJkdCIzT*5xwqbh!*QCiIO!c{|amVONjnN^%+T z5GlD&wN@$|>HQ2(8?$wt2UKUd>V!AiJjJbBd!gr7JkTY?R%KQx*OF2$qyQwC$;CcI zi=4rtr$ugcF|9mHKc6&EWNZZb!IHXL7&oe{0W_@i~j}(Byh|hf|QS^O+Mj zi6$`JfFo47`zFngL(t%;93MLOKmuYKN~Ih&VQ1&4bvl+9#oh!xspEOM1jGypj9{eD zMTBrr)phZ~Nr$1j_yH7ha)rCcHR~_mK+v8;M{R1b7+y`l3*e;Obn?S9-#!pM-4lkV zsM}+h8R2(JU_k=TW5r@g#qQG@_UW^eLpiWMEJI)K3)yTGYNuc4>Wvs)M{Fi7!bg+Y z*2_>EGpf~Ms!LGsLoKfBq%GOqEs!(EEt4VcPbihe&6A<4PwHv$27}WehHJ50AB2=~po(`h8KECMazoB9=<)2wjvy zHGZ?=YZBg@7}Cn_tHQ2KgftN)?w=Uedd%dh$0?;V<5Q$|+cjGvO;HTo?dTZ$q;T-Y zx|BSow^J( z&@F$fwRyAE+U)RaL;OXSCOk}}S4Kz(Ny=Cmo=(ik ze>oUq*$h%7*%p2h)f5eD3pX&S@U|j7soihkaF+^E48#2K*`t_IgPhG@=H`rHGAjsc zz)o8QAuZ-!pS{;I$uN`qR6>(sXW+Ju@u=?}ho$)jJw?vO*|@>RutD3Lj~6Mp7`Xxb z)_n`DDtlJan;9{V!FGtK^@ z*eBuGI7zp*ZgBx9_~azC00#-O&45BO+O9msGr4MtUPBFE&X?HpeYZj($9UuJC%T*T ztE0i2mB!!DiGJPGsCNIA!;@mg3PL&ghHU@bW!k&@}Sc2eN?n3h9 z=qCAgjs$^w2lB5q{D2%qwqOJ{_K|zyJ#}tiakDN0@wQI|!AXwf_dx62)Hc}_vS|k} zp=U=SH-|_l4rvmI(U3I$e{P2Pg{W`Co-sq#{->mjAcX4r$ubmjpK|cljoqnmS61ls z0&Y`_+)Uz^6rae$TTAgn2N$HGotC!y29;^yy=jFa_r>jF;hydj{DjBN;wg&K=+KZ6A3*C)~7 z)`^^ib9x>W^-PoVhjB?0_BHY>6P5pv9dl7`ZbE@#KIVDW2m7x%v&=_3_iRKViR*|C#Y4(mF@z3ae z9-26i#~S^O>O#R56WF{1)Q@P%@RGSYlx&6q!n~%V?%<5>K800w;5L1_&bJ>zEFouC zNw|Ay@+x0X3)HHfBpXQPJ*2S1Hv29JSk$YKy_;(hvfoMGy>Q%;(Yv`fH17KpVT0iZ z{c{wHtC?_ds_+rfRPw@klKNpD_r8T#NZ1h3>2pYC^)~p~&~PAK~J8|1*HSeqysG_Hrv4{TdVdTB>j{yhW5Ak@;#T z>K~q&J}+Yq1w7-wdv%6Fv-hSkw>zd8cZ-4Qc}&de|0f-+K&Ztv!bULR?LhjEa`*C7 zP;((Es5wzYunun?J*;)s1jW~nQWdSL@KUEt@a6(^N@x>1V;upl$`Ao+saxi58_kDr z;1>aDhm@JPSmM)LZ=XQ6P>$B9@KcQ9k7%3&F8$w=c5uf8Sq!=NKuRIuE2e}fahD0T zW*{+yRu~PT5k{Ri!mz=8LQ;^w_|WB;g_=yG;WL;W69#!u+Cd^T1xVwqS*dWy zYFnWE^FbIAIURGgezF%I=>9aJO3G|dUK_72q9DLA6sW9_*T#w5VuLd1+OW8v!m zHZFT2R$1k8?mbmd>HLt^h_thDLC0cudH%rv;BJ+xFNkuB7|nScctQ>!zM!2W)!AR# z*3sr72SQME)t85ae@y0UN2Xj|Oi;3Rr0k5csGCk{U&W3b7<`WllOl!TJbMbu2ff3N zGNg8ANHO1RG?%S(X|gKkexr?9uq{PbtU4{df?K+gYbjCoj>JHb-%c(+drzV@mOtJH0*QR2fqYv$gGRitvkU&an4*ShWWW7V%!G z9>jYQHMdUy{bqqS;=JG@B{Am>QLLtYjI`5z%<4i3O^V1bV?N5e@doDcA^DOR(Z}6C zmO*dSKUbqY{d0?gRoZA*7O_d(nUk}H1zjwcxH}{)Y)4`al|PNhRT7#+bJvfO4DO{S zld#dUdm+peM~~=AWZ5`fvizBK?UL*JxF&9PH7yfvam&y^1aAbTjbr;W>q`DMYR_K< z0Qw}3?81D{(8&n-JzgZq2s+6Cr}@OrC~3CimJCOcr`P(GW%|iCy9j0cBA(ti12joO$`&$(h)ZG4e5q4%}Ih_zLJgikL}3)HcyX;Tyoi(r-eHa3E-f>r_toD{7oW4H)TbNv3$o1XiXc z39mSBLX%Xe+wD7brCGx`{9j;kd0gc2# z<%V`4aCg&kZ})&&eun3oN-4_cdZ3T>DZL+OSl!32O;XxAC zGRtW8OIsk>*FC6#zsSJnG4L13J=m43hFE$2lHJ7m->wW9SZ8Lh{{|BWR}mN$P%Rg_ zJTRe#2aZm%bc-v;8Um}vB~{_e+O+pis6_{|f~oXKCXVR}fON8VUHdb9+4HiOwxEMx zHsojoD{rDB%GV(L2n)|HuCsi==z3ldWmsF#3Jm%i5!NiJjg{x)78&cofSk>H*t# zo2P;$9Eu~n=}UTd-YjRw9)N1c>NJP5j>w?kc7S_D?XFb7zWc4#mNsj>s#+_+LZJH) zix7kV%@F)3-qCq^@UPPHx|iB$Xg~M58oFH)>cdv+MJ$6#j)RF^B_rnBG>)}4jy2)u z(Tw(U4XV+=jDXRjR%b&SUF_p_sEeiQVl`cqU}9$M5iJlOKBhf#YX)65;J&R-ZcURZ zEGPe47^@T}vMDI67xuSrRDhJ=4GuPNtnN&Z2t&yDR>bSaP7&>$FNnS%ihVVE3F^Jk zuTHZteuT-`}ilThG$6%ePp6_h;cIIy-%Lg}!UncXNDCTlIWd zHmJ+o4As3%qk2Q_UYJ`xQ{@+`tvB`k1tN7jv}iMPYhI|DGr>tn$=rZ_hEW&0Y13p= z_kGAN$&oBSvJ+cr%DsqX3VYv_EJzZMm`}*(*80iFX+L)=Zp69v4YeJB^C#osjMrf% zvX|VeULPa%NZES|@@dF9BjsOvq8@{aZD9VJguL!BYYBN6GGr;bgpS?aRa&moAax%n z>-cNev!4htYk5whA?lE;<~f}(y(CIG4moiS`IK3))@zg@1bHi#Y#}Ix|0i%fm)ITe zBr5qU*EKhz0|R`2JobEOmpVYL-IadGZSYB}BGDe!NyLcZ1@nDJiC)g{0CK-QUQR&gb`Vp!tPP+QxtrBIA5f{1 zzvlHa)9TM^qkfrNs`@*|V?8CcrZ-WLKqxWV&IeF{D?4a9XSVtM{rZ06c(Yu+s)L`- z^3Y6mmC80SRoYl+W56w<)k2rK$5pRMle|Hbd}h2+kp=|L^8T zH}{mjSfej)>Hx=nnw6oC#rpb5^1Fp%yU?i2tySG8$J6nxHimcG9K$-*dW?C%ua;<6 zt_IXv`lagNQ9q1jLW4&#Ixt~DdMtXsUA?c$D74-;sNGe-fLS!E#)IP}wz=&#mKAM| z<@_;xbFpUkIuMn=*&BBC*ayNRok|u`XQ{yHq$OO0Z7DCx=mbrFyVUpT^!;6Kk%&}K z_A6n>!A&K}<+Ir&|nW%A3d;beru z?Ffav+-%t>odbUI8Gqxo5)iw&2L-JcSp`PCKz%&Nh{GZ7@3wQ<(o;ixogu=SFV=Ew z7xkQ_r)}xhwDSA7MzyvL*zXU6h(>u)h{n4a<^JwA(SSD?C7-56d z1lZQfDl(ElR6A`I>7fTpY{R6=d!4td?FacE(N0(fv~3N1{q*_DbF6m1w{NO&iknve zK$ZbT5;)!s?(LiC+ePBaT{O&gySGC#(rL!x#h7M=pz)nxf&bQH+AE)pX@5l|4A$^& z){rjwixqa}gh1j)MPQb;)o)L13pMjw{8o6v_UigJ_G&lxju!i7=%<}6?j&#*zGQCR z#Kd1K2nw+>0)?j08)=8kd+21{cGkEhSg8P_$JlqBkEIP6N5v-Lor15sGed*gQ*;fq z2!r2NA#sjCzAC5)x{t<)Kj?Bawo$KQ<>zg%!f)&f_1f^ZYN^@acXK;y*fR}aD6-5m z9V!@Lu{&c*qB5To<0La=e2Gz&&Sb>O3q=+u4Y_hJhTMtsW<18RpD{+U23?Q?jSc0p z1lz}bq(xlFNZCKvDim18J)Ym>yEK>USpX&h11qR-qokSZ?4HMQGgGthiB@U>+ZWpM zLI?Qm)fr3A7iI2L(cPyt;J}&fM{27Bq12!cpJHv zNC^6$ZX&0UUzKJeXRC=}$6E!kfLF%>rc2R0cE*b=)}(+IC2pmb@|AH4ZBs6_m5@bx zbPy{0VqmZCb3FUmE&faN{X&=W5cksyTA;X@wty^eId}X1;B{=JS??V`uq|u8o-*s= zYmB_GOZ_k*RrnkD1MJV9L39+Je3 zF){AN4rc$?)6E;tetAKehM~Cl(rTYBp=UWg*e-47gt>cSgM_P*JvPo{CPMol#p03> zNyElgB@P-=*qm@9(5fsbY<8#SY;kWT@wmjbCVV8Qb*=8-Gw82hGBY}VmZ|haOo!4) zq)ZIp5cKpo2s0{4_!#{Csd4Fx6AeTvb;hw+1AcOxSt#)}nE4TQvLV@y2OKtSQl@!r zNO9G^l-bigrD3lb*Iy&zuXm=rz18B}!QzDH#aAbSJK1DW*RSZ!OlPix-*QDrcpw*` z5?rm2z4gGjMrxUc{&hK*JexLm0(7BC6XU))JnUy5J&W9%ga#{4{9FgW1yYaQHxAnR zq(HQIT;dqG^GY@Dw)wWR4wgk^9AOLd1(hoK+oFxUxJW0r4<@x{oaJt@n~*cubX>M?JgR(XBv4s^X;%!i77$e2?K_h)byeTy84^!mox0;ozv29IW!eQ z&u>>Qglhv<6Ikl=n~He*^w{`Wnmhtp(cW6A@$0}NwTWB>tZetC4xyMzn ziF%x7W~(=Mej97Bk6WR7uWEjmDxlpfx^KL!2+(XDo8I5_ypOw6HMfqX=n89ZMw{*3 zqgq?kUcK7etoE)e(vjvq>=^E;;-3|46)!n7KX9z4G2`p#Y$gXU&#~W1tL$(miXJ?^_4{po& z$ic*9tac?2ZM$8zL4KCTdQX~HNy8zWKXY7cEF-vgb92?<>7ojM5_O+Gu3flyb62YF zbO^Hzt}5txAlfv3f@+^|w8RpvjXCY(=IOIqwtL7n{DNPow=>o8Tk5#3{f^7rMXFn; zx-BAI=fRHpf@AQ8!um?{f8=IBmkpc840QFWRr(t_B!dx)@M<@&-B%TAW_AX>)oXW- zTAvMP4%;-Q@IW|~-7tl|?hM`E)fr7 zB8M+pt%uvJRjXR_NL3N?_-<|y@s>KfC)=pq&FvCtzn;Foho((y)iBPkW=|;+t2<>} zt&UW;YR^6fjiSjV+Cr%KR-#Fn!xpL%Cm$wB9vtLi%hq}+2i z*=!#t#*J0zokczd^@Y$mj_X7*(+(*`pCzBwRqkF08gRHzkXo4msie?hn4KmO7giW? z-tL(~yw@0bC?w=o$)c%UFnj>w_hSXIqNt9)jS{}@GSc|!BuXS62?4kd?&&TmV5{BZ z$>+l|6-m~@FZ+A_Gd+4$cb!z-D5S%&NF&X(%G?g2^U|@pOn_h!Y9iA~`^h5EWbs(V z(4w%lXYW&%-OW~X%U|M(N^pxD@HgZkSUiV!AbE(B?t8UFqeh*A!i3*$cC}yhOBMY? zFJ3_%(-)+>!h#;)=0zYY_Y46;6wu19x1SLQxgi4q^crTt^4!2?0+ZI*f~^g4z`v1f z6u!w?@>2JKzPyojgHEh1!bGDpadN@2M@_~=sBGJ(pthhh`{t%eIMfk-4N2Ujq6+k0 zQgbkhy9?z(#bxr{L{v0W9~=>Wi>xUJ1dCwuDc84Ovd=;2OrR4)>`V|kO%lnBO{N^; z8IB1sBW8HM0tD)d&?%uobAyIsyB*GrPnW`f!{&vYMC3SD>Lf}+V_|5|I+3*NTj6cj zD1ORwMD4d24o@eE;ZRCkebivm-t|Zx#^x?;aC4w=@Y8KbGI^+<2^EPA^7cZ!Gx&M& zI5{UWvRT?6+s3xg7@}gcW;TbaUq@lWS?5TUfR~R`pjoKwM)QQc5?5f>cT=8h6^e=6 z#(~d5;AKQM+JlHsQ7{R3+)nhxKKNhbR~L3@ z`W+1w5GlxLNcAl+Svq?3p2XG?MOu)6^eHxA7~oAQ4hdD{e2BNM?pH1Lv!4RKmAd~x z+WUX~qq?&%_6c zU2!SqjD6e(Q$Up^1WQcnkTt8s3kYXTX<|xDQIVOfL{8d@z<27HMhl?w3qsgG{FTNk zvM`rtV}Hk7xJ_f2H`p+33XSP0FsNNPZ51)4IR&->xV83CUh1b2U-x0|z*CB^lM#oJ zo&1GkUuBJNrp9*-~Oh% zkE0-pJQuou@{tqo%%|e)sfsZKpE*?2@8@w%KD%a`E<6mu5krLEQ5Z3O;r@lW{@el+ zYV%M(Zt5_+xQTijx221KQuhmWz{_xx_#knc#nlNVPYvj?5(W_Fwmu>@@pfp4wgVbH z_iDHuW|z_6!r@F5%}yT5|3u&J1u3_>12b~BiGRAKrR=v)M<@uttL<#uDR57X^lG}Z z@(~3TBB`J!A%`>s7JMobSvajlH!t_+(JdyRg^OFY3YqzI#30|QcUdR7!AOR4J;5!r zU=|1Pi@eBDz>h0zarl$l1K@zWq@%ms2>aZNNc^@+^sne+YLHNZf@>W4jf|1vWA30@ zAqg=PS$f5FBeZDJLW;JEC<@?qhsh9tJ&hyUQHywx&L5Qn84T;aT>9$=rdILL#9yfB zBMNJ@Y--~F4jQU}1e+B#b?4L;zGv0X$%mmQ634>4cYwzs;KTSev9z#&IBMi+ zJq96!2(hlQ;1D)WEm85hvKO9`3)?y(doi2_#RywV1T6r#P+{JhrY4TgSKi2*2#RCL zW#dL~wrKF=;~wKvFvkUoBd^|Qu(FX2?8iJ30ny;Q}gZ6mMeWkd4KZGx!S=p$|$t_*qfX z`MEi9NV?|-`=u1NyD8WYrCNQkf0eHhe|jPFCdc5hL8=<66z3p}%U__p2Tkmo^vO5o z=I4=F>S%+`>ZH`G`Mk>G|NJkUO6*HX{uX8n98f)YoMjD+(oiwNFdDc^J(q5fx_T0*O;KHW6V^*$g;jBGs`-8}eAv`9!GTJrXcsjT}J_ zADEK(W`3dzKr4tpeaSurvwzQ(;k0JO;o6cHqJKfu>rN_Fq$Ky8IgMOXG+9g3(+W3^ z4SnV`0^|h;x)1qE#uNR&rzN_N{9mn?h}l*TuAVSp$cXBp1IVd3Kp>A^4nFzh5ku_l zkP#=JJk;`^jc%iK?9d_c+qj{OB!E$SahaARdKq`p`ptloCn(ToCsT1mY$hy%i8eXYL8PEy#a zI83Y8>b){Hwt8tfDI@d-(ZeKl?Vx-*4<0y@nP5)!(;4%Wh0kYjS~{Dt}ri;wW>^cWMUW!$+JDrN0|JwB~rS3Wf#gEQEBN&cv5a4@myK7#bwUV{e6xXC~q!G2Y-I zL&jKdmN(Cm{*ffFI)d)7!NbP@;R(l|P(8v5X*V~$o?iLI0hZxYd8-tNUDA0Dc?_%R zWt5GOv8U4%QjnYCj{%PU!$~8LANRYHd`>{d88*YGQ4U2O!;FO#pD=Vt2*9p@<+&&~RRZIx7l+pby;lU? zRzi7yjy?*(Y5uSZv{&$E<)+fxI5(BOT^_!Ta#KY#_bY7`ElhpHT(UbP&Vz%pzdH=c zYw&&kHbLJP$i7SdUvfSrICHZX!;N zJ~vSZ1T)J`q!Q&OQca(ms6Nb1ls%>jhMUa`zx!R_emlZJ*HoXN_xhmQRY9jKQMyjG zSfPM4=rlk63EYEDVOp%hsAbPc2io!K%&AQ6eDX0A;u7Pw5yB%y0_`)WAe^2*P3mlW zTj6CFwJ=)UXR+c|?OJqDlni`KIxsmP70W=;e!oMEFy8|}Zrww1G{z5LyUEnAyvX?( zZ`ZV0_Z~oWR4N>K+`@}i_bxx5oVPdITShQebM%>^`V_EoT`O59Zk_&6AJzEaNNTi` zNQnkc{vO3q8YLa8pUqQ9%3f|eDY`m=3=P;@7qRrW;G0k^#X?XrfC@$Ec{y>l5JeH( z+sO71!h8zMB-n201cu=x&|srkSl#GnQACG#s>3-1eC-tUN^wyFE*9Zgw0vCC5m<2L zVXr+|N8!$#^&ARV4e7?Is07cSYW7+mBX1w#X6LtX#wXr3*K0~%wN4&mN(p^m~ zRXbg1%Jm~V{6JP%EBIOdA~_=_1c^5o*oF<)~OV}6h@p+JJLYMRs8>u!taXXYu9iMZ) zU6fMTyJMMuF}Ec;0r>c{2Wk@uS9`hFrTTl4u=S8Mt=Ayl_HZvK@Z!f*k%mF8ik+x8C_T1qs`5ru z<)(aj4?Q%s(JGdNE2)_g7B0`d8`Znk>OB$GE6%8AYj#e#3?o_1r^)3QxK|X4x{(Zr z>~Mk>WBmfF>Z+qSei_VVS?9t!f0&A4xPlgdRLZ?M+#sb?VS527@rEmgqusSZs84q> znqTX3kn0ayx(9Q&)*w_MbOk%L0cQZzX7>tX+efDC&ySEL4rzvx12kCD2Pnyr&Q<(awFxK^W09!VbjZK=tQIGDB|*2!mZj##1zO?xs$>7r%qiv4bFv zp3^B0XPKKds@b^WqaADQ_tF{}mG^SD>-JL%c=05r@jS>0Q8571g;oZqzZ0&VgO^!C&}U!X01fxgr3 z@-%A{_>n1o1Z$gx0sJro$Xs+5@ntcD%O_hHr>)qNhO2r1f9Gmm8?I(!xS9`!t9fmE ztEmjtUwAbQ_a9Oy=UJ0$kZ>y`d9f|dlmfhc$=8>$?=-Qddz@?H=n;p`Z-c?VptK&dvK>7wf$_Wa2q zXHk_3af~(ALm$#r&h&k&j!)+Be5V9WIr8E z)0QNy_qgXOc3VB4+<-rt4ogE3zYkf@p2GnS=wG8WXaqfL5mCK05*1^BFNHop3 zZJ6EB3TA7N4$Gw&PZrMg0r~~b1C9j+*8@%o8HGoKN)>KhfuyM-clRXG`;(w}*K@(f z5eT8Iqj0f{TRV>R*?=!nc=*xVw$45`*x3g@*XG&hy727tY}VQ5+R>7|{?VU(biRYC zERqAqQ$ztoYGxz0a~7g5>}oOL{W~HrHq_Mf;+t-rQr$i_O38xVQo@C6YB!9oiqC+u zJKN5|i;mo*Q<&}cajW3w?D{K}L~G*|J4w8)E9>*8A!bZReAJ2UL0NEea?p;4w+Umf z#{Y%(4?z%cp|lj^>^X2UNCYXJldBUQC7H%W>pA(9NRZl`M|e(+V`WOodP?1WV=8kfGm_2~B>GFS_tl z5qJF-U2~zAa`U*PDaLFCQLCfq;8~+A_~-jBj4l;_aXP0M`{G(@Zk_ zfI3CNp(*zknZ63Ra=kIBsEReZ3pj=m--OX;k+O2#4As)HZHG?H8>iHI8LC}KGsX84 z6*uTmtYHH7T?K&s^hrY4HlaQ*$Pd0D_Y5UeJ!=w{mBA0&N~oGa5V`;SVgwOpluZyj zYHhAj^sDCyU8$z^$I7 zO^8FjZ-6(CPSX9k-hdg)#uwJ7kJ);CdjUs$xZn6@E!>k)Fod|5b zJ&g-qj|$$&nf`}N655ICr4V(I2;y1f!PG_nc^m@ty9Lc!^jievi+E+BhojydTq#sJT*NC#n-gmS4nLIHE=Fj4rltf!& zu9We&o9ykca^Ak)=G(V?3qhw(gJd7C$xs5}bw7foZ!}%g0f?kiB~?l<{R#nh9!RBYp=;uZVO4nRIA{jhQF4URn?WhQMKhp*wd}a zlWx8kQC228t0q@*l5EyroqHP{^zcD4UN^c*{wjGVg2b$n3KMl370qQaQF>V=?5L!^ zc?K0vxJtsL-3Y#>4)SUr7=0Kf6Zk*;-)6E!zej~dq8B`XmuOqTz6E@H_MRPPmWv z1DQ6A^j8e4^9dD!0iEB6V0T&#z!y?^BcAL=<=w+wJOVXC!{5q+Lq!E-%=XQ3 zJV)8ilmR44y8BJlP#Bv-Iff835`1u{22}<9Tq@tL~L_CZyN07DuvGuUso~d z?ryqN%r{KqLMMD(Yp>5m=NGu;(@?Gzx`&i&=kj!& zCaUc3F0m@}r`7xj!5xva!r?tYI&GW@vY!hEh(tb}&sLp-9pPc}fC%-=`4&WCU$Tf2=i7~^=rz&=do=aUkiAlNjc|x7n_uSvu)T> zB{El*<)5GMnd~QFi>!*l6Y_4$X7wwztj)G8_t0SF+5(61t)?<)bPqVu!=nbdi2&mj z_=|CpYsgX5_RXNDm#o_JQwE`Duxb#TRyT+l_4<2sJ)_KTWnvK5nZ- zn?B|$u8gaz!YUpOaGas?O|I?XzFime{+;oq^c6*c<%f&%y|W*qltXj|XClaF4mEy+ zqngPw8{ubrF3fyRVmu4=t|!KuCxyiLX(Ps$VC^bu{hg2)Z=MtqC^yoHZ%AR*oveRVibuf>POoI*fG(PwyIj(K)I$mU z`f+4W9Y~uA>S)(jdotvb|Bt;l0j#Px`~QL%hs7&NbDf6xF#<7=*v*A6p$9ocCz zGwy=w2k5M335DzH+WSSegoCT3zqx84BW8~nO#&MkEJsBJ_VjWOsp)`{gZvtKfZG}U zsqmcl1TdV{n3ebgkbY#(-2}h}U#}PblFStNuajZf zlFanzab8B;ykIgafFD0HBo?&L#K?Eb{b#e-zfSfJpIXm#0Ca8dtVK$hTnBKTewduj z+1_cG2xWGq<)&tZD0NeBUQN{5dPDDgZJvv>3)v%O(=nN!Se!NRXcqRiUKdYf>n1{# zZukFA@xS9xY->Cg)|jjsrn0y6AaHGN#eAXGak$+wcSD=C<_dXAK@H3B)epB5%Saw> zoQ}y`M{nOhdWUd=*;m>>sAwk1zOu0;c_Xd%Y8a8_bDk-Eq&dtq?`1n6=Ws*f_+-*1 zPfnW(bZHrUws)>6C$63*;1#spZ4A!X+1~j?+Ht$#jg1nxRB1BWn`QkgZR@XC)&NIJ zPXXlHUqJ_VH1&17zVxl|_gt=t;UO6GoZfR+C=oMF@ z2sM>Wf(xVY{S4l>Byo<_I%g5xUc1fiDTOUz&uZz%stbF1vZZgdRC2laVmVvVo-kTs zzqm2Mq?s=m9J|Hel}X(iFo~8?3X+)A6@TY+-iOfxS1=D=AzZ!C6qB&@8jSjN`<^S9 zL%mMsw!d?2kWDbjO)U%j0)?f?HRYZb%zj)tkbyo{ypnj%C+H4Wv&PeZv$U?Lg3 z+}hn==A&}D^6?>NHA_E-pjme9e^u0(SSjBUI__ss(y-oE@|`xMTw=*15?7WEDd0gw zm&UV#GqS>OYmPX#sfR8oVKg7N@~vw_Ahx$k7u<34S$A8<+}z3yfoP4L_ z4nLjPTAzZdDOAli@3vA#j9gRFt5U`0b|P}dnc&O<*Y~31TF>xPbK5E2utS*mk>4zG` zFR|8`lxUMym9ohGqK~khnL#@r^bOj%RoA*|=l#BZJCwL~-X}nT+PO8Ob~_t`c4mj| zyc)Dq9<)P=Yp2|A=T+Lts{zk~9DiJ|_YUBhneD@~vbPTpC9a*7y&XI=vune%skOEw zu5vYy@8t%-08zx7GDrU*q9(NUx2(~Z{(#FN|B#7goo{tBrC%l8%-7May0Brk9UA5y zBM-PdjS+K>v-?{^uA=JBcR`yUPxW!NnIda&&?1I3__2! zZb8fV6oAKid1t8UV{>c0f4lzo;qsQ@vK?^zN}SFw@Z#-3O2(F2Ozd82?Im~Fc#&RL z*w<(76TxF}D_%{z;4#?iilk3q=qi`$;TIOB`WA+T^?L77*ag3#qY8T@y%EDN)E{?Xyt}gcMQN?x3HK7aQdqIBGIkrvbv=WIBRzA z8Mp-2{p8YaMVHnsEi6tH_pYbg&YipPzoNw7y7j*3(k>SX(?!K<7?fvzWbXl zeY+K1e)LfdeR@T&-idC1?Q!wpMcps|Ta8X_fjUhqEbeLDYULN$fOlr$(MRbmu9=0$ z9pgV;)a&xgds+85+!i6N?w32KMC+K@^AhW>Cyjgn@H_0?&7V;bNYZ6eextp+CoWYj z-Xy(XK{LFhXA!vW_Sfz`x+nUp3jUVedN7X5FYaj(4f=cb>N()z-o5;8e9&Mfhhx=}XRGs1<;mhE_%?7C z#_2O`6FepTX+^T3=da%gl?%J~@UaSleeZ3x$$a3p-YwDHO`r8Fg&keky=S2vYEW>Q z?~SZMCVE}o-MW~zOwLuS8ZN2)^1J3KBqQ+P69!Kg^(uC#r3OyI-T!7`u&arZ(8pKw z(ybPGGC4`NTXof~|6eb@5H8xYyG14M3yU4u+r`o?fm^f&E86M_8hUo?k+MvZ^APkN zPAQG|=v7o?CzWT2-YzD-xB~ZU%dgaK>$J4KK3iy$>TcaOL<3I@{jZL$SzfGJeb`RG z_rA;()2d}W7p9VMkz1R4fv`(`A74fREne8O*pU&Wc~P$`x?gPlxOrCuBURgCF>YhI z5Zre2;ry#ZQIdP^%@=T7z1~OA1T2joDnIh5pXpV5e)a7>V1RRD-d7ciF0<(3S#HLk zNxu7--8g9Gzr_w!B^# zo3z?4-rv4`v(~#0ZI2mfk8dVkQG4?#R(F|s{OHPK1%Iur>eeVq)oTZ0tVD)K=Q9wt zzS!9{ZX7Hnl(p-9h>Y^fymIppS?*C-zvy9jz8?xD5^wYK6|a&b1Fv-bC2P%l2QY|N zJ^m@D6i7antLVw%6GXC2BO33b~{hcGigh=*v0HMn_W!5WV=& zz1YDE`J&!{36sru5<(_JH^^oDAccFaXZ}hwe^KLn64m1Ko;7^DLoI@hH>Ekbi@>(D zzLBE#Grjn!3hG)55L`ZjSR`R|_WK;E5|s(0jFmM^NR!YCNghR$uS2-)KZACOof$ch zpl&E$VkXhq5nt%}u-TKmP!_<_|>>wD2^QR{f9^*tz)2TQJ>h+Inn zfkmToT>+2hCw+esEpYS{cD};V(`rjkvqVq#LQhrR7XDg#dc&gy5!7A8(T1Sbh=8X# z0)ATre1{15EfMgYj(|TDJ&bh(ye=T%u*0jYla0C8cDP0zZY5LKwXrJx+755j9iuw@ zj0Ajicymlj&rcl%j}ZlbEDA0a1%KiwIJL)d0R@LWe(5OqAsK0FvPz-Nwj>5wX=esP zm?8qbmV_@`8)3WHuOOg9g$HYCHaR*R-Y=Cv^ydpA0fp&geUeTmrP8TBUXrBKSioqX;w&5*gEk6E z+iBqp_XrVXHGpCHYaI2n;-jUGuQV&u%J^%i1TRRgFS5)nQS=#O2kP1yw5?4e!v_}a zcVNE*8+nKOH*8qU6t1^2y<-U19d}w$bbX=p+>Z5!k%JrO@q?jF|bc~a0s zA+s^m2KC<{kH?9?v4M~d+>$~N6A0|LF|7bUo=edG4K49bGn>*%z0QUF&|Qhz^|B6N z!4I|j!)7%xdT5^6jC#Vd(Qu@n+L4~m-6g%TYb=XYcumjuax*$&E}Uh`8h1??_gc$ zS4ApZz2!2N{fktn-~oeK$e-&*q7$+S;AhDP<#;RD&&%ECvH+;UjE#o)n-{x-&`ETL zU$h)nG{QlekQQ7FC|T?*ZlmqzTFQef6<%~J7;Kt>ed#t)myU3LD+~I{iOsiNeCE0sr4VOZ3J(L0ig=Rd)%To&b!Be0LqxFZ(bNu?Vw?V zl`ff>c@{tNrsjHi1%r0f|1YJ1AeMne`z#{Umhl2?#8B6xv8%~fmN5bB)GrVoFUL&F z!8kHTYhNjB2K?=|#?{_2X1R=jRXnK={T9ea|4f7%q=aVN^WTdJlj0HI(iC79p@`2F zxCF80lPvR@^3%Meb;QfGDsVD1qlBk&DiQDQ4r&f9u{Z84Za6Xb&g$trYQ6$NQFNas zy0=<2Hxqy}rBNGkdA4Zsl_6D*u}zBeYkhH*nFNPxq(Fs_Xl=}~fdwqk^1o3282L$O znGu?@dx-;RqYf|3alL=lOZS%=ez_gKhLRjT-^Dzy9qOe znxmtuML2siiyMXT2`n{``yRBnS4KohUK4Y73*N?;8KPF)B1=xY*OUq zu)c0#`9k&|i=4+m7k+JiO~n}42B-c!z4NnIds(c$>sbsC)7JE^!{AU1F{akqlOBy* zs-yiGUZbW)BxkrVbwUb+J585D9c1G%VmUei&JmSLxKL(dEs7kIXbHBqI0C+z>!B1{ z(`R%&l3?nZjOWuy4G~~S#4$@TA&EdjAplP>FoBJOxaepkE`NPQxB17I(X>f{*{q5G z5;2Rgi4oN4ToC!&vOI6H5VvF~lLop$NA3Pc6P)60x^@M0&|da;cc zZQ@w9U@o387);fAaNr>4g#-{s8rot!)&oICkxf9Ik9HG8Y zN?jzPbjFtIxJxXOcU}z9`###<;|#Cy+vp=FEjG z%P-hDsKomH2f@fim{T&VRAAmwl9{V9ZTC4m20t*}1MViCnY@>=B-a@jS0uhuV)K*2= zyjL+0j&5=OyAsYoGI#Juo2KE8yqYR@H0d&<+jjb^VVr{Ht z#FnrgfxEUfA4BNstsFD|WM4Vvc8%<>KHbmMAz~$sGIVPp{=DxAipGj(t1R+JjQbn-~OWOxPVZy-PktJ0ql8>Oe0H)F>fBimQ z?vq}tzWl%*I=6$@>@TKYxtF`Y*RdZGQXWT{o4wq9z2?PO!g4Ci!+Cy+eG!Xwbi)Yy zI7p^c=X+UmGLFjlpNzlr-?3iof0@gRS?IIx)PKBKk6IrsMNDX=%<9efzxMAIWWrE( zSo6TpgjqpOhX;nrS zdvh0Zt>n&CNNfu8yUJQgR9ZQ`v@+WwrRGMoAh;3{!8+gT zaI;@r0(Wa~#&LRAwXZNjcU2H2_Cyuidb3h1-(LkA5WosrsR2wP43Q-E)ky4C8ot){ z-T|N;G_`=Xjf`ed3gWA*Q6!DQ$@P0B-*kXE$Yk|C)&K{9m&GSoGuG#9G@Aj-hq-%A zOKH{+r8I!e9@Lf3+M7G^_jO1`P+4OwwA)A-;yVV{kJ2ho8sIAhrIkKP<=Wc-N_VG9 z11J>@2nBZFaQQhL?yO8c-M}Arg5w&a_)&0tD0+Cb9KT123dTFTU%zv|jzkB+yWhB9 z$GBf-yI;qvV_+<<8-gt zZ@t#@U{}gJ)H;^&-zfzpH497vI64ryovb8M6(WdKc&(nH&uoSIuC?F+=|uEPWX(ao zh%@L@XRk+*OxQE4dP2OXtP};56%5c8OGvQy9OF4(A}Pg2Q=dq5)E_76{y=AI$Qs{s zPQ_jL9H)0>uO0^3+b!)q9-#LazIPSczW9WNvt@80dt5nxEBGsid05Deieq~Wj&c@* z562UjnIEOgl;1eof4*4J33JV2Rwf^q`8b3g6I1X$5dLsHU%lfbLHFHb)k;Gn#O= z=?IH{9M7RlSf$P(X@j+T?N7g}im&p&vts4wuKHvQ91BT3LrZz-|TPdn4bJPDkU}03`Ul zN7OR6LHI8w_%Alrelf{^u^PG4XK8RNyNTRpy@duvex4q1HJg@*TOBr)sqj>vyD2jh z%Hdj)I%_U-mme1`kHu-u)v0AiGk-ACyRD%7fguh$(t4J-ZHB5mE zi4IWe9pi6RV=yhQxm9iUx2ik*t!gb>)v@f-$5^1^- z##>PP%34y=YfqeN_myM$onTK)>BZk%Hv5}PO56VCqEj2w`-H;DJ*_?cac(MnWOMjW z-9Rk2--D<|yqJOGr@vvcwfz4N-K-HVc80=`?&Z+*AG9Nr{WGZCqJ6y3e)so7d!m-q zRQ6r$JzUMTeAKY1d9CCI0DztHhA){}jg)vG$kJt1PRZ?|47qyMK%$gqwo5g40@^!^193 zLESS%u(^hZ2!i715HZQ#rvBR>BC-geuZw&gpme~`FrSe1S-(r|?W#DV1WW`Ejui^!4HLaPTYa0x`BDe9k!a)*Zp_nJi9oh-1v9wCwldD+MXu*5Xw+*T z<$`JOWgPZ_leW<3W=U2naaiF>%aSVf;X7Q@vKqXpDJzP?X)8|%5v=8Qa*XacJBydr*&9hgYg zdPKF>Kot8~&4}cXkwZ$&H=J7g6zTFAkiT)I-1%C;{VDx?LN{&xjWAU>ul;y0?a7-? z>KqZp;4EKLE*rqBp$*erwS!D2NkCrBt+mdSQk6+DavKvMRndD~NJl;naukFm; zzDD=W;;!D2M~cgsH_?-(s%ufkqMiR9%Ge`Ot&ykN1CmUvuQv|f!g-mP(Y_w`Jq~l| zu_s4Ld5w}4eN`y|oe?Q<2Syt>xUTY5XY0oDh}IqbX(5Y;n}>G|Yjw*`@V;_XeD?4t zlShmg#MiHqfHrk-39m9rd9acPw@{HnjB4K1t*W}V&sb`Vfzl`2pYJGFX?^c(t4*a^ zrN?}l&Euh~2tj999jN!^_PbWQeO$Yow4oWtTQP2J{6}iHBUrZ`l}vQ)ptN61mno=j z9`@5=|LHWl37BglgfP0mt~@GRNC-b8ND2W&nPveZW$1Rx6G-e@&)KM}4>K%%2doOk z#SnZIKm!QTjn-sLU-va2B)29){C7S=*dG5;>NaS;wVySeL9=8bDHFnZq(+m^_-=$%9 zH!pie!!8_4^_^rkHB}=&P`B>OV=PF?W7wR`lvUqKR){Z~DP%+g8g^-|(MCO!rW=rd zWzFvt*@Dy&n*Mou_41lJ;NVUcgOa%ste!K7rA0)GrU|ojuvC>+gINI+uo_GRyIExa zkp}a%v{VfyFJ}8MUP*a@c#HWvmoZZ8tQs6SEZu%PX9%qQrlI=j?^cn6FpQ9P&4%cz zN+%4L%mPGaTQNe0=d8q9qAj+AZ6w#HnVF;|40gJj#Aj(_*Y$Gc-*r5|UMEE_hZ3;1 z`m^*WQGZ(TAvg`MMM(aqDL!kgZW-S&N%iQKYa{krF8}0FF(HBtV;_GdI}_xUDJBYR zS{SJ#tUQD@ufN;yOZ%kHA9h)Z^nY<;qWhU!br!iNII-Slc26%|dzvH=75)d^{sjQ& zo+xxr`wzN(8-Y|MTwS)a+saXtDWH1_k{y!ldc^4iW7tp-K;AO@Q=DL)VtbXmWB=Ed z0N4Su%^De(5T;-K> zjCmzf8ECBEOQ4=Daq8Je21z%7L7!8+a(K;I?=@RF8{>H751%ZNMnWsUK%2=2`)ibR zcC#`8__NGUDL8$_rk7ppYcThdW!=>#qpJ(9dr+Dm4MEAXbI1}%mS)cGSeFgQ?H03v z9T>;O|Hv4WsQDZ(exm2S?&U1;ymPFr^;H4zI8=$L@K zuJ_o&+4__Gw${r%mXY3p>9jT46=07h0DyDmlVCM_rN8YUC9e`}_YtDr0|+ij51sW=m07=b4AFL~KC_Y>=IaCEY>lVFS9&_87QM z9IAk4Wjd7b;uJYjGF0;@E|4`QE6yww@C8i!4h-YWQDx@rgqPdNx4h;NhF-_=`q?^` z*Xo@ZsE`tEnR|v7P|(6WgW+NOF4(LID7v_RNR`^onOiDwQI@h?MO(<}DZ|Xr zHRex6SGYWVN_HU)=7Awf6p(A4OfNHSh-7goW!Z#fyoIY(9G-x+ZEPclNG*WjrWq9b z7TP<`tWP>e>nEk3%H$Ueqc5q{J9&rvnNM+;%ZrUR{Srkg%IeS9Q*{vs4X2xXurS@r z9D<{^>0*zot8Jimwo(qM!E-sQGvf}BKWGc{g64*PRugoX8Juaj_UPudT;MhTBOtst zL?I4P{GbwhQrtwK)#4@$70^e)oSI$1C+(FL;;*Q~&?l8a{mwh%CAsT5o**uwY@K|x zLN4~0*>}~Gec;AfMx3&@r(M3DBZm1hUvr|@<16;DT#v8XM?bK;D%`8mDqA{Jk1Kg} zg4#4fcO0}*8$KxQ2xS_C-udpPHEuBiZRp60jVmJ9us6W`f# zmH6W#+%0WzyF1xDgu06X`$cM~%RJiuN4 zOp7uPYX;I5b9q!&#hOPakB)%OYW2-ptcM~mXsb3l4sO< z59!f*)rCyseNRloWFk?q{6%Gu*7XCB+29*r2)j3s22%vKm0&!U;T#Z1o@1FP4kK~% zoFb7-9gGxijUD!s0B)nQOvRyc*933@$)4k+Mgdtq76O`w)ab>3;bpI9fF*>zu(H zI09sw(ji?59FWn+`<EF-8c`A_vf-qKvCEPV(BG=w+VbWsUKU$$*)byHFV)rFT7P zHdjc@klb@2+A(Z%u!ha@G8m2dwARrAZIFxYUir8lpSF)r=S*E^OmMSNL=4suy1wSUVDvNaW4qR6VY>k9X?vtx$MkT{&hH68tXOr|YdjsO&e+;7B8N3jLDB_0qn zuHs&>w2Si<+hLzl!oTPpX`c1g9OMTy3cEZ^T@o`uoff!GW9CvC*lBNgVXJQKj?6{& z(AWh)e^;rvJx5w`w7IgiN)2NVKY^Guf1;cGSjKwG-0zMsR^1=d z1Q6ysKh2F?=kwc4!0k~^{3COro+mCZr4ZyTR@k5gL#rLvO|?Yw=_EwwD;&vN$4~ZJ zF14K7IU`2tM%SFzonV@!xRL-{y5u}k2#J~V5-wa- z2+mu8qwL5KUMZ48Upuz79C8ol-eh`DTm$rVha{AY5H|P~0Z9&4w(ddB^J*)}cH`b} zZ9Ey3bIA%D;EW3ho6?+FTb>Q^f*J?L0JpnV@kK21K0wc4GrJrTka>2xT$ssd+B}a$ zemK$f@FR|gHAn;y=D7$9KW8wCNoFH*g{9w83I*dvfRA02sC|=i3B;pj-@4rQj1KE6 zR7O))F*TXi7no<_z{S=$*W*J2@J6$_S@?!WFzq-LCBpW>isWb4bi1I|3ewXYrct~% zSZ)vPs5VKw^%!>Rz6ireK9ZE~CY~L4)5Ko`vc6o4h7k?gf%$4}vlFQTxXZ{UlwtO# zptNsi^9kC3Qo?VHyRqy%>Dj1q9$Psfsl%647d-`R*RKu6^eWlgPwJ&zw;I5=hiq0%i91ync@C@~Z5NFXlp7D+BGO9rV2(F7S{vn9BRel<3o!g;Mkd9XR^ZdJ@HPzJk73oy$01)uA6ZA;eNk znGiSgT=%hwW1HslBy%$?M_WuDQ!Do4Pp0_U36&zS@5NmL#H)GjJl5ixwrMt%tHA0) z!kL^&$SkvO!@Q)LkKrz?QLR{b3bW;yisBoN@PLJ_Mb$q?PYZZ1s}X zvAaxK4Up4!Y*%6?$=#{}%1G`^aPtOtCb$3LlV^_q{^SyDMvh#n(rp9_^q2}xkxDQA zE@WwQilvvG>^k^FRZyzExX`aTC*3c1(V?YarI6@h331ts#DO&2mp5piH;{4Hb zLwm`0uJsx$Dr6Y+wDY}06Er!~EdeHSaUZ)5c4ynDGdk@X!s`z3>h=jo|3Wexs@6V1 zX4db+mh4PvZ_rYH1jmv+%9!fz1(h}MoVpcQ4NJZ2mF-__8SzqV*{Us8Nl$SPJFm~m z1IFDTD^C$ZweQs@g-RKJrb1_05>IX({%VJ*B4?p8K{S<&8px&uqxxQ}J=)H^g#aiO z!v_P95mM-@fxQO$QYZWFCVkoUJvlRSf}-lRgK&iXY_fbn8>rQOunC46 z)9_3#DxLIUh58z7vLa;z^`)4dGcB=Pm{vP;5i%HFVs34`7Rji#OXmwRXKJjkaX%@O zoF@l}U^DjEP)@s{)rFc16q%`Ec@G?vZ8bHh?_4;fNvHtr8Mk)2CA6SXHEjG|=^~!Q;X;_+3Z5 zA1scA;(o_K9IGYn?^GPK6Z8WGWVZp=JOut|@-cW%-F$sv&5ByLDh-?F{+dCNLnWN= zL~gT(#Rdd7od%zPvSkP`hPy>4J#ieZxhoTz1^S(yZadw5QBLZ`V25U%#mpZS zJF*rqZZCrv8^jcD;YX~^WFCWZOpot2cHB=@N18Xbdp%1-3GE!3+^UQFeAWQ4UGGnBb%kyW96 z|ENz@YX`b><{psyAe9avzVU;sIs^sHdT<-krg2~~AT#PM-7H%|M5 zB0*TKrAW|$K4*6%!rJ3zF=+-Advedpg*E7SUOz`r952N-_Lz*AO0>y7zK^8XFf&L> zivBJY3Wz%9T3u2@XZ;ib5uu?z`B0j2D<9U>EjaNI@hK@DvcOux@DK}iA}AC7q#knn zx_>GQV_(-iVl*rQN+$?qX)Z|1D@n?R9sXYWDZBQAb2sM}5^U%M&QrO#^i+<9jyu`3u2iIFpN4rl_L6suHgbGegg5^Cl>p zyf-BDB^7u-I-3t~gK9AJLbD;G(yEeo`98t&_hnjsDaTu@h!IZ1<84{;`ZlQ_Zs2&E z%5XUU>tOCPe|I62Z9?QTm)J36OJLKH0{oz9xF64!bi3x_KXiwU4SUN1rO@ z`axf&1D!qh(v|$R99T-N-BjyJEmj@uE)J3h?H1U{d`z54cO0l65`p(49eafepU2rt z*?JGVNikxND4Y-q>ysP`AT(|{b!kyArB&ADaKT1glhXE_A_X}>ga!{Z-B6^gOHrhh z)KH|n;ww^~LXo1Gd?ZuRf<H+r#=UYlNCtiKDV9oBo! z+Adt`#jbHLjtm-5Zjem!uCv3GMURpR$pX%NN1`EKj0w|GxUFo#Y+b)c;bd&ce{xF} zau&hE^C*qsr%)6*Cf$W5&I}rz)mWCWen{`I^oi8cql3C1k%|s80tZ%DT0*+Gu=JRq zZaJnut+Bwc)bmLUMc2E<1z0w6H~S4*=N$OYUEID>VBWNevSbu}jJA{eFyf27?o21b z=ANgy&@v({eWl*gH|s53ms)yQ0A^>YoG_!<7-H%$VQNxQrITC*NKGPVB@9*q7 z!qS^Et@bT$KIM4XAQYvUerrtv=u7RGE^w`drMEeY6Gtk?2X)^Bg{|X}{pF!H6lZoK zVHNUZ&El$MbbmXTYfrfBt~`}`XW$2v7CAm0f+rgqhJzK}8C~^o5_Xb#))0sD)d$4+ zh-COlZo;mnm12~Co8o*w!BomXOrRod^Bx%-Kkrl3tmJc%P2Qj9r zNbg1`-^zht1QGfVQUDP@LU`EW_MpQFd#po0=Uf9Fl1j)ch~LM3vaUZs<8=!0^1j>< z5azha*2Vb7%zS%a@iGC**vYVivUlia8;WT#XG#;*xR+oG6W6{yUcCQ3>zIkdm*X?x z0B;G1^@9e8)y~AN0kQrpAerkupDaHoC(+O7^Ok-YvNlY+MIv*RSM-wR5Ggpux2+?isRam-{S z{G6|!rg>pl@Q5vFoh*1z!3mb*QAoclWWM_V80v_zD86XN#kzXOk_k#9gYxoAq9@@i zbq4ge5DR3itrk-$W|U`7Ur|7~Sqif99VZLHe8Yk{T8nwQn+}5ZI^qcHYy&&2;ka_# z< zz1ZBYaw8p%39L2K3%h>=1KOr>F!}7@NEech@PMUYr(s^RKYKA;XC4@wCx#-YOqwCS zT>uZ8fFLS!*ax~thVajP!TF552_MnZQk6ZZr{!2#ThKxELU7@*h=`yhhEJu__7jX1 zvvTDbbrJQH(2T*GXK-6c=}MR$A@@f>OV0HzDJ5>Q$ETDq+k7=CC^^o}^Ra|Tsdti7 z!LtcWR>*`(Dh%-RH2A@8m$Qivz(NWRMQE}n!2wXVk|jW(3@PNs^x7oyLV*AK1|vW! zcIeB5#)4qxU_T9QR_St?yXb#r-y9OL+}?o$FWU@;@-mGK9@}kJL;zRlSK|@mI?f16JyO4{$3a&IBgZS zKDlO==ijL#o%oAzH*;#kCzloCfa&!v<&vRM(7d~dQD zrX6PoE`lKeEUZHS!;t&1R-HqboTlb5+>n?}rTZY`t&&^S;ufQ9?ftyilv*$D;01Ex zi)k{`xOosZt5|w&K~%+oc7Hq{i*ZlF^{fNldlVj^tU@u$uEVL0vTp?F$U#+_g=x64 z)#MS=9Ej^l5!%iSs9=h%A5kYDoIJEPg!ei?s!7Pf-irmJa*vLU(*B17ZU49FdDB4K z*KCaPYxeavpJ!pHokl=7ob+2y6qP3AS)qRWP zBa=|g>~u_NB>~;pL>t8Z=B+E8-=hy{SK;w4sLIvFOsdB`=hm2@k17T z(^I#vyEA}KHGri%8Gr@k(<>4BsP%nEq0#%8dZf+}o{joq-YP^m4R>ZB!krw*Bu-N4 z;0_vLsSd?D7}^YCVX36srg1B$DH|Y@Gup{%a>Le-Ku!z4xWfuutne=y2WRG!_1#U0 z@Fb|Zhu)4bc@M2~5^LsvLmaE{^loeCOUq& zmp#Q2=NpY>F7fnJm0ZuN!DRMO0;3Zk%%Ad#N;^O*TBWGSLbo&YmCvrq!giRCeKhRvaO z0_-h|h3fy}bfq69wtC5~{osD;OzU%VBHQ;F;9lFbd0wvR^Vsaz=9d$#QGQX+lMOA5 zC}Gk6Dngpo0Sfvv?qpcs1klg@DWTsc=!XM6yV=!-iTekqvG&CFjexn5!G*jujCR`~ zo8`^l`#>dBI?|LlyVr0+=D?0y#xt0R<%7z-LvZVcGP0}rh5IFa1CA0l|BY+@;i2UOb@;i)Ea|DkNKP69pvQs8!fnjsD7&Ev^L2k; z0}y^b952zVc*a~Wd#qhb*D6T!$@IH5-HJ(bZ0Sgj1Fn#%`)q&|H@?Q#E_J*PoxvaZ z!)-q-vPh2B-)R9?OHuyhMNb2icM`$*Hmoy_RR_OuXSyBn;7mtt=%P5(>4o)IGITO0 zHujG~zXTWmRo5=tjjp{FUeA#K}UThpW zg^FUjzY+{{6Ct8b=Yz>J`Cz3zEYno6+duT;UcGobcyYc1R4*RT3vEJ8;vKzM%8LrU zkQ&TFmGa_gy%-;`@QpCz=;>x+0-Sp}U0CJvBNMQh=G(@YqMQzOjYvd}Wu2{O(?SZl z9rxQ~c|9po1+gwClb46@Gb1`3w~-xe!F$K#>FV0}I%wk>*Ty;=ec_4IY2#O>LwVF- z(H}XT#@&8!x{z`g`+;@uI)ed5&j8#b(rFxG>k~bLbimo1YMifzDp+mhGBj1HVG1D! z)j6a_oj)rhIkzT{A!~A z)ds$@3rJtxt4Wst;Kd^ynkNU+ww&^s-fU;E3FFNMwF})PMC!FbY)=K^JdJ-sFkRoK ztF|D$o>)Kjvo8@Ff)Xbleu=BLt3rrlt?O_wGc8#AC4sfbQ-*Cr>>~3aafX|mjZ%DI zXUX7`qt)KN7qHY&Ql6n%dyt8-VFAJhr8`D>!AR31U4yRPE&$|u-`MWn4F+>N$=J?7 z=dnKF#MnuV%lHjzO;kGqS2u%&wvXthNj!2&8)YC!X!(DkbKVU$f8UpS1Rc5BmPp5` z^zYT$w!guf+_Pt%V=bn}`p9cWF2IP@vEv?KaitP?e{o}=b*#5V)N?pJ6Elh-+VCVcCQMx3SJ|C?=s6ER+#eyPLZakMc* zu(ap=9?!s0`Ts?JlO8=w{Pd$J@%ag0oFDx)t>(KJpTFuXnaMmiSZB)L+YnYqu)+Tq zJEkNj3Vq25UW|+*x;UlMYs{RSSw%Z7xM@&`mbciwnTm%vyEVhXvqkJ=HlZxLV``)P znrJ+~#>IC{q)_`hStU678FqlP@Ism^&Cp!5PMp2>L*%$nL2OM2X6S#(zN{Xv&gH1w z5f@W?SGoL3ZKm1gdL?eYi)$vnJ0Nd14%*ykcFHpsSYi7RU&<6lD((g&-@rDx4Vq&2 zktf-7{e8p||2FOvMFJx^`Wy#L-&{%e!%1RIA(WC;Kxun(eZt0)`N~osX_oz2_!3I) zg6%$Mk{!MH#C~A!O-lVw8PBLh1}B@(6n6`xZBIjAR#LP5mgXw3oWs3UGnl5}ZK3eQUYlaCMQ>gcL8Q6%QQ}p+8WH0-j*24^)%M$O ziOHqk*Ce>iQDd-b=GpF#;BPeks+Z|l(mLUIn9yd|uhg)ht=OXNhD_#qaj}}hXL4>j zhxfB>Ys-UO7pyhaPTRuV-@DAdS{A&b^Z-O-JDApHE3=;*NhTqTDyh)YJeqJTuhRdF zQuTyzW^xj48y0M(bD7e&q}ZOyaViT@<2%F!%RU92kh)WG;W()s-VtY+0{3D1*GmCxcIgZ{|Wr$MJkWrm#;dN#PJb=9xE0hRkDmB04}=YNai7_%qMZ1 zDu2>w7fHqTH>O{(D?JrYrHXlxJkyMuqjQopG4nyj{%!=kPev&yyjSbe=Jvq^*8)>G zt4mBIU9}=@7b-w=RAzw2kbd`=>L9R<3(h%eXoGqf%R$98 zbhqakdSgJ?(0h&4(D;68=)Fdk=lBhcC$^2%42BTBX&aJU?TfJCn;pCfx%YhTQ;$Q@ z@hp-{_BtIIwgWga%(aX|82(o4k$D_p&5L-)JdTMmk0193fa_w+<5zgb`}8G#)zXaZ zuc`VdDAsurPGCNY*aPME{)lUSeK)l?*!o}6I8$*Gn^TT?#&axh6)dR^qb6WTl2Nxf z&CBdX`^`-CK)fjg^CxIrZOLfc@F#+F9M?a3_dZ96RBE3f_tlLsd?tRFf{b8IpIoDs zZ!hGAJw({I+^1`dBW;+mQc!h@ZFiwPPUVuRnLVdvH!;yA26tTjXza~DhNIP<24hxT_Tq0^d75>Upi==Ho`(xY5iV1G^&K z*hJHdpuzS8aEL}O|K2EtLfff`z(g}*cn3Fi@Fc0i)b)2al}gGw5mqhCBK zrYRJu7TE%h)=1)6G8pzx&>Ko`x24r8T?p$#U|Xw@XI`wr zOeJ<1D!NZhDNGt!&R$U6?4p4Z!;Pw6q;;m-y-n#*&V7^+y{FnQ2!0pRlrH~{u)(P+ zQi4;-ui^m703$r&j1EV+)0#E4ZUCVhG?E)UVEkf$y+|G9b{aDetv}DH+bx!ORW{}_Zr8w=zM z84BMpSQ6wXdMriR?AFqAX>=I*%1(vHY z9}GkcA06ezW(B{jvzshoCsQox=is9cN73L9%$Lgj69TS!7|U_Quf!Hj_a7hNJ)<4w zrHB*^kppwXJ*BG7o&sq<#uz%SWTzX5eV(ZHVFB@+fPl`YM&Z(H=?gk9C${F#V(1G< zP5A0SNe*{K3%!$6QXLz{E28`5#fpaw)1_pjlWpvF?IG1}KN+v*_rm?;tF&N4xt2RM zYfv`b_>sD`Bx=tnq74kl42#+c{mJ&0U7hog1^s8vzvrC)gH>#|nsGnzR`aN~2D78S z<-MJ3PTA;`SOiPtJLklRuWadcD)pClh1ieQ_Y(3J@8W*LQhSx2bN}0GHjPy`$X`lJ zSn7vQ^|H62_8|NT(UDnB3kPX;S)j+o*r>SOWlVal-Nh~?q1A3Lqkh!wWml0F^2C2d zq@5G;ACB|cSj{3Ki5tNtO+#%KH# z{qH&6QD%`0Otx{#9q1t@-mB6*WD}uB@=F|1Qr$d8o!N4BM=kJLonTv;MXADh(pk_1lsa2SyH^HUVf2Bh>wY$1 z3F)t<0qTkN<2#Zc^D1IKzY^umbKEvU)^pJQsN1>rvuy0)h?M+0r=AU0$z$lYa&5TD zYIIh^YrTDvx9#KSdo9lQ+TZN881A*t80KXj=+&wCA{AT2Gag5X$*)2W(i{|L%qGhC z{hpVxfH4oSH}SK)?Af08zL)zhQi(l*U&_e4!xBGIP-mo~(L|HZj8&V>9Ew{oX&jrI zO2mi0P9w5UMh82jkwYsOZZpD1mRsCyYXX^>kyn-@KptkzcXIhU;{d)b*J?eF!)(SJ znj08~XYEP@Cv%j|w+(!x2E0yY+?6^PBw`3cHw~1Azzjp9BP_m!d+<5l31o9}lkx5l zO-459SRnpWy~uEPA~3L@o=|Lh%PhjWg>fi4Fo#KCIo^~}J3u{bP4O7`0-POEo z*68!Sb$bF@NO1snZ0>Fg1bOjdAb%RjQ5Q`?0zE6`-A288&b~wOxZY8UKKe#4R=AH& z_6{}Ym;cL;*&KvXnKiD`05X;^fS3INm@CVe^_<9AzE6=V3|56NZH4o}%AxI&gTGI& zK0s$K^M0!g(+76fzMD0HmE*7Q#K!?Cazw6_!UIw}E}g^2vt6~5Q>&%U$(Q4)v?x<^ zVjk{?32$SwqLJ*=y;!BG=u<%M6tgtbg$i9L_blfoYSV~GV+uc7o>?*)?-5M7Ns-Zq zT@8KAiv;y=hRX2%J}9vLXaOP%0x*zArHR3mQI4k%^+i5$Ef(+>D-qk`o0%mnFy-So zKWKQm8b$#6B(nn0uuh7Nwtrj3`Vj{EvO?6VEoI_%1Hl&T{UlL9X{?p0h>?uKyx)&q z$=r&{e=qYHmP@|cUl$6k&3%|) zcslEF-75pkI|yv(58dKTSAgwM7-uR>cb56w#V#{9p$lvGC)?8dwx#{dcv@2OoZI>! zIz$jGGAonx)Zs~HY-3zTNk2#2D7H5p&o$xN(cCqNML4=x2SW2PA+|HQC4dubyP}*M zH*$!`B9;|;BUgv#DvsG+#0JO4mkVAWPF`*uQivO{o!?v@s!3nP9B*${9{mlocgy7! z(chx3+&fR@<|Ry9U2(||D;Dp&7qz&EVJ6{i)#&zS6}9`SRn5{2*kqVr#JTRdq1akN zjzGUkU}N)b!jj5$jSDhXvfB31iF8#0!I}G+#?@S5=Xve&&6b2!+)r*=fI;zBY-&fE z?9PzKYWBaDF!qiLC%(PNUW4DINB!6w?&1bq-(Q8%0(PTebmDZ83IH{e8_6%Cj8rlf7VhU@*28k758odp1goWs$Z!owz=H-L8YSwoeq~i0venE| z!g!l^ij%$A=`4*#1j2~SJTe}YoB2cX`73g3hH6{)0-vU3R0+Dez(GL+wNOCiby)=t zL?2zy@dUpL=YdLg*@+Ng%|^ z(wI4)%ts2)4(?621jLO{kYNsFq~}@-j9j>3J4_jPeF3kb8YHKKd3}2Ly1gMKPcs4{ z+1Jolm#$zkfk6ec`+S;w4D!t9m|t~bU1AvnOJsDsd#q6fkY<~a0~pr*gZ%*R*QR$) zLO5Fx`oZCK$7@c4P)`Ve0oNGXfcJ)?Ozixc2;MK(DLmI(m5u1I%N z)3Zuu&1BTXWgN7HA@r>VBv@eU3Rc&TlV2d%blAdYW_9+CT;_E&e^B1B?L}o?!&DHm z^TIm&K|7PjDW%yFM22F79H}(Emy4=`IWDMw=Cv&-&H>D;$_hDlTL@=duYHdGKvrH6 zR~AKfW*^P+b*SRE`#;ajKE}-A7oDxkIJV8lifpc{O11$Qh_WGOGrXOd{BDoG* z)>0}4#BK)z3W`b`w^1|@aht+aZiD$9nlDj8ImkIrP~9yfkT(V+v$20-qznKpGrB+y z7a=ur4bS}~uyl->m08>m&W1RenuRha>CO#I8$aU&iK6PwB+_8U37hhx4GZ_ueBcHR z)3`Plauy6_9Zt2p6QZ3?{s3~W*<-nafx8?NR}Iw`RwIRn>6f#c>*y(+dj!97LDcAsuD$6&=6A9$5fCRQd z0?vfGIC<(gTyMr^+w+CIDXRE3a$3q^%^pDRphBvhv)Z&T7B%!@121Cn1D&68SpB*t zemlPDb@*aNLoX_W7rsIv{9=9Z!nX$xUkt;3+`?M>#iV*(OwsVC*7IVvUffmBi}`x7 z!oFZLmm!NR>g{O;6PG3&%537P5S%Jkb%t`Vq}0vC&K<3hHI=yY3YHd&)1 z)Bm=$3CuJjdds*E1!cBxeJ{X1))>}1z$VlIY#e}Pba9}SUSZSw?McYC_>g^erGxCI zCMl3vqWa1~c1<0~W?INrI?%rDwZ}obCdaufyyb&-XC2UP%n@;M1zdYJpLC%4u&vwk zuubt{TjIl3Q3tl^4z@Sy!1jg@n-5&&o(HbN2X2-R+-r4!TL^Hd^?rfEfTI{Z`!RA; zhU;N(r2dCwXRmY5e9pIf$^R7VEMCOSGw5jTLfIk%&E!HU*09FR*AfIUL`Lp}2sbP|U8x{)We{%$_{6j+i`JZm%>cOY(u{ zFY@Il?#ofZ>@@Hx4mVAF3#yxXRcWvdSbI8*;FP1Y*Mn0LQ(Fr%6>7=JV?f11(E z@<+4CAI-u#qq*OWX2o}oW||$1Kb%EB&2Sd^!)cfUE^)(ow4ULJy*b_?0rL~N%8(;O zndA5?t4##W6==$&8XMi)iJ{VHzgY0{JzfQowE;FiIUvWF2gCgb{Vc6;OaisC#d^=U5V;3SN9pe?o+GyhlFtWKt#KNKZ=BYFxK@@RSPmZ2j zhm=TR#Cb+GIvJyXfKp2Ygbp7a>~Gj`S1TE8px?r|YZvuft`X86alj$**5NiDrHP!A z&b<^qN$fp4P@f%brVQeG=}68*gUUF^v60P6kDQzyEii}U2h~@*W--SY64~?8oX$b( zH4dC{X`}Mo`7lKrMUAJVJ$sEqB>h^=*7s?GBW7w7zV1Jd(&l(dIUj*}XeOGOTVfod zKJJ0_GdIx9LHl~93pKzk%@xIDfms>z+6n)}E(zlaZQ}=z;Lvwp;b5Qes z4|{e;IjtnMTZfbeNawU{x=`V6#o7xLgG8<3*3n`+p{W?1oC+I~?O~m7>zNCO$akb0 ze3)FN&pGE8v;*;knHWRwyfHu>M^>TE4nykj*W`ai31D%i--0*3H5=B_YO)H#pJEB0 zmFkE1(2MqZakpC$Q-&tYyJ>P5c)dqwk@3vtJg@8#`Bi#AgN1b{khysmnnVe3HNnlK zLfXNR?QkwNu2y2quLqI78ZtIGvx-ph>{3kyxvW!D-b}XFEtU?x?Aah4*jknjR)P$N z0ENM*{C+c^P0BB3zB}aABhSojo}!G8zX@LEH3#PBdLXx;L&qzqic5N@Mc2(*mRXy_ zBrWYxp|A)Q%@vkDgV5GccSw&&;XAoKo&>Ma)$tv)j%F|Q7TG+phpvtV8Bi|i!G)hi z6hDZTqQEm|0V57CR_!LS97-U%!SJQ9(+3AuGoDvurg*Qz^2+8A_bKEF>LHz$d80Y> zb~mq}y*15UHoR-EDB-5Pqhep>oA-zyn8sR#rTn)#e~$1po|T4oa0jAjg{mvi*h$7xccpJ~Pt?3Mx&4eRp8GoR;{7kQC4U?M$yyT;9d zU1PYL?6Bi8zeVGjX^yI73I3L|(Z9gZgul%)CmW4o%O9qT1z7JeaU!is+AP?qdZ&fm z#wPd6<0^K2qae7!sVwTP3Muj|c4!f=BmNy(#Kw_7>=d+O5pQ4fE;`6eP0UhQ<*C*s z79M&g-X8=L*@8b(`xaOQ`R^*H^P=FdQ3AzV9vxNE!0yNjYd!9TfOA)a07a^_2zWB9(%biJyl%5hMU#B0 zw=uU~Twy6~BVKyi{y!apI&>=Xp1*IQ=~wYOLNK1{{oJf%_tEc}>GZiwX|LDH{V(N% z!vEB-7e69}2Neo#Ili5zqD+?y>gUANa|9(S{EPL<9!DDWmi@egmsygTk|Y_fFs@IB z2HxR%4VRkWzyHfhv6sL+RGmxt8N=}I9uCP7Zc{e z2zQ?=ndn1tWp?y%6Q)L}q=}dcr=z8fA)U=g_v!2u=*;m<8`I)^yEe#mmg|Qpg2Vc; zQ^T5ye$iZJ29xlPVk2RrmEs-6WrC07YMRFNX>)SRPjazMKO)ktCF-z=Z9x;;5kLGU zz%ES`(gb5INw=3ML>Pg=Umt{_2*00%VNCP5`88W}3J@&v849!qJlJ3IctCp48Un}m zA?zI%x(a$o@ZpxAYw$XQRdb3uE34DltLSxpFJ)d?Is&z>YRwWB+#h<|o0x9yT5YwG zgX)gu4?@Ue9;11db4RvJW!{Y7YIcFw<^s)C7}Z;Aje9f1j2y1JHW4Q5cM-8Jm_@-=WbC4 z5S&-ZB@13^^+&fQ`JAqsCSfYLljye90ep<>*#Y)4X<3ww@u7k6bE4qdaJT$3)HiCF zgmhA~xe8Sag5~BD9k)QW`CG`}5;torQ|b97Md4b_tbvQTc{Cd_K^7n%Tu~sw?AE5` z(I)Jk;94o~vq5j^h2EJ03@FE@jS%l@Sl z^Fw`D)?YRPndTh~SzSZW2TT0wegJ+gxA4E0BgWe}ri;_h7((L`@vXg1RWmFiMHJ?m zUKvb*B{S%wumSQoC!Gi~s8LQ>r0}^-R8YhpJkyeJ9Z+xfXOr5B1#JvqVFN@y5$+kMGLW_THWa!Wg9r zM|mS;#K3j9Db&a-m`IrA%NSE@wGAt-q5xmhICzwI()k_;vLe(Dwn7n>xD2 zR5<4?3dzpRl*G+DHpoOA>b^rPRnzpg(wO@tZbsg=A<$ICk4~dzK3Cg|>|T)4_-Sh? zeI7}~w!SoM{n4QH%Aj>hTyM_kK6C`_tfKWMm@ZnGU46c)*5!?5TYoTYeMQjv z13~MQxYi%=TVIjdy4}Y<4%)d}VS+T^HUQ7+`6J@v&5u8D3*a)pQ^o zychwnGp)y1rgZ0NriuWj>>BqzbgElKCd3BTjf(kwcop%TFM3!0V_JoY*%if{A!Gfh4bV=DocmRtW5RFQ|paSr!RAu0y#WR+ed(#B_ zW7CW2;PZZ9`je*VExa4jbO^(YI06VVfRdZSZzTV0!s5IW^4@L4qN475M2u<8I=&6~ zIgH7=?oZ6)?`_oQ=|kOWqXoCxL>-o45J${X$1nav8~*xlqP4vc%_*VbABKXj{YcIVtK5{ z4rP0h>Q8LwHTIcv!ACi1zcbCBF$Vr$D|a6RPv#niDJAY1E(}$gT#LqY1^2qNLORA) zH`y_zy#)8J6$MG+*${54CQYKgW7R1_H>Pgsp{b zS^fxEK0}P35{{2ybY?v6Y;`Sh*?!8gRn^90Eq@3*Aqh98uECf-LH2fbyQ79yAa$T` zgpOw;lQlKdvgA9gkf@3QN;-I%t(&h26ri`0gJdCkNx*0u$&aixPK*ybxC+fon29MY zy%|(maeFkrA-d%G^m6|`Gps@&)Z~X}1@Jy&<#a{X4>K^GC6m%fJ`I{jvlQ-5H^!Vw z4`etir79yNy(7)OA~l)zcg2ejrP7aR+kc!iA&*31P1ni+(`=2(%->w-c*)#Bir58* z7$q0W_lW{{t5*_5A$K?09R>GlI3`#0EVC55P0hdx%sGSEA-(lkENRYUzWr{9vB!f@ z>5DRI$n0m){d##F?-e<)g_qgh+c%@Hm${F3SVliDb8jy%qraEA7r?;n7LgqwDah}B zkY5Yw5+d3Q1ycrZ5$GIIeL?>J0OVIU_Q_kh%j!#xWifC~U`2mkK;5qdr_e<@g`Ni` zKbbs*{yL~dLN2#>#>Q&Q=&!-%n3xFO&8VBavHkb#}6lV>z0vIQF^WEt0O3c^rj5ouE#3X8K=>}ZZK?#+@cR#rt(rOvRAX6X=>h;`uDLkWAzJekNp zUj!yvAZTTw+Id>e0iDph?!3ZJDD}gsmQphdFToP;Fw;ru zDn7dngMWVuhO3YU*%vbWomR5iuf0xYGcJV^!bU@4JO3?kRKKgWA9}x^Ri#-EJat}? znNY7!$cqcz=(|~k-ahleBR^Z_naNBPs_tt11lq>9+sJ2HZ+DZozV5W%>fVr6uas#V z@1}8`rg1XUsAhP)-Jj79HKSuSqd9Cx%zjhT-GWk9Bv2eAv7LY-Kxi^K!@J+TX3#v` z2Vuuu$h6T(QdbsE>XWQzr5-)(`T0;cQUgQ#Bbyi0nl=B9Z!k#PI)t#o+QcX5>PWXg zda@6-^0E1^gEmp^)+B`*jcP5iem2FCa&IfHRtFQAiI~ZZbW3-qqx0bl^Ebd3I!jH7 zv4(HQukuQjKV?;nHD6Te#qxkBZk6i$d~;pTjB2mb5$vyc31+(+&6qjf8dXSSb(T)b z`#kyw?C?LPq0{f+f&Zq4PA*g@hECD*IRmYh)6QKSfmo}n)2ggl%hTx%n6;emYFV?E z=^S?VjCm7q>|@6FL@_jtB!j+nlPraubrVpcnUxl5Di`rSQ$$EV6;xIxiJPeh!69Akwt8w!=_PkXwGMHZEk#n?R6C z1WRlWNqmZ%u;c)?y<8Sv#pUHR6O$1FFUJxTtERn_U4b97pqyasC&p3fGL=q7+$Jq+ zjfJ`D176(C3o<})sf*T;mHilO&7Q|^i{#Vcer6*E6FD2DU9@L@+@~WbuLbc#(uF>O zuE5{*b+d`g5Z%JtZ1dIt5)znJR9S%Pjrn>uozwnfEa3*Lw>5jC%X}EM>CWmLA{VL| zXhYj$%p+ap-9yTFDBy2b`GKvHhV-5x(D0jjx(f{=y}yO1M#ua3Fjl3&cqFx^IvC$2 z^oI6i9Jbw9QtKT{y~(Z~?y@jJ*WdGkVV+X&EmwaJQVL|t6v6T#>1J1`?gK*#^}ye* z@)KO9nh!b1UUHC`czu2DPrW&=&)3w>EWTkkR;skU$mR zS%octe&56V=>5Ho-S5@@`&az;vuQlW0e_oICO6Zj?juoAlCRst@%0g3DE&NMLnu9; z4f&ZgM6u(|MEFaPr^M2(qOh1b$QMcrAoA_Yq2-tTdn}tO zL8TV-w}Kt!VM*Q6RzIJVx>f59Es%A5s|>H{k>gmU+pzoK0ue;Z>|&|caR(P{xFzrQE&iDmCH%mF6EUweRJ~ zLY7Z8-(k2h1d)O}*HYPtevrm(bjB||?^%h0goyQhwvp}P^7bD0|FQSxfpt~o{`X0C zc1S}9+EV5rlu{JEX)`xcQATYo$d57Lkb9Dx)8;l4IVVY5I$!}sQ7NN>T0sWkQU*~$ zi#P!qz*#8>A}SRSy$nUcnfLR3*53OJ89Rl_+dq=C_S$Rjz1Fjy^~~#8di(jSqP^M! zqGQ=siYJP0oewQXEk6Gj?};b z7?KJ$(Z0;D7CD1c2!Qv3=YUHe$b{c+S=gumE5S-zXJVq}A-e}27ZWd5io+s%mp)%U z-bFcjcarOeA(1-+YZF`08wT06PxE8v@@npr3&Ht^t}E1m6hew$ttjMt2?(xt9nMBq z153GR6$nvug1vI6NN5Wl__ObJ`aeYOX25(WDwHBCf1|^$qsU5#L=aiIHezP;Me@(V zYcURwx?sEH9b7U}?(zJkt2BI*9;1_c9g7LJ*{;)u|GSDoC(=ewDLTo; z>gF!BOVA3(mAas!d(K|V2*!E$7G+|JqBVKvRA+1Re%g+GJ`=&dVS6WKFxI{1}da4C5`dEuEjIWJwZ!QX$DzuN;iKLJSKHJ;DCy+{<#lDcv^nI1&aE>RTs z^Gi_`&J+jh=a2|mdl!_dVt4PaJz&Pypnn0 zn0?$2VD_gza~}Sd^wg}ks|jFI=P$+OemQ>%_B>+J_C3IP=j{>(S{5}T^gvUi??J0@jTxF@lSmg#vJu>L(t3gmiKb_ z2^M|0MD!s*5+Hippb)*2?pBm~*DB$$pz{sbvZnp}eUQp)fgDz!$H|^vG{yT1R8-jY z$)z|?2&~fvcb=Q?y@(Bk7;T+&^Zg|oBZ#@Z0})`p<-T;)z%NOL9O_fd-xoLoCvO(c z6as&j0Zn5=Wz>ULI5@##9iwl4&rQY|q!PLWR+~G(+|LpXk~PAiJ_{WC?X#DKpB?A@ z6W14kn&WfU(vSHvBFuL=K**nQF@&fA!S@~hA>I5amZirpe-Fhn;ou#_m8xr5%NKZl z3_F{5>lWeQ2KVv1i3(-yevea?XLxs$UrW7UCEQQG;k`LX1+&=OM%SIqMz%)>MYi){ zNhF=WhV&%j?brJ2L8v{vCzhF`@0Yz6KYo)o9zW6xk-}|o^SC6QKBZRp$~Z~cNF5W1 ziYzWJK_C8hFY%K^p^<^C*xN(XsTu}&>o`*GlpH|q?pd{WVZod5B9*(A1jpG$cycKn z+qcvkk8{PJS~wFG<(GZyy)Tvkzk`d<&-bU^tLphA_5UKNC8w5gQLf;(oA6Fg zh9F;>)1p78g_2g~x5#~mW@bb2HN(6^K^yrka^I00q(yE&P~soyn@g8TeYCpxw!{6Y zT|*5@X5sbuO>*Bx>PMO^h+YEd*I_X_tdptB0uRbG9|aSE6s3Lv?amVD%Y!%0h+99)|L({c!hj?(+c@*H97@pwo{s(WtR~7N5nl#r^v3?ctdx7ZUP+ zCSkCTkj)QCVvoWjF`mDZO-OynUdLPBwlySFqRoEZMg@2Nz1MuZ5})Z`UIMor(iv;x z`{yocf4^I``M;=AqSL)N@v!T2d<<~E4fW$K8tc8WlJb(<5uH}qzNrUd^DlxtaKQ}e zMAu!s|0cu=A_s9hIPK3)`_oCz3>?ZNhLpi!c-!B4ZNt~4<2K>@s{J73U|%*w0N%|_ z<&+Epc_oEgQa8S_mv<4=+24CMx*rMq!i-Lb4$zoy=TGVdpCu#r0ausAbBeo zI7s9(Tz)t4$Wla#arq4Aw-A!OIDZ(Ojvh=a{yp8A3t(lf2t>L z`ddq!?eJe5*R-2=!xCu~k8#Y9%4W2`eQ7xl(1A^aB8mcES5$Z!0w8SkS7)0=?2|Yk z0;{$9#?B&JAb$xov}=mA$Z$f>(NhySW(iW7%W@wjb>*bebG3kOfS|*tf5-W3T&-ow zb-}jcq8wKF^f+K~C6s#-8{{4vw;^~`9YoBZx{fcwb$gReCVwCD^V2VTv1w9JOTF`C z+L5U-u;Xc$!27%#wV$xZ-}Q8Ve6K%sS+RFk+MBf6JIj=7!q7?DJ@rA8=Ifo8_%3I% zPZzyU;NF#B^}~yH_a0`KAr)ly24x9f&eh21bZFX-lw|_er76EpRAm~(cCiJ9ps0AO zkzw}t9w?p5%{{!A&Jw*_7{w#mAoO+k**;21x4-wviSu>sZQ}TG2It)$DoXDYTn-@K z<>F#5ZfkJ5vtB+;?46?Lnc&-ej2GyJdPO1U05-Ti(gNO}9>Kywut7=bWyRj9b9MXY ziX6FRmHC#+(JW44xH81Om)|O^W~AR6U+mR#XMTB3d(}ek=I6dewTyk#wS&K5@LGD4 z_g;WeT}CeC1BpO&qX_#-?|&2nvUgy~wNbK&ZgEtrQcoPj6Ar1~4_wSXbqyBSaiud+ zJ%YqU(Vd@%VH7v(yl+K5xFdSs&ocT4MmL$-WD?xQwzl_c1#Q4UC0pC1O+{RLX9c#l zsBh1Zkaiz;3h_Aa3L^A#ySGLm+}6D-RzOuWm)j~=kotp?5!eD>B~Vx${Ad^`{DBaz z&xFy;pCVxS12p*~C%`$_e=uyrrVN&RDJjaziatn_FQvjJ)59ist!I~>4{=TU$KdlU zD_(e@KjmP5kDL7|2RW(|HT^G%nqLBU8x%QSk@Sz{p##gX@0{mP!Nk6R;8tusRlyeL z=sEkurFTZo=} zmFM;*oPX-o$W6p!{*&M*41*JkffEOcO4k2pxIZI$=r#M8hpwLeIfyO&+aL@4|6+kh zPzg4iz_A`7(s^&}-o_0sz@jGe@LxGI>`VBj=$f|-qVR8`$U-LPLa3rI5_iV%y!P;m zkUR$Hz8LKKg95SZ&y919c5}Yyg3?e?*fcmTCB{P}#a?I7q#93-bi3WXM~WJ}N69-h z-JkCLblF^gBE(k@hW&8B(+M!%)2OkwKO^eZCG_gh(sz>aUK^2O-XF})4ak)4j_gaE zB*U;atw{2EUhoBgFmVC?LgWMP%1Z=jHmy*aW2WjlkLXur!wc_Or#`-l1yK$EF!A}$ z(loMCrSh$wP{#df-a|buG5URE6VM>;#z#?IY=#U3_tLq=XcR0b*?N!9JR!CAtECvR z-A(K4g}rQNdc_~VpZc^RWZdez-a6kgJ5HVy`0i$Fpx&Vm*jte?i6_Z>Ek)@>_E6ejX3cEf77h#lQn*pJ(84t%7Yq5xB1h+%v&(edVT7b!4*l zXb;H=FY%{eY_-=DE+U}(s;A7~^OOGc_w20Q35OjNAJ%3t^|KjF-O*|x=q%dlNKjg| z59|D9G;ka-yK~gy#Nv12re*cAsCDM?#PeNfZM0(VWW^o~fh;eUQb*$IAqZpxq;PdM zC0sWMCA?jfum&qrbwCU+A#yC27`_k?!>a>g_$0)zhP0g3Mw&3a5^Ohs9_k^Hl#4fm z9zGe+!)uHl)_6~1w5uj(HScj>35eng0a46)cR&=elgcOl&6R-lUcnB^M?P{9!tb)N z(ek@QaMXGA8~|eM_Ll`Nj^g(#;4KO=H{OEd+jz@O@RqeWsuxQ03-XD`S zc@GZUTf??ck>+XQ!v6G&g6h>6XAbZ#H|oBJ&Z`fa;CR~>P3-NHO)2!w0d$fAl#5GZ z#An#6KY`O)!~ug5=n3-|@OpGj1cC00jM+ z5cpQO&d&-~7hjCV;eh>c0DA!ET4iyamlvaw{Sw&kUHUC1ri=&(J3VzH(Foes`xQ@e z$TCR}NNeoo!UeO^LOAUZ?*CfvPqTC=cu2{Iq9?9fhLWO6DIn}3ZmWRa@X3{Y<|Prui})^4Z7-;NF=f={KNBG%5_t}W z4M%yo_v|u3xDNZM^1OYForbRzB>5$5o6>y0F6r0mQ>WXbuMt@*#`8rYX7s9G%5kfF zCPt0_T7V?+tnqD)z+RfgJIri#4hEn-OFhm~Il%j-QlHjt07 zwIfgE)-)MrDkXfG@gV@|5TaL3zehK@qZ7S=-fDy10O{-W_ac3LjumuZska~Q%d&G3 zU`ZXRd4SZ&?EWl)H-zKimcjKR`R}e3OohWwoy@c@SWVD|&mvl>#l|2(EEA8R_QJKOC}xvGM^#kj2rdubv`OWG8R1t1Yjp11l^o(zLN(E@!{UKd{bB}dNO140l-uH zDT{)E?J3f>Y!wJJdIHsz0)h0A{y_w=9$Qou)T*G1g2{AQHSJ3r(iwaSMScZQ0W!9mu^a>O zFGwwFe#1!hd;~aPdHoD}r8D-*B_G*dvG%g2?$GGj5I?k?mmW-GE%ra-Prhd!6LgW| zgRDQ;VDz?ZOD+)m3d?Ggc3Y#~A1`9jI(5v<){uhpv_Sywh~7j@@^r#$o+MUo8j^yJ zfxC1i%jdjR4VbvuaF2Q26vgM!2oKN}_%~ZVshIaNCl3cS#~Id(4i>I$WdF7(%0FUr zshH+{nBDqv5Z+4?#(m{ zYiTpd-YJ=3(~5Lp9@)gNO(rw$Dmj| zP*~UlO*8)_=>MHM9q8B2`QTkw80688me6?|fqX#eG2oMubq#}0jzgK(a@!%4IetDO zkNDpZH^b5Ac``m`T|DCT?Bd1h;tNA}@iOb;+x=O^8~w>iY>x}`TwqtxV1LDUl-=#` ze~~}q8Yr=nJhK(#)p3Lovt}U%h7BL>C0585?>iCkAeE3zEiCB7ca+a!TFF9-!}!ZM zQgc&3jpH(H|L&6^ucf^n6jOw3UZ=kQYWYU->(6`nT7dKW9qdmeZr0AXi7>-C{N5o? zpQToPmKYvfe~0I|{`@_^Z`bT^SQEMg)le=$OBm!_g42h035qlh;S%(xeBYm#@28C% zgO|YP0Lf(Ri^T`YDQE$JBRd5haeNW$;@;kmW9!l68psnxuVDjLrDF-BDi#?`oO=q? z7_j>b=qh}}V7*#8pta87?3x>@7x|#Py z?4#VM_{&fm(I1?@adnozQF~4P%;q9cXpM&TBE!n1NJFgGjOS6RsXUK?fH;ij@d!|q z_lMp^F_!f(l#NbI_$k~>V#3`k*3(}^6*Fby-;;@*P3FV<8-wURxdXvq2xXNH3mwGa zNYJ`&(u)b+MZM(F+)u34yBvNT$}&L*0SBBflwmaa>YNkL?3{h%l1C@8i+J|oF|<}B6Gcu;uZ2fI@iICrJK0k(|b$-{u{7XAm!mO5e&WS ziTe-*!6#|g*OiKBs4cj-0fX|W+UC4B&k?f*{CQ`tBc^XiM@+xr%l$*(OX!FZVyw$W zj3+^i8l_gKPCDEO+%H+UF}V8$e9AmA2zq4uU$zcCo($0A8bc3xW#)p*SsxE@B-<;K zizDLjkfMxN28R;L&WJ^E2rw3N+^HznU`GVHVPFzBignd_9Z+!9) zcsc_Z)NwM`bcUe}zH0}+J9-nRQ9(0tGXH~`I29{h(vxl76ge8fsA<8mLmD-)V-j0b z2MMlKyv^x`DmN6`X~qN0m-MjY1b-qkIHLU$W$e$ar2}LKvw-jn`B)p8!wkPS1_)k*c+7!0Q>5zwqM3=t1LYZOB2q>j~ns=SGxJ%^9dq6Gj zTfvq+_MMqFx}|oe z8w)lXgLqWJCP_#Tb(8!`7TC}1kp2OO`}>_?ZJsi({#@A`L5zo2Y{Vj{t*_rVdt(|) zTeLGUxJ~A(pRP!{jsvBKF=b&2<+op-zg;T)PgW?R zfg&Zgfb-awvFM9XV9}FMIECnx@;vFs+464l_c_9Z%}0oW&=Y|vZ*?eRuE)x120EF_ z_V6}h9Fs-P;lZSh()S{HRGj5N?`Q0=%dz2|x1~=wTO4`-7C3h6tk9MMGs{Oz+02Uh zfguB}bI!bp+NFs!lgT4WAX}Ucm9Mp?eA%Y6u!?4=Xi*i>n$pVxU3p_+*)5EUGv5#X zoImaD{=vQev@?)A@Us~-uO|dU(0mtP%sMvX^;fNoG=IDZ03v9RxPLys?4lgb8Yop4 z-(*sRD$5KgtDVd?fsXZQqC1rYpnfh9KV}NN6n-ce{3Et{TbKf!aqt@AMuT%8HV$nK zG#hWIyuDsBx+Kt_5|<<$?MaN7y3T|~HEg92E^8o6GuIj@`6jRiqLb`M=0MyAO8CE?xEE&Yljd6&*Q0x@i*Io~JT>TG zV+g^$UH|+&kM;e+nbZ6|_xJsh8UCL8A!C$ma<-uT!^XF`(Y(V(^P^qI5ZwC<+_wf} zsoPYy*@e4!?}x|-d`a(lB=6I#~=a*r%9wrHVQ1cg`xw6iibK_J{l}6j-S>sfjVv) zfx>oheWH^+>9icnLz;_f33rii>@p;U0|mMRf*mS{grK?^@9oS06MoL-h(kCD>y{p2 z!Y|OxBTNXZ9VWave3~tzGYwR|WCtx}X52p3O#xDj42BU7)TJ9+aPD?P(VK$YCcx%^=<+cN`s|!STN)J`1^(1 z75}n>;rd}Be0HkJIPa;#O+{RLpIedFfA1YeyBuBq##pjJ>)y8mHh4XxOZ|I1BwZnV z$yyj}ro09EdzfG9{hW{h;m$4NIqy!-{5-YMt-{K16>?xa2Y0?*RurkM{*>Q4ZZtJ) za0h2azpXULow2=Yqwd_rhTDDErR-g^3qR_zICg<^)J3<+LeNQbeQSiIad54x2cdLtlc~4A%+SO;hPck zD_4u#aT?=Eu*hVB~IA3)9R>;r1pB+{xhC@B^e+v%`iT0bP1_R&V~ zYsV!8A@7PM7>zlSC+wL#8PWW%qX}k^d)NarPU#2+gB|etV&8g)cO$`WzQVZJ}zSME^?{7KK^WD-C>P230T;UtDIb**3&y}*W*k4p0c7_G^m zk{KA4TmY{2p#1uGlFbGS#1CY=`wEL@mU4JptRsnE=uC(30g3Mg8F$0B<2{7pS1GFg z)xLEOdO>c=!Jwz1e6erCwgg|eCJC?6RDNW6?)uGzBm;~f$vQ3ePBZT@>(pQXK$BYn zP;LA<)O!r{)>>7DIxY6H0JxQ;T_8QAChS8J{_Z64&CnnYfC`8KXasPVN@`G$!m+m( zNFDY2$Z`&%(8`XmD+j3D91*IlVDR+6g{REZ(1;57$UTJ9NaW$e1#1I@6}1+8-St)X z#1VQ|@<8x4NB_QdR`@Z!;sJbMBcbIMeDaK;2I#)2bZ}Ym zk^K-EuGG84cc^umk>Mr3lL{`mPs0f6*=$RWxNHkfv9YnE>_Qu6SJ+Zkr5a23z z%5R|v63B1+h8+NaW#}agNWi=<&L2C(q4$k5f(0=v`J2!;k z0-6bHNu5*i7@NS5QEuq7fVZ2(h9AL3W9kF4jYMD(r>9Gxz0ws1Qzaq|0>YK0K@24Y zXA}rNED7DH`?DoVN41YS^J&YahSu9vqe6Sl;5xsSl*a3bhzMq`K=F%2hp zqZji`=lR08a=rc6y(X@Opcww!Am(6HL@;(DogD@OkOks3+ZwEci+JfQeIOUYCDP9v zfFkgt@T+W}a|2 zG&l>ZGYC5fJW=ij1t>{$hg3+mNY2X!ESgaMM{^)MxGCblL$>)ZtknBrwlIdhIkmIH zH;~gA6UuHFf@gXhWR4+NdjAqxfORt4OfRiGuAv3EFnsLBN#fVjO1&FMo5w+wZ}lEO zTlU;(ROqyTFQ2^;&G6?%Wh63cvqWx>Or7tKKLQ!QZN3oov8kv~H*gE<#S>H0CLmwX zwYq45e=xb2Ikxf-IMc!X|3jQSSz6s6$S=NtbOg`gLRJu4KN~=#r98MaZS~Jv*!y_z zGak_!mn>hSkG!Cjaxt467w8SoBPBu)ZT}(_lC+f7laHlvp^TZcsaoDMg6++d^BuC9QQ>_n%xV@72XSwBI@sMLCyFEI-@h~*L{r!X z+csmk)BqA1v|Z*nfe3%plp*|4TYvUjlSaXu$Q|`Krb4d0>qArF;ESdv?DnTQL7RTR z)B6285=;(&y&N{+-WR&qGKpt#9neW7d}~TnysAp7}~1^>pDjv55B%%cz=G=SEoBHfny7%gZ8kYwh{0ZJvD%k5406FU5m2_~=z^(Ip9DMam#b?aH_jI;{ zFRXU!H+uRRo@S%W+YN`V*ukcVJ`?;9K;S&4NQ3xiI7M#@r^vZ$-3&c7mWKYf35E7? z81xX`a$g755zBe*9R!ELMD5IF4I z@wNz$9$^fnrG+!tSa;)cvNfQ~Kjy9WOW($32XccGh)?xeE%wK~v|oy^^2X)Ffk?#u z6)*R2QaL(0^2}`~N`&~CSyWL(O7`l~B4PlKdijg!yG2=y{ca0Q@x74;GKMI4Z*b!A zO~~%TLGr@734D9VIfF;^4>y0sAu;QI)h#~HE4{y$0UdM!F;{an>mj_Y%d*p`e9~-vXFKAU7#P*juOHAp0 z@a)hMb6nW??$8o*FP50&Fyh=3SYqy#CFVG|`aPi~=3U`4S%;966}^kl^M`|HIFw`~ z75h;USZ|_dJ~2u9qIYizHllsJ*Ek7iviB|W1WXLVJ9jqRT=2{{Ch;>oy7IMrs#~U~ z@8N=h6yds=G@t5yz013Ga)0Lc{rwK|Cm+RG1Z)g8Z`kh%LE8pS9KsuM;)ISH zrJTxf+;ErdQu!Y&_nvcJqd#rF*JuP@JOUr^G2v`VI)lu6 zLX-wO-@;i7MR=*M_tvp7vaIMm$`7##m1i|?db`ux^4t5I$9BC(l0voTDW1?_hsEm$ zdE~xurJX;afyU!G_IIs6?i>E(@A=~v5K}Of&V8M&xWuea=2#`~2C`nOKd%*Rbp4Tk z<3l=B{DGC_-dzRc`lKM=**6O4qPJ`CJQZIj%ilzAVsKVf)ai%99{hW}dNA2LH^tT? z?_Q5UiWe=|9z47?A73XAG7x@;B~*@==jOr z)kCr-6v-%pF(SvCmz`lAj!2ZjB5*qUVBd{+B*V8@){`AryDmSX!x4^H&1MVpR zE~#SaHtz)I<#i4U(3NohpzK$%Uq0l^unP# znslL*QOiL)I%fSjv^2@VJHf7p>^>a~oMsPz)9VkwL+Mv#agZD^yTgOdcGUnB*glYL zDBLv%(F`RU{6is7m22`)W6%i)u-mM!X|Qs>e<;YA&inLXLt*nA*jS#7Bs z;egL<+qZ2|7l!NJhs{jqm6j+K3I~5m$-0npG!`I1{$&O6IIe=A=Ag#u%@-CDedTJ9 z6kb`0T^!~^N;-emAN+~?=24X3BfHv12&3Qnk30vnT$aC5gU^h&(DnaA@O`^?DcS#2 z3Oa}0@#mFvm7X?GA}u31+c5)fL5B+W&q4Cw+Y{{Df3k01RzS+|vG}%p_t=l$V*x;S zu(fD`KZ_%8*}*}m5J`i|sBn=&iV*rcd#OIX%ANLcC;3Tq?`yqEajIw`C-;piS_m+f zuX7PX5$zeYD+DmPt~@eET{%$EqJwnhVDEd&IS&~u7&MM*dqSu5`JuY>eTlPlX;2}3 zdv?h(s^viGL4t9eva%5jdWI~-gCWo*o;$qYPR^*?e#n#CmuG{%;^HC&2U-ch+V_NL^3PpVZ`Ag$h*W_zpgNOlz{jP{b{4c_x!1HW_m zP3m`Wrm4I-Pmxee7Mm}vQbeypZIMX4^3{Vg&kQ`s$?S$HvNsq!LX(dSQ3@1pFl2WF z$~?1{yPE?Vn9*m57#6IN=U6@YFI;VKd>tWV8wu~zVaM8$d5&`0Uqc4JXm7Qk@zC-l zQPb-OaC-;GJah@3bZ~qK^VJ_>N$*pul6v|y6J8W@ExeiR{UHdset;v@MujQc9z#Yq z{s!!SHvSyZVl?Al&yz{-iXC@gJd6)$ruQp+K>MBH&n!u0`GJ(MM4?6^ z4o*4WYBiLN)FXO>2K($*s+yzuEOL(RG=fqDUZ7yd5f+&5kb%RF0*df$OX2&WA>f-4 z`?pF_8_hto;hXi@tx?8C^Vuzjuc+84@i*IzIm9@(Mw1zZZ?S)f&khe>v5}!S!j0y$ zTMpjQl80OTnK%2B50#5}eK<&^#rV&YWk1BMqHGKcrW3Ap6qQZz(1RXGCR4+@Z4mp0Gmb6ho^Izg`w?z zqoL>F^3a>IK07>}+xpLr8e=cGVq0Qt)(D3O?ABBAEduP;e|FS>ZTnjuU`J#iLy>}= z+yg2td(Ru4dvyK-lp!EU2S86XN8?o-e==2C-*>0Tb3?j;PV%ZAaEWE}ex?BTEqA?_ zCYBY;26zA=NSzz(-qR%E3U1kR|J%8i7{g_VNLS$>-I+W-2`uhQGK&LNt4})r6QHTp80j~jxPr9_+{{p8%T36 z3+WHIcKxxZqXQK5rD@)^!BbDzQyk8rgF*krQI4n@7h@XL7k*SAZ`2Xq?JL*%6OQmp z&&^Y9uV9!4(ABnxXIrDU9~!-lnvaR@*$q;h(=e(mQNOH!x^WYFx=CorY0T z#$g!qDOftYI||pP{5?#=+X6fH>su6VuL90ao0L;kc+@?Jj4@hy+*nB40*1Nm`Ip|h3o3|W08176d$ zfslr!s}0@$!qK}K^q=Zo*`+fq#+SgcujGi3XE@qqx8h3-uU^6PsOK+SvQaX)Z`v>v@Yc=V6<=rnoXi@lHX1Wt*6 z2k84-dZe~jui{h;Z#cEycUuol;P8!gab-LB4W`-?Qg{T)67rs`T6Pbhi7FMT;rL;qiP zKOV-iDLcbI46{brLH@L5{*?Shp;j!L)hmdo@ILIV8N5aGo)2y9dk(Vxe1B_S!?14g z54+i)cJ$yK9)3t)9~EfSiub&{T%fspFwo?@XGqYD_B|tjX0)#v4m2abBcdp*RnFHr zf_%fp-j`UddzPH;Pg}^(hx}<*`+J_F+iRdJtJREjlp_+BHNw`rp)&q~C7<*6FPVL~ zf8fJV1x`vIj=pGlc#o_gg_NT#%GNa~ZSkk|`g;`~H_e|`Sk8jZB`a$oD`Xs-TzrGA zy(cFrhmxY8uIlO^g08Ihck?Ea9EZF&-2mfy&K%~of6(#WpTaR2&wE@TGW z7-B&lTI!u^H0FGdBU%QKA-9r7@h&ywU4OPkd0FiDpW!{WtQ^^doy#n;T^fpNy-zJ!&oKV53pwmQlv*E-!cs-#b##PL zupiI&u36<~Z}r(b;_Mlcwb0G`0wjBq5dYj1E;<&aNKJ0e!7d_+7^DD?U4`{7Ze?W`%HnfbSo}ttDyn8ju;i zW=cuFlUz1uQiqvwa=E=6W4*tN{rdfe-jKgPvz_KYFPR&Q{U0lXRBn0DfhNrZ7uNNx zgEcI*e0S5bvI_Ynhxn8CHFEKIX}GN|?-j$q5MuKD*=ay{Nzq!{7qX#)WO%`D9DD1H zlkpQ>*RG8{*;{f(zd6L-a&_h{ZexzsUOPG1r=kx3Q*_$V;bA&FI!Y!&<9jZ%+lk;q zHw($u&sSEJtj|i2w$(|IM!$Z5^mEY8Q&3ztIej&6mYC=R>GU^QUL&1wW5E0IltHKa zh*Dxz$9XSu-uleqjs7^4tp}HE;Je@R3+oD;#y#-MyOCVs=Vz_q#oCCCF7uzY0oDi% z>~o0WF(|Rj3{IR%&2M8NQryoWlCKX^7&pj;J=)7k_$#NnT!1+gk(QmYp5)&~XFNitbsgAgE_B1cUHRfDpzVW!f^ z!Cvs0ex~!5iK|U!BL?{AXTh2j8V7bgv78Q21LJIrb|lsp{T`EA%R`Ai#f^O+j= zePHsSGU%YweG~|AbjVekUq6X!gdt-kfyiCEY*5A_egV6XfIX({g0y+Q_hpWOl5Fx~ z>5eF^j4W{-!x;Ld-B>~vrEM`Bx@RZ}E+82@)uFwNP|m?NAocVTnW;>8bbhzS-fHwam_}8|9S*8rv z?IEI?WrEe+tMFn6(&RN$B~4N@s4y8Azpm}Z_!Xs2G*tfWgrPXk_OeoPa&oEnXfWvy zy^$szC?C!qt+ibaq0bNa%YU5wGXe`5xTg2d;5IPGC3bn*#X7J~xd`3K*dv3c-yLnR zJ~-MyS}5lG`+5l3*@j0OWalCr-Uc=wEAnLT<=*u$;mL*VoI~b}DU;SvI!k7ii7JsN z%l{j{&ayw*Ec+$z^hsaudsEe*eSWb(0WbRm!6+Gfe&4M*WCAbF+M!nTuyA&X9(LrM zkHf=xZc!3YeLZmQJhwx75C;{{cPI|DacJ~`Yp-zwjbOGL!8bTG zT>!o>JTyH5@Y^;2Bo$i2|K8vjE!?%@1mjRvN<9wg%OuK-9(yG`U+MxZg?jT}d%|Ff zsLe;bAbs7d9Nn%qAMFj>EDX`_hFuN++)+#qn;L=&+~;`C9+Wb?|E-A=h4ih=l5(sc9F4 zTOVIxEDgZ{aMaAlGW|g;Wqy`n3(5^Y%YGqY@s^R8Ovu;^(&pg_?i{Eac}9Ujnd?v6NyzXxO3wA78^lg0UC_<}og z&vEj{*fKv>j#jNq47so%E!FQXaUJ~TF8Lk2ExUt19P`WqrP< zpbS2;lCAWVtRPnbfy)IAh;V$DR^GnsWw>``zrMiXYm+!4a$Iqlz7V~W%^h3x&UN8C zrD|BGqgN71%`3}uy16OnrH%ozPA2m^8NE+_g%x2FyQSxKTTUIS-G|cwZ{e9R7G^;UNVw27QOAs(F!< zn`Kr;Rh_$%8re?&x1)grK={sY3h~Qdy(0RIzRGv% z!|$+rgzvniz^~zD1?vZX1S{9KR?b)4_AmZsTzo{C*h2*YIVw@33F!N3r>!z;516%4e$Mqi$3#scrn#0Gj0%B61^OKLJPI zS~mKW{Jz*bW3D(!1uJv17w1?<4+BGqcPNlJ-cAFaf{kGxZ>Daa$?akj>fX%lW24&# zc;&i%lDka+%B%(=Ptrh`5neW#dAhk{F2`!KDd-BX@H8gkIW`l~?i!DKPcC1lTxsWd zg@+Yr4~6&IiZUAS=bcvwDE_v5Z8#l#6Tlq4J*MBXwOvr4<+z*oDuS=3;_6^3YQir% z#D4P@BKBM`JLx3UhjtAzWJg?PP#Q@uj4BecJ{o#6$a)Qk;-+mz0BoJSTBwK_Hjsrg zv+Wm3KFV59lkm3Ko4Mh2z}pWO*?!l*pIvxx0mitb_xH0c-`<5q9B=&>f{Yyovt?n& zz+mly96-s&4v}&B{(wM&Nf;`P!CjqN3xgX6gG;KyyE>H)8Qv6IbH7Ug$B(WM(>5kz z(Ejntl1-bzL=GODi9}@Yb;TjWkM%=ghm9Hfwv{7}$e4tQPfSEP7d?9}1>^is2DaK| zy5%1ljEv0-4KiQEx-rvE5`1(eq6{Q{9ebE(9_R1+m_Ktr4tQM2NtG~#J5(#n+<32a zgG%&J_hh8W9QfCdTL)9ojiha|{W8&Ko@B%DUid;`QK>{451U}FX{Jp#dfueOSZn+AFUhEjAlch za1M{yqC+3&Nl^SZ2c`@5AKF&ELFU?m-ULVO5Ekkp*A*bD5O$#^v+|E!%H;Vxf5|4M zDV*6@3VKsMds@x2IHTzmI~*2Oc!4*t}cEZlLa|2vi@i!-Ip z{46k8T#Ctp3h)2IS&cgQM><#<994fQxyY>*C-WlflEyxyU{SU66fX*gcQYiiuGIUy z4&?djs*OdHl@{Y?Q#Wz0Z<+S+LjDMan@kMOM|N9X)XKzuv`fkI_wugYrHuOBykC}} za9!Ir*Lz~>dVX~lk@xGV2&Z3YGnwQWqE04x|C6Ta_%%hG%;P=ZMwItg(Kz13e&-l` z=Jr){Dc~3>_Wno77{`0pFdvIhr(anKrr$<>D=Le<#|u_dyQlXm`6zsEQA5!_ysZ(M zv2Z^1M-+3I&_-@F^2+(vkH=#!XTrrrY}>qyO^S;&=f8@T(BeAWl@#6SL*oykzpK`` zyY%ilcDX_Nf6MdQA$=+E%}ULnVOZZA)c1b%`ziLq!N)lF)iP*A@O{$3_m4`^u@k;q z3*U3$y}9uHmxJ#QcfxmD;O{j9;QL8r8|cF~P}8;8FPRD+v)IE0z%thYU~T@|7QkHv z>oOD6wgDIVJ?;gc*f~MlVuF4?s-zGPc%TFp>7b+te45P#CM#a>Ifx8Hgs z+>-N)y?D7!dYwL>MCJ|N2bFQ1@?OOyP`(e8dk15d8(;kNx5)23S874A_saqV^Dkne z(qU=@6Bc{_y-`Wfr&Ic1zckE)DSe<{ZQlx&K4p#g)qd2qSY4&;FXi3|X}`GGyOpEV z?GUbrFn*tYgIMRT*hv_-0ps~&VLoBJn)80ai&xIp7OWi>FK*&I-(0--UQq$&HZ=Cj zi`IjB;2*{K*-K66D~hcB)MX5 zOrmRxW=Nbq51Zd2d2$~pQiHkR^U^`N1H5cXlv{Ut|wLjp^5;IfMA0P&UMbJ}nHq`N0krc=JCZHkD3z zUr*o-*JQm3l+gEwBN#93LV-7?ygfU%`o;TYVV>Z+_$cx$*WQhxei3!?Cl)l~9SB+v zv;USo5TRc7fpBmK+u$YygB#^T5_>};5>guap57sj>XNqc~Hq2 z{(%Sj2Yp`uXB3yLb~cN`3%NY)D?JjW*PdNI@WCNnl|RE9h* zz0ZaVec<$M^*lSH+bcU5xyuH^rlDZ46Td){-AOrx;CdAX=D_wL`{6Y2Sz;%Z&M>Nm z@0sN+8?-y|i?ux@evL$h|MQp5O9jKz=7H3D_?n28pB~Wi_26Or;G6lJZTi?wYd)Z-OGk+lqu|$L zILEoLMaljw2P}|5b!Z34HgQSxi#d%MzYb<-=dvBsb)1V@JC|+8){5O(gf|zqZ_s5M z3KCl_tiyfh`6Il=dsBfwHgsac_@UVQ;~jQ%_yq6zfW1E+;LP=b>bCXQ0S;we`1)7m z;_?{N3GdB;XE#(D@5xshvk+tRSp0?|Rr0Z&=Un)XF|8OKd`G#`H5FmgL2W$20)EDG zvY1(MoGoX&{2yMbAN}2}k^jllo1+ipUvDnc$zn2NBi--(icEByqh#eS=rJakBiq=5 zMfmDAR+6LTv;|6X{-VggegiC$L6BkuMeg-bl2>g%B{_di^RKsJj&or<#vF9y1sAf! z5hUEbL-}?md)#vK*=7;yovdwhS=+XNSng`w$sYSnLLAP9oKGtAueXA9Zi@-s7Vj7Y zDR#2Qt??sd5yD*9{>QV&oiYkEb6Yz`1Et_+yNr!yzP&a7?fw2p*%>tUV+-yMtu$@4 z1N$!SR&LY@-U|~p*oNEnoib9!wEHZG4Y&jbP&10;Cxp`QErFwdp_1 zei%*d&{HyG{6M~}x2>p5))uvSv&yoz+;xP{Kg7<*JuT(WS4bg1 z%AX&{BnOQ1ZV&cpj+{YwJEi>T&?dK^lKVrwxpiChW}C#ChI;AH*!>&sSD$ zVgu$6!qn28A&kEbjAxhj`|l_Y_J`-)**N5#GVV0E?VNefWbQmx5F>f}ar`eRDEP<3 z3Hsq8rixT|bBw=PtsUvutnQvvx_MSzJYHQ<)lySmIlDI5Qd3b;QB_x0Ij1FA)l#3B zoowN%y0X5hWma2jQ+K?3>8$3??!+v;q@$;O>tE8`+0mQm-Uhwt>`KLA?eXUB&Qy7K zN~29JYE7n9E{w%`7;$6ft{02Zd)+IF#hO~JmCxgyEkXOB#NAjpYaeCXY@t8C)LX}% zjj80dd3S?vT`ffdC*t@+&kvzrUg_MWy} z=nM+iJb3L^>V0hmiC&AnZ>~~u)`w!{|0-$q_q~n0CCf z4oNn{>msgiA4j5~TY3xMTHyVhEz2GWiu%au8njWqi@89KECD|s*AJ=tS3!vqES|e^ zEiLx+9_dB0I8C!-Ey{{Z%1g@EX&d;z$S|jNNo)5+?*_FYVK#GeOK+OW-FRheuD|bv z{%(hqypOcAE&1cR@^&^yZS?|)lyk++a)S)PL?@-H51a(%b zE79Bh7KVh!-!E$dp>$1@DY>}JOBe92f&#L)g z{F}UIVoCok5BP7o2yjpEE-yi4FM!3p*hk97{g3d=df?DX>PTYlFBkMbkfPBGD;xas zVqR_ePsf)dl2oPT>Lk0Fc;&OP5>k78n#5zIar{409T(CNJm(P(}g;sAR2?(oHy{uhVtj^CY_U>Gj z^xx|3UQ*`Idcc3H8^a533}xP@`Z$M(Zrwsp$iDM%EbY&Du-Ll^nq*&piqi)QAl-jG z8-jEFD!Q=0H}95Gyui@yoJ=gwsLjY6*th;ytkAzECnTHg>Qilg`A3c z-KW$WzwVs(_!FKXFVI?V`g)t!wD-aJl$9oE{F*@~g2Yk7PK0P;G!X}Rmn`r1s}A=o zIWhKxGXMAnHygohF&lJmf3N>+o#oQ+o!TI96np0uG!)O}j?G7dKg*l8-hb=O2C5ej zSp}(2_4WG)9pTR?+1=o;9CD8#_X#mR%F)EZEcnM2Z(<@E1g0lr4Z^i!_y+0W=JSC7 zZPofM;8>aeCijiY?HfYb{tU*h@!w4Dm;(63PgbUdyk9BcefyCcuEBqsw`aLu&rwo` zu3?U6YZ}tI^SjYH{gbRtGpGLXWSVD+7XX|iiVv{P|HM;wY=-?emyqK0Io1Zf|BUa1mEg?XgQGO%&)oYyw8H1HsekhDDuN8pHkrOR=SLwdxE|}xjYL9 z{sGgO^E9Fdi1VYu`KKAUZ?&4;yoZ-U4PRK!=r32U?LU%tn{0uf^4RrzkU#l**7gPx z5BhB5e{yO16)1xm|F0TvSiYLVI({)17Alk6XLljz>ICoVLOt*%@71OK_JZGVXuOXk zbQO6=cRx!HHt=AQU!lJ}mmK^tgsG1L&p}_grS~#j0sI@5&)59l>6McPKJ7iYe63*o z1(G01;EF@@i(+$zqWqCKohvK#zyJbaDI&K{fSge3-MfOUyAmM2RY?ArJ^09Y2z62H zQzL$4o5<|BJ-Ib*6f{69;E**Vlv{%9JYS zM3tFRT~t?D8x<=u#Z0NPCc2*~RY!FdRZ%fhs;rDED>B7QsiGotKU10=6;%ia7gg3* zhhv))l`89^Vy0AC8&zgXHBnu4RH}+f6_rsjQ>v(lDzi$nqspjIUlsPOVop@dlq&0@ z%8E=eQ>x9}u8E47Qe|~inJHC8brqFSF{@M&RbsP=dKZ;c2mu^b)>lRi=S0O!sj@Dr ztjH8IrP}CrO;oCmN)=U6F;l9jj4Csws*0$xBC8lxsu1=)Q(0dTc0N<8m=jfIN|kj{ zWksf#DOJ`+_cNuMsIHg?%g zL6MFn+d4bD^Xh11{m5YE3Q;HTF~@-rc;Yv1w`J;sjt@q$e3^Gfh>oK&AIkXiIc7HYJi+W$9##t{29e z0pM9Y8f$Lv(oZU#u-|xhcbq=8rn=hrZSHLE>S459-JLB=abvuT(vq0X8Sh#WLn7?7 zLOQ-!Z(kDYPGGG~B`~EfVS3scQ$5LK>ynsFOqVb~SAE^B_Ex({wzlaDRzA`F*u*jZ z#_o6v&EJ*iNOZS0pJW$I3td_gJ1L>*WG0WdODCnZb@nB?8y9igUH5c#1=n5RMY^%A zHJJcy5{>qS){YihHg$G)clN~=>fh4VL|aQ^2c;0t8o_~XrnE11G=ITYT2tx9jzoB= zS+~`T-UA(jJ7Z4`l*t2QH4ZDb7xD!A&{s(VBThcWbJLdF}wD z>DW>6ws=P~3+U*eqC>Tb6u0V z;KJ&A<83{O@Gh9!+QF<2*K{u_L_;NwqA|e=>26HMTiY^qws;ylyMa>P9eWX7W^py@HM!3vI$8#~mpAOj&aMa) zi6wF7Tos14@#f|Pfwvr@I@<6zl9_=sc^k zdxaJgA8qgI?8sE6SZz>&Of{=HYM^P;lIrN}=;}S+StOp5LVzit4H$#xdA(PEVxBszdkACqS{9VpxlH90EYycnX}oH(vK z-kvxvr-lnqw5Lt2y1QEw-KRq)PI5I72}#D)pe4~(wdGnHZnE*wstIn z)Td)m#YVSmF-9zHg8JDSjvcRyQ(al8uZ68y1rc32(IIWfmEpQAtqW-YlX3-H>aNI5 zhxb7fW;)&?ySyII8}a(t{P!^oD==_MZUwh2?Pzq@wt~7_7cOG>`tPjl@*Xy^GCGs) zjr0WDzZha$A{n;nsjX&eS?{<6;_24Tj^Npzs>(s@?NfR_*4>#FxwW#R%K!tQrDLbI zbe#-!r<80FS7qMQf-SR)^rE#8)zDzTbxU*?JWJVwR!D*0?h?k++O4ieHOS${PIB+- zo3Q5=L@*UyBjdfgOvRD?R4~eSGKF9m#yx{tR|W?~^`ZW4ZTd~&>) zn+4)(j2yb+(TjRI7N?FC83`$yO8JzHx;BkIc3fLL4S&@_mUud@o2jKK(XK_33IgyTtfdU&0By>NRO&}hDt0VO z<78J%vDh2iTRW(=Vpkg_ktdcgaV z2oXdpLy%GkJ^@8a#f}V!51mLX6zxgHPCq%_&4Q$aH84PS>zE^Yww_#1T}4HGP{jhA zGvIDm6Uw?;g*=Ursb5>ZnUdCzyRVhWZHD6zSfs&LV=C6!oKA30REG7?*_=qFVkZW_ z%t{wLJQZu|X>Eg%*_Xs+cpPHDbua8U*3#*Cg$ec9W08m|kscV?|E7>UHd1A1fK=H- z+<{^bL@wH-oGeQaf`Al`I2&C--X)uK#5*Y1FkMk}kQ#MEzqS_nZKOii?}f>{w@ai$ zb8qXz%E(%+V4Rf&3#8!oR+I;|I}RFfV%D|88Fx>!&uz3B0Fs7l#F~&^^afg`vg&lz(TRdUF$p#`+w zin)`SY>RUn&1!K^7t2u>NnyE!81xtVDDb&Ls*knhiZEnQ$8O8{Dq*`({S4~dvT*ku z&{1NnwZpXVD!sIe4={QB&!wXRjfk2Z}M{83PbU60z#F7(& zVyd&J8`O-&TY8be6OBflm{Vz%Fk^%;fRjis>TF5HPKtLdOdKV3QxHI{&_Zm4;WT#l zbif)HHacAp#7zu$7vLbqAUH876MSrFj@_E{ve4;WjEzx1ywcrQ*pNr;Rt!-2pqduQ~fiWRhq^VX~E;gyql}bvoYO)Vi=IZjVB7tY94JWZ0UeP{vj%dzHug1FJb5X`i*_xt z%;Taw?&_F?lxMChYF!0P&**MPA_17i|6=C(faWfs2Cm?~;2Ow0=V~Q7gbj_POJ`)Tu5JPLLkwB->?so%UGbFWF6qpoQY?Th zylix+%E%K7Tcw3bkqYY=z+xU~cR!3nSAE#8Xzmo3P=Rq&&6(M_drDvD>G7o}o7Ig= z&@n2D;A_QG9oWv`pvk1WY>s!ggqO!S%NoG9n}(d-F)-sOCxK|Lgls$sZb?R zB|}B0T8I&28Q{Me2XiWe3%y8u0Y$_~BUz%2t7z>qIY;anS|*VvtnaPOy{vYZPPaHx z4d-%`!kyz|XhM%rzjl=`7 zf%Rhl1oW6KnQKL+2GgqAj-IYSHb4hL$>tKd3mujMrZMctZA%+lx;wkfTq2tU3XEMJ zAKX1gH&0Ha7a&h{*hLo=hzbI;v%XRW+xz0FR>$$vacYcw=G850m zDPfr7JEh!H}F)7dz^d?u3?K?5I}OVast{v3GT*JEcu^NXexb zDv$|yET7~B{IcAz8A#BC9YUBg7Z^Vp!7RI#=}Hj&w_Fri_ zw=`GZvqRL~!yY%1LXETDgttoqS zfo!9CN3zE(iwM@pzCoQW4saH`g_=0CYUUaZzPZ)zv~{}}tvVxoMaY6(D;KVe~qDQ-bgV-AWMX;5sz(2N2B%2|8q zjVuLZ93Hk6kmT2C%}zd+_()e})0YV_Ty`-h8(I~pC1bH}rdj9ht}<}y$bBG^X_e_k zG!nuxWGq`Ej3`HW^bZ`gT0IDhte6eXH@3^?k%sVNqLnbLr4aNgMc5=F8PqX`MN$8I zVL5TcFOgITMgk?J-8wGi$uwFG)e$NyxkYG2qeq?G1tDA78iUe8E3_k{A#d?7_%s@N z69}Pq@-M@Z3D0cLV#X)y(j;%mHx7BisL{b9NqY#kK-O?!rKTD$ZPZUxg;fb(k&H`W z6%qz|7?QM2B6gK_lWP z@%)LtrPFQZ12X;4K_%1{1C>IGW1tOK5%9q3aNf1Wjx=TBs7{KIT8+0Yc0y;z3Hn`( zzN>lUAIm1eZ?pd4C^%ZbHsTaEz&2Zwu*gPtMdyN&7Nx6`Z-OtR@d8TTVTFf2O1lhP zObDEI={Tv{rIvQ!0H7fC-0@zUnZOE$xe3j{S?oj5nb}@zbMSg+J%if}`c$56E%;2( zG;$dX@^$fM$$r7DfzAT+W@5`g?LlU@rqSf47G+Pau8!0{Q!oudrLeW(pae^#RY@x0 zHq=aaL2)ij5jLex>Lo%Qcul=IQmmP@KHM-8+XJYHT~T+k3>x#a4(tlrLZ!rE2#+kk z0l^BdP)w{g-XCd2>JgD0{F2@k#590s_6otzeXS6gQj7io+vAT#7@ zF$^>kh_t?Nel;$_SOU>=TA^KN#5uKKM5xNS8)`A2(p10!wRvB3&s$Ub#Jlx%GrI8` z8G?|DIu^4F04S^L(7wes6-(Q#Xa_Jv@Rxn(6)N!aE+m_}O{Ygwg`9*r_1!%^z) zV_b^^t0$k)g*_IOS))x>DFdn%I%RaR(n);_)cn0vSiy-n=G~X4ABQSxBIfTjwmvMm z?#%|rBruW%&`CE|Vs4nhT*ptN-3jfih%E4@g^9+#M0|1Vbp4Y!DUxIMHi>Q~q6ki| zU~T|cbnkcNz{lb)cwC0y#=b>nx{>80W()$VvZytNPaXja9TjnDky{|H*ukYk?39t) zSR+d?D8^A27s>u1uDp<9z)^!Mvjv#J3O3DM`fGGLh2RKJrN)_-Qf8Ir(y{5J%nf$i ztvxHkEbRA0J=UlNjC`U0*_>aUu^a zJ%QmNCkP;*l7V?p9!ZR`fxR6XX&yW{uVe7d^f9_{@}Dl9_?LYzC}V1HN{r~QT81Rd z7BFIGQ0@3;*1OFfs0WNyHb$3b{8PQme)@f{7?28qJO&d*C{{%fLnDf+OHsp+R9JiI zHFn3q=Bmt^6g#mqmBs)g%TlaU_Gze+{T!#Vx{fq!Qh>x-2N_|wT^VXy$;PM#Lj0rn z4efU-pN>&Wzv5jMRfBg?7r`*NI11|1nM|^>P&8l~Dmy#7N}@Z6n*6r+T*vCorPFQv;|Ig8ixLA!wjjcpFiL#@OY&@p)zo2`tG zBX24COhS!}UCGvNh@He+cO(BA*o*FGwLmw?s&cMJcUxFsF06g4i@yrs8QHxzb&I!w|0Cs6FhwU1K@n*>yS*vZkoE z)n_PilbR)au&U4+2qF{`tfg>CtHNl4%oAQ=V{L6)dXifdEk_4!Qur2xUi?EjWY%Jm zhruUv6333kd`CoQR|1Q3LOQ>dk3;0Jf@A1bG(FZz^a^8a)bJENt$~AHtrU+0Ur$s) z%h)t*+^-!r6XyLESwpVGUV^8IqWgwkk4UJ6>V!jHl!9E@(g=QW@!%tfNQGU<#$knw z69Kfb;Li@+b+G_sdc9pY+kfK=x(!M}e3=P^d~`0m30UC{jYzRjFIQ!%hC#quxH-#Q zpKMJ}&RdfUL6lYg_89o*5u>}L&io|CA@4j z9JLlQ^;+S?uyASz^9G{p`IF*(r^^_B+9`HPF9T4vwJuJWo!$l^WjWEkP%Bt*W`t5$ znN^ilbTJ;TB46N+$*Zs+5l@;sHBiH)P&7BSf%U#c4}4a~)YG zLjxq-6g4GwItDU+0^c#VE-5dX6{8&led0dWrRhBM(yot$7E&z*l~rJnk|-cAYINZW z3R8Cc%UwH%tyFwH&@(4!KhK3c#*Tu$oosg_Y|X@tWhg30h~tl7ZeS|UxRqdVZB`>c zJZh1@hMt*kW+2cDG>0A%gW?RzyZ}1*ggxFLM8oKvx#Ln)}?esq&KH(Y(ejezGl85e<(hh^GV z;C74b?Va84Q3;Df*CM?42p*zm&gc}DQ9_{`)H;C}P&ez!2pkYm8F4lY-qhvME)JNL zuW(=|$fsJ{)sA5%JKI#pRO-^MSpK5s(Y4X`=n6kX=9aT{=G?Pa9F2ZS$IUZo!PCf7 zC}oC+L|eQ|zZu$>5Iw^hEsqxju_Z81Xt9UEV(OR)U^z85 zktg&B%XfTF$VNxo3pQ8Tl2IoAs1qC8}v1 zg}(HldR|NHbmYi3e=SB#YH?iR(LEW`rqQpI2efw4a@f1-qo%zbRi895#1b69TC33-jZeO4L#we z3ji8;SXd?Rc2Glr5RpzmO}0o>7sPaMq?zbkC}*Ns;!CF$4DnP$Y<49)OtRQ%{4`Tz zAuC&e1iJfRAapjyIw#q5kUUl-8fin>KLRkLer zD_bh7=FF~YN+y%Xh7aN4t}&-~RmBJ-9?#N@p1P(P_75tkP;<&Hs%V)p{9W~+xv9CT zrnW9#-!i8<>;YT08)qyyWrmcj@^Z1@^71e)wY=Ps+Vb+F}mF7z%|1eIo2fpW1Kf-U~g@jf>}~;Ypg<3-cnhasHu$C)YT^Egdb6VLAp8-B)E1( zbx3@UwkW+hl8|I|;rT>mOz0s&E0+n2oercG1e&Sxhl<+6v%vnkp;jG}qT9>YHoB zH)sI*ZmrRj?pow(n0`f#Nh*%qfE7!5yuQArDOugr($d`AR52&$K*j9ZEPNm~y1d+U zwDNM(#e`pGQWPWy!rGJ&=0$p6dAVsC^HkPjGkR*8z|Ec-mZTo$uihF;uc13NEln-e zRkNFG=2X^4-7$F7*lVk`{wk{G@!w%NFQ}+SSI~qAS||{DOLo-(6!iA;yyB zC>m(!qqE8C+R9|Ss=A`Sy1I#JHx#Oak^!%5+L0kTvZ0liAIE>S8G_)r1*&~(>U6j~ zn`_wPJ-cEKM*I58;9EJXUpx*1XDq3_JT%1*oaI4ZUq3tEJckY2i8&SZH5I|@Uq@_8 zG&NVwZmMg7rdNgCaWu19GkSQgvn1+(jkaj0!d&YshZkdXZXhs9NF>aB50EFbyWyA0?C?-23w7LA_f zBXg>nYinDoYnqzsD{GlfLmSsiLaHlf&o&7oRMIud87Cb#gJov#hCr}HJIl*W`z|kc zT8&L=5TvRnjCGWkBXX3NBWS3qXHK|q^($!2o?X*iR~fHJ)F*3l`;i5$TJ$+$#O53s z#CTUL;*O{5nql{luQ@F>Ey?EWQPc&(M@40}6jD*adcv?|+acy47nzk;FelYzRb5kU zZCy=GlHJr1A&#Vnips#-VD1whsfpLM%&w}NQ{7x$l?WfHskDVhU`{U1=k2=?eS-nM zdtOIcaHzM)C&jmDOm$VWD*#1pZT0Mm@V#zkpbNE52B;tcO7P4>fZ>QI4;$=rh>}Sq z14#5Koid8(zNx_)*` zRTB?1$HS*`=!Phjxh2cXWzzsYRh3KT+Xt8439DiYOo!Iw;l-#Rk8<1|T?m26m9<)s*1v-I7u zLL0S0BdGh;$5IxjcEiwQL+UuX!w|2m0gGK>pkZ5CIWiJ7k$4?Xm#*j34^>`gQ@Vco z#J-dk+T!`TD_xi8Sm9GEevy6vv`Eo)m2HV#zd5)1?AbRV%_?&{VvpJ5;RZk50c@Hc zO_|~Pv0C#CbBUcUsUMfhH41qlzN<@{G)txu)tt56YE@6HOJ?UaAJU{vi@vO|#ep0w zhdsl@DCz?X!^=|*{E7>?*!-9cvC%L4?TR+Te#VZ${9O%B;1b_UlMDP{J|;Nhm~tgV z*7%gmEXpGXW7*ab3k*9K3q2`DD6#F?r=Rb-Pnxkq98N6cJdXNltVER`TM4zCG=5{- zj~>yg9Tk9Iznaal#j4_i$EGZbw!v~JlPbKd&QBagkL|`MFp&3&W4L>Liz#i2G<5}T zJC<*>#2I_x(zwJwO`;nA`7RP>(0p$2i~GDTn*!&uC`Y#*kr{{{+V{S6df!P26~&h- ze1a8x?MfA;`~+*%poNE)FoxrQVf@P0D5wa@Az*W&rHIvH=^8xeP@<{zq@Wuj8iKu% z_h7&AJKmJB@l8Kfb>;XNzc&6&=ANzexS~vLSzdhgN=7<-;qD$(5;19Uo~ACz!h5`z zVBYqDC|-*cg~_7`AK&Xbk?&&m_#cCtk_1mCO)#-dt|jJOo-lt90A^gsrBN}QrAU4wJW<0 z+q)auJ`AsskPwP-%}!;%Y%yoF8#0`br0&9#v%}|d4ZUEikm`c&hzG_#>k63liB&dr zcwqIabh^(aPoE3&l_$D(n%caFP_ajxt!@|sq`^QEl;y)+wuwo6g^Xkt8} zwk+Lha@_vXYCGz$uixM&5Q`)zDBvg_%#*_Pby=ld@8$=OIs-jrRoNn_8 z3>_g~aP~(dSHog~0*k@cda@%Spn@OnVt3*xZpeTCq5_3wc53W{Tx+MRad?A_eM`I| zr||=aqRqx6UhrdjQWpK53RoU?ZI^aUMH`92%?}rmJe4~q#R(WY!VR~3Ck5Lr6AXtw z?~@6ekmFwUU6|4KnmG5vLXrUYgm_l4xiP09Y0E5ctJZO+!{c@>C4eFueP3)g-3~YZ z{OlP)Pbm!i=HEKkphg5_EptrAf6He>UdX}8>O38Aa7{eQ4D&f$?Hq~IP?jXK%G)v_ zQqj1kOXEi*(4dHd+U$$@AljTFp&#F?S)l2o1X|-nA^}(aDAV=vy8%VyvN9uwl3)@QX1W z3CHwxI}n-qg4zBo^l;z&{$aI)*SddxLB_IW*uSGl zlXUFrzN?Bl3-9nNQirU5!*5g*-8lgPYgkQV)W6F1x!eM52pX)CcLV1L!!B)!=?<>M z@bWYF+R&fkCnRDvao!;xx~wm{I_)_v(I$#N=3L}_xpXNR{v|IpwIRN0nxj;3fKZ4; zXZ#3%OZcMgr?emOT29`F8ex z^#uXUgd7rygM#dnPOXSyG#Z$pn3=#!s07><+4v6b#SoPwm~>*5T|yOjQSfLn_zWKP9G;nYlF?n&s_RG^7F97O zT{95fudDEyCVGu1t#Cn~Jre+`Zr7buauTtcc@?CTQ|th}tMSWc={&DcxXE~Sg1sHi zZxa43OymQs(LL!cTZ<6=wU0Xp-+oIRY;9SIyk6y#gVV8Rziko*Du5*XyWmyW;ZdAv z0ygDX)@+x}D-N>h;qe3n_yQk{Mj&3Dcxw(a!K5Z~qHLHX9Z4`hzG?3-S5<2#utWia zgD9G@s>aU0qN&tT_9h+on_Meik^Xu(`8hHfmfSzL4q-5gEMoXi9RilHNlCp{BWML; z*Wvy4i4q?PqM@#`F)JsG+#<(Av6Vhti6`o)^-?4#l6r)#xO8Z3{|+;nmrQcyD{N2# zpO}7L_Jk9gvP`hD>ealy+$SNy2nl|Mm4p!*2KCC)Otx~9_?YjQ7#F%j!B!KeP|tD{ zJ#v|vAL07RK~9n+Pur$VGt&6}GvtkP3O*O8T^*3?&glq-(Ue_mNPcIXYxAU;pPzT} z3th8xD2Py0dD0eyR90*2Prpn5E27P<_*-HpmZ9nDCPQivoKDFin#=CPC3fX3bSKuK zgq%fENT~T+J)Z}XLZyp@1vU0aj0oYvgV)1j`%WG`Hl+Rid_mxg;BElP6~9NL+Tl95 zOdVtRByr7h{h0+slKLd7C)qyPPx-NHl7;tq3y|1%pGw+*--jDD$qANH&a+30@om@2I zIsNzt!ApF^K>Pr#$u#5yIg}k_uDPlxpo|2UGlY4q>mpBFK>!xeVrs~2trA5fL#>z$6 zrUO+-5WZuk#HBDu=Qo(0CNj?J(TP-=B7O*dp|1{=71?#6XO$?W{zfh!#;^XK1;Gm{ zyP_)yH4RPU7bO0WiHu!1C-La|m2_S7>Ad*IzWH7A+qsZr@Cq?vvazMx0g1Wr3cW|i zVhnMT1~pALj4+?$=BBCkpXl5woOvqdE@Dz)aq;Kd z@~nK@Bstf?!~Q&y}_%=%X;TO@1c*m=wzXn-(IGcdJm&T9kF2fHq4A z)c5@m-XwP@q%RANow`z(aZMsxos`V7o=SoJke=S5yuXWZs? zB<@s@DUO7LI7ZE3PUM)P(c>q;P|UQMD~^rQzZVnUheiyE=J0&!*Q1}>uM z?!!ai5qZsAS;OZLe6C&Ajb+u~DfnkAGnTwnsvi`I2$b957oARLkkMx2`n+|nBQzWD z+Bw4{BiK?lS(Cdl%k%JY9>-z}jtq&YOXIoezvK4JNf|LilqOE}PWabY1WEWj9xQCU zAyWcaOR`pNRkx)m6t`YA9o1@8@cx8C?b);ES^#24>A+O7!*C$KbI>vZ(W~07D#JVE z!YQ1&dTFHH8EpyJM#)3hEOMTcqXHA9M(yYe~8k*+3erEnFC~GKHy2r5;}t8{$4v5;Q(MhfeOu z3l9;%om|F(OnS}z0n=*VFLz(W0_nPgT&cc$d(Q=4E+^xNKjzVEUNXEO3696?Pl)`= z=T0?#A)%kKO!9dmvTNjKoQqDDOC{{-B1i1Y|HQg9c2)V5Y{grDZ?yL3!il8ps{)+W3sRuOXS zI1=*9Yi&jWgg!p%^VysOK#jWf;$AR*GYyi?D>W?}o)olkpsiLndn^P~mD{(N!q6LNq7LiqB%fM`SRPh`%4EM8&A`H8vQV9bgEp#3m) z4S@kaaoMp(i-Ux_B*QSQJZUDMinm7)J0~On(jT$3EK_{KE^xtC)g*`y@Lmb3oZlsW z)XL1jBVdE41{|wZz|rITu{sh8SwM>b-I!|o8uI{3ZmdYtOs@9NU^P@nyM&;KrwC^? z@YOo5$&{yKgL3q%@pPYW;LE3UB+oT80E41cHH3C*&eIZcpzYXh7ho5YMJIAwLdOo!gEA-WSP-cP=)7 z3UC&frjEo*O*hwQ49zO02S)M|C-VBu+IWd3lXhO-=50YIf)ZshGXz^a>;>>-uHDpt zb1Q*N*13OpWlmW3m|S9@^{&KnhMAKC+2u7=Ti{4?a8w9ZT@??{KnjBFqV`X$Eb^^S z(3mJmB2EMN zbgvtf8t0IZzue`tkPzYMvaIQW+HMXM@Cj>!QU_)hR|RU8`P%04Z)cqcGLe+SNx~TG zWA&yzqbt=CCyF&`xg;i=B!j1}!hW1;f^Ig?(^Vkv1>JSH-R5X-T;7R-&y4oM2ylY` z@iM3s!03&b!c!MhgUd4fq<6sVg%BOU`5`3VHw7wrJ!GMs6zg61(1CoMS6RPgD;zT^ zI3_>)FQlc_HO?TovLbFib*?MPgpyO&o%KT5WU+ee9*sa^e34jk`|Tr3M3E|1RZm@GUuWTCR)T%@6CXTJ8&4&L)a4bV zeL8UZt38PjG){`}j71PKabb;9$D5=q^)UsBf6$2G;mWM)=-_)VPY=GZ?Mf(CX?G9L z)tTf+PI_fPy5Wd-J!M0S3|$|8r?KAGd}seq8VSeQ)5(=0Wx=t;)|sj>_S3x%%39ha zo4`YoZ<@!E<Qxpk^U^){T+^9I>tx?4;nIrjUXb6a}-V;Ijc90|3%;Z443;BYN zQP%}2MHk-nx0VLG0|-o$(5E2>_``?4Nlk?@(Kj+=|8sI|xp%&?eypvFYF9Wwjf!E9QrSCG02=AP7iZq3zk< zg3BYVRk2uDVkBP3|LJK79+n=2!${B)2Ri(`8Cf6>zi8OAV-S22X~=&8fip@B36${w zMz{}i(nQTgR@lCGbygm9D9L`RlZj*>1;n-z9y(=PC;z{yhMlm3TzR+%yL+5gz!XT7 zHeC+Vv$NHF>4nOn{z&H*fP|FX*C=*$_BGmMzl~h3{q*QZSpZm9bLG2$b2uTGF z4{#(b2&JvYjIEdrk46QrI1UwMvh*KSi?Se{lDBD4Ri2S^ORBEMJ&k9|jXBTJF;q#PHwBwj&?4)4sDRS64a2XFelCRhx$sQ7l+gLi zrpMZ3fJDeEjwBm8LT>SWUCJtUGcduBR&g_L#bfGJCVO5A@Se38U|^=n?)c%=QURqT zIbE@83F|6vs1(aHB~Ii(*aj3lsPpj5N}yV$C)^m?K4^CLjtIVOKEIf_q=+YyX59o7 zQ@6uzP{uyEbdClgAl-qTq{ZkdmDd3Ffwe^|b|%Q$-bgx;cuWCMxyfrPq{HJr?bR1R7(5s&P2rxC&PM2hw zo1&eE7Q^3VE5pB*-nlH0*djgWBqJS&_tA42qWQ$ZIH_(C*VvKJ7lJ_l$Foxs0?2?_B2TGBCy5#_gDmnFA`PxB#T6qBGAaPXk;aq-x8vWlQeg)^ zfiUD;>=Tf$?1XL%$OJ&K@Er!@I0f801n5wO01>t#`qd>W(YMRTX*pG5O-mHSi9 zkc6F-`IeUevjY83jVLZn7G82x+*$qL!gm88fiWBjBS4JMvpAdyKhcdC8cK_RU{?!p zkEcX0k^L%1csU?Gj4qj+u6;p^7vY(9u8A(-dA$YaUlF%Wg`^ zRH=!_NhSb1d)jb}Tk z1VvX&2tA;66*P3w^8^i*_%f*NIW9U8>fdWO(ZpG4xz`?;t06; zTf7Zrhs7)G=R&o8LtEz^9BCHl`)@;uM`7Q!Rl)H&G6I?ZwB_Bp%7iK)OLV4RV`k5={MW z8%^Y|)cQ@;RRVv*g;td$yaL%on2&1WY&FUpkn#TE2FRlU89YSKbAe38J z@WE|IaDGqG()A0j;y3?(W!Gl* zbf;np6I`zZI_lu?@atxnNO~NC*Mg^Fi zc8~TlEw(u%Pee0pAq?D(tb|jE#ADsSPkii#oHf4As&?WGEmTI1n>Y#+vb{+jW7pJK zIF(=`ITU3<^vC0J6AdNb(4T7_EJ|+bxcnb9w}Mg@h%yI5&!-%`HKqjc43Q{8+>jHI zShr~&73dO7C?w(WIZJ+^k+n32_(uLH^9b}odN<)k)MmjdX@{PC7I5DIe*jiQdr4_k zB>HV@;5w$M9`Ef6$WP5mafMtb3YC)fp~4uFhVTNH*d^9C9C~KQ%Z*|%p?sJfeLZd!m7>~8OXDtUMDjQcvI*bb=y}&C@a`WsC|q+)!w$NS4d7(J&Z_j`cvs12Dc!j zJ@(-m3H6HIX4*%qKY{-LLzJbDkq)Vk~u4_ zf}Ru`*&?E587xWmeeQ%~>Kim@sD|e$11HNs(1PqZB+LGJZ{+$bDs?&RCBf9$h@-Uww3m1%B*vQ8mY#mJx;8^$52)<4RKZ zv}px7Hxft}7hma?jx#sx0;Gjon%T(^vPKOn)b|bq6m{MH9V<|sYDBZbLz@FBS3EdA zyBC1OD#e5jCk-;-FuX~tLP;)M>UlayYu027O>6ikmTiG&>bD=vT^V^;SkGF~mv6YBT6 zZlL-gJa|-M8<;DtB7~N|Tj$YN7M=>VAy0s99rD7tS{guWyoW~R))t*bfP8p@(y@W_ z2Ky^s1c?S&gAGh&%XSkV7|V=^cLDPvOQ75M=azY7t1=JSB|JE|CI=|Q@ZkJA^|FP) zKxrkp88lhWnN6oc>a2m#!4gg&5qZvo1R$d8$Q@ai2sFYOpy`aIaDdrC;F>j9dT9m~ zBje~0tJ@~Gdj;L#yk87qC7!}jgZBtLZ(FZsNUjPNpxx~HVOmPt;YF5;2+59kz_m~i ze{H`pB()cHd>Z$wZgR?m$Z>YGl!#V`cUSn%8a&_7e+$86aH~xMSUePzQ9;lUfIlJM zFq-H8HpO|M-DSQy#G!atr2({w$V(px2wBX=Coz@59DI|5P#T6gNbU;%DQnIo8}V<6 zN>G1QQf7hdX{nT1Ei4i*^n=)TIH;t<0nL2bnF$hQ*rofahpjI61FWt@h?S9-vUXEE zMOG+<@6VN#g_FS8>}SB1Wbo}MkqY#_74 z2KF!mv>D7#eyPnpi3?>8R%ll-1Fvl7yO-cnN)ZCZ z*7$^^A4fmPIn8Ejb;ePFODYLbp@wTo8b=e6v>UhXKxj#jA;^q1|2W_TT26d-{hsSN zeEXitajjes$q+we0z{YP+fc78J1hUmeW9#YI)SD1l1ajh{#LB$s?dqD`Hs5_MHYzY z-Y-zhH7$fG5s7JhMfA3D{o3tCAD%>psm)poF8R+2|iOaO2AbZ`J} zC=#0`?8^?$nPK2~aWUdij-4)FQ%oESrv^qG0BZvTfQuG6_F!@Q8-Wzw2|Aj(ql{u? z8efD*Ma(IgYG7&EUPW!^0tZJh>*bv2s);=#EUpi4^=Qbg3h^v&kA<}0i`!4LuG~Du zfeK!Lh(}rLGf6rWX+-o{R~_~4VAdIFslS_5QJZbQIaM!Bi_c?la37I zTa5Y(IoMllU5tUA+;^K$8mU`(S~#T5*X=u;O+5V<^sS480|=b}6Q@UtP*wv4KkEdg?MzJ*pO6(vY(|p9 z4S)-PCsMf-%`*&thBa4Tu_cLJy~2%-+&^f$krXB5MA2GT;Nqp$Yrj2TxdP>5@3R~k zz;q-#aBHZ(!eDk3uyggarl}ImQ1OpgYlk*U+2%G7kYi`01i-`QDfdg z_-wluMcc-kkCZk5-HBy;q{X&?!<-&r7$uG)JweJC%|vu+u-ybTgh@%uk)8sb_@^Sk z?55kDchGx^59#njze;IYlGqDYCZ$iDP?7nO=Dyn77{3t7IljBT7cMWvdk-v~_&XdggG{Gepl@u8dPz0tjEFkR{ng_cL~HJ^3?GJ zCfO)J3OSvNqz%n#fn-fp6$vhI?j!(~20shOuy4SC#SffTO1X6RW=8;)X6zn<4ZLx9 z{-})4DA97&rt{p{;Kr8(LS#w*lrV_wYAW;QEK=@IHt_cG&D#agPkCMs1#FHX-H>Os zi_q97N=GC$B{aStQQ1Bxz|ZuA_in?g0h=#n^*E% z01CI2ZyU|277V$t*ir+7H5?DHpP&@)9B3q6pKtF((nYCCkUk{!;IXfP&iRqH1VF1W z_<;g4?`>Vs${e8=A87>y#(e@E?ML=qdh`^X&>1Frf=IFIN$J%`DE{}he-Iz)rI#~u z{`lk@fmZk;%jUw|G@)+lAWfg}D%0=P0U=e&2wxC1}l8vf%aE;JXcG(zF zOV~(T@og&ZFo~fbxR}~R^0-d=mm;87>*=MluGk0~6Es?zlvv`?+jHqT>`I#Xz2G-< z9LeR93^6O;+Yhw0#FDED@%xFh`7wMIx7!I!Ym}!?o#Y;CV|5$BO?1X$Kw|G&P9y`LDa(g=0LfHWH0m>Tec$=z)PILncO~h0WlxtjF zi>?7g11CRZ70~2Us$ma=0zf+{cCeSI+_o{*pHHy@lfOU;ZqDwE;8jMVvJmCdHYY5x z=j9{jD?DJ>1NH@9e+CS6XzQ)-t^DcG6j)JvQ9(^ROR7dF`+^MHmMl)=+8vT*0WAb! z-+}bmKs-bnYUh%M3sg}82l1DX`$oGL8xBw9g+iQxG=M}0?rA~8>hUe3ir~$Bch>0G zggdy1DaaxXB^}n|2_FkA!w z)Cl=soKx#azf-*j-iFSXVR$`cXYLUV+TccHUfe{4T6Cl&>@yc8*Xq1~-+s814q^hE zDoA>A0Ahy4;}WS;-eXp!YG|p5Uq>594$Npj<&qeBV(Mhkmj8Q=I{%+*CER?DLA3z+ zRtULEv`~lxb=amYY(H4i7^;32=98R`OVMV*YKKEanWnceP8Xp5dNA02q`xa6NZlm% z5r`|y`T6B~297aj3-!E^dwIl=@b zU_B<5B2;teq}iCg0AE@7K(AQv9%I?Tbl3uLr3Jb4F}C4+UeOfON(-4qsYV%A2ey{r zv^;ziGf3;2?;pWC{eE>TrAA~eq~BZupk^t6oP>ITj>~?b4lh%RZTlWCJy6ilj4LDPh;c#92<&Hi8ZHqf`J21jPgm`G z3P*5k#gpi0f=#+Qp^k=1j(7$kARn+sQsXQ(al9$&$H-rXbkMqi9TJZ$)F6#Ku?hU( zYM))-!Z+Ct1Q?yOHjd+f>q^1ihqk|dkW@VimF}c%MS)10#t$3yU1TV%8mA$cgbD8+ zT2SvS!RI+OT`h?XX~MqT9T~_QB+aG}*FI8De25MB47jdA_}sI0i#WM)Z6ZY6q^x0) z1z?H)6Yty!3|L!3#s#N3O>yWB95%_0x?I;CD8R0tnNbugz1&D>4jgEE`(J9l2j!O# zQiV^5q!l~+uE26EfHXNrm?0NG6S&9Zxk@Qo70V1kf7=tye3>SXJRd$!U(tBfxZLQCZVUPur> z-Jm_^?zc1~Y9Ahn2oNU{mTRO*Me-f>jjP^3x9CUOs_7}>)cR&8z%zjLZ=Gw2 z|54-!-5z8=5(3a&)7A9!GvmJ>*%vg9$3kyG5$pc7a&R93Cw=|Z;~_X{r5g0dp6~sb zj~dawpu&iz`jKW>@x;z}*@l6j6C}w-s)>aPguLAHU9;Xcdu#JODn`FnBIDI`*FEei z*jZZ0gShA|)HXIc0WLLr!g%7MjGz@Bh?7>e1K91b6aA)DQFxOCm0mxo zivkCO)k_=^wZ(c5(z%ItU5@ z!2<9LP#X&ZEiukbUC0I>oEW(Wg_!XUGbC!-vKRo$#q{6vof$L6bq~Q#vhB$seBbUGB{6yBLSJk_H^v`TEnl z3-vhBmIWISRM#TTHBYMLO&2oJkhzdn5o8dl2Nx*KJNgG9WcdlA)(w&DQc_eb)c z@0}w|JO6>8^T@)JxJ^jq5TCFC>yl9958;(EQdv@Rxdi)XWGs z>#d;Z$bnES#Es4AXU_rq1Di;<49OU~wj46LadGTAnsNFKGjGl-+8I`_!KR;w50*{1 zaLWKp)LaO_vl1usFL3`+TrK1c=up+OL~x{qPcTP9oTrUe_6FbqkPoIl=z`z`lYWz{ zt>dT{>X7?tR{qS+Oc6LB0lJY>Y7S+3BaBt*kj8`j^X z4E7d;=#s#CkHR9L7=C-OK;^WC5}9$H}q7%h(R8~zh0z> z1jY`EFfBmS9<)mTGS$jk3I4k}~qZfKOu4cyCZx26zrS^fle}KZ_UORQNKfrsSE~Og~ z&F9D;*yjb)O}1Q5hb7`)5*9yq-e4b?dtCY=n*HOl1+fybqiPaLU%DB>s%{erJLN-| zffobvq!z*y_K5Am<(7liP`?hQh3<2-y$a8(DA-4FHScaejdz0NTJT#{N7v?R6k=IQ zxK}HR9aINa|NP;tL8Pb`8EQy2F}nef`J-W}$lWrd7#{SG>yNS@8R}223Dm8GfFRB% z4oumhp0e7UQIi1M^qrz{$Ro-gNx!@!EJ4d|=-W(yk=Z0EThJbCAXpP7zQ;cSC&1M- zaAXKKv(~_0-bh9`%Sbd)<~xFSlO|cqrMM^~EM=UGf?NR6Pt=@}Y3$Rdt>5!u&@Zys z7x5kp9J29{=8Pa3Z2b;sE^QG*U9)1Y4iEGt8PB-84u$>%f51{X)Mq~X(xWZ$rP-!A0!fmrBHWgAVE}nWhE`wYj#F09+d)Vb zt-bvF_H#F03C*l=*b;R*dqThfPZh-wBn-gr_!p{IBr4jn)FWAEK?=%3V)C`9#Dr51 z<*m){OIY`ZsifgnS3(+5!#lc__ug;cq?#hx7Y9jw0mMrY0=nvRW<(+j$VD&N)>5tE z;MOHv!!(#(&0sg?$x2|XC@KnclpG3JMI0@!K&8OX(AXFJx#R@9B}jCH#f@udP>kOl z-WxY63!?QWXoGhEj=TDM#GJ1tcY!)od~UFtn8h@NBvgxlu~oH+>?9>U*M<9%5|1zDx|oaBMCDYfa^N*b?FhyL zqGR%A5L$wpoeJN%*hJYp!W3grTZTH0RX$b+E4s9>|we|))hdA4@ zj?fODZ**)MbejV^eCd!K7&VoE}NaxbaMYg+!pAXq#bL>X$exr3waE7=Mt?1 z4z=lEL}2@*2(G0A^=bg+#@$2$JceVd$|}O}gpV6&c@eRG7QTYXf6j`P1>DV#23%9b z&3_~14i{#3KTyNu{^(i`=&7WkhzV4~+`y0?>7q!8`oe-ANAnRSXeL0UEN?)y&@7Kz z9Y&I;Bw?N5vtas2glftub}i7*Km!pgyiHlZ>WNhgJl zr1&6$1>O`E=IL3HoM1i}q!vmiM{fatbrM^+Xm|cP^L{2Tqi7i@D1@a@xTf<|4$Y0= zC&OVcg63g-gDxyn7A3<#CXzw0IT}I5|AmCaSj=oiPp}OKFigSoUf5z-{?9U&1ghrl zVwWB$&^y#PxtelQn1@z3<0KI1pk|6DeKZ}H5Mk5M%-WBnH{q-GTTw#jM|Ptmut+Xiex zC>E%Kr*q+IyeDa#EGekONvLd+0#-k*(~3J!BE4;ZHfs?z(INmAv} zm+i^`*{2$ZT>r z@HUFdlwU2t!v`LI{!=3r5Mq-CqfZO>R}u@086W4s{1wm;hu(%Oh$uo=);0%(Mw%FQ z;t?4T4RQSZ`6}|fqw!{ng(Xa`fZ6ozBFrlxIUVom7W&Qa*AK!p^(gswl7x6L7_2q8 zX25kQuK0bIHfzR#yeFJ0S-oqyl?tJtuWW@YLmUj;OzVgJ)6~`kiy=f6G|Z*~47Xdq z^v`uR4w%ruZo!9AvdG{AX;q@{^u(4D*?abE)f$B2&yOck-<#}SM*%)^5M&ngQ1jq% zf?`kVzmzJ|!&AF!M^vt(?Ik&wq9C9e_W9}BI-?~@11tvEcLJG}ErSWRePiD3abl1S z!rdHF=#psC5N0E);{tEcczScaZ~LIGwW8 zHO3rT*b>80s!^#;7v*UhTCq36m>kNY1?ukWqKPDHmAc8B?yDajA3pft2tY4^@BxLk z;TZBU1>mPRfglxMBl!3J8gotkea00tq)KV)L4Ox4DzHqpOJ~iHR4dM?)uuMN8HOrr zfrv-XngsgmV-YFn3`#5!AHdVY4E}EAi9HH(ER`BIl(}Dq)01do&wE#cU#$EN86=Bf zcbE7UO-=&7rE57pnF=DC*o|Qe;yLZ+uy$*f7W(NwKlv*0`dO7n_!=)=%!at9`E13irEL%USY)1QC-rm z5{1gDUK&JG-Ywi%m7Nh!Z#Da(KIZUR5J}_r*at1mrVl*hU2Q_`E(NJ%12J)hlgQ5C zD%ybypy)%EfM1V{yTpIjV0>U6*v(Y4R0-a17+;Umf5L%nX<#ZX6#xu^E%DRW(=cja5pwzqSxj)I{QX~`%&HT(uB zT_oL~oK5gCN=9l^#0%L~+zmgX9MZYmHS;kEZlfU|uCAvmKy={i$E!z=E}{)QtkRf` zpo_vNr^T(ylwn=y93+7!_eG2e4kmHeY9!ID$8uixT@s`$qx=gTAog}g^EUs;)9oVK z_dv{BlDHCJZ5T(LVQh`&DIhbCPa^CIl@q0D(7#enZ8KYyjRj~N0ZVPU{FHzt(Xn=b zU8`f>gc@vg4^b5J!;9|CE&kJ4cDN~xuz*ljN%Nt2*^b2}CGB^AYb^jN)d882B^q<{ z4+jvw{{ZUSp@9g^WTlW{3Gn`eF?M9lF7f;t(Gpj08Jwd>cz&XdD>0F}fciT=dhCDT z2qXL0;5`>9TPkID>jS!llpI7+Eh#|K4%7{a0aRL%tp-6X7^ftO7!=O2hM=Je7~~EB zbO`7rKb!iI^y)%>@VzHLfY?-=N6Q6Eku*hQWQyqS;vewX@%=X%Pj0rwyX+wI^G#3x%p?L7cNQ2Nj&obT8MvQ1Q!DLu~=jVJe z*iO)1m7uD_HBG%`p&sFzrRW)sB5Cdpf?=%UsT>cdNC;g!b6(jwfW`q|mvlEkBo35) z&S_*XbjH7@M{J%gFl&VB7pXwM!!)Ozxec#IoXi) z1!o$CXY}<2w1Ayq-{Pybx8(uv#y4$GWcMHb0v%hfb=>)E(34syq16INLU)}o1+xM8 z3M(hcj~5t9urvNVsR@XppFQbj=%6sq@*ewc^?|ljtVh%=>8DS(zqX%WkL?{t{Vcdo z>aIAnfL=@XhlT(d<;(F#9aD-&m{`$But9MZ9f3h`V0vA>{L6nNQddj3&Nuf&`VurC zPe_%UpycKs&H_Mab~avFJTX-wDU<<$rHN25Ie020^|_5)YhtmOOkk?^Q&|oRp2^*e&5Z3r$%va@15vJvNP#C{c`G9cmQ! z@3N`}leF<|w&vLWn$hH$4uUkl6M*SzY|M2u!2R|6p?Kfk|90=&yKg>i{vlf4$WOsJ z2A#4b7P#;Hx{@Qb2UanubYBExh3kvRHBfPi@fJ0ji#geJ#3O%$DoOQZ(v>Rt!Q3sQZ>fV7ID7 zEcR~!Ro;ysMojq*7CZKiXiy;mK)9gE4~3~&=w)*rROV^nfu@BN0QFJ>asPLqJ9+=!`z0FEv&m%*NwHVM2KD=|K-1-IQ)@ zSbaka1onan1QtNL5)j-(^pHfx;j<@K!40+RI|_0HDH}p%N2J}>q)zBm)KIKI-7b7~ z@w`OzHz96zmzIMh;>2Zo?6H)uM`)P&<>vZcwB?in{b71kJiu)e4|8UH=>T3Q5Ev6} zXCD5+)mc_MlS7e+iqcy!OgHnOE_;#}eOdftujo&Pv~ z{BtwiAU`IknV^E1a=(8Ow7~L})(UQEzn>*{qFsrijNS@XwhK3S`Tl*xaxJ!?N}m;3BrKZrn;<5~%wVVY=l$vTrl69s z93gT`g;O$&BP$|7*z8DSsRJ$!7OJ5zg2Fb4EAhAJLTzd=vnjUiP(p#Jxv3T4xT{IYT?XcrO-PiR5^r#DS{l8Nz zOsSUM?@+B1356=vPiaMC^0vK)YxrKc{Qk*r4H^1cOt}kX5w#*znkE!K*02b~dwooZ zY><~AI^c$cHGpz7B4b~C=*9vPLkgg=9inmc&>>?FVvp9=&}EM_s~jl=8}Nt(%}X^0 z?g;%J2qM5jWzz|z4tw^f3UJSSb+pvMOplCqHI1~blyX4Wr52M2;dxiQyS=~v-24o; z&WpE?H@^uzf_k8IO^}Kf$lB>>0LJ08wI)8*Wj$P7YTXKn1K~&U?LrApS~`QrJjud~ z{BcoZOKKX#r6$cGNj*X4j)TP&FFh_9Ru{yQfQU(g`)~13Vg%#Q} z%wN{)6h5;Sa(rKuDDda9CEx+hlcs7mQQxA#)_tpfzlb*bXqY^u>karW>I*1{0~oJ| z{Y*5Ho`=UA#jWX7arJObCm31iVd94u(`C-)8F?-JjforygDs~5VijPZWl~^H)uVst zFRsq*(jK@JuzPyLkOT7TU@-{2iyb~RG0h&IR;W0&xWF-CkgA~8^QgGvC3=FdRv zAtA277jl8D7V>8>0O0KoUw;%$q;baxD}=(KdJA5CkwTEYyB;1sa9EvxyG1y8?N*TU zSE8+o`wvi5@ig6?Xg5Qi(ovWgo|X-sqkA4o;FR<;#OMaf``BpV!GSucCm=OH`~~$+ zl#^oEQCUde1;`9-0T&sBS+4NJ@*nyu65o|t0pRM#n-A^v9oi`7Rim+C2Rt4w3)oNA z!-*YQ8d%!Z29|!sii8A95%@6WVQ~ZL05Oso_cMCBX-E438h2934&5gKCL5U5ks9^9(@|#! zcKxwx6;5M}3h|a=s8XR3GxiBJ#xPXjjoVkOI&d2wYe*m+xlg{1V&+qT?Amwu< zG~(ap5>-3;Pn>BkLtRWDP9RY2=a(7~-2}QSF^*(9y_42WY%T0XCIr z_r)&`APNjOvRX(vDA`CB$3KNStphgKQhlD|VH3JPP`f|S@JPhO0tX3+aq)U3G9V&O z#QZw8zsU!xX><@tkoWL4B_%YlJJ6H8pm5H=LXJ*MQmzcAuGIa$QoW%m zW*#T5Nw;di0n(-^etga#3M-6rKlLBJyC(2Onl10B>Elswwsd^J#YhPKgh#)?uplnR zL4_I_vK2a3*&;*p|mZ0r`kl=V7urOQ{>2Ki=} zJVpbDaup^bu>(^UR`k$N1ssoX5t2o7daMZ{M2Dvij+@p8VHh7H-K{tvG5Um(gT5tR zG&PkFlZVm0p`wRGd|89*iPgaGKGAncf<0=17_ODDz~S{?*%ETFaOm&*yXz00$_w+V zPX^$E6-hlB9qU036ybXj1Qo)ngx5Ha+&97^N{hgU8E7owcM0qLblYtt-V3-1Cm$%H z^W(_z2Y~E-2|B9!-<8u{OGP>RM2k4m2eje>yi&xEWi$=TKDJ^wLp~}ko#9%bVh-f2}AslB!7?<^ps>OhXT@k$%av+brk{)5TL+Y4ci@`D+N}Edy~j6F~O3kXGza z%<;O_xa^My^w9EKi_kY3FobXS7;u8}5mgn`pjpDIH{(LwpKjH-7N9^dujkyo>rwzy z?7Nfb>S}siW{-j{XwCI-Uy|Ude;1cpLQVJY&C#v$79a?$Klq!(Bcd%_ty`n(CK{!Z zK;5;Tw*=a6UJM^&(a;>ho(*f^9iqLYfUqzTSCkz7!!PZ-|9Oq;z%qDR;!7TUd2f%Z zPE7=@YD03E24Z>@kV004E*$X(t$-ANA%eTT3aS zh-AvB<8KrjZmF{sgu8%`9T0@@V#aLQ5qWXvX*Xl2N70tOc&bYn-`U=#x018P* zUfWz>i??;MLy$DyMmx+l{dMSvO(OM;7Xs6jSfh0CR!OTf!+2Q}r8OVM@wY4SCU_3J zo2pCjounPcsVu|jEOMyMlq{?%Ti#`f#4M;2j@DY$hR#stqN#WFP! zGgjtfTyh z1~A~?sMfIosyM^xO^nyKk8lwje$>U-0$!Ga7!cAM_>}=>#oLyVg4jmW_$#^BCD;0< z71jr;HX#cD^hjGJ`79D!j9=CBo`+`=7!(R*vVAGVSVgb}#biDC5pNltl*Y}T9UumJs)%{!H zB%}17!UvbrI#^oP^4}+TWmtnAkQ(*Iz}qlahSi5inHY3OAfV)Eq;9tgKo&)%A7jC{ zRl1_;;hZ7l;l~O>z_}>#KoVbh64|*sUwwsp#(l{IPy+wGe^|frnCVfDzmsZ}@GN9& zIg!H-^bxjVc-BJ8QV$R*qevw$r$^3)FU%6X>!jy+VhirPj3w zpYRmM>zbf1+byZfi1-?%M$cr92tiC>xVAfU9MhN2l&8vPf*fL!G*f^sj%X;^`4q-5 zJx4Z}9LNMWMouTEHGOAgLNwffij<})&GPe4zmsr!P?iAeR8hdj=iggf(ApcRh`eXd zPQgAR`4Q8{tu}Es=5aGpx_LnVBz-woABtJ`R9-XDlr^j`Lruv~x*hFl)p7ic+%V_I$lY{}VtFvtaT6oeV#0dx{|z?aTVq04WrJG2niv=4Sp zUwrkmE?Xv&$#wK6QI6=Nxy1`=L4m>>tYKN z9r~lQ@36{85|-fbj}+bsL8Jc^O4uX)b2gT6VCtNTS?sX(&aw*xx1+WtEkP~`H17&hWXY-L9eImY4wV z@Ozph-#jo6iSywLC8Xj<=`l*HEf~; zJxzI#ialL{z~T9?nGGrtTQ2=CN%ma#ivOz^NLceYEnqcZ*B>VcA*pcjkN%k#3)`%x zcUw)jQy0efjXIxZCfO;n8p&tReB^K`Czom~xzLM~$=7uitiD)FG)DlHv04}wWgA-X z2nCmZy0fM-KwPX(2{{8gkrmXAL*-$I`as7I_Z-A#wHM3|EwO0g_fp)>rvZnXv6xkQIrJyH8Q&40@s2+16-X9el zn*5gfjH|nLxR!c2%4X;^LK?+&C2e4Bh2~G*a;tbQ4f-D>9h}T#pU_bF+(YHe#s@rK z>RQNVqxWe$78#Ku)(&SkwxSJkIx$l)>ih%qc9Y5w)0Nsn`PEkTY?g;=CX97jj5&fD z@sP)}>gxa%$AkjihIkZmwk2GC{xcvd5IS-QwFxSR2i#$G-5)H8I{ocw{s`3j>K**; zniiU_?}+{RGB|={Q%Reka%k}+qlLcIrmNttB|MD=cQsgEza~%j#DRl2SpT_=00zQ1 z9(AHuY38}dv5*YoPg+lzjaB)x6p^oGO2rA`ZCGF9e3~LP-5NNP|@7?{|Yf8Aj zAa9`3WiePuLtgdU8m7Q1hkT(QXODwI246*LvGl@P@YYziNcGC$J z%5ZwbQasL85gsy=e>>>4f|GW0o87g-KGslD17|iYRycuW^bNDbl2S~zN%@;V7GJS& zJV##=DJcVl32KnuIgzyG&WJt;D3OaA$@`LP@Av?Z{!re ze!%%XtT~u(vf388-DYkLwx1;+2n;~_Pj732Waxlp{`=rX#5BdSoK#_l;QIkB4X{ek zr-%}Z)$?)?Yj^QEocSYPm^PP*`;?hVgy_8Wgl~W~)bJM(F!poak@RyNb<|i z7H~?W6(JsKL~TLz)`pr~{0vxWj6~bF3&1ggHjT?T!0#F!`V)NuLXQ9@dT1D^7^cD0 zvP&ye0d){o8%p-xNc9B$2xcAQbppiF+k=0x0CbyEc7DlWsD-u=+YwfdFi8)7)nm@e z#}Tf5GK~|l3K~swxskyz6~kj>t1uVp5RH_>w%jAw6yg4e%}1TZ>MG4r9(_jIrf&z1 zO$RHLZjGFmh1MpsN-T;erGk=nzBDt7e{vQvq8JwDoJw-j&_T*AgA|6O5AuvGBoc9c z$%5XksrtLRyS)_`70M0{3JcnloK^qhpvBc*)^G9b$|^RlZx23|1)n)d#D`Z_lG)IX zwqr9+@L|?%oLbNo_>={4tZJfwVxIl{;mB5iOehG+1Hp;~wFQ~CG!@Ce{J2W}h2Vby zwVpj;u$M=~AjMXW$QFX&(Kd z(iTsyC0tG2I?6qvIL$`<6XiltrL?3VTSjUcENVPsv`-VLQSMzS{Y^enCm!e*S?2=y z0Kpt!xeyQK@xv=J2f7QtN7f5mr09tza?bIhsd5faJl*~jp8&}O#w`Jr?#HPu(5h={ z_<@%<_Yduj!I)PWy$$+64yN7yecXZ1EfWEUd=|@@o+o6Pqs2NC`WoQVrIwyHOVqJB z|DcEN*liNN)Tm_ZWO3srAV*Ux^gGO9jvD!S@EBycgZz&#tbO@$e7ayfM`}4zT&a0{ z+cSF<8wITFS=Iv0WUqPkY3>VNigNB2X238uUhyJlB2h6RXMcrs{M!}$R@W~UH#-za zl8BI}>7pR8UTyosC_&h4`Hu)B(%?fnH1{BY!s)VdCVia<@?e&(P{Kqt%-o-i(s-fg zXZ2^~^(0;`1VW9n0B(s2jtRAD(a{nMFhre7JZPHLHDAMu@>=LWQ}hJMR%^U@#SUPU zK{9%Oo|upRN`T$lgn~Ar(OvvPF8)q`TDrGGo-w9W(B&8j_CTy-Wl=6D13s|`4y3jGf3G9M!w0C_8)^64En4zG11uX|K3Y@o%N*Q>RFWcrZE^JV` z4qVHhBvx&d4IyeBe_!W{t^oK=c%Vlj*-Tb7c!z%PPhY+G>Km0IkvDGwQPqnSk!$Fj zD(yS%<5G5{k<{stOh`2d!#8A3^ZN|5>;>8l`e0!a`3bfZtV(la4&JB1m2G~F#BDXf z$&%wkwOEXi$&bnMC2#}Sli^<%KZ1raoI4$H)lc?*#RK^I;SN%;BP4*E9}Pc;Pz;fH zhXJIoqrl|E@t7`$^MtI%`NNSlNka;pTqRBrq^Qe69#i|9oPSyp!61^^ zu;M?32!*cezj$+HWBfxgs?f$7z%Sis%pFVjWMb=tu!|*gq;W=nz~xl5a!D( zYXFzgz+9-c=@28AcbRv_0d3~-}R5z8rRWWu4KI^^r05)3NDW` zt#^P~69~>Twk;h&GUy9E5vD)YiyL-anQyf9^Lta(1@e-(B?1jQ3|`YrToj0D>@@-9 z9$ml~vM)Y}=;S}IJ+3=wmXaoz{zMcgsisk{pH~yvGB{^=iXXJOG_vT!$5QZ1vY5R6S2Q5E8X zt}oQTqFm<|7%_F4S2VD+Qd&7!&@QC_d*~cRGb2Bx`pK5`CCVqep|L7?9bQI18R$7^ zwNCqy=!&vR6$vR+*Nw~9jH+BR3_z){=rOpIAP)d2OuyWVh61-R(8h#V6T!La?)uGJ zOvmdR2!5^~tjK_L2{qwB!@)+=1;QreMHRFG1PZJE-PqndemE-)Qe1FsMHreO?g~Sh z%j^T23hXhndXtJ&h4!;lIe+u}2fZMnB*!O=eS8!90XB#hxD#e6N&IO2Fq;pO&4=_p zhNHudqUsS657I>-cB5hPek4j;{y0uA_>D*qFBXkf+7qVI;eD(i;u{)a1c{$tm4Dza zlkkJ(nQE9GsH)EPFJ=ruf6$P<>&N?=+*4`n^aEAivk`uimh9_hw0GDZi zuNzHfZWdM*{5s098zS^R8+Bz)JVmHC%3b*L2#OKkLX74=ACRxJ6Zf+x;XZ2Zn~B_KPAk0e^t@r8lb%1T6c6 z-8AwBv5~<-e-nNyOL!6x9W1Ef_L0`-Vupxw{SW=qH}Z#<-tLwaQgh>O0;br^FFPwj zC_|9WZYZFVfRF!@l?d5q?pE=!yIt3C!A2XVoDNtK8GO445L+sLJJe!1@btyQm3m-~ z*^l~LS*9Ol$oSgK&&topKe|jFyo&NBP3x%At4X6$j1yk1-&UHh;hH7KHv1YLOI2nm z9F3&M!Q3X{VQ*96rj?Wc9Ywhjb70}g)%N%%)< zEGNK&VpCcFvLl2uM+0H#nwCf&jt>pou+EqDSY;Cv9L)FEv?Nd)znz`fWQ6`$XBJ(;KVV^UoH=<8 zFp5OC0g=)BC*H4Pew(j_R>KV73%S#>r>3U#&w3gHT{tN@K>+?0L|X!I09+~Ea3M_h z@4kqnfVF;7`0>e!HtZzITX6!|e+;JR3TT+}=JrO}325qi^FQO=?Mt{VP}ZLocS5m1 z5@ctMG2CFnqALjDSebt$)!>*JC_XYu%kk;VP zhCxloVYh^Ob`K(-zsw}SDQq|o&sr%M&-Ro?r()+=RM_Ge^X*=AL%L9Djb%k;>pV5z z2LN08AP!|R*AM;rVbtDkM4@i)KGBnJIR$b#D|V9>Z`5f)DjT1qW0%u`C(vL7%>F)R zB8Lb%H5jH_I8YLr;(F0xCKu~nTE5Dq_Ujy|E#Nk2P;U|)LHmD^7!wP$m+wN_VRAAV ziiIZJCJL>f$_%5faM@wUu#7Ak={q$X0nT4yc&GW57I;cr^9r52T4u^Pr9hj0Ydsae zVVQTZEC5ESP^NhxcT+~;YsQkyBe_gaeMyIZ73n*f*L*a!u@a2~q?N~XWG=W?aJlw541T0x<84mwdP?Q* zuLkKzWL|8Q2vri8ZWyt|GccLOPM3Q=-dWOVQ7}5?bEW)akOzOTO(O=IcC_$tY)BaLIXO0PhiC{ljc|N98V%; zAIW!-O4g2z%oANBB_%zPzW!D?Y!26FUpfyN{fV%2sCaBg z|Cax(rV+G@CLKjB5V#cqe=OT8&913E)keUqC{XdXh17JUxU=Z}5B>ow%-n9*U@Bn$ zQzTK)jyZlk_w88qyO-NnCR?=h{R2eE*WJ6%U{t8TVZMY7MJ!ctPYPL$jqIEST3iV}`r+o? z=fiWk{y`rJ#Pk%d01;8O@(p>xC!DkZ>c|OF4&z_DVgX!_X6YH#)cYcF>l3y#nF3)C zQi(#TVzrw)DOwyKH1XA~@XS3{9WFBe_wk`6T<}Z)vizAKw)`L4nIc=MHe}HtF$_bC zc32=v0QRGNw>*>4YYl@m5h98_p3bgI=A(Vs3NTViM_g$N6rad1j69RFhJqD-Sx^$7 zxopJ0qdUQzDyxBDwprDs=|p#o=#wr9CcwK*&uPhf_hS}jA73L25fV*+&R2Su$*;;! zdvT0NF5+PdHcTIdM$Ur#8fgD{1{c)CDO8zLP?VH7(s#CiOB=+lO1LVbBbkN2s)GB^ z@4MS~*eHP4^tb=ITp#rG{m1|@b?`7#rxY!;gaDT&8>>7wuvqwMt8t{GDUH6Ohk~u! zEG3lIaDaPVny?Z<2h<;qL6S-n-BJDXMU+^QC>0k)etFF=H{W5&#ezijq5P|O_#!g` zU=8PEBnyu*Mq(3=@I^PQ@6U4$X?%Tq`!1K3&diC*iXy=gquV@<;o>J{Q!X!!w$|MIb+rB*$Jmq(7F(NW%g5)+$U_#_)7d+}e=t6VP85&K`KBB()b z9sjReCx7Ift|{Tx<3OQa=6C*W;E7x!xy+)&v`8qkq5Y6+JOAZ&bC30m0z~;w2yCoZ zl6S-RNXc$g*hKxHp1tzwqDL0p7QFzp1koNC()#r#$x!ec5H*!C>9@ z#JKtBv5+y`bN`F7}rn@rC|yEDdPw2c?9g4*89MlIj*D83YROJ5Ioo zzu>~d#SY_)6do|w)d(VqwT|vs0WRfJ9SB_lFFkY#;n12q6|Sr3)69%i$8Zj&D@zKu zxc#J5jdD0@l?abz&Zkj2B5iK?zP5zSIQ}#fL9SS&z25uc_P48BWm6ldNu&nS0l06& zqkl`)E6xG9Txm#6REE^uB7g-eGDGkF7J6YU5s1*SWN2e6X+)dLj#DV*x3Fki5*)G{ zc%+GeNTgw;qy(V+(Dz^h!VrzLwdv?ia-$_X?ptKXb$1OR36Id3z3utkRmi6?3M#wA zq{?VJKs$0j5e-mEQ?*y)-TP}?lG~em?I?PS^)3$$4h|~v@s#MneQLA++vRc&S_vR2 z-Vy$Bn1$~exlRMv2|pVDSo$Y|YJp=a8Npn`WD~DORHU^;{!5FBmBgeaIF?CL7ig-j zGV6pXLmLTD<3cA8hWo!F%b=SVW@f;2Cv+DiJ>Vz<~^H6DfnQN}^a8s?rOQrSQ*oo;_biy_;A;nSYDz)+Sb{5afG z3v%^_3&2R!={i7sFvbl<9Y*@k3T)5{n%ED0wFHw7iHypL_43``=i~3%0fby3P&lxV z1O`E-*bjd}AdYTLkT?&xs>GecIDcY6MwI}T0Y?V1ts&m%ci2qHz>$8SpVm(OD?<&L zsj6kLR&1vs>IpaqvECNSK#((Ge9xBq6dvkokqkYZSp;V&#Cy;w#-}pdg*{MQ3Udml zkb*6|D3`$#L1}K-6%k3N?EXr)#|dXL08K}LeM6eofL0>Xq-Ve`1SjDrU31FhXXIB( zl26zg6g@Ao3GI5MF#6$aA{xRg`nsVe;2b12ViQ;&!Wp~m_^43*Ijbrf2yq@MJr^gK zHiwbseQGqK!kN0_A=ZVqYhamJ8H)QE)f7P7#Im7}SQzPVg7Gc^hKvfk5n@$rGpcM?qQX~I zc&~*$QlA2T|99^sa3I2x{wzYX-T-TY)?#^Fz2rvXTO23(Q7KGN?>qQ(E}^leu;FQX z2 zK%fi6It;nqnpJBH-!|lM^tIM|dbqTg!YH~kOO}T=47R|wAtmRP;HIZagu3TO3ojG_ z$<{ddC?MRX27=mz@Z<~;GGap?!`>uMqZN^(9CDDEz04ZvSmS`J5fGWD3 zI0ajPp)bB(gR(5bky3;~E}v7>YoyBrm4P40zAkLrW{=ISgeV;#6{UpZ%K4_=hCsJP zu=D*~Z)s7|LHbSTY_)O~h3SGg0!Y+;`ep1b&frtrK6K^?912)(EXk~g$LHnK>hm*z zxPOkn>-59=VO>VcM`J0#TlB~1Xj$fGSH%=x>RNf+0Qe-28`zV?&a)!QcsTlNEF+^Q<5}rr&5ugT|>7-ObS1@1uajKo# zoA*FNL?zM~_8F`|`kTX>8i|qR+zXuntug`L6275cZl!O6WuHrsBt&A#e}WGaz8V20 zgs&4}5GP?>Y4)7d{y`3O^X7b^A4DIR^)y?b=$(kwY7)#Fl;6Gj>Z>35?_lG0zpBi| zP=k>Rge!Hw%U3NKnr7mg;J{LV480{rn$JC{l(^=$&pzV27mDfqsyW z^y=9(Jvh@i9e&&_T%X?q>=v;YJ%{!DRwS7Gx0L8nSb>*8^Fb(mTaKZv;winosR5!r zGcmj(uag!+nRoyZvImO9Bh?SNmY^7<(-0l%31QKYHkycNtffiTy2-b3Igr;y&5ubY zv7RD+_5!Movz9P%K2puNlyD8tql+aR_fcA!%Ah14A3ji5Bqzonn6!qk3S6NyF$1yg zKhCcBNuzUP*C4$J(nAOV?t(~2yhs!wgP|2pt&HMHNE>NwI~5dn*$;V|JUtISXg^Z? zH2yBR6KS+TIXRG>@%KLvxhD-ItVsZxL25&JvYaKm>ROiRvX`XH=G1_LR~#NF7;-HG z%KU+DK(2-{NQdKk9_HzbRiK@Lw)B}JYwY}VybHDKy}{t}2?xx487P_JN?4K8v;?4q z8<>s}*i~kqC+C1*MlB*wBKXovfPfu8Ueit%${bktz%z#*R|~`oKD9tI@1X_`9IJ?0 zs-PTbBpUEoO^@b?8MQo3!0=?xf*I_ze5Xqp48-X_r0}N++K-%iWeVy(6 zzyBb5P+*k^AU(ZwC6N2 z0pi(YVGjA1xVuAv0h$RUg%%<-d|iJtFyt+-md;F0kb+c?@um5xb0K5As@GHUDV+C& zJY>?Q0L~n}hy1Iz61W8P0~v?^g{O#|!Bs+lJ1-{6k)sKR?DRHYv8ct8zQ;730}d`! zS^n8LT_oSd2g)z6m0#*CFOJWg^S#WCmT9yahSD0{o6O_ewrqRed`v)84kvoSts@g> z^%+D=lvhmP+$AOLzwIwg#x!>bd4dJE5*h=ULQspI>m!Kc@Os(IT#Wb1Q=4oJcSJAD zCLQ?>u)^jxlJ030*D|X+LXrN^Abi=0b*c9 z+i!1ge>;1U5@?|-P{AZUJ7JDrM8X*c287oYJakei3VEr3B;dr9La20^)rul72LKxp z5T@C8`vin@r3NFD377~

SpDJN(G1fREk(W(H#Oc+t{4Fok`FT66NL(Z}r>wo=3_ z!fK~%jouD`2)J>?Q|W^m4}^EWwUGHM9Y{89g?MJ2X}p_&gCah^8YYIcq?xbM3EZUP z?|_`}r}!cuWmyFqxHuSX7$Ib)^hQJnd&6IKpvY%mLqZmNH{-+g2Y^V=34y%gck)g0 zU#RHrVC#h3S}a*O&Q^`*g?GNP0?+Q-wUeTJ0K(~0~_4}6lTgy)}b z*Ah?16s5^E$Yy9fqj^YI99ueX?rcnoc87y53M7S;P=2oh01dHX^jk^pOmFA|1q@cm`@xCrtV1a54p>Dd)kEYKqv zI}SwXIoAxQg5>}9SH4O^ChW%^>WJ&84>yqzYB)MaI8k0%P8==lV5vu%ayGO;lW zb+BBs<5x-X5YOZ8i+xCq7_vM(ZzAeMtz?uY8h935Dcy-6Y$yMx5|~Qe6D6?^?Qi4N zr?>bk@VD^$U*)%Q7G8oLQUafNX>EVkVeli#UyqzZVpfp&q3;}ac-TQ1N3V(RIFR_F zh2ZyG_@4Nb+9T>vY>R%Z@w12*AS9bFIxsK+-~?`S{ii?iUH zr!^0f1E_q8rd@R024!A=WuoAx5|vB`f#obnLjp)qm!LAJ{k89p z>lQZjCxNUi(kyz9H$Qg3l9Eys)%Dmiu+I>CiZ?|16mHIy&w5Bww=*#gLjm(FK_gLq zAD;g|MAu8sL+i&m8q)g$JOdoqlp+G#m`yZ{p+f6i1Woth4#NPv3H_S$ANi9~7%C+e zfs>)6MxQF`iF;_z@1~n7eXX_UvSI{YKX5MT0z_W4g54rs+BkqyN&p9$CMQ8*Ug%rc z*?^Hrsl0pz;G_z)80I&(EgnWCz#nV{R7kK^N-ty=F@@$eiort#xFS3OZ^^bR2K+PvKHBTV^Y0+{vk(KRn6vKaEx!AU$IoTTkDm8StWTnF! z|L>aZweV(O_h$ue1meLK;0v?`<|3g`!eSGMlFW}Yn<`XGsj-q~Kdz#|^Bo5sZ-@a* zVCrwg=E1r4!!%~Z?(3XYho0|S)jeWr{LFtxmSO+9UDX%OQo8S8rKiwg_-|-lV?Q@lhFYs7dm~K)`5|=`T1sCUS?R} z@z=5aZC=+yTkAxG6q+`Yd^r+&K)SD%fF+xAB)cuN>C96@^FWa$$>i{??!Tm!a>)*1 zHY%7gPIW=AKIMsYs;F7b)hmg&x%7Sexf@YO0tQKw@8wTF>mTMXBn*3h4+{&T`1(P~ z;7}2O!LVAWYe1VfglEid-L#|tRq$SFU&VLDO$7>L4nJ*Wz-8*MEW7q9hr33SJWSJ2BIE z-*@UTJPwU6N2;i1_t#JScs0hC6>gjzHq>Z{we$t09p52rf4BoCV_hX>iJwpy^54J6 zhNwFXj$840zkQtBICB$5(#-_8@gYcMhP9QOAPKF|)exK)L{p#NdkS*8a+W}_DOIO0 zI#KM|`Z^Xw2qW{knoHhMOaZq-W0vAW`4=!uU&Z^<>!6Bnux#kDr{NFkNq<{mlKK zK3izhGAHGy+n3|lZn}aVO<<^&YvMr!N>TBbP*_0g0cjr~=Y$Yb zcy(?DxQmp5b_5H5!wc2V%q$LXXa)!0Byk1RyS`0w2*k!mDA!7(YffUjEoKpu^D5tK1@{elmf$ldMX#HN##)_23R(^@& zeSs^cwc4C~;gyg>U+7=(cFJ`eE?JQRq?DG?%gNlvMd@t@I-rNskJv@{!6!%b4|oPC zD8w!-2hg_^J^FFIF4yxJCA0LXzQ%(cAL8?=KNjMRfQpSok4(N1GdnjS?13YGGJfWS z01OQ}GCl{ktpA_7cWaK@*s^v1jGq++6t0iH?$&9qwH%hb9C2P4s4A4iV~SL>NLlJ% zf4(tiCXhg(SVj8My?gH^$r6!BAWjL6x_FTvVE^U=P;rsfzqFT4evyO5$a1^ z^Br%{n>%Pg!0}UW@>`bwXa8kzdSlAHfnr*9&Nz=XNxNi|q%jNfBn_ZFDb+}rJpD0U zu7;nP5HH}!O9B#EU~z;cJsYj?d?g&ol|u{6tyfB)<%Fg}g`ERBo^n)bQLRtDoXXAJ zXAp+fH+P@?O9G}ovuLsN-I*6}#xw_X1puL}DKXsOu8tpv8zvFGMWWA?+h9Z90vHus zY!zUJw1pt&>cTg(jyg@auSfxG_go!=7TuRrKa%S!IsB;eeGZBI zZ+`lURb|6Iu_qH#;io&m?qFbPK3E2XdLY>8NZ^uw8CrZn@uF-}w+^_bc4gTznVdU} zPqNJy0w;EBES`!1z*KYPRzTt;aCPo2~@ z>}1||d(EGM=SEVh6~+K?56GpY^=U46WgJm&A3xsUq;l+;q%+}H@gQW7WePf<4(oDB zD48fF_&n3b;sK5Xd%_O&Z!Fc=fPLGuV8J=09fYqP7_4Rya6?0x_#{+k03~g@weiLq zVNFNs-5vFx20@hk9Wa(&%5!KIq{A?!Ps?#UNC$!&%MqPTnpT*I80q(*$GAIEr$s0}_4_t9wAtj)Dj_D_fafj3LoX@gkeCRD#g)7~+Rd2+ zQY|&0gAHi-utrkeDRWQV6cLbZAymA0O5@7!z~YeghfXLq98Om4IVf`#BwSxd-qL0r=X$_wGt@D~PH zYcL2Eul#rSBY?Bx$yyve0_HIP^rD8Y0JY8*Scd1lScu_s71I1Ci@v;5(uUEG4B9Y^ z?OY0&n72wESfcTNd~ZW>uvi4C;G*ax_RV94%lyRV%yrzJRQUhn(P-$_LG1&22`ZCt zZ_#m$ZB1r59|$NK+eCOF^Z|pn+pAaw0}FUpGCpbOzj5ZjUz*7KSEE_MdW5(Jo>-z6 zegZ8-9y6J_@2$E|o`2w!-mP-DMU{?znpR!_=Za~(s^8&A`nYL z$kk&8;mc6`5Pymo`dIF0w`bz)vt}$fplHCqi*#D;Kuk-7lomXx1#a!~3wMZGhpqRX zaLI6PPBp<%SOpN%VP9hIv+$CA#hS077`pq&(^tlBEhpU<<1qx^`nb$z5Ke98oxlSY zEtG0`3GH!s+a&%Hp>H#5=_m&m>=>51g`nQp@Ai#pqBi`L1sbUn^*|%f#KDMpy1Ig$ zZcUMWh2%>$83lfNpy*!=5I&W%kFQGm6bBG1Y7QhH@r+vTM>RQwDF8`sDyVDLkY|RI z$Ky82NybRfuj$(H*V&nBkzLzKQx6h@p@H3xn*=0vY}ex~3%fB&W@THb!vO^cg`TpZ ziV>oVJ&cmnfTjycjks|=%xV;n8uxVIcR_LxlN!87!Ht@>a?0_jRor!B4E)q4Z&%>K z37_wF@!`oGZbg4t!q~CCH5#`fhs6?(zqV39BfR$iE*dxDnZz#?E<#@N|ISaq?daD8 zo{9AVM^7g|-tpyZ86}I`!e_SdV?2J?P2qYM(t;4wriLpukIjclR6D&?5y~NKWz7n@ zA8(`7eth$|8P7w1^t(scxv4vi$ICh_>W=y;(N3vy5oJv~WBt@yb7GbTASh;~`Qg(R z00tf;wgV5ktiwTp0)`EB>I#R0>`#1!ZQ-ZG{jpjM$ysoJD%=K$+;6;#PcVJ9cCrRY z&=$gRY(5M>5$cbzaBbk~!#AJ4 zfS6#mA}ILH7vOxlRf?OAL>=Oz z`>P&KW=0p8c8~%qvX6o=#es4+>QO>}MIEioSWwn}h|{&OK%_SH#Rp=nqptR*n!pC1@a9ZJKa(ezqT zn8v@MAz@nsfHly)S~YWUE{3h46US2KAq3H2y|9GeeW~D?d`C6Cz7Ca)tAix2`-6fb zE#4>m^+aT$Kf@iGe`je)Yu4Oje-D`f23K3dVZzoO2j0RCg`#AIf@B%`L_s@5!1V2TrmIrHdWv8+U9%zcmUae@ zfVA)lmtY9v{KJd2hRGmJ0CllMO+odBvU(6qLrJ|B?C`_m+=8D!4*Aq%0$b>3tBed0 zW#!3Lx^N78o-r$4c21lcQ`WC!*5j1D8if`pl){LR>loD=Z$ z!^Y~bj8N)qAvk58C}S~~h%+pKG5^=(RG||C(cW)?p?Q<(LOfZNe^NXljo7Zp71wx} zKu?I!q~kky8Ox@)aF_quKA>Kby7PgoH24@Lg)k+8k6?X?S56w|Hk}8yLU^EzEUct7 zMcamuCv2Z6Y}-C|M;w!DkPpazxP^M!(&|JZ0dr9R&Q2iH8iwCat|{YdM9aYiv8L*r z3INDd^7IuK)i-3-=K8h+V&GiZ&>XX3K_{+C!O1o>h@I?*vb$=>2IPm2FaX@c+yxe$ z6O2gzEd$G8XqJC2ZOV_tbb<=^9*>^*1eHBt<&n0swzFC3R{m*K5mV(fY>YqSsuE(g z6|$GPpoR|&T6pv?Wgd!~f_xy(I9XfJ-_qk6=P|^(ygaP>(W=BqHOV%k$53_}e=cNWjMFK@t|e!Z!*wN{rM)6if;qs3XL! zu*v#xwvLQ=;&QiiH0$wB=bem`D3aqm4@aMB-jIxq9i&8IHGMKR9+q$ zdcYZwMlesbj{OAD-FNy;+XNX){=|ymre0HGxNa);2$I$If{DLXk;eh%z|ZbMi4^E0 z)EEg=w))Tdpp8)oC4&jl3W;o|lGkY7K8i*R&y2Jp=RK4buqB4CaYxY;!U%zop@NGF zzX5wsG=&cm8anzay9GRC!{>yz zVyl4Z>=YbgtGnw@417l_9^U`}D|W%8k*A|OYeucKFzwkLg|1|a%HpQk)SOwD_H#U~ z5AU@?5Hp0b4;xC!;@C<`3TzRd6FHCLVO?A$9p%U%F-x*#{RWAjammv-q?#kZl0ff} zP|5!dvmPZ=YupB8+ISQ$yvY{uEMhcWrc5!`k#FqgvtGs!qccE-<+}kc1!RJfrAmmh zv15i-^O|Q%IFL_ai$pju8hEIL?oilis0bUM8m!m}ykIH#N7We!14vMan3K)(ChCM( z(=(Dkk(Y!?^LUt#k}FCkm~(EHo(==X4r)1Qt#b4ccPPb%w@h+35j$IOqeFlqba#M4 zK*|h}cn+Ze)g#m|*_b`mkDdgqx1z5yl$jp7M6E9c(j5^DdPLfEY<6*9z*IHT4>x-`D!PXO-i1zP|z3oEK7F6q6nI~QyJjr>q373~ol z1C!C9$Q2q4w~br&myr?pwmX89i=dKt35oa$Y-VWwWC*l!3o+PRe_s4EhT8m`3}&c8 zr>qAUcmZ?)=>qQx!HJKkZo`z_@07MuP+HO{L2j305G#DonH`()d+zP=_UUdBGy3}0 zsKshscURXk=7{L+GK7`$0(Q?Lv|?+1ad9@XHsoiSPafH=U}~XyqC)4p*u^#?QQh<+ zGMg_6lF1i(efY=q?c?EJUQEUEKU@JEdOU9f6S+mh}>}1tXVIrv%o5)ehSN`rIW|F!52%pW}U3vOKNO^NOe-I!t6DljpG^?~e-6LlFd3?s9|Tk3aE62ZbaK0eN~h4HU%zWm%D?ruKeeIg3} zh`d6~eDsvaU^T->4)Z+3T*;lRBxw_KqyZqUPy{OJ2(N$|1`;y235i${NW_#H;yJKKSc%tL zMK-9JH-gaLt~7?uECWJ&LoI5*CGA4pb~198MRJbeB^?N^Y6J5QPIAL=}0ZSZjZ}JlM`heBGXJi!Uwd;zP;;sUY z+x1-uJ_Tu*aV9bP&jTJ+ihvi+$(~b=6CVGIc5*4nQldD>sS?6WyUOisq9sQt6r%1U zmgZ^~Py~E-k5z-qhnRyDvqM_}YdF=PwCmrzE0zy|FfU5|=i`S>fBzr-4LksDFvS=7 zHA8@v(z2dVlX!7M`*!MFw1y}>nMDJye(Mzx6v-(5GoS=G?P9wpO~wEH>0C7aBw9e; zXZO&8sZ4pwOF# z`^W7=i@gfh%n}u{{Q^ELs$aM=Q0t=Bm{3J>mMRalT$ok}vrCTj-Ia7Aj0Bp+2FSZ8VR`}8 zHXeI(hsF-)`>esgx0tWREq}EwPmBh;PDBo>*YZmdkWiN+7a`2Cb?vDut+bo$YWIb_ z8y!@_5#|cytnv+YG%y#IW4|2q?riYF{7T=%inCGlgDusx=$CX@TZwMO27g-H za0nj>T{Ff%J3>@=Alw`~l1QO_KQ+@|8Gj6F6nWtP*+JMs;@3V?%X2VnEcN*>QlBo8 zeZZ@HyjA72wh~5qwH^wiz2MJF`&Qx$SOm@8tIU z?k5&BAEZ+GAE`JrCVhRfy#e!uS`xispvNGYzpz))OKF9v#7fhG&7_bN`qwQNZ>!|57#>`7(IHbN&ovHObN3tOYj;WlUIGO z>5l(Hu1euUI%REYt+&XCLtY^=Q{<_Wub(KgS3kf@24rS6pk=;#tT*Jf_~p}s+}T%$ z_t%uc)ItpM3r#n$LqgP85H&~pIW!$NVN~BM4v>!ATp7eu&OpO91dTvRkFjKI4;C|N z$_D=!UW*P2#k8r&{gJX~@oI38kYqN%WGj_oCtsCT9nA^HNFCtLqEo?l?kJrYSEGC_ zcoB|}J(F`eGKq#rlM*o?&ZX%E;s^OkCNTUw4%7*G9Zi(Y3RPAWQ8r2=dWdGMCw>Ag z*R{v=H7)>09>Mk9y5GhJZOpNKkIH|u0t*89Ln`^M_t)moS=lFh5~WsnW#?lsWPo(c zZyNaf$eFd1A3FuYn5cOmz?zX_>-U_{9Wc~nq%pVF@X4+5Y#4}sLx~0HE>aRbRENnA zo_bGyryv^zXCR4T6z9$W_3O|5rSYMd+h*(m=s_GV0sAt%*(@WiYRhu8me4)`gg$>b zA-ZOTY}-9FSV?P&S4@*R`IyZ4cSUrWEP%N8AW$YLiFgW8yLD_KgqUolo|6{w+j%B^ z$CifOpxAS1kTy-{#p-HLh9y!PG$kulN7rCm2}@$CbE?KEb3C#ia0AeI-Y93E&AP!HPS7f(OcCAk##1n+H%Xs*4=Z!9Sn-Vv$f7l zzj_syx|R;JZl5;y9#ZLMP}EeoP(el7X#?}qxDqDjPJ$qV6`T5YFdeWVP*>(pOp=D$ zIGF2OKL2q2L8aMQ^*K*R*|*l>LCUgTl&OXg;m#Ki)*gEnA3Us(*~I5p@`d zoDsrmW4qD#3ev#4>Q`tAe%Qs>V+YaWPDyBZL-t(m$>1zuF=C7zzbQuN-s|oq65QA8 zY>nqd3Lc60c!T+Bf4I88e)s-C+Hvm*GXup_q?+pIoXP-hQ~-r}($t7yDE>bPrTEd! zhB|026b>Dzq{5HZ?f~14nPy=ib>7_Fz?-WIEB*0!nim%kDvXGfh`D`V=kYa@k8@K2 zK|awMC}y6mOm)aoOLVl{t$H{`@d2RwAlYft9+IeEL7-)j0_)8}a@YEFOrcf6RGl*{gtH zQ1Xv0zoV2m3~xBnbkhw-Fn_qTY-6y)NxonpQa1 zv;!U>@m$20oQ#M3Ex-l~n<|*j_Jlf6+pXJoXhJs-A8iHn84s_^XiPw}1875sU?YXn z@O*$~Mbk*Niw4CVppPdYk0*IrF~GZe1w;$-X4T-1y|e=^R8lw5P#r)I_PrNE)gbu? zT1HB`qgpJ!V{#%aC7`kp2YtL%c1p*>rh@>Z+haKaTMk`~*otg|T(>3sJZy#PklP&> z>#kgN@Oq8|AqV1OaL=$2fB}H*BIlQ9Yp!^2FUwMzuetkRlf-pxY`Rt!b|N7?bt2AN z)tpolLz%o`qxpb9ugqfKM(bw7$?^E1`R4lFI{#d(8rU1)uKB%W4#eDqG**TJ5(Hi0 ztIo4tyq-c|eEBZgOLR3gk5;5i2?q5o5Fg46d=zczV1`7TomuiDjSuM#h{F((MHUAk z#dIcRHOy)S$ja#;H@b_Uqx~3JxOG?(g4>BI9%cxNF2gj=^2yar|E}A9F}#k^s=n_I z@6TER(29c2;_^T_q=)m_uQ`jzoGOiKEd@k9pJ6vE@J?+`z8p!JDmjg zUkeO!(=`6b6)BHMH&o`KC>AbE}#$ z%m0t((SPoC*PmH0*qM$n<9=> zmG!y=rs0hQx51a?%mF&G0!|07!G2+CW^ja~PafNj1oqzee9P}I!Jk|*RVfG!t{bIn z+7iCt4&+}lU5w^pbs{ydrQnTClb4vKvqzqs7D%>WbKGnp4aELQAN8>N`dfnU@-Mx5 z6qAR!gaWb!l>nNuqL?{8RFMsYSy`g2&cvYX1y|-3@l2Xah;2?BL1u;h2?<3nBVJ#_jKj zsZbxzuNU?`->*?-goU4NGqi4f_pMXG`Lrc2(BMW&=H_6@dn=yNB?DFw7i@?4Dwkg9 zTjV&hX;v{~;+dztvVX_y96JB?!SX<9fpub)&RfC`v4B?|1>!?e5Hw`7w z;Z^_V=59k?Fn$Iu(0WCIJoRxsTnVw`f2&NS@qv-_VrG@vg?Fr}h=7o`^Hmq3!~W^Z zsZq~Y9$iN^PDyI??Odvw)d&B5qe6t10x5rAvJTG`PV3eW3joG-vAh5QAlL(3V!Y5# z2e7gNx=EQ%%4C8Q(tStn5gZ@2l@(4@+RUj~<5oKqQ<@Y2Tt(rDuv5dNU*gT5^gefx z6M!y4KaXo1iU9kt$@QJ1gT?7c@7Eng#!y>QJOUG9_}Nr&CQw-ZE_abM%fpdKSv&}3Ku5`u$SlEiP~y#>naVub;z^Sl zZ|`hRMVYGOZ5gm%7F-}8C*soA3N+}k+3l|WmqQd{PY=kn?e=@gDR^fBE7KH^=z9P& z#nb!*ugw5o!Xi4IAC4LH>m4(KPmdunOx`K;iLt?kr(U|;uaPW*nZlp3O>y#y9!L{l zMn~oieAgC31u-@REXqO%BUE zmlct5m9`w_ zUf?*`^;dnjea~D1NPqq$fM+Kya~P_H_1IUHK7cnPKNe2XS8_UQR88Okxm zZpDT|eMVg9HY90c&OpxziP)#YXvB^-?cm99o&}Eu`Edpul{j=TP~!5oM;MCNBK9{Z z&k8mP5Bq-40mXX6)f=ZqTdp`p1eo;}<(}?-$6ChF({DfQ%q#;yv@R%^r8WUgl4jE6 zso5SKjEqa1knRpu0sOACJExwVF_jSXq%@hF?*`3FDxJsganY?(>BvKjhfd33Cl{~= zdT*PUHUiqr&YvKDm7$_lHP}a&uC7HWSfm zIe{a~2^rpw5V9yf>`6S(*=vZK^c$*6p}|1!4DG}5S!B2LaCVujA{GzAWD;1k#aa@u z%~n@?amOhWPPZEh63CXbZlN2eg2B2S!&A|9iA?bw&Zz44&+8OFKm1(aQ5MA6YdAxP zj+{*2Sh2xh3TMSqLpekBdlYkJVPKlXJ)fc(z%>{mfo%UVdOMvf8`DWtV9u{}_BI8J zj?>5g!>5I*+vn`>94ckB667x-7Rc(0EfGHux}iTQTw8063`Q*PTnIc*&LWwr_7~b# z(yoBciij6#Q~Qk{aD@?_JQ))_Dtsp4(zQe|$iT6iLQADb-;U@YE~U5epgWh(jubKh z5=fsmv6HeW3Q;xHNXWdu+fnX1RhZVl*}klTFwai-H3TZZg!@{=fJhGGsw$J_+F(RpnTUop0*U-QThv8z*d)x z-^gptV~wEpj>i{ThWhLH+qI3XS1f>DeVtA0ANLy91W2o?Kh&$bO zw^qmk83@ov(gA2sm#gqhy3wD{>6O)?c3h|j$FlIrq$wyg+OP#wI2T8bqf@@f8vWQ7 zpa{-r-+f@0+!4e?=v3YIqDsh5iV9f?Y*=QpPrhv+2lIn`2G+8$=b|WUpvw*%A(>K% z0If@;(2Gg?Pi66gkq^fKO2Q!3aCiHD+PRa8u9+h5D(kw6wZb|g*xRHz1hzv>A-41a z<2>)V@hR)#nuFZVhbu4$JZ6&|x-VB7Cp$B~^J5lYO$XViB-c|FN>-kvp0r?M*Yvb; zlP*?H1rAYh0X99rZa{Wa|9Ed?Na26G%oChwto8GWm$K&!Sy4uvBYZ`ybTG+iDO*{Q z@Z;^nwZb#7yHYAmNH@c@N`G`H#hKO^M=%-~w4PKET$|D`OI|TNcZ6$NKRoD-+!GDu z)g;cz$i*i^qSi;*Ls$6MC`n;;+3!Dr9wfAIB4)K1wr{Z@H;e*z5lFkqRPgfyB?1i0 zx_vA(Jt^5EN=fYu0%;8A?0HFPCwdaOb=y?w`DVo8Sl5`GPXu-UFU z+-?d4L4@Y9`?dv{w*it;0A=O2>sgOQJ^3*YBZr_NG^M2O9cf@O%ClA~EeZ;ZFm}CO zPa0lM7r}O4-Ixj$orl6e6`Mq&))4FLe9T^aBpD%P2hbc>^oIk9l4smji(0e*$$M%*0ff^rD8gT z5p(n935Z~en@HG5mMArEkGDHmA+>=zDns!v@GhjY>cbxt;}?DM?>|Az`or#LhRxid zQy(=e&;W74InP_L$`PwiH|peU!k(37{2*P;E0-0e0s>?|cLjt1vqxFpsG`o(UtAiD zKMC6-Paeu4q$(h0Lx7e#-DyA6*b4;Mh?WuZCk|LqAu(z3S=kw|8Xzb-Y7eo6Vl&Y_ z_jTnQdO(>2#1^P5Gpm-sok6bw?be)^23+U|7Vs=FnGF;tUB;=!&K;VdPyRB^)0=@06v81eJjilRi&@T78n zJ3B5EH|(fACaXzj&}$x-6^-84gh$wbw^@cq^QKpgMt_glC^QmSpKJ%(08*Hl_1Wx1)wB+t*MzfbE96KK_*5sNfk+gghbVNkg9M_L>r06~RIh%sh>Q zo#xv__vZ1nC3XaEG3D6!8Br%#X1BnKv?_TVNl=9=(kd`3ZoT!VV`bU8eHqpKq9lbX z?qkjTR|7cWeARvAhp%t?{lnF7N_JY)yDt>ugSsP>3a-*FirA(GX>yq8Cda7#xs*5?-@h z5IYvD#+~5#&`Y&YRU<~*cNrxYwuPQL9@l<6Djem(8W?_{0Na-}ihO{DyoE53e$46D zNg>u_b8#IO$5CF?9N_RF!%5<;hvUF(^YskKY$yPw^aIH61OOM?mGCP32&8y8sM7gi zzr(;hH>UhkPUy!u0~R*OdmR+EHdr4FF9OKO)WJWDtBpH4d(E>#Y$IQ03wVVKkxu~p z_Qx7!rs?p+m!)!)^}uStz@kEX)@6`47Y|LyHcg;0b}9Pb091H>5x&_8Y%kQ2*2MEl zr8M)&vKT?oO{`?ja)_X%J4?BkrLIU|q8f*iLrc(j`uHi#`Twpnvf;9fI!IkBIeTm| zegT`4P8fGB!9qel6rjoBu|Ef7>g(eG1{q$ z63QzpEC~p6TVy0+OWHZ1QroGhXUD6x7Z5!Im}j)&;{hAtJ!{chkh}fou*CjWpzc- zW$cfxfq>?&Q4Nzm2wlhO6UT40hxB2$O+Q@*SBRKbi%{tc$Dd}j`G&!!=mLZ=VIEQc z9KDfJrUMFZt6xB@e*6CM_P0Z@?`jwiC`W0)v4OoyI~wPx9OuZQeiMd@91f6m0a10k z#oP{$Ye=T$=Dd|cCR3tD=MnIX&pyLwLMYbFWm!7V8Jx? zfRk_@@Z-g#e0CBkvIEDAs0q9Y#BKesv8M4QtP(tv?heMZndar3=u7h^b zTlW!IPm~$>bSR!!S;oDr;JGqj=J-O+LF$nsaNWRk7@E*pU5tNcX1_xND%K?qwyS#; zS?L&E!T-E2nRBWuC++-^Lic^1A?-@}E5V}Gq}2w`YkfSek~U6KUoiYaf8Fyg(OYQH{-nN&S_hx)XZxd0)Su_4>F}(6#_VIy^!1;+txN;5-N4;JY}BOG z<9pk`lfVb5^Bo@Trq7`?Nan{8(#`!*g_)Kbln~T=BbK(OS~{H-;TDGjx)1^li=YRI z2m`fG-XE;upA;>T&_m6uqN0)PYcOla3}N###g` zLCZ+?A@(qt_JQc>TQ1Gr8;g}*7%SY9MQC7tVV}{p(01w_&jT9auy(RP{M9={c1}!z zXlFm{6?F%@vbM`bYOMS|~rv_mqFhVtkfx@*dxN)1!@4KmeHp9n<)1$S%KC z0;hz;?E*d&V#u2&->pG`)UZ{1%K`tGbObZCf}t)g|VMUee7&K4p$7NG@*mmxzICQ zX2k}>{}@bwd^Ko3aOt?E@ugGz*pwCiiEleG!LWoPaz&n_t0@Cczw0RjV?4 zEm_b4fORr1XYvN14(b9p&Ta);Wqfe@ZIkfN2^fb@*(shAPR%_6NGcSdR5$i6$XYGo zf~~p52nGHOPR*VI8eo>Osi%|HC*>wjA~-7o`&9H68Qi5%V%Bdpu*aQpMNp$ z0f>L?^PqhKJI9I|Dt=kPY#!Q{8ER%u{gYF$tv}v5!4ZTr8C60IAt=nW<1%lK~lmp3M7Y#Vi7I2E6UA+r$QAO8$Q{w0ld~ZlI`n3IprMaBgpbl~6nxf?s{C#=ot}fZZT0{{IFXYb3ET=f$ z3AE%f-vln?SatsfY%ZtJ(O*MGzie_H<=R3Yd<_UnAlb=yyAsmEgO7jv{WC}sa78ML z9MC!@7KwXgTcq(opxau!F`}2gC3e1GZC!GhwyI^ldXM$YvRB;}8NsZ;7^8r|U+U|G zO&^oY^06sNgdmv=RS|y5+}Riynv!{hz$yVz#e)jsC>_hu8=pLex^rL_q$H8e1-t(4 z`rbri3<9+-fcBCBz@LB#B=l~KpPecwH6VhWgB-VfB_~f0kq@pL*HdgKAlZ~9O)wyd zRm*WrW&Sa^){tya^{d(o6dN)q9Im6yeJW@?s~UqM8x$O71ZE$Z9B-iY)Zu~+_k;yD zo%9gO7|F*3D$-cAmSfcqGa{e{pr=@ERs<8#Mf10Znr$BfWoJ0eNyy-pNJjWIPacod z^yT`mV-VA1#SvyFQ`U$Go@jkKa4}MR@|K3E8H8O;)PR5(%pK#HKkWlRVQ+PZ_@gjH zlab0mYKO;dIgXT7*?JL_esl&5bbN+;nlRT6r$~%sFP>R;d7gNf$%;vPbd0HK!M_6& zhk%lQ^3$B6q_UUFOWaPMVgKM2Vga^jqc6NmK|+@BLp z>m_SsLX*_4!5VB~`zB`+do>(N+rSCCiB7BJLe85GbXQe3%+{w zy$s7Y{825$lX87y2o^+2ASA_+Bwhx{$~&R+0+X;%WV11IkoYK531J3_QPj$*vL`a` zKRg&*NK8CnM3T@ZQE>f1_uPl>v%peU{w@G!6p(NmW<+BlLP^#Zx4s>3dHzPUSFdmB zDL{XHuBEYzNySyqrC!EW3HT9TXwu44PIp!~|G<@M*KaHVPoixlV%~;Jvo1q-0+scN z;SW?gC*0{vj({h16C3=?HFZc^p;pNJ*Z`eOgg3X{r)wox>+;9$zrXy*J^OQa`_A%z z;jlQvpXwfH8E|kj zQ>Zo}Ar8cx4*L0Y8p0bLQYe0bT~ScAM~DuN34ieXGR_J=`i5CLyNDB!p+!jK*#_b+ z(BApi{c!5&eAO5bK)$Cs@`itns2}()x1^Esk|YTdrT%Rv%>5z!Au0EcEIFV=)gh#F z9D_EiN5q{VT)KIG&Co+=gA8Q`c?b{12ZBU*_^9dhbAApc*(BQ^oO-d$dl3lV#qnu> z=0)o@xp3}50(}6=W6z%Ne89WRmd1hJ_KLfvQ-0C5RzV-pT&+47$=O5P%6SO{ARR0A z!wU`^c$@HystwLPp!wLKqB+?#&5eEtfau+oku+)&AmQgg?y1V4fHge$cNz%z$t%*M zdvsec$wCMIRsyq7DcKS&!c2jQN`(pKf=SE?VQMwfHBjVPC34Q(& zgH4YuK}C4IV?>70NX;d`fJZa_!hF*u_jVDgnX##BDUX2+fSN4y;x7yqRYVrnP_iS0 zh$2jtZmbb;8EI!NB+(uyZBgx#$=(l9E+!8;dt8G(#YeHBBipSFrW;gC>%odUa9?31 zK<6Q$Tc#A78RQ57=pFfcwwB!tlS6QcQhPWKbBx^@hSGXN{xCl7_XCaG2Q{AgHSkpO zG#q~-{Wa4Di+VPXsa zLRn<`Lr(`0QU_HhAIT2Lr3BLmZD^7warJC1JkX%v#Jj}_hREZtQ5i55q2uB>DyeS{ z?;pv#|8BH4Sq?>+nBquj#m9Voaz_sJH;sk8aLJSMn>K4qXcfk-6@B$LPT00AE?_e} zDY~EBl;h8&4A5EvrGX0gG_ZMKD&Q}~`&h*n6%Of0^Y_c4wt2t~npk+P2~y!r_0Z!a zGf7wH93Iy}{BZ$2h2jA`{acC~DJqB!*>*fe%Q^6TAXMX{piV|+wX8|bl2Q!asA^*n z32x9BlD(*)bQXVMB@%ZbNQ&(PRk(lWNpsLaNm-lNb{Cs*a?heG^Nb3Z)b4|^1w}@& zJZuFE0p^RSEEF`in1NJaDNE0ZvS)EuAk|=R4&Re8VOa!4zIg@@G?n znWCl+!Jeb#GGliRJQBd_gBXpMnxpY9>vhL8^pKe)n==Nv>wt@)Fz;^L9}dND*H+~X z5k=Es3XwpBk0Lw?>^4~^%M7L`;$@aB7H-Fos9xlQD&$`&?g&{2;a~#7sv9lBCp^6n z|6H8;jLryVB~&lS<$`^rcsDr!5~Ftp|)@x+;ERxfATox**JpxHnihv7Z&<46370;}bR!tjM51RV>7F18jf zE>-A07%62RCriwpk23)ibaG2t4>d=MII7*4l-mK}H>X z5Zmt|cVLlj8rV7Tov_qMua(|0J*#TI)pytT-#l`{_xJUcXXSXLqS$%Q$qv0Ea(>|v ze-&IXN`Y2y>^DLK!Z1Hl@PP7>N-lVxNMHy9_4Nu@DLnkQx@$v`NK0{ezXe!Dgd013 zwm>sC0#YUwNPP$cK%zov7vxX=06+J5c-UU;`VYhvZ~C-cn``2lJMo>1Wl&})IWQmv z#PzsoIAR;<&j-`bWM&ItCkpB2jsdW<=mJO=h_g^`wugCg6PldZc6O1ZY{pvhuXmrd zjM6pc3;iT|XxHqa-)nZH_+8W>5Bjxz-JJ!l={uV8vW>_6#DY5|8b%p~dZ< z3IdV}I1MxzTeMw0+-fa|`G5CQ93uY5dsgCa0<7#U-$ZU;191fsV^H$o{Y)>Fix203 zF4`4X3>&a5Wor~ONoyPkLq&b@_V>GAyDzb*o+JDVMaFnW*l$MjuiarnA1W+{b3Aq| z4BA4He@MsbDA$_)#a6TqM|Pe-!5OU4L?Ogkf>V-y=|wR&a|LOJnt1A92t$KxgS*rR z>{y)c-r)zARn>yrwDc~cEpJhVm+ZD zRl-8Bo-CP#YEq>ylS&DMlxuS2R?xeO5BuWBjSg(KGdm`nAkyKJx}@%}nEqC(+<2n{ zRj}4EWdG==;Xdb~Z+7>qIBz?$i(3`KBqfJ64#pL5A{Eb!gs;!% zN7smsQpwJaMt@>8w4*P!N}kzB1dDDYvN}9&m}@YpV0;M`LL}2etCwsR?74WSLs~1+ zeO3g4;`mbUEP-;V2LjyGKZq8Bm3KZS)&1&)D4c3@MqWT4k8bl5^e;X2YG9uL|Hk5n>M%cYb# z-1S6U3n&0larf#%&D=qGUS613Ngee0TUMkWR6-N3aQES5&X8+c5wXFuvC&U4sgWD1$!OM z?64sS5yNm)!Ap&sGkM8Hwoj9S+0pFUQma#RTuH^Gzf+r`ChSWHiNpo@r|A!Jy)8ht zZ22edud1Ns;o^H5{iWgTwi_{q^6+!Z8`bRc4*eJ;UXs@?V7fXrDT}~BJEJUc{{3f{rifFTp&5sl=mF>4gtrld8Widd*Mbno`GCQz#(WYk31Yt3%Gw z2*nZC0aDdvWEG%W3@?9r{#Zw!i(_ZqFUMIrfzt^A1WGu-@8KmUt4wo%9MC*e<|oUE z2$wU)hawSuN|+Xck9+_w24NJk|LI#8x@M2cyUIV75Iy^~xZGg(E%85_@Tl8}3x0{^ zI}kH`857tOVZbTQi}n1H)QEsFHY(3Zr~K!?^+ahWEGJK0b<_$=og7urI2_S(pK&>4 z1~$Y4+!%nnTtRyP!vNPSg6V$Y#TGXx7BFiq@c^m?w&?DN z4m8>1W@j`J1_Ufww3oMeb-EBfTkBnw$Lck66i%8`wj;^{ zRNbJ&L_LQ-cF;Zy+$n9{PAiK1N&U)E-@n^KK6+Ujp7y=7>)xj zbqLWK4kT_d)O5z7g2h*C!MBI&?P1MfQ2pFLJi^3_w+x}}w&4&1ev5PI&qTdW`-J5r zY_dq=dK!d(e;_yM4knjQ{MVR+ow*=3TPw?EUL$W}oNCZ(kj5;jsBYPk-lb@m%CDq`$t~O1U6%AZL@jc#Uj`0QH0-#Kg8zOJ*_lSP`2u(0k6cfIBh3d7;q7y`H zei@%)U)V~4ol^M{&X=Af%D9#$SBoo0wqhcGqp&JF!7%IBhX`83dZttd?uBBv-^7Me zVycteY*Hiis`vOK-+z8E!zpOZLj9Gu63)uu6kLTqhG@9$>dHl#vz7gq0a97=#j1nM zijq*}ZopV4pEfnmSLhcL_oJeNjJ-uPkoLg?KgB%rhk*jpVNu?6*1JTL&J zvkgIH6iG-mAWb|O9+9Zb4qX1q58Q48Qtkfw69qv!RtUa<5+k+B;TRjy9)6KR0>GiW3{zhPY7OwV}1zb4l}KDK4?}h_;`JnwS(mB2IH42keTN zEqYNZhGb!|qyRSM6#KGQ$k&E9*^xB{!-gtsWo_S&gm&*pAQ6PyQoB}l;78dmWMOPk zrkR~T&gqoGlUqWFxTa9W5onFCQ-=$2>t(C)Ov{ShBW5tRBISI5C+KSh?=<CFigUK5^S1l2r5*-!=L0OlmGTVGLpO-6s`A|Jq$Y=txEX2w2_|@*%VE z43xK6-f$M;v=8qY&eB*T*l^pkP~Uwi-`!sy9x;vY?x`4r)bs9M?A%v`Yxqz?S0F86 z4riRU(+_v&pZqxVdlH6+UVKSYa#e_@Yf0qx&%=hdI|> zBJ2DA(hLGPIyV53 z{NbLcK?YH&2aCUNuaEO$p%d< z@-Eb+f^!5Zlx*H7*9m|C%kLrte+RtZbG;pB`Fno3(N?1b9~gswQ^#XniVudcSL-o`S#*U3_3Bmhfo00QVTH-u zi&1wQAhYfh;ULT)V$}VEy76zj5*jn=Xic913W2iOhSDlb@T50^(?azc9b!&D>bL*w zzYKS0p^ZcXD-!0ClgAk2y5igPO+BHy8ch6JjU*#I3MDi$~UhF^&_=x|A=-~R3E;otnwA%j?! z5HgY5Bs88(a0;q0N}rEd3H|>1^Vt(;hq@<}-jw6*kuy!dC-r7<+@+v{?Q%!H^~Py5 zG#c88J@9yNMI?lL!8|P}w0}Hc&Huo!n%?nznnXXRi%I`=93o1S)-_d6P}V~k*g$y{ zzvB79y$Y5i5@-bs>wA%k*nSQbtIlbjcx1k67u|O9_tes|HlaL+yn69msJLJ_i&~3@ zf8<6yJ6C)q+=a-PA?{t)v3Kf*j_Atkni>=@*7@gR6*Vt%=86BI&cQK-C$nec_;=~a zr$QYQa&WSuIpx=6#rhPqI zW~~Boa>dZ>N$@i~`aejn&DW@m5%~@h_6TgmE{&E_l&)O;^X~Tl?eFhi6Cal?2jy@G zRy8<(sDfMQVGS`gG`iIP5YCT{h3bq&X-$@e7hQ0>{45&g|LAXED7Wi%h=y^#siQk8 zabehk>lcLJWY}5aBadaC1t-jGxd%#VshoLG$xI2Pa|O5^`t;2{4=tQYiM8K!H{I=) zn9#RiC^_MEDEud}ZA&lZ<%jx!w1E)xcjuo&#_6>O! z$(`fXk7M}MNmI*0CV->u&m72p1j9p}d1xTwNK_tobOK+r$UWqXX$_iGwpt4gFZM18 z*q(GyhaiOZ&cNACObhqeMZDoCurT$h{hl9R6dgqB_yA=b$rY9ENV!7>7hMTOlK z+FzK}-8TeHsCpG%phJymT-e%YkiK=d*hl!Z7)XMn(nZ1|{52u`R#rfGB!DDG^Pb}q zGk~ZEHochyC*qrnh6c_z@`6-nac>Yz@?OmxkYH$JUJxSB#j*uw%?+t+H4W?@Es(@2 z{o<##a+)83H<#!bFjJ6?E$oXnX6JfWUDmrDH+`28&Bar$W7{t<)yQ|CutggXSLN&U zE6wknId3BHu-mhUe%Byxfa~4>@u;X9EwPivk4=no>P|m=#G8d+n)N|U2naO=0~zKk z&}SQ-KXQSU8DvRJ7I+F0Q@uA>`zOpD?s(EAn#spU>*AUtaR9^tl9Rrv*YPbc7@o(sx;WG$`=+8Fh>Vdd~4gjsP6`t^+_u zd^dEh^q{OQful>vM#^rYDbJ#U1$u%`BhbErxfljX3OZt=ZVIO61yyiFDqs$!SaN;z zV;4tfM=~a4oAHrJm!c<%K7y}`7tB|Sa5aIyre^11bBzmp9W8;e_$#6=INi$z4q>R8 zxp?D1dPHb>ATPSjNv|`Y8%;hrN2w&&vGHL*sWzR1#M0Y0L{BG|E|x2)3ZWYz!-@?~ z-PxBw9L@(rCh?842Q&Jepm_j=u2eS}C)BKtp{ykY;Gc*=sJew)TfW;j$Ki)q>XN_H zWefN{?~!irQ37ZPJ=jSVV&!(Q44lPK*{Ue&U-!RW?=DR~6GNz^F0kI`%w_zZ=X>uZ z#Ya$g@8Bxl-~@(+ZsWqLn)}Bsi|Fd`fi=MgX5@q5I9}!W6gV)mM^Dl;l<~HgbK)i@ z7TX$@StK<<6--+SHhDPVXH#Pb$iKD^@ZqI#pzF*CjRPPW%1}+Ay8)9ZsL_J#8N;mt@-2~de=hwCta6E`+~cq?srh4 z5&F(xsE-Y5sYE8p%+a0PdQRlH$xwlmV&T36fIsO0dvX9z%`@DsMLzW4OGYVn}k+$1+@7EndKsZ#;3uR=C0Lj7l?o zjvfl9d5aH)@>9OavWMtP$L}#qz_M{cqOpmAL7Bf7SyoW)j~8!DtBp2V4>^NmsrP;=<( zv1t6!Y~>-Hup}&+@O-H0^k#@-Gs9sj>%xkywiyMuTPjf~nJ(iOJpYPTW){3lMd*yO z_t1{ckAacqTi;|2344x^Px6xp#dCh)Oapoz9}EZyrG`yap61MA3f4w zLP~S9$$&k;ie1FU(^XZP{8xT$C=xPNT~F~0m<(tzyeDU@onxJOVOgmzA{7E@U)qYw zBrUx$DQ)a9TnM37@FZ3^t;wK1eL#`-JL?WW(zkD+c#u2_f-OngieR+6Yw*rDcilt& z!^iekQTrQ@ptZYpx8(I&(pIQw|6l>>e~a zIRE3ae3mH_7#~pARnotsf`T+%+L}Rgn(qP{2Le9z<^%Lt*E))d97N!53l^Os`uN<_ zIgbCii&K=}WKSSA>p}?z&|IL(XzdkS?4D#2=ErZ#(R;Op6ITW>>x+Ap00KTII`KaA zPk(fqCC0*^P1{?7kuZo9mDtoGf_Xr?N)cFF6LX6mLYoi)Z451W#la>-F83;jobDD% zX~yMvq5h8FIKrmUn9O1P3gTG^eNkrW{rEd+WwImYdpxf#C)5tB8F}5%rw}5G*T;Y* z{vC=V&|v&}>T)_dbBRomCB(fU43Wq7m*CSGB#xi1VH!80`U7l2GAQ8U0y4PWGk1Wa zL-$_HvRHAbv{Y6Ddt1Y-?i1h!)`I6>k3641X^BsPb|D7Q^_%oT?wWy+GRy3C#+ZKG zKEUSa#A_sP;f#3S;Xq!0!lXV^M}k-gWyNrX)X3GvclkEDl$iqHGNoS}qg1sP5cMX9 zAl=QfpY9G1KM`re4Ik2#yET-X-HQAJ#Fl)jKeI@Ui~=x;yjYmm!I31f>MiqxwoCFd zFB=P)jHNh++cIe!!|*KRxQ=VYLTH0}90~wQW)jbb3paV2X;OfryM4so{c@$KUY`9U z{O5Q4*N}WN$O_=B0C7jjVADxM09yuq>7>b17u@K$S1lI=Ry&a|Y2W&@lPs74h~{vm zlay3$xy)dc7%Y;7fN>wf#`uyf`>49Ws}4`^A#1L#6rj+32tT0x3s#i=h0ADHpxi?o z5D*Ws3Gd_I%0;$J)Q|ob729r1L^qek&8-~$8! z0kq+5KvIy*SdwkdSKq#WgdNqCMut5XlFlRxb7Zl}Xc5$iE%@Pf5ja!JIp@ymu&2Qw zQa+n>LU!!QP*LVgNl>Xw91bAYI8FqXH=7!Mfv}dI3~}U7qfr{*qlQPJuRCNGrRS12 zy8?QFd0*$So?oh>y1u!4XQl^(1W74;SwQ)4>;2gPQI5x?Ac09JH#qu6J|s`C-+rrb zj%rFn9^>s-u^yDT?kw7~#yudP)mK1~z~%T0BaAa$UWB4lQ-L!%(MF=K60aOQy(axN zFLIKyq=w=CbpC1#K2HQ3QJun3==x_8}dQWPvY1IQ^gf z>1fGY{M5#V`*Fl`64f=L2w0JopPEhNWr2UsMy;UT?R#jJQJlf%@|K?MSK=gfJqWD* z4j2YhCCLrXF%<$?!Hk>Tytd!Z1HfrUV=(}~DWhLiIhENfDsjlEk8eD6O9n=&vKQwY zEboM%ra4j6MzLi1*uZ4rHBiM-$s&MiUzbl}$X(o*k zqB|<2iIs~)i69J%A}R{UGlW!?4sry- zD3|Tv?xcDkv=Ugbtb;1UQ8C5C`wRPpp-QPMR#8i|B(`X_yk95PP4|U*mFh?P%}r5t z1mSc_;Ls?6if|n}lCq(&e4@&hI0jCJmu5y9sXTThHEPr-7O~+b0aYkY2!Gw4B0rQo z`4f}C;E)M@-2ZHU)VcZd$pnsmM*kS8^Tf<1FbN)a$E^GIz=Ab~0UOgKIgu86CI@o- zvBASL`T^O+>Ps3oKFWjJzEUM?Vn|yBATC4!CV}YL#Ye=dM5d6!L2#i|ScC_I@s(Af zq>dN)&OYlwQGSTBEdiCB9hNqCuE4==olxXZ0fZnk2_iz2l5u!vX~2{Pw{R9*==5QS zH&y~*glN7Kg-6E*xjP?^lnr?ZW`=0?a>{6NTf$QUPrw#X5+(Y01>;!Dc$Os;GGDXP z-x@PK=YPOyq@@rmNv0`eiWW0qzAI6%?qT@0_R~~;vbb19THJ3QSk9Bonk}zs@=;n3pT~0SWwxB~WzY$;Uh={}_UH>n-dp7)&{ZfJ1A+Jva@2J}vhl0071S zhlemZp!?PpC|8!O_cLy})VN73q|56VmL7U7QYAB|*!kLWllm5__;Si{_5^M~S`Gbi zplV|Lr0(Zi_K_1O$o*_S8t03eFchlcl7|?wusx z>C_rv&;1X7zWI1Ddxv6#5Wx3RdrELoEJE*W z+|Z|t#hF+z!M2>@0J5yalVOt|8!))#%=e7~7YjHWLnGnDP&G<=FElja47U@J^YYcJ z$+0*oG#Y>Aq#g`1>Ma_Q@SP*79$%ydbYY}83oPm?V-8H}3^yqG4duNZ=x%r@;y64% zq1qv@01rLpLe>(6_VIK>X(5w8s7V4XG;?COM8c{(ttI&vQaExtadxyLW5zkl9|_Xg4g&rTU&e2giH_`; zgtS>K#FkBr#Aju4=!7XMNXEUprHDp2v^z=T;SaZ{r<0f~x(d*_ZID?Yh0IN;d5-uq z9>jGasJs@d0DfqA&`&E+ft9JWO2GgQLXwaxTorQp@#mh#I^dFAjCI&k^|7uq(sWfr zEo!>Kx$<8~bqK*iK>)AI^EC~pjZUkrD?_>LpjtGvOQd=_YgmeV1KmL4bLe5l_9yc- zxg=)sl^rCLq|7@Yqo6#}-d&b42bp-=!Aj-J2QfEh2{~56!a20>^olRHWe|=xv%W~G zAltI&#+;26vg{3tbaq^LGxUa#WKd{9w99*u8jDBtL&evWF&x_-cFxWb4ip#k)amhm z01u(evv1U>8)Ci!GC>8aNf@vEiVk=%sE}azCKU|a2SCC2oIq$QRLyE4M%&+{N{m;A z52U|(kJS%b<0hwmob{AEwvPDac@}i-iWf~)ubXa#phc6{@xjtv%fS-n55ZQ(IlXWI zK($dEL1{!*BYP2gWLx&B3X7yzYDEa0EKLT5FGXpgfj~eN?FW%cz-3Pj;hmKkoxs7{ zjsY;Hjia-%w7+232n>O)fK_Hq5VJ^zjnS@O-Xx*p7X2 zUVt{2+AoY@5OfkriS7J_^*vcdAgKi_Ptpj@pU`g&q8TR3{0GNXAXKdqYF$AUPAPIW zX@=vkJSLA_FbBW-=BI(8dV)`H5qu$6)PSmAZBgoS7jGAI^C#BpO z;M`XV1`D*rZwauQKogO;3s*T<>`ey86E(2F>%!aoMmv%BTq5=W^C8ceD~`M|qI!NW zCP5MHzHt+tbyx#Dhl7bl3tce1geH?5KJ1-gKoWFP;uH_Qy?{#JVgVcv!=UQ%1K<&P zdE+eFis6kcGFJ6|mm>>E^ejxJmfKTw(8v}63B#RH(r=qSrN}8|tMkaI9Zv(oP38_) z3ulIy-5a#vQ6W!W{SqV%uuJgKt6ha+;u@#N*Q7qgFTcN(5P|y08U~h*jY}0#czMW6 zGwO3vRU(<)mshX)|9Zsidf-pWqSg70z3Sp0?p&0HAfLcRHf((;oLA9v7?I8{4zb@O?F&sDb+fUVU=3R6CNPB@t@sf0 zG42t&si`o1xbALzy?fn{E_>S&OxF%cG%War+KmkwA>Ln^WL)+jiGmKB0^G_`IK*GK z5yV0J5{Fh|!G1D_A%eKuBT}nXwW$oy{X?e=G?Uh#T-1eFsk|k{H&m8Rgi% z75r6KcY@?WegYbH9fd%@aV16Kao6A_^V^lyVF{9~=v)UXc;;rTY9G zi0BaT1p?LJcA<&!b^>RUFKQcr7?-pa$n9!N@OZFN+8C8=sq-L2Y!x=tt3r z9SphD!iA2zeag*qH2$Y{y!6=_9}Rtu5C>o-Y2*Pr_ZI&!{-J@}f*yjKCJ3E}R-1&! z^O&1!W@XrQmM|9XuV1~28IXS++$st5g}#!AMe{lJW?kct@33~j!o>m7TwEBnf|zWN z9uQ3B9f^m~Kz1Bn3qV7XXWQTKUU)S%pBZJG@GUbt2z=Y3O8vORvM^`L37*nP8$No^ zsYev)G(jHxjAW}a%nG9IpsjrcKlPne|Cw7(CJ>S46{Kc6j1hn`;n~t_P^<@2`|1R- zOUz|uD?1~iq7s7-Sra#$=myc2@s2HE(Aw`m5ucR735GaAe^Kq&uHo5-wJ&EL{b@T0 zqT@#8S0f=dxJ{(q4WIy0Ubsn-LapKhA>w7<;?RIM=O{&Oqs+ZlET$Y?c%WAh-f!Z! zXpom8n1oJj%i_kuze1JZf5Y;kV~f)YlCFHULbLt2ndhQiR=}#UQQ!b5p==19iUhNM z=p4a;{_KRogzO#08$3qEfi~2_hYn4nO#RIb#~wn=cfUjUY^FoH?7i1!OF$_ulfuuw zDXVKkIUsd`d*W?)!s%?JpmI6(pD0LW+{t%?J%B=o6c{<(WHGV*W=aL6En-(>;m%eN zfq1PnA2x&@u&=`7f&JZ=)_Xmq?{J@111 z(`~4xJ&yU$cQtujmJc=$^^!d$H#Te`rRytko2=ItE>;rHlyQ-f+MtyfU*e_;oVez_ zF~*Qcv~ZaL*eZ}ypNt=CL5Iw9Gr-{x(o&**@n#s)Uk0wE2<-=doEx~b(!s10Vj$e8 z+I-o{bZ~8$X#~#nJ>luP%^;A^LL;^iuJ6c8m|O55AZYG>jB0(y+xFt1Dm{lYW!qC%!ui*clJms`vK0^=`rh|^@--aow+9Iz zuE|0J^5xfu>ow0ppGlf~i}@(A!0>EH9eQUEBaX#FGB4}v8f8CT2jM%{29_#}4M;8~ zo7E6cdG_}Hi%j(&bo9LGw+CDL#O37!w_XL*{NtNB}%vGP`c&_qvxZIS#0FXV6ag}jjaat)rW_=^)+FVx@}jw|eY zq7We}cs~6VQ(1z(LnFkxw=hjNeu6sa?3La2wOv%k;WiXLmDVMDrIHJ-qrnTJw7=eee1)W1wZtVL|T9-Bc0Hbu3 zpiR0SkOCql6xz3NSA|vhd8)0fSlEHA;Xg26}XG`#TS0@TCJ zL-$*+Vyv?RCm0+~B-tpO|4nH7f6}5OVo8l9c2-?e`j<>gYgGy2=UbC-V*=qb!e8%q zaH1jUnEd29m{#PWRXG)Gx_c^%basb{v|@bT%SCM<;mf4M2IZA0%x6(tx}(|>PCxiLseu@6Qd+(* zw|9@6=ZJao8x)V^G+sC%1PhG6vyh?Pj}e6)!c2BY#xUV{(51pD zp1I`s^~eFO(2H`7*byY(%m~_MvtF#h-L?blmg&aq&@ehMw%Eg_jO!0%vL@M*4EvJ> z5m~0Jb)c!%IFwW>Qig(Cms4cn?bw9i^ZuiM0CXk%fjr-9NQ&=nHFyx<)Nq{;2&T+A z3lF^@35UcdkLNAhg&<#O=MR&<4)lq&6n-&0I$nT3m8=WMDd6Qbb462gPQSXXeX`gb2P525}et1yo4t~Pg{ zL6unem-RsD2lo0Jb|vmdOyOiPUYfw571-X^_+eBCwOfqaWJvsUax_}r+FL`#nnBl; z3%J^M*Ed&Ix7Ol5HtYQcivF%EV>=56cWniUc7$NJ7l74KLnR3T3_F<)9HOW=kP*Uv z2arDa$ifxV?>+Q-4UWp5(!-NpIWe|Kfw(0cY(dv8=8|7JRiF78nOVe@c zbsb4n>$Y!`Cr?}5QtG$_VI&Z=#`%wrPrf?RU}cZDhsTei>o$OM-Ko|CfO`cO8x$AG zdzW+DFdsN{i?<>UA~F@I$D~OZ9=32mx}W|MwFmgIODg_2Ly_Hxug*>eveJ>N( zs1W=1kqe`OM*E-qVYoBI;^l$(j69sFy+PvzswthRQ~Mfji~pU@;vd00>V7as@xJHa zLu^K&7MQ4zYT5wTN6Ht{FrU}wdrtYj03anRmePJIMaK2j-t|zw=emDT& zl4wi_J`O4H1$$&YD zh^hP)vWvY1tN8uw$qNDvasa3WAngV_p1eg<6))!I9^-y@_4x5@d&G=uvhU> z-d=!o_=w9xh$5pwneq*6F-tfcf!UTYZ4eD?h!y1U6G9&yUZOQ%$irIIYJ?<;(Mw9V>$7=P9v4go{)%JTpFqx(4cZa<4uPiE*#Jt zQT^wCUT>hjI%KU}2WF4x43>|(QfCJo5_#}cTY#8i(oe?Xod3$X{Q>+j1GI;mk!a11 zu(rezea=Efb2?{UY#^#DA*b0bS#=_k?qhPaq|qkW??Fq|kV~RH=r7W|!7{M@?E#s9 zo*M4(rwR}#EK=$pH8fHvqe30>vGAB*TU;M8o>1az(g5BbOhaAxsZ>Kx8PEWDJl^1z zUL)bt@AZBBCgX|}q2E4~mqLb_0S3XejBO`Zy&aF)`gK?>=I>+$j0B2xDj-k7pAX^a z0{BJoI1v&!1jg^r?+!V4oq`YubaB2Gs&V6V05g-t2Bj8E4ExKZ;xnS!S z8zSg-ZkaKL6`2(~Uljq|o96+w#C`?qtF2}Tu0TrwgBslBEf`XjaHjn+%a5S*95EMc zsv9q$v1MIK(B3Ck&GQDhAVZY#6DCp5}gb>>;Aq7=BpvKJD`vY;i&l2)>RGavki3IREI5ebx02LioV2Ci=>nJw0 z>ZZ5_K@Fyrl8OoHpcr6#$0HYTbC=di9@B624X_`ku+HS=Plkaj=OuCG0_V1XUxEm> z;Pqi(7osLDQIn6BAkmGHuSJ#&`Hgrt<5L4)27bI``={wya5}?upa$2rnMb$N1(JL%yj4jh73N6ijWO*9*##CN|?m> zx84cS?W_%nNXPlZ$}TI zO9yxn7vu>0D1XYCfg6Y!64!&Zf| zTe=Bfxi_yVo+QDFo9@5AiXh`4=k4|%Dcx&z*0gHXl)&tj3k8bcsG=BEA$+HGF)<+>$t{$J>LIzht7>%{*rN}2pT3E zIB;r^FtOFYIYlepN1I|WBk*UzU7$=&7--koFoRPj`{Tnkh`aBRllzi>=kV`hL$kHK zVwsB(%_02ApQ9+2x=is9bY>q1cJ1{bmqA(a&GOib8h-=Ym`|-_Is30!`@y;@a zYQ|>hf{^)nIbBK_DPw`i4LlI#EJ+`qo`(iLCRIXzERA02?2tj=4C5St<%)84d(Xdq zdHd5ZZ?C@n`lq+Q{Olhzs}MV}2i$mBw3o?xag0O9LV^Jj@z$C}0@f_d#8@I5_v+Pd zrs?*Uu+Mm{PGE>0Fu?tk1RNxm+^%{){3))g_pQ5uvD+XZHKxD!p}VrcMb;rgVbXri!k4 z=(i_VJVQ$g4e|&Wxz^;<;f1sTvROLL(5^g^9B8x9Xu_e|A$QR9M8W;ZK-TEn_b3Sd z5)z=rBbX3Sk9SYS1wt~AVkOhcZmokoo)vF@zx%cOLSf)N7s!1G0g@6f;B=yP4Ytns z@MK|P!&Sc$S|MDT4^oqESK(L?gj4Mb31%=+_U6_DrvBA2Qeg4^N&NQsfb$U|ObtZA zspyVnt)oT^2Qnuq5*A&7rhEy2d!u1Y-N{H@_$1{GYpK;vLaLcLjfUMTE3s z=cL1$q;677g@Uv?AF;I%8z4+ZIbw$VL3p-JYPs0;uU>h;N+$$GOZ<9nNUUDSc*3z$ zKX==QH~2mp)QDCH017Pm4H8p?!$Bz!^G_B83ur0G#Jb1TTa)4dPQKjT0M*04yT98~ zd_>~NwMf9~o$a}%_INTUkv)>EFbbozRfAh@Lm#vdFC`KRM08rB5{l9+fCGWr3hV;D zaN4AxvVPn;dELVuKb=GC1V$FV4eVn|Ds9x%0mA@|;(b`|^78K>bdXiNJ)Z;w$3U?H znG>K~2x^A;cz*sE2bXAZRRA;PdJOG^MNdD8`Y#z&w3m8(rjetd=DQHdkW zyHF+(?P&()`u6AU_oI*1&-@I$Qm1~rsJBFvc6mvG(*~!&byuc^vTsQG zlc;I2WTp?Cf~C#qyzq`hKn|A|$7_7!{{jkf#p6KMAY={#GWN?Xi&Gy)J%pgDCHrt;Umo(XV{MI)5cl*GO)=a z;7owD2s*D*l37Y%sckdsre*477Y$$fz?Xl?~a9qWY8EoZwfi>5I zElK%uJd8{s<#yP-t3AS|>3AL+94;Nl)wAjE&pLmk?P0N?m{g()vEh`IXFSE;dZnWW0J@md~DEQ6(=>TI%|l1jB7xQH{=<$?LvVoh~;bHL;yb^@k6l>oOs(l zJYr*Hngqlz57*lRe_>2SnE#-msf$DojIf5k0I+|Ov~W`)+LEtc@#M8w55BeEb>F`p z?7hi-KeaI~lO9$0<9>g4qX{Efh)v#!G!Y5f^h?J4&8%Q!3xt50ZkT#vteluUG~{6s z|21pgb5z_=03#TsRO?NWctii&?Pgs;O_fbLAXn<*fL9{hOC`V>?~FVK#8sgqCyL0* z!~5&~Lwm(h^gh&)!CF`qEarn&Urkn}oApO{4uZmK#49RhjKezZOHynLhNr=GIs9ODR!RB@ZUvC=JJMDA4bfBTtO>gN z{&2T&{*p_QjEi3Hid4nEBz;V{0gkBfB}qJU*2@v~lNyUjXl)KZq&@}g*LKrpQf8aZ zp1eF|sTGO1`kfmz6#Qv~!NP&JZb|UNX%ik>RDN2+AqNc~#VkSfNuc@_yjTA}d+*xZ zwvnyj{+apgB0%EyG07xne0DNP#mS^%7eH1Oga&`5$yq!^S8KM}Y$g2NkgEbGuZ#&=LM7XCxYkC;xdm<9 zX)5fnD8^$}P~%A)uFvL>=M{6x<2fX9caKk&1LUQ7QCK!8X9AC>$ly;tOfcy!0YScd zyh;Q)5$tDhGHJO2H44AvFD?&FG#RKL;)ueg!1qG|!5=7WYA2`-&sd`5D>Fp767o(2 zKp=<2T67mC*i=8c3I1aUC;kDqLaqJj=2x;0$Uae++NpMhaXsC!!#^x+4&Q~lZt-LbgI&+HQ@|B?7^TOuRQ5#e?d1oZ-*_qgqo z@{~E$vHcqPC(PFIHcUEM@v6dzjmOoqB&sdB3x4ah!s?LfB~`*g19k?ZWPC1?wx_9H zV=3emu9yfaB;It-9$&~^tvF}4?4Uh3Lh}3U#=*aT+=0gklH9D2y z{o2Ei!O}u(%>#D$ZgrCoZe4Ini(naNu@9@CNB^?W!N$JDji4#QfUINBGnw8dLp31$BBL> zU*8UZ>f@=i7+h@EjBDT|6rqS4WAlmP%Pt5 z6hQgWlI2au^VkfNIxUj{&;r8&rFkpE&G=Bso09fo*52D;4mttHHy!0pJ=g5SoHIPH z4o}-yzXkoozCQr_7M@UpFwh*n zTavOqVmj!j_$rjxK%s|4ms2J6Q8YhWX$iL8gH>{PndBnhk+%r=`X5QINEvdG(6cx@ z(VEI+rPp@^PVrXtOu23n&}hqefk6{z5iRw4M<6OxMzr0~k;q}UC4+B=q*J`FPdK{B z-5m3R_j!v^-wv%KOkyo@*L}36R0tOqi>5fj@2Mpd4zRDHPBsRz(M|k>J-sjV{QLu_jPN42?`SHbpeJR__=R zl80rw)E}30L>ET`k65)-1;L&G(TL6a#`gKUj-_nq0l>c;Am}-c5BP$G{`Toj5q=&K zqp?H;ar;T%yBfQGuS$tf~igD&G} zv`0{s8tqZM1L#L_2P-ZR)X7M6L%1;gXEDF6TmjSn`nJO-Ym!HgxQPgAI`%3a{C0qV zG+B)VcLR-o9lIrjc5{{Gnd%qg`IbH4AFuJWWL#t$NkWnl!fg;XLBq07{;R z!1vepRF1v?6!imt(yQ3(Os(T6q;w#II50?;F#S-A8Q!3lImE)O9K09_i?Z8RC6EKs zo74W7h|T%JUixBRvTj2OOP6f&pCo0FMFa^9>^>PbI`NIp#6U{SL|dIIm3Gq9TdKBT zr~Q(M{`+j`@UG4|JK;DEWEc3^_=Tme5CV*s>vOrZvDASt*5~TBNV}9B`dk38`s6`I z40SZ5HhrE(08$t1VF#p2+H`vztw_Cxi+@Mo__?88t(zRx+#G2^vcO>&&k}XzP5-vt zePY+c82s&xWquK?D9f5tjRf>gT!*n=Y1N8{LKE(J9j?3w{YiBRm~2MKo(!3b0Jr$< z&dgn|e(km8?^p25_E=^hDNi!h+YQ^G&9s5hY90(<-o4)*?=K4&(g^NB@*IVK8U3-$ z$M!usIh{Bj{dO0@W4=_C(>~XsTpWpOdg*Z*x!?r}sN`QWF$z($6d0LXwNN6Lfp)rurpGZcc z^nw<0Y^!h_{FJ{mY|RTKC2^OuGUpuy0809gK|=zp1TqOkw76tTB*k{H##j9iTR7cT zb=nWwTo}=|Fdjt)_T`qmizD@9SWdO`wJ1ATxyF`ulsni*@pDeT3K>rmFDQ3>1}lVY zAu*Q-9F)lQaK=vt?g1;EQ3Wt0zWKfn&osN%`yAC$Mm~@%C63o*yQyKJ zht?w_A1<>_I2B(9jguOt9*1e1pV8q4IX?#G+;j#>E=-G6iBrW5Mm{CxWqa%kw9@uG zwO<}M__m&a)m1j@?cw`B0?gLcggpeoY+(H!^l4NUa_u;GQu}6Q z%?{FU;VKr}ErJKUdh)o>%mmCNay&Q5>2q3$7p9KONn%GeQ1F?@4?M-e=--avnGtKt z>76BgjY34dCzTL-!&Y=#@TUGQjU|i^;JxTb*_r@FWzy;_FuC+3(yPio59t-Qm`Ua& zNE1v^TuR7%^|$}xpMUYs=VHPB>tFh=<*&bml#a}`*ZUQTowC8)EBT)1AvUSF&%PpA zMOcAnCE%8{jf;jbPzW2t`|AfYV#ZAr3N8La9V$BO*xbt#vmFxkRkL30m8TxsQ63_N zZ>b=D|4A$mRe5jP`+G{Bi~+QhJE*H`w6wr=O~$~K3sQSQ+p^<8>4~m7Q>+DGoAjnF zSS(x{;?&1*3-X0WoB!v|;KJyc!X+##z@!|O!WG&8r+DS&@ag^b&Pb{?izmgKEB~9T+xER; zGBnOGPNL9NAnD33<;&Iraa{+E$9Ke9;X-*`Wgu?BAZ`2MLdVHscr#D71SGzti{FUk z8|+e|lo5|o0vInFD$^Aod}vYMS)CpeSecAa9Ey%TMgY7+xvwCt?0afZTlN88F@FbW zm#?R=fm^Y?`#_@ZOPPTktO5GZdSdsWijv?0!BU_UF6gg**KR3(nC*$jJz_zoN|Gex zuDR$NNFZEz-95D?k>;ht<0k#@2b#(2+dWIqH4;PI>T8Q!Ft{qZHhK?I$Qtf0M;T zA*u|59OhL|-DDd&dmi6q+4uMTt(zwvvfKk?wB=jpJOOzp3xrHPrmJLx?0cnJ14GPp z{B2&cKjlbIu>ceslz~A5g&AbSc9OP`UFi1d?bYMcJ$Rk{b$`O|&0C2t9Q6%12RYGR8O=k3a{cgh>u9Z=qEI$G1T>MO-9nHRe`IWBNrDN@P4Nd* z%YA$@a08A`N}YlFW5JG>+xYMez%y*2P_Ps*rs+HFb7wPnMQ1sw2@0l0Rg4q^cmXUb zFfg!>HX$+{QF_9Ctn~H!zT|dI6p3duU?LWg^h=%vF%2#~O}{7m4mus)E}T?2;fJTC%rg^_+C;{%=Z{YTzp{^C#-M#4*+#ql}ftx9&0-sw5epHxaN=j8MI9- zMRrn#+A#w0x)}!_iBTqEYEKrehe-HQ55RT`_d0x1!>u)UEZbcF{fWR3p66J9r@qD` zuSrKxBw=I6eFEgv|G~9*2c%SZiJDw;6JKGLyQe<&;a`1XUbq(DF9l!7>4Stl#G!Hp za%k-HY1+ODC3S+NfMcK^sXHDXTQh4Qv@V6!%GwT&N@(U!t$E~|tE(9I3x7Dlnxc9N z+NF}KC}J$-_*RT0mZSSm_6y^nMhrMx6Wej7mNKr5g8-Kba{@psR?M*z&lA4Wjm>E9fH>c(igz_n?U*EJM5|q3;=Y@ zCR{fuR$3A=%2A$t*OTxyh^5TUoFErpDmV<*m-b+z8dpFs&vwHZEP{PdsYADPRBRj* z8Twnxs5oi@RR)wFTH<;XlP5R)t2SUDp*t)l`4-g9I7^PNd@3&x6|gZ7-qg_MNGa@8 z4zeqKK`TA+n&lz!YW-j*o4YGlMFf=Ep~f$?1cYFOSN-xJ@aW@~5C?s=yTgI9t)r!n zP8o}_Bo$3q=Mtizd>>m5X=e*og{hFdiX!minXuR*uq6~j4R4`L=cOoTvZGK9a7t;_KvPQ%s9Xhl{`&f3ar~A)`8kSJINOL* zF~}|%lo`uNMhtWUnEJ6bpP|$-&{Sw|IZoYtx>8yw&%O))`gdu1*zruwPK%v5rIL2F}X_DPBqkbq=S^w3m|K`^d$I=k5YN^?`I?Xdu zFn+W@Gi8u?BX3H^1|J}lG{<2)1YSw;!pujEw5fUu#udm^AR0;uE032ByGpiFW(i?2 z5+uNb_<1Ze!~|h8XKKP>96KvLwW}WXL>53gt>7-3zuUikt$%qP@~fsm9I1p2Hg=q? zQN-XLL#r>(&Oy20Rk{u3;1YA*@N_=9l%_vgqtoKrcTYF!SJ|xbqL>$=9E=t$JOCV0 zy{TAepGeY#90TcP7co$x`Sszu>)WTp_qT?2Kroy2R(}CiUcD$iO_=M5i0&GQVcvL^ zVE>Z5^)TDyA}_St(?V5dw#D-rzK4@Ut;7ugFxCPTNj{f>$3b6HExfwh?_F&W^>21s zFs!8D%HhX9<2zL1zc-j|;>b!y(ng7IzYA&dh!Mrk2*t{REG_QP>9ZCV6a~T2U>7|T z98LAR)0k#^cV}PKo6vw?fzy!gC^!+&ul{Jml3zZ2u=T$9@xx@bA7~-+Yeq+c^*sZp zl0M|AkR%lCP@5@1Q&N+`CMRBa%B{~p^v9!hy0z-xPFE_xu9PHRDl(}8q=Zl4ohO&a zqp4tZ8$}&&j=Z+V6EERBeYh6Ht42o$jyJw6$*4*ffjT~59p}891TR$VV*aASjZ^p< zH*->2HiGn-64*n8C zg1EI_d96Z3$I%mPb8H~+X5!j3;IuwG?rS0jemx!mOFOm)6-2vN*f_TL{quYkRL6le z11-a>B#VzzCE-Kd`3{_gf9!X^{p3K96MWz~jD4=E3Kta-WeOhq7HQzneZJHz2ftC3 zj-K1~Smu!&BiREmc+&Ok{HWCsnGxe%-QR#2QHbWT|1q;B9PjBSzH`)?jp=Vq7${Ao zT;Z1Bbhl1#G&xH7!FYChvn^^l8IUe?5sDZRnL~5~To_Ot>{D2~C@ds%_1QuOwU`dh zGQ9)pD+`xu4n~hU$UczxtZEm49q5g6UczO*AaqYJS(D(dujG67Tl>6ZLk7eF@tFdN zLz3^woflChVgEq&d)Jpp?4nXeOqaarsij%WAAsn5AiRpfxyoCk#8Gf^trtDAhH^+! zN3r5YB_bCClm-wIBiRaBH1DwJ2o2bJ#fxVdw=qSvOI{u!NmREPCWNEyE`65st82_) zP=+I*tN7sXnz!loMpj!z4%NTVa`Z}k5WHD28wi_(k`;kvT-B5_l`NJ*Pu|39QG|B9 zH>vp@D&!64Eu;*RYbGmU7FI&p>;_?DaJ^(qq|_-F<8a}W^Xl8(sB8hEo-OY}uMEG~ z%2~u?aVsJ+3%jOfr~3&?n8l72&mI@CMWZGmQDt;D<1_0cD;4-7{gNG5>QL2RF$M7> z1NaEK%C?G7oqAbT@MLCayGI-^qu@xvd_%Qm*o}O)P@Mz+`%r!5zh}ATY68DQwE-#= zE)0Mg*75S72W|U@)u!I4oQ{m~yM^fUlD?h@TxlVqG75JQIUvFmdty6voSLdLHKDvO zYj|&%|A?ubHlVn6h}J-8P`<$cq!SZi@?)yv29%0^*PdGa-G494f`-Ap0vbu3zb6{* zP{9k2dEs&5&C}M76J8_$)I$x4g>`cFRO3O)3L+!;1am!PFG7O2v36l3fOh|?^ zd0y6Kcr7Xs-tk>gZd&`*tf}X68J5)}koXhQ7^-z`;Lb79L5qaP8BX%y@U$3Vq=!c# zA=0qILA3deLBSgInON*sSS$j{@fU6;gqbD85xFm16?zMzBme{L*ClI@jv!}7HwQv= zR!|P&)*K4_-nPF+kTJ$K3NnHK2{Bhk$)>~wvEHHc6F<)?{XD*IjT?;Y6M+Ws>sW9( zddN!_JHcC`M05=!d`)*@DKF$u7-S2emRht!QGYf8)k58J)eA0!n@Lm0D;0yDD*>mo z8jm)zcskG{Lp*6g!QZkLMGe!ZKpk!etArKB=ES*p8YP*Jj|2liN1o7JP*9LVG6Z;B zf*&ILo<6uD5WDp$r*@FU6cKT?Cl}SkOa1m|Swu-xPvHl!*A@g0r?YbM1}7`u^=JC` zIg{M<(>|jB4r#`?mUdG3>gC#NY+Q$($6=5T*jjp_S~pF6=`>c)R^$3z^`w%n?sWR3 z(ggwsMzDMu<8>1gH4Zf%KgH5ja8f&Uew-0e<&1}}10NNoFxlq#hzeU@QcUrA^|hTc z&sJ29Zougoen|mS6)6sKf5YAt3>3>OU~!n^{QNSXlDI>Ey_{=BV}6GdH5$IVV- z1JvoKXB2gfs-Ft#;%41onMk1pn}gx5A(&W7$fUW+FFNBH1dm`muh6CGa_LEt-V1Zo zo3e;aRRR8BwWO1Bb_!TE@-kP`6OzqBdeSH82;owW2rg$SZ~bg=7E)XVD%m@fGIO*O zAc%(xKO=j%l@K`jM~tAhsFNkz@|nX}y6#n^RxvpPc8+3we`yQlKws^#Wl|-FRfP0- zxc&q`&Xr%&*7!;A-i z474jgm3^4YAhB|Qm_QrW00(MxBQ}(JsmdfBZK)?K56yTI6ojbEQ3Ke+N881o`M(7` z>_O=ue2P!{nmUxfb>sLZ5C-x(DQAaaHzTqkJ91*)o(Zf93s)?dh^ zhVC>bOoa#eQ0cit>J}LaJZ0KcnpnzntKTx1V6vhu4g$nXwpss?4%@AeJ%x|MJc-|v zgvFTdn)k+kt~q`D_qEk5zxdl%36NkSR>2oJI)|hRe=PH8WR8xazOFoKNUEX#(7Ym`@UTv_Ktxtcq&`9{@1%d$Z)R!uB_w% z9FKGfcxmyo5{!$B7*$wBLoXIs1<8%r>Lgkx`~CP1e8%DK=E+ECV5jIl&e?K9iA*jvx_sm&kALD538O`6a?ez45P(QW{giPEi=1)U;ZjI26o2q9RjnQp`RHa6 z;G!%J%8bbpp4o#wc{&^&RMYrzTH8j=L;Mg}+&QMwu_jb6Q0H^uMgQ-st;o}e-5?MT zh+J+TLj!>)LCNsca~vHqnu2Gk>9C4rewRMUxx;u;ArRe@^ePBJRE+We98M_+ znvi@B_yCiV20Su*TYA^EAVnz2ecJZKbOIvftMBx09MAZdVNn@!p=jPw24d(`ZJtk> z@=&3q!QH!uY~#NpS`0M6j`N(wThs|_s=mOo!b9*L79*UDX5Z-iaooMb0V<}#<_!!| ztAqtwrJ_p^KE~)Ikqi;Svkp)32T~{|nZZ5OH8`@6r;!kap==*3C`LK&T4FPkQ`V*S z$Bc8vC3roO(|~mV_#-qCZs1)StBI+q+=+bf;-rBC(^OlIZ)>=2MQA%o;S?&v;n)Tk z#h_?e{-%HY7V^riplG3*M)-vu6EtCJ0>JUY%=0zko8!-FSpxQSB{ZgXhihZE9)i^h zua1K_s*?2N0b)otR-hC}C~IoCN2%oihE zJ$Y!2G%Js>Ic&FxIYZ}0sCYfJ=u5^zE5m>$BS1puPBZW4xV>5eKpmh@4km1e`g_wO zp@Gu2jVVviDr!REXTGn`cW~=TkE?a3*LrRX9?m1lr}ctG>oA*y%R+ubUMdXBAi)=A zr@kk|N~GZXt&l$Py)4)p6-okBBcvMG3Z512f3_Hh#a{=VTLxKpiiYk4aJRTB4U0-L z2;#ysKc=fo<9{1MN~ZfSX8bdJ*?2go2lf!9l;$=VYS#qAL;ertlh8fv`I#G&1$b zD1*fE#-mii1vA5waO1qF(fVg@NENQHV|)6}R6m1>?5w{uGdA~! zvdmzaWz}eI-BCDecJLrMeIYM59haYR>f(cF4kB$>bgb8uvQaGdRwqUT(=AF6yEo$g zMia10XO%qTRLZAjKHle;^1C{W`pOFuR|`G8i{hp@0uP-NNImzVl`S( zVI-vDH4sqqb`2JXKo!5-@cLm>XNW9p!;4EGr3bQOXmjG5mk;geSv?#oZ`x19ZRNN2 zn+w7*mLPB=pHmr{uGxg!pV-kH@p0%u^9hW})%Y?1p@9vLVxXR5-Wp`EX#J$jjJZ3TWf7f9$U@j?wDr z)bB4pA(ZqB^uB*S-JBgGGYM~W_eoDsKmDtukHKH7Ex3}-*?vtttT8&JP7^FJbv}+ zt7}w0cE^3NxJ2QaBMHZ*VFyKMH9S$WR!>ivpbgW8XAu?;-8f>G_)4!U`??%Vq&(e` z%NqMBNr!=ggL}*J129AMA+940i&Rrj?y=t0@w(CrqP}8;lo0ai5>vQ-|As&O_;jhF zLPbggJ!k>_3F^}4()T-20ofejJ}`}d*h<;hz9y>DKtwTDfuA4y&O%EMHu9j!Zl`B5 zY3?{qeN!TYdw@zsiy`|k-!4tivNKHVFj|mTsK2}>N8NpM-w0iGg(PmS?}CFcs$<&?bS24@`He%=z37x| ztKc%KzjpAa+2K+O-*kZF@b;rbKYzBlbDQ`B+O#*3z%6lblk9B^60r!Q@mbe+zs}zA zsGVTbG;!&2`b~py9yNqD%l#f6fH$NyaU8g7^h&Dk4hFi7_05jd+!o+JqSeSqgytT8i7J;@(LGKSuHQgr-GEdfF^I>Y^E zeK$&fSciXYDOOIik8!xiE-7VF?i4&60 zem>XwS;R|Vv^5`Cb#|;4{L%gl;jT$mj}jN5)dq9oZUw(P+|}zn)0LES{~yGrlyM5M zHSoVAsp37!sE%ohBc1mRq4Du5p8^Urp--yqT6_Egy#nq6akUFeYK%DEJFbJIqq7bm zCVK=UC3MG-korvGV+(&v+#@KfAn!t>S>|h0I+#b;9U?gdz@!bo;Sb-nR#<*bVfknN zIiXkN^Wi+YJ5>{-b^zm=sxZtTa&XC1NCSo@Bxqja>nBYTe4SjOqTUhN=y1a{*~^bg zTCCKB;9Vz8rPCx^jSj_Gb>vVS#k!~}NT3?|5Sa}pZH=aAmfP^Pn()6NBv$Gc)qd6( z&{QZuu1JB>o0H4=(IJCERDmop#uODv#`t5CbK5ba6Jr<GV;3G)9sSHhcfbGB5n1tZ&C%(-) zPT@5*sgAD$UudasH^O_{FZ}opSU`>kIm%FE_vVjxD!6bBS*8sNo89$C+99efI0ea4 zl_Pd&XSzgLDm)yBm0LXSLfgIPw5$^wdn|R0sBdlZ{4*4HF{_6*huxe?yFi7Lo@XY* z8<>{{{7w#sOEun9oU&Y<>bT;9edW1qogz3p+;PD71ATY`bqCgCq_4L!GX-#*-ka$0 z6iI?qz8U|TpQt|0wyt4anav6YzT*rFLG>87@xzF9;)y|$2Yrso4=1(ILv@Fsnv0OK zf=LR5>cXDc8yeqSh@G6*zCrr8q$+`8BA@HedFlk19cdh`5k`YyPI6`=%+%y^##k`} zjoMiRle9a!{)1HKTr5k+6%CIFJE52tv{}h2kXM=8yPyO|Lk+^WJJ5;h`T7mhuA^~oyoX3M^`awc*bY1L#06;M$F%8lq88&`8 z^5ajb(@Cm@7g8ypi&h)lHOa!D@fEI~``J&HsiQ>F;!~}VS41_AqCHbHPoGNRUFoxg zBlTNC2I_1m?OOr-t?OZv*gcba-q{Caye#5*=4jz~>5);=x~n}&c_|Xd=dv$#S#Klvkf7}YgdeFXR;qP{ zgWewcRodg@iLVMa*jeU<+vth?x2I~$i}4Gg!U2_3{!E0YUzj%~Mxh9c7oZ}jdmoPu zk2OO@bjE5~3}(m5MhsPEMc^TN1@%BRx8}wacCi$&PiUvBct%>#65ImSgdRryg{3on z+>v__a@j2TydR_#(28(zG1NxcbKxd1081+IBHVLs+wQ^4k%-*s=_c(D#rS|voOOl; zOTs9+?vah8*aO$1%3HXG0=50bl@~Ka)@KtyFc33dG`q&RX&G%#Lk>3@tUM=~Pf|5{ zPtrw*aZ;Y(7bH2YrRPt=o8u9`xK)yg%1FJ@Gb@Pu+vGtn8rCOWYVcA=8W}BAQUGOa zH&r3AwAAB{(CD?WOZbqYi1hZtr!HGKtsP9t4O|7>0>i0)kvs>i zl_Gqbg;aut);hesIU|YVrHD21^1!>g8q#DHo7NNn9P_O4R4K1OgIXeb!*aZb1--*F zH+@gqI<-9j@PKOsp5bbH_jKE}=AqVeQZnCGrX(f9q{pUJ=px#J>^5{R?4osD0(nU< z@Va<7d<3?zLKQ(5L&JOrY z0^pEu-v&x-X#LM6q$K8jsDGdiOD1L`lx4U(nj3aTJF&4+^d$|;ug{jYll1Ly(d$6% z@tuQRI8DLw2sr&z0to_136C?`BoL3SFa!wNv2ZdVH34Ns%MIrg6)d9q^M`5Vnl3 z|82L6JI0XnaX~iLbuiS(e`=GS-h&g-JpPlx3fzbEdQ6p?l2shHMLBmRW1a7Y0IH$Z?^`?Uu?btL}b2p}spBbGVBHh=-_`{NUM z?05oIvqBOMmF#lQL3+yqJYJS2&W}~Y(m{mIe@Wa7(YFQ9p0;uBtTv{Z;kuzzQ{zm^ z;<`?+w{6->LBkRk#1B^QQ3MF&JG@*5@*OD1x@iGgwMfcgpk^<0K78hjCGm5}4lRi$ z+!AHW=T=H#@Sc8;#QOL6j&mHp#mRxO1nTJN@J?wa`zvtZzx4(c=(l)`!2Ko8!nPxP zotH1k8#Y#OTS&@mnq3y#(KI>tg%X|w^;h6Z*k7-9umM8@VJ8KMF;gL8S7ZTTprg;S z+e@OmhcUbgmj$$?t>jU5>^*g{o9ly;OZ<95aC0$q0)Mn3{@n2pI2I>QHe@aR-@jr`j*p`C)D+3m`01;j4g{so7lqoXKGACym=XCQ88sIl5y3W$?oBNizJ$4+ur zmQU?Fd^;~)+wtHfLk+SIThKPP@54K+;YOeHmOVv&bcFO#akR~&%)8m6ib|PHjfbhD zRxc&#kVZWmz?U&C%^wfZYXmfrkR>h=?aP8)LnSfWu7I6vke2~#J8AC}u(}#C)vc^_uujTKQh>w7FJED>ZH52@28UWEj$zZz zIhWg=ZTDoD0N(?qLCL5X+EM5DnZi?+3sXJI$l%C(M((Q)&)5X`hjaXsET{^*| zBuNGakuW^hVwZTT?4{f{%tV-=Fht=TQT+)+#^wR@hVvORhW*2#Hp&B;`?Wi-LK+W?!O*>&CnvwL@o!5DiP!RMhDrv1dym7ZZdez!xm8Vz}_2)&eODXaVQ9bZ!iAyC!uf2{e*S5r@Ec0$E=v z?9r&&Vx9o68XyRQWlcI12%YBvctpD8AMmx8iQCoTo%wEqgqKtqIu2wmLo2_NADC?% za|Cu2T$iN-3Q&%?p|E;WZ6WvT`+z{F*?Iyx1=-V?GNWUJ*OWro=>Yfw7l_xDlikjS zPgL7+QSr-GDqwLi3wW^IhRkhvrYe=yI<89p#4_M^V3*wk5%2AmfPgd=mR|9_HDAvK zk>y~1w1N)VDOf(Uw0ImO0;P?1*S70e*m<>BGSp^+C$<7&=25h_<2;@ z;!lT2x?r1vw)IBpKvS@Mv(-QPkN>>hB3FMvvKbFNGP}5x4qFy}!mpj+9MQqX96B;bIOIwuQAA?h+1h(+>xh z;^9*SIGxz@7B>^D0l?QFV+i{V^tr!C>6FXY>0s8oMd7muGz_s%NMREg3W2L$!di*F zUnM4b9o>_xX6aE)i!^7_S7%qRL468kqP>7PXj6!sl3Z^gX#ng72S~)%I-wdP9d7et~?;#so%Ly zs9=P!zz1@kjn_qigLE8>NzXq4o(17<@lnO@q}<0!he%J285rbVK1 z71kN-&8xaAJ2(hSy;uai+SIwidhusTda(^nrsGg+41H-3VPRET`DD-UP?%cVq++^7 z*)2!J0RU4E;5``*s*V8npMwgA{oD0f=~=oId~!vmm&jX8=+H`tB2eA5j7+wP8JVx1 z9^eGwXwIB;X?4Cji&+lrrZ3m=`p_3X1gr~Atl`g|TL776dnD)az(PoT_Kq*Yu!o(l zAzcD6k?I2kRK~1LqVT>Z@@)opSLC6dg*H$IB~0d^P~kWqoATH}*~nA#QEsVl?hv5> z?-(Aym%?QjPNIDZW&w~ecIaCUaecV<_vGdH^irzLnE|-fdrWv>_U$1-Oqx;!F*}+gr&g_Stk4lTv49BZ z+bQ3gd1VnDL}P%=oDnJxqvPHG@{MPM!~&|$(1mg!eQ6(Dy734Sy9fV9612!-3-j!4 zI+d5ps44P-G8+BlMKiuMI`NR%J7U?`ym?g4kHHx|ef>bf!Syu|Gz4a|fk#GagYezv z@?RgWc64XUb4dK7C zR#B z{thCRSv%4*$Gx#QI?&t1@*dJ82RD%Y>3YoQ7^(-z1kqO@Ovq`i;*W($z(SAdGI?35 zsNNGRL!RguN4#o!@1bb_hl;MilAxdtNQTVxW;6L7r!pAT=5va^!cUK);t^Jv<=|)G zLG^7^1;+dc>uMM@E2z-1171FpT5=LpAn@8k^eeU#;+_eD$+DE_RZ)DinA55wzu3Iq z9LSxRiF>=dew6+m3LZIbfl#Gs6`AhwNa95n0fLt6rL)a|L#QR`z8uqSY4~9O?Tg{R z`MyEi(o;SYC9zz^n;(-X0vu>ueV5d@7YF_hO)s3Y*J$q`Cm!BTeU`9Y01Ap&zXO`} zNL;+*%bBu*)Euey>`14e##nmKgxMh6$MWzuT?eYivJz`=zA^C-bv^3hHwwl-U72|a zB?yMeQ%}13?&+q(-v%$nk1oyttdS2xc4b3xAukA`5IIUd%y~41_iT~Z8{FT346Meh z|B`bSHZ15xz!JpX7ipp7xqazf0-pd>b>=^sIw-1=BOpAcavu8p_X@rOS0L36VTarS zGtpc9%c8gx9)qqPJH(eFbKXdYPJL8|%_2cp&O-Q)HC6B3geiP*29!`*XsCQ7Q3iz&7~ zmX?ft2)M7|QIcS09ulRig6%2>JPj02GI#gCm0tu-bQ(JKWZkfO2c4ySRQeRLP&az0 zZURKDKpv8^dcy`wxh1(~YCI5%#vG;4;a~^H;Ibl28<#?Q>H&(emGTY__6lh+urQkz z{2p}t0$go!&G}hMnT#HXL>g33wK-I{Pc|(}OK9f*mc;Lt#|Jo2wU9P(LiV1RNRnJk zVqRRzSEO30W+M=}l)fGDoX(BNT}g3EGS@~?M4io{y+w}Nmnd*JZZ`vQPFaz2Eje(9tL zn}qyk;$^|zFYh=6uv_D6xV+KK)&B@_cXfy6(5gdbGxmStIT7(y(bn-Z6FObB0`dYv z1PU?`$+RozhGQz1$j9CFTTVsBLyjx`j+5wmz1s3c5z~r~n^q}ZF8cz!&+NoONd+AN z5;XAfI^Ed&(?V4>>G@?8owx<)R!w&EG{;1)hG{b3Ax!jC@+phYlS}?|x9ti#d@p;lDdpvxG=lGujt5<9UNWVAixybNO zK2Un1g~1@i3=l{p45mNEclVThwsKg9Dq>8C4bq_Sk>(>z|Hi5_Bx+Rchy%joz+ z(|>%25SzPd?I9Myf2X*JtwKJ3rp>W@uuV#L-lSAw9!Mek0@D?wFKiV`PJpY@@y8;2 zvIIS%U_9*GBTq<40NX)I?UY>fES0gVVP5{WQE=Meg4$5 z%Gv{4x(3C93f@u;?IGOwk1aKC_zFHiZGVh|geZiEnJPN1=W?0P@-S zVW2`}>p@vZ`b65q7z|yT5$!@8o-}kS`U;*?9KATlA=QquKD|5+BCmKtDn8uZZV(oF zyXo8|26{XcTm}TtWln;#D~zbvNPgwbBVvyRsqsdF6h4r^RfY5#Gz=iv!;L$f)~j)iMGBg4wFMf5gloLB z&7AZwfqJpw1mp(BJ2wlc0gFE#6xZEs$&a)-;Wsih+NsgM1c=mr_(p%Sb#HC(6Ciz8fl5;d!A9z4 zUt)TgPad7+dw_*D77L3lP{AO3xCST0h$T^m>Qa_%$j(l#J&hjDoJkUi^2kMliN>yQ z1(t5o1gju&)|TtXb;M$&+4djw7lQ!J8wnY|mb;U-V=mVFS{KD2z~h-CY)3@14O3GW zhWs{q<~l6mc!37!^zpR1hpu+N&3xscDSj1g7QCkv-svW^C&_PNBp{I=@}}eHNaaS$ z!`;)v&Ln{-#O09z{A>=z(=PY|!L^bj%6^Y~I;RrI$3%;FyOroj@U$b%Lmp#R;v9_P+o3uy6B3hC>WS!^;ck{5d!9uCivupqL2OA@4OH>7}|a@t3n zoM06?y#VX%A@>nYBS+SdiH_+VhL`a^L*Q@$^4By+se-|9##%7nmB_sN(*}u^Sq)f| z>*q%bke_)J-fSqU5~nqsmsass{=iJ}`2&Yp5B3FWHO9f-MUwKPT+;~-8WM6tD{o+99)Tnbz7rfwj#Si zb~5ytABxUaCyxf*uBKiJ4hM`1wz{z;t;Skz=HF00PAtHM^i-)Qpm~6#1Iqvs{~Q)3 zS91)xn7=bhfs+=2HcB`QcdLQ5Xmf1}j9%h*y!13~`;2PB$2R3K`Pp$-eOBy|nF~)) z1sf|AR%iaAXosUXJ5kYuj0>FezFZKMk+U_RpVd%?h^I&qtQmP zg$y>?1%AZ}B`i)8-DYiN0g1udRG(OyPAs8J2?P{@a}@$)J5K+bMhHMsBiYm=v8!rUf zAPZ;XJv#=0S3dyT;hFRDUVpgy_tTvu`5n96nYe<2J}gDhx9{*lz*7Jjc5CjuHpf%_ zF*_wuKhLoe!=M95#{#sgFv9koFkLZUgqBI+i=7G|kL~rX z`j_lGIUv+k*|eZbc~e0a_)M};fCtK*tPTC+zuKGse#3$QB6VU%y4V?nF$lI`*if<2 z#ryrCi&2QB!Q^2NiZ%}1ikdlOUpB&O7r;LDv}_QppFYW7BdV{RfmDh)7(lzKDe}=C z+32A`-=T;`k6zzan7-sZ#xXb}Ox45f8NxBxdJMPgdR4F%{DvSm;$kp2pT zafwxyi<@{gYI5w5D(;9P$xI6OyUR-m5;K1BNDK&p2kU$Hn1k>0~v0`eiwsYA2A zCXqteJR-lqW3!fT8i=~2)u5ro&y!}V{hV+SsqJX%#Jaqt3V>|8Tw!CU1jzPMz9F4a z6qId7g=7|`p%%x+P96%J?|rhz0O8`OE!5UcniYJeOu~lN(tOe2AO1#AyW^=J3d;@} z^!xzQD8p5e%XNLLSI|F^!$wYigXa%ApX9gu@E$(u7LZO#$Q8aw{HW6R(;nojNw^wr5z1k6Y&K|8()t)Dv(E6n=o z;gcfAv+>-lk_qAgOVo@FcPG1^@D@w!Kz4s;Qq=t&(o{sW#Ih}`2trrDJ;H@^8Bf0A z0Q@8kmyS#Rle=gB$R?r@7lY=J`O3&ZB!DvzIhriqB2_Ytj(&!VOSU^}d+G(P@uMG$ zM$nSWI!IXdQFVg8ea|ale?dWxR2PwYMmBI940cXCnaMsjC23j4*#Gpu0;u4urC1ah zM6`>y57!68ddOnElL?gcWq6((V0g{(9r!SP9J~1QkxGm_S|#I1^$2e}+)`E~%vI9kAoNNgC6i^whwl<5?z zmO1tXxbzL}`(o|q5dAt;i)W`^$Qmy`evSFpj=UW{ohT>8&bI*c{C2x~i_9}6u6C#1 z?r~5xzhBbKC4HWZDGrJQEEc2!7&`LE1(n9(#}=kx`O7@{p8;I%MLy)RaIcz+HxW3j-kOKUbuy!|psK zRN1~9^5R2E{Ir(ku}0k>YYBxDiy+kD&|OA{V(gt$=uT4NbdsSvNk#*$q$q{vRRioR z`S#j<8p~;1*+JaMuU9r=kkAxNtANH>qE+KpWv7p;q}}YeD&+`i8u3ZdM}VreS+kxX z6+O8zgYHG(zKR3F6&GosFu?YR@sf-tDIHpEy#H;*<&#FQ)G@N~-1`>~Zx;f=DPUt6 z9569&X{5ukqHbgC&YMh)dufx{0@VkuQxewZ4QN z1=KKb@qhq#2qkh4@o$^~Y2JCP{2*Lj0lgy@>j535KktQw5XO3ug+!^1N={Uq*mk7J z!QWNmEzT8LLgjeBBejn3ED$)+j+2XpamvtyoO4=224bol(S35$Gw%!Q?-Z4zO0vGs z-@g6fZ-4ude-vXs<=ek~Zv`ofivISrmW(d};pC?j7r|*Rz?Sly2-@Sp9v*WZBG(FW zzIY@htOdy7B0xn5?I7NwN;ONqQ1&R7)b zsYBM8d|L{M_BYu@Jnu@B3d(7(&+}J;Y(TEu$*LAhSk%B@Frq>P8j;+5b?K6oAToDT%-D%0b zqb&r<(mfvxU=xxEvHf6r6vF&zWmpH{m!4J7=^?cy94Ic@@g^Gie~PVnR&n@rKwzSZ zgNhtH;JPUAm{Qni9T{++*8c%qoj9pDMgOyQeso;6{f=`r>$n70>~28|efZk^AspX< zPCPRn_9XSCzCf85B`_#K*ebyV_J%!=N08vwwCmBDmT>u+98CZ_4G=*!M5>&8Jlcg) z9E=UUoYRI@Ck~xC+z!-l*6~d}HKRJNy=}}SEWYHAAww~c{`GVv!5J_qybA?43a|MY zPuC*~y~B9{;e5I!?XH)G>gGbtqm_74P_hO*Qq=7JNs||W!E4jrbI&EI7ErW+V})!3 zIs`UK=7ERh=8CRx+LSPg))a8-zP zeU@`#N{WhKW5xIBpMBrmT*_S#s<_$ivu;=B!ySBF64Red$&j9-0y!M#5tLF1k#m6+ zUi|IO`2c^>{RS*69ad?;JWIx{IAub?UjtWYp;{+>cPbm%xL}ZHB=>Ah2(n2uG*|k< zzLve>smn*TGzjAr)Ou2|WwnXd1|*ctknu$K4xz+1qH?EiWj~|EV%#C(iU7VC{Qr8F zlSLt=mps-vMH+N~s+{8hd{(4<(yNq=i^#K(=xxMfH&8&mzkU!1MJeJfT8~JcszR1; zzn)7fZEa`465s9){Y2Y9iWUL{9~Wo*uuDaHr|V7@R_$&tjF-+hn;+HWw_> z!j}y~poNb?&;up{${SZC zZyukn8JxbVuiztL79*9IyBl+&CcrQF{HR^AQxl{6V)0q|`gMIMpUGKZ-M;EMfUa>LTMf5!AkUdon!%S|6YMIk z_fnJ&wn^2%?|jnTv;oNv?^s38J=i6G%|Ij%_w@)Z^&3BK|IC}gH0d!J#i$wOAN&sd zle|2p$f;e!>4lDqAOk_IweyD}8jj&r@atCKT%kU8t32K_XkDJmG=OQio1_^wnmkOL z-5%Yr9XxF`n83n>mq=kuUg;fj7S9*JY!ynpFEQE#+%xLmvay2|1Q&|eI5@G;{~8u5 z%6aIDn2fOGS4{9(=o&Nr5D-YaV5Cx!_(x92dLQAe1oLQPz~D7Pr-Q6f4~+2ZqcLfT zVmUc~F8IxY6#_z5u?_{7pr4~=@Kk^4{8_YZtD2(d_GIKC?15HD=Fl@y6Q|&8zXKNsKdHay!fa(AgRB0=>PUUb zc>tXO5Id-lhdWOWM_#dwNao`~ZwtzzWH7lq=PDIF0e|8niVjt36;U36=d5jX914}>J?rjlYJ3XCifzKhu^%3}-$*PgKaQ+cfr91%Rqvkek@ z=v(@eX!@q)Lck^23WN$rJc?&JHc)H9qo@bK!#*D`3&PnJ&&j=&_xWN~nSCAA zV=>+E%-HXe&e@2Io~^&)*D>?x3TEA|z~}=PA4uM1yeNfQIO594YRAu!W`DnbaHz%1 zxUPbEB#rG2r+k#3lczevV>(9rbIK}qP~%alz)&)6CXIE8-c%dE63#oTzSf`L@JFrO zq6XLG#%vwc;!k?2Aqfm$ErThSJlANHxRFt!7lf2B;iMx)S*xUims(MHMkE=UXuN#> z{l_4=u%(mRg3~5-!665aO|nqQZM{1JA2rJXrol(Ox@{?la~)>`Kz-y~fXMB-a9t3D zw}JD_8QKHT#c{JEBhRT4I>m~f4NXsWB4yQ^pLX~3256T0@a~C&(+5pz&Rf`9fUP3F zsmaLOgiOcta7-XG8x4Vv$I;?*A?VqNI1jG@mDkXANLBMG=G+GU%2u76@M&~WYKYCR zo+N*|qj1i^c>5lL5sJJ}lfhOgZ_r`kI4&fo7F^|3gBk}297v()ZX$dNtk5q$mqTwn z?Im#2QFdw#iVx>3s_8ot#g{zE=r$!Jk^#acMeSaPtC;h>WK;6(xH@%e+2Jpzx6 zmE9IC*lpU)j+f7xAN#}8jXA{rL_yE22okOx5ju|We0&UO*T7KiJB3A7l$<0eA2$IP zCUUL&e;VEKAN>vE*arCw4}d@(M{X40p>l1JTDBY5Y6NON*l=Gx9KtG;4>R!_iNEwh z00Sn2(g9>2u4u&ow-y5PVtgjE*JL3OS5*pOM^8Qi<7^{Kel&vPG9lxxa8vB>6@wGM zP&C{2D8KYQ6@9yJD8bAX*|n5^d;R|U@$0Bsklz2y3P<6iSb=2PHllKdn=I;kA_oP4 z^XXOsOji^eHJ*e;tUEF(zTroR-?fm$tJ7 znJHN0pe;FMt#ch@9Y_HLm)##40dzIgy2tUExWC9;qTP~0q6kH=L&gCdT!HsTsGr=m z&zTS1q#}fV{zSGN7Ab37ttz1d^r`w}@=}%^9nlW^UM8qMW z^@j{D4LqaUHP`@-Fx`;pnc_df%k8frsA^e-^u#u-?zS!;Z6A;$0@?*$mKD8;k2NgM zim}gNhQBn8p2^b$=uyB7Lt$Z?+#$qI&rMsW<@tcP&aCu5hVM=V!FaaZV`d1!6^Vn; zb3w4e78w)h{C_co{DEocsLdBjU!eu1z32Ebm1(%%}afk4Z zO#aqlajrNTih_#{t$kYW!|5KwEw&IRF^~bT7Jo212GRv^V^m1s=u={_QZ?vlqNSg- zzj;S)D$ky7iLgjMVHUzFv_yu&BLo02Ods59HK9YXC6F}px@6myYDT-0v_26=yx8`z)tKbn ze4si}sYF4YKQGK`(%8soXh5qQx{Pm0P{oD~;rCxkraGdKc^~lN-+)VLZny}D%9?G?UoEPA3J;z&%(?i4_|2PG|wVVapavH7O#D6 z*J87FZz^$3d(u{*zA8-WyiG4VC`lbu=Nrddzh-+UsVUw!`a)2+R=8YJVM9yVMu!bK zVuhf?7{S0!ay=jg6-eV9v?lZ#(1|8#8!z7YKD52NbH2m#ggn&Khh?7ik z&LA&95L8gOX$rC?9#Tl@k1xYuwa{XEXxa#dL?-~ALD++s7#YAaUgs+e>!@sAIJ~^g zR#}E!(BbNln%5OW_#IGBA;rPLta>#3(g){g3aa}EO{mdfi|P;oUT_2(Au>puyk`{r z?Wx)_!1#sY#ep&pe-@Zfzc3_tvK8Awi85z}GBX(nf3nXBZ)QSPAdaBMZ(z}2@4-pX zdiZ&a|H;r`PM1Sl85bbrg)n2-vzU)V;i6+gVZ~tHpRkUwW>@q2Tjp8P4rBY|DK#@0 z1E4w(hG+zvUy}MYV_YJy@nt>Q@rmgbiJ$JijRwKTi^Jk6nljC%=a|0jNj=S4o(1-> zXYp;heS2Zc%3tAoNIVA^J+>TDH^a65 zz6j`?c!G1$9ULQMR{)D~d}$Chu+O=$BS$9o8XW7h8yd;t8e!0aY0knG8hthe!Rhs$ z*7>YBi*L6qIV8DP-DWa2n6)ou>J|8`3A6;ox8^|VulOgL-K?=+B1VwGSx>1T9og_w z=P@6DWf7^7K%VY-dq_agQSoNMNUT|f>$TvIQNOY(I%YllC0GMNd~TVu051pud^JeR z37RGoMh?i$3xN#pv>+2rp_dKcIkrCWf}a;Fn2y&jKmb;SmG%pc{a@<+PYm7p>a*iS zxSG5c-QUMY)9)P z>%}+kwU=Eox@rVNBDRhM)HqE0BgNJjuA z+vJK7>9zUC-QBM!o@-gLvRJl7fk(>QfV>c_O~)%Mal!s|_|!<0;;VO0x4-guaQa=5 z2Gwq6DtT2&-Ny@G9#n5?$Q0cMPzG2)MES-oWrR`xpu-f#B2}g_({7-Q1C+`c1C&9M-Z-DAS!0dO08WM;*;mP>O6N4+81R(I!}&!pQRS7MD4XrC`ApBQkEy6RZaHs~p>$+M@AP3RZ2xeLj>9?CDT-_{@3R!!%)O8=u{&xRqS zFYgpDKH2{&gyh9Z0q8;CM>c0G$npe2dzEeNs|EmN*jH0=CG4k9EDDRkIoNX`S#ZRl zrV$=`>v3QF`}KqA8`N09+6Ku>_Q(QIw*(vx@DQ1QpUDecUi=wkq-`UUnjr`m5L5^) zu)8JQdVcx1f!(W-O$wx;vYRoB#^)|Wq*BZ!#wUkG`$<%^&OLq1^89fRPKH7HOT>9Rk|-%HY+kwf4Ugo> z2>O2>;PY1sa6yi``7eoxc86vPW31`;kkeOJ!uh1B06Hs_9`{&%QwWNeYTOU})p?2* zg#F>_;ri{n$HUduDbO&Hp|Ju6p@dq-M*Qiy_i1t9;torDkaiy!U_l;uyRS&|;Rt|A z>z*}p`YPjk36jayORFzmz3TN{>XVAQFif=)sdEtz3*?_olk3rPT;&5CA2(mSCJ zqiAA2!1lzkfTqlmx>S%WK%NTffz4#lps=oxUwgdo%exd`k^&=7X+(kgiS1~eKNpOq zAvC(f@ZkXf1GYgaKIwrOegPgfraUXElw1;j@EMZoI=@&ZOrB-rw0IvBNSg2*lf0^P zRbRat&lD%v|BJhN0TuyuDl&V>TEzBAXeav|i_I(3Zj7e|V$iR^IC3y%l#R=CaYL8kL*_%_5gD_DiG!OvI$)&*z^kW)1@hHY#oJlJC0#}?-; zNKF;czj?a3`TqW(xdh3Ne<5DL6VR0OF_S}ih?6UXx;(Z#%>5{!U0kU&_v|`LnHIwO zn#`?i>O%k7-g$i&K%Ac98&-tbs-$d0oc$pjPpfF4NTZ_*??QRUd8A0LU>dU`YNL17 z;kF(*Fr>%rz9E9%VUv9)s2j85C{v<1h%Mc<#=F+pPIaREUZ!oKLFa3rH37@F}vG# zTSPSAtT*%K@fn;eY1k-n#>~S9^&Bv&4~nLY)-_O@?Z?bM@mFHOSFe;%)S$P4&+G=& zSP3W&bZ8xKJ7rrO5d^e0omefWxsTKY0XT?RB79A3-n|ZBRXs#w$#fO)7=RGB!AYTD z*lftxO?rV*YXFbgWbrl3R_UJwf&BX8{bawK>B1q~itm&#H&~BS&ht@n!rj+&v|sG< zRT7S@Va;u}9U1q@J1|gQq#iViPBSg3jZ)EN-vPJb&+X^P!lK+f|MJe93ucw_tOWc9 zXuwz@F;XG4X}5sz5dzww!#8QoekRPDVMz+>&i3vBaV`$Qcjlrs>FC*gYf{!`xW!kk zP{!jJmF=JqtKvCMo%2b{l-AH<LmP=~=8GxlNTYT=eZI^Ob6A9zZ9 zYf(g7i~AmLGoCjCG%bpS1p>q5u<0a*ea<{9DfeRONr5bRz4Ko@xc)S(`+OPzu3!=4 zO2;9`9vv1ni?mO@O%HpE)~; zcR~RE`p~{7o_G@O-iCQWdbFv?%wy!4zO+Wg|C|@eG1|9M1wzmtxEk5yNzc$IR=xE6 zHbB-9VCT~&gI;ShxFGrfP9Riu1bXp=5r@ymX_^3Xu1z@ROw|!D{7}+S!>GDk0S83i z%kQCy8@2F?H!A5+{Cd};&%#rYR3mf6*yeoJ74fND$H~W2a42`5VP(Hxy)sdr*ZlF+ zV~s$P03h69!qt22Hz`R69D5$ znZYk0PPNQXhgs!sC^D1(BF?|MRi>Yek*&8Vpj_|u$@d&U0V9*vCWeoVYmgvGgIN-x z!fhw;E;Ccm4N7ATJ7I%FQA2(rUJyQB5@dXF!vR7ZfK#JlwyL1R1Sp$Gfa36Kx!F1H zH7P&(jg5j7xJRn8^0ZsfgQzfZ_GBKTlRTS@YzDywd)UI0cQAa-KQKBkgBE>A060_YQRkWDaPOonjd#0UYk*9v>M^f|_Zmtw04_Y8-AZnLjNCBOQHyHMs zA@#;8Eny5f!;-ma_oqUl4n6%9_bV!p*CA1y$;kTysSk% z=UE&Mt3)0GgQTlnt4||eFmlag&CvtvLt7#1V|@}M6@wilAKU)p$Sz2KEHVoUW9XRd zZuj=VRClpuk)^CD?qZ{!bU@77;1u`aK_;p#)5?k+cy6$SHUJP%RGYl*DPTsmQ3>zI zey`v^M1#+REkq?Ap%xKlk>%tkfwA;$$k8|W9@f;~GI*=-CjAwHGG>?orco7BDVCZ@ zhnoM;^ziX)Rx(sv&==8RsEMR%1TN7 zPI`>Jh;pbkw&g+$m-cdk??s;B2%qv=$_ zU&S*3Bs*#se1GyQ&?_M}gIOOMutn^mkXkxZ5PWQmjSiNm{rF6=R_Z8sracgO8XOSWwcR=@-3=QW7@XKf* zB@Z5J!E=eiL6lyHVlu`Y@6dyZm!2%JkHVaR;4y5r&#sVvGRp1mp9pG_rT5wANyR%Y zJ@f)7+}9ln979T}>+NR73Aj>jhc5!KbklANNL++LS^7nEGOEHkF5CR{;qI6AQ#`QUQ@1-Hx_GTZB;-BJ(^(#%HSb8^*x>p9zfa(toPa#0-$!!Av+pxul#rUw@{;A3 zkdNt^%pE(pkIwA>xxUZJ|GvIgJTL%51F8qn(yjr@nIlGAPy+T%F|Hh1d)Ca9GgPf$ z*fWh!trix7Q=LSpA(B+WUvF{;drUV>iUpZrRxX7J3L12NPb{_5sMs%A+ zmga#S_@H|}7H7!)(*a!XH~gy6H|o+)xG|?MdaeA`aAEQR!O@XpL@TrF3n&@>C<;J^ zm;wlGP@vl!oa{pJ5_%b#NhEh+yd>99Kd-RVdbl!grw#RF4s5NosR$XzpSu7Ru_5YL z{x%$c=`>0@ByY%okgn_M(AuAfTB9rm0tNgy=@!JX!bb{9*#3!~Ca%+7N)tbkfU^mu z61Kr4-ByPSue&E~UHCMon)JUPisfWySj?_r60+ABBYoJ1+^Cp`vNq{593D7rN)ISU zlOnvrkiU3QT0Rl=2RBE#tdNg2wcya|q|&T|>Z?~@f#>;-tOMKfYXSm5#8?$Dhi@yW?T=-gAZ z)xjWnl2cLDOoj(8CP-;)B=J5ZrVI@%;QC;cTs=z71$qU{MqrZA$RtA(uX*|LYK?R) zpNFCkYKB8Q>ZZ#acUR0nrSBi^^i-5_N%SFUfu%#Ag{Sf;WMoH2R#09Erg25d)}51X zDKn=WPIy@;;3Dx45dfVL@0Qu3?-z$B;f`7PuRc&MLyegJ z{D`bUXV{SexdNM@uOI@g!9JI<85?C6rRz&RY+J#ZMjsZ{xrJ8rCeh<2}+_Q^)W^wempbIf{TjHqJ$ymmPP}! z8du20^#CJq_riG@cW%Uq!VdO7t5}DYYP0TI_G+DP{h6lg5`%xrCCbW=7c&dHmMkfw z1;%Yf_RiZ68<2f5LyuVjRZywVG%tyfm9$-V+m5^%Me=wz8=t4vo*)8~krHgH4y4S6 zB_MwPm#-g)aiL+l!-Inf&Z0Dqqvt2cg)*eTDy2{a^_QFmp`G2r)`4T{u=@xRw!Ww0 zb#wEHH3{w*^?Tw%JmOW+A1+Vv{UMRkzG--ss1}Ps)ejGMSSgCIY_%Y`(WrGb zn5F0B<0sFOBt;67rpe6v(f)W7v2d^o?Lo<45n3diW^7|2%d+hSZpI4 zQEb`{5?gYU`bw;gB)K<>z6RvBqZAcL2Snm}jfOUATT)2?L=_(O<mv~xI;C!=V@aDeAcsNVksf03Y3k=n%k@%Wo87PQN* zWmiSb3L&pO11EX(^F@tv@)nFiUZiSQWC7bUM{1&-Hg>9JkmVLxs!~U1)5g994h8|S z#dnf!@dxrSBT-c#nQjXkAaN%h?Li)*!B8M8A$+vGh8D(bBK*`~vAVqza$M{({qdi8 zyeT8`>^EkAq*_QuX^pdUJ?W^^?^bi7WqSfN99{qhct@vux}(iF=F3B#+D`v*fSH}ZgV{Mx zM-<>+{Ho(b%mbqgh)Xa~0leWLmn4HhN1qX(D3xLHw;rGFO{xmyf*4!ip+F%ZWMjkO zY%DNjcTs~wxgCHq3IyY&FJG4So2(;^iJdIopOZ)MsIoAk;ChCZvEY$o)l=cR68Y*q zro8%W*Vl=fA2o%30|;}Cpc-z+d3eKc)|Tqf(TZ$oC9TG99v^jd(vAVEO0?+1nEL2_izy zz%HPgtD8jaIVejwN8`^!--vM+1UuJmOFelyD1+x+F zDSB^#J&=Y?f9!lvxkhmN!h=nP=^B>f$Uv+BTprzGC@GYNN~GLqzmpk+;Bt4vPIiS9 z&nbZ(y(xYI(Cj*lsCSAH#!vC$!^McVmD>%>6l^*a7=%Wr_4viK*@=D7Q*n_K{&HM2 z5)r#~UG;57CL=yhiY%jqhG~4vA5Ip@GxL|_1;j;$L#$4CedxNEZ;0qawUtzOU>A~0 zNh-b9x!r(8!2lHk2~P3db|qy}>!rZ)oJ*(vwi0HO zjreRmZMMbao3h|s!!n6}L=`{7%f}vU*HsBE#4=5>9UW3a$^~T>GBsHRNUpt+WlP-n z?Q|X#vMfOk7!EsbsFCqubn4c~SvNMP48UqHn@WkE&Tz4 zWeA5zP=&X}`8Bp{!FP%%IdYXk_QqYM$d08nmXb5^=CS-dxqAXGGA-DJ5Y&ZcUOp9C90SoWXeuNONtK1~>qm@Z z&9n+Iohhab)e(jW{)b>&F+gbWa*R!QqCh+8TqUPgD6JyC67tW+3v7B&bAUMjecxk+ zG_JhfUAeP?hHWA)`{CHeW;vr<>w(FWBE*^%JHT_)h(CW!$Nd519rEiy3z130+bnrX z&9o(*5F~y`WRM7k-2_VnWE&pb;lhdAMT$bO1@k!!!feeXp#>Q})Eej`Il<_R%Ou>KjkCpC(&*0)+(7m?i0ets0+AejO3 z?JF7U{odv(yt&Ck1N3bgZ0RP=6+EOn+)=UOP4S?&nS6%jnizW8P=(g*cnhY>{NhKV(*x<{jdQS>Qco2*eiAiERwqYf?^wOD{ zpeRB1lQlxL<*t(!51EArQ#F%wD>-AF5X1%#?KFN?eOX*F4YWgQ6>JYB$GAvni#i2H#JC{ zV^Eu3>d=oxhk%mwjt_n`7WnZipfZvb z5LG5uoKK@~-a?kVYTuJxB`dAWEEuPXgdtyn%n1?^cJnBsZsCpMo+uW06#J0v7>q2H z?t6VJe*z*&yEMs##OUb@?CfLaA|w;8bq$XK>k)7-DF*4!q8c%*s!291DiyChzZIfX zn2VqY0aM`4O%iv!aK^=gtS(~Z+FEMCI?lH7aN=iu(|0ae)DQ^a^X?&^ zfFdUd28lSdsAr55ecgYAQI&cK!)#yiPmg6R20Y;*Y%!lC2$ecro_&ShmT%^&kj9k;X8POH5I3t z#F;<5#Tt9Z;8c=P$013RnH+jac)H;dXiVeJ9+#j)dN#{g|F!!C>JBJ)zI;IrCacQW z!mzJ5+0l6~?1fWVqwbSC3HtyXjPRav^sM>buU>k&*4d0J#KWwF#|N4ipH>(=C|+H0%#|Fm`{i-~FT>kHRO$`Sf!tkB{aG z$tI5MC5fl>x%t$Ep-cn9lz-<#K|hCL)&bLjX*j*$GhVdnSegL+Vbg;^aJYTpsszIl z9(C<5e5DSr4W%(xz5KdDn-+nvsGHKd@&~^jq$AV;DXqTp-?LnxhAYhq_fT%TZB~-) zrz+E72jhL?`{b$fZ{tPU!#nK?gt7v964k9qN^O(Abz*P{18ickh9abC0t6;k$HtC- z7oao>|MB|Ci{y8Q`rX}oY8}_QA=-HGrZR?1!}gxu(4bj5gdP4+Ia$nBdaS6n9mq<& zKKu=*PdH$FGu*I|s8`^oX|HZp`HKr#QwwyeJI-jKiJ+L^GtTxW)8c*gY7pbSa4aCQ zLy)kwOzJAOZi_;CnlBa2hD@awkd6=ZlvahFgx^ivMuyiWxDN)`jL6EM8SxYO34^mc z;3ZLvu-ZT6V4%%}$kKF*4W+8Fp)h=ZV1|Qh|FPfw_L3wVK}anzpS8YAI~fF;pvSuZ zVIB0_{?fOVNOc>Q+ z5$`>kn!7}mNON^SL+y>+9WMOvAS*hFkdsBEDwFntm16#9I1SY2krktIicwNOc_`-0 zROuooa{Ty6fZB1wGpmw^9?>(i;KV)vP6TkRJtKPB%p|tR@_QJo@9VtS zJN*amlr>hXHLP*?lCl3it?x7MVqLG35*R!u2xq*&F%&?K`1l(evhg_sAKq##$1vz3 zZ>7T9O$;~^Mcdf8@A%rg%o~}l1>}oaB)^pb8AjiRfMEP#fCs}Dpe^Zef$_&J+gJos zTausGdDO}UK}8_~y&F)=O}tKvUZ^{=Vn6QW35H&z&M7#4;zx}@7rQwQ=jqC!&wfHR zGn?8HazT*8lM+5!(J#eb})vMp6Ie7G4d^FF} zfMB^W11UhNASVJgaqP-?#F*18LkbX0Q`EgM@nRtb>5^QyW&jKhx8*mt5(u66Ggdu< zU{njSiXi}N{nFnjN|0%NmlA{nFB*>KkQ6)IGwYglz}{+-KDF*shtX{xuK)9&8$xVE zqIT~t?YAD$Kss%;g`^tqkga@Lyeybsi1Cr0zwkM5kOa{SWsRD0kB#K`{bm5HAP9?C z8KN962wMusTM-5mQ)9i9Ui*@eddx`HWYWm*Qo2PH1ir`kFd;vB(|#hvEx)zjyq?QK zmA4ps@8C|bW8y!VT&9W{AmO=cTAEE9a)4ugaEK#JIq}X+J`ssLyfKxK?;`7f!Urg@+qeDI2SPJiqPEXr z0CiMhX=6*x8DFr4vT^$1Bn87w#A6}E;$ObDKYLB}t3U`;q?aW>sa{@@eMcjM3dFWY z6?*t+V(mmLdi&V6mHFp)br_s~OQgC$bf5py=SQJUIhI-8ef%gsY?i zhP*OSC<8KHl>!V5uH=G(D#N2>41CEdcudl(cW4ZX2q@JNoiL8}6Z>%h&UYWb>wh*> zXxO}{K_aLo8zE4d@x~q>kvPhIzaJ`dQ6M*4P#|L)Tr)fI{-_8Y!i&R~OK7D___qtQ zdg0{tw;+dcl-R39%Lr#;jM$Jo#$%uptTsGJl_=LGiQCITY>Qj+R#GN;NrJuRL>+Dw zGN&p{ym|#$k|KnnN@ORQJWt!h4zCaC+I`dMv}6(Y@fTaZ9S6)c6B}j1zKgdDgUjY? z3P`IlE4p$aD+6-0&ElW8k`yY^Kq9lXwUj+yRn3jAPdw$#4-Ph$%3h&pF+u% zVRHwZxdWn~Cyzv7v)+Piys=l3BX3|_3-YAos;)|4kdVVb0JEQ)eXG?1lnM$F+ltl zztgH`fiQ`WJ0&m}hh}BcByVzA@qbaTWtBs|BAL2}XoiftH>$OL*u6(Lps3zVSW6Y1 z&t5?w-=zd1$0$?lW***gnSQ zi)4DLrbGbpC8BK9Bc6V%Up5* zgkJ$DD$}e8P5A<7F%lE;VP_S$E014!!Ur?~Zl16}ut=7-tiX97>k124x<~PO7W$}s zgU${*J!Byd?OSyavcPLt?QkMdyV=A`bwGhrM_*X?_@t4wI-c*WhUN* zGmd%-Jp^QO;Z#%g@mJ8Kuz&BHK2uHOXt|6ryV%e=%|Lmt;`OrQZGCxC@)D4du$nSb zjPM#8zst}MEX2FlI^|o7=?kVv2D?vY6#nM z_N92FN4?CZhzO%tLfsnRNQTQPPCPc}{zT0Wl(10x+|UZ8H$@7#pW~-sUX{0%`4rM6 zteXYQc;r!dJUf15IO)Z|@<&=ej`D15Z)a9yAzIr`zyCT_)EusOp|Bj*O23q*s! zRw&lmi|}3IY*S89Bhk*Wl&3>XcLc`0zeulo+d^p-=}Vkio=-d=??pis>OE5mL#p(R zo+t#jRIu6T^nLNIe7fCq59bYOz}R3(BYAd`&n#SOG``aSR`?gge*BE5#?3iTvI%nu z2qTSerW8o_jzXjlZVz`Xt(*kL$D@D^`yFMg3}_Rq@^CKyzNY~~z?XOZ13YBYs?@kD zF~8noR!LE(h-dPJV4E)w%kKP7S^`@m31JYY-sGl)_(_RWdLVLKv**fC$<>M(@&I5> zry=_3&m|RGzt3{1L|VlNztnP2r4j zNs}!)05$BhpflTWdRxsWG}vrLP=PkO+Tduspf^7{eCWyBdkX3GP?Yeu5nkcDo4Zv< z#PeVF`xiHK@kcS0P2cddZ_N@@U$mwqtsmukf?FWS0C0~wId;hD{8K^1sc^%!2Mu4= zmG?a|u^YLXaGEBETZ2-pM6i)e@YAIHA-(E1{lkarovc7+UiNHWD2I89Q;RL(C*am_ zchB$2;HlmK_(9RHqlg>Nqc^E=@&y1_R_0Rks1gL4kkF>VXeU=a^;^385~USLabs`< zv339>EWuFW-xiLmJbJQkH4&ouvHL9@nZplRmadPPHI}?nO1O~-P-H5su>7Rki*!#f z_DJBNp#xd7e|z?5ovxw`?V5Ok6 zEg9@wq}weT6|k%kLiYQr6L^c$O$0wkpW8>hhnA7%c6zS{>9vB14c3o10i{4+fuBEi z*qF!;DeJHbm+?F&0?=~U#1ZhI8h}D*BhjK{jO^Ek;$VW==QTbs64X!*6^GozpE8ss z9Ns+-_-q0J0D%o1;4x)gBvFz9a4dlcQ7UcRW}&nis2ma=$$@_<%?-~`kfT(ungwO7 z%5UR8>-9)zjIHq+-ExqG@s zIQ2~RNDp@`-Xu0UnjIEpi5T!U6L<)+hhIYLu(y!hxF{>#xXAlAESWLmp%utN+z^vf zWJ!+}Mww^=NStc4OuuZor{w=qH3q-AGM#9q7)X6=UGp`+#$mdcLHGJ|zCOTJom=Fd zA5xQ{LZJjt0|bq%IT=yMCVonmZMSsY0f3;r0QxjN`mzEhQq~y51Im|CBkMghQrgkY zg18f)PkKJ;6}w*nA5yd^*yaAsA0B@BsY7frbcx9BScdQwrSe5DK6wzo6=!jVyMqso?19SrC9<-*_Z=bJP^dX)jP09PuWR8XvH zDHK38;+y&t1s{p9ehSuf652P(wB)o!+q2GqNh^}|eO{*<7jf(DjbuS?m({oa2UjMqa02;o?xnS#3$g)oE#CG<-gh~Ts7u~;YMv#OTN4WAR#EjwBfzzAx z$|xUDTfxeSfZT5Rl5{Z(fttRTz83iaEMJ(1z)0Za+IdEnP!ah3hHgCFfUmp9ZdhZd z>)LFDUlO9R0Lx|)-b}cNWu#|1KbJ5u!A`*^E;2;X));q(C-6$Vr!teBCT5v(cqShe zFXOfTtmisdEG+m|UwI_A+15bd;Og~wW)gh)HHTW;OQh%!Ex;8SXdcbbJf0CUZqjM? zWo2J-MLhe}t3&bZ=@&V6*y|u*Jm_xgQDY4ZMkeG|y1!+)q5qu@ulX`$es8+`WK4NZ zFwi3IIvh9dFDV+hx!dhNC8*|0Q$@}TV`zg*i|AkRz0Y(xva}PFKXis-V18xLb8vWR z>2Hq)iiPAS>*NSts2YSFD&ZKOyiXQ427o}aTYN;){L81D8oaN_f%yVtZOazt6g zbV}cJP|UiUZ~nIif_G?;%i)W%im#~}GjsRLuEnhf?I1aMaHvc-! zRoM`uAH)c@AkCUOM&L(4)h;*CoiZrJv{rz1rWc@mFgSR^q7|Q9Wy}&7xBr+gyz?_7 zn-jv@qI?Af1(J2wF5+26>prCgRd6<5QlOM4F(^9dlu_~FuveM3dt`k{#36#&ApbL6 z3w(8+?5>Cq(J%m81&yK@&hB;05W|BAgt}(k;Gru#2fm$M|2OK-Kzl?25vK3qtG&1~ z6HvTRjdN65pv|-!QUiY%Q(wOe)|iXubhCry7X5Ig!X8mtAHS&QXDf^C29L`!#~=sI|8Qr4krM{kVUqYWAevd_(77>ucFm=8 zvR#oqE-8R77Rg5|REf$YeRfX_D`mQcoNKNguHU^^X48~X`vadzutjam-)WnY1!6E^ z3GR<3R{SpykiPoI8?A@aX*hnJ`rGktRD~Y|`F`0#Vr}CMXt=RJSc*$J0}_i{Wo;yh zC^CiK#L9lF7L?Qxa=r|IxH8d?%skL&)<3Kfd_e50z@%Qvt^`x-aD4F8@sDJoBhz1{ zzURg7$UFci+oDs1DK^Mx-$;_~Q>@abFUvM%)k^ne(89~0NeQ%QaEfOU1&z`42>#ib z;R4y9w=<*&fR{kRF7*Hd;Y!nd)8GI`^DsW+kfWT`8{ze%b-RHDTEbvkOTyV-kq!_1 z3JBB!mdRJLeWO3hR+8kaL)|xWE{NhGzV>TW-fB=v$w?A~TH`0Oo*HO5)%dwSEy!(7 zbqNtuoUFp3ab2rJrLuW_|FKZ1GGy-yEP#>LM~nxWa2^giQ8&#BE1bfFyT7`*-f4y* zQJ5FhPZ@kjR;IVi#gDN>cqPsWLOBm176_U2HeeX}1D`I3Wm)?Y)zz^8PnZgGvb(n| zTYJ7NKm$}NF{Ds*Ew6WdYIGuyJb_i$)NQI1mcc<9mRRk7E_jF-(XFsZSL!G6GWqefc56$Y98!{hm7l;8*6BR$V023_H8+Y)oC zn_ml61$L3!2U4Ln9ZFeJZcR^c!5Ve;_ULed)rAzYWRHz!w;>$6Z3lL4)8&MEnowB8 zt3*PehkZHuTX~cq)JWd8Ak<_p|ISFgU(Z_c|17m&2huBU2|V_|NY*oAe@Kf&|LUyiP?ig-J78C3Fz z$DOraIUNSOlr`8CaS z{%)N_if$PJ`(};VW4>618#tM6o4D>3B_H@CyeD4KX2A>3R|bp2oi~ioQS;_7`}i7C z_tT9#k&SBmbJ+)%VCVzirZv=2_llRO6OCa*SN%fJk_NaQRX-~mpv%mKkdJ@^L1Syb zwkwY*-tfyFhd|*U&==*V4b6DUulu24L<2m8w6Ns#)Ua>wP#+=1Nq@>;bLAN0K$>%I zwK|i*uQLb11_lSc25Kkq@IL^9Ntu9G32Ln@vC|BF{l-SXQ z^ZOHDG!LbcLmHwPxNga6v5{q8V4K{3lRa=>q7NB{0=vilgK$V_2FlJ!g-aKNc9K!$BW<0v z-KJU5FUL)xPA{!8VU2mNG}N=~Uw60v!ykTz9vt!q<~0Ae=Dh)-i$`V)pEx1L<}I5h zyGyN&X_h}xvv3Q=Ns<4OY1Qt~)Vg}_cucH)gu6vPf_Np~ix>5I`6qFo_(N@g&+}N| z<)E04XBznsg*c!B5EAOwKo=J>LT36>waPb=e_!w+39zSrLt{SATe?F2@lIyfgQj%B{x$n_w=vRTRL{4n*jfJ}UCC$*b5G zbwZ7ZrVFqx_z-A7VF5P!;nUMAHF$!Qlgmdn-(Vq*|6j74F_MnsMNwKojgti-0!FnV zKue-TSFOkAVNx|=VDG|i`1H7KMqO4I&V5OEK^6nMG28}mU{cR^I)(zy|2O?Y>4Xv( zt?~3@UyqMqbMo}pAb{Dj|9HngD#XBf zBl$6C?l!irZ-v$%Fh;l(2>X@*nQr9%Q;(vC+1zjfzX^P-vk07#(mhHhG7z9wNLVns zgE-O6=lK9bc{tg>`Tc%8*~u^WlYP<3d>(lNT9Nc3{VBEG?$svSp>0-q?#;^qQYp*{ zrFJ6ZIyp>Sep!EQqXye6+$&Ft>*o^%-N3V=1~QZN*@K+HBAtZ7oa~-a`7Kb zyLnE+Ty+n`c5F>w`X8oSgDrLrr`ta){(be9b3=b9hqL>bTgwnNA8D`U5ZSmT@EIsG zfm?2{CmU|bQ562J-*-FAA$9^Cyv4RV|522TnRI6Mo)82lMnU$g&ya|TPn^{MpDX?~ z>0vH93M0t-qwWN9A$|E5h4Vo=0329Ds*6x8nOr=}P&=y}YPbwgLmL5O^Qs7H!{$)J zuo9^O#1THQKd#TnQJELiJPR2LaZKe4KQft`B-v;dlt})ik82?}fe`{wj{!W?m>~~A zjj}iD=9HC!3nB6&6$xNRPSAn#1HdLr{W1oB3J zV2D$(PL|C8I?j?J2^X^5XWBq_T_u8!m9;oC`kU0=@I*rW8p!zmb=h`0aJgRw1B6Vl z>2M}QauP&DIJ<|0$0&BiB55W05EU1MtTgsl?5`}&6;N&$hk}|$j~@T9nwm?UJb!Tc zsD65{d=a}(CaXGgEByBW9jv%DK2bPe1gaXZ&Hv3x&FjjiV|I3ai0&xOhm7_thHlAA zwaEWq;~i#%boD~C2TFz8?2rP-e+MBm*yJew*~dxgK@-|bdV?0RjGDazu*Wl@^q+kzj(C@_6UUdrAmu4ax}rpKL3fHD#;~O={VvzGYi@x^$a`d4wAf00*i^sJHqJ zhrmJ-J8MJ$v3PqYwJ|x}yvEe-@**cqVbm8Po>O{+7kBUuPgke#wN~iE1cSM--In{A zo9i zSg`ywoR_5M_!x$x*{%1`0Tv`eo;^c=(8vCw4*2wIPZD(-)2Ghyiv_6)RAUkkP6~G2 zhKzT!zo#LIXI*=wID>R-FL2BQWk>zavjDXg!GV5TDPoAf-=N?%YxihN0dIK_n50py z8>y*l3K^$!5(tshLcRcRha;AKvylkk#U)rv6+~yYDvRm6>SEQ3P1nFDh%&OT_s{^c zb&ny{czgsv{6TMu9CBK=Ni%*_%ypGf83%4YwFzMVunkDBlIyVHM$X8VA|N6?01j!S z#-B<9bXD6K3{=1F3Ej{YJqd?7&^$yD6Yb3oeR5V8c((ptJs!Da$Rv4Q2&_I3l&eX{ z!-lRL2Dw7;B0efEaJa_bD|d#Cw^;zOY|-bY4&kpU{RlMmV}i?T)86s+kx4O{nf5;C zw-s6`l$|>`UgT@>{65tfS!iX0QO*{F^776V44D^zdxWopOpg-O=s>evp(47wUQ^XT zw)fK&1xS30A8vfBMwsyUSj-nu&(| z98fvp(LNsI%N5t~a#Xf(e55opc>InY3sF5kOw*|empM9s3jx>2PBH_umOrr8iUL?yT~jxsz7X%iC(99HN8#$R#I&SV^h{V6 zPI?TZsfk6|8rgZo79hgebb6L&<=ejh)%MaIf8d@sl0b@r;N4fhbUs4g?!4 zGP)pSo}3wrUfRTHGW)SSxM5a zB(RIP@FVIiv+D}H<_b;?>*N;PP`pn~w^P$TL8)#xG~8(ALww4I6O2faVLNna%&S-5 znGD~_9AH|oMwErlBXFK=iJqyy1^gr}b_nM`<DEVu7G zeL=lb8@%GPP@aQfv})-ABjl)kBYYkI%0o2GA40r+efu48U3&51hXRCBCs$}EJR+lr zW;1OSj3pP)@X%G+@5!fIV%bvpBSGF3E6aORz&tzSsAoadA+_&H7MS!}Y_<=jYqS=d zJ6CJ9;ckGjO#ZZV?z(NhUXKoAEu8J7>*a-r94rhD(xeuEJz1%f2UHsfLc9t1Nh1!O zCf-PeW@GrN{~X~H9va=EW(kG>`Sfr*p(y2}i5C`S9KIsF*rlI5jJIPrT`*$UrBbCq z9xab2ABq}>DNl&$C-ud?Ce4A_M7O>hpXFG%KnYbfN(P;Z?C{%=TWe~%sp&V-?sl*P zUwc-O+<^-qQLyISR22{zs!p@tEOrIhYM5Yh*>$YVg&=>Al<&9$pNgU89mu? z40NLQrG%0QKS4{OjwFfTU4F z)fbA1Bx@C}SJxj=UeQ1CKIl-uFhLcF@v|wzMgLTBfSh%j3$u3to@kMQ>}ctR3x{yw z`nbc!Oigd^=!emPfmFbgtSTO7zxa+^GaL~f-s}+c`7F0rn3@xYuKyl}7ZY(wyHN_T zg~Eu1sh~MnS-9?$QOFS~^dxuUfGX#jwqF?K^yjRKE;PiIcy^#L0S~+!9k=)T3ThJv zH=dH5Cx~{BxtBMpDlb80i(pey|1a_A^0enOcR;y--CQBats%8Uxrgd=(-a`e;+M7E zStbIdX>8R2T$g1M)=)`;O`C&h(N|!-$%t9WpjG=Pe0~&G$UqiK-l7GhGn_}?__J^q zBjghLh%8F%q6I)JTGe*1VJ&H*LuvEjZgai8c3fmpz!7DYg=NGxpNxulQ|DOT6V#Vx z3bQ)Ez7Wh}ous&qKHFk+fn%FU%sE-)fFm;|Fd?ETG(5_H@;#!|0e_~Icqc3vAQ0ie z(@FReFv<;uaX$E0ckstR?65?6M^OtD6aeZf14p&1LEjdeZ4OaliDQr5+R-cMd6wmu zKRxvQ_uc*e!~sZ4h%C?B^Pv^{0S>fu{qeyiYOsq2JB}n^pq`os=fQOF?6(XI;1PuEWdivq|Lpelw^%>aEcXz+_4-?qXX!y$V z5xZa{yV`9H?PvPUv(U3eq6@Qzt6%$1EN9&Oogk_ry_4k-;DH^AhtoH+2;bk)VO|^L zYY5q0zDA#C52qS25iY?uk2;_&5Fa4NP}}4j<_|Nz8(Z2_7=-PN!bl(aO73VI6qw$g z(@`0Om)KJA1_630)j=u__FnDVrE7ndg~eYtKqxJ9u{)Ku5EjH+4B4oR4thMib#=kZ zUh9l1&@`N#%`M^V!#0KxPAgh=V*6Xy0yFeLv&_1_Zz&C|A1k;l*GBwovWBFOh8^hY z8l84Ky7skuZqjgk9Q&^$baXTbX76#iSv0aj-$3Qv(z{FU@j_U5(t0n!kg5a7ZZ$p? z?Xs5$-H7@`H5NrwlJrHmxe+h$VD9fi+oJbf#SY5))puN(fj$ zmEUbNX_4W98nQ-Sj~Y!p+Q+75+));H^SsP-%Qh!XBtW*!a2a2-{nym>q=W=TT?zq( z6_yk6gL)Y{)hn7TqqD=KK@%9E4|tQkFdzPY{$8y?P}a-3CFg-CPmX=!6EB@9?!AX~ zRC%~ko%HM$w?!0-HZdNy1gr5Xf2iADHc^(!k(>qb+d$#R)FnJw5qra<)}}8Qv!57H zZ%+w>2Ve(7yl}q)jB!$gEcXh$a%)w3edXqSAyeW@kVJ^;Ftb7~$4+lyUE(>@66*@b z#GK(z*w9qegZM2e1)*rpVwqvO@9QG)==3vgOO~Jos-HRbiK7#WdiSh# zv!{dQ%NFWGQWY03HvD!Wms+?~GTmACx?&e61^{^Ov*s!Lk ziIsGTmI^Jgc(pKMOYZmju6k?OfuTzc8WR2reJMQXp_%Vz(3v~|vI5#bfT`D5vcv;3 z#FA6=)$-#aNCdU$rh#p`M}!8rKgM1F=r&o;_>IS&?ze#j__ ztn4nSMJl^XVvPln`jW_NkMC#vCIcd!ypV1yIV?Rnq#XR)`~6Q#4i1=NX7k|mt6;fe zaR3enen2=dk@6loG{U`J7J(GdlWN3@SZx=>IW-%jGYXwG7kyj9#au2sXo=)f;o>P& z(!h038{kg^Rr11nz~KOu8*TtWH$2J1b9rudL^g7qadqpp&~tB}%!w_hyTRK6WB^E& zjE~MIT~I%(t)j=4jhZ&w4l8@TYC1un5y8N*dO$(2HD_k&sNXO}h((vVi|MGhVwe>q zb@-pLyavskp<{hwDK}O~}4-aI~?VGf-g!o>JL_-^Lu1=>WI9oj|MKg67n3D#`Ld@MHN) z05jzDOz;)~8;p`hyzXBvwVut=ATWoAK8_BpkUEsR{hg%jBRN->^JtF>T zeJ=?C`FIi-tcgJw^7w-+deG?|SVD|w{NOPQgim4ZV_^w}jyw{Q`CFf~y}_82gg0o~ z)u?RF-QAc5K>*(OYT?N(4x~2(K89~R&=Ygbm|$B!DjI<{IWQCEJXwJ@9?380qYiOB zf5N|h9!xSn3WpWX)pvk=3Iv>N4vYd~d!yFg`SSV}GoXnw(r3M1|JZG=f7en_ z8s$r`k@^+3J}W*s=(hNQeX51!XF%1yU~7js16(g}7(Nw3TK*JgH$XtL1~8H1ER;)p zkSNfn2ZtDOEJcEj9rCCKEaY+!nyfmwqD_p@W3w?Xl9vo3-Oy#TQaKM8O)fSpb#sf|u7zLzh7Epg;595sA=4 z(igsT{!tll)SK}v1Fbh)-M{BaV=E=fj90!Rni}YQ@rfyFByXz_Itd@k$M<)e9eQ%N zqC#95i#&v`s93Pes*??bFC40c&Q=Kon6dZ)VeGPpR!xTziHi6H zlhD9pbM=={atE$915cTK0Q%}cU*z`(6@ZeNuNI!(%s1I>rO@8@_N*W;q7a~fN^qC*9}j%VF3MiJ27rhs<*6a%OoPJ50) z78;TmOva-}(E-ed^{+bz@s}2Vf};uGefrgsgeVZA1HKhrmtULdx@4{%mWi}V1>D)i zXtt;2Do}S@IUji ziHp$0ZBUz`*o?@IjgL0jE(fw6JtY#A%_RF8Ryw&n0(N7+u$qPum}@ zWuedX#2mMfc zNilJl%!%~v*#ok~BI}4+cCn(shcs%qS6=O?VqV?!@4EFT+zwe};V++k1Gt54o18)# zCRZfG{sxAf3Y6mEMm2n0{t&RucTbN7ZuYGJQ$wJm8>leU4dNN22vs&CXL?bj;H(Lf zCGr&&Lwi=6aJQ(c8dT(OyM<0tt#fS}l0G0a8HqkZ0w}5buub?a`Y`+N!|Ck%B-a_f z;t)F#gu3dsL2icqme6OE8)hCD=okt29=WZS!F{G+i$Xlag1W(6qK5iH>*gnu1 z(Wf0071G(_KOgta&(jz|^o0C^{wQjL@xGcr2!(Vs?ORc3MBaduiAsML-p0v@A~mSX zaOBF7!Y9rIB_EC+MX3i$-cmhPw|V4_x}~rT^gQobV$zcs$|$f@+nEY$s7vSh0_-nk z49dt^JRS`LQhBmFOsSFM#PD>NQ;pB5hqqVKJ-d6nE?CuC`YeR~l&W%ImT|P%J~(dB zK(rCQQ+-r6028dm8U&GGxr3ud6p!__>p}p}p{`>Cp#xI{6rmbyHq)4^5O$*fy>yzCwzfS zC^!kaH3DydRf%WRJ3$x?IdB(G_W8)r_TF!Ub97zjR^&k0*Y6_r1on@9D0=qq?)ovP z`z6bKQbRaQWq@o$F+sPYBa>mk+tb?jn#Ne}&*S5ascHBx20TVcTRdq=kdwnD3a=H0 za4{>Q8r4@%54*bu@VBN+s&C)JZ6o?ZzXPrHI(^rSRZX^7ii~)^$)o5oVwSW&pM+YJba*|_y96(%nB;bmYVue>BpL3+0f zr`Oo9ieUW)RS!~tBG`05PQX`2#Y?2^+jui6&Q#xSM1Q_+eqT8qBoWG*K)SVJCUf z6B5xNwg^$6QiTIe4ZN$uA->Vj-)th|)U?!#qF^s(BZ0>v4x<@)k;tS z;Xpt41yy(`J9rpiD8bqW*uKKR8UPHTbUa52KRcTCO_|0(g)D=vy|M{{%slO{I#oCU z-D9x9&VpbE$zk#Vj)Sb1nWL;FxPmY7`;PPx-!Iv>1^r;75eBX*D@e#Y0W^ z@jV!dTT!cJeS%K)1`Hn%zIc=-{3#Ogo^iOq0kg!PxnIhZEgXNa4HaHT9J)MAt5>fK z(vld%f2_WEku^LTpe=@LWld=w35)cLAK|kvT=*b>4S~HPlC;L~U2}itpct=__UwEBedbcZ*f*RvoY6Co@pWMDpe6(UxQd2ijV`ik+Pfe|C z8&I|~sGyr{cj>cgMltX*=8eYQf{hd&rtn&QJ9mE(C{>55b0ddZK7`oI7=NL5!@64| z+ks2v{!6H(_T2EdBavy)vuzr@Z;&ob&c-?xxX{g)*YEP>?*)^FeS9x3O0u-f5Z+~v zg93AS@F5H*2=`>!!yTQo-lX0%vZ&*&6&9dP2<`LCOOE`d(l^p!ZiNcue@ui&ket0L zQ~KETK*eA+f7?7*q+1NY|~A~_m{n+ z%ZQV7S=2E*>(KU)oSK|cSQ5jPBUwSXBC zu644KF_>UgJ+M{GF#x2~j|hhbECY+(9`EXeZ1t|WAl6-&f>RVl5f&h1VE126M<_e z`67Po=O_6RvxJ$}b<{WUbN6q4_`(9Ts{MeM2!qD-*r*K96W-#cAv^QrzyU56_WAp3 zLAWI=SgRdcfya(N?qNFn!Qqk~l@zQsqYgB6E)Yqa$21t(GNF;cc1bQfm}r$&hs~C% zj6o!@@~dV?&3noa^&*rL%67jYoeIoKX7-)Ob+A8TB}|uc$NpW61LcLK1J;0aJ4hY| zCv8}um^LjaZ=!GDi$qXA^`gYdoq)KH;Dh<1=W}on!~Wcq(J8670Oouh{-jlX;HeJ6 z&F8d~pdX<_B;c?hy5a7FV1X^{qmAD6kw0|c#DlY!Ya~zac6R4lvWm7jHEHq^Kr{!h zc`qJJx+~=H)#KCsO^?2I50{GH0{Ii&M*tT{UgOtBQ8zuyv5Zj0?hDih0dixUIXZ+J zov|S3Bqff77XXh1LHNNnqI_(_L?pm^_o;mMaJ_q4QUUy3J}_va-`-t)P*LOYy;&q~ zkZ1t+kAXKuo$>jIC1VFqLO~KVhLr>zJY3awc0$tTJ?M7rPK-H<2tesNVnKZK;tvKp zxqp23#yjJa1jr0$37(#^>K{M884WS})ONr~rT3@1J;Q6K0p{|Kl!^$GDeFEcPL?nM zRcN^elj()K4&;Jy^HHP5+m06wmagN!AbxTtUab)n z8r2gBJS3>pvq;_Sv)DL|c^~B|_Og4cb}%x4m+P9n&~vW2Ac|k~ip> zaO?{@061k+R&6qT3-TI)y8ZfotP(YZo+x9JKlg;lWN`7&demgu3p$xl5f~MBDrP-D zVq8AEI-*7iN=DlvT8{Bb77-lrkjNaIwL|!42UsUy7O^#B+38j{MulP715t=gD$?F< zc<^zvAQm6fINu>y-;f7iI8ie+GibB0g_3MH;X2s?_5ikCq}*gxO1XKWc)_p&PhBDQ zh4BK=V4zyQlm4xIimC>5@B-*HK9E=l`XjVnw)Z6^w4!k_xW-WE8zah?t;qCEkAvhh zJ3jAkg&s}`@s{dmPfVALa(7cLEf6f%l=N(DAfHbmpK>&KW^BXvvzU$GDABhfJ-9O2 z_Z|yeN;bgYA@;=MJ%VLl%z^@{g_~E~?i!sHePkL!*kP3{>aY;#3GAn$bx={Sl;H{> zeiN|Ias%^3)%vqp0DfDBlLp2N0wR5;xH274m%-|0kzu*kWBOiDI3M5EOLf!PXcd*& z8mf0f5r)DZIzIinYZ1f^*BRMy62pL{LNiOh$9m9oaEzKtTx4h=;Xg{1sMs!nT(063 z{Ijs^49XgN@5>;oarWJAwy^2&E9YY)x))#3^D`{GxL^xn00>!4zNG%DXVP+w*W0@y zB;#mZQ~pO;6}fEOpOY_iS{yA1xi^#@FkDv=m%$Yd5B)lyncXdjPYX~+7)1Za*%e#E zSdwuWpi(OBeoMikZrlc+Z@Ip~i;}&<>M>k^;X!|_U{Wox)I)GLp3$mYGlkH-RCe$P z8p4;eb+MO8WzRaZoW0iP)ZkJX?AnB{t@;Ky2r2;|}<)O^6TXLEdu5El?+2&a)+?wD!z*~erOe!;cM^zEB3u~DYn&y!?-4cH}QX=Yv zw3*Y>g@TPB`J(lLcI$5b*?-c*8b-wu=ikus=Op;&fv{L8#gdM)-_y}%gi+M9I(ylK zx_Iu4%ic0eiiSvhq>Inu742*hEcCpRT~NzI{ELCSTF|Kr&+DdRmKTn}f`B>Gku?0o zzWUpE=~sg#_9OLe)^sp%dccJOCymjFAq5`vGiU{^*ElyLxB`MP-c4E>vUOTd|9WPf zPBS*BU5s4kZh`wJiG)<%u4oA@)A7pHGpxF1ajcG|LCWpPSj0c}@`>(lANd>!o!GaC zi7ngkYP=LLj5JNr-rf!qRGnvgX?rmH9OR-+}voS_bf@qn*H59xZ()z@L ziRvJG;R1yNbSa2I;_;`_^#LKWlDu$Vv^dkRzzf-hgFk@U5Q6VawoqHWF!O+J^4@6m zp-8HimAi{BJneQ(ITki08^!2FDV#nkLS;02>i;Yw059-xl@Da{J}h-@?_{DZ+)P&g zz#myuejOH+EK?_u)LS;uXG5!cf$KB`83G%XpOX)I+@c|La7bxkX`;_x18G`?LxVZ8 z4M4BNtHcP8@b+;gqq`)}h;o4vVrCl!bAwt2*3rqj52P~j<}8`M5UkST1uG~QFz%w}P=nf;Haa`g|wgr{;dDoloNlzQ(3Jy#(- zev>wIzy4SM+iSr9x!o+^@joC__S==#Jzjec(hpSx5EZCM#XAV#K|tex1n0>y3g$GO ze~yc<;fpz;s#vt+G3i4<7m&by3fQtRN1#UG<1ldAr=|k%W$n3T&EqrdOR9nWIR-&yamzW<_ewCg*A>2**#FM)?sJBydMA+g;x(UZDG^_Z$2K@Ud&8qVmt=G_vz zgY<|!9~;UWG4ZDl0fa??W(%IULnDk1Wq6sRs)GkFzHI#H!Y7ldVH>XAJ83e%YF-rj zE4KvAgsi5Kpga|!aDgVFcUo^@3{BuH4plgSCQRp~CEr7Q8N8xB;zvfHfYrW`XP?|( z_mj~8vj-87F_E=O48%T%%OWuZ)e&YqFABpHKTBFB6(TQ@Y)@~|HrX*SFZs!c&s)05 z?-d}Bch)pP4VV1BEDC^xB$syIasD1K*jj6!CXJb^j|J}>FU@L=-8a}!DD~kKq53eT zTpw^Pupqc4a$=FQRrAn;bX$?=_IbZT1`e?%PInlNuf(q7Lh(Sy9PC{3P;3nrSfytzG$+-2y9mC7RV!A8vk_RtTU>7qw)0i zvA3m&4hTSu-@1p*UM_@Lf<6uv8}>=|$~vAq$b$Ij92Hz;TgP0d?ur4|^fk?w0kcvz z@hfqo2*s0;_rk`_+1-DId>_yx7AwkMU>t|l!y}OUyX)QEEf~V?UfO>shVvpQyi-}s zkR{5fo`z#0?Q(A9+Ivwg>g@@E246pcj-ewdM{G-qr!G*HfdI<^^l+KVQ~Mu(=u{?l2-D@#`SY`Jf~|5AjN3;jS8CnVfW zqYztDUAHWZ|$`G7;1K}ULC60O=sP65>zxpaW;YRXp*?$E`r#wZPh?2UcLGS9n>FQ zmOr^R2Do)xld(A&a82TokN`yIi7z6|~Id^HC;z*sJzSK81Sqpa!Q z+aq+PU59CqZSTS0<$F{M37SOB!FLg@K6~6h<_hI)2&#(( zT~j0^BoNu=@s;YEr+Hv-UU^O3^X9G-@{iRe--0ZsLe0jX9(TOhlbUJ5iY)jDKz~{A z$l{Wz%l4${YmN;Ep|6ic-@k&GoId(IK~BEvfFEnrAJB=NyF|83mCOQlN_0(Q)n z%$DGmARByga(9fWfqqndd#jpRYb^y8(m0d|NOEUz%5jwD`Rq_1Stk{)s@;1UECMAW zozX4`soRV)+HeMkr3&>l8RpN}<7lQz>8Z>(}#!U=51<;kADNbdSDNe{VmmJhzLxbSMag3^L-K%p4TUos6pO-L_K zm2xEzOj;oiI~h>gw}_tZf7-gHh5iJpk;lQ71$7H5%y=I%zWlzXwg>H{_IP75Np8t#4shR*6DnNZe^~JPgNJ&)tHD(o!D)2IIm?`WmAK^voMbr>P$@ zn|rx$lydSQwcHTzVb_+`1RNEru=|;KI-(gsq589maz-0iH9 zkmsZa=q$lG+H^=I`{)@tw#+`mA1C23hWBbo$Z@U%M7XKaHz6j^vYOPAhWp?ZfHAFb z!T_WV+oK#E%siYWAj*&nDOBvv7)1c&_HW*TtDr1)fF4Bx?(X3O1O!*LLQjs1BYIy^ zxMAH{7m%ToGoAj1K}H!r%(|kbfO14z6H(iZjO#uM;G}hj9?10vI#dEB&aITQnGYUy zxEvxuPUlBj=*fff^8?nTF*M`b{&4_Jqt8snOBoy>Flry+K=1NdDVWOaK_xidz=RIA zkc6x7mhyH<%W943=Mtxucs3m%_;%b8ZIdEL=K#1n8NhS=EIVis;Q$-f6kx5;6pBn_ z&pJO|VLT#LWI>+N^ZSnNhCHEOG}KL#xf+~(kkoS{_q`QS+<()DW)2S)KM?(SOU;6e z0jv1rP6t-OSmw1+OD-U0%oCe?UMvtlplEGhM^8D=IR>@tpa*}cYmhd}H3l#Zhp!$nEt5C0D@|cxNm-h%`}5CKSUmAU#~$*FkhL6y|2kn(21Z zLPC8J1|8*dKhtS7f2QTdYW_=tGLrWaM`bDM`{_gPF^st_NWEV=iTqlxyM15nLuR2lfYwnHl2zR>9wTYG@DcN%fNV}sua#s`7rij^4RU@ zF8oHL<<+aNg5BI@L#3{8RK<|70AGjww7=nf_;9pM9cmBEHZ(WsDls`g#t|+088p?0 zWkP}haBg6AUlVha!EzL3D^ptCn94JX%q7Q=O~$xZ{mrM1-etQpIA!q96=yL~f# zx7j(=YziI<4Hy*OsdXRR;4$$rYPeAnaLbPNZ`j7)y3QOM>VmD5@w^cfE1t3T!OZJo z7u+8_@E*UxMd7Pi1l8e&kbN*)ZtAEgH}&)+AQ{Hv0+-yr`Y^dZk5r5j6K&gy zAQyX~I((D>xcBSqJHo5}9eho13BQLPgZ7vxsw{|ax=$+3Og9z#VcG$AzklEVY;6YV z&1>mwkf>XrV3<*>2GH)CqHSEI>GNilI?RSI433~t%3O#b=h1-NfqYFM${yY>!%6)_Bv4!z91Ni&?3YAZhP2IHOK zjJnxltRE>$@T>&R$h%>61;`249)H%bN%*tcb^C`05isA#Q;UlqS+BxR`M+B4S?HLD zYcv1mViKpzxY$BYbMa!M9PRU@#l;W=Y}`_ilk2WO%mu+k0pU{H2c;*b7NsbVx)`U0 z;{=DS#8A1cRRY;4~R3UEN=GupXD(bPDj$1{1GZ`!baAdE`S_4a9HDc|mC#a)TH z+-E4%)g-u(*=#u4rUud=^v^Gog>hD-eHh=lYy;#HSbME&X&1`lVsweaCh;JRNw$v% z+eScfJaxle1v!Poy)Fq&E{hT=_V$uCg?fSSO?-V84lwl&3xfPldR=bY$kPCDX!!oP z>7j)ekJbw#FkBXnP^FXOB1Lo!|M%1NgVk~x_!c2?&P|&-95fMq+twf zdWub>vn!&0mS5pMsz#lIHXT-PEY{m5+_FBM^%>*?iEQ2j5;pcbKne5wf<{R4xuU5K zHU|BCn;`)dU}MoBIZ3|}aDWkenY0hT%+$(Lh=6?G+4Eu8H4fPWYzE5z~R zHP3`dxe2Qfcp5WKCqb=|DlcUG7LZ)L@svZCuD;}j>QNtGe`hxvB#V$DQO_Fq5F!Nj za%@pNvo)}WVgP}>7zT*T;lLU4QuUVZXm=CYOBpPOibfGoAL^mWH)Q%5(4w&v@FN9xBx?XwLa?9vkUK#98c7%p#EX+w0%C zfe#%KmGNr`SQSp8FuJKJ>LjmC<(9)0QVk)EVVML_ze2HL_r#9=4n{wZgr_zzT`Ina zbT3Eex(L!>ubk6>du8RNc8qppkDBU!pNgBvSb(?QAh!1K&h7ws5Ss}G6+92Uh5Z=S zT9PgDN!i+_wNn-x0zzMe3I7<|2Z+ykkk6rZ6vc~fdYT!c`i&qHU9fHaR) zK-em$AMRwQ9dy05+I6z6MHv;s+(c54k?8t^vfr-^ai_|bPh{9s&#tVbkOO|yR_6f~ zHxG@G9>KbVc&#eGpW#n&nSl0&u(`F@&IWR58o~60hXz%f_v&}0S2`-FW(m@_qCo_> zmnZ6|+tD{igcZe(cx-l1GYLiva75We1yz@}j(tmMD3Gsh@eTxD;&aN=Epdv8_I8gp zo{kk!r>tUj6Z51Y%O{yhKa%Z>j*l4DqkZ#p)QoZT4;yp?DmYto*`|o6I()W7=pj#t zv{xUxPpkgwj^TLq&VBV1?7+R#$N^O((pk8>;IU!*l})UX1@?44rNL>+`;+b_u5FM@ ziS**hEzrAcOPaOWL`-IpZ3udh^uZB38T6+kt$n>7E({{Q1^g&X&9|MOAw{XF5~>Ul zx`lXyKj=4#*h!{nuO|K&>j3;+;$R4aq1K&k`K!s{ZmA+jT|YS-)8F^8;1NOxO8?vhQY=4kit=C4)?XM zjWiLoXLTXeo$f*Fe8L|QJ*soUT2QnR`CU_SX#g06Qy(!sD0lC#w~xgaAa)8?0kxa~ z)B@R|&jdQ1F`N!D1$dEUv~vhK^%~tuX$*^om*}ZPU|VG@C;0bi0OC&;cQAz{&t+-tQUmDNZc?+8D2xG^-M4t(+W_|PQmSdnk2KCs~ez3t-pUyvlBh@B&%0la5{34HSU zF8T;ZqHMIKsO>WBa0dkB=4TBnQVLE;R-o_+f}+h^cy~5475g04ge;F(m}ZG^f@-G# zJ?2#}s)7zJReZl-aLD!P9xA6~x*y5OjI83c#N;0QC+DLnG@E4{g3KZfx%540G*7`P zK?g-^<)Q(d-7w40xQR!4T>TX(Gqz0ZL1cQ|fM}SGuU`#J(o5HY`aG4u2 z3|Q#)`{gSNlo-MaQL_?llHKx6w7lNW5X%MZW0gx!L7+@LqGUSRZG zCRaV-4}sMGEjfB`q-uR9$QG0q5nv?kisy*!W@4pCEl}neXMz@Bm2HD1Zf?+;Av)6z*x3K*^+gfl7Z6U_ z1F74#$s(eh>;P1;C*Wk+-FB<|SAABbk2Wegy zogavV=wPadAFQy&#Qze>jg`mw|8gW|9NRH6w3y(FxgT@>c1r+C1dC1t;1N`>$g7ji_SV%%H`Bv_~LzbO_7u3!5h>r7u_1F0tF_%i*NYkGl9w(29t!@lYnS_vi5m zGo#F9sz7y>fbGI~7|H3b9v^z*np=t^uU(IxStI zXrz<;#m;mfsKsxr=A!wh9R%RKoTwI_#^w5 zxI)OxV1IUnZ2rUc=I%F2^s;s1M#NLCz?I?#OHV7FXe9saOIb|6NQEs{BE_}eeGmHT zn7ZaA>tG6U$D{^%AflJ9r-Kmgr%lAn$Eh*&pP=DG+6MgKyFth2Eq~X&y&y?Gn@^%b zTI1w`(|rS`JKSVY*|k!D@!Bo}PaPmtSwV0u2G;?Lt&FE0EwPFeSyAEneNQ!!FKK(; zBn-dg#m5Z@gdmtA)C(ko9xwWW%^Ln4Epg@p1v?F>G%CKHqqW*DV;#gGKR~{s#o3u^ zPcjaustQSLJX3N;`fyH%qS(70>oi^8ekbXl;!l@> zYQqAQeiwg~VC?uNBuD5mss{mn&}UcZHAlk2Ob6koJs3frf-A}7{qJ=Lp`lNaY2MeqhFqHk9NQ)x)=~`6;**xPyL-%d5JXoQt3i~EK zN{dV-f0dO)~O^OynL}q8FJsmKmI{uu0Wsy+JBQR3dkVg zZUWXk#QEN8^`6Yn0+%=hBUyx#y(kWZ{f7a_E{U2o>mbQtxWdtFW6%Mv%kR4X^GR}b zKWf|1<6fM1eEo^IZpb^hl_g1Nm?MhaP5vvzWsm|i4SW-VMw(&a9!E2V{rs{0d2{c$ zvaJ4JK>L*gJVHSshA|Z*;CPBTSJe06OT{mH&@4?Fido?#wOxM?)_f-{c2?1XE(l;y z?}DwF3_VT2tguEHA7t>%VWn?65-9GU-u2-D2f254NNB)CM1&0Ns04CPk4`IU%gU-Z zbY@7dSz=)R0j$5Zx(WA8xfGHJei3XuAkqAu_3})^D@%}0jT@i1KqtsqT3vz%P^wKY zeF~#RKFJjkc?bKkm9Z|C(a9AlAWlI7XY&zcmWVlll&oOU#M6baixn-KHVFsB|4-Vx zZ;d*rwFrfl`#V!e+%S?Vc5vEWG|ke-8@gAsVTT2DbKNUsL-%tEX;SpROPJ$qhbSe5 zT`L6^9B)!i`P~>A;LfT$HDUvczC-32t@QY# ze=h^F3X%iGJE4v-97i^Ggip~_`9<}JgRMTvH?1}_c}8$XC}@E@tmW_uGCDlqnD zJs{-)nm$}8$@o0rXD0Q(zj{R(Hc|gQQjI;)X@p8h5vD?4jT{GUOdE-@Z;^;%{`*Km zaTvBU{&|KL!HA6gs6!TnjQ(I5Je1_VwlIUzmC&QadS04=^9x>rcoD`td<;KFo4TD$ zrpS!|bJSbE^*>zXWo3;((xyoxpOk}nL2HGC4!%+P45JQAkB>5I87VX+!}tPivpQCc zV-&um8fU^6gZc@DC5v76v6%LT=gcKtOsxhd27;qNa;-86r6F=cO{>ag&d{ zIboiY$t(LGCE+F1Yh)Nnhv>Z2e#X(h4CXjXp-Um}hOo>|iuO6(`DPUkv|#qw?ve^< zQ5PhFM1PLDNg0ox-_d|NT|M00Y0yf@nj$foUMoSM^n){j2DzBhwCQnY8wBVVE7VC! zK;kITbIs(ybQk_pIQigsORT(VrZJSI|qWHAAKNU5p zKtVT8>WG9P9i}CJ>C?BkVG=+PxRZ0mOAp_<5OvelN~J<@HjIE+3ca=Mr7;46F!_w5 zCjH*6q?Q8vwV~t%M@CYaCE5#~%ZuE-Ss-vT#^v;>}|F z49KYgw}Tvstt~0$OQ?Fae;(fh@|tco<2?KVmrh1ziD4Ec7}|0 zB2zrQgW1Qz5FRQToMxbG_`4@#=GZzFczq>&Xd1fofvCQX4z&J$Jpt5PL4}~4281*q zMi@k8OR>_zb7SfUySm!S*|NsN&)0D!dCZNdG#~tChJuaffCp7G<%qEyz@ds@y)=gI zD5(;{M;k1y<0Xcfm*xyDQ{+SReI_a>VdWG>1u{Jz_SfkfZ|QH6o>g57tt4JPsdkX7A4KaSB=wY8@B-h|Q4QHzQ#JMy%2gk6$37*ua z!lx&k+n(q&{4-4gXqvNo;YLB-emF-M9xsLYLe2#3gdjJJCKkkG2p*dkV(@r&xL%1F zP=KX@^RiBlJ%Z!To<)lT9}bN}5-V#&%l*#AhzgO11K`UDwO`)d-8`>mQZ40kyg}k`#abmga#5gBs?oFn|hHj|3Qel<*|NVZIc zEVK6OyC+J--%u;rye4iIY@&P+4cR$vXD2<#RNAB{+w-3D(N$FldZCHiHFZ!PwTV?E zJ}B@_41#(bMK)mk)2CC=vS%czbhHuPvBzyioo~8*C={+L>PI<_l;O2JzhAeiX~l!u zql^K5D4s{ViPsRSo9+{RpXxjN&5_9Zt~aPR(KNwA0b8t=w7c-H4= z8d5|78?=F32}mj-tp zmWYedV(GiEJ7I>$*TBCNGVFF+hWmK|^mXhVu!V#{R*q9=-3@0=Le-&S`Ah*Iau6uc zGF1nAL>O%I46SG5{dvqcDWg2U(wMHDpxLKurp&h)zNiMo-ztRKRzx>!6xI{}GSMN%YdI*am z_rHQt>mR@)M-><&t0O>%-w^yW(XGB%?0z$85)^ZZ)X3^&i#t)b7MX(sLqQ%yQR;6@OmB;VP`9HNyJa=_uIi06bn0_z3CF8m*7*#egCY0k9u5+D5#vd;pF;id#C& z@Y%;9-qR$`@KC^s$8IW|-!?&^lx8o> zFMk5n2u@66_n)lpzwn=JjuApEeFMO}yvBkaNKdWVPOFa)#4PK;7C@--k)`WO!iRi2 zP}ysuR$9!Jw4VI1)9b4F9{u*7@A&G~PmF+n>yNs#*WA^SEp%M=(BBk^!aoUr(&Qd; zxeG(n9I9;&QyM5dDlFmF=MXAOIwdylcyh61`OhDoQ4LTLUMf9HGQIGry&vXY9h51? zz%=rybeXmRp`SSHANaDcBs4%U9V|spX(jn6dx;9xC};7qh-`Yfkm8geo#f=FThq*v z2a{=$%5#ZNC;6Zf70i~hB?LXc`@ah8P6$)27&HxrRaA_^tMdiV_8DaVj2ay|WRocF zL^B8cJMBd1%SBd0q4ARsJBs1{c>V&7Flx4KPT>m5NcvM_&RYqy42nK&fp!g=E&0JT zb86zKY~r9S#7fkQW)G!#gWL{T3ibH?GG(ivLS}vnmLwVo=riXCZN#4nqI@2pczJ}< zyn&Oyw%^YK84i%8^%_D33T==+kqHSmlPyjL9HVgKNN-I~kHeQR4#=(Rx8bPxJ`7-} z0BDdr&K#GhF9Du)1aXGKJkKRpi_ip3lq`JS8DC3a2v5 zvx8kX66|@0ClYM|_=w@;DcpJdrda8YVsMAmZXj^sgd-1?jBN-wUi=KU6721qi-X#S zPm5IKK}Lky3o-;E5ky$;^%Y=dvMGz(C_lZ?t9fZ;gvVdKSt2Wf9g>gt-3oaRgJ&=!vvsvgIRcV&kNhM&!vxA{70M0_c?wU47z#lI z)nbYcoK>;{TinI`0c|@vQphb2oPaBLs^e5u4hG)bingddgj1zzcGkbaYm(4veJ^=z zi8@U0JISAPpPmW{j0%e$?$|0r7t8PS@727+d5gpoCLM@nDklC28UTpyA$cOX<;V4V z%C2xsoF1N!Kxu=6<}5e(j#EW;(Rz$5kjPcc7FGvQSL&1 z91I+~P&I4aBO|u1@1Ao%HrC*uTuteFvDB@L4 zEUfK4HOEbVZ&vY*O0cXXn~qL*6CU1UKLX02+bz#5`9KQ+7|Bor3=oiI+2W^HQj-OM zG;G!m1I%XY5rbC7w{QTp3Jl@DXM4(F^^EqeV<$1hxu#8Pg0?!)KG4BI9B7D1-i>q@ zN}8nwp$R+b&+W`e7MxsWZiWA|Z zh1#eDSb==uw`lKV5>S`)afxz~?qIixKNVzye7W=>aZf#2-`!tJOXVy3-E+YBmPYXN z+4ZVI+YSO9xlTj0GkzGf1h!ko6Q%tqo02tC*_3vRI@kLven$WJUr$&SO1yCgPMNpW z*SOu+AS-}Xusi!>r<@a8ZIPm6xG5PWXp>UobVAMEKI@LWetQ(Sw-x9qf2q%}`5>GK z%x8@P2HYre#bLl|(_=VY-xPN&cNxYAxBtT*URTj-k3J=mMCFQ-Btjpf0}0|{Vz-4kheRwiu{8ju(fw)OABqn0 zKUv6_S;)xW$dh?f1O#x+TdXXFBo0=@Y3}@EX778>OTinC1rdKIrg)snrR#^iAx^_rLG{<8oO%SM7Qw5kJ9RGRVqG!X_wq6mhLidsd0xbp`&Otuh zR}ntZs0pKW<1^|;kq(3&b*50B5;oyu@`Cps&TaoY0hK6Dyc|{^!VQ~GXa>ZW>m1b; zt@2~bz{C#&Wt*G=55!x#Pw_0q%9jkY@AX$e}x4O^`%s|zJvv_#pYHI#{ z$1o7vlBVy{w~`YcUCf%XEhKIu;^cz_qCgvNJDa9!`1pOGe1Xp}FM9=YVN1`bf_k?O z$NVWmc%JsBdoECP$^{sbB20!_y1(WS>Pwhzh0qP{)C)~m4yr)t`k9a~l|mZk={FoN z3?4j0YEWL$JzF42%NGR4lYDs(uNx9OOOzTifBS#=V&W@r`3z7q;+b+JPbTowp*4yt;!>#{59Z$1cG=7>TQtONDmR2WG%}ei+ zu$H`ji$+1dS(A(VdE$oGZmv-<6K`z!?R~KHM8$5kLd*tLn|d)iqR{lHvA}+Rx7i(< zHtFANzgQSHVk5^7#&Jm<6mj+y$p(1haQ!x|`NdA5Rq=kb-nLeTpFXc7AD7mm?a^E# zZ^*WEV8iu;p_4R!4{Hb(SFxQ@s*`tPxB1u8hgJXZ-~A0FQ{Sw|AbFggiA^EpRr*w; z7tDtpgr#ONtJ`ITx)%794DCRSiS{2STM!Zu4(zViptFB_V9hZvEp4r}>LZknmpzTP zcvR5J3PWxj*y~ju0VK?hJ>aLrMl1lZVJVLIZH+JBvC6<`Ypk}BzD!?FE$o7Fr|8RH z-q`Lyq&a97JzgsC`NEa7{{-TbmfEXs%db2)N_|k3Fcl_o#>XsqTPkK}DDsJmiM}Y7 z8q3A^`WvPb{KbcpVwnuR8Uk#hOBtz;VYL)N(lcH()TI?2$2q=gC2+fDMS)V1 z+51l!fh{MvpR)#EGLYw#MX$oS(6ga_RKQUwk(LpAXXXKqB6pBTZ|KM3+k|&qJapu2 z!f=Xl)fu;tOE%x39j8Hq+=mB1Wi1@o;tNXtOK^kP}789n{RGEM!Y7j)G}It9g4OHmLB%> z!Mlih{&dYFk0hUR8!VvW+FaF^`t4i&$riyvGxQxRn>W-nN}+!N3IK{x!Hb*wHt`ml zh(6L#yf%tYuk4$=4=+0WxWd6KtS10QR%TQ6L!7J4I1nFIKQ5VWajQjm1?M;x9J-ER zK*BhAepLZ~S@?ITCL`lVIn~e8Bt^tQhGF{h$M^e8P}JFJO7D_}0p_1zWu*_0%!H%} zz(!K7A!rhH7=LyDQ>Sn%yE`lV5JS||P^qc_!R8~{!6B#eJvD7Qspj`37Mr`DZy&F3 z{`GVkBz+Kx6BMqt8J!RQA6x2xFHARMjw^UO=(La+JniQm!8MD>kM9aQCKpx@I{ zWFkcF*9~@9Gdq}xy@9$zg!PMuhwhV2bDeb1NM0bU(qN*1*aBGeaKg0F79Qk&$KzO{ zxBmFT7!O%8%4WcRi9JAk_`Uz9&BJTd*~L^n`^7eDMi`>FpzB z><`n$X*SpfFj6C#(3d?O(|Ccjv0)j>F=w7)dKDuO1xudLKgWO@BMPuY_<)LL|!1nAP-iD%{_Yv-cW!tw7%OM6rU`* zjP)8VnS3C7Z?PR>AM)gTo}m7>*j&Kx%6br3S-czXOYi}}zR4yJSp>>-IOQ>MhaZ}K z@3raRTbT_E4goVba1wBg6vAA$jGY1GT8RO<%-^{Rn?J-i_M{xul|?w9OjGQ0z2upJ zneo5r&rs+cQ5JSIc9M&o_M{o4!3S~WH3fY4y`f+PJ6{;DYBN{i5R$lCP> zWX1@VO-pTwA1=HoaJ}0;c^jt@P-zZ8@vWjYM5kj}VA$d3IK4sDe<*+*j@k&o&d0?M zD~C%&U>fhoKbXDDElbJ|s6PE*wt%}MFYFNhsnLeXe3qfymJ{;s;|}GJ1Ky=w)ENX> zE-R;Q%=PfyVpWs>*L0M8|-#@3V|@vQ|a^bU!&kPAh$^h z>34!tKp0{TpV)8v`C%je*EDIcq5vyI)yK~hwlt5NF3u#5cA-(s%4yIpRxGD$T-f%n zI0&rzj5t_-CdKb@z#Uhi2#cR;tq$mTias^{VK}Rc67+t!{*2sb$!2|fN3G7(pS2WW zUqWqS0l@@6=J<9JS<4Ii=QB$M%^p0lsGuNS0BMja!Tz;aS1lw%?fn+;+lPDPX9c~1 zptr^+2EnI19@2OoX#;7XTf9{tF&%^cF^4QY_Py;W%^Zz6TW1((v3b2lCl6V2v@&r3 z1*2wn_@|i%VByJ-1`Yr>9?*Ae+!(69t`29GY=(9=!N@N8P_-jWhucKke-Juo`?llyI@(6F=cOn+aq zYYTONX3JKU6ClIC^^@n0bl-e(V4NS`-F|xY>WkY?dS;B2^m4JCCS8K>j@JBeEQ7*Y zO()C@&ZY(E)PeF_uQC3>-8FrWaq5-(sb}GA3-ap$&lu}L2_&Ukf(R*BnD9{X#!jo? z(;2vyK(`YCsB5VroDpcU_@*~(k9_D2@t1VTh-)S0iLaU{X1`Y&{2evF zuI%qk>+14uXG|NhobPt}7QPTmSP{*6foMQ>g#&_fL5h_5r5_s{Psj7@GS=bLLXjV} zpt`F-2VM3ZQ%NP_mIdfyAfEthNcQXu*%U=knPS32-di?Fp#>~8BmjXP>h!w2jAP?a zc%Ge7cRAuxDTmI2Fd?u%yJplTdx5749caV~7pqNQZ!x}2-hx_qm9STaafOgVprDdA zjn47UvHw!Mc?2%?I46N^pA$%UPmUEs>}zj(*gc@dl=dqEt5rQFYABlY1ifzMT9C2J+X zmj_Cu|JYxu8!_^6*&q^20a@||OVncbcYPTe6iz0!^sU@=*ttfpZr#I6&A;MTk78Kv zgHYCbyCP6xf&#P0-8gyQs778C{-EGN6?F;Le?=CRo*{N=b8@$Ho!W1HzqeT*6F1=q zbe9YgzUKzsLf&t;lyT6O4A+Q;8@3;kKgS%|ica6bihH{M@4H~-IBLKQnPL3J zlkhEF^M;=o>Nf}xQ(EUu6dmHpfYrNvy;;N)+sMAYyAUP2^s6RcML}hWk zrus#wJbFHsiE57jybvJFn)W-xhQ%rbJPb8*;ejbUPEX}U$}_@5HsN_>yf`+%ix6^` z^?Nu?&>9)u6o1eweQR>;bOukq&a80w$HzUZ3;49u^|lob!}!l0d{>$)6Rf9Q+jsgG znn5RLSkYg&R(H>iSo} zBr%nd4F*~4_yUaWnrP;V-$SA>6lA2P#6Q^^x3GLDi!qESifu`Yi0a4Z)0Puz7-47h za`V-0eNC`*y}jm$D^n1$UkFOZG9r2(sL>!pwS|oi0b}$&n8tw|5c=N3-FjYgVfjd_ z0q;Jk6;Xyj-JyqISh=mbK3hRY!dB)Nh#e$z9i(7o0ny+Eg<*Vz(U1Z8{5 z)LI+EaasrFP(CUW$kLD&Fl6?4k>{5KThJx|#fdnU9q1|_fMF*3dwuM7ziJ)+m4e2< z`Snut{0g;2QobHCKOofU<0QWH_}!W>y(2JC%CC|2qefe=;5mgk;e<~VSSP`)1sx2& zp^*OC%}LCf!dm}Lfze$9`9UO7L@;fZ9nZXH+#gP4-eRV<*flM=2>FPgT%S!_d{&H$ z{mbQiv0pF+kIZsR!BJaY>2{lVx}&M)8TEi{85&NpN`&S=kT@7s5NGhv^_$I(M#qM) zGYp0r*Y6Q1Y*uo2#xb>Ize-js=86hLSGP}uC3ra9(q-RACVD)FS5eDc)~visBsqYb zq^ICJst$U>Z1rbcxxpCzZew5wD^l%$s`ZA*By5p>qn|#k7a=|2HNzhmFnMQG<`2LC zpzpv(Lb7G552G^MZ@H2Roy3#-SUgSqRG?`jZa&hL5CjaKno>57+K8tiA=1THXCH;AvIFRrHm4qOn8RR9d*?-kjdLsHL}vk2>;% z@y3RAw-z&uf($n92jV8sj$~nB)Sem%Y?}=iyq#tK+x6r7t4KGrQGl5Awa{k}g1P)0l05_dR!MAVz*?$_wgT=EtFDF515mU}>gRC_{PB=;M=JJJX1SbCK z{nPEQyWvdJu`xyq>2ILUiECbmKWRUW=q7F&okx1~$Zev{vwwgj;fY2=(cZ&irc-@o z3zjk)#IBonHjY^1-bu8+C51-EV)Si}4Ytc$3jrzERwM*%T~cje@Puoe%%LCpk3vfu z3)#Y|>AOB!sgZF!PVew$u|kelvr1X$sd@GNTu{U+qAz`%P%>?+jS^Zwt!2Jgkk6AX zp~z>0UXz7FQI>et^0|LwD8k933y4t#RDAYF|M5Q%w+LK=6dRH-pbgw?{rp}(d|~uP z!o7etght?2{^c$H=&0x{hk(;(xJh!xVvWcCqLC_u2$3z*P5(= z5~!)s=*HY&3;uR^p%Kcsyf#<|<9S;^|3);5!rT7G#38htGHW~mVo6MGHraEBy=*2RtVxgM6{ICngbVuMYgAT{|4-h^MR_cH#eu*s=Un5?4r7zB4ZBNd z-NTm*Yj?GSO$*=kt$zEud&DxFbcp~>ohxql>fz}YApSd=PynMg>dYV)f{RaCWGV&1 z=iYz3ap_E9ppgCdmpfxCDPApAd9D%B52p@+!!+Ql^IH52f5*@5xx(+pYQHhxPhN z%;;~_ebo{$678y`981{7CD2w~(TGIv2`R~V316THxu*Tx{1TyN?0E!IhYJJMFP>D3 zaEjL63nVP7E5;VJUl3wm2)-Ix*4!fXSz3Sm2hAA~41Wv%F(X45%WHgkswM4uy3EOt zziehsRC_Bjab#f3GPsB*q(FKK_kAhr{gSmTZFkkQ=4lZ?ELc$wP9IL?o*aiCzQ>Y^ ztNtCl=?0y;NPQ{l%qkRD0K3GJG!+BW_w(vF~tlU{9=LIQuX{a5wAr>*VC2KSoy+WO*Zae?ZO zR4w?`LTLS!3nRA=fvKm6q!c+^_=xvliJk8D5!3sd-FrlKa@{v12iyy&+piFe2#2Ro z++pskG8v?PzkN6XQaQ|lY3jEiKRWhg0GR$_W@-r8f>ixq*DC~Bb{XpWpXB1Q>s9Bt z5)JZY!;tzC?#82_*?^Z^3#(+_nTuAi#N{8CJ6 zGHg8^hTET|GA>5GT%hW3w* zB@baJcMMHBs+fp8p|aC$$<#+bMx=8nNf7OGv!#%Ca;hhH5u0I2#TF75{k{caXyG(* ztVNv84hs&iG8Pb{RvS!bD`q!=$2AhTIG%%SNZ#6VO5X?1U;b$tPF4+h8Rp ztZT#8O>f5+8Ha!Rq#BicRk{6x3cfORZ7a}V{3aheyK?Z$Qm8>1Y=Oe-X}B=Xp8DTA z6sV+dgc5@O{FXoJMpbOqY7@(@7&Ae{%nMpDY~kquU8AeaJ&mp8N#5dUxbSVmqy!G6QtBxPE^3mO4iYZo0wTlmI$P!aLFBFt=XW3%J;SD zOuC#@OI-cwt8OR3dTkfBnv8-ZrB&nE{Y;KIPu(GGN?ifW2xYx^Cz==OTiX}8D)*}4 zKyoEKv#1&~2ZjTOJU=cFLB*jJFZ`{1H|lQlk(#{WInhw6sSDztUM=FKhi!J5PjEwy zxY12_^dfL60}Vj2A-q02a$KM9=s9k{z!Zvc5Aq{z=sZsJq4$dC7Cp12j*6BFc4&5I`0Cb?CgIi`8CQ&QX`oEk?fC^L?f4$* zXt1!jPP+AE+*5;&v=564G$&+ZS^TvKFitMnv*O3u!jnYW!wdkLZ|tuv441Gqz|b`s zQ-z9Qo5-t7&NN6KJ7Kb93|f5p3Le)oKG%4hAcX$F;ThoJ?#d4WKsk4IP=uPBBTP#t z;$kX|-hv{4@}Z`x*gG5iPn+yB4$Hv_l|tx3B{+K~8jnfHhHqWC78{LzbaQ zb-gvBxm{M?Le2=w91Q@jyw%MnWf*Fuxfy{x#mE0|;zG3~LZRGkRI6TuFZmNwRz*P} zTeYQ7oX|~t-xt`@H~?_i^~5wP@Lh31`POtR^k5%MZ|W7PEtd4_r}t)bQvh}TT3S-5 z#o%#MV-Ll5+Cjj7-G}y6u1fmvmovzMT+rsY_zN$)uCsZ-n6Z(hd zQ5gV}J^y|NTXo`0quK@BSJw1`e8zY9t;YUo0<3+PEv**v>9KD@UJ-J65I*wmq0)^H zrZ(XTL(mS(bLF1pgTm+RQS@2BdM`=ik`&6~QDk@()^=) zBDM6O#1_A5Gnx6HJXY9@yIur=a{Y|Hf6-BZTtC>%j)2;^o@kwLg#5|SuI zyBOCYB6rxw`CB7{x2YioB)JZd<)h(n%ma*CVgNjamU?;0Go!BgV6m9qzE%hWkTkP>A*akLh=aAZ5mTd}^;}yzf!Mmt( z?UI5EAFp7<9Oq^WHouXy@x64PP|6+3=r`TS(bkZ%<~Em}+{61TZu=+mj#(VpvZkhx zs$^*T$JMcCRyqml?dq108rCQoOHxlIOb0|2(#I|`CRCk6jsAiIn{ZtE_^I6YOk{%D zfJ~p1gZREKZYV86#BJo$NuYqrC2E}xfG*qPv87uBa0+5f#R~Ng6(?YLd}%|0!VDJCrv_9^p$8fQ}DnO?yH4`}_ABk@!04Ejs@n3oBt=Hfd^fZ#8Jr_ZVl9Jt^+@SufgwA*db6WNAFp1dFxACr+%l-$FL zL)tMYGbw)e@bGC&L?Jv&lxDNR@RF!?IvS_z5Q<0)!g{|mniTF@!nWMDSS`5r-c)v& z{vUEv?@*w*4ImcQ4yuLZlQLvMFumgA3y=1PG5^fS$J7hcza2-}g8>)aDzO{*!r2VI zEuWESH48#UUpVu0L}m-OvBZ(dCL>qE(TxX$$&1{fzeD?S#8h%-zP#HHp2A=Vm3n2g z4rP4KHfMFB{5YXvAm>;?`E54=)YJZAZ@{UkvVGDJc>;kLlza@wC-shS;goD}8<~?2 zhrAyFEl^$n>#17f{0u{SQu2xA`tevj+CH8L5Jg{-f6u9_R)*aAWfu>)`7B}E0WL^} zh$t&lP!juQf|+Pku;N30&ar#u3U{L>FoM-h$CFeh;20&N;MahoVS>9jY`?^dNi`^B zSsbqyDA9mt@eKHyYQ1T5sub#;TA%ppKMLBIhqiAi_EIqxRa4|u!dK3OP;kNW#os3N z;AL6GDT=T%T26-+gquFEH2VuB!O3 z`e3}|F7KmbgvEpdk6;)0Xo%kyvAGaF4JX&yO03{JzWbnNi9l#-4@b`&-5{#>)pq;U zZg>6m){hWnSV>Ov@4BZUKj0g(4Qzryz<~ z{p*wJ#Y`ks12I#2X6L0Sh9nYcu}qQsQfL7`K(-}xl$e7N+|nEiMEt6}gu_chXiWbKHBsU9V^ zpQbG>P(L`eueD+?I~EAFgLnl+j-muT_wfqUv*Hwd@#5xsef3s4jvU(r0>!NN`00Me z06x}xDllL_!dIr23FE?FLDD$Mx*i0VBF)8@3om6>w=m)pLIp#Hm_e`L8dZg{Z~K=} z^Y!&xZo`7($|99JpcgVC;0lstaz+3GKFIiC3%6AKzHz%}gwayP^5O-VWxsZgQW`zS zT!NMd7KADjqK3*PA71|ivTTLS9{Nfh3;{k0xy8xQ=l)w}@Q~B5N#*aZEKE^LBp87m zpovILq`yZcT|2iHL@sXcMhg+kwtD^5TWah=`xFZkmtF!<~3+r@+w#DH3(bRR=G7?6+3Z zvA|6d);hzZCeh+n5x^RYH_=y+k zX7HG?hYU6=2p!4uQ?^RzAdck>B`m2JIH&Mq`J8S+H4UmPI6}aX<3n)*{tPw}aH(XR z$TD!|k`M|5;0x?{s5S)6XJs^;MbiW4#FthO+k#-~p;?KoC)t4X5>AKKPwHcPvTWcc z#w$jGtDtTxU8mUD3hSQ;hRkz1WD}~W?E-9;0{&1gz+3FLl1&4*V$*YDi8-MB{+3_{ z%ZUP5zq%xZP8gM-8b$$eKYK7cboR5wD^;dg?mi&{hJyy)Q5*mOnNXM`Vg)^s&z>w6!j7OlU@RH- z(BO9mV8CAR#OEkj@^5eM)+=_&f7zd3-9Q^)^BIdkY_Ejhefkfa1{UA=bPn)e2J?0DxX~7%!oomKL+npat=L zq!_gy?DEjKgxF$y)5dlHU68V=Ye?*gO!%3 z@&=v!jprf`i4I1Mt|;*Y{UYK!A;U|~OjK&N71?5}Q%sN9 zzU*7<_AU55_IY1QCW&k{)&waUXo^t3OLk03%2#cH39wg?QfHFl+@u4CHOv0mE+Pn6w$e)D4?LgnLU$Pmh+iZHNbLy- zAeREX3I(b#T@fflU>2DXYE+ZaNTZ8(PuyJ@9)cn4DAJ?|YFia}KNxxA5FWb{B4S`& z0h%V-uBsW3$^PUY749J0+%&N4^km=BZmD9kwxPoXo8rCu0!%A;VKB*T5AQ>EXh}p} z!Mt)^!T)`_BP4L;e8m`+np6e@&kG7kNVkzOMrhTWlchbdc}%5CHedtl1~;5_2$%gh zcKAWCNl$C9LncXV7whXsy^b;*(4!4yI6wj7^C?&;fyW5Y^ea(~DUiwRg@|_|yy)~< zutM-_TI!j3{fax19D!bgBn=XV)w&c3R~%cH?$|przl9g&(nt*TjVtaFu478KVzZar z#69usD*_924FYZiX#m4e(g@dnSWSrwH{yfdUEge9KLUN2P~O>4D0LFuj2J)QzN1L9 zYWZ*h2fXFhC&wN#!N}k2qBtTTsYX?VrMT`vaLOLXW4`;5y4;Zh?)uL31_wXAo`sV|! zsr~@fy(Qj>wk;>`IO-DuOIF1D>y0z@!&42{HbS^%38QcNh%(~s_n?E!>zRlaN#g=r zojMb8Mx^}gJt@P2u?T(j@OJm(*_-hBsFtm=JzzUm%o3z){`S&M2l1a`I0UBQWBH?3 zLNQZF$CL+BV?i!5Fa-r`mXQc;hVvP#V6vxAR}$|V5B*w(8EI=ey(Rf2lnY?V^A|)Q zr=8QT1Lkh=8_FQk&$eISx&+7m{{0>D?&`!*ZKs2lSSofzd6Yb|D)+EAf&heBlZ^nT z)4o~eKwyr_v(@jb>l;Dugs$N1=x(le@*J2vkXDe;wJoG3akM<56TK|OMkJJ_KXvpx zmw66+KiOR9^vRHuT=(9EH0#XPNDS^r!@mx)z!G%5qtly(=!S@ofO4a*#T&HsaS_yM zmV8TWv2E3~3qsF5#0fTpNt@=XXUmt`uW<|l<_yw*Lb`+;;W7iVb};&vaW1YQ%0ww> zL4_WSnaTSVtNk-Vh1-?Tw-6BaX4j=}#@hh=QZ|##!cx6dgHx!teRtnt?oZC_(*0B1<;3 z?KgNup{Fz9XjQLcQ}5sozY+nd$J=#I){-oNb_Ad$S)BA+>1nKT44}81Qv+lce?f^o z4|7067F&b70|rGQ%KmOSL*w3(Qr;QDfVMyzu8}VRl0-y#nYML0JeK8N_V{qcq=^YJ zqrMAdLI?A=cm=&vp#mo!yHOCpNqv+jCe_Nh<`&Pv6)HVK==w=-RZmzy_Kg(q;%sL4vQQbuw?>GGedOqVco}f| zvN#IE<#R$-@SvS=^`x4D-I|gB#v5UApmpigow}$4(rU{=3!g}bh;vPOVzP#wt&tUS zl3O6tD|q?|{GgCLX>npiX3#^vy}ep}0BC6Jxm=3!IuTx7@kyLKYxp7dpARgV(*j7G zKp??u2)C#;A%o!?;rXm0OV~Bxpuz#9|FNAQi{nc~|3uw#W7WCuak7aLeazC?_21)5 zg|x?WN$tw2M9>3`JTdek^EvKU;f&*wuBDdA9le0!hzzs;)?WTDvLF%?`u*CHTs5}f zg1|IoBC37!r-H#HH+6%|67}eBZwO%izEI!%-;Q(nEGQdNU}_4ve5LOl^~X~`eA*G5`R7@JVt8W2B4 zb!b43eb*v?ZqmJhb99T1fXoN^tVwH3BMH*`8^C8;$y@RNLHh(Z<0Af|X7ZpYvnEun ztQ`-LAcOG)N@|JC|ygb0_js!X)AD|{E>;y z9&qk9$c*q-U=Zs{5-v+*by2xVMu??s$v=m&?7<9^b*^JOCZ?_@FlZ<#TVQY?rE)~F z(#9uQsLYF+*OGXrOEAyCm!J|d)yjvbo)@t9-W@DuDrCW6P*{na#yYkfOkwr>-~zIC z%yO6}mx@6B?pSn86|l`{NF}4^d*g)JDxnBc#3+`b9TFeC#38J8?_$dtLA$Z8FlG?m ztZ*Qf>xwu?Y%K(@!X2mTv`FhPv7-+^+e6q!c`Vy*Hhk1RP&b4`A2b344Dnxpc8F6Y z0|MpaFgZU{VuS1Z|AyuOvY=xlzJGpFwIbLIoJ3OIi^Du)ZaE0#iW=DNUa4G2)QMI% z!ip2c2@i$|x7&D7Qk|dr{f;2f2$x5L8Y1GJvAvVrj>Qi!I~JmMq&uj!LG47iq(`9{ zKX$s=#xTpwp;nBC8qA;!F{n0FqT~%*E71t?$^MgbbMr_uqQx6(uL;a7;KJU7uY3Mw zOkjUw8;hb9u)N7A85>hp?s1m{Kafxem@KjZt*p@Wv18Uywz&IE8fAgehFZ)G%Z$;* zu#62HKU%YfLsda!cS(QJeIJfnrkcAFBEL-w!6y1Hp*JCuZ7WZw{)-o{j!`kbCpNez zZ{Kq5w9qxQI1CWDCyR#@DnPXNPHB8spjx6XXCEun@tPQGdR|BJFo&7&>vWw=H9DDF zxN$l_TH!@zhXAvxL&;+E5=fQcRn^_*vGX(qwMGcqA-qgdj|hQv@J~I12FwNI@z}w{ zBY~K?Ecc33Zm1)XnxHlFvV3cJCw;m`+@9NG8JARxyK%r z?8$(-76ceC+5f_$Op&X@UNf1ZPyy$pZXg(_o-LrOY|zHpo17^IE*~*)zf@t9WVJv< z%X$Nm`Err=TvvT`JN4&;eQR;k^*FF1t7U;;{Q%@oO>ReZL3EHzrbx2gmemr0Op?yvSe?e(35QK}?--$oZ;Hh+?C59bb7e#=Uo0Ac?{F!C;&L z@&d`~t6HJg1R71w|P6dz^DF@B0l&;SFV%kQRoQ z2hu(}+LYgP%YTpC+KH`St!}TuH*1H@7S^j_>E{_;|Q ziRQ}&!@;5iJ@gu}OG#|~OtjE_7{dM}##@To6|mke!k5jIYn>&rnj{gquQ8^Jjv5&G zFv+CL&o}?m55>I+^P|L8P?8btqBxZGKsV;k*PcUgoZ!K^5HSuH z5~_r%d1}c4cT$K|FJR+IJL-9ha8T{7AcMU{P+z)+j9s0~*i5Fvp3yE}AonTSAN)WN zBmQYJkw-=av3PLG66-ZE7a3B;46b%JcOPQJ2bN{hepq7?rU$V<9(cpr_nhut&u#6` zvn5cLq8SXUAL&rGEO=Z*inwHx7o1wpNi8q93V1b<;3CzEXO%SYtoYfeJOqh6JOKnt z7L?glX@k$nHWWH>&!@t`vvcI3@Ffbk^j)XEKHMn~nnBhF<0py9JU(nr5ZPmwR=?Yo zn|H261Eq7x71YCbE-kTSoKAmM#65E?qgoI6K+1Xu3Xdxxh2;I2WbJ_2VCLhJhtLg% z4evpE!y8|X<)LsX<@lMccf@p_SobyyAvR&OB2+ zCt7(!mfjNJVe2!&IT^z(bT7o8+GOCQ$Wl=lbG25zCb0o_SdH{86BU0?FEmI@tIHep z5J@uX;{So4bS|fFsw>LisJ!5Sr${D!)9EQ5<7BLsZu8sOWsCd={JiW~SWdE|FUs;1 zGLyC6-aP>?_>O~ftKgpCUZ&ac5RmoM^&l|0>A(b|Od7gBUC(fHsr2!yN0`eLL4%`O zX_@5`EfN%q3ev3{}DZEn!Eggfcr)Y#q?u zD1#5Yech}n#$4kN0*JFQ@Xx5iw+7{;y({Gz?sIxo2GhX|mxEwQAs?GgA(X_XK~bQq z2vAR^IyKL$?{BsDCe}3d^JH(9K-tL(Vkaiw!`eNLAXM###AYellu^DWrN$|<7UjpP zPJ2LrkwVwyH~e$h@JS*E00jbWNb#_y3X)*<{(pl|E7&IxI7mN(0oau32Tc+y$I5$h z6q*+lDsgO*I`pqf9D?Vv3=xVVo>Y*{K=!#v+xtu_p+|KR9x3u%z~#_}8@DpI(4P8$ z!FN^QS$XAWro`9P+lRZSdnJ=rJrjsrGQd_m!=$OvQd^Qx;WrC#Yb(MX8_XRrQ^}|t zb3aQ9AM1W!Qw5TID}oN}=peSy0vl#5L(0X)7o9L)i>q;qNzfnxLmgUckWpZ@)!8{?I2 zemH|hg}7k3A+t@zT{2ogk8oeIR$7RIkoNSgf@ma|f3AIaZ zOS!Bpv}7PxP(>1L804(JCSnk5-?L0hU~5S|AlV@EXhn&#J(-q5n3% zc1gT5tzRU_vS!is(Ay(156^j``u^eqDpXL2}b)1A*dR6{Ab2U>)vfL6cLA?N*vP6k7Sv$H8KU1=olpH{B zVzAuzFkytQ+MvzE`EhV1U;(l4^h7y3$p4;GPDX)>YXIzA2V>mo{IvUpWS0_T0w(D} z_}`lH%L%bHEKKMQHk3(YOpS&{^zs9fZI+?nf=PMzKs}gl{CZ1xpry18Bp_*k@dP^+ zTSy`+@K``<#907*acE#71=06V(`@9h5Ttq?^0t$l*X%tBif&U;y;6`M$R|CEL8T?O z|GtL1A3xq;I1E!eA4;R~CPu>=Mkr#*4czBMN9@}}YWo01GhZd~Ei!QeQfDpPXy7RxhIfwuHJZ z*OUVIY{UTFacIw=P{Yk>IdW|LCg_{z)m-f5WeA_6lmmGo_78e#Fir8Yf zRf#G=CIHsGBM^UnVu9Cy{vrgGLARGaVTtwnB{e-HEwf_#emcuIuh|vF7B`IyXGrO zj$ZM@z`@&dkCQ@PgU%)z8y@te?upums{43PzLMd~8f<*DN!AN;yX)|LcDzbBE4)g0 z*WD9<*;#s*VjH+wkfGpgXCc~(KbcpSI^cWL8i!PwZOjx(RR9BGd{(iJKcfa^1E&sD zL6nnW8FHBW!I2Qk2p$*t`co^^7SmLMApY8SAMIo>$owk!Ly%W^Stq%M&@bSOEv8albs0)g$y}w1ap)|+vj`uChHCNQJcPLMdLsh_ zk%lZM!f+)~g8;>clSPHl1dWL8uS26A>+}Ez7K_rf*SGy$`$|8)Lm$Y= z3YbTH$=M4B)TuT{)-4bWgzpMrx;At$Q2qr^F?B+)+3#K(obHIlu%Gp-c6Uz?hKeD8 zPRb9{v~8%FOJ~7QPkUbKKq8c?Z94pM4PJ{>Wm%wE1xnZV^I@Iez^KNm*ty=tkv`8_ zIUTshTy7yEEfnX5>q0xUeqx0nr;+91hbu|hVD*8p#ourRB8C=KFzANhwkN$0P%>%Z z*rFMN$*eWX@iJsmiFHjLl>;{vhKlrT`_&fD2JSJDPMoz-bF30#^w9gQmt(^-khPkc z#a-7ap;Q7D1?Wmv+X$hO@A%BnK5SAsjKXMzfQ2FK;wFdlO4&^?6uy1;@%mA_;c54r zsUwgBWChA?Fi#NOgbqLdrf(OTd}Ia58^9mv?d+ep`R@>>!kx(ZA;MV3t1giCp^gnq zClAKgYvmY}$#zJ#v{lJ=vJWdb#&lIt_yuUJ;*esF;-eGgS39ZPc-PtV;str?=K$<* z*&&9=>IF!-B>(SB>qAeeP`IasmDkYR4fyOD*1 zhcV2E4N02*E0vMlg{{1ooqQ%b?+}&89ndZSvQRAvX+q(B2p)1c=`d6bC@lQ&&j@ur zXVEp3#}QbiB!fgyY`#qfR(A9tUYVetY{jQW!-^lK z+D&kRWvJQQkVU`ll>h^DNwTf%Do7eB!r^;FFh$zb@12 zJfvbT!GhWlS{Y)9$;kS}7e9Z`=G?a%kYFT?(QggyL|fG{J8+}^YV1g@j_dwr^;Stj z$PT*>oC9IA66JyL$A5A8W^bA=G3RFN-4ZP@YeY8YGo%U7`kUK#8P$U%WeUK^tu_E z{X-&h4Eq+oN-*URnc!id32%2nFwRRuDrfV`0Xb~0#7dw6A?C)B>+VEyi9CaO=2G2q zYGD@8BZ-EK=t3M>J3LMkxReIdczn1bo1#c0AC6QktQANkfk$A%lASgO0>93TO*Jb; z(up|D2hOP=KE7a<@o+kBI?2v^Lm}v|i~WGx{3UHTmFW3MGP!I-C>P8nn5b=R zH*WYN&S{RE7R4cVL#m^H_na$4-geap%Xv zjt=dfvZ`c@_hKcBVM#;+A#8y=PcTR*B5XveDG#U{BWD?EW=|G!^xy(YJdvUSU$!^m zV@V_j!RkKfM}gp>=z+3j1X8e-k3JJ>p6V9p5%H&rQwAjq|8-j>ima+68fWoSD2dMV z=%ic4v=-i#j(06OOa$f_aq^5{h%DH#xi2^(J)gCN_K__E3MO>7@*Bi&pQ+m@s)2(G z>ZrenC>;@UD!A5!MAmWaW}JYmSi#&yeEnbDF4V5n)X;-=rs{25qU7WQ`JcsW3-vq7 zT+0ID5bmCIEyUQehuhz5?tdVntJp$j2RO0jH9-M|99RP&gGsXyC#E8~nQaCZqhM($ zbtrgV6gvgp3uc1oxtR9jv-_S!R`XX0 z$mKw054@P(!3`Nca%QtszrO3pLnY+nsQV&PShNuFqNEugwVQV-poBRd;BgTet>sG&e4i$#B>^2 zFS(yOgEtndg_CMV_wgzK-Zjj28A84&e|j_Vh)qj|E8%d)l3|2KiA2aVMEr)BOLE^P z#3)d+P)I`HK9|H(_^l9Xw@Y;zJ(l#NF-owCf8b}YdDBV$s|GVYEQhDkE);b5 zBGTiBME2!pa2n=^9}dbT;H6mEO?ga<6+^s=Dx^LSvyjleChn9+Azm9D{+m7CzjQkG z(%W^_VA)e3L#6=7(O*%g7LMPygGKrcoP`04cQQzDFzr1zC$~GEZiSN?KW6eK0!34n zAyj#?>TnEaH#0)7Tqw&Ds1PhMq5Tj6h}oe$Q-I@ZQLX$+QsbXbH}(x#&T=4*4jaPl zlMohLxS9#0m1qZ&Q4MYF-%`ZCB4cv4@LZ_kU}qzdtgsCy1wfJ#OhIT|$Hf5Os61st zM+l?Bn%QwiK%E?a_YVZAk8H_JOI8Pg8Hpv5-}6c=y zYPY!-CTY8d0|Vaf3it{nbKcLyb#l_eyfr^b$wo3ra35YpAN{I_@soBos}4HnEx1cc zpz6?0)Ki%YEt#37J^K3b;iuL1`s06hH&imHe_+j2LBxT*f*(oVCKdlB9}M{=a0l<> zUuImzBYIJ@nYqbO!2`mQj+6y6_SmDGOJf?#@UH<8Ljez|7a-PoY{zVfXqxBfcjcY9 z{$+%^C2lBsfXFRU16h2^=IL0XWkxX^#Z&P6Ft=`@HI0p&Mzz#Mf@%pNVo#)N}SPwf~ful?_+{Fy7$> zA&xHX3p*eT;T>3L&`ziDLpCMD`jl0sijg?O;{y{&_?x>C6uz^aCAFC3S9Gc)H${;Q zq*`#HN}VvVO&Ogb57$~KNX}wSA=bmSQJ4{wBYOuzonkZzJC4s<$fb$ijxxm!|G!d| z-q~xD90Q?wSmm%Fir8wrHf>*ch#t8GIclQwr{c~2g72Z~V7(Q=hLWf8X}1n2mGtyW z;W>-J;CHjhgrh`8q>+s@2tn*wWtKFKxE-lQFq4qIuc#H?```dxYIJ9)G!b)yp9Ga4 zjc<7~jF!A0gVL}IC(l0{GmQ%@Q6nZ4XIIDZsB2WOAyEZY_?KYfp?+wCEEAWy;&oO3zr=rGTBdpo91Qb<# z!0Nh>`SPbu8xz;jGf-A#48P#Lv6AnPM+jgNkXRGeVvntx>yO5))l+!4e~`7Fv70oedU@ zsBxadwMw=#w4;v-HBUg6q5Gu|WLjirmB6D=I-tOu&*5ZGwmx6651@SS0zNPyJpk>6-|Tl^ZI4y7pfxrJ;mUuM}>1z@cex*phrkdP#wVlWCHvAq?J zNq88woZMJe#E=Ft$!rPJ4(4{lZi-*vcc33a-sk&oPzHW`_wecPqh<{y>WsPjw^Z2z z$dB!wG)f2b&$@!hWU&EV2Sv&LdIlnXxS)CQ`uEK(4Xb(g8f>N+$Iw zDri-h6x1jD!f69+ln6$q;c0!551RQz)JDy*xbX17nd47cPTl0DaQq-F?zB{NPz`V} zJvflXlknSY;Z zT!cD8Xlk*stGSP}@|A2c1}7T==U3rg>oAN|6Sm4s`}a zBOjQo18_tFfVT1`RY1vizP`TCi=Ut-+Rj9FX3sQObT9(oT8Cm&cxr3jJ2^nlj|CT- z+q*}_6|Y!3?_mS?8ahy69Y7Tr=qXr=LLRn-?5S^}JkY;c~rkXjpb0o(07ZYT>6D7#cjjhb%1L@Wx`%3GhQtu4 zabokE(497oIC*a7WD;%~s7`5<0A(K1CTZ2Qruv}@4u%-4R@;%*l=v@V2tFo$PMKky zEr0D+BVQC2ickYY0Dy2%0J%VF6N4^3=N_;2F7Bya)6XMJ>`2TIC1Y}Gk|Lqia1Osm zn2(~=#~5D*QEPATYtD}KpGAxF-N$?T?=hAmX>z_gII85C7b{Ns5-DaW!B4kkb(p#i z-mv0Lpvz>vefXs_=HxxfK^>01A5}~QT{yLNpw{9$v??z1-3vi67-Hi5go`Sy)EsrS z(AB@Rf@PlRfg6oQ1D^(=IH=yk5I)~iCGdz%K(>Yq0{KsGCrHkQQBNy0WHBG4_Wq6? zexW%C4i-;>;sd-c7&iQMnw3DE(!8Qpcbq^iB$l|LP98hrdHdr;Crx=!Hle^ zxrgEh&{upgl#pZakDg=r$ly`DV?(}p@r_FYYl*R#Dvk_R9gBgZw;}mO3HiFO`5{@i zpGhfJv(NCRi8m0jiY=zV1G_b*0J5>lYYHGszbe^}1MpzNin_*iKrOIBgpWdkF8!3_ zim`rZ$r04fSQEObF()gcCes!^6JpRWvkk{Fr8Ui#+(7!R+znBDFr*M6b;WvJHXEufi`*d<8Ah2@(Njhl}-&sFefp zODzGRa`s~~){_#Z`P2ypDVk=;xDo7|KKtB-JJOC)@&u=1Mj>EB;52@3!e6bG!x9SS zBeW4eaKWStcvxSi;=b#BTekgtKTUYxcb{uy(SLJ zKLBp-psL{Kt^UJS#w!6sw1Emr+DlxpWLgE6u=U=4r>v+>`VprJxe|gH4P-POE_XT! z#|~#bi&4TGmz;cH2ykliZ992(4xk<*o<{g5_kz?DiEG-yykD_7;Dxyh6lvH8<}=H;9PjM)bN`}`ad zD~0hC-Kc^j`D7#*us@@?zb8ox8wqX!)e^%SpKpT@DTk!H2cW&CmOu2|mUr||BGP`3 zBZpEeqRI>EJJ#6>57Q<;y)f>lwJ4WHB6?xdHbmK0unEU@{}P=MbhqH6MB=7rKf(hv zE@yYPJUAKX$o9h17TydY(U*#hD#&zPCNr?Q4dG5n%z{pWpnQpk8D1S_Z+(*-1W@0Y ze(M-MP3$Uv;#8p4DvhwkBE1|p>7-g4Ik>)QJJ6d{$^u8Ru?T?Ua6`{H1aAnAjFkG5 zu%UHdEgkm`<=Xg!;(`#Tc}zCbK^>Jo=A6<`Yd@0TG(ukmNX z>4|=sfq_bY10Z@qp(EmUvF|frXcC4Xlx}d*LiiSdFD}d$WGTL0c(6&TwKzv&Nt{Ai zKk;!COCApNwAcDKVF~DV(&dOsg58vCKM)Qe34}AkGzKZ}*=aQQ*yi#`z8L{;2>crv zB?U}R>B?g5jxrP9-;!tsM2IMa-=>&*i%lk8nihud@ZjVG&EZ~-^`UJK3G>zM%2J+) zk)!TNYOdWP6dm9B{6n0BqlE22LTXs?p`FtPA4&O-#o;8(28UaW<1D9`jmqT>#o~S# z1VNyua?PH%gXCcEgcHaRCa(n-nxv>bJa2lJ9 zrWJ(p$gP(nP3{!?dluV3(Q&5QHf@GZXh)<4w-s7fENj)sam~e#_V`YC)h*GG_Y+Z+ z*Cvi~TzX|MqDVFuuFJLZpg4jXAJ|E;(Sd0M4C>=iJjK3kL?L3{FVNj44qV6fhiH;c z%;S>F3+{ISuOcY`BH&%qs=h3QW3?Ha5enlVzD*Sv9xGG{i`dkER$&nZcEFcNMsY3f{P+o1(i)*uz%8_dN$Sz%;=4@gzx&EDqB_(fJt!8L`REN zhdN^T!o&DA~3ln)RMiETMA3MubS8}z6DR_7F8^%WJ$>I+^`-gtbC{9L4+Ce2{ubEJ?Ff@#M(F z%QC=XwXFPwH^O=WLnaJy#5*Yd3f~YyXZ{jHTEBQPVZS+S{Ng+R?36&qf%WB+d`3xs^$r6nce#NB20~gyIo>egC)x#ttWcozdtoA?{*EmwH<5s zcg+kSeQF;oNWXyEhX?$#IQO#3j4{Ux$MS_mjn%(EY=ELkst=PsxyKu%0>U4>165@x zrMSHaxKK8pJYYFp4B{&yKLOA*xX5Xq$ce(eCSXB10PZ$PTj6R#YeDLCNPi#1?$T4l z3^D!27`KZRe)*y&F}VhD2*fEiJ`Bg75t0#E5DpNvp%p=lba2ubG(tr&(0O&Fym0#T@Bqepwy?DBd!aiSMlw4vT<||+Fu-etj-+)^XX8`TbMg79 zW%7F^2{&qll?4f1m~7!hvqrv$ZBhD8$`l|lS{2lBkt|BL*`>KIBA3Q(D6Ip#aAj71om_Z^3)vCsQ& z*d~b8G*uwL;2I)j!6zSku%xE(aaVnP{kHiC4vHtQZo1pI#@vVkGmPvIO(R4P|5Z9( z3Pc}K2%erSMA|JYpq0c>AvU}&*l=qU<)_ zn+}3K)oX|Av{uvc1T)nLj@Cjz%n4~Kq*sV-bDp{9ogySGq!EzTL*4)EzP6pSuNEz* z*Iv!v@;+SAHX{ZiA;=DNyuB}|L5Zkl-X5|(Ov5V5+Y(}+Nfb=U$BEIKn=dx$tAe@7 z9JllY{X3Svk+19E76HftTm=>V;hQ}u5<-s?XK(t@?N__yPC}TD%}kgS#Wn)`14;_m%qh{t z9-+1(U6M0O1I_K~_v^Qu%ylW9HdTtao4^4*Hy7*2hYo+@7W9&+9>m#6y!R7uAFR*6 z^MBWn0Zkbqi2P09a^2LJEiAmYD*%Irj@df-Yv5`*lmH!-Lki;Jxcb0^>NG$0{5pum zT`yidbiXT{`TI1~|7^=TjS(y=D#t;x3E{bpo$$?qkr=ADeESd9m3Pi!Z2MJQf!JU6 zC8sPCPi-GcdR#BD?ci!;SrQG)7LLumqEv(D2!=}JzNPZ3Tfi5T7_MyKc6or~8;r79 zjbbQ&%~-Qbe)v^>7_+lea33XBeNRwBmN-DMa2`x*ipQAWesS}6x4$1bwDx0Vh$Al1 zhpT`hQ*;|%Q>6~126~b-e`+ocp#ry)OO8&+swM=!{ls{QrK>Z-T%W^Hm|B_ox8r$_B_*C>r-r>0k&bp;Mk$GM z@c}cU{*`~Q*HW{R#myOu);j_=5D6tKX)bwo?XbbQVs3aHz+g3OOB~v1L)a1fB~$z- zOE;wp5vD0Tge~zS)VHQBU|o*HU;@BGfpzsLGB!Atx|{8iKW?v$#iir8gj;g8t>GU! z(Mr2h81WwN7tS;4HM#p2OUR-)+QKOOXN9BjX@HM$AV7K#gkxL=Dnr@Bq_}}KD(C?Z zsw)*&5=ZJV1;W!QT6!;IC)v<++1jBkd4L{?B(lJ;!+=cW(Ei@2GK2W0(!-?h36|y= z`1XDadXE~>q_fY8qQF>xfhaIYO2A2wgyL|42lIgmjETWs34a_b?hJqZl_xmwY~@zF zckmI&H^-+W6~NAeK^1|ZlLJ2$OKIWl0bl_?6+xi*$6t^w_ct-9MXh9GJQ5eUca{sSP*iRZF}3WU5CWO@|805`XuosM!VwKbD~ zpAETUtTmKP5rl+qEjE7|_4B84IzT*!i9$^n%x`3E{By&Q3BOwX(ivoWKuDlqL{6d; zW$0>i{rD*)lZhgCTW|n9!TXZxu)$6kl0;eYMQa0nIDaq zJ5@&L?oo1q5$z98(x;<&^zQm*f*ZC?ePQ-=Xyw(zorHvSy6gXG`V@R?Q+2>-I;_Un z7qd184X510rB|fRsT=^CK_%DP6skM0cA@)rx1Ub3E!nd=*O3w>!htilmHL){y+3X; zuoX2W6D3$o8DnA#Lyv$7V&Z6at_jo@$>FVacQ zPqN;4iWQvvKAXrM^ei(>!IaeHZEY`Cf$#D??uaN{ra6LBmS6&dmuWnM(AD9wA zdB89L;f%5p!^i1hH-|Ws2yopoMX20@CBk6@AA~YnI*upAu0s6K)lSKvwj2JED@T!lcfWgMKPV)^uUW(N0o^C9^t4sJh zyR;7CnU=eJe1Kr)VRcQpHNi#wVznkyZfS*XiS0+JSP7eamtES|agi%M-4#s>u81zD z&-C5a@6&QQ(hrM8XmE7X(FpSf=rYyPfvZ=7VhXMP5?j zgFYh%8KKN{1{`&mm3sux*}~+puezI^)(s?naOI+71eXRxH{O76H;+;js_q%9c_^UD z*P8;k3Pf?6I{dy*o0%emjq!~vmDhxaZqsAgerJ;S%aBQ74Xav+gViF*6)N0>6uS+_ zY8hYR!25kWXV4GVZ62--6wIQ7hPXoht`c$#Sdw=+6chUV*f4vv$;t>1-{F55 zb42>L!%)-`hD=_!T?1pll!bl1M@A@&kX|%7?(^?&DbBVrh4~K-PPpH4YKMS`4L9I; zD_!5!K|?bQTR}}vtO8Yr4si+?eeA&@=C>bhieamLHbr=58p0h7c_n7T8)=gnIF(;X zN6L2p;V)lAI){P`6$V_f(7=G0_D-ZU&j%^VgEvplymfT3_3)0Y493 zdAr(dDHlhf(pT^EG2UCqs`01^E+9iRv|}5NgQwkIe?stv>hS#gdt~zN9^R8t{TH`} z41RRrsx{{hz9Kht=tGuyB57REhqQ~y+}N+B0Rjd6{PyDrj(;1G{Ewy^g-8*k?f{E}8{vm~q3Nu!~3B)?<-Ep2Y$N52lAw6Y>xUh7fF27(W6i zmPA0%8bX4*7TvBlI;|Z4{1E-~fgrFhP*=O?Meq)|J$$2ICsh0%ZUMVW2AMmXR}5Gp zteRn28L6_<0;o1wXe91cvlCjk^D&9Af;^NEVyI?jO@Q5mNM^NckxeCh82WU8j|sNI zVHal?J4o{-jOR?-7SiOjD;Kzbs}A@_RUucKBX-~&vd_3E&jsOth#?)!phJgmgb)(o zK?W#_+#!-L$<0Cc$1FqZNd~AowOPbExb92j;g-^gv4>6_DG4_=k8|+Cak_*gjCTXe zvd2T9mx8OY_}wq%fp=VsTMK&-!ZE%K8pL*>!V$e1M0W7lLw^=2w(9_KsfGrp;P9n! z?axto%~XcXvmn4ApP@sal?zB|smk(kTBNR5d=G|%*YW&=Knq>FC=>SlZAN|+8Q>M+ ztp=Xi(4(}VKS^vz{sb7@1>D#3W>CCS zh`g;fD7*DV5!$ra>Au^3bw@1>YlPzD9Qz%8qjkT=4z#(b66;32IGV?C>{tAiaK~r( z-mC54PF<}OmLR^GFDugHFk%hwxhQhP!wsY+s0~4T1~M;p@~9mrzF(QSOWV=6-2in2 z5eIJq#(fQq3929VtrOR_yrJ-9SF^RY(4yBcO6X4{;w(zO*ucR~d4gEAQ3VJyW*1Ir ztOFThAy&WXSXD2%!+`vPZMD@ z5ZbtNIpL@MbSB3B$%%r!V9;-cA9%2V$-I9 z65CZjZXQ=okQ2iskQ``91tb)b*%TzTt2%Gs0hu(8r&JTJ<=DE-iZ>tbeqDWvNYgwA z_Jfj5cLhfL8Y2s+AMUYYvIz5`d75zwP)dmbVxJe>etyOEyR%ky(=Xj-qR#+XZ35

LMTvZGoW^S_&phP8_kntac1`qRkHAR$KSyjZiMSPcGH4?CNEw2j7iyW&)=0p_#@$+}pI9B<3^`|Ot|IU59dh>+u@FIXeV+rj@dI-x}yuUI|# zZVSi)0^XKYzJ$aTVZ^Yg9B`u}GBGIl1fX{vQA?|K;>!JrbLpQ?@7LYKahZX31>Y2w z3M2~Dj;3E20(ZLqvON{K;{J~4FAU2J6HAVPLf=zX8&WQ~wv%Q~C+|}98-^NcOl5-`b=G#jK%o(wYbrPKH{183GzFby{!`w7Yw<*2?1X0UI)|bX+vxm~Y|bAz^JJ zyDva`pBYZU`f+K)ws(3?CP+#s|5IW^3%Gp1X+9EF{h zfDVap=u!o`AJ5cysq9B?wYYY7R)5T+H5s6FgL>YEM8o*7&%GDgEHks?e5#KKVE`6} zP*%kUoY%3XznH*aC<|f*E?^jDpz%RsX9E9}#R-#5lZ3{?iBIg;kA53rG+;v3jWR@* z3AT8@20RZ@8g&}!kWCL$OU2|O|5rBQqJtC-GlJ(WB2DDbs0g#!2;dc4fpqX4y|Wyk zs?{v*oSp#wF|#%$1fPAsh47`=pnMe?-@lv&Oow~jc7YgoV3ZAlyZ{AEu*ys|g3H#! z)B?fQGOf!JaDx$50TLs<577d4BggmQ6InU39@>tAhgx?b=L*{33^?4=)W{LKAVyt5 zt9|g!(lP|mx`QsUBa^%$Jp;jA{LUoOF%7Z71(Xh;4f7<#He4HEH>HZV*-&8HLW^eo z_<})wKDCgFCz2-=MfH%0hgT##Mp$nzUi?D+YTD-$lU~6^1-~fJ6mUmFgNctn9gHI> z7TqGY7aU6FccU{ng0U(pZYFFggz!R-5k4CgQHMOv-ZUS6!GS02Yu+IygvAHJc=bj9 zj}CHKKr;*I1F1#;!l4sdl_O@xSoWFgdtyW&ZXV%aV!SB;BtOc4cj&5>alAi!c(8X9 zhl%z{0}*U1q5f5gKxn^B9e0e3F*Z6ouhU@Y^L=9O1oZ!?3kMm89TV1+dxm@VL$Z)8 z{xq%VsF`;u1oB;gP{p>~QJhHiUTCxSar3Cd;Q<@Mz!ydwmSiS*5jE1AY)Rl>uZu65 zI1DH3e+PK0CxiW;nM)b$|1GhL<#r2-m?$>fGsD4RcA(zQ$^Y)tj>@!~tB1Qgb!ZDI z5tS^UMN2rB!ZX&P>FM9xcinHw+GX{t@RM$CBLph+ceGV67KG~nM|S8H3~fC>FpS#? z`6~7s(Fb6#$#*DgS=^yqS^UU9SP0k@SNeDEqX!F+@%ivKA$Lk0%nEptjX@Y-n4top zN_4IQktp%(AS-`G6_(CufLp?N$_uQ7f}0LyA-k*AXbQ^0wkVlb(#WTF8itp^U@WTuvGbFu231Io!VwU0tveNmhCsDa7-OGp}>a)W2UkDMhj;;7K zVLTSuf$``^ry{2DlLC0T}_hg~Yn`C;%qxu{6d%oZjJH|8B0F z0-WaxWCevj{)1jrhyO_DDHmt}iLQ|2fCw@jvk^;H`++o9)A9=c!j*TlgA^7StJvel z)_-+b6BFm5fQ8To(e?~CV)DjQc#rW*<*@sa{T$1l zUW0eHG2d5jKpb=hAvbb|*y}^JEVvxikdOBLsB zq*2mT@0!_ZKS=ZI^wQ*y)MDwx3%sX~v4UYL$HEy$UqCRT@`Fbzy`O1ck_b-|Lpxb! zfX;{R{{bQ4add0Jkl~W%0BYmok$icsa@uZ9g?C;*9vAm>NnOZf&|D`IO;EolXEF}c zrArhxP)e+;8ZEWWqyZB{bWpZeU`hcPG8u}SK(EJNwSb3Q+WIAm8OSH?%MVgd3u8}@ ztRa=0eX*&82A>KnKacg_~K)tWtW_!mzc`0drz z)BC&a<2B(-av`g%+rW!ZkP7YdWZ2|IKTBHIj9Ho#a~6PKG+io!SfR;aJt6}KKQCaS zmLDvr_K>Nl=2sz&tft2_hg;(uki@+H(#9lUYX~%h#Q@Mq;j`>z# z;A?n5fG@2U@!7we?*lYu1q~qj<13uUWOxiIT8RFt)P+iqH&19B+&%(SGDG-Uz%sl< z$?ud%Zo$}=4uHbFkrJ35JQ{b#Y>|?ibkr9sr_8P%$Vm|o ztNJC3mJP}xP$?ztaJ45v)WZs+Y^*RUxA5t(HHf(@QtYj0b<9-SWcJy77V);T_*7Jh zscx=7{jTBVPP=#N04Rw@80?XtIJnkk*)72M#mA%1W6LwZNjVM~)J?wuJVOqe3N%)FsBP`F(eqsLxCJXa%~kGwwvbI-bx~07@q}&<{%YGw#A2o?y&VL);Gbo-4Ry( zQGZb1lsGn%Un5LMHgTsEy!V++9Tj9xt zc8;8#vxalNl*JsuAuGY?u6FOPd);<8s32)kk7Pgzo+L{oK@s2@2}N+rb`9!jYe;BY zx>U4{kxSUOO%Oot!G7_w>6m~8sfQtpnBNi_MH2nfeV*0#ceoLF6>Rzeb3zc7^S*}T z0q{JWY~JbAG2id>LmfY3Gu{<>R7lmHJ-Tvqt7sWZ}X;b?mymV|3mmP(iUvoTsQ2e~nSZzk?BGFjkdBkj7OGk}R>lZBsTN5USy zj6x3L^Jc-x*AlNXRcT=n0 z3wT4g18M;>_Dfvjo;!KczD%dZybr0v8N0@eAp6O!pcgL=tsv?_DX@JfGsynhZ9|ql zhYOdv#8N!8v4$Fi;wTY!ik5QKmDUwQWt?E;Y_+X`)E3c+mTZ9vleU0!(p zj(9}K-a(ucDd1qGpctj6V5oq&EN#O4NDR5hcX!)e?$*i}pb^~Orl`A>R@IfLi!`7F z8>#w5GXeV+6(H-8XGvya8w0&e9@1Px`xXt6?BUG~&Ny}o_@!9#XXG+}vQXT#Ch(if z$!u)uB=oHYk@nJ8t+kq0I$ZT<4hKQgUwmU3RMkS&RA*!`d*G8U|4 zg`JV)>$}?>Yl8I#hKB_#QWNZ{_~4~Zz`BP83JgeINKGT{c_u&(`<>wb0i1>^7D}^8 z1X7|?=HaOn#6JX0f3$?t;h8*pZGfwT(FAsw2C_#^CEqzAK=vGiWl+#=>1D^9^aS&$ z+h3gCi-ky=E?35At^TjuTEG>?A}(P>;JO+BM|hLX!k1WJ03o5JUjWvE3v)C14qdqw z))eq376audz`dyi0MksA-aj~{qPP61FrPopWKi8!i^VTa&@Y`Jr5-6*c+HP5aU@g` zqmA0&itApGlMEn$_&kzo*g3e^{$efPnJ7VNQ36_duf&q+XfM!Ch3Jp6Bo0pG-=4KU z_1(~X6XR@=58rg~mHYG0_b-v+%c0M})8{(J>KOZRdMCr*j_+Uz94HOW9vIv*1U@#L zMbNikdnD^pi2p;bgeCVCpGnLRqCWr#kU&x2cyaeAtTPD4!&SH1NGtLJA`yh#d+M7c z7g5SSvOZ>c61Fg)RU-8>k(4~dWu;k_mjE0tshm*js+{1~w#22~4-OTK)f3Bx&Aby zlIOvk+;t-EJYvVqo^Mb)pp%dz)w?E$8E5bLi?nJWCoyC_IN~g{lj_b)<4M=I#AMPV z*upmYou3#HH(_i?V%T9IF&scI#f?R2Dxq~kL^kz7mpO3_)|6&Gy~oqJek&=3Mf#4@ zrZq3kUsb0qLej))6YILG*& z#z#E#(B}0S@|rp$4@&}}SEADB9apAS69Sf*>Z1{>-=ZtDcZlFYgTDYk3tHm$ED!W~ z2H^`abMi;Ti)$`e5P7kI*1K(!_spGl`0JO|>R}DTy$=juE_3=F7x?2p-;=yO?T=$E zH5@1kE5l|V+ILGi*vqir17tVS1}|p@f(nEKq{@=2)cqdKkO+VuMqIpD;@tOmPT>#> zVFX_R^TqK;xOdG3)LCi^G0;AByX)-}Kx^`I$C?a_&4nGsHsAAQ*UGxbI(+U^+lmhM zr&HD@t7%CQy9)esia)vB{1d{J?#=qO9aj}W2*3j>Hvvn_pN_it=2>FqfPztB+ET4h z0Xzxsv@;c?D|Qc*mH6uq3McXgm`l&zc<|*>T)hOBkQK;^BzwZZpB7W$V=H(Y;B)EV z=HNmPzjoAl62dSqzkUPb=08?O@$Lkhp)Ss@Y#J5oV6mkvhN93Mg+$wrt&wYGDTRa?aZ3!OUaey59#_WbL}b!>3ZL7)LU3$Hkx%4Y9U zH|OWtOGe_zl{7t*=FO9I4YJ`{jL;6eJL49565_tYvBM8C5MMt6x4b|qG@Gx&hqC}0 z;}tc(U~l8APKGA-I8}-Y5;yqcGr|J6OyleZy=IlUNjB>T{qgti({Kda2M5V_a`r+t zAl3+HyLnBMR!ANL!^~ zQLNyO56}6wo1Eqgi?F{D18C*cpJx{wwJcz(2%}JmMOBt}X=pmgsJltIXK1_c63RDH zjFjrM*?A$zzgCSf$N?DcQ0|W3?9rM(a-lF!pi(o;yj9*XJcm2_NSzP^iFYenUXtPQ zLI2_@fNTX8fYLJ1q5y*9FPD}Ga4f!+5@TeBFItVa=Ty(ru zKz3B-vZhtF|bLw_b}OqNks$(9o9*PO2MulX4( z`Ka{5o{StwvUZW-N{|d_pl7y4^SO58fc#jatHUB8^hQyBY}Hp3x8hJ2(KMtEfZ4#B z4ahUR+lxi;^GX^V&-P>OBcpy1bvNQt`fivB#CJ&Ydprtf@2h_j2 z8j+~5{x+)xad5PCIub}eP6^&W9EGnx?MV3?S*rW#J{Y|jBl1Wau!hi|S))fl8B26R zm;d1Zt{1u_7FEMVgJ2s_(AXdA#A)U6;r?Z7JBeVo1c?u`cTSxQ%&Xpu;lNAKPSCoF zPnmea)8>)fBZSJTH4KEx8?eocD^4c0y0Mv~E9w7F-u_jnR zeCx@B3^$hoQU$#zwBi&($rW5Gp_XL(T?E95zB(ih8H9ak7GaK0no(p>rpK_8w;?Dl zGHST7sCg^c`^j8Qj6~FCKzsd`<*At%ifkx31k^&_LCKqb<9$D^!bSQ!Jsk(b*?@<- zw`a)sAU_~QfwVBVe8||6A)3W?y0tY&KEK#jE94ZQ+yGMAO&a1}x|q#>EXi&_T9i~M zG!&1))06b=0syjhkQ5HfyPj?FI4Fhk50s!9(NiF;7<=b!odj#eAp2^wQF#CL z(|a@fVY1Ls2YaA|nhUsApxW~uR!MAHej~eMfU*1?oy~NsBsTB9Awem~qQsPeouq`E zAbh>K`<{%2;jU9$?<$&0pJPdu0p(K3jVc(`b*4Nq=Cin_T2c@IU76AC7j6L$N z)jJ4M?9&;|`UG3m9^xs%tV9iPY{$NggZvoNMm(1bn2*Rx;>i`1N`$AsK94m2o7#L8##NL0|%!EdjB7r7@_ z*=d8}^xtYzl6EO;LVW8rsD`~)9}O#7d29$R!iWMn4VMWarFFOV&WEhgxTqdCglAp? z{dvz3bhr#I3CqO!1zb;oMNJBlipuyxH(dd*Q4jHv@Z`s;wpxgy4Dw92?%cae^)0(OQY6 zIEb=ZrAx$Tej8#lSte`iPC4BR=(JZ-n-B{$VJqk8gqQECPUd?d89o$UNF8=5)_*B;pQ|g4Xc{h&X;k!0ny3QRPX)J z)ZJc@_W%W_dPNryrd2FP%4dM)k*q0Vt97ahYsu1mp}L=EPj$2I;yE0XoxC|sZbB5# z-h#^>$_`?}IafYlq5jV3lpecFgl1%0g8jeiO;y~ zR*KDR5I+tNXNOqR^5vG%&r2oBb`S*JT-`t2eln08ZwF*UM?kWuULBJWhaDY@u_H2u zW~y0$dG)Y4Avd&y1R*|<;6YF3Q3ktg@Y=b(a?)G~S;I;~7TPz{c(mJ2zpTv}Tdy}p zLMY6a*jBOiy#p{DDSP3!*{M&%aN`k_uvIEGqB|>HAVo>8gWW@LfpW(1h3dmd^OMl* zu)`|Ck#HqImaquF9YBeSqd!j?b3Z<#R5qKVq^2^19>oTGf+)C{V)ST90gNQLV901n z*{=)l_@fk`mjYD|DL(Cph#-}!0xKt>-vwQSo5j9A77SoVgs=;9Z^g>KXAdtGTN~g3 zm2_2*%ziLaMU~>5NI^YT8@+?>v@d$HOfY|kH)`^sgqXl$j@!CJrtj`X88jG3P{4!! z4(oZp#gc}v?~w9TzM$}f{~g8fq^x1SrUbc%NZNN;5^OT#?De}Rp87E1Hg~gb){;UO zu*ax?Kbbfuu`Fved>2Hhpbo(J8bsNod6Xdn7S@V)8A-eJfua7Kc=AMdF4jc?8>k_u zYD)SqeJ$_5U$=vSdGdt#iNLK*j~B)b02|7o5PrrcC-H=fKYm2G)Y?yqN>OAa^+6cs zHj15g6h??W&${8))%;0WbE9*sOM;-xadyTBPJ`IeEYY^WZ)gaA=9I2eeK`!Xdu91T zP<>mqK~MV~_4QhI__yR&d7OA2MEb*X>1Y=q6S~H-aG|^{o6<_}q3#u{QH5W!x19IXTK74{I+axfRH#1ommS}Xz?bX1?#;$t-1bMX)T8v~3X zI+&+}fdK0)wW*Xz%FpdvU&^rpX%3ETbAGP)UGY5pN@C_p8LUA*QF@SUQ40m_kphqi zm(?k}tutc`8VNMTZQYkx$V6GYL(?L6v|F+`UOKM>o2RxRk#4A7IPip7Oc-CNTOQxXPFKNW-B- zrL?``>>6#Tw&qZ6*DcZoF#p&QbUK)X8u;f`Q#jkH2nz`&MDS6#%#T-YL|I@}O8iLZ z)-hC?V_LDs__1WE8$(SiO$scUZ2>syvhT?=HT_R4ZOy;P>1T0A-+bU-ew)knOy-P5;AY&2n5rw{u=HlaO%bF$_OgaONOZxE@S9!Ah-A5ckA!- zV*M)k-@xKTozd7}DBekCjv5h|i*FxiQcAOSx$2Cm(85$QRxj@-_>&WN#3RsWfJgpXpj(IwTA^ z(dfN`b5OJqqtb2L!0Qs;XpYIAdl5k1CHd-VK}eX^Q3^oxWFlMa-om3W#IPh4M*@zFNDakOcuAFJX%)|=ddgrJ!H_>v zr98W-8d4sd-b7`3*xn~=WDuc@75&qicq@ATF)$MiMl*9^$Y$C4ELrH{AYS1<&$%k$ zbRRbfy!(WXZ0`>Cd4PYl#xrBIcS{i9vK{ej`AZt?D8vDci|eO=c4$z0U^w1KGQKE^ zRP;ndxZlBT<&^7rC&Gmj!y;73OQ~Q~WK5TdA6iGlLU_Ro^l_;$>qI#fR_A|I2|(4N zNC$%t&P@(XVlq!jLL8j5LtAdHcS?6IIa<0EtQZn}ijTP=9L(Xe`^XBteJd(=Ra$5Y znLTb+T#AajFT5+Ru{p2jn7eB!2CjLQ8D!7kq8d07D?TIX{$G<_7Cj5pE*VbO0?}lD z|72CV(NR5okeN~a^x+3(E<9%QbQ??$wz!m@NRPJ^_r!tmc(Jzm;gWntv`*+3A}*MS zfGCLS+fMvqbbD|CV?Fc`dlUa!q!Vz$+eA0?;o*}qCl1w8umXiwQ^j2O^*D+bm|khd zhXnynE@w3W6p?aDXewawD!}&0z(($LR zxL+n!k%_gnp9!bn(z3m41g+r{90z+iNK+6j<_Lu5Lv9WwmJB_If{STM1!q`HHbC>$ zrN}^n+Gku)=~|)zjg8*J{5SX7=y%6tX>kZ0u&9PM96A0R4a9^vm@5vhl^z5p7IcOprCKO`4I=pzhSTaS-1*F4RKwvUki09)& zX3+lu)mVpca4-zKR2bt(;gMg54h5ZxFlYB4CmeL3;{Z9;96F#1 zW8*XBsBSO%nUL7SeqLM>G#k92HAryy?zy`xb83s=FV-X=9ZwWD2mrB>AOnWzg5!k> z*JM}DLEr`fq#-yN?jp2?psFb`RF*j^Woa`w#m^$a96@k+uMj-~XP{;R>U?jsPOW(h z@a`w@UuH9hx?TNe^7n<}L6n3W^GAFithgsU<{r2|Ay)pW%WaH`KRY~?o^mTFPS*&w zLDeq!U0Cv79yx<=8gAY<51$BKP8Hj%U8N$~vD^cYU6Jo38A}0VXxGk%V>bc-u+NLb zhTH#q$n{%UG=%nItX4777;)u4U);{$e~~?r<%URuGEP+)d^0gEcn;y=>mYWG-yHJX zcA!dilXW4ws;}dZ@(7hq`#=i?yGd^Ppe$kXcFW=mtmM#W3Biv&RD%^ zs4Zr0;nEPPCg<&DK_PHDb>L`~SS8h~KT-;io?{IR?xreGFeJ1w-ngfrB_o0uBvnpwP(DIXwyR(|pb#iqU=ah> ze(TilSWK8bP$f4DeCgBuZY@@rl(t^|UYzYAL~5uX!8zY72_2?Aya-wyK+fxBi!q6f z#!Z@0IqL?2E%?)=7R0MMDkO07-#%DEx+N0}OA1mGl&r*-w6Y*`h->=lVb@}juJ06X zrGD3b{3jvJ5dB(1S_HlxEw}~9x5+o*cC0=%4(u6%4}SL@BnJr)Pfx-j)bUiVh0a{A zJ*4zcVo*ev*t3)SNQH@%A)^bS8o^07+#1tun^iCQXLyxWcxQ*|Pt+Gv2Mu(cyeJ}- z$?BiI*#fvbR~gW~oUGkD@u`thCGQRro1Kk)<*lUA_hEpO^CPuDQlDa~z;t$*t$-@E z6l9Z-CjnUcyW7O{*_VGhd~XUye*LumYPW+TL=)uQ@&>+r!nK0CDmrEq**>jFZ0dIz zf`S4-4lP6>3Sy(78-ed29M7gvXc>F8{XOUQk$QdWPb!zL-#5ie7J@m1qQc>&kQ`HO z(N~}`NSB0{ekrmWxu~B{c4OhTh$B+n_?i?=UUIx|LqE+5K2~a$nGtPh%N^7;re(wj z^Ds;PiF>!3Ad6Yyq44B>4pt+WM2 zyfC4@MhNyF9{MK(z_vz6Lm`X^b_o3!0vVynuzbIM#qEFqgEf5VLT0-I2LQlJ^#W2Q z-ePoY!!0rA3>c?^ZgX7(11{q5n=Wy(C!9~5K9uHfx{ftW-rPH62XmS$%y3On=*ETA z!E@tRzfNNmxbTqx94e@oK7Be^wOrjQ^+-69BDiYBHX_RrM`MzEwRIJRwqD=gM8MNg zUZCj+JX3Y+>`4ewdIysok@T)dGS-JnC*g=&XbprHV1=A{xFm~32kQVKgk*T;M2xqKwv*7fbeU`$epGzI_WJ4FT1W$vE|cnnv>pgEiAls4 z{EbjvoVvXJIK1vlZ{g(@1|xvc&9>b%$O!nrhw{Q%U~K9gP_LjZ8u+uz6~Kuuhvg-& zL763!DAZ=5lYns}ia~|{7JdzCUtwIaH%=JKW7eD7Y_2BD{`%FZrX>@Q`ZiP7y7H7b z0&+;rkQoBfP{((i0T1SxqDVh=y|(s=%SZIGqd1o7X(W-TiyvfP8t0lFaXIW>0}Gq& zO<)-7H5D>7P`xll6B9Fs@iL3-McqfM#o=fW!z?+I%?c`uaSsWK;#@IQ8*yG4`**@O zLS3N2N>$H8$cGCMDsg5hv@xOiU?yL@Aog{;1KhP*Uvme2BCEfXLi*tiJZrzA{YH() znmjc*jrbDVd3FuV!)C`sW^@%6Wv4ha^(Z|hg5%eoic`6!0z*_SR}I@A`lR^m^xgs# z(!IUDMe0v=lVsPoDEgf}1G{yJ1Tl6J_4feiy;En_-M=$v6^%Z)&k?#3^LG56ai%=F zJVbZK%DOCG*I3J+yt*MC@;sYGmmd_4y*D~3uszsa%+OycU zb@2#gGbNH%!v+`cTa$6b=V==v_*BKfUl)2eq5Z$Os%dt)W7C1;Z-}9zpBmf0;G$_@ zwZ)t_dT=&0WDYe&?<9p|8vzIvf<;dfgB2UBcH)~)7w$!Z`wg54D5wCqr((>v(er&$ zY1b|(CTwAFLk2Y2juQhab3^JX7)?5&DT_gmgrkeIYuv;tM7Wp&A>KbrPCgoT_Z3wjS>as(r8whl1f4kegx^@nb2 z@C5us-!M42z!2~QSKkqk8CUN`5&i6duZAj{?TVsilH_>rp}|nRN%cq)iwj=?`yqL3 zxLd9)zS!O9a(>OfD_Hp*|EB&r)K7m$pLU*a!;9*IZM)Ug9_;y*%dJR89`YvoLocQwtP`&m{2c&yL5+LPa*l z{I<*8)q?BwBl6zyKVK|(ms67xMLZEtR`VhIX0j$?^Tn;frX85 zmUZdIK^V|^jVa8E{A|#OQ8_YQn;e*gD0q4vKEcXa;3vX@fb+GPdas)A&5kh&=eK7*69EP35O?AhgWuhLahHw7f{KklTahQtv;vFzw$0bK83UefW4vA zWHLa<0oa*x;VNXgiX!B+q=K3S*~bbt7m)brP_r`jq1-V*wr6dVcPAZ+93W9=3ckFN zkbOLI0)GE=bCYi2FoW++3mcj}eQh8NU6FJUlj5526@|%Z7xBGIE!$mC*WF*j$90=| zcV?M9S8j&x2qi8opACr)01^4hX-Tg^j7Zk*6Sx2O73*p0MaJZ4t=GH&0)>8Zl9?VLvrC5m*_s4bd3b8 zGDtWPz^_B|?p)3TLTgob2gwn9nyO;FThv z4G8=OuC_H4E>sPK-UR7%UwWaM8_>2TnYnYqPsdj2;Q>(cy#PWGD^)H&olR|}`5?pI zPFfU%DL@!+sLR_Tbv~}czs>;0W9%UH$hs|(rW8R~A7njDSgnh|YR#FV3i{fh&)1vk z75|P}%G0g>LPyoQQt*8Nj|H_gapY4Lygl7cT&l=@+Xt zTV*4nnkD9UNqmNAJ)pFt_gFdvRTRo8v0|o zfJr+9{h)CwP0BZ0{D17d&5vYBwkPDTTN*J7gjleTrze%N`(;&UMC4a_=gT20v+{M& zm6fTCtSa$}mg|Pc^$36I;qK)hkr|CjV%W@p#DXWWVK&N=pd&F+W$bq|lKD5)~8-)kSojvYI8?0lI-Ez@nj`)tMJ*co#0k?)x7 z`*3GLPAIS=I39Upj_oGOnZ>or%N_5yI2rEX2)c!@?>!`Pvde&Qx1yisNe*p2c1@@^ zALI5LX|#-+?H|IqW;lM&aY`Hjjm(LUp{#_HJEDX7stM6fHHAxQ5Dsz4DkM8>z{n+u zvGPbicUAiO$brKwG8-rpq}&(b9M6P_`NlW;RlIUWvqXf}z>bzb$_{b%gMWabozKnc zK&nLLb@&MRfJxf}T7eA*2?kGafAj#nPNUJiPyoh7EKI~c9Gw;ya8zLh1wI5-q(CJv zcirZOWGA?uBf}geIE0eyb9WBY3X+K57W{q?CIwYL(wKoLTxv3Iar=@TSo^;r8$=&! zNumo^2(7-?M@T%}yfApVQ#4PxHHb{zrI? zVyNIa_~R5iW?$p5uuB=>Mn!aVcwcJ+u^n2$Y8pk%>2^t7KEg|c{@vZX^Q#t+PZ+~I zKN-?xVrsNAj4N{AQe?0~9paU&K*j3rcCjoe0SrG35$1_y#B_xB@-w6&nKg(mQEGZa zl`-N^N(=Di8HAQHlC(>jraUqvkPl^-A`(K6vWoE7?Q*u(Zr5C-T-8%0@&DNY)|f`b zpWSnQFnih8w9ESd^FGFWJ#D8gmD`@AEhKp2#9ybv>!5-QGS;7uQaTLuy|$CtDCfRg{4@x6}y41 z+yu7p)0HdFv_Xw0oM)DtUAtXUwc^50t8xvwvZkExKUqHh?cTv3?(PxEBo~iNeI>aX zqU5=u7TqmIyDxUTSU}zGD==ZTc1X{yH=^g~%kld;U+juemC{B%coG>vH*!?;umZ5dyKC#wJ+;JG3is z+pQBPoXnmu`)5xPe; z&}8+`fgt>aSWB341u()c?Onuo7|MDZ7gcL#zf%I3ekNR^U@HF*vek5)R;Rf>g)( zSi`S|k>cN0)Gi<)*k)8i9!>CB1Pq0lyv>Fj85?8N@TrZ+P~INS91rmxqFf^Y(mXMX6jo|Y(vWhT_irFBDf&=6SA<;JyNRnJ zecBXEd-yTZg#lg80U;}Up|l06d2`a_!=xi}TiFT*=}0&AI0XW80$vekHFelS-L`7; zm(@Y3H>fASX64J?5S*MRH(;aC$$M**rpK1o<6V8d1ps>qejv-$95QQ*z~#MHa2`6v9TbMSU~~T1x>y zZD|xL=U(ED6R4~VzoIo;GC09STwu~1ofSHeTwTSEP!6+&eL9VnbRj|+Z;`l$quYI_ zuXk0z^A{(|8a*MSQ@()L`AiQmqyo2Ux>5cjoaANzNhg^~Oh(B{Atd^ZC@wLV(bpR3 z&Ky?&Mu%E^u;sMJSWHYEB{lW_37Ntb77%GjasnysXrs->3y~XSp;1Ce`ZRcs2dPHH zpZ74SeWa<&s*!tJc2%+_A zh4qFN*(knJZBNv6U@kZ>M?emQCs|lf6_5^Uyd)awk)fQlQS$Qzera;Y&LaAZ0VM73 zpxJnNsuz$9{tcwZFO~z%MI17rJ(t4c$T)(foq&v5aZiCe1|D5h-J|oVCp7L5kVXP` zsKQA4^#%Rp9Hl5vZM4MjMN330!zx>2vu&CRj|op zR<*iAZ9N8o;gPu73KcgCZH_Vy_me}%sP%fY1oa$hk9l#W)iEr^2NABex-CJ9vzxAH ztS+V(P*iDm8VoKh-lx(tuggx9zI^(#7T`%(SkB^%EK!P#p3- zOF{KVZ5QtzyjBL?UJ!loyq8gRnn|~@*5r=sOfbe zqsIE@r$d_OaI{oCIG(N4M)VBTxFuTcjBYwtzET$;sR0#dKzJ{g7v`kIQ(7^|P?8w1 z;k#B|WZz&mt(TbCiQEC7y{Ste6@db)YmA)b7WYQd_x=03T}64_F18s+CaQ*R#WFCg zOcq=UGp32tuC;`wRW)6<&b^v7dUAM4ZB7zcO07+TjH8YY%Z|tCgV zrNo|?7PrN%Wt!*j*-#qcL)45CIn<6Q$KA5_cra8f(w-&)qlqTfXMdDK{RO#7e>I~J zOv{QcFGXfryR6K<8Mm0PJS`qhmL2sVM*$ykt(?I*Kgd*^t!NLWJJL>Y-b`91b-#7XL#R!)rPyC#(}s32AJ1WJjSOC6BUmEJ zuq5^*UTGvJSlbbvh)s|R02=JK{3y%Uu?-#5B^qovQjj^{(B?1(PlEcd4IU#pIf5Ta zQFPa@Gpfig6qKT$LXG=G%RQ2pBlAK1F)@pn>RsE??ZU7>o~UkJfQ*45{!RKN`c3p| zG~v5Pyqq6(z95^6rd6|Y4Y8OUz}jaDX9a|P2Bvrpv7~TNP;xPum7X3#6FPIs~=mXEkvYawkD^I+|2LV@%?_?NbW{{o29YDDFMxWpkLg;(y6HpNqAlS{3okA|1rsOv z9B^r}WgymqpVdvFNX3=SW6kR|Ni30fTnFC9jjbIYMkM1{mjo7xA=H=hXwDkG4e3O_ z+qFek_^5ZGv|(t3+YphY;5_EB6ArLbe8xR4Je0Met^tXxJlZ(8mtu1enM{kw9|UcT z&WUnNse}A)bX>MhGn`wfv^Ol8b&W-IdXMx$=_69RXd-q`PR)MSiIyDL^!{DavrF-G zXj}#O2BJw#NaEs1N#z*c$s}G;MV6Fskd|;>(Q6gHE2<;l6!BszLLb>)p4<^seNTUW zyLU*g0Wzp1Rt*x^cf0DLcbY9SVu_T0l60n61SfOOdBfbWhaB&5l5Q})5ELbX3prih z$JU2C{P-kSHW7-2l6^xlYUPSSd1AG2L$7*>AvmjohdGg9BYI!rW6A_MU?QvCwE{J& zXpKURss%QpMs*EaU+Eku$DVuyeXO2BBe$;Cvg{G@mRV?XOuno?=4py(Zb&!973OgI z&3ojrR{*ufNriodxDQvy_hB)3tSN%TNjBwhnp~1>dvcPA^~fGWLYzeJ&~)>mhf_Z4 zrOM)vFrnut1OLd4^k3{I30HglTasl?rJciC!L6QNW8w+5&4pn|0i^#M!06+MdJtSae#|{%%rk-XFsGeK;T~NDtX8zHo`~kXKc++9kx{ckGGLyL{M6xBBp2x^mra z??<}DvWp!u_<}6yK}6p`4kz8eFt~WS9LW1db0TPV!F6`+Hu;p z{>sv_*J`Rkx2=d*d~h<=F|LwyOB1TrE6}k{mr&dwaTfGT4#pBZmFVnOd!IfP-r`nM zZjH_$&C%=?CBb_=9sxa(AvqQt)-&;Mj@v=xT#v2-qcA-(ZhtZPC{g&eBsq@+#Oo8bPz)3U~8DD_H_9tPna3nUV((Po{J&~OcK z8%2%QY*vgVQuFeKdS%0+OoehsMi0ISv69eOk*|YY7;#b-kBCksC9870adDo>Sf8rU z=@8P=>{O-sC@ILTQR*_*E|wG|19*zgT*!<@(I*>KgwiS?X?96J8X#OmS5>NP`W=u; znlXd2!fO<4yTvWCIhZrWx=?H!ZYcY>aCbnZyB%d$90UCo{|)y5mG>Y~R(!4(lNi`& z^l3-d6M@7_-r2J7o4^;ItP5gh>lHLCtE$D~B2CxucRwXJa~!%PXGSzST#D3AYFOCO zgs&>$FU}3Yg>kS<^cD8Y<@9%xxo$>!5oa^Xm-zZ9bp4`pbs0E*PBKxlMHUB}zES1d%qs1eWtaw{%CvUd2go+W^j^^Y zkvivyVppGba19@J1i^!-UXO5%E^-^Vqp5dB8)Qgj>YX0x+^A2M{1s{WSVVH9I`4$3 zNZ31))@s&bJ_Rekj{szA`X}KCywL)-eyFg+v7RE;P3)7E-w6zyryVR50n?wOow``u zVz&^AX*U+QmCs8sze8j;nw1xEfsZ$0WMW9M(pl9Y-C(C96+5jls4OyGS9H!YCok{I z3tWE%I`##NYXic#MO_~r-08Z8X`t;OzF**|22O>Us@!~D!Ym?1)2-Pu)ypQ8#>KbsF0#WzY{40kEH9h|lr1q@(g^ogJEyc$ z8J-(#cG79M6iDCm8jjhoIXRgccB~LB&Nun&VmN0T(bEo@S9<55alyDFB2$&M<8 zT}z@#vjjoY$SiXT363Uy-pfhpR%kNAXPzAt@N*>44F_(SbRr0d%-eKFL6aqPPV!zl^l&vVW3iNm6sU9jkdgmg;jjM<`fiu zJe(ffe@js+UN3%${X@3|MhZHD?-OPSPkaxiJZfHsx6JqW3L5z&>OUOWAyHqkj|->= zOh~7SRIi8uQ=qJx6L}QrS)O@Ca)HTUfM7RO8b*Hggy6T{WUhV;^#gjkAph&xqQ`f4 zfcHsz#$afxdtcNKt}2(tt2g9PsUA-;PAu33t11;YuE@#@qp&MHsx^R8K5cnn{wTeF6!O>obmUF3qzs*&i5HT%)XI;dM7i&p?) z%1}O+&jpE^Vb~4%d^kEiUVyb@UdohpT%eA!&M62+Cj7|}7r<7OR?jI|uB`J51{(Er z(-FymdPZv#EC6VHW|%sdTHaG;u($Z>+|i+ysw{C5Y&;Ov8XLqe4C%!w9K%_$|3v}O`rLV+mg^tHMe5Gm&Mnv>$9k3^07Eo$4sDw#7^?Oa9} z#D?b@R!f*Z>E2u?eg! z5YDjEUSTe_+~3hA`U^wLTR|G9aB(o#N~2DDg_#J#zBb+8Q9J!9)q;0PM{+rk7r4G3 z#6d-Ds82g`BkPk|>`A$oyYfW=zjc^Ejdp4=69;+(gVr8ujm1#|!f)DXrp{8;(9~Ih zRJM=>qI~LWkf?^h!Es^c+i9lGf^iPCj#OtvRja=JQiLvZ{B=r`HtOHN(UD}fxhfYC z1UZGyw=kATOE?CWMS~@d!ZtX;YwqrzJ|Py5W~gGlue@43!Ad5C+>C-jbbnBq2Cs^{ za{kxLQFPR$MOoESS%N%^-0)c`SE zA_;J#I&ybsqbfedG#QfC0X3=P%c-&!*`AHH*c&e?Rm0blF=lr3gpwRV>Q$}73uy#n zvUu^on_a!lVGF#>8N0O##buqf`~E$2Vm13$`&3JV*8GeYY?=G3I?j1ss1$_GhXF;M z9CIZHE-qIiUcEsR=@ey68cC)AsA?n;OJvMXWb^1CqS|p7=n`D6g`u<1yQHTV)dGU7_v?aYQ3-1gsjUN zSe3+!G-hEh;%-wbW>ShCn=2X_g}kxHnzCDZv>tEm;fP(<;VC4FvnmL6u$@?Gx zV9VxoNu+%8cqo5(1NX5v*(p*`A$+n}L8+HwAwX7@WfWDBuHrRGj9|{|sM*vA{0%ix z2&5(YbE|gyf+FhWWwB8$wMCuV$o58F19$hLp8=Q2G!?eY^PH|_XFIHD2`*auB|9lx z4?yaO8HH=ZxZv4#M09&y$TgvYPI%XWh_;=@jBf1R{&~_mfyme3cj<6780*Rkd?F_Jrx$IC5oJ|Nx>`5 z$RtAXEj;lxkWXh{`mLSuZVdUs&Df?N6>Ac8n?aRn}4QfP!>q=L>>7#6213Oya3&q|fJ}P#G zTJ61m2<#$terxp8Er@16avU?pQ>XHI#bR{Kdf={o; z>IjjG!BmO#^zDC6Dt;IMPJ4RLY4GJ_29GyvBRW=!v>BxZr~!@@6T|^R zuN4dp8c4WLAqK%cMLHd!2*=r$6yYQnCEvXO1_r_A#>N@;*=aU)#za_jpe-vJpr@>8 zh^cs4+c%X*s1jUv5pFWYDVuh0>zFGC)}r=bu{YuJQiTu3^U*|kqsM83FNtt`)=Ntb z=|+iy+l@m$sx|7lPBDa=#k5Ks1l!6!01eBIHj{5HHTnN0RSVeVxhO-fs z71Hjj3?W}e&o_OAZMkm5yv6FQ4-VdXcE*CQ02f|G9F`ZW>`YEj(N0JB!A?N%#X))S zC4%IjL}eTz#Hz1`$V&}ka`4L%7vH8__%1}BD8LNMP+REOGsUGPZ14(hIgyTKxx1mN z-_hl4?nf+jN)f9v$-Vn9`7XOU=A=ecj$?Xe`Cn7qowG%l^2dvrTUaf{GBF(DgZL!# z9G90ga=r||yf83zDe-XOM1 z1vtoW=8xzcSv-(0RJ9=-TMFnQn_oOO`DG%f88{>^M%)rVQv3r&k;yM&K)M12QF9Su zH^PvEt5@kWC8Z_@PkvmA=j!Cu6E(gL(xUBe>Tw<&7W(N%ydGqED@ zu$<@N9ey;d%oS(nIr(~U{N5}hpAT06;-D)yZcqCBsoVWZJ!yz^aAQe9P0uEenuBB@ zlT;9dV)W}JT@KQ%BrDCJ3b!d&lEuQdO(1HrMig7(GffWD?Cd{WA`I!;xiv#dKs|( zdp`;wJaFV<=nXP3Dgj-8;q8cfak6!OVR9K?U7Qf&0x6)fyrKNEM%|N2SvlIFD|_VW zd#~c-iwX|M-yra;;g+KnfPQ6c@Z8x>un3TqXw1oLFVwA;U**~0_3Q|T{~7YtP^dnq zZRza}MDH(c{;cS5^{%@W{JhVvROtWp!@`Ud0O5*Bl}zsXVRE;;+C+GC0ez_A8P`7q zzU+b)zzv0;LNsqE=tyHj(#Z{lekIyRK;aFh{9S^+5#8?+;H2TsPtS}Ge)X=sOVBr6 zv%3WQN-Oro6$@o)`D?2JN%P%mx8QHIYIh6trj);1&|kl#Z%-Z9E8|-@SQCsK7ukSs z^^nus_9apaQ1jJ&o$S@ZJ<11*Mk4gCfZafJ-Vu-~dD6|19xRE-jf}ms89X(Vz_0!& z7fjBR)q{@qBJo{(c2FttU6QEB+ZH8R{2SC$(zHn+ohS!eT93>Dj^!?CB8@kJpiX4S z$(@AP$|Xz`sYa2bYHQ5ECX|0n>y}>5kfX^;A+W5dYkJ<&Z9Oj$_E_Gqz2tZ@ZBW@y zo}XZwaXjcNL*VTtJ7*{(_|*A;q(HIPDidjnXKIM-R303V+;a{A3a zkUA2oYa|z30SYv+YE|Nty$tJPfuu)Dv)qUP46~t_=M)Dxo%Am984jam=n=Jls|r^! z4L_v&u(7;eMS`L!j)x zIV1p20nS0M&+F=zrdt|-VG~QFiNVJRV5!+xx87odVw2ETEkUqK!nGXg6y-dL84X~6kRD4+6rnT$_;t0ok&CNHnWMgdiCgDl*HRC9f*wFewjMFg*GZ+AYWTrx)K9PdQ$~t?9e05okxn5l5(n5Io+fdR4 z$9ax$CD^Xm_LeT^Uy00zfOKJ!EYn}-=g?EVr#=S=wMv&`9k*Own=VAernUK1Wmz;M zr9Fh~#k{0vM4f|Ov$+vSEG@}b2(sNL4I}jYWEe^p5GgMGon^1|XGlyXjfbY5bUPgJ zOmfJiq`89KC*7VTo6`6uZj~;}WUOpK=~8~@6gL3*zO-FX87#NuWe7v$dX(;0Fhk=h zDI|1VQb5zGu{xzYbjZ4-!Nm*=1V}3>B2nz=j$q=^V9}xJ9RG~U+T+WGPWdJmWxPta z&FhU*6;~DwS#q4K1y-+$o-yxbi19h(uc6l1OE<`Ror*HNN-N6v1PscpDDN(dilSy$ zkVH-iF*7ZRA#N~^^}rtAcJqwdwi~s!{I*+mEd6aa&Fh7INZM{W+ymNfU$YRy+1l

zGy>_`Es?0_G~y<)iXyJ~@@m{qVlxKk7P=@1=TGja`$<)RuS76Ptn-^}JnU1bGe%)$ z_u@D~HN}@@gQpnwx*a=Hup7V|BM+lW;y!;jnY@>{SviOnK8Yh9Z&8JBoaie4NqH|P z8l`O+@?TG`pii}cVA%L4@%}Tqa*8lULHcvNIGrpP2nENWq!eQPrIkdf2q=k?rM+SW z)acces_eCX$>CT!Ht0|R!$^0iVx1Kdb?Q@OF~CvEk1poI&JB}p8-2uPL!R{lj=B8& z>S9Ev#*2J`Bl;qX6w!Bj+V)K7u?2_RwsgiVTaXiB7eH5KLtx^CS&R`KIH!C-r$DJ9kZF7l;VplWpDfSZv;&ckBF;-Uk zq%{{A+W%~w_AGRbktfhIQVE^Tgg!?ywc&V~m!ZWS$dX5<=pH7iLU0$lM1(ETo6qTsy*l@N;_lG)k&e3=+J?^$4B0>0qCB~ zY`K z`=wwJAix66w7th1~n9V(;9)CVwPcZmYdwv{R}oTt7RsW(-?**g>c zOA{osr`kB3e1J9|5qu89e40_iOf|qq)(7a}06WTy%V8PC^xJhq8Bm?44Zc3tf@o?-P|uPyR|SL(UA? zzkr|l>lsLy2^LBGR;xJDM;os}&1k%rNTY`%4;{3~-A}lV97dnx6_SF(=&1NZ@wFT^ zfr*mYWhW~2a&SbJfTMnq}x@!6wny$Hr}fqM6FKib(9*PbL+T2FVwfen2Q5z zv7hCL3V54ediHwznNL|buRb3E!$^|Jv(M6>AW)D8lhIQPgpAm>v9T`Jnn|)-(f=-5 zDjF=#l3RHT1Kvm%cH+v`+eSxvc(8f$iS$u1-Q}Esug-GrNnUZC|1|KLq#=KgWXZ_W zAW|~W`Eoi%P^J#a48GHbI_*udzYjk?`6QxO6zv~3O^RXKQBRhGZug4`E(iILpF;H* zCZ6QNP7ccnf=Vf0I~U!N92Vr>^|a%jR@AP&`{&H3og0(4!hs5rc``j!(6HAEgi4aqtZ;OUz8kOJ*w2p>X$H} z%zU-i1gQd$S}%ruy28tUG5-Klg?goq(drijbp64A-Qzp}s(|<~_41SKbf8O$I#3mW z(2Zk=`k?@z01@*}XJl7J@RL)rtDnS`dzX_DVz03}K1Ol1bv`-KYd zRvtl0xn@nZ((@a^4D2d8=M4oGNM8@RnP=L6lpf^(a4P?M`=dc&fn&0qxU68c+x z{^YasczHo-%0J|@-{l`G3w{HKSFa!~XgQ~=X{8sWyf95cpW5VN#!bVo%#FY^w^iK!khs_^zdF1WJu?8aiTB zk|}BPdLNMQL`5NdN00TERj9SlBg7RC7^!NbsQEBN9-(_2Lk74i3rq-Z7&#ODY<@lj zlaZxRNqL7qio&Vj@bWhMK=?47uiexAt@ZSvqNmC^u4IP>E1Q^-gRO%PAviwOm~;}W z>@qwAClf&n&NC3rio0KooQ7jXO`F9$Wg~&sRZ)H=>EHWNYwXprSEUrPT)^X(^;xkf zTBQ&i**i1;7!@0dVYl6aE9uWsj zsKvvl4uomB@BBft-dWB+`0zy3h~~EyE=s-#Rk5J=Y<32xnDOGQKaICQ}0EC-sbw8FtNO z-aLbSYJ`)XTrEaYIA=-)$g|M*3O}Ga|!5>TeSR`^U57r1> z&GU^6T1G16-j3`4=e&v(U{v?$8~Pw zlI=CkXH_eTK_xT9{W==Ntz<>^~&`AnW^ zuUAIy@dBql=aMNQ;}bal4M}47LLOA94={t4JYUbsUkep32MZo2q2Ho~w}`6!E}BO?t9 z+0lky;5twv->)zCv5!PODDA8Satm z!`0{l+bkW1U#O?!#nlLNtF^Ng#e9`3cOIc@-%7=$G`(pbBgpUqyZsQ}s)ub3z9fZG z#XyvF6E-Z;d0r_tugn)7Q}) zN?^>uG=ousS)4umr~=RE4CIz7-}fdge3I88q&|2+|K&29okm?u2rjFd#S=@S;1r?- zy9a$8-?2bD1ACv8H>JMX0rC-6Nr^|}#g}k+nf)FV;W9HW1I!)_MmToA!~s2CPK2g+ zv#XZ~Ea76ud4C>lQWj=^GQNa0OR>FJ*RFFjwaP2uJJ>m)jS3o$?Gu3It>l~!3N!Wa zUAAnM20owR_IVjN37-X_*sRnyvkCGVYClRxmN6xc$yW7dIL+rcs~IxQX?WNz>5qDC zYCNa(>TKj~sb4F|`hB>ws!)458Dg@XTdYHY?idE>uZ9=H#g`w?GsuK_kv2dV2cVB` z7yp2XVVE!Y0VTEbvg|P&UQ9-8Y<*DL42(&S=vXUpAhL|Htd^vJCe7oU?22?k5kD^n z`(my|;wZiX+YE@&AAXCh&9F$+*!?yiutimT)Q*fv5md5C->6+^QiBv?!8!H%pN=pa5iC0MF@WXZyKFvusi=j4oY zp30i(pVOGh2J~|quf4!KIr5($ZU5v(TuRxkju!Wc|75v#T7HUeG*7|HcL5*m^YWXD ziPCk@co)CPSZJT`-&AZ=u8xNM@uuRTbZu+_2XqnXrnU|}C+o`X($21ViEh}^Y;kABc0z|e;UpZagWG+2g5qo< zkP9@w-8&#sb~=i^*{7zOS=f#);I6JTEKyO-o_!?0dV~BPX_rEs9_IJoHU{`QqrX-F z_j+%qCxF?$f?$un4kTjxhOza&f@{~1&22v%bA}%%!a{xVC_l^k=JG%`P>@PXvj+|< z+W+w><#$3rmpH{?Ng+ON|DmESPcd)Rp3)4RC|V zal51|mc7>E0P3)zRpF~sAK=|r;Ax1!Q3LSq5&oRdit|)iGYgCfP6lg*{UFiP^~D^4 zf{f#ZV~}$Psa(Y$0e{AFSU@H7c2=QEaNSJIl8D}b9JT13PD1Ks>@!j+(xNa@0x7X#*^`qZzV7f? z(We>mO&W$C7)g4u`9wa|yL(M%)A1MHIb1wwIHfmqEE}2E9bKhOr}X9xqd1#!-}I&n zwM|UeZMzZEl`UQk$8JEixUS29IMr%GkqbtjSPNS@NixGMijW%nonq-@{ zS4zRn8gog)CC#)GxO=oeiaH28?q6Ull%ul+PJ9)32R>J5lkU!fI)HHBv-v{gZ=R7D1ZHckdHpp8$-TIL6SffhAA$H1!q)6 zq%K0dlCpS6{ph=*#x#f#_T2cjvWF`i&A*;3 zIF1Q~u2n^a=mTd(mw4pU!LpRo?3bqh=Jit)OfPG=mD*f)opLV{rf*cRcUYdII^xI~G>C&R&fFMjV+1x;|2Mq$Ud zM20SCz{h;M6{k}HC62Vb=;@YITVEPQg}9MQDus|~1|0#-cR)5Jqd53tIrwfyQfFz4 zq@_LKe5=+`nGj-|wDgA*YsiLFqtQw*S7=ifH?+uf!!75?vEzyXE9sgnz{g16WNTF7 zR@gwF^Z6kF0T#_zWzeP245!(nbRInlp+_*n(j=%eZEz5SnKKK4X@tmI_eZIx4 zDXT2rZwPN+ECSrcmb5rnXc6g2Z5yc8Jg8(TC*|E%E7l2A=7ErcR0ZsAew|6 zKDTWO9SsG(H%QKE=W}(aZ2pfHpdu#U22fB*Dz2DtzY_lChP0Du79K4YWOg^Q~%O=DnX?KMWK)HYg^JQ;$Cis&6F~3aAv|Lt|FhJhmMUJq%mw0$(#B1lg@Eiz8Bwg}T4f%2U%6whg zId(Zp=BfA8RHyu&!0=Kjc`XN8Pr(LFU66kXm9zj$XG7Ag>LXIz3S_MqNz5rt3Y`X1 z&J>XK1*EW%5Ces?NS#bb`pgy^!8HvSyX*B0nEd{FELg{3FlR;PIO5zwG3RpA4KSv2 zxU5*+l~q=1LQiN&E!BX7N%pdVJ@+?kVdakDRJq-ex;TzaqdJ?)LV{{K27W_*HyXKt+Mn4nmnXieMt7nN6|w=Aj??rs#{xndlt3jmF+O%| zt?dHn?xh7~sB&cHZAVCl)B@lsa3srTl0upO?TI5c>D=wX9bNI&1hmcc#hexANb>1Hjrw8}nLZ5I-ly9qQ_v|;gc>$R%Df(TZrAB3^ zNJ+o@himlfRQAcm-%a z#D4LVPfT6Ar; z>zj|;ZP^%-+iZ4<1b~YkLIirF;e7Fg?w^E>E{;GdnoE+8DD7DP3O;RWTuT>Z>8AW1 zo9MyyS5}kCd_cI3cQ*7`fqa+EU_a@Gtg8fQPmH!6EbQ>>Ff<<$+L#!HS`1La*7}eL zXZ4PQ%t>|2eokE_9k&9F9tue`vE?a!ks#jA$mbViaF{N~SCn9h(wyPXR(du^fWrI= zB^uwu!goc9NjEq>OHC-z7{nqv4{?dwW#8*$Xuyi7u!~k!T-kBQUCGxO1+n5#3)J-- zQpD=&I@f*fXM#H!rqzfBvaGYkc&O#~^v2tGO!!T59m<6LOmORC!Nk8XFWO~>l-ioj z^tQm8eQfL~S!@Oo`Y?ZlgYl77Ru-tmpu6y8_xH56F}K5eTH8Z)*TVXI8S9L!jl=Ph zZqAdo6ZGVEyhAd>X7HQZ*dn+QycBjk2eUgZH*5xfq1@nEQeje6N7UN9&Jbs5!`0T( zmF5qf|LhoycRu!_ty>pOtQEPA;GnrwlViG}o;n@KrM2uv+4ijO?nqtcp59elr8J8s zj-|n$50U#x!)$P$rYN`bb$6CsM{&_P#lc}5MQVeI=&cC9?enHxN1@BZjUtJbYU`Yd zdeZ!+4(rfm9qFM;pJkRuo%T1#ns#`oj({b*|MQd<$54Y)g$f5s$F|w}&f_i=npV@| zDC`=FrD1CiGK2Y_K5hw_JyDDr#d13c)?R^{jkpN*L@;;5w7a#Du@%qx9EJo9Crk?3 zmr+|GwD*cMR?$}-?xevMWURZ9x3{R0RxOHLlF`>09z5S7Ghh1zqr37EZS-6lpVFYG zIwRic9rYl2aBX2$+gi_#62L%pqX@ty%N<(L*E#oFI0UuC)8oepyF=IG0d11N7LFEX zoz)p#oTs<5`d1Q{TAF#6$3#T4I;he6)voR4NzZ_$ySWyPlq%9inGv>x_MPM0bNA>` z(D|y654*xbO0q&2dtdHTRu3v;CT1fMjY1GBe`&sTXp+%2oC_=a=aDtF#pUbFMhCA{B9Nfz-GxV4z4Bi z=E8ZJ9XC=sw-4C5Y;PM1ip_GpRmg9{Y_I)kzNJ5oKhruI-}geyKXkc5ER5u7i+U2H zT2id95G?GxC(TKP9X36y>j`-V%pG8PuAJNoTxghwEoRcMgd^7rn1#AW@pc3B=Ll77XpqN^_@UO?7EX3+>9}X(C#W zv#tqxh{RA$xiW>f0@v~!#+T!*5B27#yiMp^CG_?ITbI`Dls6KSJ-6-3quGt% z=4+l?0)B2<+lIhmI)h$rABHVNg2;KD9w@h8doC7ElS7y!?{N(%phGa^N*9^ z?M=2gN50-fQuqeVEru6J-gSI6U*s3>@Vr)w>LyZ#Gcm+?f*@KwWwmf;L~lCE`g!x} z&{+k+foh&VIlUSycimv7b<)x&i6Zc0jn}=qN2z$?-+s0C=~LBRKyZl)l(0#s|5r)% z!z3@q!$0O<4KId^FF&4VOHARZxuPH}Dhr8n!I)%P#T;#pp_x^EFDElx!wi2Sz+w}6 zg-shM^3#_Wi)Si(aCKW)=7r=jtF}d~riI4*HO@n5X|xF%q{L9NPZbdE=e-JPrnI6- zYt^6@B^%e7%C5$J%4pm_8jp2`awiY;0QXc=^70qM85aO?AcyN|Ha$BAx$>zu^ zK3KgzO`c!-yF7a@{Jb1|f7(4Pw9o_)SqF&937|>2m|oyt+yy`hy}MnFe`0bT*iN4% z)wD*5Q(|&n%8F#!%%kOU9^JV~Iwx1|=?xo<1_MGa_ThL4Ky^<#NTi*H^sO#FL=x4; z=)fH`eCzTkyF$)#wFZA0W30L4Lex|*vam+kvWk_pd$mWAb|Doi<*{WiOC~Iv06$*1 zKSGk}#JUI@E@1&?EroS(!O3ix&!2qa3c5x00DW~f^Dq@Ueb!-bFLGAFNP9Z1pX?8X zVrhXQ=6NnVOeBRHd_)9I!)f$q6%Y3q&^>b_oa?$4N zF$rig+L|p`MRMS66Lc_`O)h!^%AAjfm*c`#Z!dvA1m_{Y*eT_$q>EMr?tldy{D@-% zkRiAY4kv;t+*T=gk^vEmjh`q3$eq&*Ct7`%&n|}J443o>ZuE(W%h8QI^Jn9$SJ@OK zLU23R4@q~y9?qN-+Zk@vxwx1BBSMvhTh+A478g7kv{EXEG-#*t;3dPA1Idde?hnIh zjMmL`nv)!?Z_SalPREPW+_{Uyd=F+?Up?bU005e*AL9>o;5CEWLTm>l1B12_G+(6T$~JVL z*NdgE@@()LhXWx%kTc!OQ$58uj1~%`yj`>*57OlL>UPN{`SdQ}=$4dgbJiDEP;%Vv zKMA2j6Z7?AsX)#+HbQFHzz+2K!3w z`TOPLKN#DPLdmlc?(}1WP8`ecW>;@>Tz7Dp`-NuN2fAn#9&J3&u%s3k*V8*os6S@x- zGH6lAHeH-dKISO##pGk^fMJS;NQvrO!uA{+(sP(MCKt)(j4Fmfri&3^yzJu?^o4#r zzPdP>j9|J^knnVVn=939S&amWM#wtpwnZr8i_rM!C8>532;?0k(QFhk4D2>LaMZX2 zP`CR6|NiANo1La+y78C{ed5kwGY>^#D{FU=y*EcphjwV?Cn-g%GZgykR*Ozc-OBFq zr*0itf!6E3FOwqZp2U&$cVRHuE9(z*y2(WA11qWs66?i5m zDxfe)8|9bz=$fX87WdCVYP+fP6EM;=b!|))c>RYA%MH`R*TQ;THQ-MeU5-w$ z2GwiC{r=kuG-sE?Ggx}{=5jz@E~h!Obr=!GXFa|tcscH$=Wxo3s8!3vw08DKGBY^t z2{CHnUGhj@(y%p<3g+4!f~{<8W^{e=4hD}`u$Al}y0#0OD`F;RaJwK?iOkkdZZd`9 zcz^{;b}ZO<$81R^r@+_C#dNv&3)o@}!w5w=5Q1~OPFTxYPzJ;g*CIL*$C;nwGQY^h zr{w3YU=Bf#Vu;Urr?YGbOuV2!Pu6Kc;G=LA>dZaIHElIKua(qyT$y+@bi6Ameo77? zuBcb1lJ!SaSgl_P_D{`O>Qr(Wcb)Q3F}-inzVFjgr-wA%d|QrbK^hQ7+AMe^zz4bk z_R`(PR1?1@7saw!2R#-xA0EBanvm~4Idz2eyHfih5wFyUnWC!No;ub!z2C8{FB{`f z3KWO^^Cxbc%uS-D=y>X>PR#ce84>VaE?L-mdHE9YuNZC7fZ? z^UwfSZFfzpM6X_OG|0K+(n5a?)$AM&3LE{CJKD=78xNshpVA-Y%k+kxkH&+ECkGTK z2n(h7vU1i$WE7{>*$3j;@M`|>75;uVgY%iA>tvYTGk$+JnY>q`yk%W1d#>J48j!c} znrH)#%69Bt%3~q5J0n2{3t(A+Nh!yEQv?snjS9ZCgg9VETA~fs6kDq$a>Z+@DdG*Q z0fm*@((uBT))<~`iWz~}YNiMa>UJqO$l(D9V}h|tZkEU4*OtM2Sr@fHsT#HyEqkO- zt8z%D(RiM$s3bnP{vok( zna@V>^aPh}0e#+(TWAkad@Z!{KELW^5Pf(Km=i^(UlU!hAk!7>(KvSS7ZZk-Dt(Uu z6D_trmF>ddz*pF8@e>;s%~^{>DrI{mRQ9yv8`(>Vx5zO|Tjt`BsK_FyR$6`XFWJRP zJI&_ve0hYZ&bruj; zs7Kv#3;^XnSfRc?FgM4yf5dBE-<>Z$_%?5XL>qNZYCqBU6Oi0kg1gG;oG10slaQNYZz z?IziKWdN?+Zo?OJ3-Z0&e9Nut;i%P418BR4QJ&2THro+sCWvaj zW{jL7>KcmeYlfonnrS`I>uG0{twtIf0Ad@*Wq+s7RLso zM2YG~i86cu?n{1w=VFUSy&4LXmg>W1t?wtLYr{8QXq47LfHrv4^}1FIu$ANs*NLOA zAVY(IDU-}#QujW2Nw#Bi@eGC|SW@7K$$yo$HKEcc7l5P5F{x!SFT9%Q74oPI;MNCw zGtTxovyR#Pe0ZUqwD-a3_^t6o3pn24kFsj0F|=wu4G=Cy8Jyee>HgMwdQjF=VB%p{ z8Jb4U!m80mAvzys@OZsgE_w$6$`H$>5=HudWV@0{);V3Xet&5u<37b>!5C6(&#h|d zgB712poN0Z{X2x|d`FLpOhQ`X?d=u#X}qahQd^wDeWrDyE+sYR&YqCWzDC5??D!n{ zai0%o{UwyJOiN%X?2}+DFL2nNA>$(m;4S@mH!o z`?tu82ecoS-2^J=faw@v)+q#RH zISJUSS3}xnc`TMj;pHr&wBmYpD_gSeQI2TYp#J*&qBy#CI7YGEvXxyd%}|u^0UNN?4q&s~^x1B{36`UueT;&J2>tkgiuT9Dir5zrvs zWff}(fPQ=RC$LQXGi}n8;55Gew&S&EJhoeGw~}YM5R`3ArX07(qc4*pO>q+9W{z5_ zs8SNi4f{z%def>45{D?AGW1U7X*QkAhqBH}1i0`n2b(pTZnqtt!ttyizWIxiGVjkO zquyX7F%|slC4R^l72MSdxIYdNi~CnYtrbZiLKsN&V_d*3Ls2D$?(i*S_y-ma=2D^+ zN1kc&(xH6QQ{+=0FCf8bFF=*fe+?YfAqR4Y(_3>W$RmJYNLoe?B+!S10)R}+9!aqf zTyr-4zRPgDK{8we$Gqaa(T7;P)xsGqT$J_1RiEk%2-aZ!G0?QJ#Gwuz=vqnl<#;Wp*koo<=$dig^OOxrt)_s*66UiUFM0U^qAs_ zw|jdPVSb7;`uBN}ieoeI9JOC?kB9e=8!IDehF_(G}h9^iB5}afhU>^r?vIrD>Nw~3Y9)> z8}p9eK*(qV|9JNOZcv_m`l2W-D6HQ7ovLZf&a&^J%NJEsgX#M|fCuFb8fviISh zYQ7I%b`D)-4$CMRNRR37i)@j3h+?@Jc3wyd*ymqi{~xjx{lhV`C%~39d-BQmB=G%# zYNg{zS}|uEFEVz(KF#|FgAwfU`krHwRE|ZwnJ?g&J@0)OE^t@L*%;oXy?!<)hfaus zM!knUl+%7c?WooIb6%(`U%jBQ=QxF4A08psDKRwaSEd(fumX7rMJqrktsIPIUrl#c zTwCD_be~X8$+)=&G9!qWuSOzIlza}^5Hd6FT+gOif4HEFlYG+FLzVMDE86{#{T7ZA z1iw)qHwPKIXW=29y0>VaTeBO3VPU*C3_*ID=>$;RIbO((=Xdw$ZUp%p++A-!@C1E{ z1_%wO~eFc=-(w!86SNt+QN!>Li^MzSm8ZTP^0j0 zK=E)w;Qr8wgsWx&}r4 zb9ea)X0G*;tr=162Wn)1$*|5Y6r#0K zoO8U}!@An$E|fyI8}%nka*l@jk)^ld?#s@@B9iciswxmV;5v-Ty|Ww%Z;^a4dQ_vG z6%ptyXt{S|EUuIwYRVFyEu-qi0~NDqFHMnf??)}}$e1${R%n8zN2f~oXf&ulr$XokzSGR7oZE@3z$h{!EgZKSp;I%5K2q(};1)AZeFcjq zrBFGC^I1rIC_=HmtjR8tX6QsxJeWqP7(_&NRI=yGPEGfV(i^^EL?w~bt5=6un074m z!?6Nhm$h2^@D$pZ!vdFa2_Ox;zSFe?2NBrUICUG8sH5Q4V0Q6sfcRoLc#AnyGfBI4 z2_h^Xaqy{Hh;tD$*&)eUX0a^@ka9peEjqnfVAdF+xKS};H`K#$&i5`2vk_vuPd7T4 zB>z&}%VAoEl-9rC(TbE)*@mIpc^%@$2;(g(@#6wnHeS!L(etgy zF4>kLqJJ?3!LjENWxiNv6h8e`bXu>Y#F!ahB=sxq<5;zyLkDjnCBg+Xe?Oe|R4!Mm zcP6)UAmBWwYmxPCt0f^ZaVW6AaD{-pEM`~p+Z3+ffgGu;sJyO<$Wul+ihSW_%kL*W^K?yin$pjgqTJba$!>r!fCE?{i+nRBLiU zc^fSeT&;i<;RI_AQtb1jwBvyiUtvR%w%oH||LioIl5MF8_M~APh&IzOorBwMIfC8x z@ZmSkp5-lL-0wjIP7%7l8PBsp&NiqfQ|LFCSO^mR-lW+I4Y6hf)oB;XVkwPN?Mq2; z5u7;cG!CcJv3~`D)t|P}{A8+?x)n#+=-Gj%Bg#=prdcabww{64as@?sPm{p_S7j^o zwm%TgYm4jWCb*Vo1j`c?nH%fNL)ylA$xii=pnYszVh4uCHsh4k>3LgY&rOR2`UpyK zg7y$-EY?EAKg}V7o3QlrvluMR@5Tq}Z#_{47=4+hdE$z-k2kl;9&EA)9G1jKD!SR+ z-Bb63*55SXV5P)`C^N|}hi6c@>Z3hhF~nJb%#{Ge16g|7o3lF539R$^#dL9{1>P8( zY`8u$9#;wEtU#nB9+lu{WBrm3(=eYuX?Lme9o5teLN}KVA`o zuFJsmroDm0Jy=H-l7493Vg$ZgGuK_?UOiF1x_3Hw>f~XZW>0e%w*5WF*Juhp7p!pH zXp-zJs0#~=aE!2s2jtC5;}%+#m|u(LLg!d}!@1Vj8kbU))J(Jn!cz%PoNl1UTPtDP zM!?)LBbLogwoCRkwI7+hZthA7gpT;yS&gljBt_`YCjLog>rh_1B@h4%zLL5qz1${7 z!IJgNMc|^Et@`|SkRe5r>(*7rxj;8n;LxhI_@o(@t4vIfpz9{K>}24!Mf?C|#l%|# zJ-Ht!;BGUQh#jyjb4gtqTPanD&`^QG(3VcatEsSRD%Yj6HNdX|Z4D}08>%wj!7XRU zDM{|()0mSJpv_Dgel`o6$98iR)+Y3=5?T9ztxIQHNl@aG8SOKA?%h3S&3qsMGc&Di zW4kn+SqJVWJAJD()*?y;u60Swo$n@C;RzKGl-N*~VnxZlo?u%Pe|Ia1N}!ka(Y@KU zAiISK(ssKNHSa`fD!myktd!vhGOkg+Lgw9g<{Qnre%`ZHddOr&2Kge`oHM1f$Vc9i z183NtSvRUx^BoV=t*{Gn^cJ^{WTfSF%%uU=BFDUH3P09O#d+T}ZF{?hsi@)axYJWn z1Ad+gmxn1d`+rG5XtlA2&VUhqr*k{Vh-ihM#rfH(Vh>rag74FJuCaFah(* z#?G#Y$kJ=jTo2>5d)ko{EoS$*UCibC>(7od%x>&$vBgt}S$uX=Hm}xRC8gXy0~|GxJ}7xEw66N-g-(>m6dp<0 zgAA*<{-wK}0ar3lfMJl5=ASK3!p{l&n|HhTVmqmr{9V|cLK~@IG9U2rj%1~Yy>~6_ zzFLlcg}L@PKh2iYgPF%Md% z(}_-EgG!`d(b^^t82z%Egl=rg890^S{G>B7KM|fGr0Lj=p2O5gnRa~QcMVcuTRWCt zCj`&1$C9D4YJQCqXiK5$Mko+a{YABw&U39pPD`T;X{!F2vLyiG%<3nBSDcPcv+)`9 zk!L!zK#pqum5J+x5{r+o-~M-b_CDp!t4r32#SZ<4l`p&iyp>LXsdfg!dK|>d&-0m% znw(P7L&P}t#!E{1`}Jh}H6Ap6V!;G#GGdUzyEi}A3hIk>aibnazk0+v)%-^z9k#SKtWiK%@m(d$%~dv=-7gg#btJUKAA0^4`==5 za3NXAJ1WZVW($3KR;}quJJ17QJ_(P1)Q@K%1kq{LyeGAcB-)+yancebi~b(g5+Fh*S!8zSYH zkG;Ru=Hqgc(%k&bc?3}1DuXc1sa6e7y47yw<4ejRs&qc;k4gFmRkY1N6~qI3YNEC@ zI7-i@8O35qnTl1atPOSOp47K9MDl_)yl@*s)Tw#4iB{iDW1BrY%7QJ;C(d>shKqAG zr{ZM79wu8Hw%VOY5&(PSKl!4EjOtSyJe5FNSiy}z%Q|o|UOJU7e)CXf<39+K$x-@D= ziz}fG#SJU7_76#1F@h>Kan+Qf0gn_yo%pS?elmyTsGZh?ipuc+?)HxM3mwy28Hia* z?X9k>QiBj_XgIC)wVq&*7i|tp@8Ft&sK-@r2svp@D^GI_pzBej0kTqksgU!v!KOJe3H{_7WX)w2cC`jO zmS=d=yM*@=vPq3dh$9ovBFquDPiFmd$m3Au2M!WyG!1~PHCzwqHAX@bZ;hA^m(@k= zit*2!ff}cj=X52CzP_U9F9BCFx@6O)K#Pt|M03q%=~oy~glgp%5VOY_D9eSmqQT;1 zx|KJCiH&!`jLM6}ULGF&q*fdaN6=VnHPtEUYg$)Ak!;gnGL-AblG)JBUQQVmC^o)CK)l z+!}6qsZ!oV#FtxMD%*sR=~j8EN2nWL8n-g)cKOiuX7_dpU)K`uKrX?lO>tL&qIKD8 zOIv3nsrjdRvh)`1?TK3nZjh(uhORObZ=vqs1=#!}UhH+a4pN z&26)@v&FH{wXte2h0{JF^3SH@Q_@-!uHoER8Uh73;vsEW&-rf!IDTY_x*>V37Egxb3^5$@Je&2; z>6qn+CyKUhYI64r%~n+%-6@ z6d9NU0v8)i`tMPSqHf{7f*U`P+h>@K;4D^Jcl%kURWO}QR1|cI6T!iaMzEW(yMcg< zQ^Wxlz{E-NPl=*R{IG5(5C?GN!J*r&-{v{;8f4=Igxmb1l2ODB>}@{aa8E{8Dh#4_ zLh(o>XZZw{x~ttz;mw#rli)0fS-zdWn=pU3TjkZb-|gP`t+GGLv+)vnz_pvL3V6_a zrIVCU?EtsSl@o|KY-$&F%&K`Dju#UMZ)0-}+3hsm#A&>he2QYddt$o@OEI0U#o;N@ zjpg?ExPd#Til>h%Ub-u?k295Rn~(WzY)`kihYiX}QJ^LDjc+Trh>s(l*-dY7u@K%m&LN_l z4(HQRcGZ&{rQPle`3*Ka01rO=Tx%hFxD98OYIH|VvwB1xJ%q+x3~BpP7C&bA3^49) z!W|M|sYX}L6<{zu;n!;Dti=x4E*nh|LK?IWSD41l>u7tjlDj6rsJ)#Fai%YIGOb~H zN259`YrWFOtlK1O7mrBR!^zbmpEnp4*`InR zS^s^5Ix8pRVmP_>U^cnvF?luUcZ&Qlr+FXLs-suyP=_}O4SK7c)`~|pU!F8*+p+o; z)|jkoo)@y@_h7#pYdTF7CMGDZONjzOYsh|rs{!WP->#%ms@YdqIvBTh=}WetSADcV zWo^R+R;m8Sq4t4Vr8e1MhFD3T*f{8DGe|yfkRRxF?5b2)jD0T^-E0eu_PGbd#)Ta; z+2@>UjrKXNH+fHH%6tT(TJ9g1C`xQ(a2TDU@XntlUC%P4638z{kS%T}eH*>}hu=R~4}uC*Y4hbsf$2Nk|K&29oqEC#`Z!Ssd$eJf0FIgf-3>xCI8$9RYo(;x&On2q8uyjGkE zrnJ1ypsSUebaS`Fbv=iDXYOX+lh}$xYvYhcC4NcD6 zYZ_~#7Lfx4Csg}HBQN;Zm-OSvq?VlhR8SpKLJ-c(6Dwty9x)SbOarhle|G-dKf|$x#~{XP%um-1s2|xkNwDOeGF?ztg*oXpV8M1 zwh)L62(XyexW6ZgLGLB=IVGzyGmQf0F0$$gsFUJ5){UOxT0^T<$Q!C|-g_zI*Pl{j zqxZKo&WKx+#_RGZS$C~YvM{^yZ4CDOBCXqvODDPDzewb9g?MMWRw_gaxg=Ogt=1@N z74k?|6Rr2M9z9#WRcEbQ2a8%j)+*!yy~aptu1uGW+vyC%dRhJUv!3nex9Rv919dMZ z*f_H3ytV6$1e!IM2c&4Ll9P~P^e4nhte&?Po2XUjr^HK0Aq&EBObXG_2{{#o@gr9t zt+?ESro!o`R+Gi8ZljA`VPo@s>;y+CQD!vQid=S4J*T((|J(dhDOd$txBI`=L9U94 zjV@QXXYRyet#OXyp|bKYntBI zFu802PAlel0!Y;WjvA<9ZiPunFz(PrEitiHq3Eo6FIn<4vSj2Ej?L`CRTQ)fOW;;O z69z@AdAkCdrjA-PUaOEt^SXKO%rYW&2@O3kz{~ehcA(+=;inc-F4ST@}Y}td^UoAp(#F1av+k0A+RGGTTj2|S|v0yqFkLQUYhes^zO zU=In{+B_%bEgyz3G#vYAlpZ?=n}j1ANF54pz|o z>f&TF>WzkU*=XCe7N4S!-`lNF-$Tc_@I;zg+tHVLWA^WEXvL#|L*pe|%xX(^?QP>{ zfyeTd)fk7GmXXp)B+`<6#|*NvH~+wDu-x7n6-V`gmw z`V!TV+)xy}9J7RA2R26`Rbg1xC@$}P5|*rsb|aO+PegZ>vc{?Mbn7lD3> z)eh-faY^T5!UdXLZQ~iraBKG&w99Yl&%24_t;f7mN7AZw_GDvzqCASb8w>0)9ZK{^ zdGxaWaDj~SctfgVe#mCCOrHE}6!@d=mI!a$8&7bVJZ}CNAX6NFCj3xi^C_-X;Y5w} zi!1SUHT(le6PfV$@kntJmOblU)aFUKEd>X99}g*xcVC?9hP!nJw8y%)Ls zGKiErb*KgpeJ-gQ={Hi`IltHfFrJKQT1MG)Ivk&Ivtk*TV9E-gK+Lmzz@;RsF}12k z0OK)k;J^!po1ZYrJzQ%r#uRa`RDMY-g0$^Y7PQn8>M`%sIx)X5pb2xT=yb`{6{Tqe zhI+VqOEu`;)I%kZoN)4CoS$0AQ2D1YPc@{i@EzL`#IlzQD?WFu*)GyyB%v8CLLpdx8? zbx|OX7@6R4nT^aZvScwI<-mU)D&O;@Z+3Yy#OMo*h+YyOpuY;!{EDj1vJXA*=*67B zj+dhmKhOkF8AbIx@lJJ~8~&~*ihdydCGm~Bd-Q`kRFd(W0s$^25IsLE29LYl@9?kB z1d~jjyh99|fAkR5h@(EhU$x`Vqup`nSNq!wwHmU1x@e||X};s8Gn$`+`*DejF6UmR2G+bKBq2khV4jq@4)08ZQ0(#|VD*^9ZZ zk!5M;qt z!@!2T0mUM$K>z_~z=OAc&iVTy-Q3#Z z)wgfm2JG9D;bM-PE!864KLB8~3ilt~-MfEyckkeVEE8O_qIW2Iv^y02a-q<7kl2^N zfqCh|U|z~P6(^MH`x%p*)8Q%vl(UktgFDWNi8BejC( z_ z+ww>|n0|kzZz5$tPoN5*Ya?ks;79$%@a*wN@GfU4(Gt>AdNBKkH2`!7g_`%)0_=PA2NE(sv-nM{O>iy{idQKekKe=;yHFh`p0n|W? zAsy2Zk3r6^ua}GIa`6|`+TNe5k{8+RJ(Wh2FRxT&o3Y!Ro~waZMemtvuT#5{S0vJEy<$)N zu7b^r`p}yfJy&iqF5A`RnLP@XS4f^x2>M~%urq;T9Ev607{4YBle%D~KN*d{BSCW5 zg-#Z;9Aq=b?%M5sm1l#mX`f{c(qJ$|!gRJUbi1$T$GA9pd}g-`q1o3{`dd<=kTfSD z*zRMnmMLIg#c$R+8?79_a?Vj$lHTn~dP5K#6u$cB$wVRI!--F{cj0yVw#rritz&5atMH04NpFh7>L&#+`GH?0H+|+aeW#|PcE3VfL{jGK7bO=jY-0D zI7xUFmwO=a93FhU55T1pPbktKH5!@iR|9kZo~ocF2;F$u2&j_rOL;OF-;wJvb;!IF0uvWU)3;ECY1?e%qY;}4P8fuqC}_CMi4h?gLD`u9z74H zs>N`^tIBTzg5}ss()zk3UN7SuJbymvzlSmiyqY8;{_zaY-h5zHf5_(8z(&Ip*x=|u z39-D}1s=u|#u~RrZaOY~V0ucbDbxTXJU4=OC57=H=q?6m@eK)PM|k9wRil_RypcwG zu zmoWTIW!5ll^(d@-aW&0JD{=+($m`j6!_!;@PE4UVQ7mB5gT$fP0W(p2gv>|>v%7m+ zJy^L+k^>a&7QvFoCJ%LT7#zRp~Lsu?#bwV?nq{U@9EEP_YVJnf%+nT zqyVplVm-Q;JtY7UAtxBj3i68)HjC^^;jpc~o^~omC6gO4<%pN{hC12P?sp<$^ms8`^NtBM^eK|={DKx3GR%HinV={(=0{FkR^d7bh< zVRXHo9g$oOBUT+mXhi@1+ou7a71|DDa^XA(W*4c5Q-0j3D5-Sicf>OZy#zXO`$5Yp zrX+Ja^ULn!SeQ&-Wy18g4;jYFa$t{@Wzbesa&CERke!E)BU{;tq&o;86Jup#XI$9C z?(PxqlZkD4kcFMr2LM{k>j#2dlA#pc0W4et5UezY)qETC5T|&i2mu3{tQ?jBnvacA zWhEd69~+&KN-!LJTniu`4~B|U_5pP>sV7*`R)HPp4iyqnjt@D^Ya>bv2;5*fD1yQ` zY(0Sj1@<3$_iLER<_ly{!52C!(P;&*@#_R`&F_0BlaF|(&dK=uA%j2lVtA1w(*u8? z=BNOD;0M0Fp5CxqIX#S^gW*r`6oDMo%TKb?0l%2D-!_$@^IdO-hCzud|E%6jfD&e>KiYNdDlgY-(22)w*3yrqIs-BY8QyeDsQ zBZ}yl0Q-XM8wHd@ypfr6Ij zPaVHHxP~aA97CyaZE@r+gezVf?0(p2GT9DmIwmu|OP2y*Zt*@N<^E_0ZSPFj$5(j% zj-LfN4rY%zjS+_tYd-3H1qr9|ZWB%2qI^pz*DNQ<19ojo^e4hzO7o%I@|Th28pupA z$lD|Ka>U;QevVPG-IKX$vX=ueCqewG<4$~eO|Ikc09_@_d2hl2|(B5(iwBom#ee-mLr|U!HK6=M+d(+8> z2O!@0ytlw9zW3l7K{|M#X5&7g7PE4{Fe~>XvvR-Fqlud=hWFk1xi9qn@IHCuB8ot$ z9DgY&3yDvN*72+F{gTBih47UMp)3`0e(6<#4{A>Fq+TAGm-KXf)BE6lM*@g|9O9ab z;US(V1YVw)(&-h&zssxT#pINpRsx#Bs7_``c0nxl;IqRH#at0_9cU^$=%{QKz2Rtb zb^zz-Y)W3ay#uV2GboiG9(3Ssz)IIM@M!#836fTrJUS;bIXqx8IRxzfFKFLcxgzv} z@9+w|z#otrlN%w!Fy4i*NT=>xmsqKh;_BdDA@D?_Ay^5@VNbJ;(d^nCl&2-tp+p zH-18!-owmu8JcfAY-rs6eonagtbcm=@N_>L@D_frgUx=1yd>D`XSrXR-h6iQ=<$R6 z!5|MxL-peq#*5GHf>1QSmh<7WN2d=DK0kSMf1Pnf3CHi!cV7PN@GyIHaPV+n_1Y(E%-&aD zefw(f4wu|RzMwfGO7`|Yd-(Zh_dXpD&(0U4tGzpqvh4o;;pv0V5&Cd&`02faPxn9n z)vr38|MZ{#tN+Sp94XqHE>FhUMLz$3{_|gSe$k=-9{rEM?EIJiN2fEG;DRWzxP+z* zcuC=m2M4hD=K%ysQhdMUzp79%vJHgN<%8?dD3)2<*`*^Doar6)ZD12`&;YjL0L}-)1!1+aeEL}2u0Bf?(RPZ z^5*>8KTjm4lcLpoAI@<|=yu=X`8#?{l)a@4=X$0cp$tTmb>vEt`M3V| zFIO@09>5$rBr1E_`5YWVFF4XNixVU*D7BgmJu0#^s~rziOrSZaTE}F8b-9eTaIQts z0hKmmO-2iKo{4!U%^`Z+j`^w4+ z3H*|oD54dx(<*;h_2(}~lM{GvcK%7PBLVo-ImHe?cAs|s zyZ$dFLLWEo%_e7Z#yc4l_u7zxY=x~WfClPMA?exM`5yoMdE+QERA4|{=@(3 zPoN{=JN+2M|LO1i5(j$h&(M-_^m*q$`kyf?fYbOZ2-UP3rS;Xn0E?oWD+q+{EdTDG zbS|bB{m#Gi2f`OJ40Qe}1Vq;UWUR0QI7l=~4q;3c%(^&%DmgruoASq zF6<8#`oif3o_7ARUd(>~_D+W(dTa%-9u;kshsLU68$6Pdk6}5A^DLaPP;?zkBp2op=2yK*+O;&foky zimKHX6L1o>M$$p>jeY!IQwGrTkvHWAhNq>$)UM~`mQim@8AEi^M8Nyi;f$Z*7*C7u<2i-*?Wr_rCkqs@{@j%pZ`XyO#IvyZ0>L`ObG71tG?GGwT%lX#=FnNAP`v z{TT_ywqztE>^u|GRD>R8U)_Gv6k5Dy`SL^P##5$*{;kkkt0Po;@cU$0ma=)3LE={c z-#%EZn+ewX%PzFNmf6uP)W2vvW%ilAWS~}VuxiXo`BTiP_0LSd8^y=Nc06`J4vMz}1XO>dq`E7q)Dxn^}?(Snt$*Q{DXR~{Q$z`2|0!Sl>FOS`T0Tul0989<`~ z?>?{Rkg1#v(koZO(jj<7&{6O!r0c_^FBCiKDV^L?r1;)kTe{&B-+vLIvm(Cy+$z z=^ZkxfF-~KaV0+&=NsQJpO0DP(u(d zkzv0Hi63%=RhAn}oPpz$VWKF|o_GKvz}hCLvz1Eoy)JV<0!-~RPyP^MWwf%-9P6&=YjlyzVa2%~G2p%Se*$()1KzS`*b9Exunk6=I2aAK`sKe+xK!1)^+CofQZ1Tm0vf&^h(MnOe6R3q^@` zTqhV87vABE$6)Z%kL{Z-nWC7HwZ^ey{co$`jQUCt=s|}GMwRpoB2+>>kG}X`wZPhE zq<7ALkEq2M;R&;sL%*&A4AhYB4a7yfy4K8Kcnc-bn~9gr_S_uMwPzA(!;^ewZpSm) zcEcB0{D*VPm9Whv39tiN6SKhbj(FminGarv&>1*t4YCylB4$UA473p!* z&M%Z8_(#||r@x*9rGa5;?hy3>E$yU53YHHx&4s0gFCz~7&-tilOm0Ti@E&}F_13;0`8%qcL3z@ z3hZrFpyCT1xn()n4tt&3x~vwib9i;=;gJp>`u#Ce_{>R9D*f@1DT@3`e>80XP>iPl z#b&K$J#sA)*zRVj*`ODlEk_kmtKseHA=fR5NFR=Qkw%y_6*d8Y8)&|;b8D`10WjdC zuRJ)F`q52GFT2v%O$24&BBU&*xnMdokvy6c4t4;LQ3Bl)5Ts`g*geOEPkkiADVCLQ{Oe$%OgPk4Mk1Eue*4xLghB z=})GVDp&wi?lZ4c(I~-(F-(!PG>G%t_yDHOn)FV<0SF;Nko!@kwO4zFCSze3+?c$?mDhvcncbs+xH{BHEYM<5irXB#== zE_^h@Nv;O8+r9>5XjCvuPQE<}*V%p3#)%B*W1mvo+J1K=$uVEx9zHkTv&u6N@BY>J zI~Mmv-van%0q9&B26cVZY!>F$%A=zm*e1x+1DK*cknq*5osyhGzFqB_0ra?>C83W@ z%?lGq=@U+DB=`_iRKs$fC~nzQ)Nf-Sb^Lbf15=6DpN_g2U&Nd1d8Y1cxEqV{bCwG* z$lHQTrxAO%)leIt>4+G_!ZA%7*h6|jNERXWcw_Mc>|j_6@dA<^|BpSr@K|4Ws5HC5X&cR_%H_zr z!&n>al+r*NY*D?c4peXJrL>Fqn? z=6?WaUe{*sJYd?J_-;b`?SmH~ZZI-mKRl8B0clAz$uu!uxg^(V4knnGp4SPviw&Ey6N+YpbwqRU!=0$S9JF=+OnW z3Zn_IYU$xeJcg;;dA;CIVOCO4EoFlsEJTLv;wdXx!q31$YSFYg%b;QxNE!`3D*O-g z39#mfIuE>9tyGqhCj1A&reE6<>RhnL&MgC^>g~m*(m8n-9>k8-%tThVp6WZyLrVQ! zChq>0X+#@J!v)j_ieYA-`Wa(zW@&CKYAB+-6$h^9UT9Gzmd%}d$uK^PPs9UY@>e}F zWA$3Zjkeyu3qP`~ZF_ zA=b4Bl3nRpgSj<_+^WGHTdL?(y*z)#HFX$n3A7UitoR}-5yMF8lVtNdX zAS9$)!H_) zn=L+Lh0a)l%3HE(2~Z~a!@N@FEvN9VM0> z@8;i6r4SF00F~ZbbPhwFffxQpbDV&FdXRwx2CL0-s;CJ94fc5LV$AdzWJEm(YZ$v~ z`+$#o2piB0Q_{B&e3UbfmKhB|t|sdtPJK!lhb+$%h0OG9Z}@*QXRu4!&H`8u(602f z2@DxmD9Rp8n8U5ODMyeeNkJ^2%kMVn3YUcFf+cJRw6JTVP(EfRmb4)!J?iq)`F8i~ zC^*{2a@FF+RzrS#bGQCRm zehNaqpe3Eyfw6`nM&AJ7o`|>gn-+nmBK(x_bm1Pe;}C0Eb6>=)I(;Er^G zV>d%2=5aI!1IyjbJnQdnhmd z|L1(RT)GZ``L=U8+#4x1H=t8an?~I*>rHfbl{V5-A21&S7z4!Xcjk7j z7=tDX!dp5i!3p}q!&7M)WTcDLCY>@U-hdH3x&$#i;$GCjayV?K+^a_p>3A>NIPg&@ zGf=T4WM8@+S$Mk)oz$u&V^Tgt=NriXrA(ZjxXI)90%qL<3^WN@Kl$`Q5kXqZU5w*S zrh0fEtPCc;p%!iE%2-TXAea?&1z<9sT_xA+L4-h8e`|N+-k{h%jVcqrPIpKu=3q@! z>Mt=*$JW(t4vVvt(#!dhrReSBrY*xKp?j`GZ4T*avss}&yF_xi84JCdPI84%%ZN?&?S*?2P(V4N-+gMhUC zuLN@6h#s4;o&Tq9wLr_dGw@JIB=R!e+`a9rj zndw;I8YkYzhf<<*YTT?RosmJtW9TD?dI&X_a8eHoz3o!P!p(1Gt0szV@5j@L_Uvg^ zqPfSK6Ee;;DC*3RTgc-JCK(_U(5`D4v|+1sAop>f1C|6%g!Ij-QOM}+6&9K`*Jjlg zu&0$rlG9l*La6O&dL)QM6bTtK%SpRw%n ziEH8SW#&TWqYr55x6p5nsnfI%Y#PK9?KjB>jFT1blg3;(z^CAuEA)#! zu$6ccov^yL$Ti%#8^VJoy1EK=R`43v?+oY_Z9WkTwS!}}wEE)Jv1w;`3~W*^=1K)51W9i`nC zK`q8j@S#7ySg}(^7HG+SobtOCkFiw?=}V?<5Z!|Gq(>nDn()>3`%Ln}Sdg!tNgFsy zDZs@ajwn^w{n_sLCEd|dTApVJ=-WuPZ3M+)5Po6YhHX+yXBvTkdL11HLh-2H*$0=u zs9f(J#IP3KDPF=81}f1EtnD1Ag_@pqEJ#zl3)B3HnMLj?o+5>&=UJFCx=f!wnhzuah$W2yy0X$QZIWzV>< zXm0lN3GneSIeV%29PqR4k*?zYOPgr<23)?`K|np}$ahachREVB^xp?+t+lsOT;HGt z7lrK|+L=Q)+|EFZC#RN0JCvNp%o>h~OJuzT*26lENR2J?^(ee%&PvBP#ealRB}k9A z?txRl2}%#0jeJj7o&ww9)7Z|awF6lOldIB>uivAq?gS+ZAu}Q#1HT2~qnZE} z5~ME!XZ1r4{U&w2VYN}NbomJIR&2d=@8Hpabi;FXjKLEIlhX0mv@>jw6pX6|yk}>B zj^sQY2MtHVdeff$h?6N9MbI*QS^b-IFouKNKnp{+) zzMleKGh$HuiJOzgy77?}zCNT9B3Pr$lUMj%f(s92No_G(x53 z%=p;3)AYQ@xCdhZZ{09eMe|rdosPN7AQ1p3%RPg|%7k{G$qlg^HwL=xjz7`Ti&SD~)$8p2d7`A@R!-#i0=gai|8Xp7ZXp-zLYL~H< z-Am)~$w}`7p5^yQsR9jHhvXEB-B@}6G_-2e1|i+Z zyQwq)$`03e`A>F%Zf&HLr9skchEdR{1h%FXEKOWfW>LsmnRrmgpooqsFyU~^OXDp3 zL1o3 zq4OZ4Xn{}aoXF?&@UbG4G8aGzFGGXg=1WfR@&ElCX|kvwsJo2Oj~gZiNdDM23HG`0 zDU3I13Dr3EwIli}9Nf*f;3ByLI;ND^mS4`W<2Zl#j40{~<2hfbhvg1AA5l=J(TrrQ8Cl(0)LxALY1rh+Ylx zjwpL6jMwnU_}e?(C?EQ6E~jc6Mm|d9deUIzbOE-7R;1*-#_df&UkAI;dqKuAREyAl zQi7)E`{Sv+=Ha`)1BG<(PYVn@o(o64WK+4h2oXB%l>l$$lH=zEeI^?M`aKGpTv=k| zN>OCCB*si+XF?N`4!Ce7W~N^7Wesq2^-MxNR4YR_{*Apnd!t#bHygq!psyT+^d4!xHK+|{5iEp!u2#-DO%v$Zj?L~GdJTn9&&<;T z3n_`lLc%XABR`=3jL{)wqe(E}Ne`&zlle~hWi$xj09;_owq&bV8}b#ms=qbCbqg3r zE-Ljr!omIx;w7OrA)gT&pwg$%9<4rU*4|JenS&`W!Vt?!(gJ$U(U$egjR6lMR|gbS zg}`%zz6%Ux8Nv_xF1THM;IKnCnCo{{6?sJNu!c@Dw4P`W1Jie1ogOd{XdMAg^72z zM~StQW|pH67ei~-KB0D@S?sC22T&X;^IRpHmIx*wbuA|%lrVw0(e_9$kIySM63d}M zxhA03W8+8;9o0XZY~UU3xQ_w^wz1@s38c=fx}!9sJlqZkx$6n^8r3$^=St9aU~9+U zVAX=@=NQ%D+cvQi>Y>M?pe25ygzt=H=7{`f~5~Kze+?el|BoWm7Mt005%L& z+I57veo*c{B2UNwow=F~nEnnhR3x5_MDmUyQ1sP!?(LRY&V&ZAe{WTz@&eWXqQc5n?>u=>S3u*+5!>rmIE zcZG;xt!@%gdIkDAE$p3Ht_|(87S`KkiGI(FKS3U|Gh2F&oSLVLRIfA$%r>UM?y1tpV+{qfL7oeR&aB zKnJ16$V?t%|IZaG6_wf&Aqnk%9oC^%mGgTd4jyYMaHDK?v&#F>kl$57+)+R!UQ+xj z8jx5wRGX!*PH>RT`o;Z;0VJ8)sq_q{Wq8jsb!9VRD2#;&xm>$qgXCf)C@oB&Qu5X( zbd4CKf(FtG9400N?^=z)jtIHaCF>vAY}4> zZ#1C|{9&Xv*c3aGN%%eg?2vh6t7Hqm86+Q|WaiQAr%wry^bv!rbbMiIh$7M_PMOB3QXjp1Pzp5s%{Cgs zcXf0`$9ef|H|*(EzFG)Ic%qyW4Q%M8C@HCkhqBJ-j`z8C8#y)U1u{sFz`Y`c6W}-3 zkEOfV#}`=SAotB9UA}bZkry-vbW2_&G9lxSUvvX!OdAjiFp;P*hyh=9?5h$TbBCl- zW=Ze>$0|0K4q=_Y6TYTYUk}*;APdZ%+mgBguZOZ1D3csuxn>Xg7zSOb60g*C>DlPw zapHw^eHM+&uiPdS<)f8b9`Kb<-}(t6C09d%cdXD&O&}f(c9go&>AZWUvJ#o6)zF|{ z?}p)-U_)aKSxK0gPKbeZOyW7qnA780v2CJh5qi;jd+H~sjFXwAZUAUMPWW2!4% zf@US|?T5AwH>dN!XR0lXR!Os?)6m|H7-}=e)rP`yw!<-40bc%5WjuC8Ci7|fTn@k zfWvB$^bM7aG>Nz_LqWu26Pvw zJFIxeG@RePE`r9>|GY=q3uJgi>J2Dg3FIquw*e@U4>=t4E%;7cOV1LRfQuk}55T_0 zl(}ODBg3{wrJzD5!&i%nCH12@Pm}!FkV?HC)jtWDT`QPwsEowXsE`?l6T$tlNUPGs z#`0biP(wLPX(6&ceS6N-nqy3|0e7)77-_#A%;og5#bSs=a^2!|F$x#s&mwVL zM?C2T7(-?Nf!E?B9(Osq-huP6Kd4nJ!&LowG>j8l65|CskJIeqxhyfwbPf6PNOa@T zoUr>NSQVaJtCnLDwdR=TXdq1-VrBXud{6IIx4~v~-L_t{%}B3b+GpMy+IMIGUkzv= zYTsoWr3MoL{i+Yg((37YxD<31z=+k=j=P+lslice2qSjiw}iO`&*0JGH! z+F0@>sD~mUGXV}ICsiE$4|Wk+}^lfW+V z$fOZGzZP(-ep2Ll+K-R?P#C2|j zLKy{L>RE&lsI@vB1$W?%xL(fKT>=y;aQY#{E`K^6SMvTfIrB`H<9h3*wDp+fMSKt9 zI`eeel%;KUJAZ4)ga|qHBO;RT)qXc<_ez1bxzcV26PQ3JQyk{5Os;shw0S$Q!Fk*pMJ{I z#z$;hhFE=14IRpu#MoQqu#sCEsvPlJ@e`MsE$S;*dOAfwE}(NhtuL`AuU+IZpyLt0 z!kMPVlnpS?o`mn~D^+RV58LKmcPU=Jh@HrG!CuaFVZ^@IX1c~!5s-HvvW6ss6cRp% zfI_XiM!R$ZloX0X#d3v}lDHOxWhkNQ*-ytpaj7xbRp3mMUXFT&z%_;SgP3waC!z+( z4W5NQ)>0eq5wf>*i|-oyLI|8YQ;#Z}0hQ6e9LYG)#`(Jnj7L|W1^8$qx9P6q z4j3W%&|g^)+$ph)_gcwL?C7wSsuR9ug`Z~60Tu}WA3;p&;Szuyo;rC!p>%sJ#}i#c zjR%wO0>f(@`dF)60cXg0C+AdPXlEqEikU^$9cm|RgPLRz&6lh!lt=4>%W!kH())xPU@1L|L_7Nib8 zuEqrP?Dej$Crs`#Dhqer59GwOn$x>4Ct6(U8eG4;I6%AG!cnRVGh0CUsQ`-gQuUuc zP19}};Q+49o7BbbpO#+Zv0UcwwKs+mW$B_?q_tB>SOF~nQq2kgXjHxl%?pYo;WG8g z*oa}{8=nYplr>)IB=mkW7z!az_HKaeXc?*%W-x}{xMTN%cA7)?hGk`ts=tOFG%YBg z#MX;%)#}|c{5=eB^fNW9#mAb8&uj42C>q(Njj)=HiAL?VqhoEcZr(BHA$5Dk*XjWHGxFd(&(jb~_Ym)!09f z%D~|6m5a^U#TV1>|4zir&6OAnTSg>;LKV?@W^NR#Wmho?$&ew_JoT%w0a($^yhPpn zN*PUdaRFz{P8ken@9UviA|x%gn%v!jN;22p>4u|pq?g^Gugc=50C5%?p!VF5c4tjnl1vqsyJFZDsjE6e9t z;*$Q_YY}q&d`s)tsR11xT2JV9Y?$G44C@}UQv#N_#QL;;p_MCG!QxzI4U&gL#0pYl z0I_$eZvbpy79{&J?YGA=7cI`@yj!w2Ie~C@iLki!T|d*8CueC?=2V^TUTiH`>m|nY zNv>G-W3-WdTDN?Q=WedjWMMGgk1sVxh820zP6vGlxgw{Iay_1BXT9fu)+5cfzMRvX zmdjxG7vihQvbX8Z+c~;#TQEN>v&?udSuYP5w#xb?;H-~=Ozxdi+Wzw(@>r)yU-}aQ zA|bH9|EVd|DTa}LfD~THLmYkR6HDC?8CROU%0twA<5m0Ldam(_h>9d@yJecvn9-puJ6cdUHIeNqqq3T-vWQ>32Zy zNk<$VJicPEIp9n&UyqL|nuU%3IG`iID|1bfO!bXQ8f_8Na}Z>WDm74O8T)@H#w$31 z9y(;C;G132b~zyq)ZVfs;@qN;HR_sqZYzOS#4>IhW45gX+7d%=T>_=e5DHc6J`Z^C zQGQE@7iid4)zvbC>UczO`kvXCZgC<$!G%I>QrShocksMwz!e)yJqrhWq4tVGBL}0j z8w6aqnUL8X=zr;f(!++*aDyI4Un`Kb?u|WkpOyPGE|sy3u427jmZ8S_7gqm7=K45F zaX>LO-VA{he5Eb0B(41MXg6fc&Tq4_U~7wNom^0QyyvjKe}xkfzcC7NjS1l>-`A>} zQkvERDjgkn$at; zFDJkp1OYwn}5 zuiKo{&a*r6tVVNs*=8o5q2mrJm~+OmUQU+R30K zgtAk@c+ZIyAyVHv1x=m}^xUG*hcaJ$EhJZ3-92zX8FLrWxEauMwJBHhjj-@}ipCky zt(2A11+iEMIUEF@T-|%YfIPN5kjaOaQ(;o&-@(q?m1E>YZY`cBnoErR*hYF0{;B<8 zwD7?Hic_cYwr3`wXHGB5o6O65S@%3x)12j>)`qz#??fBIy1$pCA#now!~NtSCD9f3P2a51zLJa zN|h4kTA)Pxr*JEY#IV^*w|>ftb-m;0v72D3ubhem93+huy~fhiM@6BaiUaS&`CvsoFonZ#C4Q{5*6L1NnB3uSvV0C`W|fp) zj19;=^fbImmi!hsBn1IIRdpS4hMJ_B& zh#ehLN5>RFdJsxaYAi+L#aKQVA^_ODK>TMwkAT@0^^A^9Cr>fDcazLxXih(XbwYQ4 zYBFfQHOfdBGehr7$R_N}LOLqNlggATSsrl<(q``V5gQsQSa6z^JifHHn=z>d3l_{o zIvCJTK4)r?JjI#r2P@l^h||5jIRIb7lT$7`q_{tUJ&;P*@J0%T$5(>lUO-WrTQ9A$ zc&QvBEn&PBhcd&f1+?*6+r-L#N0xyPg|MG(b1<+uFz0%T1Fm)&JwAYTm@$o1e(LcY zPnCMhn>d~@C+%B;Sv9iq#W4IvkBEkY`cetU|Up-|=xPv1gzI-+)M)abFKDYUk*xBzex zmkoqc+o@uP-&hx3M`I?W>~B8N{NbKP#L)3}OsS|L;z{q|4j(E$&lo%{sM)M4niy|c zBDAjLMBk}!bvGiuT3m*mE)FjgSdf1C6p|4EF93C}iI-u|EF^!z;GHs7h zQoIFlKx|YSHL7W8IR}71z8QX&Wl4<|(|%_FbyzI1<@TFmJ1?LUKI5ez+zMId(5y2o?luoR*h`pA!Q6^svstINzsHe{2ltwdxTPeM!0OO1(_>Gk{zy0%7?=Fq zZ(%8T$I4Rp|zW(o-{$6$2~X|9*(&;#(dK6s-I z^wQtp&~uAo31sNOE_&<25QoiMwp7=X{e~>VN&Nr<5JhDL37~i1W~eia45JmxjL#9* zZ)blg;d&+OtufzPXfJw!xi7=SbIZ#U@l&~c&y?76oj^;L`a>7L3RD9KDfCgQ%?7>k zR1;EK11)ZNU8%T1pW7JyF#U0V2MdEAc(IZB(VJCvx$q-XA5Y|x#*Mpgj*#cdR;*dQ za?R?(q6I5guUWOEqoYtjj*&7ZCZL_yf~q^*-&L!i$AT`s0efMnRPO~-j7$D3x%cb` zc$iMLOZM{Fh}VVj(js0z2+HFwT;K~!HT*CQtHcLnTXu}NgZdiw1y0{`)VHh+U^q4E zV^VyW6-OD9BkY1RkPv%K?bKXbThE{~6m` z>A5FLjSfQckmiBrs=tfG=A;+}XNyL?bB zbCRUie7hn-)`XZLS0)Z0@G#)qI9IU5xRBpj5q~H>b8a3jPRJqxW6em(++#Um* zot4P7nRL(b@f=r7hvkU`wCY9&d4Y_2mKoK8dR2oC2HMUG1pWU)tyMqo%bKMfzmfxbnG&y zke7OkgB4YO<6@c zdaG_m^8{K@LQ;>ho`&8s&^oCJ0IoCo{oGnMgq&!BRD%}QY8Cq1aIEC(Ymbh&`um;b zj8_6DK@pRoGnv3U-m(byfd1f2g{?c~IQ?ynWLv+Hj2;DqCUEGuRU&yXQ;fH7Ya?{Y zVuq!mgF&wZF5fi>xsp=7K@`?PKps5#zl>ix3_vbQ_}_unc?hY|_CLc(#LCgm(ZnJ`I7Bk@ig!9fYpFi1LDb3jtAp^593OwdW7h%#}Rx*PXFd>6M~bdG4{JQ-if+{-;xsP;dz7 zKkl(;yo-0Ll8c9 zg6&i6_uwc)m6hbm{5TSC+cyAJjBkMGXNHWtl=q_p<~3gIMaQEC&7>z;WiDlXxrj_npUsk0T|DJ2(_qHSO}g_3Fx5PlZ@h)IxjoM1$Pp&h z>Zk&DKwr9%$NkyRvQmZ+kgAE`ZqRMVr9u?X%-)QARD_f@Va=KW%|SAaW^PunLd09@ zq5aTjx=<%bRrnuXzn>zUbE?xr(8isB*ajfJxI{H#V^TY=ItJzkO zZ6juKpvs5;2lR&XY=s$CJ_jzqwghA9z?9f9J63g1#jL1BF1`=f?oF;VhGd{0G<~EA zj5sl8M|i78BC$h31E_za+})skfRPHKquNaSVhT%78F|I}5)oF8!9z(!z$Vsvi8J&f z$qSgmhHq>=akLo5|KgpFt8ssOrm{rs9Y)Bp0Ua2rC9uV``3Rhe&$WzH4~{@%X%eHL z`KO0e2m3J*%C~G4Pe(w_eeS5yhu@?2bH=WGaY7PCrKG#B*v`lUepyO__UM^hzKKs% z@bWq!TuzzZx4{|ofXF)&PWHhI5rpz+gjw?fT9WX%sS9NejMU4#HeY691oQ$}Dl>br zZBsR=sF$?MH!bhLb^eHtf=}iGt?|j2K;ai`nHLw(uYrt;dJn7wV*=rp)w3HG7Ptrj zgbM#R5ud)GQ5%Gj=iOZzz_cQsFUEi3gBaQ{3mP+6rBf^|$JkQtC_+3vo&Yn3ak{`d z+oT4x9q6GR>_(41i37r5vO++Q(TLsH1niA~_5w!Hi*~F&DbQYkjx4T)!}r5|SvSM0 zXlIj&K{sbDE3)(!KfRqR?fq(Fc&s{r?SwJ#FD3mmp;@;xRyaCotee#{3#Fd*#?2%P z+c>JBElnE1)Hh`AzkQLu4lyAZv0_;CP5q29d}-@|C!W4W>W3||%2Yd-v(a(Ze`FYA zW@}HMg@F*2QV9$r42L6kjPNOz&bEMXdwn0df0YW;7T^EmKL1J2N3V3gmF^?Fc)az=Oz&tS*)?OJCJpIEZ{H_()caEAFmE~4Hb~$PRB4j7+ zGQtYf2g=uH(=>q`b0i}S3kM#3DOd(D8^=8{l}eT3Km+O1vN=pFl8ziRl@LA%!WRu> z4fJ6P)N{e$kgwX9gri2A1R^OC=mc3e2VeC6wwny@)h%dilfD1ifSv<-5277R!_IS8 z0o{MWGytvKGs|ViVs{xsg6pMY1|dG(Lm&7JZ-tTQ5{IrRmP>ejTiomLM|d|ut5}iv z85+?p0STOs^eB45)iF*sIMTJF?=VwY@uur&yn~Kdq(r=z7yqITx1UvFDHY%mbq^E?~UZtGyFH?KUkz7EmZ= zavH4R0PGhhIdnBR@is}#>aaBzujq+J&~sQ3Qj@NXC_09mL9s9c^@( zv~;UzlYD*wP2Zj!MxCdOm@(=FSS>^UPQGDO=te;Mfv0bx@rfEf5#3Dm(<^OM&q!m& zUiviGy4bGK{eTz%@@}BRUpa+%0ce**@zZ>W*Nx@QwW-~y%uQw-QcOvE=p|o4ooBFD z>l($c1L@F_70}ji0@G|3&0|$3yHdoSXQ3Lx6mvfbP6x4Qj^EoDVx~!3$uKC*Nz)e* zgx0eoK1d$W57GNl=J5~QQBVL$tpF7Y?f^qqCogS-RvTp*$4F|oxC+b@MN|}4A=KpF z%=XhPw}b!ztw0S(+h_%8|2IGl{KfONlk(a4r~X!Bh%~r?FDSEFH=wQ)m@Hc@H~J8{ zJYCj;DMwVVIYe2r{P&;V%$l1l5K|vyABhNy)}9Tsg!mO)F1chn0a{gI%O(B&Qe&mD zY+cB+rMu>lO{lRT>$J@^hKBKr8_~SRy{(0Euavqfkn!l@!)kInUYO9oz%U|U4rt%E zp)--Iui}L1dOV8)o=^kY2k5QAER;fN6L+9;9C2CJ>|R_8YQ$U)8(5G#bDEXKq*j7K zE8S(V*ldvGm#3uw5M=@WBggO2)gT%2L7`#LNW)Uj+Bx)G zuX70ZLbaPBFPKNa`LPoWnxQ+z;F{Gz9QK;^t|cI4Qar90kRWmgVH5WdY-%; zO!MD|+y)+8xoBU4II%pNVlU&8{zDAwe-kw0lMaQ%kF{sK5+)vqq@JmCk;TIjHf7(Z z-KlB5DK!QQ3r4NKJzBfLq*Am~B8DkIq!<0-VMF=o^dQy%!{c(;M3tz#!|$^aMo5&@ zPnm2`8+fbFhhU6kGu)92pN%*NgKB^^tFS}`SwumCz^%A>5a(D9!Z%b=up| z+sqtNs*DxuZU21ZfM?v4xwL>@4}uI@U&@dHioLME`y|$d3q?n|A7qT5t|nus2W4jht1+@vPnP2|Tuje)|z)=lN>> z1*9xvn&`2!K-O~cQbGmg`1f*YP#%fivXXa}fTcN5k~v=i9efn>BG3>|$8kYE5SDbE z1Y!a$kpsh_))-K>R~?Bpl}G=DbJJjc$u~a!Mb@~trKLlEinnaUV6xf?cJ<^+61TlH zu6NHYp<_}W;%s!9CwrUP$bWs~+tyodKt6wQ}m5_Pb$ zz%eMyP9*8Jj9_5V+B(eK7eM*29yW~4ZzW!!iC#{oSHnkcL$2T+ua zj|5k_#U&H6m_KYI!QKcj7fZLq5^k1QW`G+y1)6(dsHt?)`bLJzLHCUfc-F6t$7M)% zK$?-yu+dUX6DQgv70?}j1gX5YQe02dPCWZ@RBir`ry zSuF^;kpW+BaSIt-l1?v1PPAGISoDUgOeR-wO$+>KA}^RNmgv<5!mmf#gfD;F73z~D zeS8Zfn+||`mXE8`>D|+`MT(vmb%h}0P2N7+gJF+FIEwb&7rEp>1*emtga$qJA#@L; zYL!yO{Bw~FXD>2O?LK7OV54j1%t>}%h#Ce|&gkNeC}wfu%JStOIzEzbr^BXnxvP1E zwa`4lG-pm@4rs?aZDEpuX&Y|iudX=h6b8|2wTPgJ$2?N{B-Gc%cVd_ExNajxI(?l5=4eHz^gn`^KYuWO-~OE*kC-XwJjLGrE3G)-s z6K`YDas*juK?+j}JTj9hzy$?#)9aNM2(|DF?uVNZ?JY<(gF2-#E0=2@f`&0SCF-Yy zP8eTW?jNYUmO19GX)$pn`Yw-rqi@RXjo%eTCe4wU%Jk=lxS-D?6T<+BZz3#wh45cT zN0@75+_ff1mz=~i%S4Ke7DPCNv*y_ikfd^OMuTeIw`{_MfH?e?773FV0dz_PApGcn z9soH?&yzj9ku=mCvbcD>#Mc0pC52;|Wn9z;u{34q~ zu9A9C#6&<6PKZMK=VUh&F-l$$eH2wYpHbp5x&@Lj`-ky*ZNLC91L__RHneZEv>flP zCI-?x-rimG%X ziQGRJkSD~+b+TpRz#r&vZjONDX2+#*VZE&0;()rvm;fs1UttjPD)f6~qYNVAp%=9O zPB*Xi!EPys8mTF6M6I#yWyZVbO%qWt@f~%Pgk+0S4cf4 zf<&y;Sefz4oI)9SNk3oBYM+cz(<4y!Wthjw_(Ff5ZcXrkweeMb-AbS=3wciNE=Wi{ zFw&SsrbTSEoGx^QJedO!ygn^{SnYN}Z?$Xpyiq1IToTfsKpIIX5XF8Bi-9n_p`>JN zGP9#&HtIKkU^z7vNn$qT-s9^ReWZ=3mLgRI&7{sed+Sn?p1}2QzI1)A-!xZ{mMI7H zf$tIaB+m-BQ6oG#QXIxm`OiEH5zwhW18R%jVWz=j6wB3#XrNuqmzz+|u^6`BvCDWK0luflq2N1h!? ztVet82Rs#r2Ph{~@ag=v%B?vkFSHRE)^TekERjwBe;UL>AoU@ex`?oqb*hnodQ~UG z=mLYAfQ8A`?c_EA&68-W(al0h=HRsUz7s%G4(L}uidT(|X-o88FTki7vj^g#PsWb} zDxf}O4kOI~JzHGsNW=ujJ=G1U8+wOmo|N%FiFU}bsoTFRzFzG8xmNr_rnOB{oeWHVtk zKfN5S3MQ>W!hn=z-1V-`+zFephK_FN)lLlNl^xybgPb=9Pco)u2s8qzWb%2+rcd2` z87rCnh7iIr8^jR!+=j`%?h!**;~vVjagi3dvK6+h`=u`+C^QMRtd=HOrq+%tFKu!f z>XAIis${OLl^eCH;DEY;ay|fi`tQr85egVQM+kG&O48VIXoULFmTdwfCw%0Hm;4Sq zuek~w$dJl2+KC|nU4d4@3a09+yk^^J%hr7E3|I#A>YdYdLMP^^M^6%c9xYKGnwGUY z^ylo#!m`i^!vHS}!ydL?F=Y}Oy~+^Wbdw3v-q8UFP~?hGf--*#r~{?)10Y$>>$nOO z&JsNfOdsKoZIQ*h25b^uJYkg32Y@9Rz>$9a6d2(==Zwcq(SB?3FVP)F+bqNsl((E! za|!4k(6%C+!uIJ~ICBAA44nwjq;*d5#}@9Ilk;ZA(lP)Zj*XV|gN(HwSTAClWdOPJL~z;1GRy4~-DBT|sC_ z+KzPS0%VOoeC7u@A^Ag;iddvbe;ol)mLbaux4y;gyq(PJiUl#@PRrhlu%IPDpF1w~DW?3aCWM@z6iPQ8hGDlgm6Jjhd1I;GU2K%-k)PtnJmBrr z(@|m5;Ar+{I&2+kjb#ikvNFawb`x+EER)UrnS?)XNIxWUYqIhWo#BP>nO4KNnrBw zL>!qZhnE>KKJjk5ev>mIp?eYRV?aOz#hi3O{vwCBnjV5QYX&(iU1NBG%|e66Aj9FC%qbm+dfg|yJ#4|*JV;~S9|bFIr-OZ zQgh(fV*cGd$L#Iw%{dolw@LIQNXMeh{paxPOxT~;$KodZvph})Da7F7PiZ{vmTN>y zTRjO$49ru=ei$A^Xre5v64ws19s|}(j&NGgF&Ul$ZX4&Y0b9KhQlnkLBqzs#yX31^t1{$EhVFtt9hW zusgYsSfHoh#3UDPI2LiNn5CGtIiTCZY-G-6x^}L1kI2hmTnqgT`ux@0AC1aeEJcZ) z7h{R(YkKX*j(Wtwg~QEKV?}*kxyM3>?w5r+;!>Uqia)%UMTnd3#n$@G!;PWGA$Ci% zaZ5AK3mdpG3G}&Om4b-)Ovb(d)jnn#huSmkjNPf{SOonu8;xLtxDF2;tQzhSSxR+R z$Vm#CN+!9wuta(VDUx^p9Z2p#KQwcM6GMLo>NS>l>*!die=!Hc+qdo&om{S2iFCS= zr9o^@mHo^`Jm+rabfoy>^u6IwVs};Y9RVExDx~5=jMZ}o5v||WT%F>f!cd{zE-v5G z;RD&mHN?m?FP)bii1-va%0Kvh@i#9~VvDv1_x+j2m=?TFNybuJ5-g_DEOX1)Im z9t$izd$j!zv4bKiQ6|#BgGn|J@Q#c=5BDJa9|!c=Yo>zSyKz2fWVC!nqAMVqMzXK; z;n)Z)`*kCxn@j*(+C@p(muW*gAs&q2^-Cbp3~OMXMfT_aA6~8%D00KYpgF9ag|G{a zF?#vSRvap?2V!jlsoC7^n`m?l#f7rWLobFU0RO}(fuKO6({$NrbdXjoNk5A2Qq6-l zbgO{A2{k7W5=^5zHDP4sCAe}?(ST6w$Deuh8}~rzjaH$0%v4&y7RhJCQAt2ALWQ64 zXpUBts4LORrvFl>c^Lk61o;0KI`=ehGcEQ@=xMRpl1=3%*E|LrOPFpF&;_0Fu)v10 zeefYLfLy|67>QnjB4X74*`QMPk};#68qsINWy8bjR3jPL45lOMD?)gb`9=+mNK#LcUB8hW zJ9|*!<$aQzId1{Yxvg+g!GU+m6_3lAff4DtiJ{Iq4JL;WOBlFtA)ZR6u97MSc@MuuVm|&bwzs z+QyScMVXGoiHA(oc)KLCX|oTF4RQJKc)>BDmnBlf$+mYR_mrTD{|>q0U>6{WWtKpOP~2FhW!K~IBbes7)EEHDX8w-_e%MgDFO zBF~DtazU6V0}ez#yOZS7;DIsvc8_4-f0@G zMKd-`Bd95Zif3w$$vh{Z z^WOpTWxb3^ujTc9P1<-cW^^G(JNQgV3c+$O=_J#A9tDFDgl1+LmFT`}%u!>IOOJlL zeZ#X&u4=Z7H-Xm+41B=YxqBPqjG`2diA7suvYnHkn>oEbHA;;ZCfmFS0AZ&@Dwh$^ zqZ0!Liv6bCkyk@%QLk+Ap@Oj(K#E~KmIq0Rzdi!4jOCdcr?2JSOtw$_*Gg8E3J=FC z`bb9Bh@{7!4|-VV8&N{DS1R+yRM}wRoxvINH%*e%DTYo+V!)44_?9*Y=f}=ERzkU( zop|`R`65b$(&wiS*|ImsL>AkYrH^t`Pm-;Ms%@C-0^{|z*?|xmtamaVxu{(49%RKP z;irQ%zZCQzgquw|jRAakGCBy6RJByd;gE6L>`|DVol zgv!v$)8;JQ(mI?3`R*e0PN)y|LXb{Tw-Ei;fUf_tb=OQzY1?1#wKpRC^DxFx&F-7f zl<~ED++^*%T0F>Szd-)@C#TDe?9i+m zMptV8vMlg|_X79x8Hy(yMbco(ihJ=n{>^X0-YHk{=!eb#hG7|f%*L2Goh56#(MQwI zGkTCnEjE8MF3G{BLR@PM_jlDQXiTvN+!T@$7Xl#~NE8=%bW6EO`v9}zLKC-Vqo1W^ zGH2t$3CO(ydch+|Wf)#U20>@vYR^#@bN1Q>6#_aIpaCa26BgsrCFr?w{ao~66ouVj zXnD;1U`<%P2oJG_h|R2QEP2~ARQ%@`# zxht>ZR?Af)MZgpSp3B?dV}SIz!D*llV0T|KAMO6!d(Ga4Uh`ZY7^82YyUs@DvS|Rl z0lL&mb6r+Np{oi}^X~%&v>)n3DedY)59jxYhPfN=qJ)H!dFq-|uPYTd*hiU|zH46D zM)?aiV<4vU6yF~b2X9$+`Z^fT!37cX_fS<#8SoYq1P$@fk%MMvN%Fwn zq&4IdFA!Wm%e9BlEKT}F_*~c!tK5VoSpsL>K}Ns>$;PAR zaWm4pe<=R4hPBYX0T89AJ@LW-pHhAuCa9Ig=WfO(eM`10TBf%>P2RptOr)0G^c){!j1dZvh#iL7c zb9mJBca0cCOV#8K*=O6^bkXnuEcWbog~W6(+F7DhtVQ>#8IW5|HjB7D?tdLdRP7h7 zpX%zhAW!I5$fBWHj{Aafh$4s61Up-oSoJ;T<_tIJ0WkDM7esF^Bd<(Dn%d^B(_d~u zr5NPr@&GNxK7dlj?r7d@G^dxXKzj0t?SBfJ2DI^Uy#cv+SFKjT9FOg{_V_qk$qQ(~ zbv8GiwHNB8PXZ)W`rdpQr<=V|1A6pyjh{`}Gg`>kUdsgN%D63?9aQ`uHM@3E!&95R z1UC6>my~TzKGTUbY)n|o*51y3=L96YZ9H`Q?XgHQpwA;>5ni%A(x#Z#V&=i(HOrSD zf}~Hg|HN{DV0DgCWHs!{)!(2?R>=U4a&?1=j_8Ko0{tWX%cAAR$psXxQ&C64AGd6SWvNQA>T{egLouAOXC(Z(o-Bvmr5H73^>yF zua(}Gd93G4=Yb!HYpnx7H6tp7NM&JSc z`D|cGh}Y?I@Gq6KEbQuI6YVTUus_xJXG9>Nw1U$e)urLU^&1Ejq&BXbEJ|Xgf4_}r zX_aOj9jDEte)VGHv(^fD_0jlib735$;&(%eMq8Qapm)W;cuQ`E`-(V3=rbKX6L$$_ z1B?^fDI4xw+BKDqu7RRz&Rrrmhiumw&cn|zCnwuAOqh4v)~o1qb z$Q*%#MY|Hxru(tw9MGC-@!Us72~oy?A(4hp6%O+(?q|xVoBtWizuq2p9rT1Un8%*TO~y3K84}^t3VpB%M=ZqDj?aVGPx(772;}RIFG$|B@U{T9ng1DopEA z-v`hU-35GK?G^m7OcT`u9?&nR>7|5SV!2UAsu`9gN`2I@>PJ6}&JqMOEcQd4s7_3f z&Qe;wHzE#0u80dlYlY5f=H=QJ+h6M`_o5q?eg!^QC{xMtQg|u&8v{aZ4?DOOrKFq& zKH3+_q!~)ZN{rbHZ+CP16$E!GTN@~sZ_o`LKx3IKz(Br^JQ#*58gY+43O~#Kg3h}CG0>U|w7<%N(GS$5YR-tIi68xC3di+NxR}Z=H zOn(Oly4Kr^yuZClnI4AGrot1`H^M#M+e0l@YS~iFw?{VC9_B&a==*yT?cHXSG)+PN z!UEE0&r>-TjeBk69bvJW$KX|x(%YZJo--c?Y^CIA#DG4|u&OQH8X3LV-p!11GWL4r z>jBbd{m$JES6tKyiNK5KZ#T-dv?||MLV_b&sCF8TN3L>6y#?Zuv}q6HupA^QX|d<( zH(+L4;>;Edps54stLqE_fC(P@vP-eu%T z+p3uYzbvB0fJlnwj=et4#?h3@BX_;$W)~&A@2n}bY9odXY@nAtAs2ht;G2&Ct#X?XvhGz$H!ucHLit#`axgcPS%0htBMi+rngF@;M z$91oUx8@vgSFU1vW>(Ll`pwy_S61M`$T8c%J*a!WS3h7zmLtYD!b_*xX0cG|*#>v( zWqsl(q6GOS-@Ceg5WPh$ho#cGmjTm5J9rPh{5}LWU@xH=T-Zs{XvpQo7hPh{82eeh zDVR~w>7nCJ%JWX^{tz8H1#VzyY$$#y|yrYM6!;JtR5@w+g-Ijo%h zBPEpMu6!7*uiq&B{ymj~gaPy;(~l#&o$+CFrx{+-!N@85zK3zao}nVN#&wQMgYGy~ zd2o88;p$n(%NU5`$t6Bg-<4Zq2ao{y~|06 z+Tc;%^W40C9DC34hobknt!bs!$#Qf)k8I3)@Sm?v-Jo!*UAqk!TjxxqYNB)|lK=WfzERr!Tg;8`E1|=g4!_m{BETWS zxOOyv2zCkr)hAm5Wx{q2=tL<0mw615ROeex5Ip#PiBikx7JC5vRy?7Bat|E@90Rim z<};81b*|g-FT{Xu9FK+zhFT)$M9N?$RxoK<$_o zVhx-5QH-arg7qg85A>Y5xRN;|;bP*T@bl^nyUC~?nLUc2FyjCGUM1H(_j!JROyrew z=V7<|q7fjVy*@JqSBr)p+$OygoH{0356waxRqtoXupT;ga>LmG;gNqdOUZ!)Xy)%$ z@`K!Zp5Y4UO~`H0nNu%81_uLY(pbFmbhL7244t={@>h$b*$$FKAZlYmy8kTfV#rj& zklP0nX^aTyjeyNjYUeMdho{IG%ibP(8(8;dfM%1ycZ{saV&B`X5f7I+90acz|2MW$ zUyw8C8pm@!5EB9WYqfq_cQZIom?6asWx5g~yx8fOHm;Ec)?i>*@5!>K%xc+xLQ4L- z0+~qt+T>pG`g!cfT;Xxri{|q@c-1O?E_A%GlwWF0_$I`@=6I@viN*5_VIG6_;8b}a zk`j&BzPTwukx%XDux$Cna}Ma?FB&-Ckg4doOuZVY;G}^n2H7Re{DgS__aD2)PT8s6 zx7any@~qSWZ3qs?>oVNwWk9-m%J`b%FulS5jd|2a1J{EiL+6Hl)yBayN_y`O;tkAM zPB5|r*0gD1vXYmMK4d{I*TSSUU^zfH@1Ym2=6XW4-00IjZet6~9~Py#F%h-K4-W&1 z9Ua_)RzY)XttuVd=z4?o(O8tr!leo{*aZo(CdX>jNcVs_I3w>mK+dI$V?K641s>mU zZ6e>KW@#3W&5@r2lxFX1yuYZ~U_o2^2e#TiA&;nuy3x0(#klj#V|^ z40t@wNM~nNlOWxIs1nJ3sXoMXLnanw1(gB4b3aVQlq1q2@z}b zS|Q?-_EAKq=zOXV^0+seaXRR4*tc98q3x5RPBdEublfiJW|mlO7uOnAfQ-hD)UvD6e%s^O8s1UVGhh zfH*Z|{si!_+D0()5Dk22j2K4z0~3~2=@J30cxb9(8IXT$7JAl0m4J>k{b;%Y72p#5 zM1K$~o0>R8-TAmRLIrfm(Q#l~g2oJMiZ0ST)qP*512#aPK5vy(FiP+dcJkn($+ovV z=*flU(O`^T!n~y--~#5|Bcr43VOxeU!vH-2Me!}!_Y&IP5$9#C8Pm-54Zi^QpK9Dk zrn(s057~DX1i))Q0SA!k;H(uB<_Eiob~6F`?Ly;Iv}ub=FLDu{t-!z8%5}2$L?_zi z>aOKg@_hZSIq9~8eix`gIGCd3$>tQ?;IDy-)IC6z0}%lMx#R#y8VC6)H|S5evj$rC z=-Nxo^(fy4d&6LAd0S~M;Nb9jGB}T3>83C=FL9^?`hTZ|5oGFVm9N0UAeQ3F6H3YA zmyH985Ow!Q!vq$f)IZQP*Y7Q8vA!O=X94~XsqmRZ3s=`mrR9)%daY$t$v35*)^G#1 zyTcu*)&5>{M>FkE2lu^55(Ab`c%xpPK{W6w84g6NCevL!AxYe%R3$R+S z9q)&Lj&4RE+CWjZ_70@$e4Kiq-xe|O+uMQ}Qtoge-ky~DWV)nc93yiaYu z`8*^m@DuD2_)iSrM6RffLB)*))N0-jJ!fnDDA<1*^s@Tv-FSlPfu#)%mrb!RjUrzrr|tYk91{VAlBu|c7Js4<6G?g9M_EiqvY zTWr0@00~Q9K$aO4x8aj3dVT*MBO1Uvn7YvixRm=*PlE$59aHEUHhI5RgzUw!*F%RZ zKtMGz2{&Th^qAh3SAQxUlem{HdZn-tf87lriW&M@F<;((jDax@wo>ToADgC4BY95D zZe`_qnhQDk0`%nR(>K8c@mNp{0uUWcdJ4J}tOy704?TS^^xRBcXK4@pFFe88VmB!H zOGHrZQ;4e|r~$|`V~r%HK?G)g4FflE&AL6dw-JUO*b{viibGH~9pq5Az&)t+pBQ<7 zU!tuNp=AytIn9#^&A2hQP1Qfdx1$r+hq|5B*|%%JPu8viLjbzd*?QQCEKCmD!lg{Q zTMH$ANVerelYn033!ie;s(V|Mh)#wr|0q0A3AUeiXNxHDNDKnjwkVwP`LpJtk^ciR z;5wjns0Z;`(QTHOdIofEMl7b-&zdTah!OodMb~ ztqoqyb_}KEuQq^a-=VsYJ}qh22}D+$gpn*y9)zA;fEdcn*rDmTY}?1pOaVSob|!_E znwB)+pi6S+xKQb)0f@UR9IUDRCtfBXb1JGL_)tKf!jXeJ^z@l7{Y9D#V%&wrU3Y7@ zl{6W;XShj6Ed!1yGvbo{6gZhXy$|ssoOIzMI3=|PYQ8n~(Gq%UAgFXFA?N|+>Zzr% zQg*csIT`CD(}&72NB`48YXQLQKWXfJN>bcx`xM?}{st9)svM5XYD*%VJx_}EmopB0WB4* zo`ESg4ABsZEYc@GTAeC)>|<8^uKh%e9hI%uMRynk{4W7A#!Q=1vD;Ma;t7m7Bl=@K z9&`A7XuUL=oP&P6y}m4OS@HF(Dmco{L9C@#Gk=VSofzhg0WG0l7`} z&;h;V^cGMxUklj07sT4>ytCF0u`B(wSX+`Pa69Vt+Y_z*y!9jdfq#IB)wqup18hR+ z9|z&#TS|TE7iX*n-5=qGJDX#(6gvDY!Qxe6Tt=(Vy=QtA*1Yg;?HqH}c`p(TDf!;K zSFN2B7FzROhpIPQl16vAO#9v8U8f%ep?-kMn`F1<0@*!CJR?HoHQV3Hb-M7C8I@rB zg75$zoQJ00|WAd~Y11f#TOkF_rkzSeTg*D$C=i}*k9CJ|H3hoa^iJ`lQ zp?viE?b$_ve*}aWV#D$c8GAo9cFKMOPXCutY8w!*MhC&la%j#L_jKTDh&{^~V1RSi zprt=SPX-7j4VwP%fL~btX~wU4+iha>%jEYQ-I>4YpI$tNev*z3D?Aj?TQl}-Tt+Q_ z-zHz3vUlSz3iogPHz4vO?~5|D=pyAbm}SR7S#IV!WL{c^OoGS@0rBRDFX0;ldfQEH z1avkqdc`dQ{`8dBV-xQ8rLa}Hf3QLyIzwyYbjkVfph!>)#a@@Ds;e6->rQmVeXo-S{KKFUg^en%q=U?0tPv&L`i73*PnxDU#`se@6FX zPraCfhi8VR9`AC+IetZdM0KL=4(8TjP6Fzva%z5Fs|@y6>9>#;v2e+J1w%&7-A$j( z`)8|8*?yEk|6yY`Pa6zLO88{5&FLH?4Q9=0`bC}2)dz@9v|lf9)dDpjaV$cR9Q<#z zQWkP+ym`1S8Q$DDDIV_C0@krGr&(SDgxU?I*J+D!V;bW*Ca`LpZi}1xX+NaYt`*1v zws$R-K4G4M(~0DFW3%_o^altd%CgXtRb&2hyrLlHLi*F z3t%5vo*T}v0>XX~f;4d;R&bMBE&j7D;%v zqfLzjTsz(Yco|GZU=WP?i^XQ*8ld?ROnDh&S2)_ruVo*llb z<=acbb4IZ62(<~Mf?2ak<<>28P~UP=YSzI9dn_>!efv@qpfLP)SJ959pS9TB{$ROrN2gyUfP7rmH$vAf+w6I-Mx*6Kj6o7>O~f! z$G1B{WqT>^Ub89(_^c}c^)Sbi=L>7A)`$%gt-T89D!7zdbEB7mc3db)JVm#^1#LSb zB{FB$W?J2X_G1{vbFY@UFHD~k-u=^8+4$3COKrrTDE|iZa=>kzx`JP>vNPu+_?511 zItn`BjGNS|m0?=BJT~@L2^{A1AmCsaDxkM~*jsP=sPJ1Ya$-yIj_(w03m~*!Tg4!g z16!6t`Q5%{74R|pT_GeAeU;;v|3V~zJ0FixxXj!obFx!fAm6l!AxSD5){?308$sX>IHb**G;N44T zVHv`LoAZd_+dqp9do|6JZo9u3X}|1Yws?5_6qt<2 z+YJnT*BW@oZ2XskWPR=!D~-T#U!jUoq;wiew#an5i}fB;1=WYf-xi*Dqfmd={%}~J zPY8_u3luBS2|I?maAXgKW3OcEL{f z573MMIu+6v$CfL@kTR=PhDtq)46*XXs5~f50pyO}0#7p@S3A>2lxo>1%S?0{&=7A8vKU~L z3!J9zVzavs3=K#a^~^^_g_~s|`}7(V+%03@q5(I5-DR+QZKido>R^DTT2k{|_^g^x z#7PvP0)C#tg5tAz+(OQ1t4BaY@K7dmFyp|GBeBYJPt-Ha!;k%(Z_EY&Q3Qwo6_@i7 zsy9oZN*I{1`g$}H-;j1aBl*tc_vp%wcmYQBHck_cUXFNXuwF-!1TljC8oFjO69GCE zAr}yy%;!12!rfeQlm$*=9TL=L{?lk~Zaw&F%2eaTLU4>kB zd2zU_w5G~+4LZS50#zW~@cl~f(J?~r*XGL8vM&YU&(D2l3E7z_!;_; zGnO94#F=(nE&dszLGl*W2at4b)*J-Wa<802CpLRPe{@z)4f*6?Q6^h4*c=#az7+<{T~ag?r`o?^3QDQB2=Gqkv(WpmwP_+R zwOlYe)pd||MD(E#0SRO{&%%6Q8)PR5d@=oF}9Vra&pGM+RCrw1#G z!>lro!}(D!lMFL=xoR(9#lQI;I!#LX(#49|nKp@?P&kRO3Av}h2w-O|+kzd@lv=Dn z;T+F*krIq)#fNQLFl$eAjIV&aB3uTd2X;0WqV0YE(lG4;&Yh>!?IJCGc1rcpW#3jR z6yRpnWE~z6&{0!4*M)EBMrpsVTvvcrxLs-AG93WEbMuR!KYbUs9CgvM-hYu#f`S0P6KqhGD_OL_(tr@IcZ z`+Uya&2&k=RUMKpw07+37rs40%aeV~K^1}P{xpJRI3#*2COv_PNN;eslS9B#jRe1& zK2pRv#dK8pk~DS>0AyQCc1Q#?( zwVXVW#9dLsr;PKCG*=e&Dp^+ZaFeQ;SG&z8jTzSHIUq1aK;uuS841}GV9~LqdW~j( z1+W4S=KJ#L{1}w0lYOqnZc=?TS+AHqO9;>7Z<<|nbSxa~T_v_Zd>tOLaYTxA;7FTI zoY^`5OwgIbS-XCjmxb#xr*_}avljpyQds+s+#*)1Vo*q(_635jlh^6WyA}Q6;I7<* zu0LHr%`H}f6^n&6>&A;2g?eQ<<3A4QJ%@q~#?sIlkx|o@?KI{MKih3xrQWkfq=6Q~ z*Wh-a0v8tz9>wmmRj#661{u5tsz!SOP@Uz2v3x5{Sj}4Y@6A@-9e%VTtF)~4y zz0X>9{{uy!8etN6T@qyql2Phe@7k8qEK0N!W&+0aV!+AQt*K|6D?A_BQKoyY_=`D0 zFw;g#YX75C%R|X+P;j0LC1*swlSVZs>@^DA0}SC7*Uz~b%20yW1}&Eq*0zom4QF5j z_W`ZKKLdI$LTe$&4T2isC2*^tUSrb?wvSRMljKMreySg4F`bzgnyvf)**g<3Ijdst zS0W06auo#;RDvKNYi6>?@In?MBLqSgq98Q0^kkaM#`H`=z<`Ldsi=U8q9O{SxS}ZH zii(J+xZw)8;0`WVMZFjG^8KpLIq%kQ_jD(d1wZcdc*)Fkzsosws{Zw_O-*njD1p|J z|GU+I4k?b)<%`!*kC1XCpLIVV-709vDbqmT-|w2wD=eTy_+c7l2r{BS5u)t+cSRoJIn+#t7nG zN18h)9|&ddmN$3D*}0zEZeA798DLhNMwSvFZNo>_opZB&c&a!->xLs8`w+uB%)|Qr zvOFyg7&si|#pppAcb4W}iFh{OC|pNX7p z3?+we+ikAvmN(14>o%cfpIw^3mi9IqAkt=$-&T8e)tTNL^B>G{jk5v1-J8Oc;%s{T zI&j&VOWMDTT+)D|abrpVSx$(?3k^;CCfz^2J!wjrScD8NumZ}5fRrxm=L$#yRH`7@16oQkXL-**7wSV<-(2NJNsWb^ zaUyGPb5KfEo6_u}+2$2Vb>-pG)c9)WF*%#0D)mLG^11iBS1eqXyt~Mfl<$CL zDl_4{rz+q3K)_$K0X;*%2lS2+Nh7S`$2Ts-6SKY(r8R5AYm9H0H-ith39#S^a4x81 zr>*6Ev}yB@bIu0YIg}4rsqZ{+6cQ{a#88kp>2b8Qa;=86i*ti;%`SUeh-aWYg1>5l zQHa38G0w%L>VJWQ@4fQ+EAM4W!!vgOnAmeXZ;hVXJkRGJGtRaj_pw{f+eP1b#l7X$ zHe@yA;AXrl*|(P6h#Yp|2!}%aoGHYB^ec zeoNc?R#Ky-LE_!M$L?rLw3tcsX*0Izc_35=!9;S>#?>a&ku2O+G?0&fe-A8sETzRp zJ&Y{xBjfP$7~ISTMC{w+nX+O;=Zw_GCbNaSqRo>-`EMegYV1wL+hU{v!#Yx(!TN#G zbde|G!ZoTjUaOvaLlQs`Vy(HnoD^NVi`^jvuw2rv-%&J1aYN$l&1>#V7l{iUu^3FX zdx2)#ecv1!mWJnb$|ehMJn%b=Dn4&UH^`}@J{?~6K)Y=-%2g;L&8;Q@1f^!z_G)3A=LPmg@`P8rycPF`sKoRHSARY; z!MD)#qMl+5>sfTEbbE~Y-*@ZCO}&{4=`aOHahD&(FrcB*v$>rymdGHy6(gGDsiSPX zkJq(vVTcq0;RW5&!9=5RHzehPau(KzeMeF{-HiY8jMopL>9FpHd z5^4(tFQBncZVAG+?^!+Q-MmO1e}SdVsPD*ZHmK{5Ck7GsVIcO9HPOq7LZbscjc!ga z+tCsL?1X7bXCzZ#XU)5pQ*-{I7gk5Nj5O1y?B6s+aV_u;CF!l8ZG^sPA{-1)ruYMI@)vRiNOiDJe`Jwn)x_n{ele?2HRYQLz&ABq^n#ScV0yO-Cwp5O}`wpf%GzuT!Y+uz&+9#4}5m)-<-^?lO!T)tjN;giGHS<5Tv6wREGsaJXHLTrM> zv3zFkeyJ8wHTiGp+&3MXR9HqC|I(+Rxs>0MHlwsA1S>5CcsW0!mu>XYMdXvHN00*i z`8?E3Y!};FO74I7gw3DkV}@@2SgboTM@oZ=O^@_==yjpCd)|Id;IY3pZvu9X(FfE_ zziP6Jm>b(S@Xhe~xSA>sJn7*!9x2;Z%A!xmwj~CU;80-E_FC@53G><1c(psvtD^@r zcf<|iMsU|@RB{=s;c6XiwM@b_Eotst8|@s)JJ8Pke6X>0PF8p$I&a9E_aNqHhEe{0 zOKrTriQ+?ixJcGP9+l6Ka}V%ihFzQ1c?r`-Vr(ZZ^sNV{+)V`35EG@;R$8bA!xgl{5MZnf1@514rYEv4R8B^|>HLacXiCLSz-JcfZRS zrb6@Pd~wFx+@{y}^&sT_$&r`1_;7!DP;Mri%YVa?Wq@TDWq}xtY~sw;24#`_yu$X7 z!suSQ85iNBxSLy|RI!;xva#R)6ME|OR^=OK1p%H7uKDLFB7Rbbyn@^_waX^WnwOxR zJDGD0f@<#FO-2KCU}qrVh~3$6656&^N8(B+MX7@Zj=q;|-0HZ=x&zOaNY(i2!@wd1(UpR7@wj~vm{=_r9fb7>&C@2>OTB`~ zfFho0bBOGGRePRT9=WC|%6|Mzp$=U#hWp9`I_FqN-oiXQkT4H`ri;G;`-WmF>G1ee zY3R*710JzB`TR}Y)&(x#U9&q#@Klc>c}71>Xad9u-^>j-QCCb$3&Z-F7qqp~xPn-- z3HPpP9^#GSbhzN-bD6!mv=g)Irx8V~XUiSY41Mvp+mnIRC_z z{!HF1GEd47i8Gbn3etXSP0Fvg!njgeTZePmx$eYrcm0q(`5`!K))L$i-`7BAX8Yna zcwqT6$pfk6l9-Ejg!%IIOxYS(!ML?Z-uMd}3E-9_&%uma482ibL;G&XhTAx;x@yb-QBq}_i9X_$>Ec>=jX3Z~`A zTxt*vcOrRH?LeUkHW87G0pU^4$YXM(gZ6TOTy~|3i>V|i7Yf;K!yDUH0!)b^*UUD} zbJCN-e|$Awv-55n91Vg>%RxXKSl8m;I)St(_e^T11BO!pWa_++L~hN$ndqqsJHCIGbR0Wk_bV%AagoNpD}g*s1Y)i;{GflYe~$(>g47B`Oy4`#;<-HCxhT^cr6Z-O{0JI1(`+Klgd>*Ibu5f7GyS~|`ooQrT++;GlaU#b1n zM>^Nbk@rH~(Jw%ze9a+v1@D0+=^U(pY>ZR}PWG~LOZ8U@$np7_`dB2t?|huB!hq83 zVzeqlWIs4xJZQJ^-Tft7IT4Qh>1$uCiE5dd0J_tw)Hy>P0-t^Qaq;{ zU_3@=a6s1$@OJ59&^TutmumfJxqAG_DhAC(@)lYFS?IBjscEH~Pnc~)0v6i5<_Njd znzLpFl>Nj_JR*r#DN*ulkV=bF zFg62L!KggnPnK{EMdbJUv&!)_;RfDj| z<yd-z^}m2EdEEN}IySpm-cm#1gjEdPb%$(%g^_g;500;<&D-VS`*_S;wN7bW zxpR#~tX9y#+V&M%W0bMcauTKV+RCXacdef+?y~ec8k9XK4^3`CN##%$x66U_IT+nFD zF%`K>TUwQV(~uW^w`h${iaPa$3o9etV=%8Sa6XZ*KBMugyN%C3n0rqn#-Z>vRio5i z3u(N7W&bnb05iS*D@bu)rCZ?zHc!}C>z*a?O!fSq9~1h`bG#bLn3jet%pc{Y{U3`NSfMz{GW;+=a=wp=k;t0l1p zHzD#yx~xC;)6y*oQ~6c}IhoCQ+{ec)3*!XMfQXk9c&hzngNYb&DXH}-VqSJ4>gm}F zRcr~@?AVU2R!KhrWXo22_LR)j?Yv-Z06qj10H=)2c9jcq_2;0Y1Ety4Nb$>t&xSsa z)ZwYf7Dy}Jpju-2+s~-Jh^M<(2K&lT&k99e7#eki8J(I~yn&n=YdZ2V+|LHhLD$wD zwl_c59(1Y8Uw2a}2&+w{f4N6I^&@ApmU9%!k;v52HnaAQb^K26)A;}R0#VujL5QwV zIiILoNFgvZv&YpLU&!X}8v;a9Nje)meoB zEfoVxW)GEyE~U1IZrUI=|DerK#&R2c2&OS$l8p~g*xTYkB-j^^cW|wr$e2S2Z5vny zf9Ig7HnLMhNcY(ciJVRF2b(Q}YBM;wO}tJ}{$WwK^&G0LyGps5>PYteIix{(bY8^; zrk`>}P^93FB6WZkJ(hzW$*2Dm{9uQX$4?*4z@~H@G@cr8@D#1e{TE|XwHuuWP~%@X zlD*0O#B?|>Q@*$djWx=vbvCO~^}g}*2xDq$C#PzWkm&)-6t(f76cSThp=Bl$Hh?}Ya6Zz7X6=hitlW9zf&?26iq#7WJDh-HjFh1T4WtRiK@mupxz z)p}RtONpR2TO}3ixtzf!j0_Avv!t2hCC#Moq#aT>MQ{AjO;@y`k%{ggTnrqB(@cyl zWsduYsB0y>;P?hOxz279)mjNLq&)nlJg@p6N}e}6ep}xpcJZ=@L4R^{5A<4@J z^OMyc@$ojy>-s{~=&z7KJYtcQ!s|q`^F^wK8niLCO73TITvHabh6p8?Y|SVmdEcjf zc&rpB)=eBxf5}gk7#LbJ#z5Ns&ec_h2~Lvbp%#R*bB~Muh8GP5EZjd zRowlw=0v}s{C9AdWA5kgm)GFA)XTFNy4%Z*M~h_culZ=_G%wh+Lw5DEhM|j6f zU~1zTiot+3P&t0UlD(kjW;4?zvw7*aNIBh`uTNgtDBIwJ}V=0UuTtu$~*_~9|b)DIq_AZi`DpuO;{^51mDiYEf zS_*&X$3%v7$}Qd1H6=0)IZCD?@W?M_oMO$>`tOSt28Cw*jDd$biDVf=$kT#mXtq>4V@_<9 zEo*Nhg`V7?ZKv+QuZ}|u*Hs6_Q>A;P>+_E@{m0&m&rV|Q^}nmxwL`;FmU6lE zw{a1Z``>Gg%d$8p2ybq6o?F}!Kj_sJeTpn1IrJ;Rz32OJ^;BZx*jjxUo+3oQ7ig8- zP)R9Q_puS&73LH&;C8f=ie$>C$|HlF`IPUr4MvN~;kUSeFA1TmfmDBplOdb3FllWO+=r6din&%5>pW!zNF1Mu`zKpPzE-!1naseg<3rE=2r1d<0rkM+`k z{ZYC`E%A~hpR!!)$EL}jT#|U9*em*J&`8-sdp#ga%A=6oqn*ZR+S8^uC;dRURFX5E z{#qozJWqYs&Yo~MeDU9cp))tRWfR>u=|@*ZjdqX9OiY&Er(Vj4PjFhO6>8N|_Tb9n zTcu8IC9=99L{njp-l_?<+18y3kbl*#k7za0ej0+@@x#e7)-x<`e?!nxe!GiAd9ZVB zWi{j`q(oxq_Z2UjaY#jsm6Jd9ID|6?D6yf8m%PmH>Q77SbEPWV|CbPQ$HDg^3 zPFp0m(k&Q0+S#u|Qg7tAjC9K|zVQ&LW}1748n7ANFU8BFRUe6-?sBPW83!WO78ui* zgB@TmsrY8Wax0xNNNOn!YHN&xUqEZIQ8}C0SJp|`={lF$ZtW@!v<5oJV$P1fb>Zjk zAt++(kFQOxxvj^(k<9pm$nhgR@(`{P@-|Qz93!R;Ir>RbhSFY=Ns=n=y5xb}K|P@s z=gH;YF(%sA@miF6v>WxdqI;O_1Nr%_wZEhW`Cv7O^Or|8eThQ1Sa`Gkm;HL2i`wlx zfY)%eMkZ<&A(B7w*8Wq>7P+UO^{U;cr$W!o&h>g^;n6VY?&k&e<2-BTb^6JOQ&W9H z{K3ho%hJNfAwtTj%bS0xk~y$B2#|@Y7K_E_q1)-%7qggh53%DOiXN1UZloXxEi=Tx z2M{*LVV6osoAQq_eq_MQTYPp)BUlYLNX01Z*o zBhyr#$qY8U({iB$D`?sn?uMthPK@>MCO!%lxfpy*v*V*gmOb zihF%`(S@<=jtlaHFyDoGUKx74A~%IA{vb>cV30Ro@0QcQ#8Z|!3a->iD(omap{D_I z?&6`ec}Q!6O_xkG>WR^LAx_Jv;ar-Y+|i3-= zWz@+qro$+CwC#6%lR0bh;vE%_+6d6o@EVlSEe)-aYcJG&Z;+RemTALGg^%bBgyX;` zEXK^+9S-RndUcO@?)gEuS`~|aK=Fi1YrN6^bpma2YXPQFeX>e>pM(I28Ljynkrw@8 zN(om{0*SehV>L8F{$m%WO_7kxE%E={&;Fars>tR)$qn1ZPBYJ(MtE` z)vyw77fD}F&k6{;n8~2?cE$3mPwX6VSrn1{6LPA221A?~lq{c_6hlB-P%VM#4AxtN zQ2w&xpPtPCV&W|w|L*y-`?1sWq`5b~+M~_e_eeei>w&G77la~&G&<4gs~ZnbC}W7E z`zEJ9eKez3Ew{{~L~<$7o`KHwUBo9x$naT13mN4x;E_scZIF|Y{an8sdnY{sX{UmR zef?GdjM^Zx7BDIoy*(s(aj?j14G;Dx7I}$k8K`ymH8=a)xbnJ8qg?ZM5hX+9ns4CC zBj9oGz+}7Y_+%%}OxP2HL3KU{Z`aJVBDox&+UABR#T*V>PJ`hMi6_(LoO_cJF_}bO zn(!8y@+hA`|_ys&~f7|TiM)HlCvzM)9n;6Zz--|>v_9dSr z9!N|AjcLKaH#1g(4y9w&(UP4B!_@M9{4&SE$aat*Syrjey8k3mjEuNgPR)Gp7+ucZ z1W#t)_vESE)o08B`Rb^Cs;R$45{N?qGW=CfFoB+xGwFAItee9V=Hh%Cd%3ogyd>;F z5(6sSk=7}pcnh0Tu*nTLd<8Uevpv;Xm9z+C|KIR#Iau820MeRm^0u*X9iH3Ynv3_X z4-wAv{II;!r>m%oR_fMcbAa0rAFCb&7xb^U!vm|_>3&?KG`T5*G^>n5=ltM=hD+Jk zKwzc6f#BeKYK@47LTlVT`l(#RVH%{Npa$Hm8w45OPZQ#NGeaRlqIkrU5WT*7cq zmuMzmd@^(Asr92w>qK4H*`zgB95UO~=rO zBmUq>XhO==lS;LZZoOKM9hSqhKgH^mRw{GUmFeq5RYSwyU zpb(2ra^E<)adVOw7rVBIwTC*jScUxvn@oP*JZW>uJ3Tu4B$6+3ADJ4~y_h#3C~Iwy zo`YekSWuo?h?8n4OxqHbdj8=RONe#KTTUjxudze<;vtU{OA(W2y586RbaIS>rmhbM z1DcumD(cv#c>5Iio4qJ}cWogkmG>^J{>Sxvedji(0>eqoLF81qZFAEs!*!ZYbO0nj ze>)G7C%Bzeyf^g)BgC@uM9i~J14|8!3@{Y->|FAZiEE)J6Uj9sok35nrq^G{o!A|R z&%9l)d060e1YsZ$_}4Om3QWfIU8&dLG}#aZr(97 zM%k^W$Eg0xwKmW`mH##V6}3}#xxvmsl1@kI)4F=BleqW`C&y5UaSNB$C>EKEv553)!m==Ukdw0pEc-t+Xw@5yB8@Mr*38B3( zZ@rxU*IEfJuYM;hns^aOEXw7<%$>{ZMG9MSIMDVK8m02`%=z*>R}pC#$z*6+pP_2s(4fu#{1dIAn@8RUaKc&iGQlrtK5!C0S=Ln4`8A+l59zjhxuDEWZ$N}5wNHPF z$aVZix7`f(_55i$TCB5Q_I!e49o2V}sVHiPwX|;W&yZ7&&UH9h4&u-Km9COiB9cec zBR}CI8YT^#6JXcw;xu69vo6z1ZxhMsJHw6AU9P9JzEY;~<8OE5Yds~+KjTFih75Yv zK@L@!g(3Cm4}|!{C+h;i4-|az&3rP8oAvB{@V~FA^!K_r9Noa)g+MNQMrJh;WK-f z->olxU%Zig_UKqP+uFHiAB)6!u~_Y&kaCC<<|?nMSq4{o9r+DZj$p0db93nATCStP z8@u7|NLW~T-Ff%hJu(;72irGURCfH*_?>3*(}RsPf=S}y9z{uZ`$(3?U!KO1dm=yC zf>cRdk{2hdh%R8nr&B$J`?A!DFz$$Z)zLD!d(R7UWpeuUL~amt`8prW>K1*q!~E*_ z6QRGF9zRsy7`fEz2IUpJzXp%jw#lCpNn%%4#7C6x+mhZI);C$t9pjyx!&lyuyd=AP zEFZTM_)p$;e9h(0&&R@h`rv#y);DN%H8Kh+m~lX3elvVI3|GF4 zKWgjogLoE}RnMd;k8_hJWvf0Jn+`Vp8$poKTx;e3oPvv4sn_MSq%P_W?lYY{53!8n zg1RJcpC6}kXDB@xiiKl3hj)AZ(2#}6%H%`HtK3dIIsQo4O`QS5Fp)%wZWr$;`eHwx zTIEMp@{fh8Oc@gL5HIEs67KA7{s${YJ3Ht>?FRQMp2{l?cItlj0@|Xk%%?<7KT^%_ zUOy(q{&gb1d~VK`9?dd?R_2|&pYs{X*`a*GB2pS8>ZWvjfJ}UC&AN7K05h7Eq)w+L zP-$qXq+Jhy))`o%aZ25s?!K|XHC0SbXSXY`8`}k7xJKKh2XKS(ivzApHPa18+Bnxp z4pcGk934|ENII>8$SYYoh!JZT)(u0M(GiF+8>lSjZ^@4i6+@kvSP8lX~oW>&lv+mKuio1JWFcp-ADR~;IoIRtNDo?$PQ zJ&W-;7Z27vTB|3geFH0$w0d!OYqVE3DZ0)sxs^uor_*8dyjt~4qaAGSm`~G(ZE8F9 zjp$=UQaO6bsjS(6u@2P1GS|lb!KbSQJ9CuS1{LJAql_b4h36@f6F7SI-qOcae2#tQ za5PXYA9;rILE1Jw_4w()ZHJb!S1TkAy2BI6*LXmUVpnAs?x(Bh4yrN@=rg&qoi|hE zJ2q0@2Xt`dbNmaz@O1b2`=BtjJ<6y$rjY*ZOJyNfI_iw&<<1e_W~4@d`pc_3yJKHc zvwuyP!<{UWgu0F7wdh-yQ-=GJGKfiFrK&qD524A;Zwnicq4OG@ z-9Pf&uphPqT|_{8I&n;%y)O?mHn`rThuQ{iQL~iES=7o`J=ayOJ}TwDSF3jO`X;$h zy}a(Qe7Uoi9BkV}XXn_vMM#wUsJzOHP0iCcDF|}*K-g?eImVO4Mw8BlmhU%bIc3pi zPLJeeidhgBi|?K=-+$LR=>xkdP$R}HGZ1b{9XbcPDv)2eg3@+|?Sd{19Sy5}@*abr z^hr$cM1cq`G(>Pz00f(^gS1ZOn)J~_mS2W!ffh6sUS zM{?)oJnojIFbhwKeYkiD4NCdgb&>ccf2T`;UxEDR7J2+zih)bv5%F5RQBT#KZcB@{vgPLSLW_AxyM0<4~`B2H_9M z*`|D72JolN@_gqBQmc@^O(LqznSC&dT!r;Tch>6vh1`?&i}`yfU2XAQPRklRiu{X+ zx-8V_Ys|Xa75@g?0W3SZeCBbLt}a+Hc>!u>+<_;t(O!(>gQ}I^u?A_z<}bUVaO0K$ z`G-vwqydtZJMjd}w&R@0N&9fYjMpU8MWWQ#$_04W22`|9CO*u2@fukUD;ueA=VYIg zf{rm?_v73^$3JW4bIGC33aR5Rv2HGk+M%kMxTP;erKe15&IV-J zrcA)+(3oH?f?%erKXsnn!}TP>oOh36q%>hkiL}_@S?N&ViKAzy;hD5~ypkZF`X%8< zBdQ%3RJjtx>6abK;fw66H!P$zgL+<@SP*Q+_3jx{r$Byyn&*?UegW`^IN(h@glZ9c zCnaH>TWCMN4Qaw#mrL<_J%E(M06leKj6B3@S~7#y;NUbD@2)yQW!L1<*_fQTB-$_q zSpf6nUNMqGcs-x8Q+O3wfZZM@JG%#}u}?nDvZmmHaCFThu-D%M312=8j_L409XUcZ z(BOKnft>QKb*LAbV;$6#j-$$q-~l1v!sNw%e7!5z#wI)NxY^3`?3YZSyHoBVfFC@+hpuF0PlFJ7_z>*E{=<-jJ zyhU?{M6uhwdxtYL1MYF%bHh(Fp~2tJPpOt#lkg(aQAI^_vnQ~2Wlb4`h@Sjz=xXwz} zKhJ+S7ZB#uhWE~^LG{r)!A%ICC9usQm$|pJvvJ}=W7_)C9*BZepHSYTTG2KfT=D|mS#y4B zUNRVt@dWn)w@&c(o3czlnG^7=CVy&c`=YD4XKCy*&%|sz4b7QIWdj)fC2UBu{=&gi zAVhXy?V3}qiWL*h=#JjTQnefB{srN0R^8o+57>&=){KOx5x*FT)@h4Cb3A9RXlM-eb`)l_rvuPp)YRpu?7*iA<>fvroJ0cnTsasdshU+AQ8>2cBz|LV zt6aP$JhyW-EC}#Nu3!WxD*?bbp%v>PZbsyHbrkhv}Sr>_alR77o^=>ES zd7is5hvO{HKMIX!*BNk9;xlglSSukRGX2UtS)xOo|AZaw7+1i|y|J>{;k)kI)Njl^sjMayXuIbV zRJRr*a#aoOn7_Z;V-xY(t=2!;b(&-ye~4Mqm#oS91}a8l)r1u?d&8~*DN=>xIhdq3L)7d;ksQmRccx~94NWK}CvSOp=G-ft)2QL!fWeydQWI>{h^4yL96sV|BjwXc;tKc3 z#G#gtjs$%f$<5GO7Ux1oswSatVO4$z9ChR7$SoRg?<2Vh_QoAhV&vap6*W)o5meP8 zmBwS?%jG(FjFeVIf29Ls8ZtY6uz!6dSMqJ`LZzKXiKI$5Zd) zRH_(B2{t)Rf((rH%Ot2W_Z(0tU5;-xu2}Cu^Bf-|y#`VA3na@C4`q_|V^ZOap;lcN z1eXnSKVD0SCL5$Xb-ss2UKJnfR$smf^wU_Id!74`$$YPDA0x^yUNB{K_z|^^HxGyR z(q=xR$hMiRQrlEH285MW%@c{Po}RNlj?bOKad+f^jkPxnD6hjgQut9{d6;c&kXV&A znq5Of{l)6l?XNmUFvYbHN=jbOWJvBEP6&8b^9qH20A3eiK#MIBucF0>0ZwH|r4%`< zBGKqMo96#E{URzTe@92S1=1AX!#PtKQcIqMu`i-dRk_!ZKh<*kvtGe>WNnK}EQbVMhZ<6pa;KFTG6Jc~+XIpUZXHC(%M6@($a9U}h0=E{u-;H)2 z+$z;IMnROD^&UP1%I)Itl9c0)n>z`q@P=GkK(B6L&k2ty6)LJd@U6b}x+8-sIAd%` zNA@}YpvUEJ`W<$g8yitAU!@v{|L=_ z=d(vu(x1vEO`KX)CpT|@68N03O&V#)pM@^Eyb@SsiD;h^=a@OIsD!j|AA<7&bQA*5+)G?(gN7s%PSoo#lG( z37V6sIr5RLYY*myZ_5D_8wl=Cz8tU)3{f{1IV`nZR&ek z?0`*DM^#n-NjyPEV7)$}M^h6hUA|#n+ymTdq)gS6{`(+x#$D%ikHC-P5tcd^NQQxA zp~~Yc5DJciRSB)3b6e-H+Y8igu`uUZtH8EvN^#Sf)X7DfGaW&OotE6POmE8^*OKHQFHFHvK%?8uBi+UtM6+War~o3Y>M=<8jhS^RwHpD@{&3$oQYa}5ahlA%-gXP zRwd5nn|OX9l0V~eQF5i}%?2a2p5)hPbDCIHs7xVUr7C-}TFWT9pbEn0AInd$7#w){ z`vFeV534_6S)IDCRXG`;mv_1Hhd(}wM}@93aq3?FqfS3)v@H&=)U3R7c2ck@30y|9 z8U;lQN4ZRu+R#W2bN(o%Fi45nz2LlWVVG54EW&ATPB#!*1Rc1=YnzR?TFD))iF8lj zr+#s;5!~z5&sAV@=En8cT!|4;jb@>fQM5)j@w5rPulCUC8BW|$~T{VkUt!m_wMoCd*m6=a6OaLrt+uL|Y%^WY@{ zdYHo@Cw;(C>x;7|UZ#K`oj#I&Xq-ULDTT8g3-9L#<)1fR%!2qz{5O}NC(q+VwG!Y9 z&s}rG={LrunA1XZO+#f=S|7*3_WhN5_**Q1J{7p=u^U|eBWOMi!^M&F*aX!Jugy57 zMokyp)9qh^>CMvR-cLc_g=`MHyPDAqee_h*5Q%%w?iZ@pU+PlNzZTULnWqA`LCw=i z39JXzv%#jiLjvM^Q~H81)=tw>OUln{IOE9?lHE8#j&S-XSH)K~0Jwo`sMS@FWWTtR zJ#wtN*?f0;a$cQBniE^H)cm22bi+6fQr8E6$sjxFHeQd&QUPV?#%YK3-X=H@h0 zXQ#m-#qB|Xj}O=4Fip!2k9)!f*gibOI99|zu!|8yavSGM(_GKfcCz25uH7gBq{DHIwf6Z#oj{}q7y<2LH`l(?RjMpaLW{6l8y_C07IAVq((Cc8@)WdeoL&v0wtMi8|&V0_em-j^6xWQ($L28c~Lb-}rJ7r4;63 zrcycEc>`PPNJR2+U{d0MSY@{vA56md@py2Ck8Js)lnn$gv!M0-!JZ{bPSZCWGpMwn zdU}naVKFH6;0}GEq*>0DN+dC(Q9`Yayg$eCC9aAO(tTC&UbVZE9;B9bA!lHYt)09* zu&(bKt`U+lWj!D;9m~_|knRIRl#AGBKYQE?oD0q_yRJJ|C*4NwV3R!qp5NdYP&NTJ zZ^1;|rvN3P(f#r#<5 zs#s6|)%>iMbs7InqRRdJl*`C$c)O{5-oFPrNdNCuGxY6War$=htu8bY#Ug6a zP(2sU&OJ^$>-vV1!%uDa*jj#LAMcUR(r%;hX4XhetFAE13&S1%sy>@m|I2yY5ub)R zNp`o_qA?s;mbZf4Y_g?1d~mqw3_Pc|#y?Gi(AJ7H|9J4H7lRyBo7=Ufasm)mb<~nL zbr;7d)s9X&j?tejlvP^SN4pz0d|b`}a}dL}3ypv{94fBY?CMP{3kQtvR_Qw>Q`jPH z%3IR(EBO@%EmI}>V%}cUz-{?yG+C{#mmg91j;)P@Ya5hWOFXFQ_)9PCNs zx}dRmOf-#U=PGcd(NP7;mWWI^FNq%VswaFii)1(N6k!W5gd4a1$U0u~WR1EqNs2k1 zy`5}Zk9?9;7ly-YhwBoqBps#Lym}jUZ*EDQH=mr3u!x$|&Q`^v=mGJaFl1~pJ!Uld z-6nUly3DkySz51F+{z~Ci@H5+owzn_l-y?)D(R+gcNq?BroAlZvBBHCp0`m*tc^Y7 zGbnjx`NdO?MG&`ied7P{b6T9-yQkf`||ih=LpS0_(ann{z2mi{#d7_k~W? z|AYP4&T44jl0pU~zQK~61Gck#3rk0{JV2d*C^w)F(i<)h0gVhG!mGB;ls*szLuFyy z$|Gx07TlKz%g^>iRVLy{7G*s9_TfnyYk<`SuMHU)d(sxX~sX3|AEAQg4WvmTbk+=G>M z_ZS>7R+pUN)rkL(Z>bx}neLRz_j!3BJy#!;uW%MOVd&zfD$+O`byr?119Hd`@R zF85T`b}6K-`yjMD;|WYIW%u}m&A_5nQ5~?|6lIy#*jb^ML#Q0MLx9S*R1Pb@tr`8m zWrEGH`$h725W2f2Cwd+WpcavXu7N|@}D1}w=N{{cYGof<>2M{vfg zefZRC**@J{S_$y9fADT+uwIICpEPUQMi^5NA zwd|kZ9L`e@3-5E-pK+9)-E}R=$Y1bP1EZpu6dFE!>fzyb+&kj*D!r8nmgLT3{amng z%#V52we@vWzp23+$GLFIcN;f*`NtdI?Q1pa_pVJ(k`X{scJ}Qcgv)g=FeSRBe=P zrRC5xGZrs@PO(jk&n6nQ%7z+eYRKjUTu0}c25(i~hP0p&O2`^%X>S&HAU!|fY67w-cFrlFqf{7^5scE z`ZXhWm&u&MkdeD022L~4Fc~(QN^k~X0SQ&3R>i=gzT9>mKJ9B?$dsE(Z9xlaC zXn%0VbRu}J{Cxnz>v=d2erDqny$nFj%Fiw-Elc^Ii^iXb2jT=6cuJlc>e=ZgJ8;tku$ckMXc< z@o&)V3U1^}I6V&isISmV%}9OIa~L|$Cy@FqEU(wHu@^7VB-p$CDg2N}w`Xx!e0)LP z%?VS&-hIpD(vVmNMSmQ4K7sNAWXPn?!WY0HxpQCdsOy0=EUipyoMt3D zpO$Gp&F@=qh!XGhK!54G;)cEch37D^uI$OM0nKimw{2^5% zY#r`V-N}h<@$_vkZ83khZyu)}4Ikm>Q;kVHQf z=Tk9y%p*vjf)MS8JV=g9RVu&@rzkM`y(yCknX!;(G~Fft;L!`c$XKWyXI5Viz~bWk z>YC zvLvz?m8aTTjz?qSSX&fEX7KLTB3D7!TUnKc1gfrSe9P4=vA8Pq(T{wjd)AKLD&~<~AHq z8-NLzzNmDMp*67pvd#76?-mrF=9TI!?^Xou(!^=;N9(2W?bO?-^L9J?m#F{bSUXIK z+Pr6R!R7}g{N!jSF{W(WNMOVp@VG=?yN{P9c2ZWbq;4F!+{{1u48tMhL&SFcKFj5M z^6>-{hj;O>6lnCXLvZ&vdP+%?&tVG;OmXx-GR_%ZFm$Hx0phQjy>uiWLrn!xH6EAJ z$4;n93zKR6wVK6mZ}VAV0>fs0qLwc{J75o9=H>%MVk-6D#FqSnHLz;SVeUNJW>4d( z{~0W|^J(S45;wB}K|oX;Re5aWjiqrsasXmki0{l{F-Qhwu4#JpA0v`$Q8)l+`5H7y zr~y)zq%VKp$HF!TxfH9Kavf4{J2XPbo*Dq2}UkBKkODxYr0;~o`BO`JN z;t{;jBrkIpK5a(9OvIB|W_5$)v-_sWtpZ>AH@MHnVp)z1%Udd?R@P_TjL0831cvP7 zxvX`nqwjqO^9LKHBe!q_6-UU|pXX0S+JBcH@!T5QlcAfs+B+N$NqcYDQ2T&*D3yBYtFJI zpvwNLwh6$?6IFb=yGeq12YbZG&b2i33d-KAPq#7kg2DbA5Rv5u z{^ZonGwWKX|_Z#jU^cjX9HIqviI5|-1s>w12j-l#oh#1rF1 z@K!s3i?g_ZUuoFV2LLCgtvbo%9i`$<&vw19UgJ-chh@`nVN951Z){KKtx$JNKw~1tl>ebFQl>W!np7VGG z@?7MHoS?8EHqgoUl{tfCCEq>VkvC7{Y;46;M#j+c5-t)(DGd9Q(l>I9Zpe_QnVvG= z^rnjNPZ8me=CV2#z;*<10jukn#R=xfV|4_6zcSyb2%MSsAA?X{rC=oFJ#z z+97mbjl^}00w3j(C$e!`1Ot_#c{ZPj!Hv8Gi;cLNL6f(TlxQc=woA)K8e*x~GyStSDyfh24TBx5Qe9}hi1%>L*KhpN_)Tnd z7FDEh)%d?FJ0?+xwG2gbb!oEfcEaSauTxPNpJ2AJwM+$!lfh@bEu2W#ofR4EqeEkm2x94->*w|A0KV_P zoKHYaxD?SlwwvUdTv|3KETOIBX|I{&94H0QKqFEVV&~0jYvki(EI_~xR$;X|eXZL* z8}xS>7B`PV7{*PKyN)k)|A?`-sxewU1Hw8qAm$cHfyUgqM_GlVAv_(Pj-qJf|x;3O5J9%XvdEX01C)wF@cg=ikxwXtpaIo!QM|HlczEyo}rM0h$H_QHP zWxgHN zvd~>`pA-XseXmG%j)Hi$5!bl=ib+Bf7N)!UX*@u~^yF~Ao$kD8chLNYOKZwHIM=VL z&){}fpfEkWksnAqcdq|ONvFg^rE684D|e{9#87(hy1Z!v2>bJpgb{ah4$7RU~acpCt1~hXyL$9eOC_`uD_2unnR7 z;$GoIkB$vfI%)@cMmW$P`vnKc2I6ji$s|yU+F@PMlsMJ+)2XRl_i!dNVKDRe{PW&+ zDaRomNtqmf10Iaswg0N})pn^?o8e^M*pbzR{qbJD@8opJ^W@vS!ojk+l%k5N@RWpF zgxI(4!uESeKh6iJDtWI`F6&ZBR{sSA!d`S$$Oe4kXX8^(0_+Xv)PRzVUN-g3M%CK( zz^SU`fQ(dsC7_$y6PnVWhGrAk;?-GV&ReqcE~b^aq*{friVgxKPa5MZj|!Aa)z74! zJo!jYQMqN$+-i}d$9`XQq`!@zUql+3l0o!Mhb74T(lk{p74_c44t@8~0148dwfG-lHv>3vXFh*U zbDVqr&qxIIzT^790n7h7H=Nws*3qZW!^G}iBn@%=ZKi_VD6Bb^@!+2s$OX;xDs3k=>PElPx(e{mX8 zxn~~VQ4DfhgS))b6Ulowq*r0Iv&!_#br9*A5xH&^{}?%Og|-Qy_jSr&1FE#8xtri_ znY-thoASH-12>2Nm@YUqlJ}i5SzS`u@7fe1KfqKWJ`id2sZOKgADw2*V%k$~#%P5V zHNVq6f=4g)IgLn8zaUWzFTtkPc$3NkaCgCZzya5SoRZk7+??IYd71J26=@;J}^38^7 zbSqMhe!W%cNCTxUjBEUA6x;g=LXmclt&ME{Yc1v>e*z!fiRWf87V#n^x~`Qa9sk&DSxf`EsPF5`+pkJv$GU5}F$lUA zu_S`#c^>HH8?RQz(R=pllRIyI>@ynd)j<&8=q|D*KX;eq3PHNBUN7G{J#d;ch}Zsz zFkrp2(#p;i;K90vR{nZO;60`h7Czt_w~YJstRM7P%rgi^F-G$G*^^~Z#x62`)bk)G zRx^>W8kTSg#H%}q<9i9L;<^#K@UOWZA0>KWp%_b(fyW%J^joXB!{3-^Y!A>g zdhnE!^*=9|GVK%)yC-lbzkX6pBQ}(!%+Cg$D~U<3OQi(MYabXd=*$Iqy^AkNORDXa zZ(wG5RH2J^2i-0ieoG{3U8RSSfcKw~S>(Kgmw5v9`*D_z3jg$rUb7!cuk#?MqzHAk zes452{*M1r{`$R@e#|A|XZvr_l_w%j7najjW#wSCv$t%aycOCND3WK^bH&nXej9?f zbtB8rjdzedQLRbfxGCjLp%IQ=91iCUe5;cm$Jrx`#tn{=f4#N7AT1#fUNJRwMi40S z`}HWC!p=`VG{jDno7W~5KR=tzcbNt9qw6xc7nNox#jtVXpM&-d^Yn^5#mlE>V_@yT zwrOpUq>~A74|f6xES(#Q(*;|!L*&S6#GGWD@8)%cF9Vo{x>d8}RPJn>?opLH&I>-O zb}wA^{K;f)tPTBT_x`Z$MEL9j=LD5Jjad8hi6bG5azg`dWTkdVJi2@)`bA$%UU@kV zHiyNcSU>(UvC%QYtwWf*FU!JL<`lMz&#`{LB_!oiIV)A$K(B2~wn$gdbR8o#2Q>3#zUBd#c6h}x z;jpx6KjprxHrKt$NNEu>p83Fd>fCl4E*%ju-A5dbE|j$R8rv74VUqLLS!cq_GP5R} z=eE^eD9_-poR~=8DC||WGSI_YOT-TJ4-Ksu8djl-y=^Uo0NWq zbNP1Z3`4fxG7R@7JXq}<9RurW^|0!h0ktut6f!5*ZMdoKr9;)xrDSrZ!eNO@kL0Gt zL~ZOm`g2q#0m+2HaE9d?#@|W|Mh%b*iHwi=-rm7V?Mm_a&?R&cy^i=_+m7!Yp1Bzh zl_Xje8@RVJsF`<^y`H*5+yWuxbJ~))#8p`Y8tf*~QIpm}lCp!4GUJqBIA(!ku1JnS zGwCvr#=nhWAwi^lFbJPXU$)25&hX~?P*tvAL z^)6}c^7n(9*zI=QIA=xK`y|25uVd#vU|9uO$Fj?oh7l)r$uuY}&3~hO(Pv|}wUaj5 zHj|v4sRvJ)F@yio5a3ekFr3Yrg%f!e`9SCbldB|!B9oh>S$`_HHE4=-o%V7sE24?LU-o#z2mz{>hATNewo*X5GKd2S8~ zjA4m7d)5M5%bG9l_Roxm+b><6j=>%{k!mDYPz3hEGL0T8-OIG1N51+r4mAB6NL#%C z?kbmZFi|`1a^}N(x$O(}Ej8(>?xz2F8?}8kD84zA2JF9muoN?J)}Kt-fT`0uM=g%D zY2bzWCI7K7z8uPAoU)}z{_$##mcp!1PNg}1u9j*pN@PKWvWlL?!*V_bz|nq=_4BvN zvPSlSxpUp;V2xUU;^^<`F)YR26j>_HhSa|)bpnCV>%eqRhkss=smUKJK=Ok zI;=V|Vw%{zW=?xJL0LM+S<|{Hyx~jD+<-C~Gz4w~LJ~q4=0w=`$JuLOp~qhzq`6Hg ztEnr4IJZy7n#_jGGq70+W8LTJsgL9(dw>opxYy#+lGaDw;Q@gDIXr1rK~QZJ{$Og& zy{@8yH2f-%h@)S|z2Znr(`O~ztmY}8+OKn0)LnxBe!_@*%b;{?oEWE!Z2?0A{S(_T zd57&eSys}9aADur;F_xJLzOg@tkRiz;4P+nBYA$Jns5L={~8Ace4Im`a&*|+Szy|y zze&wRWx&T=sLzxItiw2#quG>Qa1s8;L|g4t7RzH2gB*SXPmzmGZ~% zKPju|05CyP)a5q5iQEENwcTXxy;ybnSQXQxI* zUvV+*2qkBX%ApdW22WgcTu?@BN><$l_n>o=*3l6l@mA#lyy$Vipq=`3N)G@#T8BC`K;$eg5q2rkM--v)v?cM>F4^CqLU9P>?k$K}ij~Vd zPCBZzWd5>aj#^gpTz(x#@@NVL0*_A!iB4AFKhL9 zDt3~iuQwr;*YH7NF`9un;gQ{PY(uU_{Y;1O$j!VSWBn33*rX+r-yQ13Snh?g0Ox<) zvW-G*P=QTIQIR#k1~x2`WfyquVeF059yQ!WM+^YngGBOy$18E>W`B`_ab~G&tXCUe z$*JD~M%V~i8K|Qs{9~e{y8EC2_%Boj|H!Bb8y-Fxs*ax8uEOlMP?))S6c_RVPt_Eo zG}a6Ww}&G-T{~9Tc%X{hgP@CORrI$*V2ULsW{lyRVg!GV!IayE!I90 zEw+M;wGPin$S;0`?xHV2=jyV23(w3wrS*F$^u?SWN=NVyN?~&)OG$=_;aPG}wl(3e zpP1O1?Ee~&p6Yor!Fe}Ip=x>xT*{%|XO~AB;`UAU-NWnWm3QXCOOo#Xb$Gb66*3Yo zT-Us+g-W6&jZPARP7cW=w56CO%hp)odmm8EsW-@mFOIDYmaFpz*Yj}X$t6w(LV3y$ ziOOo@&W=|(Z^NC!)aCVwV&dvc9Ezoy%hWO0J0!bwgyS;@XLGk^^w8pTWA?wr;Q(c; zEf{d4#xQKAqMcUlP?9;)ldvRwZJr`9ku!l%|8(Ol?96~2Z!-jkGhHNi=fY(}&srE%Dica7&5EB{Sa zrcdGYEfdlyE%{2dWdt5VKL@!7iHsGRlbih6*jQi_n997GtdCq;uW-*E#2Wsy84Dkd zZvM4nmEf}iHUU;mz;kUwz^X3U-fDgOcHhtwZM}YE%`0=cciuiX<3j!7!;@s?Ai+VT zLG$=F+(ER{M?N1sEpThI;D#3yR8lBoF{2^!(bjcV2XLj1YlSo3eCFZqV_blV*x@DZ zja?3JLFW?(@u7lG>^zlY*584~TXW!m+ zvY%vfJ)JHaxOv*&CX%~qGT2(z*~J-bmocUw)q!W;42_&lpGg+)oA=@`#@pLBjj`9@ z*nxn|@)-7uM!*`mwKKZep>USW@f;?V75mHRW)ECpW zGnEJ_=Y3k$=s;zpEIV873^TY@LB6dkwp_4)M~{~!odM-XHWPTn^eXEZLXYu}H3Y!3 zX|9lKJ*5x$K3awM)HJZ077+PlO{Y+BZ;hO;-QCm9e z;Kt68mo?AUfPRnc^pe1+w$CK}``T2#25Wl*$y6cL1kC<^{l1bA);c`3ovcv3ME}oV zgO_SeUD#`x4mFgfGTNrfv`1O3P<@~$Uqu{!(nwYQ4}%+oW*=OoxO3d%H-u2U`a*~Q zG;~i}Ne0c;&}s_B4p5CcHXEY#&UdF7^hD9t@L(xXrAW$i2}D-O$~W2^lC1Mk>1^G>tlNzDvN+4FlkhoQ|#r8+SX0`1c|99Kgz z_LTVxZ5inwPLiK|_N3%A5yd>d04Ztv#28EkJ<97S*l(>{BB^e(X;VeUAg{#{82n^(wG$6*#HH2ta0pwsX{FjUa|0xk-XrL z$+BW(y_!hc)pd?8FLzhXO340MhIC>}$+d*mc*w<&zoCd&))rU>XBE5!be?FEg_L)= zH(wXtSUSNSsQ?nH=$AP(6Fwmjhwp7Rzlgw1ZCH9!{kk0N!+<>2htb)* z4ltN1e@iZkg9)20x5!X=5IXk+jrP`_BY>PO*paf>k*TvTV3(K(O6W$`(CzK#S z@vfHYwJu^NXFwI8f>P-M=7H2Up_j4`3L01Zy~$wben5OFn?#0T*Pu1NQs^@A`JnuHY!R!O^C)2&#+q5aB1!~)O#Xo8V^%&OG2^DJ*cFMI~i zP6dqkcDIVve@SN$rmsjp&bg7h`gB!art#$4o&QrAw81%YG${`X?7a>)RXsw{%i17>B~LxBzL*68b8nrAuQxJqMrcVAMQ^Kwi^g z{BcesGeXU`ay-{vR73r+84nPwv0OL5z~cvLf_&8Y@~Ptf%i^qhD?szP^;*B8J$FiY ze%BGti1W{fm;xEkwc=wPCJlH!<>Q65gLKg`kdhxl({Wp2Ee>@Mptm?*u)L9y8nYdz?f zzaC!TCw`j?Sf%$oA`YSMfTq)> z?*4LT81Pc$d@HjPwm$E<#om)cKJB44t)w}KIWfnbC|2|nvfJSai{1d@p|Y<#1FV$n zb72|-7HzzH&c4nnb7HC$(k_=*hTEns(=5y?7rXmXcL8QDFas>;sXBGWzm0P%bm)gA zSG*$|+>&RV9L|0FY|j0spo->KX?RhVe?Y#4L@oDFHHR;5bGtJ;tS*CfHd+O>5>Lnd zaf2F$RF@f)!i&B#$w{$!sIT($o==(kxGzkTfBX0Mc?x+H{oXc~CuE3vM!GmV^oexW zDsmSlhIR7I(Ia^hMk2tPec*0FfH25R%bqdU2p$C^?GiVgnD5_NB>DuI{5s_{6m{1vj5rwQUd_01;jza@-_E1kQsb%WXBWmu zxtZ6Cr2MwDHchXX#TDu0gMl)BO3U8lTl@Rruq$-Digatc5Z@j~1^}kilj}egr|b%q zxg3YQH7X9={Psj{1Hpzu_7v6Wo;q6^SeuS|QYO%0;vRSETd{6vRp_( zGbbv`WY$j3dZdqFOl_#|sJ$qer~qm+;sAx>`opE{OTNEf#{{*GJBmtW%@d)H)t4wA za&BOo$0No4c}urFt0(I_M8EkU%gjhd`nD*<0Gz*-Y*BqWLf`{E zvJl$p*r9HlktBO$86I;HQp;T)8PU-qG*rszEGCZ1kZjqJGuZlYWu2dF6UJo47 zGb%@-*Od#bSv;#MNdLN{T5mjMdNSop)A^gh35(~>sscGN+ipdF^&B*JHc7}mPR7GK zk>oV*5iTLuReMs)WZ#bj1woe=I$mwUka3v8u(D2kfEchA}rb19i-J z3axF+HoTq@ij_`t@cl0&yM*&LQJhkoX4%HmYaQq{*M(}!k|FhhT_k6P*quCx>*FYX?4cZP^#&HZ)7aK-P?=fN=~zY= zYnXFiK=5)HUJ&4_T3QE1>mk;U+OyRT(|p35+@19QB6RYz13h=5VF`=SMa3sc%KhZ*5hBoruO&71RryFRyCRlbX=gwsV1oof+7_1SgFqwM0hx+d zVpOJw4O8Bvh%&THkxv1NJe-y7Kp@HL=)ykCU$u;w+}pQz$LLAnuI%I1-1E6^rPns7 zQciK*8kzY#JUf99c~5inxV!%A8(cqBL2Es%-1IeaE{E0)!g`ICSPNfzJukR-g~*B# z-5;JL%gXfO9h7%IFUT9PN**F)q`9_QT>0xGCyPcW7ZOMRa+G(ESREHvl~<9L?@nkJ%t}@EY_M4i!stN-zL$I@ zH8#QJ+`Q##jlK?-J4fBbl^H8FmL0Oe)t$bioPPjA`SJ!Y?iK{|;ThRb@L~1XPZ`bG z5n^pgg7B74R+v~7oxsCw?@b;9(c0$FLDqch$N%U|AgUP1OR<&+-mf+fKF_GEOj2j< z??n^<-8#=r+um%*_-Isgd88ek^~affDuhIHlSEbj%m`gET<=oVUhK|>#%a}XY zxf<}Yi_GWf@sY!m9kw1nqwSP~r;x+*{3(Y-v=KXbY_|V7lCNAhNnGWb%yxAb)uDm7 z?xOw8X`Mf;4wa>RDQ!=3V#450qnO{dK7+R zVd?(8M?iRJN;0m&c4TPH2oUctb#g~0>M0#T6b?a_MNE;wP8sKKI$?QP1??-E(Lv#{ z-E-B3SUR>A6`jxBaGuNTRpXP^r!Bob~oIHfvKL^r%&yDN{lo}GT?g`7i$k@X&= z;#Y|-XLJ2OU58COZEiC&v7Si&g^A?Em%BswQb%H7lzlOOBrn7I=|YE?mDjy_nV2Am zgW5~r&6c}IBN<}BV38Vx>Ks{|c%1IB$GK#!<5Yas9&PKI>|RdL9$6gPX|&Ta?{@Ut zVpk5lP-CH^vW^)vg!&zU_t!g<<_${MeHhhE&iyDw#%9wTd^n%rE^J~z16guBZnt+8 ztZa%{G_Y}NQ6nN)`ipbIF1rv+8K+z?ZzzhKq@b}p+Q{TaY9d*zA2NR_P>Vz6#rYDpme3yT&y^ z!4UiFJ$Q6YNWo$r6+i1#ot)vsd8W1GlHf@(?NV#+e6->!iqO-iSPmk5gr_Qp^Iz>V zN_|3UxWAKD+upOz8_Jfvr3>zo(8HLrzlWc!nwBBzmK#`=2gkB8j?~o8@pRS3>lRl% zpo%ejU{cvcxt`mtcdnesr_ZndCIRG$f3QYSBrRxQ9I97pk;xV?7oa|QLz+V({#@>H zERq&%ZgCcAub+el9v!pgm5hT+cQl;l%add@cT_j8ktzVkwOgyQ7_fQ+(7IXmynj#w z#sywS_E6WpLPzYsJ%+vem4Ao#vi}C8TMIF5#Z#`+)?kMJ2A=|xP#Kg{UfC*>LlO>g zJy&l|VQYxIuV!$?y3RFad588)_KoSuG?4#}CR0b>Kh!OMJTw)agH*Ob93v=b6WYr@YQyDE$*=&wri}55m(kb?wTC-hJ6f~uM5+aoLNfH z@&%nHw=d{NQ|)wO!c!KuQunZOg6bYVN%$LOkUG;AYH|Z{DH(;;CRZYPkj)JNgIdCVRxa1Q8dx7hgtht2JfV-HCvv^QT z#NKg!I=+!gHgK5+UbUxwpRHRzcPYxXriq^BR9&3u0+&=Y$}8isjMJeGe>J2H6_^;G z&gOeYDGugQyng8itmuNb)uId3raYAlCl~ma`SjkyMA#t!FZ4GkH zX$Jeow4%@2QDdlG_*5HbQJeu_?N?FT%pkdXT_5;K?aF<+*)`I7W`oHI6zir3ap$R%)`^|;8)kAd9DZqql^XBiHu^|R z$a6JvoSUI_bfJPowX!NH$mp?B{nU~q9MsGmBDpppNNG}gE@Wic1~~z1taq`j0)>I! z^x5OWWf^?H7hv*R(z1P-y9!y{0hhkYe@s9GQvURtCIQnlWo4yitXQSJoZle9BFWp- z5`j_5@tJe0vxUp6M>_lE&I;Fk_Z=l}u#UoE?UWz~P!G&lIwwW+rcxRy2P&ldO{9XqR&Myq};eNcMe zqWAIz$amJS)H~GQBkw#WDCxF#UgDpR5F%yb4lF4WM?7Qt?UQ7Qwk=1wXxH*}yqD&c zBqh}Q;+c@0pTZ0H{O`1BO< z(r}n4`W(xb=9`;e zNO-hQ_l^4GZz*fdS$p_|p#0j~P=1rpCgV%)7BD@pM?>eZa*@FZ+g+G#n)_qs`z{8$ zIpK2Vb_E$H&EU5126<`DgZY;5^29&brUK?fd9|`A*_pqugk6nD~#}I zj03~+(YnEzW>z6QOiK$br(KwK(*sTE3J2v>qw9yurAnyoFcAl2WQmJhXl?iH*)Bgd zN)I~Rte|`+Mov08`twv=z&qQyFC|?E4_q8n|8&^6mn7JocG&lZ0)NmJ-GV#U`%3Nk z1uN)Q&x@yvpt{4T?^l$3R)fb0JxbG9ygg|FbV@QDC-^6muqMc?kROQ@B4*^ zAg2I&D#rVXhGvJ!%8QnS#c5NL{|<6_$d^=)03Y;6e@Z-FmhPjMr6s=E-np?!j^tZ` zu}UvxU9yU)()b(9A(ADTJk7Mu@CZMWl{i2>L*y+anMcEA?}MOxT#dL2jl6#mu9CKZ zdN*!9oHGtruZh`gk9@~rvc0dQ9SoNnYmKsz4#^?%Kd@k+TDG?{+;w8rk7 zkEJVGyp2ht#y;A3>A0|7&O@HTebupE?H)1ID=&X;C~`=Zv9^U8hl|;@v1Dv)Dspvu zN^n`~pI?~*S$QnSU2QOUHae`|JzOoN@6ErzHou{>IOaD74}+K;9VBN#?T7c&W+sg8 zsmhmv!Sjar#4H9~#2dy!+c)kcMsi97jeQ)Qyd5 zOQ4}1EmNZ<>B!KT@)9&VEK+x+T4CbnwFRcy8tFWF5sV}CguJLcFp$`D`P9qPuYwIQ+wRAesGGzhS@)8;%V{UQZ-e%?WpqwR`k`&!h=qSD!eht zyr!)s)Sk9!>Lq23JnS<$h5bX->Uwz*F5dVJFPacdMrNMjw?k3-H#b+9FYD}WxnQ4n zKofw_jJ*xExvui}O0p&DqDCjC7oqj1+Ej?6j}zXrmAj|Be!mJ040Bw<)XW_s`Dqg9 z+aSA)<1l(tV~k1MY&XmiqT(MOTS>Ta`kP>S)BBL$@unM`DEFBN*|wKH+7YKuHxmU; zQAXR|tLPp*mdw5_^?KqEB{BW{5t^Xrh26t4VuRM&@{$P)cO8|{XUwDEDUwG(9KEh{ ziTsh2P6f_Y*$dY!kpFVRXf`Ba=jt&v(QtZXCh;!pb>^3*v18NXdO7+#Hf0pmD=M zd9-h+rz+K$@MRg}t~Tv~@jdkDz;4Zk+5AZ$#dK>JMwPhj1S?*=Joc1{^Bk6mM!JDDMBnWj!PUtse#stXhfx5`o2cS&yc3?T9iOO@@0MX0a?#%3g;m~+P$ox zw}f1{qe$FbOfDoa0aLd#p(PYcS6T+EEV3OeiBh6j{~9@ z3+XOe!!-H0T)0%t-yIXR7f}fCkMtfJUb?NFEqY|{!1c2oau&H!)^tOraUQ$7W#6Y0 z8_=n={+Rtg_Ra&qlB}%v)!ny21@vKhg31Hghk)2r4vV(#E@xq6lRLYtEb=au?o6|t z=-a(BgNYm^XJHqXAW?Eqkerhspr8^(KtM%A1wrKfzH_ST)=k~FduA3y(49`VPMtdS zo$q|%|NXzQc{X%SPZHv_{#Y9D2ifDqcBQ<}%7{1B)qoNTJ;7T_i!0N0O5#lw$Ob_? z6BZ`&bgx>_?y6yRx4WrNoyadfsvUuvIf8RFS*N;%ZQr`4s_oA1pH`IG!HdXk!@g_}1SLu_4=>A@%0n66QD0-@(8&)w( z=Ioto3cx*V`- zO|&#kQ#TZXlHbNR)1Iz;YrP#1LtDx;Sx7}hR()w(oP!hmJJ1}cei6fF8B8oYYc=qN z7(G3N_0I$c`#UtBD%Y9d5bn3 z$44+ngO{m`v2LqYwlX!~*J6ZIc2jjf|Cd=MM` z4G-TVrSbKAAA^v<)Z531y$DNYPqfr%PzZR^Zo3clCp(w zNNhzz4zP~DcAvH+j+o!(kZ3z(HL~CW&aES5rH_W7=Vz}R@!aFST~B`EAD68+5xtcn zitdIu3#T%>%e$VE_`MY+N-aI@`pghQ|x61C{WV1MR%Yn-2ku=EK z#(ER<5O!@+;#X@A6pO#BZS}IS(szm9QMC@m8nAw7!4d`tjh=flJ$m#9Nt^QvwwpnX zJiKw-^_;p#%j4F)-%|Nd$bso$sZVvYygi#w;%gz6AE40>RI1Cj?5wQjwL;BK+=qCdb)=p(FY z9FJ)fV6UW`N_*_J10`8DwOtrrZt z^CMP6O&onA^6byD|z4g7-1jNbY-RQw$B8%ovFYy zIul<1e!jADSQ?yuiFG%t>cn7rZ;PbV?^L$}{60H|j`ERxwO-y*GH8_xU!d7xICgYP zUf`BDm?2p*MkYRsQBg~r5yF<6IKujP5}=$@Ft6P*ZnGdSWIxqUx}Q~P?axY*No7o} zC$d(5zinxmO?(b297|ogiyuPyFIyiO3OWzGudy(#!1J0=?K4NxXbo1~y8H$l*qjmF z^ca0^HQf@&Z(-ev`v5XEZp_7S z!K<*gR@RNZ_1TsxPDQ!L(ZpI%k?A+WLImpL;fo)f|o5q}Jyn!P{*V@FVUg zcHDYRhWKe3k)^8=@&oE7wd9zzOm7G5=+TXx)dJE0$#`zU7)h5{(j-4#foyL%0I<@T zk<)Pf#7%#pLc7*wK!>pu@KbJeOCtM(5-PU1D9gbF*ghfpyk17<6kZJz<5w>NUT?uR!{$oguMzt-Cl7*4MU)wM8yvsAH`4iZN$t z-;ton&eCr$N=X;2YbeDZ|Bc3Y2{DJ(u4-%cS_59VxeX>;pW@b|?otb?8zHENh6;BW z)jIpqc3FXViKhD)&-U$M?ixN5o=+VPFJ0U0T15Jq*X5f*zMvs`5a-u|j{wZyB*J8@tg+a4b zy?S?=>gdpybxC7BZgop2bgDzTWmgX+%cfQ<8O0FB#i@P9;dR8U+oW(TB}rKRIHc$Vqa3g%mOO8ab=YFWWP#0Z35N60q)3`6q|E^`24NM~<5Z zJ)*rYO#h}!woZtrcCG}G50`mgs}@s5^)^yTqvh^$OxEjLy>}zx*KTcm<3FOE|Msqp z>5>qAIM!Ho+I$$vGg$W|t}RK2wG|>-+xbxgYk76Yn6HvkI*!m%F0SpE57kKkOdy>D zFfYIu;HSAkrKAZ?4ZM6dZ9V_M z_IBH2X-EHD10Bv?StagLtEx6oK&M)f(t4HksdK2WBbb*RWxW0-onM+c>p$yy$wU1M zHn!E;=Jtuzimuws+2D)rLwb~0t4)<`>*gVwAo}t6q0)@2x4eouYHa2h{ zeu8uyw(-k2xHab)uH*K~CXb_AELvac?+!RLY#q&$wwK|MEYD=ObJ_Y)qD!ePAlc~B z`pgIFlZVBivW$=}H3UzrBb=y9Dp-7oxpK=Vv(2{jthto3)#A$95s zY=0LU=iK!RK{;5LKAyc{XmqtVVBMU}V#-~$IrOx@5jrlReX5BNtarY6&bq?}rS-0u zpSXc09etN~4DxwmRK0rtHRNMTo^hJ3X8t(jvS^p%^vd|q{k~6uCob`Kv=vw_4zp<&1^He{${JyhT%r8U^X9tFuCm{*M8uh zS*v9$e5~1s=D0U{tEK3*JqdfpkX<RNW>vh}*eJveDyic&qkwn-WmfdK;Hsm~jJH|;~Zc73cHe}G#7sop99Xm0}H zqSyVCD3rh`ajkbWASxa~s-N&Tt*>$XPcuW>w>YV6p?+~t0EX4VEwXxcjLM38z z<|krW$EvM7(}#xY$?MH9^h@lITi&WMLZ+F7^84>|QT&fBGPiE?z4M z!r?k0)wuK-;xXt%>-8sn69Mo@mTS^&-p;cbSjp(=FtO9Yvh~x~j7FgW@~+7O!4zMY_{i;7J?W*MMVy1IEZ&C2bS+*&$&d?-n1-TCq+ z^%Ei8#sB4n>V&soQb0HzO?Ud+D_54*L&2k5dic=gs(b!f7vD);Y<00vM1!_cr9%#2 z`;82m0A5?bs;U&jaE#uCO#g6G_G(#$)3A-SzX)lVIdVHo zRd20*r@B_l*4+KgUNBPvLUiVtvV^p9q0RRN8|xSFO(i+oY5$5d&y;4n#?pd11Eq9d zs_wyCuUX$FYuI*U^k!`B$bFwscyogj>h~0<<5+h~jpe@__kIQ}f7=cnJ&ts`i+^+< zow1E%grzD^t-hG`8Xc!j-Wb?! zyMi(syMBsM`ai5nb=mqxG(l5H8?Mi@`zpHh6@Cm1ym%0jn54e%g4fZKsL{6!!|0i3 zLfTvHi`uE-q$6s=zY;R7x8B4*^4CH7PH)b!dIZrghfT0kYs)H{qKj(E$)aG0EvRe6 zki5Mv?ofgNl^N;Uoh=ZI)j8P&UB-|=Y&F z1c@OpVt{KHa{1~PXkPwq79yAJ(NI-x(Ynt}LyqnAO4`iDgSg(QU5(Sf;!-#AGgos6 zYdR7N$>o^-1mU`N5wBzp?uoCnC#&tDL50>Xhunv-S9J93u#UP}4)&^+2(YMeXAoUm%UZ1uS%>s*dubG6tAJ!WPa{~dZVz&o&3r}iM z_uilFY{Ileh`i%kiR{N!Zi!vB3cIEJnuBJRThN51=JDvp6@&Q^kP_706cqYcXR!^t zU3q*tFof&9bxz8j{0rg)2g**=3o$16%htQ@XDm<@B>2Qn)YJrrh?{@;G1Z^M=6~g> zjeU5xxoPA^D5DQNTH-Fi*-dIe&Rm`Iy!bgnts+cF+KsgCHW9PkexUz3u?XvR9QFO9 ztJWuOH_0rQH~EA22IDAPDb|-Sne-WXrP~mB^d1z)%s07{YI72$)-V0L1E!((U_-TUb~q|*RsysrQnfv*1y@r4-$$8 zKY88+2^DYQXW!fEBVcWVbiiP?ZiLu2{By?|#GMs@Ks6deP@|$RkM5E&)JGI86m-MX zx}%mg_pusjkqHt?`WTlGr2H43THUBXb90m>OmPaV&n#lcNGyUT0TPjrmI)GuxXn$4 z$-)S@wv;Ne;xo_0u%{gg=E&{!HwCQ@m_Few-Q#p`+|}J~bJGbSwNPq4N0+(!q|M%wuU{PzKYCT3wKJprf5gKlF9 z1H(>f{W_gvH7-U62H_L@QAlpqh@teY$Fnl+V|1dESSzbZH>&?uT{!d+6Pfz@5C(Pk zH%^(wNyi~&yXog1dl}1?KU~4J@3OaDbN*gUfOK=f2X&R%7eJj}xK&thIkh%J-5JKZ zg0Ny8CbJ%e0WoSS)h}qwzdpBJ9evFw8*2xz_)Bmm_Gw;nAE}ejKIQj_%U3VP-gdS2 zz-t4bV$k>=Sp;;$2f_AKCOwoa5BPaqNNYWatYL^Yb+=SBvlDlY5ji)Foi`eI^|I5|*@{2d!sL1GxT5?}YVJ z6#p4myjWAmN^k`ahRt5gAL}T&5BMji=*ayTJfp_acOaD^(O5~6EL*>Ug?m=T$Yb5Y znA;i)A%fY}mT|gu!upwA;}znCF22-MeaXev7A`6MIz&g3uI1ll>n=p1C5J2HE?Wui z=O9zs3dD%7Nc_)ij>$@5*}CMX>lB2hOnTmk)iXn+vc7{c*M#Dgdrd?-3hkqA4R;mB zhh{j^{>GU%ul*W_in!l7X{%29v`jJjmpPj*xitiB0?BLR;j9ahC|C>Q%lO}#;w%H z&4_Z!sZw$3nO2S01NgF9qaY@xdWL?vY~86rPsn0dDwexIwYIaeip$(T^UOAU;?)py zZ^Asbtx4~Gv_U(Vkif3C2ZaQC6&(5(OBy}C%t3CX2(w0q95aZ0_P-K zRU^nGC{Sgz&DU1X!ja{;re&wj0^44;-uvvzE-Vb2)AoGE~8FAh~HX zl;47?vNg~LW{YTj*ZFgnueV}-BN}z54&XMp}IpK4ra`Z%~0o>poNGMhWd zaSr8?^^QgTWOX+f6B82`=(NSeCWOPDGYp!t9?9-7)g9LBMp)8n*o$?yGo%u~=5@3_ zTct|O;@71i7aBUBsg^tTUuSHSYNrKcC9^JYnyVmF#>}zm|iVzQ=DI*<&Yam_geIP*4O-V z8hFvw3Vwom{qcc*gC6DTmSbK$uNLevs7Gz+E?Y~G*j8AT*%#<$xB$EP_Iq1Q-`i1_ z-@5yp1(5A>0J4`NFqVIH4L-15h4C!QqeW8ZA3slm)A*xJvyyt7?OB0U%Ts#;werv{ zK;ho6A8Rwlz$r=9k zAI2bT)H`nfWRV;-3r~G&%W^Tl#Ug9~5@&+^)p057+Z#loHfg}n6tmomT$eG#Sa&P? zCCKc_d|Cg{&}TZ3w4RTxpi9g)SE(?2?t56(epN>PyCAecwsHQJU8)tNrx&pSO#S25 z&)_3zo0*qYk*zIi7#Kn3&SdWoopyfD=qG+N)!`glbNHC&RCV&>c z>kfjcS@T+gXWJofz$$MuaN^!jzH+BpCLD=QU56N7BiLZQO+apyws0iVH1gTHY!(Qh z9P0J#w1GAG?OtEX9Hp&;n4h;4UEA_wPR)B5q_1aLrFzc8Ib5@8rd63^%0HWEC|;UQ z`I`0+ntk+LKW8lZ3e`1#$C}UG!`1FxN5_$L_Y3QbztX%0sNR3&dM%1hX^(o7Ya~dz zldj@m%Ni|Pze_8MmN9G{VFq>8h5&bjTt)teez4}PuiWOk)-4w->#LN$nTO#ny!q+} zim}07NHsJRKr>6u;6-+tA1FSN@{Vp-2H0Nlte-S@qgBF1e5mQNAy}zb@(Tpi zdJtcsYpbYf8@*&-Oc26v@@o;om-AH%p?Uo& zuTftA+xhj#D;h|mRY~HT_)sH>&*Fz#5~U9dqKfcLejy)jE<^}dnja8C*$QWgC~?3J z7EONfJbodo{9Ak-mO7DpnRoR@A3S{Jmi73NE4HkE;5QS5@J0N3AcTu!LdaptyF46R z*ZO+LvJ!rhaF;mqp#SfsD_cU6^&XQ*>up6)P%igvt``}!_-$+F83C5%y1~#NC;;^Nh1fXIW|N|l4tkp7!Fr3V z5~U5VuIu4EzVOK#l0r6|>NWef=nGIZ;6@2~DSX#p=} zf!ovIrq((9H*ekP%X0WI2;HmcD?^cIIcR!))fQ*E7sI6M*`9 zAj7}W{D9gyo6pL-fc~S_3X|`0YkI_v3LIro?ETKL+cbxHT~3;bhgf5q`uSF)<;i!LXw zE5Gda*V9enm#}vTUum1~s zU$(imL0iD%E891?VOJJsjR-D2K+YN4|KaNpqb57_BVBpHV$68dzk1I3)Ir;>XmCtA<}5`PsHv?Lfi90?|qY4`Flw?jX2dWpKB2#43-F8JUHu)n&YTOutI38dsD$4PgK z%I0oX9w8*I^BI~wO8=Dsy)rDyShjEAhGCYfA6;X>DCx>$2x&{UwQ+2HX=y7xwzPC{ zdh8NORm$HkIpdr&&XNZ^W5>16Nc;MWEXmRm*3QzBtjW^S?fF+e{Kg3Gaw7V_EA(^dYe32QdMIfA29^3s@soG2meAeWcI;JnWz1V$&y&j6BzmoiI*ZJBec6ll{N9xPy@w)+Vm0 zmqWv)=i6Gsq(uWe~*Fr%>*&@Tj$bVAgBp5(OADebtNI-?t1zmi4v z(?)*dAFh5XO8xUs*FSTZ$lrhF$J(FPwpv;I?2U(hsr~k@5s9sv9BMzWmyA8{(d}&{ zQeU&Q)ZUluKN@#MVa%x&`emX1k3MGV{q4JBL+Pbk*_b$5FOEYuEWZW&L zVxg^flzz0OCE`37pi4`K_1Cu8n;isZfW5QQ--Huamf7PM$Z;7(PMU?i)J?K1C|q^3 zGa1@(MJ>|2OcceI6P$C0Lx=S*4(nfdFotohn>%)d(y`0X3%s7Ke(v18uXV=vTb84M z?2vQB_w6)E)y?&~`}*CKfweIE>at_dtrjMqP zRDHja!z@kWB8-E;PJ=jPwEydiK*%L=eMNM(!C{0)5n0wsPTM3YqcSMGFeg%9MiIJPI5y@`5mq-6Y8) zRI@pq95#kyC%)s;Pa#NbH*mdM{Tg!#v@Ay)4Bacs+;J+@*AX6C#4QcVo}VOsZucTT z?p33?QS5q&>&ABC;p;?UbZdF%BV#2TG^Zp0$D<+%7m`3&o*Wr3AnVf7lx6| z29;y^7k_oqmGK?5*qxtlnnz>#{c61umNhB!)K5K*jyzFIXU{l72#|zEOUxoJxp|h@ zSsbyida1hY4r9a|V{(@7(2+yTv!x}|O@}Ndf^(SPH0^il1;21#vWk+6<0LQfBg)Ko zU1eV>x2;Tw$+tap3htX^c^G&sTvU2l(DRgYT1}Upm%E9Z7X?Rs8TNY073FIr*YBTL z&mH%ytx9HjvF7~gLoCOe!LYL9ILZ>Q^jwsN!tXa`8>T;%Tvvz~ImSlQzu=lIEqX!psHs^B=+CoK)q+C2av&fYkFetD_3@;u{k1aT0#cHx$;Z8Q6x3V-Kx-#Hd?Bw)VB zS-4&i7QMs`d!=1uy*N~nlEpU4dBW*L|FWee`j^SNMcXGfX+$f#De{tD;gq~}zvy|1 ztzvQOb}_ZX$~Iv$PB66nAjCKBIT-G7Qe=)wwB?H`pCST#nxB3e<}tRHlOPKSi8^zG z2{r-}MPmY@&y88%dP|xriSn})L%ZjMJ_jErpSs=cxuIjPt*n*ZBiQ5p<8C(io#B^*opEujnyyT zX5_k9C;0%m^J&avCoR1wO&ve9!(1(k4PIGcJIFT>yrm^F)`G=rwDI_H3DRY0iNY{h z0*@aUy5vyL($zf}GNmGbSP~A0}QTM{Ajfk)zIf$iNS1J0E%~{mRjk zY3XNgIdHX?vb1#WI#me6ihv_Te_n)y^qBtsT$x6!eHnhmL*>0J&p7{cKO#bs`08vu z7sob_W$q=3w56rGJh`%AsuS|i8Rwj#M;(7J<}w2oSXz>wgn(da=}`5Zo{NsgZ>-90 z#%Jc;^oY@T0n!_(a~f^x%hjP7Dy~P0>w&75ZaZP<7ioe4osFa)lQ6-7`D>b!ZUxce08&~Xzpygq~HgU@!jY~f-b9Jr+tb#}jg@_NYhO8D& zgz;u(wYxpPjC+1uxJ40Xx#z1pEQzqmh`wxK$6*80fEwKFwhqH(yw#+PZF!rXU#L6Y zb#xwb+4xK1@};Hv9aU4+FGg=vGk6~4y)^T1PXe@pcqB`%XgWbjR zR8r*F#^xH?RyuEsunI*4mY2XH4$1ejwYXSTMz3MLxmuf16G}(`2GU#kxP}(%3%DrI zBO)*fky2i&?F1=7k)o&0A3Q7v*OqGz|7Kd%O`Ui=JiD&e03xwTEW& z8u8O`dF_Vv%l*lq6FLM7Sg0uSBk{Q})FCe!HqfJ*f0;&5q+u3?S%8h-D~WhqCOl_Qb zb=k>`CdX<-XdY*w^wKg=zi~37N!$`mm5VW7x>!MXIhoONmy_SmW1zY?J^)A&rta>7}Kk z@`H^N*kR!3p-lqTmlTgG{&-;JkxOxi2$0SKS=A*#Pu524w}DPOpvv2cCn&dz;K^MP zUgDPSLSqG(WVU3*W0&L6u5&IvMnh;PP9Q-sAMcOwz$&jKGRcSWIUd&ehkERm|Iqqq z{a4WM+FQ9y+?mz-7QLT`r0lNbC+xKw3icS zj%-r;01q;CL`Sw0uW@y2e^Spuk7ACJ)>)xd{l&Ye`k~Lt%uyqZXHFV%Cnz+Mbu1l^ zOq!PyW_NnIt&YlaH6avyq|x_m(vlVY3L{=#`^6?1DbtY$3{kx#UQ^7@9%1v^d?P7g z`yRoX$RSMN^Nzw5u^dL0%XNn4j%exUbUbYpchQCdZRS3bbBjnkV#g6rC+vC;iBHWq znr}v{38)#abhA7SogRUUFm{SmU2*Bm!@2IzSScev}76&rYK-RO`P!^D{fKdFIs( z^2LK8aW{A?80VQ&2INH5#(ti+BI_Lt*Ney)5IVs+^a8(d)aC`V&oHQlYrW-OKw>fj zOjE>RFG_NCPYEf^CNyp(g7t9i*IaO_IlSqBaBqUcrMB)d^SGdD%JK@i6bKT< zpOEAi1yw2038`<=XDP5Hm-vhCXSSn`?WF)EpNieA4g8%gP%f8lt+bB_LTv~_8GA%( zdPs$&vW)*aVKI;2jm2!#Z7`m*uWr-@#I|xJBoF2!K>gC~n-uvu=9^0MCK;)(f)q~@k3J}Acv$^7Hn zU7Ba`3QCD+Yjk6@R10w5%`t57srai(1rJbfA>fEfCx$1WwBnHyyKEs3d`!X9s zG(>6_b{GcCBkif*JvM#K5102eFK(|jAAC?B>3Yp2-;2!E>+UCck6RLEi%J`4h5Ef~ z>Baz5avv;TkP>}}dXc*K+_iM)GS2PD1wWN}#KO}|-DmDQ_1eSOPkRxVH=A8bxLV!! zJ1`Za*})!wH6lQnqugyTQTO`}Oa+4$T|kn+jY)02O#YcZ9C}PP4oxRh$SbsZtn+j@8u9eS-;s@MAUjRmu z6(H5*x*R~5n`oy*J#bERw%@a-pS}MOnF5uQ!0P?G&MViMRu#ea!O8~}B zJ!tMbm#d0A&$dI?b9x!hljo`j&q>I;ehPVT$FHB-5V!IO07!sv<46-N&j@I#hs@n( zHJiTeGy zgC;?-uoBmQ7qIVL}j$=z+ng~&X38I@pe5&J$_E`#Enr)zIQZ+VDfqz6ls!X zCU5|`8IVyiok4aJR;uh~KLl8ia0@^+9D?o;Y`O=sqX!UKm$k!XrItP8{1YNpl=*zM6za^fVR^d%N(9fF&WgJ$1k*8|5)o z*6p00)M)}3B~5XwvgsrJf!Xk*BegaGLR11XiAj^kLBeS_byiQAGS*;skbnq#4!XSO zffxX`HFd0~&Rxcm1t!%z`GvP4dM%;T6eDtUR`J)EnxP)hc>t8YkNc~xniHtl0Y<)T z3;cxk#%v8Mg^N7Z2m)K&_@pc&J1C227ty|Y?#h$Abz<&pOd@cJNlD#B!sZIW7*Ai# zr_BX&jVqu!7Z1^R`3jno*L?SS)ZW;AT^~||w!U_e&&L*KG|FxKy&vc)nUo#$%7YtETd9y~F62fP6w5ZiTpk8lWaC(nD{-2aoeY2q3a z6SY$-gG?d72xKix^9Y10IGvvD6k(~JKUc`x8LF5V&IC`r!7imoYyzsUkY)TePEl9A z;I!NZ2sc=xkidVQl|9Vx7tTFE2SVEG zd~x$gy<~3xsQDt#i%d-A+$(z}*!`EzJ_tMyB}HSXZ33w=RTCalA}~>^m(86sKI?4A>`BT!2Cv1!+OqNv!^4uE&spDZH3|bxYGUACj1Y9yWv; zLx&d7P(W&Qj2T@<5f8#i;x;aAU%f_~9=;r8QFTH(0TM*T>2|9$6N8TsgCMTLC?_|h zUORV|JahXxHv(xY738L*t1Ad5L=^r;ED9vDusORuFLM%#j{-0Te>(RBQKybQNJQ{G z(-%@caxLB1?3VqYjRr$eN!1Jm?t8twaO-?lK`)KCB6YezW=774f;wQd9+hWKPrYvL zQ8KgUl~Oe|#r5N9cUDPXT&%x}8sB>c=NO2=lvGY75`=yVfaz4zIYd9G#eBWCyqYPU zawFjl2i&g&kTJJ`P0rf3Ec9Y8j(~`#nd?S2kj*#GZOP558mLyv ztSw$+GjH!qlVKAGUF*3j*qVtvL)TDpRsi(}klZV5^_DrwckR2-Mf{kk0Po`EfL#DA zymd};))H+#8hyxDTMD9`%P^xzvcq9(|FaR~;k?-WxSMNONNU=NAH1HCGGKkc>=dK!7KJIwcvJ`7nwk4HP5_P9`OSDgMVqMF;F&Ku< z!yT8}cQl|F99vhIU9ev8>9Jo^0Vi6h(nQo$lMMkL>-S3PDpU2IxrfXnRgEfg?eS<* z%fUL06Kw4=^JM#T@~EH0{+8odYPcI0o)e)LV#`qW8hSoO|87zF?wowFlK>0Ba3;Qj zZ|uHz?$)vvfL7CxbO(uu&=h4dN=5~4ZaY09#7;@bM7__%d5k;MF1Wd@t*FeSXa{R* z6owd8K;4AL4t0tCsXv<&j8AZYk%xrQ?ZIe~xG8xDkK@`=??2gbP4K3qCcH#5!J-i3 zOWEoJCZ9EkU1+FXl~mf#fo~Se@bq%bYl>^*P1O=Sa@c1cq%2?p15yCI;z<3uc7oec zVvhrXgsgB>(MPYJr<>B9f^HlYvOwTVUeO~_7-bHA4?wF1)Z#^nSeqc|Lm+(M)ZO@l zbGp1#pFc9RV;`=Kk1ep*8>_1VU@<2_0waWDgL?1_*I|O{Lo;1$Qs_BYR9yQE&H?~D zQLa9${V=o0`p#~1=kulfnaNa`3G(4vl09=sHrn8Rq;9+<_o)72-$O*O8kA9nCztW? z6f^$izK6)lJO^`^6LleQh7b0UxyKn((O87cTaME`up}3kz1t7$JndsEt=C#=qZ&y@ z8~QB5>welVB4|%S96cQ_7`OWa)Y=XJ`0hF0-YK7 zw)*Sul8J>;T2MmiQJV_1#O&jLk+@6L3F+m$9 zlAc#5l_qSSPn>3V>XRDF6B{y>YIzz3F&X<-dk2%%Q~g)gW5{>NK@MjW-<2W$3SOc5 z)ak#oIc|EkO9&f&oS+1yUc~Cta{?OQ#XCT~k*2h5H%DV+4)q3(`rElpF`(oe7vLiU z?IK({cSC@usysNfE=gEE`dT40AwT`h$eJ-boE&s5p5eg8cunUblcgwU}r7EJQ+Qa zD4jqbz%52ippay#&*@NssciFzE;(VdW2n+SUQu2+m^U~&)Z3E6 zvDN4I^o|5cLQt7fWwbbKF6!^K3EhZ`JD!slyV@uPZkfh7uz=t_O4|r@H}P*`yl~kN zck>`>qeL@^{V$v{;~ZxjdOm7T$hU#|QC~b+Bf9bwA>083<59JkxCy0tUpm=wjd5OJ z^n>oDc9c|KNLlVb92^%TWklovQXe7YsHQwY?`aBrDNn-4af%c(=+taZ9S3FzX%aLSpq54XS9DQ)4Agj~OR{X{(}{v>9U2<*^N zU!A-jPE{IW93s7t)LXDKqX>J(@e}p0a{}K#Rg-k=s_3DbW(KXH3(5o95K2~K^=~FH z*D8n_TGoB8J|zme1$y^rdA#!Zctr9iHXy2)EUlgUVXFRJ!@NS10o2F(@J+Y3W`E%n z0!g(*>$Qi4&QoB!aGH^LR$tTM`7zOS9DOB>EairPB~b<*u|Fxn4@e^v>gzgyjRyj>vlrkPFa~(iT5ZS129TYAW<7=ljNJ%UOJipp>5$Yu>E$|Pp>wJ zUmN(Q2{*pqyda_5d$oPCh7g!-r^22^CLPWTwg7o~SSCVs|M}6P&h~}Cs<|knRI8T+ zIL%n%UKFVZ%nJyzO$ShEymoN;9M0G&A4 zi}B%y{>lLw_BVF6bY&_`2{FkcphY$rDSX%m&Htu6#D4FfW3b~7AjwnV4hjJ-_FSy` z2hU$F!_ST!YlV16A$%ZOU}_0sG$7o-P|-d_%h^5#ue?o(X*DtJ0W1x?FiTJVm5ewb zi8^pOLCzjJFF3k!IfEulDBAS$BQcZ!3*}Xh5~2{`PoW+*FQA{3obZ?z5^>0ckpymg z6dr@b`u+LSlbE9@l6Y(t3<0J^A+3{(_d{G&J$zo9I0pXJPCXifb7|>(ZFtts`l#V& z9RK>S;>r)*4XRKuN7&5*3G97!YDC$~kdB9NKZ1e}M_tU!N zw5ik~CCw2huZtg)w30fL7zq)G5C4(RUHKLFf#UTXR5q!CUx_Vwn zEZe9^Us&fH9}eyHBHbzsN~2=2sF^Py=OTOx)g#UbTG3Nan;!))nqh2n`2{khA;PGK z=mk>fL;+(!xl@2XefqqnY5rOG|^n+RD&K0J$URzd;oVJXDgIqBceS z?=lD~Q`BaSTP{+U0y5I}*h3UGrs|scBP>p2;?a}FI%JCWcbk_nhej~JZk%Aqg=J2y zb_x5odWO+mlaP+)(PzHX*x_Qskd3-=9<50>EjM(D@GZM-kAbK)q=G z7f0t4gS_oZj~Fo+popdS18;-S5(EY6#rlY-;P?~gLYy9!{MI4VJ~GC(i)&|jPGpas z+%_@kSiPj}hflo0w6RAveI6zhHMt%+OsKpd!FXxg!J0Vou2UZwzC@UzoFxDRoC-Xi zdYRc%GO)bauupfdHAtxso3ElHoAa@uo6KO?NPx#s*Udbk_J6rCMeCh80ZBY@=2e0z zfVu@pL?RqLfJI&P3bS+Mnx-v5pdYht)R2&sOI&goNytVm)GOzu(^FvTEzG@!oY*NZ zc64=e0cVIc90QeyN#<4a4>Z|hOg>!UI4v=FQAFxb=cSZu%3XyG_Q+PLn^CzD zji`h+IYj|VV}sYtcEV)TXHh~7^aNZ!X=e5MJx&{p?udK;!I;32(f@>vs-b^GxhGh z#2FSpt_gdvL%Ou~D%E?Y$mT$tAvIz)K?K)Wl#p>!@11hVK%8l&C(+#=Wj^F^=qvNS zd8u}9Yl1*4PscGfz1Er`8o}h#KptjL&yY|f_Y3%0{n>Q8eYz5!?ZhI|KpB$T0~r~T z*-X{@O&HCj(ag4}kDh(sYixUvL+(jCuT&^y=;fh4F!1O^ykN}3{&Fwk-?P?>U*9P~ zK8~1)g4&=&A36k*(u7OZpU);;m~#NS;CF+o0%hx|5AGpdV!xNdu7$If(78>0XfNr) zuY)HirwoU(cl=-V;VGgrkS>Y}GKYFuV&UZX(^UP%luHKEMJuHqxET%ZaU;?If2orW zM!Jk*2u-MS#1|$u1Nae!Z=B+k6r=jcysj8-JD%qHM$4LUX0$vxSOC`2e?y3np=(kf zZ3hI6DD7+fG4WwHQ3OEkzSJ5gNu>VjbVqLfdVUxJHSRGQGrz*f(MfD$hv>k0`fC&7 z$FP6{5tu3oYy4Vh%j(#^A3-(&p#}QcfpU>A{@=`NOtOw(1m@qfPi)h`A`lv#Vb~7E z;|Pt9Jkaj}GeUiAUPx@J%UTyFbUA~Hd4uMh!jlJ*Ii_D9>MTTks*mgJ)A&`fxoTUo zPsEwP7?JGcfQWozI-i*T4Q^FMruD5L7?O!n@gQHurAD{;5Gx#Hv(n%&S5re%!;(_Y z3*8n4ic(?v$$7!9GZLz}iW_xGq{a9L>Bd5AZ z;u2g!6GDu&l6EYRdZq-QKQn)LHb`%T)5rYMylzC-9@DMfMlEV| z5T>;sO>qdS%keyYuz#4>tr^;bc|)(3w@P&-T_StnL7`a30-iqFKh6u|)R3S!)o9gY zMsbgZ2{F`hJse2TG*jR5Kh6J2GghMK*M%cFK3i1T`E=Ux>caY!^>v*Yf*CZx$3b^N zTqO_v<@t;eDyKz{P$@(is8WiIG_DtS;ZvZcLJ{O3c?n+%>6-fIc}=Qe&g|K4Qh#cv zry1a?+3fUWE_mw6<_?656>&7CE|ET>(lJp&@&xKD^U|u(Eb(Ajgk~Ui|r^hKKcxJR&`Def96(+3A2Lfpmm?xea@nU8t|k-@FkEk~=iVX42?OI-|qc+oP=s zU53@ybue%QST+Jv11V8BE;J*#UxH(**`Tnch#A44LLb%`Gz-Ri{2w}wJTlxQoZ8;q zJ}67G!LUnFtAl)&>KpThozvvdCm0=>1e9wV+7ZWT zeUeq9`!s#V#RtOE#yU{n)C$ZA$y?{bp{fCaf|c+tGQYXKMp1?=BDs3?b>G@cHZDB2UST-ubn+QHK_(4;1DasV{zk9S9bD%~ z(6ZFeq;Sr-xC`(T-Dg2E#7Wb4G}zf*S?z~H>8?#{uo--eoj{t1Mr47y?}AwEfk^@G zgns)pYDOW-yt76DBG&6xy0VQ$f62zVe3scrl!DQD?IlH)JbjFX$^X*??|ut%R1D@4 znbOa`f2WnzjVjiJ~JXB&t|(vL;%XG>0?qqJbdA|eH8LjW2$j(WhtFYs9Y>PogotMl!nB=xht z{)bNsUm%De>K`(y?4YrJ;OM8>_V~BtFnR@8LK_MUo_`rY$8@RMK zXSaIT!f&(sQn&;N(qI}!OOe}&HXZbp$XC6YxX>`!R@t1ba&xP@v%U#Ct<>gU%#ZT^ zE93_2!I32`BBfH--2RidT;~=twjo z1Fwa*gBe4fAy$t(@JQrPsV#yKh;X_erRq@!9*Hv_xp7ijw}H_BMRw4UN(#vcY(UDA zN@%fEk6Ab{A1!zhTo4X6N_&ZB7wWMG9}E6Gjs}bd5<`$R7wT~ff_NQ<8<|px=9Jh~ zq*pw*C9=#CWQ#DgQ%6gouX?;b66zh(X0_n#K?%VWL?@YuP@Nm*_}qhpSw*_p(7K8CpByJ|=pBZbE~UU6j26Kw&|GGy|Rs0dBdIddfnB(3-+iLNXm{XgnyI z6VNd)R8QUW62F&oc0lQm<((0(R#z?5?AI;&7zz-3DI`kWqjXEv=a)EE;8V#uN=E>7 z^@28kjqFe&irN&%d#GuXKx*(#^g0he`?U8`*+_)Vn!a?yu{)*$dAIauBGybxB&MmJ zW{xiI(0Twz_hE({VrLysgGBGW$}O@i64AkuiG6RZm~|XK~<~NBSP5 zP{ACOJge_g9^(i%@ihxNglW#Rn{ncQ)VEC$c=@7nS za95(@w6#WGr<4fO-BdkmL88%vyN>s(YKGiZ-OM7^gnH3{m{Oz=HAVijwKmr`ZzDPz zHgPDdsgtFHJxMK^61wUS7xsXF(ri5;jDfvPb0Rpk)pG{gqJ4{29VlIU@X@5w*aPeB zIqJDnE*WI091c#TgC=nS@oO(u&s&g^1^pnc4eF(RaJ}2zUb?bsJRCk86rgiTm^299 zsprpjT?RK-5mJZ{a1Ms>o4#N{7d9P$c4y@11Hnfy3h)C^Ql2SPFI*7V{0#AgiT)^F z1+~_cct9)$p?jqM=u}OVI5^a3Hg&Uv(*TC37oDn+MY3Skp&k(e8O&q#;)PSfX@qTs z8w8&Yv}3R=LM?h~#-*@`)&$bN#D~L+I^vg}nsFichetJ{&oxCl6iKR=o$RCLTYHdi4?9`D!A_N3L!~kxkG4(cpNdEYw zws!#2tt}i1Ndn0`NN{32$NaW@uN?o zh-2hRySxHK8*LB&e+pkm%qqUNF%3P43jJegf5qRRalL<`{FC!coYkbeXv&3}EJ}Dt z!$kdQbCpY!H(3SS2fT&kukPcwwXWMMM&ue?N)mz+Dh^1g)aw?cFh`shirX4iM90}a zx&{7`OM4q$zm%vkb@9Y_>4uTGc*YcqynZ36E)C76<4g2Khcrn5SgE5l;GkZLYax#V zRzkSO0U8gvv3kQ)p9!CV3&0P%;PdE9L34Vb#OjSY)+O_7*2JM(69Mh^PPAW0p=(xu+A@bj&YN8Kyat?q^}rTIVx98Sz21nbO;P;Xs0qxDIj56Z`A zHAo~DZhz|S3c5L}w+#;{A2S2eST-ht3+|pF*@)`x3%a(Us_qoaiwR@ZbH%vhwI32? zU?z0tqH`?hHYz;wcUz$}mgkT$JF7zBMbV=YkCr{3)1F?vXW>@WblqNGQ*8uwx)YW_x~K!8 z$J?R_OQ_zvAdvq0(X?8Si_XQ6^EWm%ur-$28)7nrAIGE`dg^@xr9eq@QoEOWZxdLC zmWD+XJ{kBOi8G{GAv^oebWBz5#0_FFNz`I)ryfld_%v+xketz0maG>sghai6K^N#% z9RWq;dIYeA`{DL0L*^At5C>q(0cJpZs zKWc4gR1;&O(`25kjQY^ReZ>JzS_>$?vh;ymqvr#fY0s@&Z0uyKlp(J}oeF!O{z=IX zhbm%paqtq|@sBi?jx3;u+yb;H@k9dBj{5L|fTxF~tKk9BvfjO7MN5kd;2K~OT3JHy zG#~kkW^o$TEOIHx8XgxECqMuSqlth)TkNa9Y(73%9D$%4U5b-THAP4+0JE<|&3t4* z0AZ)2#hTu3%usrC!!{BNClYX>RDE>enB21UK2El)Th;tc-a_14K@*wAZgjKu$z^yn zT_GjFR{E=j?W{WV=55-k~J&UHGQcU<*sOSaJi~ppP4g?>!=_E6q0K0e;&hCpIXp>mywX` z?kCaEUy;Aj8dzQ@-DW5$2CPcgXh(f|;jX;Wx&VG+>}Kq^8@)*rEh#|15xk_gJeho2 zNT|QnvG|i4eNbIXZv+phNDK;r7(3?dXBLErq<$9?-tSj+o=vE~dG}f@wNX^(uCyJn zv@{Y2t?>jbUZCZSSCi54iGmfZxkPx867_cr_ZB67+U{J7ICHBT7-WDbbBGJ5ktAw| zSbcWkey4X163{g}tu>7V*nNzH9(bfAdB^H=I(&E9R-(!e@UD0dY!52Rq{iCA`6Chf z`O_=_T6b|{EbhXlL5of4AE}W@{e9y|N#0b;mJ^%B61CJ?Fku9ytP>2SXgohvUsw>{ z?0UhFPX>^G#afVR65{0Kyy@l!j#z!M(bLUoJMJ7NIsOPSW7@yd4xI$Wmxgqdxy50* zg^%Sc_5e8$7@V;=xzeTcgZc;U>YiNN4Nsprtw)zQBh_(5DQ*k2;p!h3gdgSP?xN3e zIoTS;DSZY>vU}9=@IO*I|D>}q=^dS^(6zZQB(vx1Lk@KG@aYzWDC@8rlJsqmAG&ZZqua=OIf61ruw6qn3 z+>VGWh)AeABlRz{NFn@*FrVZZ#RHT@=CS&!j$#i9dWaNqk6H|=3E@7Q%V6CIeS7OzWTSB_aOuh(qWsJ2Ie?S80z1r-pd3f@OfzNDV9p^^eBN< zU%NI^pkSNHu&0zJQ3OyD)A;&=a9+tOQr^41!Vx6Bmc*`?Ry9Ipcw$wzq9PI-VLs3x zumEx9s{dG!swlb8crNz9!EkUp^VJ>LAqj0%rZ`lT@Jc3B4pCqSjz)b$BLya2@0v7&8TYEX>3CSg)U=P7 zeF-Jrjz@DB0Czd8i|W6oPDC?p;8&yoVg;uST(6WM^S38m(SBI)5AbOcaU?kExcEx< z?nu>qv*Oy3ltWmamq(Q}iA^^mEM1%?stxbcxw9w=1CDGxYR%ga9pVr!D8$J-{zzJ(?^C;ZMW^sQY#5Scqi8^0MD= z5UV!%NNPYR2#j1R9q9qyIoU8z)`RB=&o`sXFWmAy^?;6)GRRst2PeNt5`Jwz~ArO z!2CqKO#*@suYcy?m!BWe`O(&=HL{^B9@&uskdbE_f^qEmPy|Il7J|~GZ!tzop&r$_ z;TDneu34d-^?^vV&FA(1~}DVLTml9jzEJ+Zn$6ST37udmjva?UR= z-PD1JZDF#bLk-d>$r-?+965nd;M?jk9SMn?&f9w&V%!<)Lg0}&?GRpI1gXb%eoyY) z3N!EZ;D@)jPU_jIq^Eog%P4?fi?XT5b#!su>77CK_}mYBDTSEbE>U)|dVC|`gT3S0 zT0HbRm?(Ay7xHMI1OSrD2?PTgQBUan(BPv_>}bc{6#41HLBd*X*Zoci+PJ7pJPxT8 zfshpj5by?sux$0Dj=&&B)hCc-w5JXPCO!HENpEVYNG1xdo;>*qF|$o9ke)A`{G=9h z_!&ucsXyq{n5jlZkNZA;F9Aq`w?xP!5Z1k?bm|mWb5&@LtUwbZ59+{Kc4%yA2uraq z=S;4i+7SwXp@$l})Cn55qswv77nHvw?S=4x02IAO<6K?U5wOqnLE3n8y2L=;@6&Iy zz#*dv@YS7P8ojta9bcCsHlFchs{wb=1HdeX-u@R59^kTJj{){)5)a z^p}K;=GmPe;Osim<_*{h#!|60u_>)MxF^aK%u2z z6d)Q%QuQLOS0+6Z=>U3F;9y7shb7XdvQ0-7l!^~I3L%M5y;y7FNtZ(=Nnrvja?GBn^ZTtw=n9VvC0bR{to6O$D62bCQp zYY}`zc&#|-FY7E%xy*^g2^@XSLfWyo!Z#bjs0fkd%cqJA$1&Gec~`jLL}kGBlNady zQoUlAC$09iSy?zo(nLxisC*%z2C}Df9m!R1&c5aAcQ3~v%yH+v`4Fq1-xq<#lS+~CW z^_@j=V#+skezMyY5ktUodE+D!uUy&MSbt+@u`7qnn>sgYeEu)RT zD?&CPw64_{ZxMAPgV(>18@#piQzO3=CfL6G>1~}Kss6-^)zf=>=O+fg*#vJ>$>lpb zHy-~z^3xUn`<j=?al^6fM@xM@{B!Bs{&d;>2+1%LNSw+Lt!}j0b>GZR$D?Tu^ zYVDEDtNHWJVzINfcH)Db8|u;4y7I!i1+oABhxGhe-Vb-KgWp~3Z2m>(y1e7HjVsH) zM0(1#eDlOd^xw$Xe^md5u*zSVKdo*4b?3TVwhlSO-*kR}@3aN@vCa?G-*&e?E~iC* zdy{cKp~vByPl~U^NAjav>pQETGQVEi{B$+ZzwP{Bx4W7Xfm-i>=Aeg30MtR~66mrD z2`L$kzdPtiU{h&)4kse@xfyL()Mq=VnR51XMxlxh7OG3k$5E(s!^(%Ia$<)-lT$VIb%N{1Hf_l=X1v!^2jtVgPtrf$&~nqYz3WpwPtYe6j>z>Cn#L@(bLm z(o~8>^}$2L;`DXu9Se1gu_{(`FnfWprQQr;bjp8|8sUx&sh_yjQeZTx9y-*9k;{No z8|V@^iGS&QOH#Andn+*|fSh^2OVg14ufCV{Fl)Zr`KDO_Q@QoMBMK9vBf?<^!5dB_ zcwSh!)xUP`*lZ@R*INlR6wyh9)%wn5e%Z?Q(F=A~@j^Bz>B1=4=xSODHdQPOS$Lq3 zBaSjc-~ZMTKvZPHI1`!(RMO2&mX`EgmX^*jB2JZgc?@}n^WcK=*df3XBJdC=@e6^f z)GR-Cj{jrR)K}U7xIn7^y(1`EqY4JIkE&sv#BgMh=cUjW7FwzFW#%wJg z@xgpT&o~@eOm`9*I(0PDj9!@PzK$m=f9WhK zSS1xYT-+NKUM#5RJNnjY6Z^{viB zWQR7cH3Vm4CX9$%8^sC0N@_bnU_zC)BG|)o^jF#5=5v~pfr4;81<4)%%AdxH3!$y< zg#w6h1?mbe`oFZ%GE%%`BA`-LD*M8g!%Est!`CUG%Wn@Jeh?~kViP6JC`c^&xJC#k z7sH~^gX|GrWvV|xma2O%iiGR?85#-lp+$Mz4fXu1NQwSc7n@pFPcckJu?t1wC0sRy zFz2fKEK0m^d>G#hBV8cJ21yD1C-fNtj7Of74Cj3pn&*_kl?vSVvMwGY!!H>QnJTf$S?97CDuhj=QwJN z9=0fU-}JczN48e_J47~zmxS1bEDJs0>E8tB0kls!Vx@k6k0q{#tF$kkHGr6EECT#s z34yo68AOUL zpruCuK}e^#tX$nADh`E^^x30cwoKF`7X?abu4a>oEP6l$cWXmZWw6B%=AO!ZBQ&-5j%Rv?4XUkU$?WnUYJ$EkG!VIZQKB`GIW@^C_ae0=+6YOAr%^8n(~Z`fHrcLmWT*b#k8>wA8z&C%pySdTJWNUC%6?z zqiywca}1cwq1b(xZD_vK)S|RDNR2HTByDn85+Zpd3CX2Wihj-DjaKG`ZOk$$FH9~H zpu!=(BP6fU3OsZa0oDK?gv~(fObVr*G2;+}j7mrqAMtz$7Z5P29Mm%x&#IStw^_vX zDl!cU@TheNA+RQs3?4u|t7RwZM{p)Si33ONI?j+FHy8#o{~SjK_@HoqV{SfsvBy-Z z+Bvh9)hisVONHQ&g_(Wjr8ox^381C`CoWQdc<{G~ZB74KYVRP=B9jPh!NJGk*rE+w zmc!Btt_{=kxsy#+^YoI)z^jt=$H*mLN|1|Qhu9YCd4ofLuw6h~wMh*cN015?AcF)# zDRiMwsZh^fJYbfS)<{5!9m>ValKl~@7fjIbYjBR9wRHp{w}};7<_sOvy{V05L$~Pw zcqGt`OuewBMoe+B;~_~~WP}^i20**i(_;NeW|P*W>W>zs?6bn>wKiw1!bF&gvnnQ@ z$@{p;^$!v7080vc5GT-)h#srAj#FilB@WHeTEY?;b{LO{I)rF-P%0`=m- z8x-$mpk!^WWG~s-T%|g)(y=@q?ON%?4r4Xh%Tm2$nu=~+-MTqUhoBcJP7rc1e8iXT ze)B`ZG)tRwYWomAb`qNiGEEy-F$)6qvPA)sG=@Vn_1GK_<#uyv5K=lyeR~3t3Y|rL z_3}l*fQ(<7=u6Kd^)#5ZFI4kU3C9pDITWI*S7^Jcxi}yIoNmKMCtoTvcZCd};BF~) zH5NJZ$EgNt!})~xOPPv#<)XwvnsEk>C7i|7h8h2WY`CBuwfmKnM5clH(20b`4+QXE zwJ2e%W&|@6&z&}tmiI*!CCELpB4p#~a385x4=-kGGW1p#HyM|5OV_O9w9$_yBeo6% zAO_I;$AcXrA~cadtEBY+X>_6@(uV+V?@tB??ckzH)ER{Jf=!cM2>%VWO4I|U>NSfe znFgs2a9T`~3c)apsQjR-=4%&EQLYEYhh~)wGUc&7noIxb$ez9R#rHJ8B%g%*`Bk<>hggtz=IS`IFwtRA)W2!{CrYeU-Z*N7w zj%iN%okwM#QmzIg-kS!7!f*h_b0dz;nM}R8C8Ht+RUk=67#mL> ztU`|Z2WbiIDmA!oS=1(>+?sBEkBGLFJQ)B10s-u;0Gd)jOLI<5pM0rcW&atz&SF zVZehtU|2p{_a>wy_h!v7wz)A8B!Vx1o;ZoAvUV6 zsfj{g`6aB!?^+aWcB9N%bKty^Ic&>W#1wFiAlfDDL;tmy9=z(^!wPwDCCX!PrI~>< zm_a~LTKbhxPmy4gIO;w77^n3l7_`VfJ)*Ftglk5fApzC| z4l?QVWvllsN>;q87igIc=hh*|DVAqrD~u$cX`euM+LZf1FYN-?`ZIH28238c*jSx1 z;J6b3l?RbBLflZ2>spBSo5iXT&_jU5*3@q=4=hm(*}6P42N#`7z%)TpDXcu|1B*hh zuU~t#gXaN&(s8SAy25kd5aCKUrKz5&L@7eJ!LQhn{t*AawKMB&ql)5q($=&!NC-Xv zTm~ViP_8|jXC{gxm2?D1DGx2A5-)V@nZ#BdyYkXByz>G233%yu;B&C=`@Ziy^E-3L zv7NZ3DT!K*?=0ue-2MK~Isa30d7Uh9as5l+vGL;9C+m^1F!=wOyb}EJiQ7$p!@U%3 z8KS{ds7dgrVX#T!H>MY)H2FI(9qgl6N@Il!qKK&YP17rkc1?!JTZ!6NJg5Mg2_|R6 z=Vh-1nEcjsjonVrft76J$-A`rts z;wGi>d!@B;dzq1A5(S<=L1>K>NLxHiWnpB2p$7-u`2A8cmLd&v4{tOTHV=3jcZnIi zF`R1I@L}K>#^w~xi7MPI@dp#o1#9EJSh%4z=-T$hVgF)=!m5Q1!A#hjDXeIMhCv+! zXwry3oEk!S*3Y$YktoR4#GFjnq}#bt4`>m*1BMzgcJQ+Jqp6X6&VxbQ#L}g%CAa`_ z>Ik-s9~&{p;*WE5xbOuxT^I=hV_->*LrdON=WkZ__wpuzC7DKpno}hJFKkGkltz?y zXgr|~%HI31|D@Is%@u(J3hkBrk}B}T(M{T~18K60#*siF3A~u`r}>DwH>pTH-v(2D zLFUK<;No;8gZV<>gc+QHn ziOMfz=>vZ)9^YS0RzC-aV1KOfLt8?84T65*UIAR|#a|x*3OobPv$6o61Lh!N0lNq{ z{^n3kVLr}0-4uv9%uX7oT0->!U~b0W=9_-g)RSf^BWJn0q^<}g#3IjR%&c80D;k@qZ{?&A4|eA zy!X9kpL?5rJa4Rqw0~-_hMWKZF%|M{{2ejN`{_{aZ~j0rqlIAaf}tHwyBK;C3p0s- zK7t%(TDZ`|dMu@|sss^mlK7XS>EE-Tk+Po)*(9*mt_dUjuSb%}EQdFi2H-1Do&wM` zY2op2N0Z4+m7~iK8w8sJN5%aB=?J5;3@l091qH1#Y+$r2VhEl|-coN@V+le*uN4aZ_h%VD8$8e8>r)I{ZU?3C~~ zj_?gxJaGYEorU`fm*^~AYV01vZlBBd*uJjnT1gy#nvdDK7U}9zx4qRGc6QYh_*6^$ zbw5%#qq$2}XUUGvEIf2Sl#pWLPiUnfX8eQ2C+}^HI#-rhllS_&CnRRlYo~53KD=Q5 zP8P?)V~~pl(TM&gDvFXJ<$6xVqQhs$ecqtsvZ5 zEw6|dLH^WIf7Hq9mIN6jkesEOo%YrJ=hC`$-mdx@=t%{-7UFNch7ww12Ciy40Jd-x zUaUHD-8>DgqymD|5CqEon8LX0uq)_@wC8aM!gZLzw6A=7T^=OHfwBW6h2gr3Oh@BI z9d5uLr$HaM1$mLDF|65;+kJB9OqIMnkE5$2-bCIIJ#T(QE5p&#c=)c{VZilJ`JRR! zn`gs_FL9LbYJy4yNVc^b)$%kD9cf2LHBaux^l42p#tKULK8KoI=7;hF4I?I*nN-BP zA~{dMlBsbF;*vZVDNsL+S%{Gva`YpOz4|)CD478Yi~GJik~#$%lHC5)aF)?mOz0J6UY>O6p%)+>rhx!jTe#*HBR#s3{~gZ zMOq4ys^x|A`<-CjaY?$!u%Jl+@`nzCoDNl zhIXJR2{r}{4oGCZFJ&mLhYFo(OfQZbaHGTMMZX#Ldsk?bCP_D0k!HJEmTp=;MYLI# zjKk#S@iUJUBf#mR-xtY+my0ptLVWhz`B-nKHa3M_COR--Dz=T`SBT^X-cQzqH(5+*!Q)!AB+dzc0mzrDcCGj(wywLNl_CVnW z)KB`m%Dm-3CH(8EVk}g>O_iv07x$xfQ^_YKR|x`ZRPt)rN`?xpuxeyV2vTscOUp7` zFw(BzlXdd+5i9m literal 0 HcmV?d00001 diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs index 18334751452..0703569dbf4 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run2.rs @@ -274,6 +274,7 @@ impl wasmer_cache::Cache for WasmerHome { #[derive(Debug, Clone)] enum TargetOnDisk { WebAssemblyBinary(PathBuf), + Wat(PathBuf), Webc(PathBuf), Directory(PathBuf), Artifact(PathBuf), @@ -297,6 +298,8 @@ impl TargetOnDisk { Ok(TargetOnDisk::Webc(path)) } else if ArtifactBuild::is_deserializable(leading_bytes) { Ok(TargetOnDisk::Artifact(path)) + } else if path.extension() == Some("wat".as_ref()) { + Ok(TargetOnDisk::Wat(path)) } else { anyhow::bail!("Unable to determine how to execute \"{}\"", path.display()); } @@ -306,6 +309,7 @@ impl TargetOnDisk { match self { TargetOnDisk::WebAssemblyBinary(p) | TargetOnDisk::Webc(p) + | TargetOnDisk::Wat(p) | TargetOnDisk::Directory(p) | TargetOnDisk::Artifact(p) => p, } @@ -344,6 +348,15 @@ impl TargetOnDisk { .context("Unable to load the module from a file")?; Ok(ExecutableTarget::WebAssembly(module)) } + TargetOnDisk::Wat(wat) => { + let wat = std::fs::read(wat) + .with_context(|| format!("Unable to read \"{}\"", wat.display()))?; + let wasm = + wasmer::wat2wasm(&wat).context("Unable to convert the WAT to WebAssembly")?; + let module = + Module::new(store, wasm).context("Unable to load the module from a file")?; + Ok(ExecutableTarget::WebAssembly(module)) + } TargetOnDisk::Artifact(artifact) => { let module = unsafe { Module::deserialize_from_file(store, artifact) diff --git a/tests/integration/cli/Cargo.toml b/tests/integration/cli/Cargo.toml index cb76f0293fc..79e50dfaa8b 100644 --- a/tests/integration/cli/Cargo.toml +++ b/tests/integration/cli/Cargo.toml @@ -18,6 +18,7 @@ pretty_assertions = "1.3.0" object = "0.30.0" reqwest = { version = "0.11.14", features = ["json"] } tokio = { version = "1", features = [ "rt", "rt-multi-thread", "macros" ] } +assert_cmd = "2.0.8" [dependencies] anyhow = "1" diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs new file mode 100644 index 00000000000..5bfe0c81213 --- /dev/null +++ b/tests/integration/cli/tests/run2.rs @@ -0,0 +1,243 @@ +use assert_cmd::{assert::Assert, prelude::OutputAssertExt, Command}; +use tempfile::TempDir; +use wasmer_integration_tests_cli::get_wasmer_path; + +fn wasmer_cli() -> Command { + Command::new(get_wasmer_path()) +} + +mod webc_on_disk { + use super::*; + + #[test] + fn wasi_runner() { + let assert = wasmer_cli() + .arg("run2") + .arg(fixtures::python()) + .arg("--") + .arg("--version") + .assert(); + + assert.success().stdout("Hello, World!"); + } + + #[test] + fn wasi_runner_with_mounted_directories() { + let temp = TempDir::new().unwrap(); + std::fs::write(temp.path().join("main.py"), "print('Hello, World!')").unwrap(); + + let assert = wasmer_cli() + .arg("run2") + .arg(fixtures::python()) + .arg("--mapdir") + .arg(format!("/app:{}", temp.path().display())) + .arg("--") + .arg("/app/main.py") + .assert(); + + assert.success().stdout("Hello, World!"); + } + + #[test] + fn wasi_runner_with_env_vars() { + let temp = TempDir::new().unwrap(); + std::fs::write(temp.path().join("main.py"), "print('Hello, World!')").unwrap(); + + let assert = wasmer_cli() + .arg("run2") + .arg(fixtures::python()) + .arg("--env") + .arg("SOME_VAR=Hello, World!") + .arg("--") + .arg("-c") + .arg("import os; print(os.environ['SOME_VAR'])") + .assert(); + + assert.success().stdout("Hello, World!"); + } + + #[test] + fn wcgi_runner() { + // Start the WCGI server in the background + let child = std::process::Command::new(get_wasmer_path()) + .arg("run2") + .arg(fixtures::static_server()) + .spawn() + .map(Child::new) + .unwrap(); + + let assert = child.join(); + + assert.stdout("Hello, World!"); + } +} + +mod wasm_on_disk { + use super::*; + + #[test] + fn wasi_executable() { + let assert = wasmer_cli() + .arg("run2") + .arg(fixtures::qjs()) + .arg("--") + .arg("--eval") + .arg("console.log('Hello, World!')") + .assert(); + + assert.success().stdout("Hello, World!"); + } + + #[test] + fn no_abi() { + let assert = wasmer_cli().arg("run2").arg(fixtures::fib()).assert(); + + assert.success(); + } + + #[test] + fn error_if_no_start_function_found() { + let assert = wasmer_cli() + .arg("run2") + .arg(fixtures::wat_no_start()) + .assert(); + + assert + .failure() + .stderr("Can not find any export functions."); + } +} + +#[test] +fn wasmer_package_directory() { + let temp = TempDir::new().unwrap(); + std::fs::copy(fixtures::qjs(), temp.path().join("qjs.wasm")).unwrap(); + std::fs::copy(fixtures::qjs_wasmer_toml(), temp.path().join("wasmer.toml")).unwrap(); + + let assert = wasmer_cli() + .arg("run2") + .arg(temp.path()) + .arg("--") + .arg("--eval") + .arg("console.log('Hello, World!')") + .assert(); + + assert.success().stdout("Hello, World!"); +} + +#[test] +fn pre_compiled_wasm() { + let temp = TempDir::new().unwrap(); + let dest = temp.path().join("qjs.wasmu"); + let qjs = fixtures::qjs(); + // Make sure it is compiled + wasmer_cli() + .arg("compile") + .arg("-o") + .arg(&dest) + .arg(&qjs) + .assert() + .success(); + assert!(dest.exists()); + + // Now we can try to run the compiled artifact + let assert = wasmer_cli() + .arg("run2") + .arg(&dest) + .arg("--") + .arg("--eval") + .arg("console.log('Hello, World!')") + .assert(); + + assert.success().stdout("Hello, World!"); +} + +mod remote_webc { + use super::*; + + #[test] + fn quickjs_as_package_name() { + let assert = wasmer_cli() + .arg("run2") + .arg("saghul/quickjs") + .arg("--registry=https://wapm.io/") + .arg("--") + .arg("--eval") + .arg("console.log('Hello, World!')") + .assert(); + + assert.success().stdout("Hello, World!"); + } + + #[test] + fn quickjs_as_url() { + let assert = wasmer_cli() + .arg("run2") + .arg("https://wapm.io/saghul/quickjs") + .arg("--") + .arg("--eval") + .arg("console.log('Hello, World!')") + .assert(); + + assert.success().stdout("Hello, World!"); + } +} + +mod fixtures { + use std::path::{Path, PathBuf}; + + use wasmer_integration_tests_cli::{ASSET_PATH, C_ASSET_PATH}; + + /// A WEBC file containing the Python interpreter, compiled to WASI. + pub fn python() -> PathBuf { + Path::new(C_ASSET_PATH).join("python-0.1.0.wasmer") + } + + /// A WEBC file containing the WCGI static server. + pub fn static_server() -> PathBuf { + Path::new(C_ASSET_PATH).join("staticserver.webc") + } + + /// The QuickJS interpreter, compiled to a WASI module. + pub fn qjs() -> PathBuf { + Path::new(C_ASSET_PATH).join("qjs.wasm") + } + + /// The `wasmer.toml` file for QuickJS. + pub fn qjs_wasmer_toml() -> PathBuf { + Path::new(C_ASSET_PATH).join("qjs-wasmer.toml") + } + + /// An executable which calculates fib(40) and exits with no output. + pub fn fib() -> PathBuf { + Path::new(ASSET_PATH).join("fib.wat") + } + + pub fn wat_no_start() -> PathBuf { + Path::new(ASSET_PATH).join("no_start.wat") + } +} + +/// A helper that wraps [`std::process::Child`] to make sure it gets terminated +/// when it is no longer needed. +struct Child(Option); + +impl Child { + fn new(child: std::process::Child) -> Self { + Child(Some(child)) + } + + fn join(mut self) -> Assert { + let mut child = self.0.take().unwrap(); + child.kill().unwrap(); + child.wait_with_output().unwrap().assert() + } +} + +impl Drop for Child { + fn drop(&mut self) { + if let Some(mut child) = self.0.take() { + let _ = child.kill(); + } + } +} From dd42d32facb30f1b82bc50d0fb40eb4ca6186281 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 8 Mar 2023 16:45:28 +0800 Subject: [PATCH 10/39] Wired up bare WEBC commands --- Cargo.lock | 1 + lib/cli/src/commands/run2.rs | 69 +++++++++++++++++++++++++-- lib/cli/src/logging.rs | 11 +++++ lib/wasi/src/runners/wcgi/handler.rs | 3 ++ lib/wasi/src/runners/wcgi/runner.rs | 19 ++++++-- tests/integration/cli/Cargo.toml | 3 +- tests/integration/cli/tests/run2.rs | 70 +++++++++++++++++++++++++--- 7 files changed, 161 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0713273176b..3301e79e663 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5323,6 +5323,7 @@ dependencies = [ "insta", "md5", "object 0.30.3", + "predicates 2.1.5", "pretty_assertions", "rand", "reqwest", diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs index 0703569dbf4..4bcfdfaa304 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run2.rs @@ -4,6 +4,7 @@ use std::{ fmt::Display, fs::File, io::{Read, Write}, + net::SocketAddr, path::{Path, PathBuf}, str::FromStr, }; @@ -15,7 +16,7 @@ use url::Url; use wasmer::{Module, Store}; use wasmer_compiler::ArtifactBuild; use wasmer_registry::Package; -use wasmer_wasix::runners::WapmContainer; +use wasmer_wasix::runners::{Runner, WapmContainer}; use webc::metadata::Manifest; use crate::store::StoreOptions; @@ -31,6 +32,8 @@ pub struct Run2 { store: StoreOptions, #[clap(flatten)] wasi: crate::commands::run::Wasi, + #[clap(flatten)] + wcgi: WcgiOptions, /// The function or command to invoke. #[clap(short, long, aliases = &["command", "invoke"])] entrypoint: Option, @@ -47,6 +50,7 @@ pub struct Run2 { impl Run2 { pub fn execute(&self) -> Result<(), Error> { crate::logging::set_up_logging(self.verbosity.log_level_filter()); + tracing::info!("Started!"); let target = self .input @@ -90,13 +94,53 @@ impl Run2 { container: &WapmContainer, store: &mut Store, ) -> Result<(), Error> { - let command = match self.entrypoint.as_deref() { + let id = match self.entrypoint.as_deref() { Some(cmd) => cmd, None => infer_webc_entrypoint(container.manifest()) .context("Unable to infer the entrypoint. Please specify it manually")?, }; + let command = container + .manifest() + .commands + .get(id) + .with_context(|| format!("Unable to get metadata for the \"{id}\" command"))?; + + let (store, _compiler_type) = self.store.get_store()?; + let mut runner = wasmer_wasix::runners::wasi::WasiRunner::new(store); + runner.set_args(self.args.clone()); + if runner.can_run_command(id, command).unwrap_or(false) { + return runner.run_cmd(&container, id).context("WASI runner failed"); + } - todo!(); + let (store, _compiler_type) = self.store.get_store()?; + let mut runner = wasmer_wasix::runners::emscripten::EmscriptenRunner::new(store); + runner.set_args(self.args.clone()); + if runner.can_run_command(id, command).unwrap_or(false) { + return runner + .run_cmd(&container, id) + .context("Emscripten runner failed"); + } + + let mut runner = wasmer_wasix::runners::wcgi::WcgiRunner::new(id); + let (store, _compiler_type) = self.store.get_store()?; + runner + .config() + .args(self.args.clone()) + .store(store) + .addr(self.wcgi.addr) + .envs(self.wasi.env_vars.clone()) + .map_directories(self.wasi.mapped_dirs.iter().map(|(g, h)| (h, g))); + if self.wcgi.forward_host_env { + runner.config().forward_host_env(); + } + if runner.can_run_command(id, command).unwrap_or(false) { + return runner.run_cmd(&container, id).context("WCGI runner failed"); + } + + anyhow::bail!( + "Unable to find a runner that supports \"{}\"", + command.runner + ); } } @@ -413,3 +457,22 @@ fn generate_coredump(err: &Error, source: &Path, coredump_path: &Path) -> Result Ok(()) } + +#[derive(Debug, Clone, Parser)] +pub(crate) struct WcgiOptions { + /// The address to serve on. + #[clap(long, short, env, default_value_t = ([127, 0, 0, 1], 8000).into())] + pub(crate) addr: SocketAddr, + /// Forward all host env variables to the wcgi task. + #[clap(long)] + pub(crate) forward_host_env: bool, +} + +impl Default for WcgiOptions { + fn default() -> Self { + Self { + addr: ([127, 0, 0, 1], 8000).into(), + forward_host_env: false, + } + } +} diff --git a/lib/cli/src/logging.rs b/lib/cli/src/logging.rs index a600165d6b3..5f082cd7660 100644 --- a/lib/cli/src/logging.rs +++ b/lib/cli/src/logging.rs @@ -9,6 +9,7 @@ pub fn set_up_logging(level: log::LevelFilter) { let fmt_layer = fmt::layer() .with_target(false) .with_span_events(fmt::format::FmtSpan::CLOSE) + .with_ansi(should_emit_colors()) .with_thread_ids(true) .compact(); @@ -22,6 +23,16 @@ pub fn set_up_logging(level: log::LevelFilter) { .init(); } +/// Check whether we should emit ANSI escape codes for log formatting. +/// +/// The `tracing-subscriber` crate doesn't have native support for +/// "--color=always|never|auto", so we implement a poor man's version. +/// +/// For more, see https://github.com/tokio-rs/tracing/issues/2388 +fn should_emit_colors() -> bool { + isatty::stdout_isatty() && std::env::var_os("NO_COLOR").is_none() +} + fn log_directive(level: log::LevelFilter) -> Directive { let tracing_level = match level { log::LevelFilter::Off => tracing::level_filters::LevelFilter::OFF, diff --git a/lib/wasi/src/runners/wcgi/handler.rs b/lib/wasi/src/runners/wcgi/handler.rs index 58469c66d0e..f2ec1e18a9c 100644 --- a/lib/wasi/src/runners/wcgi/handler.rs +++ b/lib/wasi/src/runners/wcgi/handler.rs @@ -36,7 +36,10 @@ impl Handler { Handler(Arc::new(state)) } + #[tracing::instrument(skip_all)] pub(crate) async fn handle(&self, req: Request) -> Result, Error> { + tracing::debug!(headers=?req.headers()); + let (parts, body) = req.into_parts(); let (req_body_sender, req_body_receiver) = Pipe::channel(); diff --git a/lib/wasi/src/runners/wcgi/runner.rs b/lib/wasi/src/runners/wcgi/runner.rs index 14e67859a3a..228367351bf 100644 --- a/lib/wasi/src/runners/wcgi/runner.rs +++ b/lib/wasi/src/runners/wcgi/runner.rs @@ -3,6 +3,7 @@ use std::{collections::HashMap, convert::Infallible, net::SocketAddr, path::Path use anyhow::{Context, Error}; use futures::future::AbortHandle; use virtual_fs::FileSystem; +use hyper::server::conn::AddrStream; use wasmer::{Engine, Module, Store}; use wcgi_host::CgiDialect; use webc::metadata::{ @@ -37,7 +38,7 @@ impl WcgiRunner { } #[tracing::instrument(skip(self, ctx))] - fn run_(&mut self, command_name: &str, ctx: &RunnerContext<'_>) -> Result<(), Error> { + fn run(&mut self, command_name: &str, ctx: &RunnerContext<'_>) -> Result<(), Error> { let wasi: Wasi = ctx .command() .get_annotation("wasi") @@ -51,9 +52,19 @@ impl WcgiRunner { let handler = self.create_handler(module, &wasi, ctx)?; let task_manager = Arc::clone(&handler.task_manager); - let make_service = hyper::service::make_service_fn(move |_| { + let make_service = hyper::service::make_service_fn(move |s: &AddrStream| { let handler = handler.clone(); - async { Ok::<_, Infallible>(handler) } + let remote_addr = s.remote_addr(); + + async move { + let f = hyper::service::service_fn(move |req| { + let handler = handler.clone(); + tracing::debug!(method=%req.method(), url=%req.uri(), remote_addr = %remote_addr); + + async move { handler.handle(req).await } + }); + Ok::<_, Infallible>(f) + } }); let address = self.config.addr; @@ -245,7 +256,7 @@ impl crate::runners::Runner for WcgiRunner { store, }; - self.run_(command_name, &ctx) + WcgiRunner::run(self, command_name, &ctx) } } diff --git a/tests/integration/cli/Cargo.toml b/tests/integration/cli/Cargo.toml index 79e50dfaa8b..4c6cd6aecd0 100644 --- a/tests/integration/cli/Cargo.toml +++ b/tests/integration/cli/Cargo.toml @@ -16,9 +16,10 @@ md5 = "0.7.0" hex = "0.4.3" pretty_assertions = "1.3.0" object = "0.30.0" -reqwest = { version = "0.11.14", features = ["json"] } +reqwest = { version = "0.11.14", features = ["json", "blocking"] } tokio = { version = "1", features = [ "rt", "rt-multi-thread", "macros" ] } assert_cmd = "2.0.8" +predicates = "2.1.5" [dependencies] anyhow = "1" diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index 5bfe0c81213..c15aeb05a50 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -1,4 +1,7 @@ +use std::time::{Duration, Instant}; + use assert_cmd::{assert::Assert, prelude::OutputAssertExt, Command}; +use reqwest::{blocking::Client, IntoUrl}; use tempfile::TempDir; use wasmer_integration_tests_cli::get_wasmer_path; @@ -7,6 +10,10 @@ fn wasmer_cli() -> Command { } mod webc_on_disk { + use std::process::Stdio; + + use rand::Rng; + use super::*; #[test] @@ -18,10 +25,13 @@ mod webc_on_disk { .arg("--version") .assert(); - assert.success().stdout("Hello, World!"); + assert + .success() + .stdout(predicates::str::contains("Python 3.6.7")); } #[test] + #[ignore] fn wasi_runner_with_mounted_directories() { let temp = TempDir::new().unwrap(); std::fs::write(temp.path().join("main.py"), "print('Hello, World!')").unwrap(); @@ -35,10 +45,13 @@ mod webc_on_disk { .arg("/app/main.py") .assert(); - assert.success().stdout("Hello, World!"); + assert + .success() + .stdout(predicates::str::contains("Hello, World!")); } #[test] + #[ignore] fn wasi_runner_with_env_vars() { let temp = TempDir::new().unwrap(); std::fs::write(temp.path().join("main.py"), "print('Hello, World!')").unwrap(); @@ -53,22 +66,38 @@ mod webc_on_disk { .arg("import os; print(os.environ['SOME_VAR'])") .assert(); - assert.success().stdout("Hello, World!"); + assert + .success() + .stdout(predicates::str::contains("Hello, World!")); } #[test] fn wcgi_runner() { // Start the WCGI server in the background - let child = std::process::Command::new(get_wasmer_path()) - .arg("run2") - .arg(fixtures::static_server()) + let port = rand::thread_rng().gen_range(10_000_u16..u16::MAX); + let mut cmd = std::process::Command::new(get_wasmer_path()); + cmd.arg("run2") + .env("RUST_LOG", "info,wasmer_wasi::runners=debug") + .arg(format!("--addr=127.0.0.1:{port}")) + .arg(fixtures::static_server()); + let child = cmd + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) .spawn() .map(Child::new) .unwrap(); + // make the request + let body = http_get(format!("http://127.0.0.1:{port}/")); + assert!(body.contains("Index of /"), "{body}"); + + // And kill the server, making sure it generated the expected logs let assert = child.join(); - assert.stdout("Hello, World!"); + assert + .stdout(predicates::str::contains("Starting the server")) + .stdout(predicates::str::contains("method=GET url=/")); } } @@ -76,6 +105,7 @@ mod wasm_on_disk { use super::*; #[test] + #[ignore] fn wasi_executable() { let assert = wasmer_cli() .arg("run2") @@ -89,6 +119,7 @@ mod wasm_on_disk { } #[test] + #[ignore] fn no_abi() { let assert = wasmer_cli().arg("run2").arg(fixtures::fib()).assert(); @@ -96,6 +127,7 @@ mod wasm_on_disk { } #[test] + #[ignore] fn error_if_no_start_function_found() { let assert = wasmer_cli() .arg("run2") @@ -109,6 +141,7 @@ mod wasm_on_disk { } #[test] +#[ignore] fn wasmer_package_directory() { let temp = TempDir::new().unwrap(); std::fs::copy(fixtures::qjs(), temp.path().join("qjs.wasm")).unwrap(); @@ -126,6 +159,7 @@ fn wasmer_package_directory() { } #[test] +#[ignore] fn pre_compiled_wasm() { let temp = TempDir::new().unwrap(); let dest = temp.path().join("qjs.wasmu"); @@ -156,6 +190,7 @@ mod remote_webc { use super::*; #[test] + #[ignore] fn quickjs_as_package_name() { let assert = wasmer_cli() .arg("run2") @@ -170,6 +205,7 @@ mod remote_webc { } #[test] + #[ignore] fn quickjs_as_url() { let assert = wasmer_cli() .arg("run2") @@ -241,3 +277,23 @@ impl Drop for Child { } } } + +/// Send a GET request to a particular URL, automatically retrying (with +/// a timeout) if there are any connection errors. +fn http_get(url: impl IntoUrl) -> String { + let start = Instant::now(); + let timeout = Duration::from_secs(5); + let url = url.into_url().unwrap(); + + let client = Client::builder().build().unwrap(); + + while start.elapsed() < timeout { + match client.get(url.clone()).send() { + Ok(response) => return response.error_for_status().unwrap().text().unwrap(), + Err(e) if e.is_connect() => continue, + Err(other) => panic!("An unexpected error occurred: {other}"), + } + } + + panic!("Didn't receive a response from \"{url}\" within the allocated time"); +} From c91ec45a1b4060799fe2eb81b2948848097d1b0e Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 8 Mar 2023 17:16:20 +0800 Subject: [PATCH 11/39] Run WASI executables directly --- Cargo.lock | 6 +-- lib/cli/src/commands/run/wasi.rs | 40 ++++++++------ lib/cli/src/commands/run2.rs | 41 ++++++++++----- lib/wasi/src/runners/wcgi/runner.rs | 2 +- tests/integration/cli/tests/run2.rs | 82 ++++++++++++++--------------- 5 files changed, 96 insertions(+), 75 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3301e79e663..2300aa303ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -127,7 +127,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0b2340f55d9661d76793b2bfc2eb0e62689bd79d067a95707ea762afd5e9dd" dependencies = [ "anstyle", - "bstr 1.3.0", + "bstr 1.4.0", "doc-comment", "predicates 3.0.1", "predicates-core", @@ -265,9 +265,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ "memchr", "once_cell", diff --git a/lib/cli/src/commands/run/wasi.rs b/lib/cli/src/commands/run/wasi.rs index e34118707d4..248a20427a2 100644 --- a/lib/cli/src/commands/run/wasi.rs +++ b/lib/cli/src/commands/run/wasi.rs @@ -1,19 +1,18 @@ use crate::utils::{parse_envvar, parse_mapdir}; use anyhow::Result; -use std::collections::HashMap; -use std::path::PathBuf; -use std::sync::Arc; -use std::{collections::BTreeSet, path::Path}; -use virtual_fs::FileSystem; -use virtual_fs::{DeviceFile, PassthruFileSystem, RootFileSystemBuilder}; +use std::{ + collections::{BTreeSet, HashMap}, + path::{Path, PathBuf}, + sync::Arc, +}; +use virtual_fs::{DeviceFile, FileSystem, PassthruFileSystem, RootFileSystemBuilder}; use wasmer::{AsStoreMut, Instance, Module, RuntimeError, Value}; -use wasmer_wasix::os::tty_sys::SysTty; -use wasmer_wasix::os::TtyBridge; -use wasmer_wasix::runtime::task_manager::tokio::TokioTaskManager; -use wasmer_wasix::types::__WASI_STDIN_FILENO; use wasmer_wasix::{ - default_fs_backing, get_wasi_versions, PluggableRuntime, WasiEnv, WasiError, WasiFunctionEnv, - WasiVersion, + default_fs_backing, get_wasi_versions, + os::{tty_sys::SysTty, TtyBridge}, + runtime::task_manager::tokio::TokioTaskManager, + types::__WASI_STDIN_FILENO, + PluggableRuntime, WasiEnv, WasiEnvBuilder, WasiError, WasiFunctionEnv, WasiVersion, }; use clap::Parser; @@ -113,14 +112,13 @@ impl Wasi { get_wasi_versions(module, false).is_some() } - /// Helper function for instantiating a module with Wasi imports for the `Run` command. - pub fn instantiate( + pub fn prepare( &self, store: &mut impl AsStoreMut, module: &Module, program_name: String, args: Vec, - ) -> Result<(WasiFunctionEnv, Instance)> { + ) -> Result { let args = args.into_iter().map(|arg| arg.into_bytes()); let map_commands = self @@ -198,6 +196,18 @@ impl Wasi { } } + Ok(builder) + } + + /// Helper function for instantiating a module with Wasi imports for the `Run` command. + pub fn instantiate( + &self, + store: &mut impl AsStoreMut, + module: &Module, + program_name: String, + args: Vec, + ) -> Result<(WasiFunctionEnv, Instance)> { + let builder = self.prepare(store, module, program_name, args)?; let (instance, wasi_env) = builder.instantiate(module.clone(), store)?; Ok((wasi_env, instance)) } diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs index 4bcfdfaa304..f115ed95ccc 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run2.rs @@ -13,7 +13,7 @@ use anyhow::{Context, Error}; use clap::Parser; use tempfile::NamedTempFile; use url::Url; -use wasmer::{Module, Store}; +use wasmer::{Module, Store, TypedFunction}; use wasmer_compiler::ArtifactBuild; use wasmer_registry::Package; use wasmer_wasix::runners::{Runner, WapmContainer}; @@ -80,14 +80,15 @@ impl Run2 { store: &mut Store, ) -> Result<(), Error> { if wasmer_emscripten::is_emscripten_module(module) { - execute_emscripten_module() + self.execute_emscripten_module() } else if wasmer_wasix::is_wasi_module(module) || wasmer_wasix::is_wasix_module(module) { - execute_wasi_module() + self.execute_wasi_module(target.path(), module, store) } else { - execute_pure_wasm_module() + self.execute_pure_wasm_module() } } + #[tracing::instrument(skip_all)] fn execute_webc( &self, target: &TargetOnDisk, @@ -142,18 +143,32 @@ impl Run2 { command.runner ); } -} -fn execute_pure_wasm_module() -> Result<(), Error> { - todo!() -} + #[tracing::instrument(skip_all)] + fn execute_pure_wasm_module(&self) -> Result<(), Error> { + todo!() + } -fn execute_wasi_module() -> Result<(), Error> { - todo!() -} + #[tracing::instrument(skip_all)] + fn execute_wasi_module( + &self, + wasm_path: &Path, + module: &Module, + store: &mut Store, + ) -> Result<(), Error> { + let program_name = wasm_path.display().to_string(); + let builder = self + .wasi + .prepare(store, module, program_name, self.args.clone())?; -fn execute_emscripten_module() -> Result<(), Error> { - todo!() + builder.run_with_store(module.clone(), store)?; + Ok(()) + } + + #[tracing::instrument(skip_all)] + fn execute_emscripten_module(&self) -> Result<(), Error> { + todo!() + } } fn infer_webc_entrypoint(manifest: &Manifest) -> Result<&str, Error> { diff --git a/lib/wasi/src/runners/wcgi/runner.rs b/lib/wasi/src/runners/wcgi/runner.rs index 228367351bf..d43796a4ce9 100644 --- a/lib/wasi/src/runners/wcgi/runner.rs +++ b/lib/wasi/src/runners/wcgi/runner.rs @@ -2,8 +2,8 @@ use std::{collections::HashMap, convert::Infallible, net::SocketAddr, path::Path use anyhow::{Context, Error}; use futures::future::AbortHandle; -use virtual_fs::FileSystem; use hyper::server::conn::AddrStream; +use virtual_fs::FileSystem; use wasmer::{Engine, Module, Store}; use wcgi_host::CgiDialect; use webc::metadata::{ diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index c15aeb05a50..362813f5376 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -1,6 +1,7 @@ use std::time::{Duration, Instant}; use assert_cmd::{assert::Assert, prelude::OutputAssertExt, Command}; +use predicates::str::contains; use reqwest::{blocking::Client, IntoUrl}; use tempfile::TempDir; use wasmer_integration_tests_cli::get_wasmer_path; @@ -12,6 +13,7 @@ fn wasmer_cli() -> Command { mod webc_on_disk { use std::process::Stdio; + use predicates::str::contains; use rand::Rng; use super::*; @@ -25,9 +27,7 @@ mod webc_on_disk { .arg("--version") .assert(); - assert - .success() - .stdout(predicates::str::contains("Python 3.6.7")); + assert.success().stdout(contains("Python 3.6.7")); } #[test] @@ -45,9 +45,7 @@ mod webc_on_disk { .arg("/app/main.py") .assert(); - assert - .success() - .stdout(predicates::str::contains("Hello, World!")); + assert.success().stdout(contains("Hello, World!")); } #[test] @@ -66,9 +64,7 @@ mod webc_on_disk { .arg("import os; print(os.environ['SOME_VAR'])") .assert(); - assert - .success() - .stdout(predicates::str::contains("Hello, World!")); + assert.success().stdout(contains("Hello, World!")); } #[test] @@ -96,16 +92,17 @@ mod webc_on_disk { let assert = child.join(); assert - .stdout(predicates::str::contains("Starting the server")) - .stdout(predicates::str::contains("method=GET url=/")); + .stdout(contains("Starting the server")) + .stdout(contains("method=GET url=/")); } } mod wasm_on_disk { + use predicates::str::contains; + use super::*; #[test] - #[ignore] fn wasi_executable() { let assert = wasmer_cli() .arg("run2") @@ -115,7 +112,7 @@ mod wasm_on_disk { .arg("console.log('Hello, World!')") .assert(); - assert.success().stdout("Hello, World!"); + assert.success().stdout(contains("Hello, World!")); } #[test] @@ -136,7 +133,34 @@ mod wasm_on_disk { assert .failure() - .stderr("Can not find any export functions."); + .stderr(contains("Can not find any export functions.")); + } + + #[test] + fn pre_compiled() { + let temp = TempDir::new().unwrap(); + let dest = temp.path().join("qjs.wasmu"); + let qjs = fixtures::qjs(); + // Make sure it is compiled + wasmer_cli() + .arg("compile") + .arg("-o") + .arg(&dest) + .arg(&qjs) + .assert() + .success(); + assert!(dest.exists()); + + // Now we can try to run the compiled artifact + let assert = wasmer_cli() + .arg("run2") + .arg(&dest) + .arg("--") + .arg("--eval") + .arg("console.log('Hello, World!')") + .assert(); + + assert.success().stdout(contains("Hello, World!")); } } @@ -155,35 +179,7 @@ fn wasmer_package_directory() { .arg("console.log('Hello, World!')") .assert(); - assert.success().stdout("Hello, World!"); -} - -#[test] -#[ignore] -fn pre_compiled_wasm() { - let temp = TempDir::new().unwrap(); - let dest = temp.path().join("qjs.wasmu"); - let qjs = fixtures::qjs(); - // Make sure it is compiled - wasmer_cli() - .arg("compile") - .arg("-o") - .arg(&dest) - .arg(&qjs) - .assert() - .success(); - assert!(dest.exists()); - - // Now we can try to run the compiled artifact - let assert = wasmer_cli() - .arg("run2") - .arg(&dest) - .arg("--") - .arg("--eval") - .arg("console.log('Hello, World!')") - .assert(); - - assert.success().stdout("Hello, World!"); + assert.success().stdout(contains("Hello, World!")); } mod remote_webc { From f21b07e8e64f9301c8c60387fe34edfbc98a7c25 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 8 Mar 2023 17:38:44 +0800 Subject: [PATCH 12/39] Wasmer run for wasm32-unknown-unknown --- lib/cli/src/commands/run2.rs | 78 +++++++++++++++++++++++++++-- tests/integration/cli/tests/run2.rs | 2 - 2 files changed, 74 insertions(+), 6 deletions(-) diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs index f115ed95ccc..414046c85a0 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run2.rs @@ -13,7 +13,7 @@ use anyhow::{Context, Error}; use clap::Parser; use tempfile::NamedTempFile; use url::Url; -use wasmer::{Module, Store, TypedFunction}; +use wasmer::{Function, Imports, Instance, Module, Store, Type, TypedFunction, Value}; use wasmer_compiler::ArtifactBuild; use wasmer_registry::Package; use wasmer_wasix::runners::{Runner, WapmContainer}; @@ -84,7 +84,7 @@ impl Run2 { } else if wasmer_wasix::is_wasi_module(module) || wasmer_wasix::is_wasix_module(module) { self.execute_wasi_module(target.path(), module, store) } else { - self.execute_pure_wasm_module() + self.execute_pure_wasm_module(module, store) } } @@ -145,8 +145,35 @@ impl Run2 { } #[tracing::instrument(skip_all)] - fn execute_pure_wasm_module(&self) -> Result<(), Error> { - todo!() + fn execute_pure_wasm_module(&self, module: &Module, store: &mut Store) -> Result<(), Error> { + let imports = Imports::default(); + let instance = Instance::new(store, module, &imports) + .context("Unable to instantiate the WebAssembly module")?; + + let entrypoint = match &self.entrypoint { + Some(entry) => { + instance.exports + .get_function(entry) + .with_context(|| format!("The module doesn't contain a \"{entry}\" function"))? + }, + None => { + instance.exports.get_function("_start") + .context("The module doesn't contain a \"_start\" function. Either implement it or specify an entrypoint function.")? + } + }; + + let return_values = invoke_function(&instance, store, entrypoint, &self.args)?; + + println!( + "{}", + return_values + .iter() + .map(|val| val.to_string()) + .collect::>() + .join(" ") + ); + + Ok(()) } #[tracing::instrument(skip_all)] @@ -171,6 +198,49 @@ impl Run2 { } } +fn invoke_function( + instance: &Instance, + store: &mut Store, + func: &Function, + args: &[String], +) -> Result, Error> { + let func_ty = func.ty(store); + let required_arguments = func_ty.params().len(); + let provided_arguments = args.len(); + + anyhow::ensure!( + required_arguments == provided_arguments, + "Function expected {} arguments, but received {}", + required_arguments, + provided_arguments, + ); + + let invoke_args = args + .iter() + .zip(func_ty.params().iter()) + .map(|(arg, param_type)| { + parse_value(arg, *param_type) + .with_context(|| format!("Unable to convert {arg:?} to {param_type:?}")) + }) + .collect::, _>>()?; + + let return_values = func.call(store, &invoke_args)?; + + Ok(return_values) +} + +fn parse_value(s: &str, ty: wasmer_types::Type) -> Result { + let value = match ty { + Type::I32 => Value::I32(s.parse()?), + Type::I64 => Value::I64(s.parse()?), + Type::F32 => Value::F32(s.parse()?), + Type::F64 => Value::F64(s.parse()?), + Type::V128 => Value::V128(s.parse()?), + _ => anyhow::bail!("There is no known conversion from {s:?} to {ty:?}"), + }; + Ok(value) +} + fn infer_webc_entrypoint(manifest: &Manifest) -> Result<&str, Error> { if let Some(entrypoint) = manifest.entrypoint.as_deref() { return Ok(entrypoint); diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index 362813f5376..99cee12dcd1 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -116,7 +116,6 @@ mod wasm_on_disk { } #[test] - #[ignore] fn no_abi() { let assert = wasmer_cli().arg("run2").arg(fixtures::fib()).assert(); @@ -124,7 +123,6 @@ mod wasm_on_disk { } #[test] - #[ignore] fn error_if_no_start_function_found() { let assert = wasmer_cli() .arg("run2") From 0efd37f40fd3157cf1ee78188b9ef895309accb6 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 8 Mar 2023 17:58:06 +0800 Subject: [PATCH 13/39] Refactored the run2 tests so we recompile the wasmer CLI as necessary --- Cargo.lock | 14 ++++++ tests/integration/cli/Cargo.toml | 2 + tests/integration/cli/tests/run2.rs | 66 ++++++++++++++++++++--------- 3 files changed, 63 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2300aa303ca..4675ca473b7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1235,6 +1235,18 @@ dependencies = [ "libc", ] +[[package]] +name = "escargot" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5584ba17d7ab26a8a7284f13e5bd196294dd2f2d79773cff29b9e9edef601a6" +dependencies = [ + "log", + "once_cell", + "serde", + "serde_json", +] + [[package]] name = "fallible-iterator" version = "0.2.0" @@ -5318,11 +5330,13 @@ dependencies = [ "assert_cmd 2.0.10", "derivative", "dirs", + "escargot", "flate2", "hex", "insta", "md5", "object 0.30.3", + "once_cell", "predicates 2.1.5", "pretty_assertions", "rand", diff --git a/tests/integration/cli/Cargo.toml b/tests/integration/cli/Cargo.toml index 4c6cd6aecd0..5be9c69034a 100644 --- a/tests/integration/cli/Cargo.toml +++ b/tests/integration/cli/Cargo.toml @@ -20,6 +20,8 @@ reqwest = { version = "0.11.14", features = ["json", "blocking"] } tokio = { version = "1", features = [ "rt", "rt-multi-thread", "macros" ] } assert_cmd = "2.0.8" predicates = "2.1.5" +escargot = "0.5.7" +once_cell = "1.17.1" [dependencies] anyhow = "1" diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index 99cee12dcd1..3a6328899c8 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -1,14 +1,13 @@ -use std::time::{Duration, Instant}; +use std::{ + path::{Path, PathBuf}, + time::{Duration, Instant}, +}; use assert_cmd::{assert::Assert, prelude::OutputAssertExt, Command}; +use once_cell::sync::Lazy; use predicates::str::contains; use reqwest::{blocking::Client, IntoUrl}; use tempfile::TempDir; -use wasmer_integration_tests_cli::get_wasmer_path; - -fn wasmer_cli() -> Command { - Command::new(get_wasmer_path()) -} mod webc_on_disk { use std::process::Stdio; @@ -20,7 +19,7 @@ mod webc_on_disk { #[test] fn wasi_runner() { - let assert = wasmer_cli() + let assert = Command::new(wasmer_executable()) .arg("run2") .arg(fixtures::python()) .arg("--") @@ -36,7 +35,7 @@ mod webc_on_disk { let temp = TempDir::new().unwrap(); std::fs::write(temp.path().join("main.py"), "print('Hello, World!')").unwrap(); - let assert = wasmer_cli() + let assert = Command::new(wasmer_executable()) .arg("run2") .arg(fixtures::python()) .arg("--mapdir") @@ -54,7 +53,7 @@ mod webc_on_disk { let temp = TempDir::new().unwrap(); std::fs::write(temp.path().join("main.py"), "print('Hello, World!')").unwrap(); - let assert = wasmer_cli() + let assert = Command::new(wasmer_executable()) .arg("run2") .arg(fixtures::python()) .arg("--env") @@ -71,7 +70,7 @@ mod webc_on_disk { fn wcgi_runner() { // Start the WCGI server in the background let port = rand::thread_rng().gen_range(10_000_u16..u16::MAX); - let mut cmd = std::process::Command::new(get_wasmer_path()); + let mut cmd = std::process::Command::new(wasmer_executable()); cmd.arg("run2") .env("RUST_LOG", "info,wasmer_wasi::runners=debug") .arg(format!("--addr=127.0.0.1:{port}")) @@ -104,7 +103,7 @@ mod wasm_on_disk { #[test] fn wasi_executable() { - let assert = wasmer_cli() + let assert = Command::new(wasmer_executable()) .arg("run2") .arg(fixtures::qjs()) .arg("--") @@ -117,21 +116,24 @@ mod wasm_on_disk { #[test] fn no_abi() { - let assert = wasmer_cli().arg("run2").arg(fixtures::fib()).assert(); + let assert = Command::new(wasmer_executable()) + .arg("run2") + .arg(fixtures::fib()) + .assert(); assert.success(); } #[test] fn error_if_no_start_function_found() { - let assert = wasmer_cli() + let assert = Command::new(wasmer_executable()) .arg("run2") .arg(fixtures::wat_no_start()) .assert(); assert .failure() - .stderr(contains("Can not find any export functions.")); + .stderr(contains("The module doesn't contain a \"_start\" function")); } #[test] @@ -140,7 +142,7 @@ mod wasm_on_disk { let dest = temp.path().join("qjs.wasmu"); let qjs = fixtures::qjs(); // Make sure it is compiled - wasmer_cli() + Command::new(wasmer_executable()) .arg("compile") .arg("-o") .arg(&dest) @@ -150,7 +152,7 @@ mod wasm_on_disk { assert!(dest.exists()); // Now we can try to run the compiled artifact - let assert = wasmer_cli() + let assert = Command::new(wasmer_executable()) .arg("run2") .arg(&dest) .arg("--") @@ -169,7 +171,7 @@ fn wasmer_package_directory() { std::fs::copy(fixtures::qjs(), temp.path().join("qjs.wasm")).unwrap(); std::fs::copy(fixtures::qjs_wasmer_toml(), temp.path().join("wasmer.toml")).unwrap(); - let assert = wasmer_cli() + let assert = Command::new(wasmer_executable()) .arg("run2") .arg(temp.path()) .arg("--") @@ -186,7 +188,7 @@ mod remote_webc { #[test] #[ignore] fn quickjs_as_package_name() { - let assert = wasmer_cli() + let assert = Command::new(wasmer_executable()) .arg("run2") .arg("saghul/quickjs") .arg("--registry=https://wapm.io/") @@ -201,7 +203,7 @@ mod remote_webc { #[test] #[ignore] fn quickjs_as_url() { - let assert = wasmer_cli() + let assert = Command::new(wasmer_executable()) .arg("run2") .arg("https://wapm.io/saghul/quickjs") .arg("--") @@ -291,3 +293,29 @@ fn http_get(url: impl IntoUrl) -> String { panic!("Didn't receive a response from \"{url}\" within the allocated time"); } + +/// Get the path for the `wasmer` executable. +/// +/// Note that this will automatically run the compiler if the executable is +/// out of date. +/// +/// We *don't* want to use [`wasmer_integration_tests_cli::get_wasmer_path()`] +/// because that returns the path to the release executable, and there is no +/// guarantee it contains recent changes or was compiled with the feature flags +/// we are trying to test (or even exists). +fn wasmer_executable() -> &'static Path { + static EXECUTABLE: Lazy = Lazy::new(|| { + let run = escargot::CargoBuild::new() + .package("wasmer-cli") + .bin("wasmer") + .features("compiler singlepass") + .current_release() + .current_target() + .run() + .unwrap(); + + run.path().to_path_buf() + }); + + &*EXECUTABLE +} From ad59f5a7f3a95fdcedae6e331a79d8b4cdf261e6 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 8 Mar 2023 20:32:51 +0800 Subject: [PATCH 14/39] Implemented URL downloading & caching --- lib/cli/src/commands/run2.rs | 79 +----- lib/cli/src/lib.rs | 1 + lib/cli/src/wasmer_home.rs | 370 ++++++++++++++++++++++++++++ tests/integration/cli/tests/run2.rs | 8 +- 4 files changed, 383 insertions(+), 75 deletions(-) create mode 100644 lib/cli/src/wasmer_home.rs diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs index 414046c85a0..57c3209634d 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run2.rs @@ -7,10 +7,12 @@ use std::{ net::SocketAddr, path::{Path, PathBuf}, str::FromStr, + time::{Duration, SystemTime}, }; use anyhow::{Context, Error}; use clap::Parser; +use sha2::{Digest, Sha256}; use tempfile::NamedTempFile; use url::Url; use wasmer::{Function, Imports, Instance, Module, Store, Type, TypedFunction, Value}; @@ -19,7 +21,11 @@ use wasmer_registry::Package; use wasmer_wasix::runners::{Runner, WapmContainer}; use webc::metadata::Manifest; -use crate::store::StoreOptions; +use crate::{ + commands::Cache, + store::StoreOptions, + wasmer_home::{DownloadCached, WasmerHome}, +}; /// The `wasmer run` subcommand. #[derive(Debug, Parser)] @@ -325,76 +331,6 @@ fn get_cached_package(pkg: &Package, home: &WasmerHome) -> Result, Error todo!(); } -/// Something which can fetch resources from the internet and will cache them -/// locally. -trait DownloadCached { - fn download_package(&self, pkg: &Package) -> Result; - fn download_url(&self, url: &url::Url) -> Result; -} - -#[derive(Debug, Parser)] -struct WasmerHome { - /// The Wasmer home directory. - #[clap(long = "wasmer-dir", env = "WASMER_DIR")] - home: Option, - /// Override the registry packages are downloaded from. - #[clap(long, env = "WASMER_REGISTRY")] - registry: Option, - /// Skip all caching. - #[clap(long)] - no_cache: bool, -} - -impl WasmerHome { - fn wasmer_home(&self) -> Result { - if let Some(wasmer_home) = &self.home { - return Ok(wasmer_home.clone()); - } - - if let Some(user_home) = dirs::home_dir() { - return Ok(user_home.join(".wasmer")); - } - - anyhow::bail!("Unable to determine the Wasmer directory"); - } -} - -impl DownloadCached for WasmerHome { - fn download_package(&self, pkg: &Package) -> Result { - let home = self.wasmer_home()?; - let checkouts = wasmer_registry::get_checkouts_dir(&home); - todo!(); - } - - fn download_url(&self, url: &url::Url) -> Result { - let home = self.wasmer_home()?; - let checkouts = wasmer_registry::get_checkouts_dir(&home); - let temp = NamedTempFile::new()?; - todo!(); - } -} - -impl wasmer_cache::Cache for WasmerHome { - type SerializeError = wasmer::SerializeError; - type DeserializeError = wasmer::DeserializeError; - - unsafe fn load( - &self, - engine: &impl wasmer::AsEngineRef, - key: wasmer_cache::Hash, - ) -> Result { - todo!() - } - - fn store( - &mut self, - key: wasmer_cache::Hash, - module: &wasmer::Module, - ) -> Result<(), Self::SerializeError> { - todo!() - } -} - /// A file/directory on disk that will be executed. /// /// Depending on the type of target and the command-line arguments, this might @@ -561,3 +497,4 @@ impl Default for WcgiOptions { } } } + diff --git a/lib/cli/src/lib.rs b/lib/cli/src/lib.rs index 5e9d4597aad..12c0f8f95e8 100644 --- a/lib/cli/src/lib.rs +++ b/lib/cli/src/lib.rs @@ -27,6 +27,7 @@ pub mod package_source; pub mod store; pub mod suggestions; pub mod utils; +pub mod wasmer_home; /// Version number of this crate. pub const VERSION: &str = env!("CARGO_PKG_VERSION"); diff --git a/lib/cli/src/wasmer_home.rs b/lib/cli/src/wasmer_home.rs new file mode 100644 index 00000000000..0086df42019 --- /dev/null +++ b/lib/cli/src/wasmer_home.rs @@ -0,0 +1,370 @@ +#![allow(missing_docs)] + +use std::{ + io::Write, + path::{Path, PathBuf}, + time::{Duration, SystemTime}, +}; + +use anyhow::{Context, Error}; +use reqwest::{blocking::Client, Url}; +use tempfile::NamedTempFile; +use wasmer::{AsEngineRef, DeserializeError, Module, SerializeError}; +use wasmer_cache::Hash; +use wasmer_registry::Package; + +/// Something which can fetch resources from the internet and will cache them +/// locally. +pub trait DownloadCached { + fn download_url(&self, url: &Url) -> Result; + fn download_package(&self, pkg: &Package) -> Result; +} + +#[derive(Debug, clap::Parser)] +pub struct WasmerHome { + /// The Wasmer home directory. + #[clap(long = "wasmer-dir", env = "WASMER_DIR")] + pub home: Option, + /// Override the registry packages are downloaded from. + #[clap(long, env = "WASMER_REGISTRY")] + registry: Option, + /// Skip all caching. + #[clap(long)] + pub no_cache: bool, +} + +impl WasmerHome { + pub fn wasmer_home(&self) -> Result { + if let Some(wasmer_home) = &self.home { + return Ok(wasmer_home.clone()); + } + + if let Some(user_home) = dirs::home_dir() { + return Ok(user_home.join(".wasmer")); + } + + anyhow::bail!("Unable to determine the Wasmer directory"); + } +} + +impl DownloadCached for WasmerHome { + #[tracing::instrument(skip_all)] + fn download_url(&self, url: &Url) -> Result { + tracing::debug!(%url, "Downloading"); + + let home = self.wasmer_home()?; + let checkouts = wasmer_registry::get_checkouts_dir(&home); + + // This function is a bit tricky because we go to great lengths to avoid + // unnecessary downloads. + + let cache_key = Hash::generate(url.to_string().as_bytes()); + + // First, we figure out some basic information about the item + let cache_info = CacheInfo::for_url(&cache_key, &checkouts, self.no_cache); + + // Next we check if we definitely got a cache hit + let state = match classify_cache_using_mtime(cache_info) { + Ok(path) => { + tracing::debug!(path=%path.display(), "Cache hit"); + return Ok(path); + } + Err(s) => s, + }; + + // Okay, looks like we're going to have to download the item + tracing::debug!(%url, "Sending a GET request"); + + let client = Client::new(); + + let request = client.get(url.clone()).header("Accept", "application/webc"); + + let mut response = match request.send() { + Ok(r) => r + .error_for_status() + .with_context(|| format!("The GET request to \"{url}\" was unsuccessful"))?, + Err(e) => { + // Something went wrong. If it was a connection issue and we've + // got a cached file, let's use that and emit a warning. + if e.is_connect() { + if let Some(path) = state.take_path() { + tracing::warn!( + path=%path.display(), + error=&e as &dyn std::error::Error, + "An error occurred while connecting to the resource. Falling back to a cached version." + ); + return Ok(path); + } + } + + // Oh well, we tried. + let msg = format!("Unable to send a GET request to \"{url}\""); + return Err(Error::from(e).context(msg)); + } + }; + + tracing::debug!( + status_code=%response.status(), + url=%response.url(), + content_length=response.content_length(), + "Download started", + ); + tracing::trace!(headers=?response.headers()); + + // Now there is one last chance to avoid downloading the full file. If + // it has an ETag header, we can use that to see whether the (possibly) + // cached file is outdated. + let etag = response + .headers() + .get("Etag") + .and_then(|v| v.to_str().ok()) + .map(|etag| etag.trim().to_string()); + + if let Some(cached) = state.use_etag_to_resolve_cached_file(etag.as_deref()) { + tracing::debug!( + path=%cached.display(), + "Reusing the cached file because the ETag header is still valid", + ); + return Ok(cached); + } + + // Note: we want to copy directly into a file so we don't hold + // everything in memory. + let (mut f, path) = if self.no_cache { + // Leave the temporary file where it is. The OS will clean it up + // for us later, and hopefully the caller will open it before the + // temp file cleaner comes along. + let temp = NamedTempFile::new().context("Unable to create a temporary file")?; + temp.keep() + .context("Unable to persist the temporary file")? + } else { + let cached_path = checkouts.join(cache_key.to_string()); + let f = std::fs::File::create(&cached_path).with_context(|| { + format!("Unable to open \"{}\" for writing", cached_path.display()) + })?; + + (f, cached_path) + }; + + std::io::copy(&mut response, &mut f) + .and_then(|_| f.flush()) + .with_context(|| format!("Unable to save the response to \"{}\"", path.display()))?; + + if !self.no_cache { + if let Some(etag) = etag { + let etag_path = path.with_extension("etag"); + tracing::debug!( + path=%etag_path.display(), + %etag, + "Saving the ETag to disk", + ); + + if let Err(e) = std::fs::write(&etag_path, etag.as_bytes()) { + tracing::warn!( + error=&e as &dyn std::error::Error, + path=%etag_path.display(), + %etag, + "Unable to save the ETag to disk", + ); + } + } + } + + Ok(path) + } + + fn download_package(&self, pkg: &Package) -> Result { + const DEFAULT_REGISTRY: &str = "https://wapm.io/"; + let registry = self.registry.as_deref().unwrap_or(DEFAULT_REGISTRY); + let url = package_url(registry, pkg)?; + + self.download_url(&url) + } +} + +#[derive(Debug, Clone, PartialEq)] +enum CacheInfo { + /// Caching has been disabled. + Disabled, + /// An item isn't in the cache, but could be cached later on. + Miss, + /// An item in the cache. + Hit { + path: PathBuf, + etag: Option, + last_modified: Option, + }, +} + +impl CacheInfo { + fn for_url(key: &Hash, checkout_dir: &Path, disabled: bool) -> CacheInfo { + if disabled { + return CacheInfo::Disabled; + } + + let path = checkout_dir.join(key.to_string()); + + if !path.exists() { + return CacheInfo::Miss; + } + + let etag = std::fs::read_to_string(path.with_extension("etag")).ok(); + let last_modified = path.metadata().and_then(|m| m.modified()).ok(); + + CacheInfo::Hit { + etag, + last_modified, + path, + } + } +} + +fn classify_cache_using_mtime(info: CacheInfo) -> Result { + const CACHE_INVALIDATION_THRESHOLD: Duration = Duration::from_secs(5 * 60); + + let (path, last_modified, etag) = match info { + CacheInfo::Hit { + path, + last_modified: Some(last_modified), + etag, + .. + } => (path, last_modified, etag), + CacheInfo::Hit { + path, + last_modified: None, + etag: Some(etag), + .. + } => return Err(CacheState::PossiblyDirty { etag, path }), + CacheInfo::Hit { + etag: None, + last_modified: None, + path, + .. + } => { + return Err(CacheState::UnableToVerify { path }); + } + CacheInfo::Disabled | CacheInfo::Miss { .. } => return Err(CacheState::Miss), + }; + + if let Ok(time_since_last_modified) = last_modified.elapsed() { + if time_since_last_modified <= CACHE_INVALIDATION_THRESHOLD { + return Ok(path); + } + } + + match etag { + Some(etag) => Err(CacheState::PossiblyDirty { etag, path }), + None => Err(CacheState::UnableToVerify { path }), + } +} + +/// Classification of how valid an item is based on filesystem metadata. +#[derive(Debug)] +enum CacheState { + /// The item isn't in the cache. + Miss, + /// The cached item might be invalid, but it has an ETag we can use for + /// further validation. + PossiblyDirty { etag: String, path: PathBuf }, + /// The cached item exists on disk, but we weren't able to tell whether it is still + /// valid, and there aren't any other ways to validate it further. You can + /// probably reuse this if you are having internet issues. + UnableToVerify { path: PathBuf }, +} + +impl CacheState { + fn take_path(self) -> Option { + match self { + CacheState::PossiblyDirty { path, .. } | CacheState::UnableToVerify { path } => { + Some(path) + } + _ => None, + } + } + + fn use_etag_to_resolve_cached_file(self, new_etag: Option<&str>) -> Option { + match (new_etag, self) { + ( + Some(new_etag), + CacheState::PossiblyDirty { + etag: cached_etag, + path, + }, + ) if cached_etag == new_etag => Some(path), + _ => None, + } + } +} + +fn package_url(registry: &str, pkg: &Package) -> Result { + let registry: Url = registry + .parse() + .with_context(|| format!("Unable to parse \"{registry}\" as a URL"))?; + + let Package { + name, + namespace, + version, + } = pkg; + + let mut path = format!("{namespace}/{name}"); + if let Some(version) = version { + path.push('@'); + path.push_str(version); + } + + let url = registry + .join(&path) + .context("Unable to construct the package URL")?; + Ok(url) +} + +impl wasmer_cache::Cache for WasmerHome { + type SerializeError = SerializeError; + type DeserializeError = DeserializeError; + + unsafe fn load( + &self, + _engine: &impl AsEngineRef, + _key: Hash, + ) -> Result { + todo!() + } + + fn store(&mut self, _key: Hash, _module: &Module) -> Result<(), Self::SerializeError> { + todo!() + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn construct_package_urls() { + let inputs = [ + ( + "https://wapm.io/", + "syrusakbary/python", + "https://wapm.io/syrusakbary/python", + ), + ( + "https://wapm.dev", + "syrusakbary/python@1.2.3", + "https://wapm.dev/syrusakbary/python@1.2.3", + ), + ( + "https://localhost:8000/path/to/nested/dir/", + "syrusakbary/python", + "https://localhost:8000/path/to/nested/dir/syrusakbary/python", + ), + ]; + + for (registry, package, expected) in inputs { + let package: Package = package.parse().unwrap(); + + let got = package_url(registry, &package).unwrap(); + assert_eq!(got.to_string(), expected); + } + } +} diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index 3a6328899c8..85a008ad4a3 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -186,32 +186,32 @@ mod remote_webc { use super::*; #[test] - #[ignore] fn quickjs_as_package_name() { let assert = Command::new(wasmer_executable()) .arg("run2") .arg("saghul/quickjs") + .arg("--entrypoint=quickjs") .arg("--registry=https://wapm.io/") .arg("--") .arg("--eval") .arg("console.log('Hello, World!')") .assert(); - assert.success().stdout("Hello, World!"); + assert.success().stdout(contains("Hello, World!")); } #[test] - #[ignore] fn quickjs_as_url() { let assert = Command::new(wasmer_executable()) .arg("run2") .arg("https://wapm.io/saghul/quickjs") + .arg("--entrypoint=quickjs") .arg("--") .arg("--eval") .arg("console.log('Hello, World!')") .assert(); - assert.success().stdout("Hello, World!"); + assert.success().stdout(contains("Hello, World!")); } } From fa53a0d5899ae7d109a7a7a1f5e48dc7114954c4 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 8 Mar 2023 20:52:51 +0800 Subject: [PATCH 15/39] Propagate environment variables to the WASI runner --- lib/cli/src/commands/run/wasi.rs | 4 ++ lib/cli/src/commands/run2.rs | 19 ++++++---- lib/cli/src/wasmer_home.rs | 17 +++++---- lib/wasi/src/runners/wasi.rs | 57 ++++++++++++++++++++++++++++- tests/integration/cli/tests/run2.rs | 4 -- 5 files changed, 80 insertions(+), 21 deletions(-) diff --git a/lib/cli/src/commands/run/wasi.rs b/lib/cli/src/commands/run/wasi.rs index 248a20427a2..e92d61526fa 100644 --- a/lib/cli/src/commands/run/wasi.rs +++ b/lib/cli/src/commands/run/wasi.rs @@ -40,6 +40,10 @@ pub struct Wasi { )] pub(crate) env_vars: Vec<(String, String)>, + /// Forward all host env variables to the wcgi task. + #[clap(long, env)] + pub(crate) forward_host_env: bool, + /// List of other containers this module depends on #[clap(long = "use", name = "USE")] uses: Vec, diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs index 57c3209634d..ac62446e4e6 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run2.rs @@ -112,9 +112,17 @@ impl Run2 { .get(id) .with_context(|| format!("Unable to get metadata for the \"{id}\" command"))?; + // TODO(Michael-F-Bryan): Refactor the wasmer_wasi::runners::Runner + // trait So we can check whether a command is supported by a runner + // without needing to go through and instantiate each one. + let (store, _compiler_type) = self.store.get_store()?; - let mut runner = wasmer_wasix::runners::wasi::WasiRunner::new(store); - runner.set_args(self.args.clone()); + let mut runner = wasmer_wasix::runners::wasi::WasiRunner::new(store) + .with_args(self.args.clone()) + .with_envs(self.wasi.env_vars.clone()); + if self.wasi.forward_host_env { + runner.set_forward_host_env(); + } if runner.can_run_command(id, command).unwrap_or(false) { return runner.run_cmd(&container, id).context("WASI runner failed"); } @@ -137,7 +145,7 @@ impl Run2 { .addr(self.wcgi.addr) .envs(self.wasi.env_vars.clone()) .map_directories(self.wasi.mapped_dirs.iter().map(|(g, h)| (h, g))); - if self.wcgi.forward_host_env { + if self.wasi.forward_host_env { runner.config().forward_host_env(); } if runner.can_run_command(id, command).unwrap_or(false) { @@ -484,17 +492,12 @@ pub(crate) struct WcgiOptions { /// The address to serve on. #[clap(long, short, env, default_value_t = ([127, 0, 0, 1], 8000).into())] pub(crate) addr: SocketAddr, - /// Forward all host env variables to the wcgi task. - #[clap(long)] - pub(crate) forward_host_env: bool, } impl Default for WcgiOptions { fn default() -> Self { Self { addr: ([127, 0, 0, 1], 8000).into(), - forward_host_env: false, } } } - diff --git a/lib/cli/src/wasmer_home.rs b/lib/cli/src/wasmer_home.rs index 0086df42019..ec3e14adb86 100644 --- a/lib/cli/src/wasmer_home.rs +++ b/lib/cli/src/wasmer_home.rs @@ -13,6 +13,9 @@ use wasmer::{AsEngineRef, DeserializeError, Module, SerializeError}; use wasmer_cache::Hash; use wasmer_registry::Package; +const DEFAULT_REGISTRY: &str = "https://wapm.io/"; +const CACHE_INVALIDATION_THRESHOLD: Duration = Duration::from_secs(5 * 60); + /// Something which can fetch resources from the internet and will cache them /// locally. pub trait DownloadCached { @@ -30,7 +33,7 @@ pub struct WasmerHome { registry: Option, /// Skip all caching. #[clap(long)] - pub no_cache: bool, + pub disable_cache: bool, } impl WasmerHome { @@ -61,7 +64,7 @@ impl DownloadCached for WasmerHome { let cache_key = Hash::generate(url.to_string().as_bytes()); // First, we figure out some basic information about the item - let cache_info = CacheInfo::for_url(&cache_key, &checkouts, self.no_cache); + let cache_info = CacheInfo::for_url(&cache_key, &checkouts, self.disable_cache); // Next we check if we definitely got a cache hit let state = match classify_cache_using_mtime(cache_info) { @@ -91,7 +94,8 @@ impl DownloadCached for WasmerHome { tracing::warn!( path=%path.display(), error=&e as &dyn std::error::Error, - "An error occurred while connecting to the resource. Falling back to a cached version." + "An error occurred while connecting to {}. Falling back to a cached version.", + url.host_str().unwrap_or(url.as_str()), ); return Ok(path); } @@ -130,7 +134,7 @@ impl DownloadCached for WasmerHome { // Note: we want to copy directly into a file so we don't hold // everything in memory. - let (mut f, path) = if self.no_cache { + let (mut f, path) = if self.disable_cache { // Leave the temporary file where it is. The OS will clean it up // for us later, and hopefully the caller will open it before the // temp file cleaner comes along. @@ -150,7 +154,7 @@ impl DownloadCached for WasmerHome { .and_then(|_| f.flush()) .with_context(|| format!("Unable to save the response to \"{}\"", path.display()))?; - if !self.no_cache { + if !self.disable_cache { if let Some(etag) = etag { let etag_path = path.with_extension("etag"); tracing::debug!( @@ -174,7 +178,6 @@ impl DownloadCached for WasmerHome { } fn download_package(&self, pkg: &Package) -> Result { - const DEFAULT_REGISTRY: &str = "https://wapm.io/"; let registry = self.registry.as_deref().unwrap_or(DEFAULT_REGISTRY); let url = package_url(registry, pkg)?; @@ -220,8 +223,6 @@ impl CacheInfo { } fn classify_cache_using_mtime(info: CacheInfo) -> Result { - const CACHE_INVALIDATION_THRESHOLD: Duration = Duration::from_secs(5 * 60); - let (path, last_modified, etag) = match info { CacheInfo::Hit { path, diff --git a/lib/wasi/src/runners/wasi.rs b/lib/wasi/src/runners/wasi.rs index f4b76a0067a..cab96fb3334 100644 --- a/lib/wasi/src/runners/wasi.rs +++ b/lib/wasi/src/runners/wasi.rs @@ -1,6 +1,6 @@ //! WebC container support for running WASI modules -use std::sync::Arc; +use std::{collections::HashMap, sync::Arc}; use crate::{runners::WapmContainer, PluggableRuntime, VirtualTaskManager}; use crate::{WasiEnv, WasiEnvBuilder}; @@ -12,6 +12,8 @@ use webc::metadata::{annotations::Wasi, Command}; #[derive(Debug, Serialize, Deserialize)] pub struct WasiRunner { args: Vec, + env: HashMap, + forward_host_env: bool, #[serde(skip, default)] store: Store, #[serde(skip, default)] @@ -23,7 +25,9 @@ impl WasiRunner { pub fn new(store: Store) -> Self { Self { args: Vec::new(), + env: HashMap::new(), store, + forward_host_env: false, tasks: None, } } @@ -52,6 +56,47 @@ impl WasiRunner { self.args = args.into_iter().map(|s| s.into()).collect(); } + /// Builder method to provide environment variables to the runner. + pub fn with_env(mut self, key: impl Into, value: impl Into) -> Self { + self.set_env(key, value); + self + } + + /// Provide environment variables to the runner. + pub fn set_env(&mut self, key: impl Into, value: impl Into) { + self.env.insert(key.into(), value.into()); + } + + pub fn with_envs(mut self, envs: I) -> Self + where + I: IntoIterator, + K: Into, + V: Into, + { + self.set_envs(envs); + self + } + + pub fn set_envs(&mut self, envs: I) + where + I: IntoIterator, + K: Into, + V: Into, + { + for (key, value) in envs { + self.env.insert(key.into(), value.into()); + } + } + + pub fn with_forward_host_env(mut self) -> Self { + self.set_forward_host_env(); + self + } + + pub fn set_forward_host_env(&mut self) { + self.forward_host_env = true; + } + pub fn with_task_manager(mut self, tasks: impl VirtualTaskManager) -> Self { self.set_task_manager(tasks); self @@ -90,6 +135,16 @@ impl crate::runners::Runner for WasiRunner { let mut builder = prepare_webc_env(container, &atom_name, &self.args)?; + if self.forward_host_env { + for (k, v) in std::env::vars() { + builder.add_env(k, v); + } + } + + for (k, v) in &self.env { + builder.add_env(k, v); + } + if let Some(tasks) = &self.tasks { let rt = PluggableRuntime::new(Arc::clone(tasks)); builder.set_runtime(Arc::new(rt)); diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index 85a008ad4a3..a4b53d49b01 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -48,11 +48,7 @@ mod webc_on_disk { } #[test] - #[ignore] fn wasi_runner_with_env_vars() { - let temp = TempDir::new().unwrap(); - std::fs::write(temp.path().join("main.py"), "print('Hello, World!')").unwrap(); - let assert = Command::new(wasmer_executable()) .arg("run2") .arg(fixtures::python()) From 21d1fcf1d910a0ae10da15c00c957ee9bd47fca2 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 8 Mar 2023 21:15:38 +0800 Subject: [PATCH 16/39] Added a test for WCGI with mounted directories --- tests/integration/cli/tests/run2.rs | 79 +++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 22 deletions(-) diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index a4b53d49b01..2661f4d9094 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -1,5 +1,6 @@ use std::{ path::{Path, PathBuf}, + process::Stdio, time::{Duration, Instant}, }; @@ -10,9 +11,6 @@ use reqwest::{blocking::Client, IntoUrl}; use tempfile::TempDir; mod webc_on_disk { - use std::process::Stdio; - - use predicates::str::contains; use rand::Rng; use super::*; @@ -38,8 +36,7 @@ mod webc_on_disk { let assert = Command::new(wasmer_executable()) .arg("run2") .arg(fixtures::python()) - .arg("--mapdir") - .arg(format!("/app:{}", temp.path().display())) + .arg(format!("--mapdir=/app:{}", temp.path().display())) .arg("--") .arg("/app/main.py") .assert(); @@ -71,24 +68,51 @@ mod webc_on_disk { .env("RUST_LOG", "info,wasmer_wasi::runners=debug") .arg(format!("--addr=127.0.0.1:{port}")) .arg(fixtures::static_server()); - let child = cmd - .stdin(Stdio::piped()) - .stdout(Stdio::piped()) - .stderr(Stdio::piped()) - .spawn() - .map(Child::new) - .unwrap(); + let child = JoinableChild::spawn(cmd); // make the request - let body = http_get(format!("http://127.0.0.1:{port}/")); + let body = http_get(format!("http://127.0.0.1:{port}/")).unwrap(); assert!(body.contains("Index of /"), "{body}"); + // Let's make sure 404s work too + let err = + http_get(format!("http://127.0.0.1:{port}/this/does/not/exist.html")).unwrap_err(); + assert_eq!(err.status().unwrap(), reqwest::StatusCode::NOT_FOUND); + + // And kill the server, making sure it generated the expected logs + let assert = child.join(); + + assert + .stdout(contains("Starting the server")) + .stdout(contains("method=GET url=/")) + .stdout(contains("method=GET url=/this/does/not/exist.html")); + } + + #[test] + #[ignore] + fn wcgi_runner_with_mounted_directories() { + let temp = TempDir::new().unwrap(); + std::fs::write(temp.path().join("file.txt"), "Hello, World!").unwrap(); + // Start the WCGI server in the background + let port = rand::thread_rng().gen_range(10_000_u16..u16::MAX); + let mut cmd = std::process::Command::new(wasmer_executable()); + cmd.arg("run2") + .env("RUST_LOG", "info,wasmer_wasi::runners=debug") + .arg(format!("--addr=127.0.0.1:{port}")) + .arg(format!("--mapdir=/examples:{}", temp.path().display())) + .arg(fixtures::static_server()); + let child = JoinableChild::spawn(cmd); + + // make the request + let body = http_get(format!("http://127.0.0.1:{port}/file.txt")).unwrap(); + assert!(body.contains("Hello, World!"), "{body}"); + // And kill the server, making sure it generated the expected logs let assert = child.join(); assert .stdout(contains("Starting the server")) - .stdout(contains("method=GET url=/")); + .stdout(contains("method=GET url=/file.txt")); } } @@ -248,13 +272,22 @@ mod fixtures { /// A helper that wraps [`std::process::Child`] to make sure it gets terminated /// when it is no longer needed. -struct Child(Option); +struct JoinableChild(Option); + +impl JoinableChild { + fn spawn(mut cmd: std::process::Command) -> Self { + let child = cmd + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .spawn() + .unwrap(); -impl Child { - fn new(child: std::process::Child) -> Self { - Child(Some(child)) + JoinableChild(Some(child)) } + /// Kill the underlying [`std::process::Child`] and get an [`Assert`] we + /// can use to check it. fn join(mut self) -> Assert { let mut child = self.0.take().unwrap(); child.kill().unwrap(); @@ -262,7 +295,7 @@ impl Child { } } -impl Drop for Child { +impl Drop for JoinableChild { fn drop(&mut self) { if let Some(mut child) = self.0.take() { let _ = child.kill(); @@ -272,7 +305,7 @@ impl Drop for Child { /// Send a GET request to a particular URL, automatically retrying (with /// a timeout) if there are any connection errors. -fn http_get(url: impl IntoUrl) -> String { +fn http_get(url: impl IntoUrl) -> Result { let start = Instant::now(); let timeout = Duration::from_secs(5); let url = url.into_url().unwrap(); @@ -281,9 +314,11 @@ fn http_get(url: impl IntoUrl) -> String { while start.elapsed() < timeout { match client.get(url.clone()).send() { - Ok(response) => return response.error_for_status().unwrap().text().unwrap(), + Ok(response) => { + return response.error_for_status()?.text(); + } Err(e) if e.is_connect() => continue, - Err(other) => panic!("An unexpected error occurred: {other}"), + Err(other) => return Err(other), } } From 77e2f39afea8d73168c26b971e72430853ffda08 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 8 Mar 2023 22:48:58 +0800 Subject: [PATCH 17/39] Logs should go to stderr --- lib/cli/src/logging.rs | 3 ++- tests/integration/cli/tests/run2.rs | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/cli/src/logging.rs b/lib/cli/src/logging.rs index 5f082cd7660..ebdf35bbfe5 100644 --- a/lib/cli/src/logging.rs +++ b/lib/cli/src/logging.rs @@ -11,6 +11,7 @@ pub fn set_up_logging(level: log::LevelFilter) { .with_span_events(fmt::format::FmtSpan::CLOSE) .with_ansi(should_emit_colors()) .with_thread_ids(true) + .with_writer(std::io::stderr) .compact(); let filter_layer = EnvFilter::builder() @@ -30,7 +31,7 @@ pub fn set_up_logging(level: log::LevelFilter) { /// /// For more, see https://github.com/tokio-rs/tracing/issues/2388 fn should_emit_colors() -> bool { - isatty::stdout_isatty() && std::env::var_os("NO_COLOR").is_none() + isatty::stderr_isatty() && std::env::var_os("NO_COLOR").is_none() } fn log_directive(level: log::LevelFilter) -> Directive { diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index 2661f4d9094..db37b4099e2 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -83,9 +83,9 @@ mod webc_on_disk { let assert = child.join(); assert - .stdout(contains("Starting the server")) - .stdout(contains("method=GET url=/")) - .stdout(contains("method=GET url=/this/does/not/exist.html")); + .stderr(contains("Starting the server")) + .stderr(contains("method=GET url=/")) + .stderr(contains("method=GET url=/this/does/not/exist.html")); } #[test] @@ -111,8 +111,8 @@ mod webc_on_disk { let assert = child.join(); assert - .stdout(contains("Starting the server")) - .stdout(contains("method=GET url=/file.txt")); + .stderr(contains("Starting the server")) + .stderr(contains("method=GET url=/file.txt")); } } From 86134dac5a5ea5ff445672acc484faaa76364972 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 8 Mar 2023 22:49:19 +0800 Subject: [PATCH 18/39] Wired up module caching --- Cargo.lock | 293 +++++++++++++++++++++++++++++++++-- lib/cache/src/cache.rs | 4 +- lib/cache/src/filesystem.rs | 1 + lib/cache/src/hash.rs | 27 ++-- lib/cli/Cargo.toml | 1 + lib/cli/src/commands/run2.rs | 92 +++++++---- lib/cli/src/wasmer_home.rs | 36 ++++- 7 files changed, 395 insertions(+), 59 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4675ca473b7..84ee6b5c0d2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1355,6 +1355,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + [[package]] name = "futures" version = "0.3.27" @@ -2083,6 +2089,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -2491,6 +2508,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "nuke-dir" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6842d8099b88d19a64158a6cfdc3e9ad82c738c041dab98280ef7ba98d64fa" + [[package]] name = "num-integer" version = "0.1.45" @@ -2755,6 +2778,40 @@ dependencies = [ "ucd-trie", ] +[[package]] +name = "pest_derive" +version = "2.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + [[package]] name = "pin-project" version = "1.0.12" @@ -3014,6 +3071,19 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + [[package]] name = "rand" version = "0.8.5" @@ -3022,7 +3092,7 @@ checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -3032,9 +3102,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", ] +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + [[package]] name = "rand_core" version = "0.6.4" @@ -3085,6 +3170,15 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + [[package]] name = "redox_syscall" version = "0.1.57" @@ -3167,6 +3261,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + [[package]] name = "rend" version = "0.4.0" @@ -3961,6 +4064,16 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" +[[package]] +name = "tempdir" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" +dependencies = [ + "rand 0.4.6", + "remove_dir_all", +] + [[package]] name = "tempfile" version = "3.4.0" @@ -4553,6 +4666,21 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" +[[package]] +name = "validator" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f07b0a1390e01c0fc35ebb26b28ced33c9a3808f7f9fbe94d3cc01e233bfeed5" +dependencies = [ + "idna 0.2.3", + "lazy_static", + "regex", + "serde", + "serde_derive", + "serde_json", + "url", +] + [[package]] name = "valuable" version = "0.1.0" @@ -4599,7 +4727,7 @@ dependencies = [ "tokio", "tracing", "typetag", - "webc", + "webc 5.0.0-rc.5", ] [[package]] @@ -4759,6 +4887,65 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wapm-targz-to-pirita" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39980ef50ab15c47dbd9b26678f06ece2341178d82e25e21e4ac68310d1f2e63" +dependencies = [ + "anyhow", + "base64 0.13.1", + "flate2", + "json5", + "nuke-dir", + "rand 0.8.5", + "serde", + "serde_cbor", + "serde_derive", + "serde_json", + "sha2", + "tar", + "toml", + "tracing", + "validator", + "wapm-toml 0.4.0", + "wasmer-registry 3.1.1", + "webc 4.1.1", +] + +[[package]] +name = "wapm-toml" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a61b6d3b6a2fc171198e6378b3a9b38650e114298775a9e63401613abb6a10b3" +dependencies = [ + "anyhow", + "semver 1.0.17", + "serde", + "serde_cbor", + "serde_derive", + "serde_json", + "serde_yaml 0.8.26", + "thiserror", + "toml", +] + +[[package]] +name = "wapm-toml" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "994ef26447f3158955d2e3fca96021d1f1c47b830e2053569177673dca1447a9" +dependencies = [ + "anyhow", + "semver 1.0.17", + "serde", + "serde_cbor", + "serde_json", + "serde_yaml 0.9.19", + "thiserror", + "toml", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -5053,7 +5240,7 @@ dependencies = [ "wasmer-middlewares", "wasmer-types", "wasmer-wasix", - "webc", + "webc 5.0.0-rc.5", ] [[package]] @@ -5073,7 +5260,7 @@ dependencies = [ "blake3", "criterion", "hex", - "rand", + "rand 0.8.5", "tempfile", "thiserror", "wasmer", @@ -5140,6 +5327,7 @@ dependencies = [ "virtual-fs", "virtual-net", "walkdir", + "wapm-targz-to-pirita", "wasm-coredump-builder", "wasmer", "wasmer-cache", @@ -5149,7 +5337,7 @@ dependencies = [ "wasmer-compiler-singlepass", "wasmer-emscripten", "wasmer-object", - "wasmer-registry", + "wasmer-registry 4.0.0", "wasmer-toml", "wasmer-types", "wasmer-vm", @@ -5158,7 +5346,7 @@ dependencies = [ "wasmer-wasm-interface", "wasmer-wast", "wasmparser 0.51.4", - "webc", + "webc 5.0.0-rc.5", ] [[package]] @@ -5339,7 +5527,7 @@ dependencies = [ "once_cell", "predicates 2.1.5", "pretty_assertions", - "rand", + "rand 0.8.5", "reqwest", "serde", "tar", @@ -5370,6 +5558,39 @@ dependencies = [ "wasmer-types", ] +[[package]] +name = "wasmer-registry" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "982286807bf43d2522a9f6139f9c2570df45d5a32148460226ccbc7edfb3ee13" +dependencies = [ + "anyhow", + "dirs", + "filetime", + "flate2", + "fs_extra", + "futures-util", + "graphql_client", + "hex", + "log", + "lzma-rs", + "regex", + "reqwest", + "semver 1.0.17", + "serde", + "serde_json", + "tar", + "tempdir", + "thiserror", + "tldextract", + "tokio", + "toml", + "url", + "wapm-toml 0.2.2", + "webc 3.0.1", + "whoami", +] + [[package]] name = "wasmer-registry" version = "4.0.0" @@ -5387,7 +5608,7 @@ dependencies = [ "lazy_static", "log", "lzma-rs", - "rand", + "rand 0.8.5", "regex", "reqwest", "semver 1.0.17", @@ -5401,7 +5622,7 @@ dependencies = [ "toml", "url", "wasmer-toml", - "webc", + "webc 5.0.0-rc.5", "whoami", ] @@ -5500,7 +5721,7 @@ dependencies = [ "linked_hash_set", "once_cell", "pin-project", - "rand", + "rand 0.8.5", "reqwest", "serde", "serde_cbor", @@ -5532,7 +5753,7 @@ dependencies = [ "wasmer-wasix-types", "wcgi", "wcgi-host", - "webc", + "webc 5.0.0-rc.5", "weezl", "winapi", ] @@ -5826,6 +6047,52 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webc" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef87e7b955d5d1feaa8697ae129f1a9ce8859e151574ad3baceae9413b48d2f0" +dependencies = [ + "anyhow", + "base64 0.13.1", + "indexmap", + "leb128", + "lexical-sort", + "memchr", + "memmap2", + "path-clean", + "rand 0.8.5", + "serde", + "serde_cbor", + "serde_json", + "sha2", + "url", + "walkdir", +] + +[[package]] +name = "webc" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4af0f2f0b6bf2e4366375c3cd6635aef1a2eb66cd02454d79525aa7eecf0751" +dependencies = [ + "anyhow", + "base64 0.13.1", + "byteorder", + "indexmap", + "leb128", + "lexical-sort", + "memchr", + "path-clean", + "rand 0.8.5", + "serde", + "serde_cbor", + "serde_json", + "sha2", + "url", + "walkdir", +] + [[package]] name = "webc" version = "5.0.0-rc.5" @@ -5842,7 +6109,7 @@ dependencies = [ "memmap2", "once_cell", "path-clean", - "rand", + "rand 0.8.5", "serde", "serde_cbor", "serde_json", diff --git a/lib/cache/src/cache.rs b/lib/cache/src/cache.rs index 340163db956..8d34f9cfb62 100644 --- a/lib/cache/src/cache.rs +++ b/lib/cache/src/cache.rs @@ -13,7 +13,7 @@ pub trait Cache { /// The deserialization error for the implementation type DeserializeError: Error + Send + Sync; - /// Loads a module using the provided [`Store`] and [`Hash`]. + /// Loads a module using the provided [`wasmer::Store`] and [`crate::Hash`]. /// /// # Safety /// This function is unsafe as the cache store could be tampered with. @@ -23,6 +23,6 @@ pub trait Cache { key: Hash, ) -> Result; - /// Store a [`Module`] into the cache with the given [`Hash`]. + /// Store a [`Module`] into the cache with the given [`crate::Hash`]. fn store(&mut self, key: Hash, module: &Module) -> Result<(), Self::SerializeError>; } diff --git a/lib/cache/src/filesystem.rs b/lib/cache/src/filesystem.rs index 98259f94830..85f522fd19d 100644 --- a/lib/cache/src/filesystem.rs +++ b/lib/cache/src/filesystem.rs @@ -31,6 +31,7 @@ use wasmer::{AsEngineRef, DeserializeError, Module, SerializeError}; /// Ok(()) /// } /// ``` +#[derive(Debug, Clone)] pub struct FileSystemCache { path: PathBuf, ext: Option, diff --git a/lib/cache/src/hash.rs b/lib/cache/src/hash.rs index 29e7fa7ce65..95152310a3a 100644 --- a/lib/cache/src/hash.rs +++ b/lib/cache/src/hash.rs @@ -1,9 +1,12 @@ use crate::DeserializeError; -use std::str::FromStr; use std::string::ToString; +use std::{ + fmt::{self, Display, Formatter}, + str::FromStr, +}; /// A hash used as a key when loading and storing modules in a -/// [`Cache`]. +/// [`crate::Cache`]. #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] // Hash is made up of a 32 byte array pub struct Hash([u8; 32]); @@ -11,7 +14,7 @@ pub struct Hash([u8; 32]); impl Hash { /// Creates a new instance from 32 raw bytes. /// Does not perform any hashing. In order to create a hash from data, - /// use `Hash::generate`. + /// use [`Hash::generate()`]. pub fn new(bytes: [u8; 32]) -> Self { Self(bytes) } @@ -21,17 +24,19 @@ impl Hash { let hash = blake3::hash(bytes); Self::new(hash.into()) } - - pub(crate) fn to_array(self) -> [u8; 32] { - self.0 - } } -impl ToString for Hash { - /// Create the hexadecimal representation of the +impl Display for Hash { + /// Print the hexadecimal representation of the /// stored hash. - fn to_string(&self) -> String { - hex::encode(&self.to_array()) + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + let mut buffer = [0_u8; 64]; + + hex::encode_to_slice(&self.0, &mut buffer) + .expect("Can never fail with a hard-coded buffer length"); + let s = std::str::from_utf8(&buffer).map_err(|_| fmt::Error)?; + + f.write_str(s) } } diff --git a/lib/cli/Cargo.toml b/lib/cli/Cargo.toml index 82d0dbcad51..d10339f9372 100644 --- a/lib/cli/Cargo.toml +++ b/lib/cli/Cargo.toml @@ -90,6 +90,7 @@ wasm-coredump-builder = { version = "0.1.11" } tracing = { version = "0.1" } tracing-subscriber = { version = "0.3", features = [ "env-filter", "fmt" ] } clap-verbosity-flag = "1" +wapm-targz-to-pirita = "0.1.7" [build-dependencies] chrono = { version = "^0.4", default-features = false, features = ["std", "clock"] } diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs index ac62446e4e6..da9f8baa47c 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run2.rs @@ -3,7 +3,7 @@ use std::{ fmt::Display, fs::File, - io::{Read, Write}, + io::{ErrorKind, Read, Write}, net::SocketAddr, path::{Path, PathBuf}, str::FromStr, @@ -15,16 +15,18 @@ use clap::Parser; use sha2::{Digest, Sha256}; use tempfile::NamedTempFile; use url::Url; -use wasmer::{Function, Imports, Instance, Module, Store, Type, TypedFunction, Value}; +use wasmer::{ + DeserializeError, Function, Imports, Instance, Module, Store, Type, TypedFunction, Value, +}; +use wasmer_cache::Cache; use wasmer_compiler::ArtifactBuild; use wasmer_registry::Package; use wasmer_wasix::runners::{Runner, WapmContainer}; use webc::metadata::Manifest; use crate::{ - commands::Cache, store::StoreOptions, - wasmer_home::{DownloadCached, WasmerHome}, + wasmer_home::{DownloadCached, ModuleCache, WasmerHome}, }; /// The `wasmer run` subcommand. @@ -65,7 +67,8 @@ impl Run2 { let (mut store, _) = self.store.get_store()?; - let result = match target.load(&self.wasmer_home, &store)? { + let mut cache = self.wasmer_home.module_cache(); + let result = match target.load(&mut cache, &store)? { ExecutableTarget::WebAssembly(wasm) => self.execute_wasm(&target, &wasm, &mut store), ExecutableTarget::Webc(container) => self.execute_webc(&target, &container, &mut store), }; @@ -273,7 +276,7 @@ fn infer_webc_entrypoint(manifest: &Manifest) -> Result<&str, Error> { } } -fn compile_directory_to_webc(dir: &Path, dest: W) -> Result<(), Error> { +fn compile_directory_to_webc(dir: &Path) -> Result, Error> { todo!() } @@ -335,10 +338,6 @@ impl Display for PackageSource { } } -fn get_cached_package(pkg: &Package, home: &WasmerHome) -> Result, Error> { - todo!(); -} - /// A file/directory on disk that will be executed. /// /// Depending on the type of target and the command-line arguments, this might @@ -388,11 +387,7 @@ impl TargetOnDisk { } } - fn load( - &self, - cache: &impl wasmer_cache::Cache, - store: &Store, - ) -> Result { + fn load(&self, cache: &mut ModuleCache, store: &Store) -> Result { match self { TargetOnDisk::Webc(webc) => { // As an optimisation, try to use the mmapped version first. @@ -409,25 +404,27 @@ impl TargetOnDisk { Ok(ExecutableTarget::Webc(container)) } TargetOnDisk::Directory(dir) => { - let mut temp = NamedTempFile::new()?; - compile_directory_to_webc(&dir, &mut temp).with_context(|| { - format!("Unable to bundle \"{}\" was a WEBC package", dir.display()) + let webc = compile_directory_to_webc(&dir).with_context(|| { + format!("Unable to bundle \"{}\" as a WEBC package", dir.display()) })?; + let container = WapmContainer::from_bytes(webc.into()) + .context("Unable to parse the generated WEBC file")?; - todo!("Figure out where to put the compiled WEBC in a way that won't fill the disk over time"); + Ok(ExecutableTarget::Webc(container)) } - TargetOnDisk::WebAssemblyBinary(wasm) => { - let module = Module::from_file(store, wasm) - .context("Unable to load the module from a file")?; + TargetOnDisk::WebAssemblyBinary(path) => { + let wasm = std::fs::read(&path) + .with_context(|| format!("Unable to read \"{}\"", path.display()))?; + let module = compile_wasm_cached(&path, &wasm, cache, store)?; Ok(ExecutableTarget::WebAssembly(module)) } - TargetOnDisk::Wat(wat) => { - let wat = std::fs::read(wat) - .with_context(|| format!("Unable to read \"{}\"", wat.display()))?; + TargetOnDisk::Wat(path) => { + let wat = std::fs::read(path) + .with_context(|| format!("Unable to read \"{}\"", path.display()))?; let wasm = wasmer::wat2wasm(&wat).context("Unable to convert the WAT to WebAssembly")?; - let module = - Module::new(store, wasm).context("Unable to load the module from a file")?; + + let module = compile_wasm_cached(&path, &wasm, cache, store)?; Ok(ExecutableTarget::WebAssembly(module)) } TargetOnDisk::Artifact(artifact) => { @@ -441,6 +438,47 @@ impl TargetOnDisk { } } +fn compile_wasm_cached( + path: &Path, + wasm: &[u8], + cache: &mut ModuleCache, + store: &Store, +) -> Result { + let hash = wasmer_cache::Hash::generate(&wasm); + + unsafe { + match cache.load(store, hash) { + Ok(m) => { + tracing::debug!(%hash, "Reusing a cached module"); + return Ok(m); + } + Err(DeserializeError::Io(e)) if e.kind() == ErrorKind::NotFound => {} + Err(error) => { + tracing::warn!( + %hash, + error=&error as &dyn std::error::Error, + wasm_path=%path.display(), + "Unable to deserialize the cached module", + ); + } + } + } + + let mut module = Module::new(store, wasm).context("Unable to load the module from a file")?; + module.set_name(path.display().to_string().as_str()); + + if let Err(e) = cache.store(hash, &module) { + tracing::warn!( + error=&e as &dyn std::error::Error, + wat=%path.display(), + key=%hash, + "Unable to cache the compiled module", + ); + } + + Ok(module) +} + #[derive(Debug, Clone)] enum ExecutableTarget { WebAssembly(Module), diff --git a/lib/cli/src/wasmer_home.rs b/lib/cli/src/wasmer_home.rs index ec3e14adb86..4842d6f52ce 100644 --- a/lib/cli/src/wasmer_home.rs +++ b/lib/cli/src/wasmer_home.rs @@ -48,6 +48,18 @@ impl WasmerHome { anyhow::bail!("Unable to determine the Wasmer directory"); } + + pub fn module_cache(&self) -> ModuleCache { + if self.disable_cache { + return ModuleCache::Disabled; + }; + + self.wasmer_home() + .ok() + .and_then(|home| wasmer_cache::FileSystemCache::new(home.join("cache")).ok()) + .map(ModuleCache::Enabled) + .unwrap_or(ModuleCache::Disabled) + } } impl DownloadCached for WasmerHome { @@ -320,20 +332,32 @@ fn package_url(registry: &str, pkg: &Package) -> Result { Ok(url) } -impl wasmer_cache::Cache for WasmerHome { +#[derive(Debug, Clone)] +pub enum ModuleCache { + Enabled(wasmer_cache::FileSystemCache), + Disabled, +} + +impl wasmer_cache::Cache for ModuleCache { type SerializeError = SerializeError; type DeserializeError = DeserializeError; unsafe fn load( &self, - _engine: &impl AsEngineRef, - _key: Hash, + engine: &impl AsEngineRef, + key: Hash, ) -> Result { - todo!() + match self { + ModuleCache::Enabled(f) => f.load(engine, key), + ModuleCache::Disabled => Err(DeserializeError::Io(std::io::ErrorKind::NotFound.into())), + } } - fn store(&mut self, _key: Hash, _module: &Module) -> Result<(), Self::SerializeError> { - todo!() + fn store(&mut self, key: Hash, module: &Module) -> Result<(), Self::SerializeError> { + match self { + ModuleCache::Enabled(f) => f.store(key, module), + ModuleCache::Disabled => Ok(()), + } } } From 4d53bc0b13f561d62b2ace859254a2dcbab97314 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Thu, 9 Mar 2023 00:32:19 +0800 Subject: [PATCH 19/39] Implemented the logic for "wasmer run ./some/directory/" --- Cargo.lock | 1 + lib/cache/src/filesystem.rs | 4 +-- lib/cli/Cargo.toml | 3 ++ lib/cli/src/commands/run2.rs | 55 +++++++++++++++++++++++++++-- tests/integration/cli/tests/run2.rs | 1 - 5 files changed, 58 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 84ee6b5c0d2..6ede91781a7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5346,6 +5346,7 @@ dependencies = [ "wasmer-wasm-interface", "wasmer-wast", "wasmparser 0.51.4", + "webc 4.1.1", "webc 5.0.0-rc.5", ] diff --git a/lib/cache/src/filesystem.rs b/lib/cache/src/filesystem.rs index 85f522fd19d..237390c61cc 100644 --- a/lib/cache/src/filesystem.rs +++ b/lib/cache/src/filesystem.rs @@ -98,7 +98,7 @@ impl Cache for FileSystemCache { key: Hash, ) -> Result { let filename = if let Some(ref ext) = self.ext { - format!("{}.{}", key.to_string(), ext) + format!("{}.{}", key, ext) } else { key.to_string() }; @@ -114,7 +114,7 @@ impl Cache for FileSystemCache { fn store(&mut self, key: Hash, module: &Module) -> Result<(), Self::SerializeError> { let filename = if let Some(ref ext) = self.ext { - format!("{}.{}", key.to_string(), ext) + format!("{}.{}", key, ext) } else { key.to_string() }; diff --git a/lib/cli/Cargo.toml b/lib/cli/Cargo.toml index d10339f9372..70b7eb42f88 100644 --- a/lib/cli/Cargo.toml +++ b/lib/cli/Cargo.toml @@ -69,6 +69,9 @@ toml = "0.5.9" url = "2.3.1" libc = { version = "^0.2", default-features = false } webc = { version = "5.0.0-rc.5" } +# HACK(Michael-F-Bryan): Remove this once a new version of wapm-targz-to-pirita +# is published that doesn't have a public dependency on webc +webc_v4 = { version = "4", package = "webc" } isatty = "0.1.9" dialoguer = "0.10.2" tldextract = "0.6.0" diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs index da9f8baa47c..a4a6a7f3d23 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run2.rs @@ -1,6 +1,7 @@ #![allow(missing_docs, unused)] use std::{ + collections::BTreeMap, fmt::Display, fs::File, io::{ErrorKind, Read, Write}, @@ -15,6 +16,7 @@ use clap::Parser; use sha2::{Digest, Sha256}; use tempfile::NamedTempFile; use url::Url; +use wapm_targz_to_pirita::FileMap; use wasmer::{ DeserializeError, Function, Imports, Instance, Module, Store, Type, TypedFunction, Value, }; @@ -23,6 +25,7 @@ use wasmer_compiler::ArtifactBuild; use wasmer_registry::Package; use wasmer_wasix::runners::{Runner, WapmContainer}; use webc::metadata::Manifest; +use webc_v4::DirOrFile; use crate::{ store::StoreOptions, @@ -75,7 +78,13 @@ impl Run2 { if let Err(e) = &result { if let Some(coredump) = &self.coredump_on_trap { - generate_coredump(e, target.path(), coredump).context("Unable")? + if let Err(e) = generate_coredump(e, target.path(), coredump) { + tracing::warn!( + error = &*e as &dyn std::error::Error, + coredump_path=%coredump.display(), + "Unable to generate a coredump", + ); + } } } @@ -277,7 +286,43 @@ fn infer_webc_entrypoint(manifest: &Manifest) -> Result<&str, Error> { } fn compile_directory_to_webc(dir: &Path) -> Result, Error> { - todo!() + let mut files = BTreeMap::new(); + load_files_from_disk(&mut files, dir, dir)?; + + let wasmer_toml = webc_v4::DirOrFile::File("wasmer.toml".into()); + if let Some(toml_data) = files.remove(&wasmer_toml) { + // HACK(Michael-F-Bryan): The version of wapm-targz-to-pirita we are + // using doesn't know we renamed "wapm.toml" to "wasmer.toml", so we + // manually patch things up if people have already migrated their + // projects. + files + .entry(DirOrFile::File("wapm.toml".into())) + .or_insert(toml_data); + } + + let functions = wapm_targz_to_pirita::TransformManifestFunctions::default(); + wapm_targz_to_pirita::generate_webc_file(files, &dir.to_path_buf(), None, &functions) +} + +fn load_files_from_disk(files: &mut FileMap, dir: &Path, base: &Path) -> Result<(), Error> { + let entries = dir + .read_dir() + .with_context(|| format!("Unable to read the contents of \"{}\"", dir.display()))?; + + for entry in entries { + let path = entry?.path(); + let relative_path = path.strip_prefix(base)?.to_path_buf(); + + if path.is_dir() { + load_files_from_disk(files, &path, base)?; + files.insert(webc_v4::DirOrFile::Dir(relative_path), Vec::new()); + } else if path.is_file() { + let data = std::fs::read(&path) + .with_context(|| format!("Unable to read \"{}\"", path.display()))?; + files.insert(webc_v4::DirOrFile::File(relative_path), data); + } + } + Ok(()) } #[derive(Debug, Clone, PartialEq)] @@ -295,8 +340,10 @@ impl PackageSource { } let path = Path::new(s); - if path.exists() { + if path.is_file() { return Ok(PackageSource::File(path.to_path_buf())); + } else if path.is_dir() { + return Ok(PackageSource::Dir(path.to_path_buf())); } if let Ok(pkg) = Package::from_str(s) { @@ -404,6 +451,8 @@ impl TargetOnDisk { Ok(ExecutableTarget::Webc(container)) } TargetOnDisk::Directory(dir) => { + // FIXME: Runners should be able to load directories directly + // instead of needing to compile to a WEBC file. let webc = compile_directory_to_webc(&dir).with_context(|| { format!("Unable to bundle \"{}\" as a WEBC package", dir.display()) })?; diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index db37b4099e2..96e584cb86a 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -185,7 +185,6 @@ mod wasm_on_disk { } #[test] -#[ignore] fn wasmer_package_directory() { let temp = TempDir::new().unwrap(); std::fs::copy(fixtures::qjs(), temp.path().join("qjs.wasm")).unwrap(); From b07dd1b62efed8483f284d0df2223949ceba60f0 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Thu, 9 Mar 2023 16:27:31 +0800 Subject: [PATCH 20/39] Fixed wasmer-cache unit tests and lints --- lib/cache/src/hash.rs | 7 +++++-- lib/cli/src/commands/run2.rs | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/lib/cache/src/hash.rs b/lib/cache/src/hash.rs index 95152310a3a..8c202ef6185 100644 --- a/lib/cache/src/hash.rs +++ b/lib/cache/src/hash.rs @@ -67,13 +67,16 @@ mod tests { use super::*; #[test] - fn hash_to_array_works() { + fn hash_is_displayed_as_hex() { let original = [ 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x12, 0x65, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x12, 0x65, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x12, 0x65, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x12, 0x65, ]; let hash = Hash::new(original); - assert_eq!(hash.to_array(), original); + assert_eq!( + hash.to_string(), + "aabbccddeeff1265aabbccddeeff1265aabbccddeeff1265aabbccddeeff1265" + ); } } diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs index a4a6a7f3d23..b78b7682d12 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run2.rs @@ -136,7 +136,7 @@ impl Run2 { runner.set_forward_host_env(); } if runner.can_run_command(id, command).unwrap_or(false) { - return runner.run_cmd(&container, id).context("WASI runner failed"); + return runner.run_cmd(container, id).context("WASI runner failed"); } let (store, _compiler_type) = self.store.get_store()?; @@ -144,7 +144,7 @@ impl Run2 { runner.set_args(self.args.clone()); if runner.can_run_command(id, command).unwrap_or(false) { return runner - .run_cmd(&container, id) + .run_cmd(container, id) .context("Emscripten runner failed"); } @@ -161,7 +161,7 @@ impl Run2 { runner.config().forward_host_env(); } if runner.can_run_command(id, command).unwrap_or(false) { - return runner.run_cmd(&container, id).context("WCGI runner failed"); + return runner.run_cmd(container, id).context("WCGI runner failed"); } anyhow::bail!( @@ -335,10 +335,6 @@ enum PackageSource { impl PackageSource { fn infer(s: &str) -> Result { - if let Ok(url) = Url::parse(s) { - return Ok(PackageSource::Url(url)); - } - let path = Path::new(s); if path.is_file() { return Ok(PackageSource::File(path.to_path_buf())); @@ -346,6 +342,10 @@ impl PackageSource { return Ok(PackageSource::Dir(path.to_path_buf())); } + if let Ok(url) = Url::parse(s) { + return Ok(PackageSource::Url(url)); + } + if let Ok(pkg) = Package::from_str(s) { return Ok(PackageSource::Package(pkg)); } @@ -453,7 +453,7 @@ impl TargetOnDisk { TargetOnDisk::Directory(dir) => { // FIXME: Runners should be able to load directories directly // instead of needing to compile to a WEBC file. - let webc = compile_directory_to_webc(&dir).with_context(|| { + let webc = compile_directory_to_webc(dir).with_context(|| { format!("Unable to bundle \"{}\" as a WEBC package", dir.display()) })?; let container = WapmContainer::from_bytes(webc.into()) @@ -464,7 +464,7 @@ impl TargetOnDisk { TargetOnDisk::WebAssemblyBinary(path) => { let wasm = std::fs::read(&path) .with_context(|| format!("Unable to read \"{}\"", path.display()))?; - let module = compile_wasm_cached(&path, &wasm, cache, store)?; + let module = compile_wasm_cached(path, &wasm, cache, store)?; Ok(ExecutableTarget::WebAssembly(module)) } TargetOnDisk::Wat(path) => { @@ -473,7 +473,7 @@ impl TargetOnDisk { let wasm = wasmer::wat2wasm(&wat).context("Unable to convert the WAT to WebAssembly")?; - let module = compile_wasm_cached(&path, &wasm, cache, store)?; + let module = compile_wasm_cached(path, &wasm, cache, store)?; Ok(ExecutableTarget::WebAssembly(module)) } TargetOnDisk::Artifact(artifact) => { @@ -493,7 +493,7 @@ fn compile_wasm_cached( cache: &mut ModuleCache, store: &Store, ) -> Result { - let hash = wasmer_cache::Hash::generate(&wasm); + let hash = wasmer_cache::Hash::generate(wasm); unsafe { match cache.load(store, hash) { @@ -561,7 +561,7 @@ fn generate_coredump(err: &Error, source: &Path, coredump_path: &Path) -> Result let coredump = coredump_builder .serialize() - .map_err(|e| Error::msg(e)) + .map_err(Error::msg) .context("Coredump serializing failed")?; std::fs::write(&coredump_path, &coredump).with_context(|| { From 7a55304a449b968119c5b0874b80569bac1006be Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Fri, 10 Mar 2023 01:27:16 +0800 Subject: [PATCH 21/39] Re-worked the logic for directory mapping --- Cargo.lock | 14 ---- lib/cli/src/commands/run.rs | 9 ++- lib/cli/src/commands/run/wasi.rs | 25 +++++--- lib/cli/src/commands/run2.rs | 8 +-- lib/cli/src/utils.rs | 10 ++- lib/wasi/src/runners/wasi.rs | 18 +++++- lib/wasi/src/runners/wcgi/handler.rs | 95 ++++++++++++++++++---------- lib/wasi/src/runners/wcgi/mod.rs | 4 +- lib/wasi/src/runners/wcgi/runner.rs | 32 ++++------ tests/integration/cli/Cargo.toml | 2 - tests/integration/cli/tests/run2.rs | 88 +++++++++++--------------- 11 files changed, 163 insertions(+), 142 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6ede91781a7..5f2afbd9b7b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1235,18 +1235,6 @@ dependencies = [ "libc", ] -[[package]] -name = "escargot" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5584ba17d7ab26a8a7284f13e5bd196294dd2f2d79773cff29b9e9edef601a6" -dependencies = [ - "log", - "once_cell", - "serde", - "serde_json", -] - [[package]] name = "fallible-iterator" version = "0.2.0" @@ -5519,13 +5507,11 @@ dependencies = [ "assert_cmd 2.0.10", "derivative", "dirs", - "escargot", "flate2", "hex", "insta", "md5", "object 0.30.3", - "once_cell", "predicates 2.1.5", "pretty_assertions", "rand 0.8.5", diff --git a/lib/cli/src/commands/run.rs b/lib/cli/src/commands/run.rs index 03d1dd0fd53..f16dd7e71b8 100644 --- a/lib/cli/src/commands/run.rs +++ b/lib/cli/src/commands/run.rs @@ -237,7 +237,12 @@ impl RunWithPathBuf { .map_err(|e| anyhow!("{}", e))?; env.as_mut(&mut store).set_data( &emscripten_globals.data, - self.wasi.mapped_dirs.clone().into_iter().collect(), + self.wasi + .mapped_dirs + .clone() + .into_iter() + .map(|d| (d.guest, d.host)) + .collect(), ); let import_object = generate_emscripten_env(&mut store, &env, &mut emscripten_globals); @@ -403,7 +408,7 @@ impl RunWithPathBuf { .store(store) .addr(self.wcgi.addr) .envs(self.wasi.env_vars.clone()) - .map_directories(self.wasi.mapped_dirs.iter().map(|(g, h)| (h, g))); + .map_directories(self.wasi.mapped_dirs.clone()); if self.wcgi.forward_host_env { runner.config().forward_host_env(); } diff --git a/lib/cli/src/commands/run/wasi.rs b/lib/cli/src/commands/run/wasi.rs index e92d61526fa..d14d78b972f 100644 --- a/lib/cli/src/commands/run/wasi.rs +++ b/lib/cli/src/commands/run/wasi.rs @@ -10,6 +10,7 @@ use wasmer::{AsStoreMut, Instance, Module, RuntimeError, Value}; use wasmer_wasix::{ default_fs_backing, get_wasi_versions, os::{tty_sys::SysTty, TtyBridge}, + runners::wcgi::MappedDirectory, runtime::task_manager::tokio::TokioTaskManager, types::__WASI_STDIN_FILENO, PluggableRuntime, WasiEnv, WasiEnvBuilder, WasiError, WasiFunctionEnv, WasiVersion, @@ -30,7 +31,7 @@ pub struct Wasi { name = "GUEST_DIR:HOST_DIR", parse(try_from_str = parse_mapdir), )] - pub(crate) mapped_dirs: Vec<(String, PathBuf)>, + pub(crate) mapped_dirs: Vec, /// Pass custom environment variables #[clap( @@ -93,7 +94,10 @@ pub struct Wasi { #[allow(dead_code)] impl Wasi { pub fn map_dir(&mut self, alias: &str, target_on_disk: PathBuf) { - self.mapped_dirs.push((alias.to_string(), target_on_disk)); + self.mapped_dirs.push(MappedDirectory { + guest: alias.to_string(), + host: target_on_disk, + }); } pub fn set_env(&mut self, key: &str, value: &str) { @@ -165,12 +169,13 @@ impl Wasi { if !self.mapped_dirs.is_empty() { let fs_backing: Arc = Arc::new(PassthruFileSystem::new(default_fs_backing())); - for (src, dst) in self.mapped_dirs.clone() { - let src = match src.starts_with('/') { - true => src, - false => format!("/{}", src), + for MappedDirectory { host, guest } in self.mapped_dirs.clone() { + let host = if !host.is_absolute() { + Path::new("/").join(host) + } else { + host }; - root_fs.mount(PathBuf::from(src), &fs_backing, dst)?; + root_fs.mount(guest.into(), &fs_backing, host)?; } } @@ -184,7 +189,11 @@ impl Wasi { builder .fs(default_fs_backing()) .preopen_dirs(self.pre_opened_directories.clone())? - .map_dirs(self.mapped_dirs.clone())? + .map_dirs( + self.mapped_dirs + .iter() + .map(|d| (d.guest.clone(), d.host.clone())), + )? }; if self.http_client { diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs index b78b7682d12..27b2e4e44e9 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run2.rs @@ -23,7 +23,7 @@ use wasmer::{ use wasmer_cache::Cache; use wasmer_compiler::ArtifactBuild; use wasmer_registry::Package; -use wasmer_wasix::runners::{Runner, WapmContainer}; +use wasmer_wasix::runners::{wcgi::MappedDirectory, Runner, WapmContainer}; use webc::metadata::Manifest; use webc_v4::DirOrFile; @@ -61,7 +61,6 @@ pub struct Run2 { impl Run2 { pub fn execute(&self) -> Result<(), Error> { crate::logging::set_up_logging(self.verbosity.log_level_filter()); - tracing::info!("Started!"); let target = self .input @@ -131,7 +130,8 @@ impl Run2 { let (store, _compiler_type) = self.store.get_store()?; let mut runner = wasmer_wasix::runners::wasi::WasiRunner::new(store) .with_args(self.args.clone()) - .with_envs(self.wasi.env_vars.clone()); + .with_envs(self.wasi.env_vars.clone()) + .with_mapped_directories(self.wasi.mapped_dirs.clone()); if self.wasi.forward_host_env { runner.set_forward_host_env(); } @@ -156,7 +156,7 @@ impl Run2 { .store(store) .addr(self.wcgi.addr) .envs(self.wasi.env_vars.clone()) - .map_directories(self.wasi.mapped_dirs.iter().map(|(g, h)| (h, g))); + .map_directories(self.wasi.mapped_dirs.clone()); if self.wasi.forward_host_env { runner.config().forward_host_env(); } diff --git a/lib/cli/src/utils.rs b/lib/cli/src/utils.rs index 93e8fda8c81..e446a8e6bbc 100644 --- a/lib/cli/src/utils.rs +++ b/lib/cli/src/utils.rs @@ -2,6 +2,7 @@ use anyhow::{bail, Result}; use std::env; use std::path::PathBuf; +use wasmer_wasix::runners::wcgi::MappedDirectory; /// Whether or not Wasmer should print with color pub fn wasmer_should_print_color() -> bool { @@ -11,7 +12,7 @@ pub fn wasmer_should_print_color() -> bool { .unwrap_or_else(|| atty::is(atty::Stream::Stdout)) } -fn retrieve_alias_pathbuf(alias: &str, real_dir: &str) -> Result<(String, PathBuf)> { +fn retrieve_alias_pathbuf(alias: &str, real_dir: &str) -> Result { let pb = PathBuf::from(&real_dir); if let Ok(pb_metadata) = pb.metadata() { if !pb_metadata.is_dir() { @@ -20,11 +21,14 @@ fn retrieve_alias_pathbuf(alias: &str, real_dir: &str) -> Result<(String, PathBu } else { bail!("Directory \"{}\" does not exist", &real_dir); } - Ok((alias.to_string(), pb)) + Ok(MappedDirectory { + guest: alias.to_string(), + host: pb, + }) } /// Parses a mapdir from a string -pub fn parse_mapdir(entry: &str) -> Result<(String, PathBuf)> { +pub fn parse_mapdir(entry: &str) -> Result { // We try first splitting by `::` if let [alias, real_dir] = entry.split("::").collect::>()[..] { retrieve_alias_pathbuf(alias, real_dir) diff --git a/lib/wasi/src/runners/wasi.rs b/lib/wasi/src/runners/wasi.rs index cab96fb3334..b91a2f7d6b9 100644 --- a/lib/wasi/src/runners/wasi.rs +++ b/lib/wasi/src/runners/wasi.rs @@ -2,7 +2,10 @@ use std::{collections::HashMap, sync::Arc}; -use crate::{runners::WapmContainer, PluggableRuntime, VirtualTaskManager}; +use crate::{ + runners::{wcgi::MappedDirectory, WapmContainer}, + PluggableRuntime, VirtualTaskManager, +}; use crate::{WasiEnv, WasiEnvBuilder}; use anyhow::{Context, Error}; use serde::{Deserialize, Serialize}; @@ -14,6 +17,7 @@ pub struct WasiRunner { args: Vec, env: HashMap, forward_host_env: bool, + mapped_dirs: Vec, #[serde(skip, default)] store: Store, #[serde(skip, default)] @@ -27,6 +31,7 @@ impl WasiRunner { args: Vec::new(), env: HashMap::new(), store, + mapped_dirs: Vec::new(), forward_host_env: false, tasks: None, } @@ -97,6 +102,15 @@ impl WasiRunner { self.forward_host_env = true; } + pub fn with_mapped_directories(mut self, dirs: I) -> Self + where + I: IntoIterator, + D: Into, + { + self.mapped_dirs.extend(dirs.into_iter().map(|d| d.into())); + self + } + pub fn with_task_manager(mut self, tasks: impl VirtualTaskManager) -> Self { self.set_task_manager(tasks); self @@ -171,7 +185,7 @@ fn prepare_webc_env( let mut builder = WasiEnv::builder(command).args(args); for entry in preopen_dirs { - builder.add_preopen_build(|p| p.directory(&entry).read(true).write(true).create(true))?; + builder.add_preopen_dir(entry)?; } builder.set_fs(filesystem); diff --git a/lib/wasi/src/runners/wcgi/handler.rs b/lib/wasi/src/runners/wcgi/handler.rs index f2ec1e18a9c..06f90847efc 100644 --- a/lib/wasi/src/runners/wcgi/handler.rs +++ b/lib/wasi/src/runners/wcgi/handler.rs @@ -7,7 +7,7 @@ use std::{ task::Poll, }; -use anyhow::Error; +use anyhow::{Context, Error}; use futures::{Future, FutureExt, StreamExt, TryFutureExt}; use http::{Request, Response}; use hyper::{service::Service, Body}; @@ -15,6 +15,7 @@ use tokio::{ io::{AsyncBufReadExt, AsyncRead, AsyncWrite, AsyncWriteExt}, runtime::Handle, }; +use tracing::Instrument; use virtual_fs::{FileSystem, PassthruFileSystem, RootFileSystemBuilder, TmpFileSystem}; use wasmer::Module; use wcgi_host::CgiDialect; @@ -46,6 +47,8 @@ impl Handler { let (res_body_sender, res_body_receiver) = Pipe::channel(); let (stderr_sender, stderr_receiver) = Pipe::channel(); + tracing::debug!("Creating the WebAssembly instance"); + let builder = WasiEnv::builder(self.program.to_string()); let mut request_specific_env = HashMap::new(); @@ -53,7 +56,7 @@ impl Handler { .prepare_environment_variables(parts, &mut request_specific_env); let rt = PluggableRuntime::new(Arc::clone(&self.task_manager)); - let builder = builder + let mut builder = builder .envs(self.env.iter()) .envs(request_specific_env) .args(self.args.iter()) @@ -66,11 +69,17 @@ impl Handler { threading: Default::default(), }) .runtime(Arc::new(rt)) - .sandbox_fs(self.fs()?) + .fs(Box::new(self.fs()?)) .preopen_dir(Path::new("/"))?; + for dir in &self.mapped_dirs { + builder.add_preopen_dir(&dir.guest)?; + } + let module = self.module.clone(); + tracing::debug!("Calling into the WCGI executable"); + let done = self .task_manager .runtime() @@ -81,19 +90,26 @@ impl Handler { let handle = self.task_manager.runtime().clone(); let callbacks = Arc::clone(&self.callbacks); - handle.spawn(async move { - consume_stderr(stderr_receiver, callbacks).await; - }); - - self.task_manager.runtime().spawn(async move { - if let Err(e) = drive_request_to_completion(&handle, done, body, req_body_sender).await - { - tracing::error!( - error = &*e as &dyn std::error::Error, - "Unable to drive the request to completion" - ); + handle.spawn( + async move { + consume_stderr(stderr_receiver, callbacks).await; } - }); + .in_current_span(), + ); + + self.task_manager.runtime().spawn( + async move { + if let Err(e) = + drive_request_to_completion(&handle, done, body, req_body_sender).await + { + tracing::error!( + error = &*e as &dyn std::error::Error, + "Unable to drive the request to completion" + ); + } + } + .in_current_span(), + ); let mut res_body_receiver = tokio::io::BufReader::new(res_body_receiver); @@ -116,6 +132,8 @@ impl Handler { let response = hyper::Response::from_parts(parts, body); + tracing::debug!("Generated the response"); + Ok(response) } @@ -131,17 +149,17 @@ impl Handler { true => PathBuf::from(guest), false => Path::new("/").join(guest), }; - tracing::trace!( + tracing::debug!( host=%host.display(), guest=%guest.display(), - "mounting directory to instance fs", + "mounting host directory", ); root_fs - .mount(host.clone(), &fs_backing, guest.clone()) - .map_err(|error| { - anyhow::anyhow!( - "Unable to mount \"{}\" to \"{}\": {error}", + .mount(guest.clone(), &fs_backing, host.clone()) + .with_context(|| { + format!( + "Unable to mount \"{}\" to \"{}\"", host.display(), guest.display() ) @@ -169,21 +187,30 @@ async fn drive_request_to_completion( mut instance_stdin: impl AsyncWrite + Send + Unpin + 'static, ) -> Result<(), Error> { let request_body_send = handle - .spawn(async move { - // Copy the request into our instance, chunk-by-chunk. If the instance - // dies before we finish writing the body, the instance's side of the - // pipe will be automatically closed and we'll error out. - while let Some(res) = request_body.next().await { - // FIXME(theduke): figure out how to propagate a body error to the - // CGI instance. - let chunk = res?; - instance_stdin.write_all(chunk.as_ref()).await?; - } + .spawn( + async move { + // Copy the request into our instance, chunk-by-chunk. If the instance + // dies before we finish writing the body, the instance's side of the + // pipe will be automatically closed and we'll error out. + let mut request_size = 0; + while let Some(res) = request_body.next().await { + // FIXME(theduke): figure out how to propagate a body error to the + // CGI instance. + let chunk = res?; + request_size += chunk.len(); + instance_stdin.write_all(chunk.as_ref()).await?; + } - instance_stdin.shutdown().await?; + instance_stdin.shutdown().await?; + tracing::debug!( + request_size, + "Finished forwarding the request to the WCGI server" + ); - Ok::<(), Error>(()) - }) + Ok::<(), Error>(()) + } + .in_current_span(), + ) .map_err(Error::from) .and_then(|r| async { r }); diff --git a/lib/wasi/src/runners/wcgi/mod.rs b/lib/wasi/src/runners/wcgi/mod.rs index 1fe6f485c12..9f2de0319b8 100644 --- a/lib/wasi/src/runners/wcgi/mod.rs +++ b/lib/wasi/src/runners/wcgi/mod.rs @@ -5,8 +5,8 @@ use std::path::PathBuf; pub use self::runner::{Callbacks, Config, WcgiRunner}; -#[derive(Debug, Clone, PartialEq)] -pub(crate) struct MappedDirectory { +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct MappedDirectory { pub host: PathBuf, pub guest: String, } diff --git a/lib/wasi/src/runners/wcgi/runner.rs b/lib/wasi/src/runners/wcgi/runner.rs index d43796a4ce9..53d6e57e5ba 100644 --- a/lib/wasi/src/runners/wcgi/runner.rs +++ b/lib/wasi/src/runners/wcgi/runner.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, convert::Infallible, net::SocketAddr, path::PathBuf, sync::Arc}; +use std::{collections::HashMap, convert::Infallible, net::SocketAddr, sync::Arc}; use anyhow::{Context, Error}; use futures::future::AbortHandle; @@ -325,29 +325,17 @@ impl Config { self } - pub fn map_directory( - &mut self, - host: impl Into, - guest: impl Into, - ) -> &mut Self { - self.mapped_dirs.push(MappedDirectory { - host: host.into(), - guest: guest.into(), - }); + pub fn map_directory(&mut self, dir: MappedDirectory) -> &mut Self { + self.mapped_dirs.push(dir); self } - pub fn map_directories(&mut self, mappings: I) -> &mut Self - where - I: IntoIterator, - H: Into, - G: Into, - { - let mappings = mappings.into_iter().map(|(h, g)| MappedDirectory { - host: h.into(), - guest: g.into(), - }); - self.mapped_dirs.extend(mappings); + pub fn map_directories( + &mut self, + mappings: impl IntoIterator, + ) -> &mut Self { + self.mapped_dirs + .extend(mappings.into_iter().map(|d| d.into())); self } @@ -384,8 +372,10 @@ impl Default for Config { pub trait Callbacks: Send + Sync + 'static { /// A callback that is called whenever the server starts. fn started(&self, _abort: AbortHandle) {} + /// Data was written to stderr by an instance. fn on_stderr(&self, _stderr: &[u8]) {} + /// Reading from stderr failed. fn on_stderr_error(&self, _error: std::io::Error) {} } diff --git a/tests/integration/cli/Cargo.toml b/tests/integration/cli/Cargo.toml index 5be9c69034a..4c6cd6aecd0 100644 --- a/tests/integration/cli/Cargo.toml +++ b/tests/integration/cli/Cargo.toml @@ -20,8 +20,6 @@ reqwest = { version = "0.11.14", features = ["json", "blocking"] } tokio = { version = "1", features = [ "rt", "rt-multi-thread", "macros" ] } assert_cmd = "2.0.8" predicates = "2.1.5" -escargot = "0.5.7" -once_cell = "1.17.1" [dependencies] anyhow = "1" diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index 96e584cb86a..43da182c72e 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -1,23 +1,26 @@ +//! Integration tests for `wasmer run2`. +//! +//! Note that you will need to manually compile the `wasmer` CLI in release mode +//! before running any of these tests. use std::{ - path::{Path, PathBuf}, + io::Read, process::Stdio, time::{Duration, Instant}, }; use assert_cmd::{assert::Assert, prelude::OutputAssertExt, Command}; -use once_cell::sync::Lazy; use predicates::str::contains; use reqwest::{blocking::Client, IntoUrl}; use tempfile::TempDir; +use wasmer_integration_tests_cli::get_wasmer_path; mod webc_on_disk { - use rand::Rng; - use super::*; + use rand::Rng; #[test] fn wasi_runner() { - let assert = Command::new(wasmer_executable()) + let assert = Command::new(get_wasmer_path()) .arg("run2") .arg(fixtures::python()) .arg("--") @@ -28,12 +31,11 @@ mod webc_on_disk { } #[test] - #[ignore] fn wasi_runner_with_mounted_directories() { let temp = TempDir::new().unwrap(); std::fs::write(temp.path().join("main.py"), "print('Hello, World!')").unwrap(); - let assert = Command::new(wasmer_executable()) + let assert = Command::new(get_wasmer_path()) .arg("run2") .arg(fixtures::python()) .arg(format!("--mapdir=/app:{}", temp.path().display())) @@ -46,7 +48,7 @@ mod webc_on_disk { #[test] fn wasi_runner_with_env_vars() { - let assert = Command::new(wasmer_executable()) + let assert = Command::new(get_wasmer_path()) .arg("run2") .arg(fixtures::python()) .arg("--env") @@ -63,7 +65,7 @@ mod webc_on_disk { fn wcgi_runner() { // Start the WCGI server in the background let port = rand::thread_rng().gen_range(10_000_u16..u16::MAX); - let mut cmd = std::process::Command::new(wasmer_executable()); + let mut cmd = std::process::Command::new(get_wasmer_path()); cmd.arg("run2") .env("RUST_LOG", "info,wasmer_wasi::runners=debug") .arg(format!("--addr=127.0.0.1:{port}")) @@ -89,22 +91,21 @@ mod webc_on_disk { } #[test] - #[ignore] fn wcgi_runner_with_mounted_directories() { let temp = TempDir::new().unwrap(); std::fs::write(temp.path().join("file.txt"), "Hello, World!").unwrap(); // Start the WCGI server in the background let port = rand::thread_rng().gen_range(10_000_u16..u16::MAX); - let mut cmd = std::process::Command::new(wasmer_executable()); + let mut cmd = std::process::Command::new(get_wasmer_path()); cmd.arg("run2") .env("RUST_LOG", "info,wasmer_wasi::runners=debug") .arg(format!("--addr=127.0.0.1:{port}")) - .arg(format!("--mapdir=/examples:{}", temp.path().display())) + .arg(format!("--mapdir=/example:{}", temp.path().display())) .arg(fixtures::static_server()); let child = JoinableChild::spawn(cmd); // make the request - let body = http_get(format!("http://127.0.0.1:{port}/file.txt")).unwrap(); + let body = http_get(format!("http://127.0.0.1:{port}/example/file.txt")).unwrap(); assert!(body.contains("Hello, World!"), "{body}"); // And kill the server, making sure it generated the expected logs @@ -112,18 +113,17 @@ mod webc_on_disk { assert .stderr(contains("Starting the server")) - .stderr(contains("method=GET url=/file.txt")); + .stderr(contains("method=GET url=/example/file.txt")); } } mod wasm_on_disk { - use predicates::str::contains; - use super::*; + use predicates::str::contains; #[test] fn wasi_executable() { - let assert = Command::new(wasmer_executable()) + let assert = Command::new(get_wasmer_path()) .arg("run2") .arg(fixtures::qjs()) .arg("--") @@ -136,7 +136,7 @@ mod wasm_on_disk { #[test] fn no_abi() { - let assert = Command::new(wasmer_executable()) + let assert = Command::new(get_wasmer_path()) .arg("run2") .arg(fixtures::fib()) .assert(); @@ -146,7 +146,7 @@ mod wasm_on_disk { #[test] fn error_if_no_start_function_found() { - let assert = Command::new(wasmer_executable()) + let assert = Command::new(get_wasmer_path()) .arg("run2") .arg(fixtures::wat_no_start()) .assert(); @@ -162,7 +162,7 @@ mod wasm_on_disk { let dest = temp.path().join("qjs.wasmu"); let qjs = fixtures::qjs(); // Make sure it is compiled - Command::new(wasmer_executable()) + Command::new(get_wasmer_path()) .arg("compile") .arg("-o") .arg(&dest) @@ -172,7 +172,7 @@ mod wasm_on_disk { assert!(dest.exists()); // Now we can try to run the compiled artifact - let assert = Command::new(wasmer_executable()) + let assert = Command::new(get_wasmer_path()) .arg("run2") .arg(&dest) .arg("--") @@ -190,7 +190,7 @@ fn wasmer_package_directory() { std::fs::copy(fixtures::qjs(), temp.path().join("qjs.wasm")).unwrap(); std::fs::copy(fixtures::qjs_wasmer_toml(), temp.path().join("wasmer.toml")).unwrap(); - let assert = Command::new(wasmer_executable()) + let assert = Command::new(get_wasmer_path()) .arg("run2") .arg(temp.path()) .arg("--") @@ -206,7 +206,7 @@ mod remote_webc { #[test] fn quickjs_as_package_name() { - let assert = Command::new(wasmer_executable()) + let assert = Command::new(get_wasmer_path()) .arg("run2") .arg("saghul/quickjs") .arg("--entrypoint=quickjs") @@ -221,7 +221,7 @@ mod remote_webc { #[test] fn quickjs_as_url() { - let assert = Command::new(wasmer_executable()) + let assert = Command::new(get_wasmer_path()) .arg("run2") .arg("https://wapm.io/saghul/quickjs") .arg("--entrypoint=quickjs") @@ -297,7 +297,21 @@ impl JoinableChild { impl Drop for JoinableChild { fn drop(&mut self) { if let Some(mut child) = self.0.take() { + eprintln!("==== WARNING: Child was dropped before being joined ===="); + let _ = child.kill(); + + if let Some(mut stderr) = child.stderr.take() { + let mut buffer = String::new(); + if stderr.read_to_string(&mut buffer).is_ok() { + eprintln!("---- STDERR ----"); + eprintln!("{buffer}"); + } + } + + if !std::thread::panicking() { + panic!("Child was dropped before being joined"); + } } } } @@ -323,29 +337,3 @@ fn http_get(url: impl IntoUrl) -> Result { panic!("Didn't receive a response from \"{url}\" within the allocated time"); } - -/// Get the path for the `wasmer` executable. -/// -/// Note that this will automatically run the compiler if the executable is -/// out of date. -/// -/// We *don't* want to use [`wasmer_integration_tests_cli::get_wasmer_path()`] -/// because that returns the path to the release executable, and there is no -/// guarantee it contains recent changes or was compiled with the feature flags -/// we are trying to test (or even exists). -fn wasmer_executable() -> &'static Path { - static EXECUTABLE: Lazy = Lazy::new(|| { - let run = escargot::CargoBuild::new() - .package("wasmer-cli") - .bin("wasmer") - .features("compiler singlepass") - .current_release() - .current_target() - .run() - .unwrap(); - - run.path().to_path_buf() - }); - - &*EXECUTABLE -} From ac7f8e53a2982de8b614960e55f96bd660601f6f Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Fri, 10 Mar 2023 01:45:33 +0800 Subject: [PATCH 22/39] Make lint --- lib/cli/src/logging.rs | 2 +- lib/wasi/src/runners/wcgi/mod.rs | 2 +- lib/wasi/src/runners/wcgi/runner.rs | 3 +-- tests/integration/cli/tests/run2.rs | 5 ++--- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/cli/src/logging.rs b/lib/cli/src/logging.rs index ebdf35bbfe5..54ce76c6275 100644 --- a/lib/cli/src/logging.rs +++ b/lib/cli/src/logging.rs @@ -7,7 +7,7 @@ use tracing_subscriber::{ /// Subroutine to instantiate the loggers pub fn set_up_logging(level: log::LevelFilter) { let fmt_layer = fmt::layer() - .with_target(false) + .with_target(true) .with_span_events(fmt::format::FmtSpan::CLOSE) .with_ansi(should_emit_colors()) .with_thread_ids(true) diff --git a/lib/wasi/src/runners/wcgi/mod.rs b/lib/wasi/src/runners/wcgi/mod.rs index 9f2de0319b8..96f838f899b 100644 --- a/lib/wasi/src/runners/wcgi/mod.rs +++ b/lib/wasi/src/runners/wcgi/mod.rs @@ -5,7 +5,7 @@ use std::path::PathBuf; pub use self::runner::{Callbacks, Config, WcgiRunner}; -#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] pub struct MappedDirectory { pub host: PathBuf, pub guest: String, diff --git a/lib/wasi/src/runners/wcgi/runner.rs b/lib/wasi/src/runners/wcgi/runner.rs index 53d6e57e5ba..25ec72df3a2 100644 --- a/lib/wasi/src/runners/wcgi/runner.rs +++ b/lib/wasi/src/runners/wcgi/runner.rs @@ -334,8 +334,7 @@ impl Config { &mut self, mappings: impl IntoIterator, ) -> &mut Self { - self.mapped_dirs - .extend(mappings.into_iter().map(|d| d.into())); + self.mapped_dirs.extend(mappings.into_iter()); self } diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index 43da182c72e..c663cce33df 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -100,12 +100,11 @@ mod webc_on_disk { cmd.arg("run2") .env("RUST_LOG", "info,wasmer_wasi::runners=debug") .arg(format!("--addr=127.0.0.1:{port}")) - .arg(format!("--mapdir=/example:{}", temp.path().display())) + .arg(format!("--mapdir=/path/to:{}", temp.path().display())) .arg(fixtures::static_server()); let child = JoinableChild::spawn(cmd); - // make the request - let body = http_get(format!("http://127.0.0.1:{port}/example/file.txt")).unwrap(); + let body = http_get(format!("http://127.0.0.1:{port}/path/to/file.txt")).unwrap(); assert!(body.contains("Hello, World!"), "{body}"); // And kill the server, making sure it generated the expected logs From fa853475dc4fcae0098347d33abd5f6ce016cae8 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Fri, 10 Mar 2023 03:33:15 +0800 Subject: [PATCH 23/39] Add more useful logs to the WCGI server --- Cargo.lock | 50 ++++++++++++++++++++++++++++ lib/cli/src/commands/run2.rs | 39 ++++++++++++++++++---- lib/wasi/Cargo.toml | 4 ++- lib/wasi/src/runners/wcgi/handler.rs | 1 - lib/wasi/src/runners/wcgi/runner.rs | 46 ++++++++++++++----------- tests/integration/cli/tests/run2.rs | 32 ++++++++++++++---- 6 files changed, 139 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5f2afbd9b7b..303103f044d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1741,6 +1741,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-range-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" + [[package]] name = "http-serde" version = "1.1.2" @@ -4392,6 +4398,48 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d1d42a9b3f3ec46ba828e8d376aec14592ea199f70a06a548587ecd1c4ab658" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -5721,6 +5769,8 @@ dependencies = [ "termios", "thiserror", "tokio", + "tower", + "tower-http", "tracing", "tracing-subscriber 0.2.25", "tracing-wasm", diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs index 27b2e4e44e9..26bbb6abc37 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run2.rs @@ -4,15 +4,17 @@ use std::{ collections::BTreeMap, fmt::Display, fs::File, - io::{ErrorKind, Read, Write}, + io::{ErrorKind, LineWriter, Read, Write}, net::SocketAddr, path::{Path, PathBuf}, str::FromStr, + sync::Mutex, time::{Duration, SystemTime}, }; use anyhow::{Context, Error}; use clap::Parser; +use clap_verbosity_flag::WarnLevel; use sha2::{Digest, Sha256}; use tempfile::NamedTempFile; use url::Url; @@ -36,7 +38,7 @@ use crate::{ #[derive(Debug, Parser)] pub struct Run2 { #[clap(flatten)] - verbosity: clap_verbosity_flag::Verbosity, + verbosity: clap_verbosity_flag::Verbosity, #[clap(flatten)] wasmer_home: WasmerHome, #[clap(flatten)] @@ -114,8 +116,7 @@ impl Run2 { ) -> Result<(), Error> { let id = match self.entrypoint.as_deref() { Some(cmd) => cmd, - None => infer_webc_entrypoint(container.manifest()) - .context("Unable to infer the entrypoint. Please specify it manually")?, + None => infer_webc_entrypoint(container.manifest())?, }; let command = container .manifest() @@ -156,7 +157,8 @@ impl Run2 { .store(store) .addr(self.wcgi.addr) .envs(self.wasi.env_vars.clone()) - .map_directories(self.wasi.mapped_dirs.clone()); + .map_directories(self.wasi.mapped_dirs.clone()) + .callbacks(Callbacks::default()); if self.wasi.forward_host_env { runner.config().forward_host_env(); } @@ -275,7 +277,7 @@ fn infer_webc_entrypoint(manifest: &Manifest) -> Result<&str, Error> { let commands: Vec<_> = manifest.commands.keys().collect(); match commands.as_slice() { - [] => anyhow::bail!("The WEBC file doesn't contain any executable commands",), + [] => anyhow::bail!("The WEBC file doesn't contain any executable commands"), [one] => Ok(one.as_str()), [..] => { anyhow::bail!( @@ -588,3 +590,28 @@ impl Default for WcgiOptions { } } } + +#[derive(Debug)] +struct Callbacks { + stderr: Mutex>, +} + +impl Default for Callbacks { + fn default() -> Self { + Self { + stderr: Mutex::new(LineWriter::new(std::io::stderr())), + } + } +} + +impl wasmer_wasix::runners::wcgi::Callbacks for Callbacks { + fn on_stderr(&self, raw_message: &[u8]) { + if let Ok(mut stderr) = self.stderr.lock() { + // If the WCGI runner printed any log messages we want to make sure + // they get propagated to the user. Line buffering is important here + // because it helps prevent the output from becoming a complete + // mess. + let _ = stderr.write_all(raw_message); + } + } +} diff --git a/lib/wasi/Cargo.toml b/lib/wasi/Cargo.toml index 4c7719b6ab7..831620873dc 100644 --- a/lib/wasi/Cargo.toml +++ b/lib/wasi/Cargo.toml @@ -60,6 +60,8 @@ pin-project = "1.0.12" hyper = { version = "0.14", features = ["server", "stream"], optional = true } wcgi = { version = "0.1.1", optional = true } wcgi-host = { version = "0.1.0", optional = true } +tower-http = { version = "0.4.0", features = ["trace", "util", "catch-panic", "cors"], optional = true } +tower = { version = "0.4.13", features = ["make", "util"], optional = true } [dependencies.reqwest] version = "0.11" @@ -96,7 +98,7 @@ time = ["tokio/time"] webc_runner = ["serde_cbor", "wasmer/compiler"] webc_runner_rt_wasi = [] -webc_runner_rt_wcgi = ["hyper", "wcgi", "wcgi-host"] +webc_runner_rt_wcgi = ["hyper", "wcgi", "wcgi-host", "tower", "tower-http"] webc_runner_rt_emscripten = ["wasmer-emscripten"] sys = ["wasmer/sys", "wasmer-wasix-types/sys", "webc/mmap", "wasmer-vm", "time"] diff --git a/lib/wasi/src/runners/wcgi/handler.rs b/lib/wasi/src/runners/wcgi/handler.rs index 06f90847efc..908f4d0bb96 100644 --- a/lib/wasi/src/runners/wcgi/handler.rs +++ b/lib/wasi/src/runners/wcgi/handler.rs @@ -37,7 +37,6 @@ impl Handler { Handler(Arc::new(state)) } - #[tracing::instrument(skip_all)] pub(crate) async fn handle(&self, req: Request) -> Result, Error> { tracing::debug!(headers=?req.headers()); diff --git a/lib/wasi/src/runners/wcgi/runner.rs b/lib/wasi/src/runners/wcgi/runner.rs index 25ec72df3a2..6d5c8f3b252 100644 --- a/lib/wasi/src/runners/wcgi/runner.rs +++ b/lib/wasi/src/runners/wcgi/runner.rs @@ -1,8 +1,12 @@ -use std::{collections::HashMap, convert::Infallible, net::SocketAddr, sync::Arc}; +use std::{collections::HashMap, net::SocketAddr, sync::Arc, time::Duration}; use anyhow::{Context, Error}; use futures::future::AbortHandle; -use hyper::server::conn::AddrStream; +use http::{Request, Response}; +use hyper::Body; +use tower::{make::Shared, ServiceBuilder}; +use tower_http::{catch_panic::CatchPanicLayer, cors::CorsLayer, trace::TraceLayer}; +use tracing::Span; use virtual_fs::FileSystem; use wasmer::{Engine, Module, Store}; use wcgi_host::CgiDialect; @@ -51,27 +55,31 @@ impl WcgiRunner { let handler = self.create_handler(module, &wasi, ctx)?; let task_manager = Arc::clone(&handler.task_manager); + let callbacks = Arc::clone(&self.config.callbacks); - let make_service = hyper::service::make_service_fn(move |s: &AddrStream| { - let handler = handler.clone(); - let remote_addr = s.remote_addr(); - - async move { - let f = hyper::service::service_fn(move |req| { - let handler = handler.clone(); - tracing::debug!(method=%req.method(), url=%req.uri(), remote_addr = %remote_addr); - - async move { handler.handle(req).await } - }); - Ok::<_, Infallible>(f) - } - }); + let service = ServiceBuilder::new() + .layer( + TraceLayer::new_for_http() + .make_span_with(|request: &Request| { + tracing::info_span!( + "request", + method = %request.method(), + uri = %request.uri(), + status_code = tracing::field::Empty, + ) + }) + .on_response(|response: &Response<_>, _latency: Duration, span: &Span| { + span.record("status_code", &tracing::field::display(response.status())); + tracing::info!("response generated") + }), + ) + .layer(CatchPanicLayer::new()) + .layer(CorsLayer::permissive()) + .service(handler); let address = self.config.addr; tracing::info!(%address, "Starting the server"); - let callbacks = Arc::clone(&self.config.callbacks); - task_manager .block_on(async { let (shutdown, abort_handle) = @@ -80,7 +88,7 @@ impl WcgiRunner { callbacks.started(abort_handle); hyper::Server::bind(&address) - .serve(make_service) + .serve(Shared::new(service)) .with_graceful_shutdown(async { let _ = shutdown.await; tracing::info!("Shutting down gracefully"); diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index c663cce33df..a6716a89615 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -14,6 +14,8 @@ use reqwest::{blocking::Client, IntoUrl}; use tempfile::TempDir; use wasmer_integration_tests_cli::get_wasmer_path; +const RUST_LOG: &str = "info,wasmer_wasi::runners=debug"; + mod webc_on_disk { use super::*; use rand::Rng; @@ -46,6 +48,17 @@ mod webc_on_disk { assert.success().stdout(contains("Hello, World!")); } + #[test] + fn webc_files_with_multiple_commands_require_an_entrypoint_flag() { + let assert = Command::new(get_wasmer_path()) + .arg("run2") + .arg(fixtures::wabt()) + .assert(); + + let msg = r#"Unable to determine the WEBC file's entrypoint. Please choose one of ["wat2wasm", "wast2json", "wasm2wat", "wasm-interp", "wasm-validate", "wasm-strip"]"#; + assert.failure().stderr(contains(msg)); + } + #[test] fn wasi_runner_with_env_vars() { let assert = Command::new(get_wasmer_path()) @@ -67,9 +80,9 @@ mod webc_on_disk { let port = rand::thread_rng().gen_range(10_000_u16..u16::MAX); let mut cmd = std::process::Command::new(get_wasmer_path()); cmd.arg("run2") - .env("RUST_LOG", "info,wasmer_wasi::runners=debug") .arg(format!("--addr=127.0.0.1:{port}")) - .arg(fixtures::static_server()); + .arg(fixtures::static_server()) + .env("RUST_LOG", RUST_LOG); let child = JoinableChild::spawn(cmd); // make the request @@ -98,10 +111,10 @@ mod webc_on_disk { let port = rand::thread_rng().gen_range(10_000_u16..u16::MAX); let mut cmd = std::process::Command::new(get_wasmer_path()); cmd.arg("run2") - .env("RUST_LOG", "info,wasmer_wasi::runners=debug") .arg(format!("--addr=127.0.0.1:{port}")) .arg(format!("--mapdir=/path/to:{}", temp.path().display())) - .arg(fixtures::static_server()); + .arg(fixtures::static_server()) + .env("RUST_LOG", RUST_LOG); let child = JoinableChild::spawn(cmd); let body = http_get(format!("http://127.0.0.1:{port}/path/to/file.txt")).unwrap(); @@ -112,7 +125,8 @@ mod webc_on_disk { assert .stderr(contains("Starting the server")) - .stderr(contains("method=GET url=/example/file.txt")); + .stderr(contains("response generated method=GET uri=/ status_code=200 OK")) + .stderr(contains("response generated method=GET uri=/this/does/not/exist.html status_code=404 Not Found")); } } @@ -243,6 +257,12 @@ mod fixtures { Path::new(C_ASSET_PATH).join("python-0.1.0.wasmer") } + /// A WEBC file containing `wat2wasm`, `wasm-validate`, and other helpful + /// WebAssembly-related commands. + pub fn wabt() -> PathBuf { + Path::new(C_ASSET_PATH).join("wabt-1.0.37.wasmer") + } + /// A WEBC file containing the WCGI static server. pub fn static_server() -> PathBuf { Path::new(C_ASSET_PATH).join("staticserver.webc") @@ -322,7 +342,7 @@ fn http_get(url: impl IntoUrl) -> Result { let timeout = Duration::from_secs(5); let url = url.into_url().unwrap(); - let client = Client::builder().build().unwrap(); + let client = Client::new(); while start.elapsed() < timeout { match client.get(url.clone()).send() { From ee3d2631725567761c31ab910591f378d333203b Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Fri, 10 Mar 2023 04:05:37 +0800 Subject: [PATCH 24/39] Added the webc fs to the WASI runner --- lib/wasi/src/runners/container.rs | 14 ++---- lib/wasi/src/runners/wasi.rs | 72 ++++++++++++++++++++-------- lib/wasi/src/runners/wcgi/handler.rs | 3 +- tests/integration/cli/tests/run2.rs | 9 ++-- 4 files changed, 62 insertions(+), 36 deletions(-) diff --git a/lib/wasi/src/runners/container.rs b/lib/wasi/src/runners/container.rs index 810f5b6c0ca..92ac1ec3bdd 100644 --- a/lib/wasi/src/runners/container.rs +++ b/lib/wasi/src/runners/container.rs @@ -111,18 +111,10 @@ impl WapmContainer { /// Get the entire container as a single filesystem and a list of suggested /// directories to preopen. - pub(crate) fn container_fs(&self) -> (Box, Vec) { + pub(crate) fn container_fs(&self) -> Arc { match &self.repr { - Repr::V1Mmap(mapped) => { - let fs = WebcFileSystem::init_all(Arc::clone(mapped)); - let top_level_dirs = fs.top_level_dirs().clone(); - (Box::new(fs), top_level_dirs) - } - Repr::V1Owned(owned) => { - let fs = WebcFileSystem::init_all(Arc::clone(owned)); - let top_level_dirs = fs.top_level_dirs().clone(); - (Box::new(fs), top_level_dirs) - } + Repr::V1Mmap(mapped) => Arc::new(WebcFileSystem::init_all(Arc::clone(mapped))), + Repr::V1Owned(owned) => Arc::new(WebcFileSystem::init_all(Arc::clone(owned))), } } } diff --git a/lib/wasi/src/runners/wasi.rs b/lib/wasi/src/runners/wasi.rs index b91a2f7d6b9..63f1b2b1579 100644 --- a/lib/wasi/src/runners/wasi.rs +++ b/lib/wasi/src/runners/wasi.rs @@ -1,6 +1,10 @@ //! WebC container support for running WASI modules -use std::{collections::HashMap, sync::Arc}; +use std::{ + collections::HashMap, + path::{Path, PathBuf}, + sync::Arc, +}; use crate::{ runners::{wcgi::MappedDirectory, WapmContainer}, @@ -10,6 +14,7 @@ use crate::{WasiEnv, WasiEnvBuilder}; use anyhow::{Context, Error}; use serde::{Deserialize, Serialize}; use wasmer::{Module, Store}; +use wasmer_vfs::{FileSystem, PassthruFileSystem, RootFileSystemBuilder}; use webc::metadata::{annotations::Wasi, Command}; #[derive(Debug, Serialize, Deserialize)] @@ -119,6 +124,51 @@ impl WasiRunner { pub fn set_task_manager(&mut self, tasks: impl VirtualTaskManager) { self.tasks = Some(Arc::new(tasks)); } + + fn prepare_webc_env( + &self, + container: &WapmContainer, + command: &str, + ) -> Result { + let root_fs = RootFileSystemBuilder::new().build(); + + let filesystem = container.container_fs(); + root_fs.union(&filesystem); + + if !self.mapped_dirs.is_empty() { + let fs_backing: Arc = + Arc::new(PassthruFileSystem::new(crate::default_fs_backing())); + + for MappedDirectory { host, guest } in self.mapped_dirs.iter() { + let guest = match guest.starts_with('/') { + true => PathBuf::from(guest), + false => Path::new("/").join(guest), + }; + tracing::debug!( + host=%host.display(), + guest=%guest.display(), + "mounting host directory", + ); + + root_fs + .mount(guest.clone(), &fs_backing, host.clone()) + .with_context(|| { + format!( + "Unable to mount \"{}\" to \"{}\"", + host.display(), + guest.display() + ) + })?; + } + } + + let builder = WasiEnv::builder(command) + .args(&self.args) + .fs(Box::new(root_fs)) + .preopen_dir("/")?; + + Ok(builder) + } } impl crate::runners::Runner for WasiRunner { @@ -147,7 +197,7 @@ impl crate::runners::Runner for WasiRunner { let mut module = Module::new(&self.store, atom)?; module.set_name(&atom_name); - let mut builder = prepare_webc_env(container, &atom_name, &self.args)?; + let mut builder = self.prepare_webc_env(container, &atom_name)?; if self.forward_host_env { for (k, v) in std::env::vars() { @@ -174,21 +224,3 @@ impl crate::runners::Runner for WasiRunner { Ok(()) } } - -// https://github.com/tokera-com/ate/blob/42c4ce5a0c0aef47aeb4420cc6dc788ef6ee8804/term-lib/src/eval/exec.rs#L444 -fn prepare_webc_env( - container: &WapmContainer, - command: &str, - args: &[String], -) -> Result { - let (filesystem, preopen_dirs) = container.container_fs(); - let mut builder = WasiEnv::builder(command).args(args); - - for entry in preopen_dirs { - builder.add_preopen_dir(entry)?; - } - - builder.set_fs(filesystem); - - Ok(builder) -} diff --git a/lib/wasi/src/runners/wcgi/handler.rs b/lib/wasi/src/runners/wcgi/handler.rs index 908f4d0bb96..f9832f26ed0 100644 --- a/lib/wasi/src/runners/wcgi/handler.rs +++ b/lib/wasi/src/runners/wcgi/handler.rs @@ -162,7 +162,8 @@ impl Handler { host.display(), guest.display() ) - })?; + }) + .unwrap(); } } Ok(root_fs) diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index a6716a89615..563eb3d55f2 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -99,8 +99,8 @@ mod webc_on_disk { assert .stderr(contains("Starting the server")) - .stderr(contains("method=GET url=/")) - .stderr(contains("method=GET url=/this/does/not/exist.html")); + .stderr(contains("response generated method=GET uri=/ status_code=200 OK")) + .stderr(contains("response generated method=GET uri=/this/does/not/exist.html status_code=404 Not Found")); } #[test] @@ -125,8 +125,9 @@ mod webc_on_disk { assert .stderr(contains("Starting the server")) - .stderr(contains("response generated method=GET uri=/ status_code=200 OK")) - .stderr(contains("response generated method=GET uri=/this/does/not/exist.html status_code=404 Not Found")); + .stderr(contains( + "response generated method=GET uri=/path/to/file.txt status_code=200 OK", + )); } } From 6716e140006550ffa03c08de6ea7ce044b0feba9 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Fri, 10 Mar 2023 04:32:48 +0800 Subject: [PATCH 25/39] Added some more tests to pinpoint why the volume filesystem isn't loading --- lib/wasi/src/runners/wcgi/handler.rs | 2 -- tests/integration/cli/tests/run2.rs | 23 ++++++++++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/wasi/src/runners/wcgi/handler.rs b/lib/wasi/src/runners/wcgi/handler.rs index f9832f26ed0..8ce0b8a323a 100644 --- a/lib/wasi/src/runners/wcgi/handler.rs +++ b/lib/wasi/src/runners/wcgi/handler.rs @@ -131,8 +131,6 @@ impl Handler { let response = hyper::Response::from_parts(parts, body); - tracing::debug!("Generated the response"); - Ok(response) } diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index 563eb3d55f2..f3bd8b80815 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -24,16 +24,33 @@ mod webc_on_disk { fn wasi_runner() { let assert = Command::new(get_wasmer_path()) .arg("run2") - .arg(fixtures::python()) + .arg(fixtures::qjs()) .arg("--") - .arg("--version") + .arg("--eval") + .arg("console.log('Hello, World!')") .assert(); - assert.success().stdout(contains("Python 3.6.7")); + assert.success().stdout(contains("Hello, World!")); } #[test] fn wasi_runner_with_mounted_directories() { + let temp = TempDir::new().unwrap(); + std::fs::write(temp.path().join("index.js"), "console.log('Hello, World!')").unwrap(); + + let assert = Command::new(get_wasmer_path()) + .arg("run2") + .arg(fixtures::qjs()) + .arg(format!("--mapdir=/app:{}", temp.path().display())) + .arg("--") + .arg("/app/index.js") + .assert(); + + assert.success().stdout(contains("Hello, World!")); + } + + #[test] + fn wasi_runner_with_mounted_directories_and_webc_volumes() { let temp = TempDir::new().unwrap(); std::fs::write(temp.path().join("main.py"), "print('Hello, World!')").unwrap(); From 2cd726301e8f2777d7c74ca05afd751c52cff9c3 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Fri, 10 Mar 2023 18:10:39 +0800 Subject: [PATCH 26/39] Added tests for constructing the WASI runner's fs --- Cargo.lock | 1 + lib/wasi/Cargo.toml | 1 + lib/wasi/src/runners/wasi.rs | 166 ++++++++++++++++++++++++----------- 3 files changed, 116 insertions(+), 52 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 303103f044d..40671d03639 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5765,6 +5765,7 @@ dependencies = [ "serde_yaml 0.8.26", "sha2", "shellexpand", + "tempfile", "term_size", "termios", "thiserror", diff --git a/lib/wasi/Cargo.toml b/lib/wasi/Cargo.toml index 831620873dc..19a261b84b3 100644 --- a/lib/wasi/Cargo.toml +++ b/lib/wasi/Cargo.toml @@ -82,6 +82,7 @@ wasm-bindgen = "0.2.74" [dev-dependencies] wasmer = { path = "../api", version = "=3.2.0-alpha.1", default-features = false, features = ["wat", "js-serializable-module"] } tokio = { version = "1", features = [ "sync", "macros", "rt" ], default_features = false } +tempfile = "3.4.0" [target.'cfg(target_arch = "wasm32")'.dev-dependencies] wasm-bindgen-test = "0.3.0" diff --git a/lib/wasi/src/runners/wasi.rs b/lib/wasi/src/runners/wasi.rs index 63f1b2b1579..100efb78ae3 100644 --- a/lib/wasi/src/runners/wasi.rs +++ b/lib/wasi/src/runners/wasi.rs @@ -13,8 +13,8 @@ use crate::{ use crate::{WasiEnv, WasiEnvBuilder}; use anyhow::{Context, Error}; use serde::{Deserialize, Serialize}; +use virtual_fs::{FileSystem, PassthruFileSystem, RootFileSystemBuilder}; use wasmer::{Module, Store}; -use wasmer_vfs::{FileSystem, PassthruFileSystem, RootFileSystemBuilder}; use webc::metadata::{annotations::Wasi, Command}; #[derive(Debug, Serialize, Deserialize)] @@ -130,43 +130,28 @@ impl WasiRunner { container: &WapmContainer, command: &str, ) -> Result { - let root_fs = RootFileSystemBuilder::new().build(); - - let filesystem = container.container_fs(); - root_fs.union(&filesystem); - - if !self.mapped_dirs.is_empty() { - let fs_backing: Arc = - Arc::new(PassthruFileSystem::new(crate::default_fs_backing())); - - for MappedDirectory { host, guest } in self.mapped_dirs.iter() { - let guest = match guest.starts_with('/') { - true => PathBuf::from(guest), - false => Path::new("/").join(guest), - }; - tracing::debug!( - host=%host.display(), - guest=%guest.display(), - "mounting host directory", - ); - - root_fs - .mount(guest.clone(), &fs_backing, host.clone()) - .with_context(|| { - format!( - "Unable to mount \"{}\" to \"{}\"", - host.display(), - guest.display() - ) - })?; - } - } + let root_fs = unioned_filesystem(&self.mapped_dirs, container)?; - let builder = WasiEnv::builder(command) + let mut builder = WasiEnv::builder(command) .args(&self.args) .fs(Box::new(root_fs)) .preopen_dir("/")?; + if self.forward_host_env { + for (k, v) in std::env::vars() { + builder.add_env(k, v); + } + } + + for (k, v) in &self.env { + builder.add_env(k, v); + } + + if let Some(tasks) = &self.tasks { + let rt = PluggableRuntime::new(Arc::clone(tasks)); + builder.set_runtime(Arc::new(rt)); + } + Ok(builder) } } @@ -197,30 +182,107 @@ impl crate::runners::Runner for WasiRunner { let mut module = Module::new(&self.store, atom)?; module.set_name(&atom_name); - let mut builder = self.prepare_webc_env(container, &atom_name)?; + self.prepare_webc_env(container, &atom_name)?.run(module)?; - if self.forward_host_env { - for (k, v) in std::env::vars() { - builder.add_env(k, v); - } - } + Ok(()) + } +} - for (k, v) in &self.env { - builder.add_env(k, v); +/// Create a [`FileSystem`] which merges the WAPM container's volumes with any +/// directories that were mapped from the host. +fn unioned_filesystem( + mapped_dirs: &[MappedDirectory], + container: &WapmContainer, +) -> Result { + let root_fs = RootFileSystemBuilder::new().build(); + + let filesystem = container.container_fs(); + root_fs.union(&filesystem); + + if !mapped_dirs.is_empty() { + let fs_backing: Arc = + Arc::new(PassthruFileSystem::new(crate::default_fs_backing())); + + for MappedDirectory { host, guest } in mapped_dirs.iter() { + let guest = match guest.starts_with('/') { + true => PathBuf::from(guest), + false => Path::new("/").join(guest), + }; + tracing::debug!( + host=%host.display(), + guest=%guest.display(), + "mounting host directory", + ); + + root_fs + .mount(guest.clone(), &fs_backing, host.clone()) + .with_context(|| { + format!( + "Unable to mount \"{}\" to \"{}\"", + host.display(), + guest.display() + ) + })?; } + } - if let Some(tasks) = &self.tasks { - let rt = PluggableRuntime::new(Arc::clone(tasks)); - builder.set_runtime(Arc::new(rt)); - } + Ok(root_fs) +} - let res = builder.run(module); - match res { - Ok(()) => Ok(()), - Err(crate::WasiRuntimeError::Wasi(crate::WasiError::Exit(_))) => Ok(()), - Err(e) => Err(e), - }?; +#[cfg(test)] +mod tests { + use tempfile::TempDir; + use tokio::io::AsyncReadExt; - Ok(()) + use super::*; + + #[track_caller] + async fn read_file(fs: &dyn FileSystem, path: impl AsRef) -> String { + let mut f = fs.new_open_options().read(true).open(path).unwrap(); + let mut contents = String::new(); + f.read_to_string(&mut contents).await.unwrap(); + + contents + } + + #[track_caller] + fn read_dir(fs: &dyn FileSystem, path: impl AsRef) -> Vec { + fs.read_dir(path.as_ref()) + .unwrap() + .filter_map(|result| result.ok()) + .map(|entry| entry.path) + .collect() + } + + #[tokio::test] + async fn construct_the_unioned_fs() { + let temp = TempDir::new().unwrap(); + std::fs::write(temp.path().join("file.txt"), b"Hello, World!").unwrap(); + let webc: &[u8] = + include_bytes!("../../../../lib/c-api/examples/assets/python-0.1.0.wasmer"); + let container = WapmContainer::from_bytes(webc.into()).unwrap(); + let mapped_dirs = [MappedDirectory { + guest: "/path/to/".to_string(), + host: temp.path().to_path_buf(), + }]; + + let fs = unioned_filesystem(&mapped_dirs, &container).unwrap(); + + // Files that were mounted on the host + assert_eq!( + read_dir(&fs, "/path/to/"), + vec![PathBuf::from("/path/to/file.txt")] + ); + assert_eq!(read_file(&fs, "/path/to/file.txt").await, "Hello, World!"); + // Files from the Python WEBC file's volumes + assert_eq!( + read_dir(&fs, "lib/python3.6/collections/"), + vec![ + PathBuf::from("lib/python3.6/collections/__init__.py"), + PathBuf::from("lib/python3.6/collections/abc.py"), + ] + ); + let abc = read_file(&fs, "lib/python3.6/collections/abc.py").await; + assert_eq!(abc, "from _collections_abc import *"); } } From 27bf71e9febc3e4de0f2d591eeab6380fff9a389 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Fri, 10 Mar 2023 18:15:52 +0800 Subject: [PATCH 27/39] Moved MappedDirectory into the wasmer_wasi::runners module --- lib/cli/src/commands/run/wasi.rs | 2 +- lib/cli/src/commands/run2.rs | 2 +- lib/cli/src/utils.rs | 2 +- lib/wasi/src/runners/mod.rs | 8 ++++++++ lib/wasi/src/runners/wasi.rs | 2 +- lib/wasi/src/runners/wcgi/handler.rs | 2 +- lib/wasi/src/runners/wcgi/mod.rs | 8 -------- lib/wasi/src/runners/wcgi/runner.rs | 7 ++----- 8 files changed, 15 insertions(+), 18 deletions(-) diff --git a/lib/cli/src/commands/run/wasi.rs b/lib/cli/src/commands/run/wasi.rs index d14d78b972f..8f4d27b6b02 100644 --- a/lib/cli/src/commands/run/wasi.rs +++ b/lib/cli/src/commands/run/wasi.rs @@ -10,7 +10,7 @@ use wasmer::{AsStoreMut, Instance, Module, RuntimeError, Value}; use wasmer_wasix::{ default_fs_backing, get_wasi_versions, os::{tty_sys::SysTty, TtyBridge}, - runners::wcgi::MappedDirectory, + runners::MappedDirectory, runtime::task_manager::tokio::TokioTaskManager, types::__WASI_STDIN_FILENO, PluggableRuntime, WasiEnv, WasiEnvBuilder, WasiError, WasiFunctionEnv, WasiVersion, diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run2.rs index 26bbb6abc37..fb0cc463b36 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run2.rs @@ -25,7 +25,7 @@ use wasmer::{ use wasmer_cache::Cache; use wasmer_compiler::ArtifactBuild; use wasmer_registry::Package; -use wasmer_wasix::runners::{wcgi::MappedDirectory, Runner, WapmContainer}; +use wasmer_wasix::runners::{MappedDirectory, Runner, WapmContainer}; use webc::metadata::Manifest; use webc_v4::DirOrFile; diff --git a/lib/cli/src/utils.rs b/lib/cli/src/utils.rs index e446a8e6bbc..fc5fa9cc14f 100644 --- a/lib/cli/src/utils.rs +++ b/lib/cli/src/utils.rs @@ -2,7 +2,7 @@ use anyhow::{bail, Result}; use std::env; use std::path::PathBuf; -use wasmer_wasix::runners::wcgi::MappedDirectory; +use wasmer_wasix::runners::MappedDirectory; /// Whether or not Wasmer should print with color pub fn wasmer_should_print_color() -> bool { diff --git a/lib/wasi/src/runners/mod.rs b/lib/wasi/src/runners/mod.rs index d156753fe93..95206dd097e 100644 --- a/lib/wasi/src/runners/mod.rs +++ b/lib/wasi/src/runners/mod.rs @@ -12,3 +12,11 @@ pub use self::{ container::{Bindings, WapmContainer, WebcParseError, WitBindings}, runner::Runner, }; + +use std::path::PathBuf; + +#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub struct MappedDirectory { + pub host: PathBuf, + pub guest: String, +} diff --git a/lib/wasi/src/runners/wasi.rs b/lib/wasi/src/runners/wasi.rs index 100efb78ae3..54a808fc85c 100644 --- a/lib/wasi/src/runners/wasi.rs +++ b/lib/wasi/src/runners/wasi.rs @@ -7,7 +7,7 @@ use std::{ }; use crate::{ - runners::{wcgi::MappedDirectory, WapmContainer}, + runners::{MappedDirectory, WapmContainer}, PluggableRuntime, VirtualTaskManager, }; use crate::{WasiEnv, WasiEnvBuilder}; diff --git a/lib/wasi/src/runners/wcgi/handler.rs b/lib/wasi/src/runners/wcgi/handler.rs index 8ce0b8a323a..4b7ac0f2ece 100644 --- a/lib/wasi/src/runners/wcgi/handler.rs +++ b/lib/wasi/src/runners/wcgi/handler.rs @@ -23,7 +23,7 @@ use wcgi_host::CgiDialect; use crate::{ capabilities::Capabilities, http::HttpClientCapabilityV1, - runners::wcgi::{Callbacks, MappedDirectory}, + runners::{wcgi::Callbacks, MappedDirectory}, Pipe, PluggableRuntime, VirtualTaskManager, WasiEnv, }; diff --git a/lib/wasi/src/runners/wcgi/mod.rs b/lib/wasi/src/runners/wcgi/mod.rs index 96f838f899b..ddfe6d783a2 100644 --- a/lib/wasi/src/runners/wcgi/mod.rs +++ b/lib/wasi/src/runners/wcgi/mod.rs @@ -1,12 +1,4 @@ mod handler; mod runner; -use std::path::PathBuf; - pub use self::runner::{Callbacks, Config, WcgiRunner}; - -#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)] -pub struct MappedDirectory { - pub host: PathBuf, - pub guest: String, -} diff --git a/lib/wasi/src/runners/wcgi/runner.rs b/lib/wasi/src/runners/wcgi/runner.rs index 6d5c8f3b252..f9b2bd8c971 100644 --- a/lib/wasi/src/runners/wcgi/runner.rs +++ b/lib/wasi/src/runners/wcgi/runner.rs @@ -17,11 +17,8 @@ use webc::metadata::{ use crate::{ runners::{ - wcgi::{ - handler::{Handler, SharedState}, - MappedDirectory, - }, - WapmContainer, + wcgi::handler::{Handler, SharedState}, + MappedDirectory, WapmContainer, }, runtime::task_manager::tokio::TokioTaskManager, VirtualTaskManager, From 14f27b9f37b9a94a937b9e9b5d4af7d763aac7da Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Mon, 13 Mar 2023 09:43:33 +0800 Subject: [PATCH 28/39] Trying to use UnionFS --- lib/vfs/src/lib.rs | 56 +++++++++++++++++++++++++++++++ lib/wasi/src/runners/container.rs | 6 ++-- lib/wasi/src/runners/wasi.rs | 32 ++++++++++++++---- 3 files changed, 84 insertions(+), 10 deletions(-) diff --git a/lib/vfs/src/lib.rs b/lib/vfs/src/lib.rs index 28d43f6fb99..72b119ecd02 100644 --- a/lib/vfs/src/lib.rs +++ b/lib/vfs/src/lib.rs @@ -6,6 +6,7 @@ use std::any::Any; use std::ffi::OsString; use std::fmt; use std::io; +use std::ops::Deref; use std::path::{Path, PathBuf}; use std::pin::Pin; use std::task::Context; @@ -81,6 +82,27 @@ pub trait FileSystem: fmt::Debug + Send + Sync + 'static + Upcastable { fn remove_file(&self, path: &Path) -> Result<()>; fn new_open_options(&self) -> OpenOptions; + + /// Create a directory and all its parent directories. + fn create_dir_all(&self, path: &Path) -> Result<()> { + create_dir_all(self, path) + } +} + +fn create_dir_all(fs: &(impl FileSystem + ?Sized), path: &Path) -> Result<()> { + match fs.create_dir(path) { + Ok(_) | Err(FsError::AlreadyExists) => Ok(()), + Err(FsError::EntryNotFound) => { + // Note: paths don't normally have many segments, so it should be + // fine to use recursion here. This function should also be elegible + // for TCO. + match path.parent() { + Some(parent) => create_dir_all(fs, parent), + None => Err(FsError::EntryNotFound), + } + } + Err(e) => Err(e), + } } impl dyn FileSystem + 'static { @@ -94,6 +116,40 @@ impl dyn FileSystem + 'static { } } +impl FileSystem for D +where + D: Deref + std::fmt::Debug + Send + Sync + 'static, + F: FileSystem + ?Sized, +{ + fn read_dir(&self, path: &Path) -> Result { + (**self).read_dir(path) + } + + fn create_dir(&self, path: &Path) -> Result<()> { + (**self).create_dir(path) + } + + fn remove_dir(&self, path: &Path) -> Result<()> { + (**self).remove_dir(path) + } + + fn rename(&self, from: &Path, to: &Path) -> Result<()> { + (**self).rename(from, to) + } + + fn metadata(&self, path: &Path) -> Result { + (**self).metadata(path) + } + + fn remove_file(&self, path: &Path) -> Result<()> { + (**self).remove_file(path) + } + + fn new_open_options(&self) -> OpenOptions { + (**self).new_open_options() + } +} + pub trait FileOpener { fn open( &self, diff --git a/lib/wasi/src/runners/container.rs b/lib/wasi/src/runners/container.rs index 92ac1ec3bdd..bb0ea6c5ef8 100644 --- a/lib/wasi/src/runners/container.rs +++ b/lib/wasi/src/runners/container.rs @@ -111,10 +111,10 @@ impl WapmContainer { /// Get the entire container as a single filesystem and a list of suggested /// directories to preopen. - pub(crate) fn container_fs(&self) -> Arc { + pub(crate) fn container_fs(&self) -> Box { match &self.repr { - Repr::V1Mmap(mapped) => Arc::new(WebcFileSystem::init_all(Arc::clone(mapped))), - Repr::V1Owned(owned) => Arc::new(WebcFileSystem::init_all(Arc::clone(owned))), + Repr::V1Mmap(mapped) => Box::new(WebcFileSystem::init_all(Arc::clone(mapped))), + Repr::V1Owned(owned) => Box::new(WebcFileSystem::init_all(Arc::clone(owned))), } } } diff --git a/lib/wasi/src/runners/wasi.rs b/lib/wasi/src/runners/wasi.rs index 54a808fc85c..ccf66df6418 100644 --- a/lib/wasi/src/runners/wasi.rs +++ b/lib/wasi/src/runners/wasi.rs @@ -194,13 +194,25 @@ fn unioned_filesystem( mapped_dirs: &[MappedDirectory], container: &WapmContainer, ) -> Result { - let root_fs = RootFileSystemBuilder::new().build(); + let mut fs = wasmer_vfs::UnionFileSystem::new(); - let filesystem = container.container_fs(); - root_fs.union(&filesystem); + // First, mount the root filesystem so we get things like "/dev/" + fs.mount( + "base", + "/", + false, + Box::new(RootFileSystemBuilder::new().build()), + None, + ); + // We also want the container's volumes + fs.mount("webc", "/", false, container.container_fs(), None); + + // Now, let's merge in the host volumes. if !mapped_dirs.is_empty() { - let fs_backing: Arc = + let mapped_fs = wasmer_vfs::TmpFileSystem::new(); + + let host_fs: Arc = Arc::new(PassthruFileSystem::new(crate::default_fs_backing())); for MappedDirectory { host, guest } in mapped_dirs.iter() { @@ -214,8 +226,12 @@ fn unioned_filesystem( "mounting host directory", ); - root_fs - .mount(guest.clone(), &fs_backing, host.clone()) + if let Some(parent) = guest.parent() { + mapped_fs.create_dir_all(parent.as_ref())?; + } + + mapped_fs + .mount(guest.clone(), &host_fs, host.clone()) .with_context(|| { format!( "Unable to mount \"{}\" to \"{}\"", @@ -224,9 +240,11 @@ fn unioned_filesystem( ) })?; } + + fs.mount("host", "/", true, Box::new(mapped_fs), None); } - Ok(root_fs) + Ok(fs) } #[cfg(test)] From 2ba16b317e7d0777a684ecfd4f83d673e42ab11f Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Thu, 16 Mar 2023 23:36:03 +0800 Subject: [PATCH 29/39] Updated to use the OverlayFileSystem --- lib/vfs/src/lib.rs | 20 ----------- lib/wasi/src/runners/wasi.rs | 68 +++++++++++++++++++++--------------- 2 files changed, 40 insertions(+), 48 deletions(-) diff --git a/lib/vfs/src/lib.rs b/lib/vfs/src/lib.rs index 72b119ecd02..24bce023bce 100644 --- a/lib/vfs/src/lib.rs +++ b/lib/vfs/src/lib.rs @@ -82,28 +82,8 @@ pub trait FileSystem: fmt::Debug + Send + Sync + 'static + Upcastable { fn remove_file(&self, path: &Path) -> Result<()>; fn new_open_options(&self) -> OpenOptions; - - /// Create a directory and all its parent directories. - fn create_dir_all(&self, path: &Path) -> Result<()> { - create_dir_all(self, path) - } } -fn create_dir_all(fs: &(impl FileSystem + ?Sized), path: &Path) -> Result<()> { - match fs.create_dir(path) { - Ok(_) | Err(FsError::AlreadyExists) => Ok(()), - Err(FsError::EntryNotFound) => { - // Note: paths don't normally have many segments, so it should be - // fine to use recursion here. This function should also be elegible - // for TCO. - match path.parent() { - Some(parent) => create_dir_all(fs, parent), - None => Err(FsError::EntryNotFound), - } - } - Err(e) => Err(e), - } -} impl dyn FileSystem + 'static { #[inline] diff --git a/lib/wasi/src/runners/wasi.rs b/lib/wasi/src/runners/wasi.rs index ccf66df6418..cf1a8da2247 100644 --- a/lib/wasi/src/runners/wasi.rs +++ b/lib/wasi/src/runners/wasi.rs @@ -13,7 +13,9 @@ use crate::{ use crate::{WasiEnv, WasiEnvBuilder}; use anyhow::{Context, Error}; use serde::{Deserialize, Serialize}; -use virtual_fs::{FileSystem, PassthruFileSystem, RootFileSystemBuilder}; +use virtual_fs::{ + FileSystem, FsError, OverlayFileSystem, PassthruFileSystem, RootFileSystemBuilder, +}; use wasmer::{Module, Store}; use webc::metadata::{annotations::Wasi, Command}; @@ -194,24 +196,11 @@ fn unioned_filesystem( mapped_dirs: &[MappedDirectory], container: &WapmContainer, ) -> Result { - let mut fs = wasmer_vfs::UnionFileSystem::new(); - - // First, mount the root filesystem so we get things like "/dev/" - fs.mount( - "base", - "/", - false, - Box::new(RootFileSystemBuilder::new().build()), - None, - ); - - // We also want the container's volumes - fs.mount("webc", "/", false, container.container_fs(), None); + // We start with the root filesystem so we get things like "/dev/" + let primary = RootFileSystemBuilder::new().build(); // Now, let's merge in the host volumes. if !mapped_dirs.is_empty() { - let mapped_fs = wasmer_vfs::TmpFileSystem::new(); - let host_fs: Arc = Arc::new(PassthruFileSystem::new(crate::default_fs_backing())); @@ -227,10 +216,10 @@ fn unioned_filesystem( ); if let Some(parent) = guest.parent() { - mapped_fs.create_dir_all(parent.as_ref())?; + create_dir_all(&primary, parent.as_ref())?; } - mapped_fs + primary .mount(guest.clone(), &host_fs, host.clone()) .with_context(|| { format!( @@ -240,17 +229,35 @@ fn unioned_filesystem( ) })?; } + } + + // Once we've set up the primary filesystem, make sure it is overlayed with + // the WEBC container's files + Ok(OverlayFileSystem::new(primary, [container.container_fs()])) +} + +fn create_dir_all(fs: &(impl FileSystem + ?Sized), path: &Path) -> Result<(), Error> { + match fs.metadata(path) { + Ok(meta) if meta.is_dir() => return Ok(()), + Ok(_) => anyhow::bail!(FsError::BaseNotDirectory), + Err(FsError::EntryNotFound) => {} + Err(e) => anyhow::bail!(e), + } - fs.mount("host", "/", true, Box::new(mapped_fs), None); + if let Some(parent) = path.parent() { + create_dir_all(fs, parent)?; } - Ok(fs) + fs.create_dir(path)?; + + Ok(()) } #[cfg(test)] mod tests { use tempfile::TempDir; use tokio::io::AsyncReadExt; + use wasmer_vfs::host_fs; use super::*; @@ -287,20 +294,25 @@ mod tests { let fs = unioned_filesystem(&mapped_dirs, &container).unwrap(); // Files that were mounted on the host - assert_eq!( - read_dir(&fs, "/path/to/"), - vec![PathBuf::from("/path/to/file.txt")] - ); + let path_contents = read_dir(&fs, "/path/to/"); + // FIXME: We can't use the commented-out version because of a bug in + // memfs. For more, see https://github.com/wasmerio/wasmer/issues/3685 + assert_eq!(path_contents.len(), 1); + assert!(path_contents[0].ends_with("file.txt")); + // assert_eq!( + // read_dir(&fs, "/path/to/"), + // vec![PathBuf::from("/path/to/file.txt")] + // ); assert_eq!(read_file(&fs, "/path/to/file.txt").await, "Hello, World!"); // Files from the Python WEBC file's volumes assert_eq!( - read_dir(&fs, "lib/python3.6/collections/"), + read_dir(&fs, "/lib/python3.6/collections/"), vec![ - PathBuf::from("lib/python3.6/collections/__init__.py"), - PathBuf::from("lib/python3.6/collections/abc.py"), + PathBuf::from("/lib/python3.6/collections/__init__.py"), + PathBuf::from("/lib/python3.6/collections/abc.py"), ] ); - let abc = read_file(&fs, "lib/python3.6/collections/abc.py").await; + let abc = read_file(&fs, "/lib/python3.6/collections/abc.py").await; assert_eq!(abc, "from _collections_abc import *"); } } From e2a933c83b46a6f2ad02e4c8956ed7c28481cfc7 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Thu, 16 Mar 2023 23:47:54 +0800 Subject: [PATCH 30/39] Reading from a WebCFile never advanced its cursor --- lib/vfs/src/webc_fs.rs | 51 +++++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/lib/vfs/src/webc_fs.rs b/lib/vfs/src/webc_fs.rs index 11db43c7eff..d845a0375d1 100644 --- a/lib/vfs/src/webc_fs.rs +++ b/lib/vfs/src/webc_fs.rs @@ -3,7 +3,7 @@ use crate::{ FileOpener, FileSystem, FsError, Metadata, OpenOptions, OpenOptionsConfig, ReadDir, VirtualFile, }; use anyhow::anyhow; -use std::convert::TryInto; +use std::convert::{TryFrom, TryInto}; use std::io::{self, Error as IoError, ErrorKind as IoErrorKind, SeekFrom}; use std::ops::Deref; use std::path::Path; @@ -177,7 +177,7 @@ where T: Deref>, { fn poll_read( - self: Pin<&mut Self>, + mut self: Pin<&mut Self>, _cx: &mut Context<'_>, buf: &mut tokio::io::ReadBuf<'_>, ) -> Poll> { @@ -194,16 +194,15 @@ where .get_file_bytes(&self.entry) .map_err(|e| IoError::new(IoErrorKind::NotFound, e))?; - let cursor: usize = self.cursor.try_into().unwrap_or(u32::MAX as usize); - let _start = cursor.min(bytes.len()); - let bytes = &bytes[cursor..]; + let start: usize = self.cursor.try_into().unwrap(); + let remaining = &bytes[start..]; + let bytes_read = remaining.len().min(buf.remaining()); + let end = start + bytes_read; + let bytes = &bytes[start..end]; + + buf.put_slice(bytes); + self.cursor += u64::try_from(bytes_read).unwrap(); - if bytes.len() > buf.remaining() { - let remaining = buf.remaining(); - buf.put_slice(&bytes[..remaining]); - } else { - buf.put_slice(bytes); - } Poll::Ready(Ok(())) } } @@ -446,3 +445,33 @@ fn translate_file_type(f: FsEntryType) -> crate::FileType { fifo: false, } } + +#[cfg(test)] +mod tests { + use tokio::io::AsyncReadExt; + use webc::v1::{ParseOptions, WebCOwned}; + + use super::*; + + #[tokio::test] + async fn read_a_file_from_the_webc_fs() { + let webc: &[u8] = include_bytes!("../../c-api/examples/assets/python-0.1.0.wasmer"); + let options = ParseOptions::default(); + let webc = WebCOwned::parse(webc.to_vec(), &options).unwrap(); + + let fs = WebcFileSystem::init_all(Arc::new(webc)); + + let mut f = fs + .new_open_options() + .read(true) + .open(Path::new("/lib/python3.6/collections/abc.py")) + .unwrap(); + + let mut abc_py = String::new(); + f.read_to_string(&mut abc_py).await.unwrap(); + assert_eq!( + abc_py, + "from _collections_abc import *\nfrom _collections_abc import __all__\n" + ); + } +} From 702972fb10fc3f45a5203f9bd860a04342314e64 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Fri, 17 Mar 2023 01:35:14 +0800 Subject: [PATCH 31/39] Reuse unioned_filesystem() for WCGI --- lib/cli/src/commands/run.rs | 6 +---- lib/vfs/src/webc_fs.rs | 3 +-- lib/wasi/src/runners/wasi.rs | 29 ++++++++++++++++++---- lib/wasi/src/runners/wcgi/handler.rs | 36 ++++------------------------ lib/wasi/src/runners/wcgi/runner.rs | 5 ++-- tests/integration/cli/tests/run2.rs | 7 ++++-- 6 files changed, 38 insertions(+), 48 deletions(-) diff --git a/lib/cli/src/commands/run.rs b/lib/cli/src/commands/run.rs index f16dd7e71b8..10c9fb9cfb7 100644 --- a/lib/cli/src/commands/run.rs +++ b/lib/cli/src/commands/run.rs @@ -409,7 +409,7 @@ impl RunWithPathBuf { .addr(self.wcgi.addr) .envs(self.wasi.env_vars.clone()) .map_directories(self.wasi.mapped_dirs.clone()); - if self.wcgi.forward_host_env { + if self.wasi.forward_host_env { runner.config().forward_host_env(); } if runner.can_run_command(id, command).unwrap_or(false) { @@ -706,16 +706,12 @@ pub(crate) struct WcgiOptions { /// The address to serve on. #[clap(long, short, env, default_value_t = ([127, 0, 0, 1], 8000).into())] pub(crate) addr: SocketAddr, - /// Forward all host env variables to the wcgi task. - #[clap(long)] - pub(crate) forward_host_env: bool, } impl Default for WcgiOptions { fn default() -> Self { Self { addr: ([127, 0, 0, 1], 8000).into(), - forward_host_env: false, } } } diff --git a/lib/vfs/src/webc_fs.rs b/lib/vfs/src/webc_fs.rs index d845a0375d1..0bb1970cc81 100644 --- a/lib/vfs/src/webc_fs.rs +++ b/lib/vfs/src/webc_fs.rs @@ -197,8 +197,7 @@ where let start: usize = self.cursor.try_into().unwrap(); let remaining = &bytes[start..]; let bytes_read = remaining.len().min(buf.remaining()); - let end = start + bytes_read; - let bytes = &bytes[start..end]; + let bytes = &remaining[..bytes_read]; buf.put_slice(bytes); self.cursor += u64::try_from(bytes_read).unwrap(); diff --git a/lib/wasi/src/runners/wasi.rs b/lib/wasi/src/runners/wasi.rs index cf1a8da2247..f8dbab03583 100644 --- a/lib/wasi/src/runners/wasi.rs +++ b/lib/wasi/src/runners/wasi.rs @@ -132,13 +132,17 @@ impl WasiRunner { container: &WapmContainer, command: &str, ) -> Result { - let root_fs = unioned_filesystem(&self.mapped_dirs, container)?; + let fs = unioned_filesystem(&self.mapped_dirs, container)?; + let fs = container.container_fs(); let mut builder = WasiEnv::builder(command) .args(&self.args) - .fs(Box::new(root_fs)) .preopen_dir("/")?; + preopen(&fs, "/".as_ref(), &mut builder)?; + + builder.set_fs(Box::new(fs)); + if self.forward_host_env { for (k, v) in std::env::vars() { builder.add_env(k, v); @@ -192,7 +196,7 @@ impl crate::runners::Runner for WasiRunner { /// Create a [`FileSystem`] which merges the WAPM container's volumes with any /// directories that were mapped from the host. -fn unioned_filesystem( +pub(crate) fn unioned_filesystem( mapped_dirs: &[MappedDirectory], container: &WapmContainer, ) -> Result { @@ -236,6 +240,19 @@ fn unioned_filesystem( Ok(OverlayFileSystem::new(primary, [container.container_fs()])) } +fn preopen(fs: &dyn FileSystem, path: &Path, builder: &mut WasiEnvBuilder) -> Result<(), Error> { + for result in fs.read_dir(path)? { + let entry = result?; + + if entry.file_type()?.is_dir() { + builder.add_preopen_dir(&entry.path)?; + preopen(fs, &entry.path, builder)?; + } + } + + Ok(()) +} + fn create_dir_all(fs: &(impl FileSystem + ?Sized), path: &Path) -> Result<(), Error> { match fs.metadata(path) { Ok(meta) if meta.is_dir() => return Ok(()), @@ -257,7 +274,6 @@ fn create_dir_all(fs: &(impl FileSystem + ?Sized), path: &Path) -> Result<(), Er mod tests { use tempfile::TempDir; use tokio::io::AsyncReadExt; - use wasmer_vfs::host_fs; use super::*; @@ -313,6 +329,9 @@ mod tests { ] ); let abc = read_file(&fs, "/lib/python3.6/collections/abc.py").await; - assert_eq!(abc, "from _collections_abc import *"); + assert_eq!( + abc, + "from _collections_abc import *\nfrom _collections_abc import __all__\n" + ); } } diff --git a/lib/wasi/src/runners/wcgi/handler.rs b/lib/wasi/src/runners/wcgi/handler.rs index 4b7ac0f2ece..278d4302ace 100644 --- a/lib/wasi/src/runners/wcgi/handler.rs +++ b/lib/wasi/src/runners/wcgi/handler.rs @@ -23,7 +23,7 @@ use wcgi_host::CgiDialect; use crate::{ capabilities::Capabilities, http::HttpClientCapabilityV1, - runners::{wcgi::Callbacks, MappedDirectory}, + runners::{wcgi::Callbacks, MappedDirectory, WapmContainer}, Pipe, PluggableRuntime, VirtualTaskManager, WasiEnv, }; @@ -134,37 +134,8 @@ impl Handler { Ok(response) } - fn fs(&self) -> Result { - let root_fs = RootFileSystemBuilder::new().build(); - - if !self.mapped_dirs.is_empty() { - let fs_backing: Arc = - Arc::new(PassthruFileSystem::new(crate::default_fs_backing())); - - for MappedDirectory { host, guest } in self.mapped_dirs.iter() { - let guest = match guest.starts_with('/') { - true => PathBuf::from(guest), - false => Path::new("/").join(guest), - }; - tracing::debug!( - host=%host.display(), - guest=%guest.display(), - "mounting host directory", - ); - - root_fs - .mount(guest.clone(), &fs_backing, host.clone()) - .with_context(|| { - format!( - "Unable to mount \"{}\" to \"{}\"", - host.display(), - guest.display() - ) - }) - .unwrap(); - } - } - Ok(root_fs) + fn fs(&self) -> Result { + crate::runners::wasi::unioned_filesystem(&self.mapped_dirs, &self.container) } } @@ -255,6 +226,7 @@ pub(crate) struct SharedState { pub(crate) env: HashMap, pub(crate) args: Vec, pub(crate) mapped_dirs: Vec, + pub(crate) container: WapmContainer, pub(crate) module: Module, pub(crate) dialect: CgiDialect, pub(crate) task_manager: Arc, diff --git a/lib/wasi/src/runners/wcgi/runner.rs b/lib/wasi/src/runners/wcgi/runner.rs index f9b2bd8c971..ad280da054d 100644 --- a/lib/wasi/src/runners/wcgi/runner.rs +++ b/lib/wasi/src/runners/wcgi/runner.rs @@ -148,6 +148,7 @@ impl WcgiRunner { .clone() .unwrap_or_else(|| Arc::new(TokioTaskManager::default())), module, + container: ctx.container.clone(), dialect, callbacks: Arc::clone(&self.config.callbacks), }; @@ -225,8 +226,8 @@ impl RunnerContext<'_> { &self.store } - fn volume(&self, _name: &str) -> Option> { - todo!("Implement a read-only filesystem backed by a volume"); + fn container_fs(&self) -> Box { + self.container.container_fs() } fn get_atom(&self, name: &str) -> Option<&[u8]> { diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index f3bd8b80815..efdfe0e219b 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -15,6 +15,7 @@ use tempfile::TempDir; use wasmer_integration_tests_cli::get_wasmer_path; const RUST_LOG: &str = "info,wasmer_wasi::runners=debug"; +// const RUST_LOG: &str = "info,wasmer_wasi=trace"; mod webc_on_disk { use super::*; @@ -81,13 +82,15 @@ mod webc_on_disk { let assert = Command::new(get_wasmer_path()) .arg("run2") .arg(fixtures::python()) - .arg("--env") - .arg("SOME_VAR=Hello, World!") + .arg("--env=SOME_VAR=Hello, World!") .arg("--") .arg("-c") .arg("import os; print(os.environ['SOME_VAR'])") + .env("RUST_LOG", RUST_LOG) .assert(); + panic!("{}", String::from_utf8_lossy(&assert.get_output().stderr)); + assert.success().stdout(contains("Hello, World!")); } From 9171c596d543e711f06dcba7567d8973ef4805ab Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Fri, 17 Mar 2023 05:13:35 +0800 Subject: [PATCH 32/39] Use external knowledge when preopening dirs instead of traversing the fs --- lib/wasi/src/runners/container.rs | 14 +++++++--- lib/wasi/src/runners/wasi.rs | 38 +++++++++++++--------------- lib/wasi/src/runners/wcgi/handler.rs | 14 +++++----- lib/wasi/src/runners/wcgi/runner.rs | 5 ---- 4 files changed, 36 insertions(+), 35 deletions(-) diff --git a/lib/wasi/src/runners/container.rs b/lib/wasi/src/runners/container.rs index bb0ea6c5ef8..810f5b6c0ca 100644 --- a/lib/wasi/src/runners/container.rs +++ b/lib/wasi/src/runners/container.rs @@ -111,10 +111,18 @@ impl WapmContainer { /// Get the entire container as a single filesystem and a list of suggested /// directories to preopen. - pub(crate) fn container_fs(&self) -> Box { + pub(crate) fn container_fs(&self) -> (Box, Vec) { match &self.repr { - Repr::V1Mmap(mapped) => Box::new(WebcFileSystem::init_all(Arc::clone(mapped))), - Repr::V1Owned(owned) => Box::new(WebcFileSystem::init_all(Arc::clone(owned))), + Repr::V1Mmap(mapped) => { + let fs = WebcFileSystem::init_all(Arc::clone(mapped)); + let top_level_dirs = fs.top_level_dirs().clone(); + (Box::new(fs), top_level_dirs) + } + Repr::V1Owned(owned) => { + let fs = WebcFileSystem::init_all(Arc::clone(owned)); + let top_level_dirs = fs.top_level_dirs().clone(); + (Box::new(fs), top_level_dirs) + } } } } diff --git a/lib/wasi/src/runners/wasi.rs b/lib/wasi/src/runners/wasi.rs index f8dbab03583..98c16903598 100644 --- a/lib/wasi/src/runners/wasi.rs +++ b/lib/wasi/src/runners/wasi.rs @@ -132,14 +132,13 @@ impl WasiRunner { container: &WapmContainer, command: &str, ) -> Result { - let fs = unioned_filesystem(&self.mapped_dirs, container)?; - let fs = container.container_fs(); + let (fs, preopen_dirs) = unioned_filesystem(&self.mapped_dirs, container)?; - let mut builder = WasiEnv::builder(command) - .args(&self.args) - .preopen_dir("/")?; + let mut builder = WasiEnv::builder(command).args(&self.args); - preopen(&fs, "/".as_ref(), &mut builder)?; + for dir in preopen_dirs { + builder.add_preopen_dir(dir)?; + } builder.set_fs(Box::new(fs)); @@ -199,10 +198,12 @@ impl crate::runners::Runner for WasiRunner { pub(crate) fn unioned_filesystem( mapped_dirs: &[MappedDirectory], container: &WapmContainer, -) -> Result { +) -> Result<(impl FileSystem, Vec), Error> { // We start with the root filesystem so we get things like "/dev/" let primary = RootFileSystemBuilder::new().build(); + let mut preopen_dirs = Vec::new(); + // Now, let's merge in the host volumes. if !mapped_dirs.is_empty() { let host_fs: Arc = @@ -232,25 +233,20 @@ pub(crate) fn unioned_filesystem( guest.display() ) })?; + + preopen_dirs.push(guest); } } - // Once we've set up the primary filesystem, make sure it is overlayed with - // the WEBC container's files - Ok(OverlayFileSystem::new(primary, [container.container_fs()])) -} + let (container_fs, top_level_dirs) = container.container_fs(); -fn preopen(fs: &dyn FileSystem, path: &Path, builder: &mut WasiEnvBuilder) -> Result<(), Error> { - for result in fs.read_dir(path)? { - let entry = result?; + preopen_dirs.extend(top_level_dirs.into_iter().map(|p| Path::new("/").join(p))); - if entry.file_type()?.is_dir() { - builder.add_preopen_dir(&entry.path)?; - preopen(fs, &entry.path, builder)?; - } - } + // Once we've set up the primary filesystem, make sure it is overlayed with + // the WEBC container's files + let fs = OverlayFileSystem::new(primary, [container_fs]); - Ok(()) + Ok((fs, preopen_dirs)) } fn create_dir_all(fs: &(impl FileSystem + ?Sized), path: &Path) -> Result<(), Error> { @@ -307,7 +303,7 @@ mod tests { host: temp.path().to_path_buf(), }]; - let fs = unioned_filesystem(&mapped_dirs, &container).unwrap(); + let (fs, _) = unioned_filesystem(&mapped_dirs, &container).unwrap(); // Files that were mounted on the host let path_contents = read_dir(&fs, "/path/to/"); diff --git a/lib/wasi/src/runners/wcgi/handler.rs b/lib/wasi/src/runners/wcgi/handler.rs index 278d4302ace..6f592f3f392 100644 --- a/lib/wasi/src/runners/wcgi/handler.rs +++ b/lib/wasi/src/runners/wcgi/handler.rs @@ -7,7 +7,7 @@ use std::{ task::Poll, }; -use anyhow::{Context, Error}; +use anyhow::Error; use futures::{Future, FutureExt, StreamExt, TryFutureExt}; use http::{Request, Response}; use hyper::{service::Service, Body}; @@ -16,7 +16,7 @@ use tokio::{ runtime::Handle, }; use tracing::Instrument; -use virtual_fs::{FileSystem, PassthruFileSystem, RootFileSystemBuilder, TmpFileSystem}; +use virtual_fs::FileSystem; use wasmer::Module; use wcgi_host::CgiDialect; @@ -54,6 +54,8 @@ impl Handler { self.dialect .prepare_environment_variables(parts, &mut request_specific_env); + let (fs, preopen_dirs) = self.fs()?; + let rt = PluggableRuntime::new(Arc::clone(&self.task_manager)); let mut builder = builder .envs(self.env.iter()) @@ -68,11 +70,11 @@ impl Handler { threading: Default::default(), }) .runtime(Arc::new(rt)) - .fs(Box::new(self.fs()?)) + .fs(Box::new(fs)) .preopen_dir(Path::new("/"))?; - for dir in &self.mapped_dirs { - builder.add_preopen_dir(&dir.guest)?; + for dir in preopen_dirs { + builder.add_preopen_dir(dir)?; } let module = self.module.clone(); @@ -134,7 +136,7 @@ impl Handler { Ok(response) } - fn fs(&self) -> Result { + fn fs(&self) -> Result<(impl FileSystem, Vec), Error> { crate::runners::wasi::unioned_filesystem(&self.mapped_dirs, &self.container) } } diff --git a/lib/wasi/src/runners/wcgi/runner.rs b/lib/wasi/src/runners/wcgi/runner.rs index ad280da054d..ed6dd3bfde8 100644 --- a/lib/wasi/src/runners/wcgi/runner.rs +++ b/lib/wasi/src/runners/wcgi/runner.rs @@ -7,7 +7,6 @@ use hyper::Body; use tower::{make::Shared, ServiceBuilder}; use tower_http::{catch_panic::CatchPanicLayer, cors::CorsLayer, trace::TraceLayer}; use tracing::Span; -use virtual_fs::FileSystem; use wasmer::{Engine, Module, Store}; use wcgi_host::CgiDialect; use webc::metadata::{ @@ -226,10 +225,6 @@ impl RunnerContext<'_> { &self.store } - fn container_fs(&self) -> Box { - self.container.container_fs() - } - fn get_atom(&self, name: &str) -> Option<&[u8]> { self.container.get_atom(name) } From ab12f1490e2e109ec1ececd1ce77dab5191d337c Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Fri, 17 Mar 2023 23:23:24 +0800 Subject: [PATCH 33/39] Ripped out the union fs stuff The WasiRunner's filesystem now only has access to volumes from its container. The WcgiRunner's filesystem now only has access to mapped directories. --- lib/wasi/src/runners/wasi.rs | 150 +-------------------------- lib/wasi/src/runners/wcgi/handler.rs | 67 ++++++++++-- tests/integration/cli/tests/run2.rs | 3 +- 3 files changed, 61 insertions(+), 159 deletions(-) diff --git a/lib/wasi/src/runners/wasi.rs b/lib/wasi/src/runners/wasi.rs index 98c16903598..d17b72382ac 100644 --- a/lib/wasi/src/runners/wasi.rs +++ b/lib/wasi/src/runners/wasi.rs @@ -1,10 +1,6 @@ //! WebC container support for running WASI modules -use std::{ - collections::HashMap, - path::{Path, PathBuf}, - sync::Arc, -}; +use std::{collections::HashMap, sync::Arc}; use crate::{ runners::{MappedDirectory, WapmContainer}, @@ -13,9 +9,6 @@ use crate::{ use crate::{WasiEnv, WasiEnvBuilder}; use anyhow::{Context, Error}; use serde::{Deserialize, Serialize}; -use virtual_fs::{ - FileSystem, FsError, OverlayFileSystem, PassthruFileSystem, RootFileSystemBuilder, -}; use wasmer::{Module, Store}; use webc::metadata::{annotations::Wasi, Command}; @@ -132,7 +125,7 @@ impl WasiRunner { container: &WapmContainer, command: &str, ) -> Result { - let (fs, preopen_dirs) = unioned_filesystem(&self.mapped_dirs, container)?; + let (fs, preopen_dirs) = container.container_fs(); let mut builder = WasiEnv::builder(command).args(&self.args); @@ -192,142 +185,3 @@ impl crate::runners::Runner for WasiRunner { Ok(()) } } - -/// Create a [`FileSystem`] which merges the WAPM container's volumes with any -/// directories that were mapped from the host. -pub(crate) fn unioned_filesystem( - mapped_dirs: &[MappedDirectory], - container: &WapmContainer, -) -> Result<(impl FileSystem, Vec), Error> { - // We start with the root filesystem so we get things like "/dev/" - let primary = RootFileSystemBuilder::new().build(); - - let mut preopen_dirs = Vec::new(); - - // Now, let's merge in the host volumes. - if !mapped_dirs.is_empty() { - let host_fs: Arc = - Arc::new(PassthruFileSystem::new(crate::default_fs_backing())); - - for MappedDirectory { host, guest } in mapped_dirs.iter() { - let guest = match guest.starts_with('/') { - true => PathBuf::from(guest), - false => Path::new("/").join(guest), - }; - tracing::debug!( - host=%host.display(), - guest=%guest.display(), - "mounting host directory", - ); - - if let Some(parent) = guest.parent() { - create_dir_all(&primary, parent.as_ref())?; - } - - primary - .mount(guest.clone(), &host_fs, host.clone()) - .with_context(|| { - format!( - "Unable to mount \"{}\" to \"{}\"", - host.display(), - guest.display() - ) - })?; - - preopen_dirs.push(guest); - } - } - - let (container_fs, top_level_dirs) = container.container_fs(); - - preopen_dirs.extend(top_level_dirs.into_iter().map(|p| Path::new("/").join(p))); - - // Once we've set up the primary filesystem, make sure it is overlayed with - // the WEBC container's files - let fs = OverlayFileSystem::new(primary, [container_fs]); - - Ok((fs, preopen_dirs)) -} - -fn create_dir_all(fs: &(impl FileSystem + ?Sized), path: &Path) -> Result<(), Error> { - match fs.metadata(path) { - Ok(meta) if meta.is_dir() => return Ok(()), - Ok(_) => anyhow::bail!(FsError::BaseNotDirectory), - Err(FsError::EntryNotFound) => {} - Err(e) => anyhow::bail!(e), - } - - if let Some(parent) = path.parent() { - create_dir_all(fs, parent)?; - } - - fs.create_dir(path)?; - - Ok(()) -} - -#[cfg(test)] -mod tests { - use tempfile::TempDir; - use tokio::io::AsyncReadExt; - - use super::*; - - #[track_caller] - async fn read_file(fs: &dyn FileSystem, path: impl AsRef) -> String { - let mut f = fs.new_open_options().read(true).open(path).unwrap(); - let mut contents = String::new(); - f.read_to_string(&mut contents).await.unwrap(); - - contents - } - - #[track_caller] - fn read_dir(fs: &dyn FileSystem, path: impl AsRef) -> Vec { - fs.read_dir(path.as_ref()) - .unwrap() - .filter_map(|result| result.ok()) - .map(|entry| entry.path) - .collect() - } - - #[tokio::test] - async fn construct_the_unioned_fs() { - let temp = TempDir::new().unwrap(); - std::fs::write(temp.path().join("file.txt"), b"Hello, World!").unwrap(); - let webc: &[u8] = - include_bytes!("../../../../lib/c-api/examples/assets/python-0.1.0.wasmer"); - let container = WapmContainer::from_bytes(webc.into()).unwrap(); - let mapped_dirs = [MappedDirectory { - guest: "/path/to/".to_string(), - host: temp.path().to_path_buf(), - }]; - - let (fs, _) = unioned_filesystem(&mapped_dirs, &container).unwrap(); - - // Files that were mounted on the host - let path_contents = read_dir(&fs, "/path/to/"); - // FIXME: We can't use the commented-out version because of a bug in - // memfs. For more, see https://github.com/wasmerio/wasmer/issues/3685 - assert_eq!(path_contents.len(), 1); - assert!(path_contents[0].ends_with("file.txt")); - // assert_eq!( - // read_dir(&fs, "/path/to/"), - // vec![PathBuf::from("/path/to/file.txt")] - // ); - assert_eq!(read_file(&fs, "/path/to/file.txt").await, "Hello, World!"); - // Files from the Python WEBC file's volumes - assert_eq!( - read_dir(&fs, "/lib/python3.6/collections/"), - vec![ - PathBuf::from("/lib/python3.6/collections/__init__.py"), - PathBuf::from("/lib/python3.6/collections/abc.py"), - ] - ); - let abc = read_file(&fs, "/lib/python3.6/collections/abc.py").await; - assert_eq!( - abc, - "from _collections_abc import *\nfrom _collections_abc import __all__\n" - ); - } -} diff --git a/lib/wasi/src/runners/wcgi/handler.rs b/lib/wasi/src/runners/wcgi/handler.rs index 6f592f3f392..565f3be8b28 100644 --- a/lib/wasi/src/runners/wcgi/handler.rs +++ b/lib/wasi/src/runners/wcgi/handler.rs @@ -7,7 +7,7 @@ use std::{ task::Poll, }; -use anyhow::Error; +use anyhow::{Context, Error}; use futures::{Future, FutureExt, StreamExt, TryFutureExt}; use http::{Request, Response}; use hyper::{service::Service, Body}; @@ -16,7 +16,7 @@ use tokio::{ runtime::Handle, }; use tracing::Instrument; -use virtual_fs::FileSystem; +use virtual_fs::{FileSystem, PassthruFileSystem, RootFileSystemBuilder, TmpFileSystem}; use wasmer::Module; use wcgi_host::CgiDialect; @@ -54,8 +54,6 @@ impl Handler { self.dialect .prepare_environment_variables(parts, &mut request_specific_env); - let (fs, preopen_dirs) = self.fs()?; - let rt = PluggableRuntime::new(Arc::clone(&self.task_manager)); let mut builder = builder .envs(self.env.iter()) @@ -70,11 +68,13 @@ impl Handler { threading: Default::default(), }) .runtime(Arc::new(rt)) - .fs(Box::new(fs)) + .fs(Box::new(self.fs()?)) .preopen_dir(Path::new("/"))?; - for dir in preopen_dirs { - builder.add_preopen_dir(dir)?; + for mapping in &self.mapped_dirs { + builder + .add_preopen_dir(&mapping.guest) + .with_context(|| format!("Unable to preopen \"{}\"", mapping.guest))?; } let module = self.module.clone(); @@ -136,8 +136,43 @@ impl Handler { Ok(response) } - fn fs(&self) -> Result<(impl FileSystem, Vec), Error> { - crate::runners::wasi::unioned_filesystem(&self.mapped_dirs, &self.container) + fn fs(&self) -> Result { + let root_fs = RootFileSystemBuilder::new().build(); + + if !self.mapped_dirs.is_empty() { + let fs_backing: Arc = + Arc::new(PassthruFileSystem::new(crate::default_fs_backing())); + + for MappedDirectory { host, guest } in self.mapped_dirs.iter() { + let guest = match guest.starts_with('/') { + true => PathBuf::from(guest), + false => Path::new("/").join(guest), + }; + tracing::debug!( + host=%host.display(), + guest=%guest.display(), + "mounting host directory", + ); + + if let Some(parent) = guest.parent() { + create_dir_all(&root_fs, parent) + .with_context(|| format!("Unable to create \"{}\"", parent.display()))?; + } + + root_fs + .mount(guest.clone(), &fs_backing, host.clone()) + .with_context(|| { + format!( + "Unable to mount \"{}\" to \"{}\"", + host.display(), + guest.display() + ) + }) + .map_err(|e| dbg!(e))?; + } + } + + Ok(root_fs) } } @@ -149,6 +184,20 @@ impl Deref for Handler { } } +fn create_dir_all(fs: &dyn FileSystem, path: &Path) -> Result<(), Error> { + if fs.metadata(path).is_ok() { + return Ok(()); + } + + if let Some(parent) = path.parent() { + create_dir_all(fs, parent)?; + } + + fs.create_dir(path)?; + + Ok(()) +} + /// Drive the request to completion by streaming the request body to the /// instance and waiting for it to exit. async fn drive_request_to_completion( diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run2.rs index efdfe0e219b..09edb45f666 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run2.rs @@ -51,6 +51,7 @@ mod webc_on_disk { } #[test] + #[ignore = "WASI runners only give you access to the webc fs for now"] fn wasi_runner_with_mounted_directories_and_webc_volumes() { let temp = TempDir::new().unwrap(); std::fs::write(temp.path().join("main.py"), "print('Hello, World!')").unwrap(); @@ -89,8 +90,6 @@ mod webc_on_disk { .env("RUST_LOG", RUST_LOG) .assert(); - panic!("{}", String::from_utf8_lossy(&assert.get_output().stderr)); - assert.success().stdout(contains("Hello, World!")); } From 897bc6d90b192026595775f7ddb44dc060a4c0d0 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Mon, 20 Mar 2023 23:21:21 +0800 Subject: [PATCH 34/39] Ran rustfmt --- lib/vfs/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/vfs/src/lib.rs b/lib/vfs/src/lib.rs index 24bce023bce..e20f42b4580 100644 --- a/lib/vfs/src/lib.rs +++ b/lib/vfs/src/lib.rs @@ -84,7 +84,6 @@ pub trait FileSystem: fmt::Debug + Send + Sync + 'static + Upcastable { fn new_open_options(&self) -> OpenOptions; } - impl dyn FileSystem + 'static { #[inline] pub fn downcast_ref(&'_ self) -> Option<&'_ T> { From e80f8452464f18b87aedac37a5c9e8f3d321ca39 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Mon, 20 Mar 2023 23:39:16 +0800 Subject: [PATCH 35/39] Rename "run2" to "run-unstable" --- lib/cli/src/cli.rs | 16 ++++++----- lib/cli/src/commands.rs | 4 +-- .../src/commands/{run2.rs => run_unstable.rs} | 6 ++-- .../cli/tests/{run2.rs => run_unstable.rs} | 28 +++++++++---------- 4 files changed, 28 insertions(+), 26 deletions(-) rename lib/cli/src/commands/{run2.rs => run_unstable.rs} (99%) rename tests/integration/cli/tests/{run2.rs => run_unstable.rs} (96%) diff --git a/lib/cli/src/cli.rs b/lib/cli/src/cli.rs index e04be7f8202..86104ec84da 100644 --- a/lib/cli/src/cli.rs +++ b/lib/cli/src/cli.rs @@ -9,8 +9,8 @@ use crate::commands::CreateExe; #[cfg(feature = "wast")] use crate::commands::Wast; use crate::commands::{ - Add, Cache, Config, Init, Inspect, List, Login, Publish, Run, Run2, SelfUpdate, Validate, - Whoami, + Add, Cache, Config, Init, Inspect, List, Login, Publish, Run, RunUnstable, SelfUpdate, + Validate, Whoami, }; #[cfg(feature = "static-artifact-create")] use crate::commands::{CreateObj, GenCHeader}; @@ -162,8 +162,8 @@ enum WasmerCLIOptions { /// Add a WAPM package's bindings to your application. Add(Add), - /// Run a WebAssembly file or WEBC container. - Run2(Run2), + /// (unstable) Run a WebAssembly file or WEBC container. + RunUnstable(RunUnstable), } impl WasmerCLIOptions { @@ -193,7 +193,7 @@ impl WasmerCLIOptions { Self::Binfmt(binfmt) => binfmt.execute(), Self::Whoami(whoami) => whoami.execute(), Self::Add(install) => install.execute(), - Self::Run2(run2) => run2.execute(), + Self::RunUnstable(run2) => run2.execute(), } } } @@ -246,8 +246,10 @@ fn wasmer_main_inner() -> Result<(), anyhow::Error> { } else { match command.unwrap_or(&"".to_string()).as_ref() { "add" | "cache" | "compile" | "config" | "create-obj" | "create-exe" | "help" - | "gen-c-header" | "inspect" | "init" | "run" | "run2" | "self-update" | "validate" - | "wast" | "binfmt" | "list" | "login" | "publish" => WasmerCLIOptions::parse(), + | "gen-c-header" | "inspect" | "init" | "run" | "run-unstable" | "self-update" + | "validate" | "wast" | "binfmt" | "list" | "login" | "publish" => { + WasmerCLIOptions::parse() + } _ => { WasmerCLIOptions::try_parse_from(args.iter()).unwrap_or_else(|e| { match e.kind() { diff --git a/lib/cli/src/commands.rs b/lib/cli/src/commands.rs index a148799b745..337d825ed8c 100644 --- a/lib/cli/src/commands.rs +++ b/lib/cli/src/commands.rs @@ -18,7 +18,7 @@ mod list; mod login; mod publish; mod run; -mod run2; +mod run_unstable; mod self_update; mod validate; #[cfg(feature = "wast")] @@ -35,7 +35,7 @@ pub use create_exe::*; pub use wast::*; pub use { add::*, cache::*, config::*, init::*, inspect::*, list::*, login::*, publish::*, run::*, - run2::Run2, self_update::*, validate::*, whoami::*, + run_unstable::RunUnstable, self_update::*, validate::*, whoami::*, }; #[cfg(feature = "static-artifact-create")] pub use {create_obj::*, gen_c_header::*}; diff --git a/lib/cli/src/commands/run2.rs b/lib/cli/src/commands/run_unstable.rs similarity index 99% rename from lib/cli/src/commands/run2.rs rename to lib/cli/src/commands/run_unstable.rs index fb0cc463b36..0bdda35bbc1 100644 --- a/lib/cli/src/commands/run2.rs +++ b/lib/cli/src/commands/run_unstable.rs @@ -34,9 +34,9 @@ use crate::{ wasmer_home::{DownloadCached, ModuleCache, WasmerHome}, }; -/// The `wasmer run` subcommand. +/// The unstable `wasmer run` subcommand. #[derive(Debug, Parser)] -pub struct Run2 { +pub struct RunUnstable { #[clap(flatten)] verbosity: clap_verbosity_flag::Verbosity, #[clap(flatten)] @@ -60,7 +60,7 @@ pub struct Run2 { args: Vec, } -impl Run2 { +impl RunUnstable { pub fn execute(&self) -> Result<(), Error> { crate::logging::set_up_logging(self.verbosity.log_level_filter()); diff --git a/tests/integration/cli/tests/run2.rs b/tests/integration/cli/tests/run_unstable.rs similarity index 96% rename from tests/integration/cli/tests/run2.rs rename to tests/integration/cli/tests/run_unstable.rs index 09edb45f666..01970810e76 100644 --- a/tests/integration/cli/tests/run2.rs +++ b/tests/integration/cli/tests/run_unstable.rs @@ -24,7 +24,7 @@ mod webc_on_disk { #[test] fn wasi_runner() { let assert = Command::new(get_wasmer_path()) - .arg("run2") + .arg("run-unstable") .arg(fixtures::qjs()) .arg("--") .arg("--eval") @@ -40,7 +40,7 @@ mod webc_on_disk { std::fs::write(temp.path().join("index.js"), "console.log('Hello, World!')").unwrap(); let assert = Command::new(get_wasmer_path()) - .arg("run2") + .arg("run-unstable") .arg(fixtures::qjs()) .arg(format!("--mapdir=/app:{}", temp.path().display())) .arg("--") @@ -57,7 +57,7 @@ mod webc_on_disk { std::fs::write(temp.path().join("main.py"), "print('Hello, World!')").unwrap(); let assert = Command::new(get_wasmer_path()) - .arg("run2") + .arg("run-unstable") .arg(fixtures::python()) .arg(format!("--mapdir=/app:{}", temp.path().display())) .arg("--") @@ -70,7 +70,7 @@ mod webc_on_disk { #[test] fn webc_files_with_multiple_commands_require_an_entrypoint_flag() { let assert = Command::new(get_wasmer_path()) - .arg("run2") + .arg("run-unstable") .arg(fixtures::wabt()) .assert(); @@ -81,7 +81,7 @@ mod webc_on_disk { #[test] fn wasi_runner_with_env_vars() { let assert = Command::new(get_wasmer_path()) - .arg("run2") + .arg("run-unstable") .arg(fixtures::python()) .arg("--env=SOME_VAR=Hello, World!") .arg("--") @@ -98,7 +98,7 @@ mod webc_on_disk { // Start the WCGI server in the background let port = rand::thread_rng().gen_range(10_000_u16..u16::MAX); let mut cmd = std::process::Command::new(get_wasmer_path()); - cmd.arg("run2") + cmd.arg("run-unstable") .arg(format!("--addr=127.0.0.1:{port}")) .arg(fixtures::static_server()) .env("RUST_LOG", RUST_LOG); @@ -129,7 +129,7 @@ mod webc_on_disk { // Start the WCGI server in the background let port = rand::thread_rng().gen_range(10_000_u16..u16::MAX); let mut cmd = std::process::Command::new(get_wasmer_path()); - cmd.arg("run2") + cmd.arg("run-unstable") .arg(format!("--addr=127.0.0.1:{port}")) .arg(format!("--mapdir=/path/to:{}", temp.path().display())) .arg(fixtures::static_server()) @@ -157,7 +157,7 @@ mod wasm_on_disk { #[test] fn wasi_executable() { let assert = Command::new(get_wasmer_path()) - .arg("run2") + .arg("run-unstable") .arg(fixtures::qjs()) .arg("--") .arg("--eval") @@ -170,7 +170,7 @@ mod wasm_on_disk { #[test] fn no_abi() { let assert = Command::new(get_wasmer_path()) - .arg("run2") + .arg("run-unstable") .arg(fixtures::fib()) .assert(); @@ -180,7 +180,7 @@ mod wasm_on_disk { #[test] fn error_if_no_start_function_found() { let assert = Command::new(get_wasmer_path()) - .arg("run2") + .arg("run-unstable") .arg(fixtures::wat_no_start()) .assert(); @@ -206,7 +206,7 @@ mod wasm_on_disk { // Now we can try to run the compiled artifact let assert = Command::new(get_wasmer_path()) - .arg("run2") + .arg("run-unstable") .arg(&dest) .arg("--") .arg("--eval") @@ -224,7 +224,7 @@ fn wasmer_package_directory() { std::fs::copy(fixtures::qjs_wasmer_toml(), temp.path().join("wasmer.toml")).unwrap(); let assert = Command::new(get_wasmer_path()) - .arg("run2") + .arg("run-unstable") .arg(temp.path()) .arg("--") .arg("--eval") @@ -240,7 +240,7 @@ mod remote_webc { #[test] fn quickjs_as_package_name() { let assert = Command::new(get_wasmer_path()) - .arg("run2") + .arg("run-unstable") .arg("saghul/quickjs") .arg("--entrypoint=quickjs") .arg("--registry=https://wapm.io/") @@ -255,7 +255,7 @@ mod remote_webc { #[test] fn quickjs_as_url() { let assert = Command::new(get_wasmer_path()) - .arg("run2") + .arg("run-unstable") .arg("https://wapm.io/saghul/quickjs") .arg("--entrypoint=quickjs") .arg("--") From 5bd69c65531eb325f40d0a79a3927eb4b459e7ee Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Tue, 21 Mar 2023 01:06:52 +0800 Subject: [PATCH 36/39] Create the checkout dir if necessary --- lib/cli/src/wasmer_home.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/cli/src/wasmer_home.rs b/lib/cli/src/wasmer_home.rs index 4842d6f52ce..786b1d2343d 100644 --- a/lib/cli/src/wasmer_home.rs +++ b/lib/cli/src/wasmer_home.rs @@ -144,6 +144,9 @@ impl DownloadCached for WasmerHome { return Ok(cached); } + std::fs::create_dir_all(&checkouts) + .with_context(|| format!("Unable to make sure \"{}\" exists", checkouts.display()))?; + // Note: we want to copy directly into a file so we don't hold // everything in memory. let (mut f, path) = if self.disable_cache { @@ -162,9 +165,10 @@ impl DownloadCached for WasmerHome { (f, cached_path) }; - std::io::copy(&mut response, &mut f) - .and_then(|_| f.flush()) + let bytes_read = std::io::copy(&mut response, &mut f) + .and_then(|bytes_read| f.flush().map(|_| bytes_read)) .with_context(|| format!("Unable to save the response to \"{}\"", path.display()))?; + tracing::debug!(bytes_read, path=%path.display(), "Saved to disk"); if !self.disable_cache { if let Some(etag) = etag { From a4c99099b8d82b71d55f5879629b2e696e524f71 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Tue, 21 Mar 2023 03:00:26 +0800 Subject: [PATCH 37/39] bumped dependencies to force a cache miss --- Cargo.lock | 193 ++++++++++++++++++++++++++++------------------------- 1 file changed, 102 insertions(+), 91 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 40671d03639..754f1f254d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -69,9 +69,9 @@ checksum = "70033777eb8b5124a81a1889416543dddef2de240019b674c81285a2635a7e1e" [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "arbitrary" @@ -84,9 +84,9 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" @@ -137,13 +137,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.3", ] [[package]] @@ -315,7 +315,7 @@ checksum = "e31225543cb46f81a7e224762764f4a6a0f097b1db0b175f69e8065efaa42de5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -391,7 +391,7 @@ dependencies = [ "quote", "serde", "serde_json", - "syn", + "syn 1.0.109", "tempfile", "toml", ] @@ -489,7 +489,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -562,7 +562,7 @@ dependencies = [ "pretty_assertions", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "trybuild", ] @@ -893,7 +893,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -904,9 +904,9 @@ checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" [[package]] name = "cxx" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" dependencies = [ "cc", "cxxbridge-flags", @@ -916,9 +916,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" dependencies = [ "cc", "codespan-reporting", @@ -926,24 +926,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.3", ] [[package]] name = "cxxbridge-flags" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" +checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" [[package]] name = "cxxbridge-macro" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.3", ] [[package]] @@ -966,7 +966,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -977,7 +977,7 @@ checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -988,7 +988,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -999,7 +999,7 @@ checksum = "f3cdeb9ec472d588e539a818b2dee436825730da08ad0017c4b1a17676bdc8b7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1123,7 +1123,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1181,7 +1181,7 @@ checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1202,7 +1202,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1405,7 +1405,7 @@ checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1481,13 +1481,13 @@ dependencies = [ [[package]] name = "ghost" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e0cd8a998937e25c6ba7cc276b96ec5cc3f4dc4ab5de9ede4fb152bdd5c5eb" +checksum = "e77ac7b51b8e6313251737fcef4b1c01a2ea102bde68415b62c0ee9268fec357" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.3", ] [[package]] @@ -1557,7 +1557,7 @@ dependencies = [ "quote", "serde", "serde_json", - "syn", + "syn 1.0.109", ] [[package]] @@ -1568,7 +1568,7 @@ checksum = "a755cc59cda2641ea3037b4f9f7ef40471c329f55c1fa2db6fa0bb7ae6c1f7ce" dependencies = [ "graphql_client_codegen", "proc-macro2", - "syn", + "syn 1.0.109", ] [[package]] @@ -1588,7 +1588,7 @@ checksum = "729f9bd3449d77e7831a18abfb7ba2f99ee813dfd15b8c2167c9a54ba20aa99d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1933,7 +1933,7 @@ checksum = "87d00c17e264ce02be5bc23d7bff959188ec7137beddd06b8b6b05a7c680ea85" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2011,9 +2011,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76e86b86ae312accbf05ade23ce76b625e0e47a255712b7414037385a1c05380" +checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" dependencies = [ "hermit-abi 0.3.1", "libc", @@ -2028,9 +2028,9 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", @@ -2254,7 +2254,7 @@ dependencies = [ "proc-macro2", "proc-quote", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2328,9 +2328,9 @@ dependencies = [ [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" @@ -2555,7 +2555,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2600,9 +2600,9 @@ checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" [[package]] name = "openssl" -version = "0.10.46" +version = "0.10.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd2523381e46256e40930512c7fd25562b9eae4812cb52078f155e87217c9d1e" +checksum = "d8b277f87dacc05a6b709965d1cbafac4649d6ce9f3ce9ceb88508b5666dfec9" dependencies = [ "bitflags", "cfg-if 1.0.0", @@ -2621,7 +2621,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2632,9 +2632,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.81" +version = "0.9.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176be2629957c157240f68f61f2d0053ad3a4ecfdd9ebf1e6521d18d9635cf67" +checksum = "a95792af3c4e0153c3914df2261bedd30a98476f94dc892b67dfe1d89d433a04" dependencies = [ "autocfg", "cc", @@ -2661,9 +2661,9 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.4.1" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" [[package]] name = "output_vt100" @@ -2792,7 +2792,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2823,7 +2823,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2971,7 +2971,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -3011,7 +3011,7 @@ dependencies = [ "proc-macro2", "proc-quote-impl", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3042,7 +3042,7 @@ checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3275,9 +3275,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.14" +version = "0.11.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9" +checksum = "0ba30cc2c0cd02af1222ed216ba659cdb2f879dfe3181852fe7c50b1d0005949" dependencies = [ "base64 0.21.0", "bytes", @@ -3356,7 +3356,7 @@ checksum = "ff26ed6c7c4dfc2aa9480b86a60e3c7233543a270a680e10758a507c5a4ce476" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3441,9 +3441,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.9" +version = "0.36.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" dependencies = [ "bitflags", "errno", @@ -3673,9 +3673,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.156" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" +checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" dependencies = [ "serde_derive", ] @@ -3712,13 +3712,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.156" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" +checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.3", ] [[package]] @@ -3788,7 +3788,7 @@ checksum = "b2acd6defeddb41eb60bb468f8825d0cfd0c2a76bc03bfd235b6a1dc4f6a1ad5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3965,7 +3965,7 @@ dependencies = [ "quote", "serde", "serde_derive", - "syn", + "syn 1.0.109", ] [[package]] @@ -3981,7 +3981,7 @@ dependencies = [ "serde_derive", "serde_json", "sha1", - "syn", + "syn 1.0.109", ] [[package]] @@ -4015,7 +4015,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.109", ] [[package]] @@ -4035,6 +4035,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8234ae35e70582bfa0f1fedffa6daa248e41dd045310b19800c4a36382c8f60" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "tar" version = "0.4.38" @@ -4142,7 +4153,7 @@ checksum = "38f0c854faeb68a048f0f2dc410c5ddae3bf83854ef0e4977d58306a5edef50e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4175,22 +4186,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.3", ] [[package]] @@ -4265,7 +4276,7 @@ dependencies = [ "proc-macro2", "quote", "standback", - "syn", + "syn 1.0.109", ] [[package]] @@ -4334,7 +4345,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4467,7 +4478,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4560,9 +4571,9 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "trybuild" -version = "1.0.79" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3115bddce1b5f52dd4b5e0ec8298a66ce733e4cc6759247dc2d1c11508ec38" +checksum = "501dbdbb99861e4ab6b60eb6a7493956a9defb644fd034bc4a5ef27c693c8a3a" dependencies = [ "basic-toml", "glob", @@ -4600,7 +4611,7 @@ checksum = "e60147782cc30833c05fba3bab1d9b5771b2685a2557672ac96fa5d154099c0e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4620,9 +4631,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" @@ -4844,7 +4855,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdeeb5c1170246de8425a3e123e7ef260dc05ba2b522a1d369fe2315376efea4" dependencies = [ "proc-macro2", - "syn", + "syn 1.0.109", "wai-bindgen-gen-core", "wai-bindgen-gen-rust-wasm", ] @@ -4870,7 +4881,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b3488ed88d4dd0e3bf85bad4e27dac6cb31aae5d122a5dda2424803c8dc863a" dependencies = [ "proc-macro2", - "syn", + "syn 1.0.109", "wai-bindgen-gen-core", "wai-bindgen-gen-wasmer", ] @@ -5030,7 +5041,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -5054,7 +5065,7 @@ checksum = "c5020cfa87c7cecefef118055d44e3c1fc122c7ec25701d528ee458a0b45f38f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -5087,7 +5098,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5501,7 +5512,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasmer-types", ] From 7b49f56552d1ea5d70aa395b629e4ec8b97e34dd Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 22 Mar 2023 01:39:08 +0800 Subject: [PATCH 38/39] The wat2wasm runner test needs an argument --- lib/wasi/tests/runners.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/wasi/tests/runners.rs b/lib/wasi/tests/runners.rs index 3bf033442a8..8792fe14e8f 100644 --- a/lib/wasi/tests/runners.rs +++ b/lib/wasi/tests/runners.rs @@ -39,6 +39,7 @@ mod wasi { let handle = std::thread::spawn(move || { WasiRunner::new(store) .with_task_manager(tasks) + .with_args(["--version"]) .run_cmd(&container, "wat2wasm") }); let err = handle.join().unwrap().unwrap_err(); From 3c7f73bf430b71d7220c28d9ac8ffed4f8c9b535 Mon Sep 17 00:00:00 2001 From: Michael-F-Bryan Date: Wed, 22 Mar 2023 01:14:22 +0800 Subject: [PATCH 39/39] Disable `wasmer run-unstable` integration tests on musl Linux See #3698 for more. --- tests/integration/cli/tests/run_unstable.rs | 57 ++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/tests/integration/cli/tests/run_unstable.rs b/tests/integration/cli/tests/run_unstable.rs index 01970810e76..8877c3fe44a 100644 --- a/tests/integration/cli/tests/run_unstable.rs +++ b/tests/integration/cli/tests/run_unstable.rs @@ -15,13 +15,16 @@ use tempfile::TempDir; use wasmer_integration_tests_cli::get_wasmer_path; const RUST_LOG: &str = "info,wasmer_wasi::runners=debug"; -// const RUST_LOG: &str = "info,wasmer_wasi=trace"; mod webc_on_disk { use super::*; use rand::Rng; #[test] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn wasi_runner() { let assert = Command::new(get_wasmer_path()) .arg("run-unstable") @@ -35,6 +38,10 @@ mod webc_on_disk { } #[test] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn wasi_runner_with_mounted_directories() { let temp = TempDir::new().unwrap(); std::fs::write(temp.path().join("index.js"), "console.log('Hello, World!')").unwrap(); @@ -52,6 +59,10 @@ mod webc_on_disk { #[test] #[ignore = "WASI runners only give you access to the webc fs for now"] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn wasi_runner_with_mounted_directories_and_webc_volumes() { let temp = TempDir::new().unwrap(); std::fs::write(temp.path().join("main.py"), "print('Hello, World!')").unwrap(); @@ -68,6 +79,10 @@ mod webc_on_disk { } #[test] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn webc_files_with_multiple_commands_require_an_entrypoint_flag() { let assert = Command::new(get_wasmer_path()) .arg("run-unstable") @@ -79,6 +94,10 @@ mod webc_on_disk { } #[test] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn wasi_runner_with_env_vars() { let assert = Command::new(get_wasmer_path()) .arg("run-unstable") @@ -94,6 +113,10 @@ mod webc_on_disk { } #[test] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn wcgi_runner() { // Start the WCGI server in the background let port = rand::thread_rng().gen_range(10_000_u16..u16::MAX); @@ -123,6 +146,10 @@ mod webc_on_disk { } #[test] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn wcgi_runner_with_mounted_directories() { let temp = TempDir::new().unwrap(); std::fs::write(temp.path().join("file.txt"), "Hello, World!").unwrap(); @@ -155,6 +182,10 @@ mod wasm_on_disk { use predicates::str::contains; #[test] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn wasi_executable() { let assert = Command::new(get_wasmer_path()) .arg("run-unstable") @@ -168,6 +199,10 @@ mod wasm_on_disk { } #[test] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn no_abi() { let assert = Command::new(get_wasmer_path()) .arg("run-unstable") @@ -178,6 +213,10 @@ mod wasm_on_disk { } #[test] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn error_if_no_start_function_found() { let assert = Command::new(get_wasmer_path()) .arg("run-unstable") @@ -190,6 +229,10 @@ mod wasm_on_disk { } #[test] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn pre_compiled() { let temp = TempDir::new().unwrap(); let dest = temp.path().join("qjs.wasmu"); @@ -218,6 +261,10 @@ mod wasm_on_disk { } #[test] +#[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" +)] fn wasmer_package_directory() { let temp = TempDir::new().unwrap(); std::fs::copy(fixtures::qjs(), temp.path().join("qjs.wasm")).unwrap(); @@ -238,6 +285,10 @@ mod remote_webc { use super::*; #[test] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn quickjs_as_package_name() { let assert = Command::new(get_wasmer_path()) .arg("run-unstable") @@ -253,6 +304,10 @@ mod remote_webc { } #[test] + #[cfg_attr( + all(target_env = "musl", target_os = "linux"), + ignore = "wasmer run-unstable segfaults on musl" + )] fn quickjs_as_url() { let assert = Command::new(get_wasmer_path()) .arg("run-unstable")

s=0Y}NSHigJo@#)K-nwfu@%uTa198&imM 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