From 5decf9bbd747d66c597073992130b78e9d6b2a5c Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Thu, 25 Jun 2026 20:43:17 +0200 Subject: [PATCH 01/30] fix: for local dev env --- Cargo.toml | 2 +- app/src/lib/api/nodes.ts | 2 +- app/src/lib/api/system.ts | 2 +- app/src/lib/auth/api.ts | 2 +- docker-compose.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b3f8233a..2fdf864c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,7 +48,7 @@ tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter", "registry"] } # Security -jsonwebtoken = "10.0.0" +jsonwebtoken = { version = "10.0.0", features = ["rust_crypto"] } bcrypt = "0.19" rsa = { version = "0.9", features = ["sha2"] } totp-rs = { version = "5.6", features = ["qr", "otpauth"] } diff --git a/app/src/lib/api/nodes.ts b/app/src/lib/api/nodes.ts index f48afaaa..d8073408 100644 --- a/app/src/lib/api/nodes.ts +++ b/app/src/lib/api/nodes.ts @@ -1,4 +1,4 @@ -const API_BASE = (import.meta.env.VITE_API_URL || '') + '/api'; +const API_BASE = '/api'; export interface Node { id: string; diff --git a/app/src/lib/api/system.ts b/app/src/lib/api/system.ts index ddc2818a..216676cd 100644 --- a/app/src/lib/api/system.ts +++ b/app/src/lib/api/system.ts @@ -1,4 +1,4 @@ -const API_BASE = (import.meta.env.VITE_API_URL || '') + '/api'; +const API_BASE = '/api'; export interface UpdateStatus { current_version: string; diff --git a/app/src/lib/auth/api.ts b/app/src/lib/auth/api.ts index 36bdff22..6554eb23 100644 --- a/app/src/lib/auth/api.ts +++ b/app/src/lib/auth/api.ts @@ -1,4 +1,4 @@ -const API_BASE = (import.meta.env.VITE_API_URL || '') + '/api'; +const API_BASE = '/api'; export interface AuthResponse { token: string; diff --git a/docker-compose.yml b/docker-compose.yml index da71700e..d3707687 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -293,7 +293,7 @@ services: dockerfile: Dockerfile container_name: csfx-app-dev environment: - VITE_API_URL: https://api-gateway:8000 + VITE_API_URL: http://api-gateway:8000 ports: - "5173:5173" volumes: From e818f2f9f29fe2b58b2561c7855e8e046668a721 Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Thu, 25 Jun 2026 21:26:13 +0200 Subject: [PATCH 02/30] feat: added ressource groups --- Cargo.lock | 196 ++++++++++ control-plane/api-gateway/src/auth/rbac.rs | 18 +- control-plane/api-gateway/src/init.rs | 19 +- control-plane/api-gateway/src/main.rs | 13 +- control-plane/api-gateway/src/routes/mod.rs | 2 + .../api-gateway/src/routes/resource_groups.rs | 357 ++++++++++++++++++ control-plane/scheduler/src/db/workloads.rs | 2 + .../scheduler/src/models/workload.rs | 2 + .../sdn-controller/src/db/networks.rs | 1 + control-plane/sdn-controller/src/models.rs | 1 + .../shared/entity/src/entities/mod.rs | 2 + .../shared/entity/src/entities/networks.rs | 15 + .../entity/src/entities/resource_groups.rs | 59 +++ .../shared/entity/src/entities/volumes.rs | 15 + .../shared/entity/src/entities/workloads.rs | 15 + control-plane/shared/migration/src/lib.rs | 2 + .../m20260625_000000_add_resource_groups.rs | 190 ++++++++++ .../volume-manager/src/db/volumes.rs | 2 + .../volume-manager/src/models/volume.rs | 2 + 19 files changed, 898 insertions(+), 15 deletions(-) create mode 100644 control-plane/api-gateway/src/routes/resource_groups.rs create mode 100644 control-plane/shared/entity/src/entities/resource_groups.rs create mode 100644 control-plane/shared/migration/src/m20260625_000000_add_resource_groups.rs diff --git a/Cargo.lock b/Cargo.lock index f5019f8b..3677127e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -603,6 +603,12 @@ dependencies = [ "tower-service", ] +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base32" version = "0.5.1" @@ -1132,6 +1138,18 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.7" @@ -1212,6 +1230,33 @@ dependencies = [ "cipher 0.4.4", ] +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "darling" version = "0.20.11" @@ -1373,6 +1418,44 @@ version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" +dependencies = [ + "curve25519-dalek", + "ed25519", + "serde", + "sha2 0.10.9", + "subtle", + "zeroize", +] + [[package]] name = "either" version = "1.16.0" @@ -1382,6 +1465,27 @@ dependencies = [ "serde", ] +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "entity" version = "0.2.2" @@ -1551,6 +1655,22 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + [[package]] name = "find-msvc-tools" version = "0.1.9" @@ -1762,6 +1882,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -1862,6 +1983,17 @@ dependencies = [ "web-time", ] +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "h2" version = "0.4.15" @@ -2482,11 +2614,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eba32bfb4ffdeaca3e34431072faf01745c9b26d25504aa7a6cf5684334fc4fc" dependencies = [ "base64", + "ed25519-dalek", "getrandom 0.2.17", + "hmac", "js-sys", + "p256", + "p384", "pem", + "rand 0.8.6", + "rsa", "serde", "serde_json", + "sha2 0.10.9", "signature", "simple_asn1", "zeroize", @@ -3034,6 +3173,30 @@ dependencies = [ "syn 2.0.118", ] +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + +[[package]] +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.9", +] + [[package]] name = "parking" version = "2.2.1" @@ -3275,6 +3438,15 @@ dependencies = [ "syn 2.0.118", ] +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -3883,6 +4055,16 @@ dependencies = [ "webpki-roots 1.0.8", ] +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + [[package]] name = "rgb" version = "0.8.53" @@ -4393,6 +4575,20 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + [[package]] name = "security-framework" version = "3.7.0" diff --git a/control-plane/api-gateway/src/auth/rbac.rs b/control-plane/api-gateway/src/auth/rbac.rs index 69e42bbc..9aa5acdf 100644 --- a/control-plane/api-gateway/src/auth/rbac.rs +++ b/control-plane/api-gateway/src/auth/rbac.rs @@ -8,7 +8,7 @@ use axum::{ http::{request::Parts, StatusCode}, }; use chrono::Utc; -use entity::{organization, InvalidJwt, Organization}; +use entity::{InvalidJwt}; use sea_orm::{ColumnTrait, EntityTrait, QueryFilter}; use uuid::Uuid; @@ -26,6 +26,8 @@ pub struct CanManageVolumes(pub Claims); pub struct CanViewNetworks(pub Claims); pub struct CanManageNetworks(pub Claims); pub struct CanManageSystem(pub Claims); +pub struct CanViewResourceGroups(pub Claims); +pub struct CanManageResourceGroups(pub Claims); async fn extract_claims(parts: &mut Parts, state: &AppState) -> Result { let token = parts @@ -70,13 +72,9 @@ async fn extract_claims(parts: &mut Parts, state: &AppState) -> Result Result { - Organization::find() - .filter(organization::Column::Name.eq("Default Organization")) - .one(&state.db_conn) - .await - .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)? - .map(|o| o.id) +fn get_default_org(state: &AppState) -> Result { + state + .default_org_id .ok_or(StatusCode::INTERNAL_SERVER_ERROR) } @@ -87,7 +85,7 @@ async fn check( action: &str, ) -> Result { let claims = extract_claims(parts, state).await?; - let org_id = get_default_org(state).await?; + let org_id = get_default_org(state)?; let rbac = RbacService::new(state.db_conn.clone()); let allowed = rbac .has_permission(claims.user_id, org_id, resource, action) @@ -124,3 +122,5 @@ impl_extractor!(CanManageVolumes, "volumes", "manage"); impl_extractor!(CanViewNetworks, "networks", "view"); impl_extractor!(CanManageNetworks, "networks", "manage"); impl_extractor!(CanManageSystem, "system", "manage"); +impl_extractor!(CanViewResourceGroups, "resource_groups", "view"); +impl_extractor!(CanManageResourceGroups, "resource_groups", "manage"); diff --git a/control-plane/api-gateway/src/init.rs b/control-plane/api-gateway/src/init.rs index 9d3e785e..5f851917 100644 --- a/control-plane/api-gateway/src/init.rs +++ b/control-plane/api-gateway/src/init.rs @@ -9,7 +9,7 @@ use crate::auth::crypto::{generate_salt, hash_password, RsaKeyPair}; pub async fn initialize_database( db: &DatabaseConnection, -) -> Result<(), Box> { +) -> Result> { tracing::info!("Initializing database with default data..."); // 1. Create RSA key pair if not exists @@ -148,6 +148,18 @@ pub async fn initialize_database( "manage", "Trigger control plane updates", ), + ( + "resource_groups.view", + "resource_groups", + "view", + "View resource groups and their resources", + ), + ( + "resource_groups.manage", + "resource_groups", + "manage", + "Create, update, and delete resource groups", + ), ]; let mut permission_map = std::collections::HashMap::new(); @@ -248,6 +260,8 @@ pub async fn initialize_database( "networks.view", "networks.manage", "members.view", + "resource_groups.view", + "resource_groups.manage", ]; for perm_name in operator_perms { if let Some(perm_id) = permission_map.get(perm_name) { @@ -291,6 +305,7 @@ pub async fn initialize_database( "networks.view", "organization.view", "members.view", + "resource_groups.view", ]; for perm_name in viewer_perms { if let Some(perm_id) = permission_map.get(perm_name) { @@ -360,5 +375,5 @@ pub async fn initialize_database( } tracing::info!("Database initialization completed"); - Ok(()) + Ok(default_org_id) } diff --git a/control-plane/api-gateway/src/main.rs b/control-plane/api-gateway/src/main.rs index 585ecd72..64a169bb 100644 --- a/control-plane/api-gateway/src/main.rs +++ b/control-plane/api-gateway/src/main.rs @@ -125,6 +125,7 @@ impl utoipa::Modify for SecurityAddon { pub struct AppState { pub db_conn: DbConn, pub service_client: service_client::ServiceClient, + pub default_org_id: Option, } #[tokio::main] @@ -149,14 +150,18 @@ async fn main() { } }; - if let Err(e) = init::initialize_database(&db_conn).await { - tracing::error!(error = %e, "failed to initialize database"); - std::process::exit(1); - } + let default_org_id = match init::initialize_database(&db_conn).await { + Ok(id) => id, + Err(e) => { + tracing::error!(error = %e, "failed to initialize database"); + std::process::exit(1); + } + }; let state = AppState { db_conn: db_conn.clone(), service_client: service_client::ServiceClient::new(), + default_org_id: Some(default_org_id), }; tracing::info!("starting self-monitoring service"); diff --git a/control-plane/api-gateway/src/routes/mod.rs b/control-plane/api-gateway/src/routes/mod.rs index fe2338a9..9e7ab1a1 100644 --- a/control-plane/api-gateway/src/routes/mod.rs +++ b/control-plane/api-gateway/src/routes/mod.rs @@ -20,6 +20,7 @@ pub mod networks; pub mod organizations; pub mod registry; pub mod releases; +pub mod resource_groups; pub mod ssh_keys; pub mod system; pub mod update; @@ -93,6 +94,7 @@ pub fn create_router() -> Router { .merge(volumes::volumes_routes()) .merge(workloads::workloads_routes()) .merge(events::events_routes()) + .merge(resource_groups::resource_groups_routes()) .layer(GovernorLayer::new(governor_config)); let api_router = Router::new() diff --git a/control-plane/api-gateway/src/routes/resource_groups.rs b/control-plane/api-gateway/src/routes/resource_groups.rs new file mode 100644 index 00000000..ac93567d --- /dev/null +++ b/control-plane/api-gateway/src/routes/resource_groups.rs @@ -0,0 +1,357 @@ +use axum::{ + extract::{Path, State}, + http::StatusCode, + response::{IntoResponse, Json}, + routing::get, + Router, +}; +use chrono::Utc; +use entity::{ + entities::{networks, resource_groups, volumes, workloads}, + Networks, ResourceGroups, Volumes, Workloads, +}; +use sea_orm::{ + ActiveModelTrait, ActiveValue::Set, ColumnTrait, EntityTrait, PaginatorTrait, QueryFilter, +}; +use serde::{Deserialize, Serialize}; +use serde_json::json; +use uuid::Uuid; + +use crate::{ + auth::rbac::{CanManageResourceGroups, CanViewResourceGroups}, + AppState, +}; + +#[derive(Debug, Deserialize)] +pub struct CreateResourceGroupRequest { + pub name: String, + pub description: Option, + pub internal_cidr: String, +} + +#[derive(Debug, Serialize)] +pub struct ResourceGroupResponse { + pub id: Uuid, + pub organization_id: Uuid, + pub name: String, + pub description: Option, + pub internal_cidr: String, + pub status: String, + pub created_at: chrono::NaiveDateTime, + pub updated_at: Option, +} + +impl From for ResourceGroupResponse { + fn from(m: resource_groups::Model) -> Self { + Self { + id: m.id, + organization_id: m.organization_id, + name: m.name, + description: m.description, + internal_cidr: m.internal_cidr, + status: m.status, + created_at: m.created_at, + updated_at: m.updated_at, + } + } +} + +fn get_org_id(state: &AppState) -> Uuid { + state + .default_org_id + .expect("default organization not initialized") +} + +pub async fn list_resource_groups( + CanViewResourceGroups(_claims): CanViewResourceGroups, + State(state): State, +) -> Result)> { + let org_id = get_org_id(&state); + + let groups = ResourceGroups::find() + .filter(resource_groups::Column::OrganizationId.eq(org_id)) + .all(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to list resource groups"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })?; + + let resp: Vec = groups.into_iter().map(Into::into).collect(); + Ok((StatusCode::OK, Json(json!(resp)))) +} + +pub async fn create_resource_group( + CanManageResourceGroups(_claims): CanManageResourceGroups, + State(state): State, + Json(req): Json, +) -> Result)> { + let org_id = get_org_id(&state); + let now = Utc::now().naive_utc(); + + let model = resource_groups::ActiveModel { + id: Set(Uuid::new_v4()), + organization_id: Set(org_id), + name: Set(req.name), + description: Set(req.description), + internal_cidr: Set(req.internal_cidr), + status: Set("active".to_string()), + created_at: Set(now), + updated_at: Set(None), + }; + + let inserted = model.insert(&state.db_conn).await.map_err(|e| { + tracing::error!(error = %e, "failed to create resource group"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })?; + + Ok((StatusCode::CREATED, Json(json!(ResourceGroupResponse::from(inserted))))) +} + +pub async fn get_resource_group( + CanViewResourceGroups(_claims): CanViewResourceGroups, + State(state): State, + Path(id): Path, +) -> Result)> { + let org_id = get_org_id(&state); + + let group = ResourceGroups::find_by_id(id) + .filter(resource_groups::Column::OrganizationId.eq(org_id)) + .one(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to get resource group"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })? + .ok_or_else(|| { + ( + StatusCode::NOT_FOUND, + Json(json!({ "error": "resource group not found" })), + ) + })?; + + Ok((StatusCode::OK, Json(json!(ResourceGroupResponse::from(group))))) +} + +pub async fn delete_resource_group( + CanManageResourceGroups(_claims): CanManageResourceGroups, + State(state): State, + Path(id): Path, +) -> Result)> { + let org_id = get_org_id(&state); + + let group = ResourceGroups::find_by_id(id) + .filter(resource_groups::Column::OrganizationId.eq(org_id)) + .one(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to find resource group"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })? + .ok_or_else(|| { + ( + StatusCode::NOT_FOUND, + Json(json!({ "error": "resource group not found" })), + ) + })?; + + let active_workloads = Workloads::find() + .filter(workloads::Column::ResourceGroupId.eq(id)) + .filter(workloads::Column::Status.is_in(["pending", "scheduled", "running"])) + .count(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to count workloads"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })?; + + if active_workloads > 0 { + return Err(( + StatusCode::CONFLICT, + Json(json!({ "error": "resource group has active workloads" })), + )); + } + + let mut active: resource_groups::ActiveModel = group.into(); + active.status = Set("deleting".to_string()); + active.updated_at = Set(Some(Utc::now().naive_utc())); + active.update(&state.db_conn).await.map_err(|e| { + tracing::error!(error = %e, "failed to update resource group status"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })?; + + ResourceGroups::delete_by_id(id) + .exec(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to delete resource group"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })?; + + Ok(StatusCode::NO_CONTENT.into_response()) +} + +pub async fn list_resource_group_workloads( + CanViewResourceGroups(_claims): CanViewResourceGroups, + State(state): State, + Path(id): Path, +) -> Result)> { + let org_id = get_org_id(&state); + + ResourceGroups::find_by_id(id) + .filter(resource_groups::Column::OrganizationId.eq(org_id)) + .one(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to find resource group"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })? + .ok_or_else(|| { + ( + StatusCode::NOT_FOUND, + Json(json!({ "error": "resource group not found" })), + ) + })?; + + let workloads = Workloads::find() + .filter(workloads::Column::ResourceGroupId.eq(id)) + .all(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to list workloads"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })?; + + Ok((StatusCode::OK, Json(json!(workloads)))) +} + +pub async fn list_resource_group_volumes( + CanViewResourceGroups(_claims): CanViewResourceGroups, + State(state): State, + Path(id): Path, +) -> Result)> { + let org_id = get_org_id(&state); + + ResourceGroups::find_by_id(id) + .filter(resource_groups::Column::OrganizationId.eq(org_id)) + .one(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to find resource group"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })? + .ok_or_else(|| { + ( + StatusCode::NOT_FOUND, + Json(json!({ "error": "resource group not found" })), + ) + })?; + + let vols = Volumes::find() + .filter(volumes::Column::ResourceGroupId.eq(id)) + .all(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to list volumes"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })?; + + Ok((StatusCode::OK, Json(json!(vols)))) +} + +pub async fn list_resource_group_networks( + CanViewResourceGroups(_claims): CanViewResourceGroups, + State(state): State, + Path(id): Path, +) -> Result)> { + let org_id = get_org_id(&state); + + ResourceGroups::find_by_id(id) + .filter(resource_groups::Column::OrganizationId.eq(org_id)) + .one(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to find resource group"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })? + .ok_or_else(|| { + ( + StatusCode::NOT_FOUND, + Json(json!({ "error": "resource group not found" })), + ) + })?; + + let nets = Networks::find() + .filter(networks::Column::ResourceGroupId.eq(id)) + .all(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to list networks"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })?; + + Ok((StatusCode::OK, Json(json!(nets)))) +} + +pub fn resource_groups_routes() -> Router { + Router::new() + .route( + "/resource-groups", + get(list_resource_groups).post(create_resource_group), + ) + .route( + "/resource-groups/{id}", + get(get_resource_group).delete(delete_resource_group), + ) + .route( + "/resource-groups/{id}/workloads", + get(list_resource_group_workloads), + ) + .route( + "/resource-groups/{id}/volumes", + get(list_resource_group_volumes), + ) + .route( + "/resource-groups/{id}/networks", + get(list_resource_group_networks), + ) +} diff --git a/control-plane/scheduler/src/db/workloads.rs b/control-plane/scheduler/src/db/workloads.rs index 9b8c6218..ff497e05 100644 --- a/control-plane/scheduler/src/db/workloads.rs +++ b/control-plane/scheduler/src/db/workloads.rs @@ -32,6 +32,7 @@ pub async fn create( container_id: Set(None), created_by: Set(None), organization_id: Set(None), + resource_group_id: Set(req.resource_group_id), created_at: Set(Utc::now().naive_utc()), updated_at: Set(None), }; @@ -103,6 +104,7 @@ fn into_response(m: workloads::Model) -> WorkloadResponse { status: WorkloadStatus::from_str(&m.status), assigned_agent_id: m.assigned_agent_id, container_id: m.container_id, + resource_group_id: m.resource_group_id, created_at: m.created_at.and_utc(), updated_at: m.updated_at.map(|dt| dt.and_utc()), } diff --git a/control-plane/scheduler/src/models/workload.rs b/control-plane/scheduler/src/models/workload.rs index 6ab22942..47ecf109 100644 --- a/control-plane/scheduler/src/models/workload.rs +++ b/control-plane/scheduler/src/models/workload.rs @@ -44,6 +44,7 @@ pub struct CreateWorkloadRequest { pub disk_bytes: i64, pub env_vars: Option>, pub ports: Option>, + pub resource_group_id: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -72,6 +73,7 @@ pub struct WorkloadResponse { pub status: WorkloadStatus, pub assigned_agent_id: Option, pub container_id: Option, + pub resource_group_id: Option, pub created_at: DateTime, pub updated_at: Option>, } diff --git a/control-plane/sdn-controller/src/db/networks.rs b/control-plane/sdn-controller/src/db/networks.rs index 78cee66e..55ab1a88 100644 --- a/control-plane/sdn-controller/src/db/networks.rs +++ b/control-plane/sdn-controller/src/db/networks.rs @@ -19,6 +19,7 @@ pub async fn create_network( overlay_type: Set(req.overlay_type), status: Set("active".to_string()), organization_id: Set(None), + resource_group_id: Set(req.resource_group_id), created_at: Set(Utc::now().naive_utc()), updated_at: Set(None), }; diff --git a/control-plane/sdn-controller/src/models.rs b/control-plane/sdn-controller/src/models.rs index 2526c0fe..22b1f231 100644 --- a/control-plane/sdn-controller/src/models.rs +++ b/control-plane/sdn-controller/src/models.rs @@ -5,6 +5,7 @@ pub struct CreateNetworkRequest { pub name: String, pub cidr: String, pub overlay_type: String, + pub resource_group_id: Option, } #[derive(Debug, Serialize, Deserialize)] diff --git a/control-plane/shared/entity/src/entities/mod.rs b/control-plane/shared/entity/src/entities/mod.rs index d3ea77fd..6c54b09a 100644 --- a/control-plane/shared/entity/src/entities/mod.rs +++ b/control-plane/shared/entity/src/entities/mod.rs @@ -14,6 +14,7 @@ pub mod networks; pub mod organization; pub mod permission; pub mod registry_tokens; +pub mod resource_groups; pub mod role; pub mod role_permission; pub mod user; @@ -39,6 +40,7 @@ pub use networks::Entity as Networks; pub use organization::Entity as Organization; pub use permission::Entity as Permission; pub use registry_tokens::Entity as RegistryTokens; +pub use resource_groups::Entity as ResourceGroups; pub use role::Entity as Role; pub use role_permission::Entity as RolePermission; pub use user::Entity as User; diff --git a/control-plane/shared/entity/src/entities/networks.rs b/control-plane/shared/entity/src/entities/networks.rs index 32c38c7d..afd6e57d 100644 --- a/control-plane/shared/entity/src/entities/networks.rs +++ b/control-plane/shared/entity/src/entities/networks.rs @@ -11,6 +11,7 @@ pub struct Model { pub overlay_type: String, pub status: String, pub organization_id: Option, + pub resource_group_id: Option, pub created_at: chrono::NaiveDateTime, pub updated_at: Option, } @@ -21,6 +22,14 @@ pub enum Relation { Policies, #[sea_orm(has_many = "super::network_members::Entity")] Members, + #[sea_orm( + belongs_to = "super::resource_groups::Entity", + from = "Column::ResourceGroupId", + to = "super::resource_groups::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + ResourceGroup, } impl Related for Entity { @@ -35,4 +44,10 @@ impl Related for Entity { } } +impl Related for Entity { + fn to() -> RelationDef { + Relation::ResourceGroup.def() + } +} + impl ActiveModelBehavior for ActiveModel {} diff --git a/control-plane/shared/entity/src/entities/resource_groups.rs b/control-plane/shared/entity/src/entities/resource_groups.rs new file mode 100644 index 00000000..cc63a440 --- /dev/null +++ b/control-plane/shared/entity/src/entities/resource_groups.rs @@ -0,0 +1,59 @@ +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize, Deserialize)] +#[sea_orm(table_name = "resource_groups")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: Uuid, + pub organization_id: Uuid, + pub name: String, + pub description: Option, + pub internal_cidr: String, + pub status: String, + pub created_at: chrono::NaiveDateTime, + pub updated_at: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::organization::Entity", + from = "Column::OrganizationId", + to = "super::organization::Column::Id", + on_delete = "Cascade" + )] + Organization, + #[sea_orm(has_many = "super::workloads::Entity")] + Workloads, + #[sea_orm(has_many = "super::volumes::Entity")] + Volumes, + #[sea_orm(has_many = "super::networks::Entity")] + Networks, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Organization.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Workloads.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Volumes.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Networks.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/control-plane/shared/entity/src/entities/volumes.rs b/control-plane/shared/entity/src/entities/volumes.rs index c29f7498..2eb6a6d6 100644 --- a/control-plane/shared/entity/src/entities/volumes.rs +++ b/control-plane/shared/entity/src/entities/volumes.rs @@ -15,6 +15,7 @@ pub struct Model { pub attached_to_workload: Option, pub mapped_device: Option, pub organization_id: Option, + pub resource_group_id: Option, pub created_at: chrono::NaiveDateTime, pub updated_at: Option, } @@ -29,6 +30,14 @@ pub enum Relation { Agent, #[sea_orm(has_many = "super::volume_snapshots::Entity")] Snapshots, + #[sea_orm( + belongs_to = "super::resource_groups::Entity", + from = "Column::ResourceGroupId", + to = "super::resource_groups::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + ResourceGroup, } impl Related for Entity { @@ -43,4 +52,10 @@ impl Related for Entity { } } +impl Related for Entity { + fn to() -> RelationDef { + Relation::ResourceGroup.def() + } +} + impl ActiveModelBehavior for ActiveModel {} diff --git a/control-plane/shared/entity/src/entities/workloads.rs b/control-plane/shared/entity/src/entities/workloads.rs index d86d7d34..27c97d5c 100644 --- a/control-plane/shared/entity/src/entities/workloads.rs +++ b/control-plane/shared/entity/src/entities/workloads.rs @@ -18,6 +18,7 @@ pub struct Model { pub container_id: Option, pub created_by: Option, pub organization_id: Option, + pub resource_group_id: Option, pub created_at: DateTime, pub updated_at: Option, } @@ -32,6 +33,14 @@ pub enum Relation { on_delete = "SetNull" )] Agent, + #[sea_orm( + belongs_to = "super::resource_groups::Entity", + from = "Column::ResourceGroupId", + to = "super::resource_groups::Column::Id", + on_update = "NoAction", + on_delete = "SetNull" + )] + ResourceGroup, } impl Related for Entity { @@ -40,4 +49,10 @@ impl Related for Entity { } } +impl Related for Entity { + fn to() -> RelationDef { + Relation::ResourceGroup.def() + } +} + impl ActiveModelBehavior for ActiveModel {} diff --git a/control-plane/shared/migration/src/lib.rs b/control-plane/shared/migration/src/lib.rs index 5bf75d02..7764dad3 100644 --- a/control-plane/shared/migration/src/lib.rs +++ b/control-plane/shared/migration/src/lib.rs @@ -18,6 +18,7 @@ mod m20260307_000000_add_networks; mod m20260308_000000_add_org_scoping; mod m20260309_000000_add_bootstrap_tokens; mod m20260523_000000_add_ssh_keys; +mod m20260625_000000_add_resource_groups; pub struct Migrator; @@ -43,6 +44,7 @@ impl MigratorTrait for Migrator { Box::new(m20260308_000000_add_org_scoping::Migration), Box::new(m20260309_000000_add_bootstrap_tokens::Migration), Box::new(m20260523_000000_add_ssh_keys::Migration), + Box::new(m20260625_000000_add_resource_groups::Migration), ] } } diff --git a/control-plane/shared/migration/src/m20260625_000000_add_resource_groups.rs b/control-plane/shared/migration/src/m20260625_000000_add_resource_groups.rs new file mode 100644 index 00000000..a862ff88 --- /dev/null +++ b/control-plane/shared/migration/src/m20260625_000000_add_resource_groups.rs @@ -0,0 +1,190 @@ +use sea_orm_migration::prelude::*; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .table(ResourceGroups::Table) + .if_not_exists() + .col(ColumnDef::new(ResourceGroups::Id).uuid().not_null().primary_key()) + .col(ColumnDef::new(ResourceGroups::OrganizationId).uuid().not_null()) + .col(ColumnDef::new(ResourceGroups::Name).string().not_null()) + .col(ColumnDef::new(ResourceGroups::Description).string().null()) + .col(ColumnDef::new(ResourceGroups::InternalCidr).string().not_null()) + .col(ColumnDef::new(ResourceGroups::Status).string().not_null().default("active")) + .col(ColumnDef::new(ResourceGroups::CreatedAt).date_time().not_null()) + .col(ColumnDef::new(ResourceGroups::UpdatedAt).date_time().null()) + .foreign_key( + ForeignKey::create() + .from(ResourceGroups::Table, ResourceGroups::OrganizationId) + .to(Organization::Table, Organization::Id) + .on_delete(ForeignKeyAction::Cascade), + ) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Workloads::Table) + .add_column(ColumnDef::new(Workloads::ResourceGroupId).uuid().null()) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Volumes::Table) + .add_column(ColumnDef::new(Volumes::ResourceGroupId).uuid().null()) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Networks::Table) + .add_column(ColumnDef::new(Networks::ResourceGroupId).uuid().null()) + .to_owned(), + ) + .await?; + + manager + .create_index( + Index::create() + .table(ResourceGroups::Table) + .col(ResourceGroups::OrganizationId) + .name("idx_resource_groups_organization_id") + .to_owned(), + ) + .await?; + + manager + .create_index( + Index::create() + .table(Workloads::Table) + .col(Workloads::ResourceGroupId) + .name("idx_workloads_resource_group_id") + .to_owned(), + ) + .await?; + + manager + .create_index( + Index::create() + .table(Volumes::Table) + .col(Volumes::ResourceGroupId) + .name("idx_volumes_resource_group_id") + .to_owned(), + ) + .await?; + + manager + .create_index( + Index::create() + .table(Networks::Table) + .col(Networks::ResourceGroupId) + .name("idx_networks_resource_group_id") + .to_owned(), + ) + .await?; + + Ok(()) + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_index(Index::drop().name("idx_networks_resource_group_id").to_owned()) + .await?; + manager + .drop_index(Index::drop().name("idx_volumes_resource_group_id").to_owned()) + .await?; + manager + .drop_index(Index::drop().name("idx_workloads_resource_group_id").to_owned()) + .await?; + manager + .drop_index( + Index::drop() + .name("idx_resource_groups_organization_id") + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Networks::Table) + .drop_column(Networks::ResourceGroupId) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Volumes::Table) + .drop_column(Volumes::ResourceGroupId) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Workloads::Table) + .drop_column(Workloads::ResourceGroupId) + .to_owned(), + ) + .await?; + + manager + .drop_table(Table::drop().table(ResourceGroups::Table).to_owned()) + .await?; + + Ok(()) + } +} + +#[derive(DeriveIden)] +enum ResourceGroups { + Table, + Id, + OrganizationId, + Name, + Description, + InternalCidr, + Status, + CreatedAt, + UpdatedAt, +} + +#[derive(DeriveIden)] +enum Organization { + Table, + Id, +} + +#[derive(DeriveIden)] +enum Workloads { + Table, + ResourceGroupId, +} + +#[derive(DeriveIden)] +enum Volumes { + Table, + ResourceGroupId, +} + +#[derive(DeriveIden)] +enum Networks { + Table, + ResourceGroupId, +} diff --git a/control-plane/volume-manager/src/db/volumes.rs b/control-plane/volume-manager/src/db/volumes.rs index 7e6921a3..52733ae1 100644 --- a/control-plane/volume-manager/src/db/volumes.rs +++ b/control-plane/volume-manager/src/db/volumes.rs @@ -31,6 +31,7 @@ pub async fn create( attached_to_workload: Set(None), mapped_device: Set(None), organization_id: Set(None), + resource_group_id: Set(req.resource_group_id), created_at: Set(Utc::now().naive_utc()), updated_at: Set(None), }; @@ -140,6 +141,7 @@ pub fn into_response(m: volumes::Model) -> VolumeResponse { attached_to_agent: m.attached_to_agent, attached_to_workload: m.attached_to_workload, mapped_device: m.mapped_device, + resource_group_id: m.resource_group_id, created_at: m.created_at.and_utc(), updated_at: m.updated_at.map(|dt| dt.and_utc()), } diff --git a/control-plane/volume-manager/src/models/volume.rs b/control-plane/volume-manager/src/models/volume.rs index 9e3d8434..2192cd2b 100644 --- a/control-plane/volume-manager/src/models/volume.rs +++ b/control-plane/volume-manager/src/models/volume.rs @@ -62,6 +62,7 @@ pub struct CreateVolumeRequest { pub name: String, pub size_gb: i32, pub pool: Option, + pub resource_group_id: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -86,6 +87,7 @@ pub struct VolumeResponse { pub attached_to_agent: Option, pub attached_to_workload: Option, pub mapped_device: Option, + pub resource_group_id: Option, pub created_at: DateTime, pub updated_at: Option>, } From b1cb885b283d785190683537bc40100ade67d0b9 Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Thu, 25 Jun 2026 21:35:31 +0200 Subject: [PATCH 03/30] fix: build errors and added frontend --- app/src/lib/api/resource-groups.ts | 50 +++++ .../lib/components/sidebar/app-sidebar.svelte | 2 +- .../routes/(app)/resource-groups/+page.svelte | 203 ++++++++++++++++++ 3 files changed, 254 insertions(+), 1 deletion(-) create mode 100644 app/src/lib/api/resource-groups.ts create mode 100644 app/src/routes/(app)/resource-groups/+page.svelte diff --git a/app/src/lib/api/resource-groups.ts b/app/src/lib/api/resource-groups.ts new file mode 100644 index 00000000..11b340e9 --- /dev/null +++ b/app/src/lib/api/resource-groups.ts @@ -0,0 +1,50 @@ +const API_BASE = '/api'; + +export interface ResourceGroup { + id: string; + organization_id: string; + name: string; + description: string | null; + internal_cidr: string; + status: string; + created_at: string; + updated_at: string | null; +} + +export interface CreateResourceGroupRequest { + name: string; + description?: string; + internal_cidr: string; +} + +export async function listResourceGroups(token: string): Promise { + const res = await fetch(`${API_BASE}/resource-groups`, { + headers: { Authorization: `Bearer ${token}` }, + }); + if (!res.ok) throw new Error(`Failed to list resource groups: ${res.status}`); + return res.json(); +} + +export async function createResourceGroup( + token: string, + req: CreateResourceGroupRequest, +): Promise { + const res = await fetch(`${API_BASE}/resource-groups`, { + method: 'POST', + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify(req), + }); + if (!res.ok) throw new Error(`Failed to create resource group: ${res.status}`); + return res.json(); +} + +export async function deleteResourceGroup(token: string, id: string): Promise { + const res = await fetch(`${API_BASE}/resource-groups/${id}`, { + method: 'DELETE', + headers: { Authorization: `Bearer ${token}` }, + }); + if (!res.ok) throw new Error(`Failed to delete resource group: ${res.status}`); +} diff --git a/app/src/lib/components/sidebar/app-sidebar.svelte b/app/src/lib/components/sidebar/app-sidebar.svelte index f46ba238..3376f022 100644 --- a/app/src/lib/components/sidebar/app-sidebar.svelte +++ b/app/src/lib/components/sidebar/app-sidebar.svelte @@ -43,7 +43,7 @@ }, { title: "Resource groups", - url: "#", + url: "/resource-groups", icon: Layers, }, ], diff --git a/app/src/routes/(app)/resource-groups/+page.svelte b/app/src/routes/(app)/resource-groups/+page.svelte new file mode 100644 index 00000000..3131ba42 --- /dev/null +++ b/app/src/routes/(app)/resource-groups/+page.svelte @@ -0,0 +1,203 @@ + + +
+ + / + Resource Groups +
+ +
+
+
+

Resource Groups

+

+ Isolated namespaces with dedicated internal networks +

+
+ +
+ + {#if showCreate} +
+

Create Resource Group

+
+
+ + +
+
+ + +
+
+ + +
+
+ {#if createError} +

{createError}

+ {/if} +
+ + +
+
+ {/if} + + {#if error} +

{error}

+ {/if} + +
+ + + + + + + + + + + + + + {#if loading} + + + + {:else if groups.length === 0} + + + + {:else} + {#each groups as group (group.id)} + + + + + + + + + + {/each} + {/if} + +
IDNameCIDRDescriptionStatusCreated
Loading...
+ No resource groups. Create one to get started. +
{group.id.slice(0, 8)}{group.name}{group.internal_cidr}{group.description ?? "-"} + {group.status} + {group.created_at.slice(0, 10)} + +
+
+
From 7b32db8ee1dacf56062f96dee4f1649048f13464 Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Sun, 28 Jun 2026 20:52:31 +0200 Subject: [PATCH 04/30] feat(resource-groups): add container deploy, volume management, and detail view --- agent/src/client.rs | 7 + agent/src/docker.rs | 21 + agent/src/main.rs | 22 +- app/src/lib/api/resource-groups.ts | 128 +++++ .../routes/(app)/resource-groups/+page.svelte | 8 +- .../(app)/resource-groups/[id]/+page.svelte | 531 ++++++++++++++++++ control-plane/scheduler/src/db/workloads.rs | 11 + .../scheduler/src/models/workload.rs | 8 + .../shared/entity/src/entities/workloads.rs | 1 + control-plane/shared/migration/src/lib.rs | 2 + .../src/m20260628_000000_add_volume_mounts.rs | 33 ++ 11 files changed, 769 insertions(+), 3 deletions(-) create mode 100644 app/src/routes/(app)/resource-groups/[id]/+page.svelte create mode 100644 control-plane/shared/migration/src/m20260628_000000_add_volume_mounts.rs diff --git a/agent/src/client.rs b/agent/src/client.rs index d87cfce3..184532eb 100644 --- a/agent/src/client.rs +++ b/agent/src/client.rs @@ -63,6 +63,12 @@ pub struct HeartbeatResponse { pub post_update_heartbeats: Option, } +#[derive(Debug, Deserialize, Clone)] +pub struct VolumeMount { + pub volume_id: String, + pub mount_path: String, +} + #[derive(Debug, Deserialize)] pub struct AssignedWorkload { pub id: String, @@ -73,6 +79,7 @@ pub struct AssignedWorkload { pub disk_bytes: i64, pub env_vars: Option>, pub ports: Option>, + pub volume_mounts: Option>, pub status: String, pub container_id: Option, } diff --git a/agent/src/docker.rs b/agent/src/docker.rs index 7ca8262d..fbcda9a9 100644 --- a/agent/src/docker.rs +++ b/agent/src/docker.rs @@ -16,6 +16,12 @@ pub struct PortMapping { pub protocol: Option, } +#[derive(Debug, Clone)] +pub struct VolumeMount { + pub volume_id: String, + pub mount_path: String, +} + #[derive(Debug, Clone)] pub struct WorkloadSpec { pub workload_id: String, @@ -23,6 +29,7 @@ pub struct WorkloadSpec { pub image: String, pub env_vars: Option>, pub ports: Option>, + pub volume_mounts: Option>, } pub struct DockerManager { @@ -79,12 +86,26 @@ impl DockerManager { let (port_bindings, exposed_ports) = build_port_config(spec.ports.as_deref()); + let binds = spec.volume_mounts.as_deref().map(|mounts| { + mounts + .iter() + .map(|m| { + format!( + "{}:{}", + crate::rbd::mount_point_for(&m.volume_id), + m.mount_path + ) + }) + .collect::>() + }); + let host_config = HostConfig { port_bindings: if port_bindings.is_empty() { None } else { Some(port_bindings) }, + binds, ..Default::default() }; diff --git a/agent/src/main.rs b/agent/src/main.rs index 9a37e110..60454f18 100644 --- a/agent/src/main.rs +++ b/agent/src/main.rs @@ -201,7 +201,7 @@ async fn run_heartbeat_loop( process_volumes(client, agent_id, api_key, &mounted_volumes).await; if let Some(ref dm) = docker { - process_workloads(client, api_key, dm, &running_containers).await; + process_workloads(client, api_key, dm, &running_containers, &mounted_volumes).await; } let statuses = build_container_statuses(&running_containers).await; @@ -324,6 +324,7 @@ async fn process_workloads( api_key: &str, docker: &docker::DockerManager, running_containers: &Arc>>, + mounted_volumes: &Arc>>, ) { let workloads = match client.fetch_assigned_workloads(api_key).await { Ok(w) => w, @@ -347,12 +348,31 @@ async fn process_workloads( continue; } + if let Some(ref mounts) = workload.volume_mounts { + let locked = mounted_volumes.lock().await; + let all_ready = mounts.iter().all(|m| locked.contains_key(&m.volume_id)); + drop(locked); + if !all_ready { + info!(workload_id = %workload.id, "Waiting for volumes to be mounted, deferring workload"); + continue; + } + } + let spec = docker::WorkloadSpec { workload_id: workload.id.clone(), name: workload.name.clone(), image: workload.image.clone(), env_vars: workload.env_vars, ports: workload.ports, + volume_mounts: workload.volume_mounts.map(|mounts| { + mounts + .into_iter() + .map(|m| docker::VolumeMount { + volume_id: m.volume_id, + mount_path: m.mount_path, + }) + .collect() + }), }; match docker.start_container(&spec).await { diff --git a/app/src/lib/api/resource-groups.ts b/app/src/lib/api/resource-groups.ts index 11b340e9..2bd82fec 100644 --- a/app/src/lib/api/resource-groups.ts +++ b/app/src/lib/api/resource-groups.ts @@ -17,6 +17,62 @@ export interface CreateResourceGroupRequest { internal_cidr: string; } +export interface PortMapping { + host_port: number; + container_port: number; + protocol: string | null; +} + +export interface VolumeMount { + volume_id: string; + mount_path: string; +} + +export interface Volume { + id: string; + name: string; + size_gb: number; + pool: string; + status: string; + attached_to_workload: string | null; + resource_group_id: string | null; + created_at: string; +} + +export interface Workload { + id: string; + name: string; + image: string; + cpu_millicores: number; + memory_bytes: number; + disk_bytes: number; + status: string; + assigned_agent_id: string | null; + container_id: string | null; + volume_mounts: VolumeMount[] | null; + resource_group_id: string | null; + created_at: string; + updated_at: string | null; +} + +export interface CreateWorkloadRequest { + name: string; + image: string; + cpu_millicores: number; + memory_bytes: number; + disk_bytes: number; + env_vars: Record | null; + ports: PortMapping[] | null; + volume_mounts: VolumeMount[] | null; + resource_group_id: string; +} + +export interface CreateVolumeRequest { + name: string; + size_gb: number; + resource_group_id: string; +} + export async function listResourceGroups(token: string): Promise { const res = await fetch(`${API_BASE}/resource-groups`, { headers: { Authorization: `Bearer ${token}` }, @@ -25,6 +81,14 @@ export async function listResourceGroups(token: string): Promise { + const res = await fetch(`${API_BASE}/resource-groups/${id}`, { + headers: { Authorization: `Bearer ${token}` }, + }); + if (!res.ok) throw new Error(`Failed to get resource group: ${res.status}`); + return res.json(); +} + export async function createResourceGroup( token: string, req: CreateResourceGroupRequest, @@ -48,3 +112,67 @@ export async function deleteResourceGroup(token: string, id: string): Promise { + const res = await fetch(`${API_BASE}/resource-groups/${rgId}/workloads`, { + headers: { Authorization: `Bearer ${token}` }, + }); + if (!res.ok) throw new Error(`Failed to list workloads: ${res.status}`); + return res.json(); +} + +export async function createWorkload(token: string, req: CreateWorkloadRequest): Promise<{ workload_id: string; status: string; assigned_agent_id: string | null; message: string }> { + const res = await fetch(`${API_BASE}/workloads`, { + method: 'POST', + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify(req), + }); + if (!res.ok) { + const err = await res.json().catch(() => ({ error: res.status })); + throw new Error(err.error ?? `Failed to create workload: ${res.status}`); + } + return res.json(); +} + +export async function deleteWorkload(token: string, id: string): Promise { + const res = await fetch(`${API_BASE}/workloads/${id}`, { + method: 'DELETE', + headers: { Authorization: `Bearer ${token}` }, + }); + if (!res.ok) throw new Error(`Failed to delete workload: ${res.status}`); +} + +export async function listResourceGroupVolumes(token: string, rgId: string): Promise { + const res = await fetch(`${API_BASE}/resource-groups/${rgId}/volumes`, { + headers: { Authorization: `Bearer ${token}` }, + }); + if (!res.ok) throw new Error(`Failed to list volumes: ${res.status}`); + return res.json(); +} + +export async function createVolume(token: string, req: CreateVolumeRequest): Promise { + const res = await fetch(`${API_BASE}/volumes`, { + method: 'POST', + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify(req), + }); + if (!res.ok) { + const err = await res.json().catch(() => ({ error: res.status })); + throw new Error(err.error ?? `Failed to create volume: ${res.status}`); + } + return res.json(); +} + +export async function deleteVolume(token: string, id: string): Promise { + const res = await fetch(`${API_BASE}/volumes/${id}`, { + method: 'DELETE', + headers: { Authorization: `Bearer ${token}` }, + }); + if (!res.ok) throw new Error(`Failed to delete volume: ${res.status}`); +} diff --git a/app/src/routes/(app)/resource-groups/+page.svelte b/app/src/routes/(app)/resource-groups/+page.svelte index 3131ba42..d6f1ddbb 100644 --- a/app/src/routes/(app)/resource-groups/+page.svelte +++ b/app/src/routes/(app)/resource-groups/+page.svelte @@ -1,5 +1,6 @@ + +
+ + / + + / + {group?.name ?? rgId.slice(0, 8)} +
+ +
+ {#if loading} +

Loading...

+ {:else if error && !group} +

{error}

+ {:else if group} +
+
+ {initials(group.name)} +
+
+
+

{group.name}

+ {group.status} +
+ {#if group.description} +

{group.description}

+ {/if} +

{group.internal_cidr}

+
+
+ + +
+
+ +
+
+

Containers

+

{workloads.length}

+

{workloads.filter(w => w.status === 'running').length} running

+
+
+

Volumes

+

{volumes.length}

+

{totalDisk} GB total

+
+
+

CPU Requested

+

{(totalCpu / 1000).toFixed(1)}

+

vCPU

+
+
+

Memory Requested

+

{fmtBytes(totalMem)}

+

across containers

+
+
+ + {#if showDeployContainer} +
+

Deploy Container

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ {#if volumes.length > 0} +
+ + +

Available: {volumes.map(v => v.name).join(", ")}

+
+ {/if} +
+ + +
+ {#if deployError} +

{deployError}

+ {/if} +
+ + +
+
+ {/if} + + {#if showCreateVolume} +
+

Create Volume

+
+
+ + +
+
+ + +
+
+ {#if volumeError} +

{volumeError}

+ {/if} +
+ + +
+
+ {/if} + + {#if error} +

{error}

+ {/if} + +
+
+
+ {#each [["all", `All ${allResources.length}`], ["container", `Container ${workloads.length}`], ["volume", `Volume ${volumes.length}`]] as [tab, label]} + + {/each} +
+
+ + +
+
+ + + + + + + + + + + + + + {#if filteredResources.length === 0} + + + + {:else} + {#each filteredResources as item (item.kind + item.data.id)} + {#if item.kind === "container"} + {@const w = item.data} + + + + + + + + + {:else} + {@const v = item.data} + + + + + + + + + {/if} + {/each} + {/if} + +
ResourceKindHost / SizeLoadStatus
+ {allResources.length === 0 ? "No resources yet. Deploy a container or create a volume." : "No resources match filter."} +
+
+
+ +
+
+

{w.name}

+

{w.image}

+
+
+
+ Container + + {w.assigned_agent_id ? w.assigned_agent_id.slice(0, 8) : "-"} + +
+ {w.cpu_millicores}m +
+
+
+
+
+ + {w.status} + + + +
+
+
+ +
+
+

{v.name}

+

{v.size_gb} GB · {v.pool}

+
+
+
+ Volume + + {v.size_gb} GB + +
+ {v.size_gb}G +
+
+
+
+
+ + {v.status} + + + +
+
+ {/if} +
diff --git a/control-plane/scheduler/src/db/workloads.rs b/control-plane/scheduler/src/db/workloads.rs index ff497e05..8ea7d69d 100644 --- a/control-plane/scheduler/src/db/workloads.rs +++ b/control-plane/scheduler/src/db/workloads.rs @@ -17,6 +17,10 @@ pub async fn create( .ports .as_ref() .and_then(|p| serde_json::to_value(p).ok()); + let volume_mounts = req + .volume_mounts + .as_ref() + .and_then(|v| serde_json::to_value(v).ok()); let model = workloads::ActiveModel { id: Set(Uuid::new_v4()), @@ -27,6 +31,7 @@ pub async fn create( disk_bytes: Set(req.disk_bytes), env_vars: Set(env_vars), ports: Set(ports), + volume_mounts: Set(volume_mounts), status: Set(WorkloadStatus::Pending.as_str().to_string()), assigned_agent_id: Set(None), container_id: Set(None), @@ -94,6 +99,11 @@ pub async fn delete(db: &DatabaseConnection, workload_id: Uuid) -> Result<(), se } fn into_response(m: workloads::Model) -> WorkloadResponse { + let volume_mounts = m + .volume_mounts + .as_ref() + .and_then(|v| serde_json::from_value(v.clone()).ok()); + WorkloadResponse { id: m.id, name: m.name, @@ -104,6 +114,7 @@ fn into_response(m: workloads::Model) -> WorkloadResponse { status: WorkloadStatus::from_str(&m.status), assigned_agent_id: m.assigned_agent_id, container_id: m.container_id, + volume_mounts, resource_group_id: m.resource_group_id, created_at: m.created_at.and_utc(), updated_at: m.updated_at.map(|dt| dt.and_utc()), diff --git a/control-plane/scheduler/src/models/workload.rs b/control-plane/scheduler/src/models/workload.rs index 47ecf109..4b1f9fbb 100644 --- a/control-plane/scheduler/src/models/workload.rs +++ b/control-plane/scheduler/src/models/workload.rs @@ -35,6 +35,12 @@ impl WorkloadStatus { } } +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct VolumeMount { + pub volume_id: Uuid, + pub mount_path: String, +} + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct CreateWorkloadRequest { pub name: String, @@ -44,6 +50,7 @@ pub struct CreateWorkloadRequest { pub disk_bytes: i64, pub env_vars: Option>, pub ports: Option>, + pub volume_mounts: Option>, pub resource_group_id: Option, } @@ -73,6 +80,7 @@ pub struct WorkloadResponse { pub status: WorkloadStatus, pub assigned_agent_id: Option, pub container_id: Option, + pub volume_mounts: Option>, pub resource_group_id: Option, pub created_at: DateTime, pub updated_at: Option>, diff --git a/control-plane/shared/entity/src/entities/workloads.rs b/control-plane/shared/entity/src/entities/workloads.rs index 27c97d5c..b4c662d9 100644 --- a/control-plane/shared/entity/src/entities/workloads.rs +++ b/control-plane/shared/entity/src/entities/workloads.rs @@ -13,6 +13,7 @@ pub struct Model { pub disk_bytes: i64, pub env_vars: Option, pub ports: Option, + pub volume_mounts: Option, pub status: String, pub assigned_agent_id: Option, pub container_id: Option, diff --git a/control-plane/shared/migration/src/lib.rs b/control-plane/shared/migration/src/lib.rs index 7764dad3..c05f5298 100644 --- a/control-plane/shared/migration/src/lib.rs +++ b/control-plane/shared/migration/src/lib.rs @@ -19,6 +19,7 @@ mod m20260308_000000_add_org_scoping; mod m20260309_000000_add_bootstrap_tokens; mod m20260523_000000_add_ssh_keys; mod m20260625_000000_add_resource_groups; +mod m20260628_000000_add_volume_mounts; pub struct Migrator; @@ -45,6 +46,7 @@ impl MigratorTrait for Migrator { Box::new(m20260309_000000_add_bootstrap_tokens::Migration), Box::new(m20260523_000000_add_ssh_keys::Migration), Box::new(m20260625_000000_add_resource_groups::Migration), + Box::new(m20260628_000000_add_volume_mounts::Migration), ] } } diff --git a/control-plane/shared/migration/src/m20260628_000000_add_volume_mounts.rs b/control-plane/shared/migration/src/m20260628_000000_add_volume_mounts.rs new file mode 100644 index 00000000..450fb41e --- /dev/null +++ b/control-plane/shared/migration/src/m20260628_000000_add_volume_mounts.rs @@ -0,0 +1,33 @@ +use sea_orm_migration::prelude::*; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .alter_table( + Table::alter() + .table(Alias::new("workloads")) + .add_column_if_not_exists( + ColumnDef::new(Alias::new("volume_mounts")) + .json() + .null(), + ) + .to_owned(), + ) + .await + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .alter_table( + Table::alter() + .table(Alias::new("workloads")) + .drop_column(Alias::new("volume_mounts")) + .to_owned(), + ) + .await + } +} From d8c098b71064d1e3c1ec32e66d21821ab90e63a8 Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Sun, 28 Jun 2026 21:36:27 +0200 Subject: [PATCH 05/30] feat(ui,agent,registry): add WireGuard P2S VPN, modal forms, and NodePort expose model --- Cargo.lock | 14 + Cargo.toml | 1 + agent/Cargo.toml | 2 + agent/src/client.rs | 24 +- agent/src/docker.rs | 23 +- agent/src/main.rs | 7 +- app/src/lib/api/resource-groups.ts | 2 +- .../routes/(app)/resource-groups/+page.svelte | 109 +++---- .../(app)/resource-groups/[id]/+page.svelte | 271 +++++++++++------- app/src/routes/layout.css | 3 + .../api-gateway/src/routes/agents.rs | 2 + .../api-gateway/src/routes/resource_groups.rs | 144 +++++++++- control-plane/api-gateway/src/self_monitor.rs | 2 + control-plane/registry/src/db/agents.rs | 10 + control-plane/registry/src/handlers/agent.rs | 6 +- control-plane/registry/src/models/agent.rs | 2 + .../registry/src/services/registry.rs | 19 +- control-plane/scheduler/src/db/agents.rs | 10 +- .../scheduler/src/models/workload.rs | 2 +- .../scheduler/src/services/scheduler.rs | 40 +++ .../shared/entity/src/entities/agents.rs | 2 + control-plane/shared/migration/src/lib.rs | 2 + ...20260628_100000_rg_cidr_unique_agent_wg.rs | 63 ++++ 23 files changed, 585 insertions(+), 175 deletions(-) create mode 100644 control-plane/shared/migration/src/m20260628_100000_rg_cidr_unique_agent_wg.rs diff --git a/Cargo.lock b/Cargo.lock index 3677127e..d2a46e32 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1175,6 +1175,7 @@ name = "csfx-agent" version = "0.2.2" dependencies = [ "anyhow", + "base64", "bollard", "chrono", "futures-util", @@ -1189,6 +1190,7 @@ dependencies = [ "tracing", "tracing-subscriber", "uuid", + "x25519-dalek", ] [[package]] @@ -6450,6 +6452,18 @@ dependencies = [ "tap", ] +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core 0.6.4", + "serde", + "zeroize", +] + [[package]] name = "x509-parser" version = "0.18.1" diff --git a/Cargo.toml b/Cargo.toml index 2fdf864c..792350f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -88,6 +88,7 @@ tracing-opentelemetry = { version = "0.33" } # Other rand = "0.10" +x25519-dalek = { version = "2", features = ["static_secrets"] } aes-gcm = "0.10" base64 = "0.22" sha1 = "0.11" diff --git a/agent/Cargo.toml b/agent/Cargo.toml index fe7acd4c..0bc5d926 100644 --- a/agent/Cargo.toml +++ b/agent/Cargo.toml @@ -24,3 +24,5 @@ sysinfo = { workspace = true } rcgen = { workspace = true } bollard = { workspace = true } futures-util = { workspace = true } +x25519-dalek = { workspace = true } +base64 = { workspace = true } diff --git a/agent/src/client.rs b/agent/src/client.rs index 184532eb..d9b79271 100644 --- a/agent/src/client.rs +++ b/agent/src/client.rs @@ -1,5 +1,7 @@ use anyhow::{Context, Result}; +use base64::{engine::general_purpose::STANDARD as B64, Engine}; use reqwest::Client; +use ring::rand::{SecureRandom, SystemRandom}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::time::Duration; @@ -48,6 +50,8 @@ struct HeartbeatRequest { network_rx_bytes: Option, network_tx_bytes: Option, uptime_seconds: Option, + wg_public_key: Option, + wg_endpoint: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] @@ -88,10 +92,24 @@ pub struct ApiClient { client: Client, gateway_url: String, cert_pem: Option, + wg_public_key: String, + wg_endpoint: Option, +} + +pub fn generate_wg_keypair() -> (String, String) { + let rng = SystemRandom::new(); + let mut private_bytes = [0u8; 32]; + rng.fill(&mut private_bytes).expect("failed to generate WireGuard key"); + private_bytes[0] &= 248; + private_bytes[31] &= 127; + private_bytes[31] |= 64; + let secret = x25519_dalek::StaticSecret::from(private_bytes); + let public = x25519_dalek::PublicKey::from(&secret); + (B64.encode(private_bytes), B64.encode(public.to_bytes())) } impl ApiClient { - pub fn new(gateway_url: String) -> Result { + pub fn new(gateway_url: String, wg_public_key: String, wg_endpoint: Option) -> Result { let client = Client::builder() .timeout(std::time::Duration::from_secs(30)) .danger_accept_invalid_certs(true) @@ -102,6 +120,8 @@ impl ApiClient { client, gateway_url, cert_pem: None, + wg_public_key, + wg_endpoint, }) } @@ -221,6 +241,8 @@ impl ApiClient { network_rx_bytes, network_tx_bytes, uptime_seconds, + wg_public_key: Some(self.wg_public_key.clone()), + wg_endpoint: self.wg_endpoint.clone(), }); if let Some(ref cert_pem) = self.cert_pem { diff --git a/agent/src/docker.rs b/agent/src/docker.rs index fbcda9a9..702da354 100644 --- a/agent/src/docker.rs +++ b/agent/src/docker.rs @@ -11,9 +11,9 @@ use tracing::{info, warn}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct PortMapping { - pub host_port: u16, pub container_port: u16, pub protocol: Option, + pub node_port: Option, } #[derive(Debug, Clone)] @@ -181,16 +181,17 @@ fn build_port_config( for p in ports { let proto = p.protocol.as_deref().unwrap_or("tcp"); let container_key = format!("{}/{}", p.container_port, proto); - - port_bindings.insert( - container_key.clone(), - Some(vec![bollard::models::PortBinding { - host_ip: Some("0.0.0.0".to_string()), - host_port: Some(p.host_port.to_string()), - }]), - ); - - exposed_ports.push(container_key); + exposed_ports.push(container_key.clone()); + + if let Some(node_port) = p.node_port { + port_bindings.insert( + container_key, + Some(vec![bollard::models::PortBinding { + host_ip: Some("0.0.0.0".to_string()), + host_port: Some(node_port.to_string()), + }]), + ); + } } } diff --git a/agent/src/main.rs b/agent/src/main.rs index 60454f18..a7d6cac5 100644 --- a/agent/src/main.rs +++ b/agent/src/main.rs @@ -51,8 +51,11 @@ async fn main() -> Result<()> { .and_then(|v| v.parse().ok()) .unwrap_or(60); - let api_client = - client::ApiClient::new(gateway_url.clone()).context("Failed to initialize API client")?; + let wg_endpoint = std::env::var("CSFX_WG_ENDPOINT").ok(); + let (_wg_private_key, wg_public_key) = client::generate_wg_keypair(); + + let api_client = client::ApiClient::new(gateway_url.clone(), wg_public_key, wg_endpoint) + .context("Failed to initialize API client")?; let agent_pki = pki::AgentPki::load_or_generate().context("Failed to initialize PKI")?; diff --git a/app/src/lib/api/resource-groups.ts b/app/src/lib/api/resource-groups.ts index 2bd82fec..9ef94e8a 100644 --- a/app/src/lib/api/resource-groups.ts +++ b/app/src/lib/api/resource-groups.ts @@ -18,9 +18,9 @@ export interface CreateResourceGroupRequest { } export interface PortMapping { - host_port: number; container_port: number; protocol: string | null; + node_port: number | null; } export interface VolumeMount { diff --git a/app/src/routes/(app)/resource-groups/+page.svelte b/app/src/routes/(app)/resource-groups/+page.svelte index d6f1ddbb..21a6c3bf 100644 --- a/app/src/routes/(app)/resource-groups/+page.svelte +++ b/app/src/routes/(app)/resource-groups/+page.svelte @@ -15,7 +15,7 @@ let loading = $state(true); let error = $state(null); let creating = $state(false); - let showCreate = $state(false); + let createDialog = $state(null); let newName = $state(""); let newCidr = $state("10.100.0.0/24"); @@ -44,7 +44,7 @@ internal_cidr: newCidr, }); groups = [...groups, created]; - showCreate = false; + createDialog?.close(); newName = ""; newCidr = "10.100.0.0/24"; newDescription = ""; @@ -77,6 +77,63 @@ onMount(load); + { createError = null; }} +> +
+
+

New Resource Group

+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ {#if createError} +

{createError}

+ {/if} +
+ + +
+
+
+
/ @@ -91,7 +148,7 @@ Isolated namespaces with dedicated internal networks

- - {#if showCreate} -
-

Create Resource Group

-
-
- - -
-
- - -
-
- - -
-
- {#if createError} -

{createError}

- {/if} -
- - -
-
- {/if} - {#if error}

{error}

{/if} diff --git a/app/src/routes/(app)/resource-groups/[id]/+page.svelte b/app/src/routes/(app)/resource-groups/[id]/+page.svelte index 90f97c80..51da30d1 100644 --- a/app/src/routes/(app)/resource-groups/[id]/+page.svelte +++ b/app/src/routes/(app)/resource-groups/[id]/+page.svelte @@ -31,12 +31,13 @@ let activeTab = $state<"all" | "container" | "volume">("all"); let filterText = $state(""); - let showDeployContainer = $state(false); - let showCreateVolume = $state(false); + let deployDialog = $state(null); + let volumeDialog = $state(null); let deploying = $state(false); let creatingVolume = $state(false); let deployError = $state(null); let volumeError = $state(null); + let downloadingVpn = $state(false); let formImage = $state(""); let formName = $state(""); @@ -80,9 +81,24 @@ if (!raw.trim()) return null; const result: PortMapping[] = []; for (const part of raw.trim().split(",")) { - const m = part.trim().match(/^(\d+):(\d+)(?:\/(tcp|udp))?$/); - if (!m) continue; - result.push({ host_port: parseInt(m[1]), container_port: parseInt(m[2]), protocol: m[3] ?? null }); + const t = part.trim(); + const nodePort = t.match(/^(\d+):(\d+)(?:\/(tcp|udp))?$/); + if (nodePort) { + result.push({ + container_port: parseInt(nodePort[2]), + protocol: nodePort[3] ?? null, + node_port: parseInt(nodePort[1]), + }); + continue; + } + const internal = t.match(/^(\d+)(?:\/(tcp|udp))?$/); + if (internal) { + result.push({ + container_port: parseInt(internal[1]), + protocol: internal[2] ?? null, + node_port: null, + }); + } } return result.length ? result : null; } @@ -118,7 +134,7 @@ volume_mounts: parseVolumeMounts(formVolumeMounts), resource_group_id: rgId, }); - showDeployContainer = false; + deployDialog?.close(); resetDeployForm(); workloads = await listResourceGroupWorkloads(auth.token, rgId); } catch (e) { @@ -138,7 +154,7 @@ size_gb: parseInt(volFormSize), resource_group_id: rgId, }); - showCreateVolume = false; + volumeDialog?.close(); volFormName = ""; volFormSize = "10"; volumes = await listResourceGroupVolumes(auth.token, rgId); @@ -169,6 +185,33 @@ } } + async function downloadVpnConfig() { + if (!auth.token) return; + downloadingVpn = true; + try { + const resp = await fetch(`/api/resource-groups/${rgId}/vpn-config`, { + headers: { Authorization: `Bearer ${auth.token}` }, + }); + if (!resp.ok) { + const body = await resp.json().catch(() => ({})); + throw new Error(body.error ?? `HTTP ${resp.status}`); + } + const blob = await resp.blob(); + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + const cd = resp.headers.get("content-disposition") ?? ""; + const fn = cd.match(/filename="([^"]+)"/)?.[1] ?? `csfx-vpn.conf`; + a.href = url; + a.download = fn; + a.click(); + URL.revokeObjectURL(url); + } catch (e) { + error = e instanceof Error ? e.message : "VPN config download failed"; + } finally { + downloadingVpn = false; + } + } + function resetDeployForm() { formImage = ""; formName = ""; @@ -178,6 +221,7 @@ formEnv = ""; formPorts = ""; formVolumeMounts = ""; + deployError = null; } type ResourceItem = @@ -234,6 +278,120 @@ onMount(load); + resetDeployForm()} +> +
+
+

Deploy Container

+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ {#if volumes.length > 0} +
+ + +

Available: {volumes.map(v => v.name).join(", ")}

+
+ {/if} +
+ + +
+ {#if deployError} +

{deployError}

+ {/if} +
+ + +
+
+
+ + { volumeError = null; }} +> +
+
+

Create Volume

+ +
+
+
+ + +
+
+ + +
+
+ {#if volumeError} +

{volumeError}

+ {/if} +
+ + +
+
+
+
/ @@ -267,11 +425,15 @@ {/if}

{group.internal_cidr}

-
- + - @@ -301,95 +463,6 @@
- {#if showDeployContainer} -
-

Deploy Container

-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- {#if volumes.length > 0} -
- - -

Available: {volumes.map(v => v.name).join(", ")}

-
- {/if} -
- - -
- {#if deployError} -

{deployError}

- {/if} -
- - -
-
- {/if} - - {#if showCreateVolume} -
-

Create Volume

-
-
- - -
-
- - -
-
- {#if volumeError} -

{volumeError}

- {/if} -
- - -
-
- {/if} - {#if error}

{error}

{/if} diff --git a/app/src/routes/layout.css b/app/src/routes/layout.css index cf53eeb0..704e1533 100644 --- a/app/src/routes/layout.css +++ b/app/src/routes/layout.css @@ -136,4 +136,7 @@ html { @apply font-sans; } + dialog { + @apply bg-background text-foreground; + } } diff --git a/control-plane/api-gateway/src/routes/agents.rs b/control-plane/api-gateway/src/routes/agents.rs index fbfa1474..c5f1c4d1 100644 --- a/control-plane/api-gateway/src/routes/agents.rs +++ b/control-plane/api-gateway/src/routes/agents.rs @@ -166,6 +166,8 @@ pub async fn register_agent( tags: ActiveValue::Set(registration.tags), capabilities: ActiveValue::Set(None), public_key_pem: ActiveValue::Set(None), + wg_public_key: ActiveValue::Set(None), + wg_endpoint: ActiveValue::Set(None), }; new_agent.insert(&state.db_conn).await.map_err(|e| { diff --git a/control-plane/api-gateway/src/routes/resource_groups.rs b/control-plane/api-gateway/src/routes/resource_groups.rs index ac93567d..559cf8d1 100644 --- a/control-plane/api-gateway/src/routes/resource_groups.rs +++ b/control-plane/api-gateway/src/routes/resource_groups.rs @@ -1,17 +1,20 @@ use axum::{ extract::{Path, State}, - http::StatusCode, - response::{IntoResponse, Json}, + http::{header, StatusCode}, + response::{IntoResponse, Json, Response}, routing::get, Router, }; +use base64::{engine::general_purpose::STANDARD as B64, Engine}; use chrono::Utc; use entity::{ - entities::{networks, resource_groups, volumes, workloads}, - Networks, ResourceGroups, Volumes, Workloads, + entities::{agents, networks, resource_groups, volumes, workloads}, + Agents, Networks, ResourceGroups, Volumes, Workloads, }; +use ring::rand::{SecureRandom, SystemRandom}; use sea_orm::{ ActiveModelTrait, ActiveValue::Set, ColumnTrait, EntityTrait, PaginatorTrait, QueryFilter, + QueryOrder, }; use serde::{Deserialize, Serialize}; use serde_json::json; @@ -90,8 +93,27 @@ pub async fn create_resource_group( Json(req): Json, ) -> Result)> { let org_id = get_org_id(&state); - let now = Utc::now().naive_utc(); + let existing = ResourceGroups::find() + .filter(resource_groups::Column::InternalCidr.eq(&req.internal_cidr)) + .one(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to check cidr uniqueness"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })?; + + if existing.is_some() { + return Err(( + StatusCode::CONFLICT, + Json(json!({ "error": format!("CIDR {} is already in use by another resource group", req.internal_cidr) })), + )); + } + + let now = Utc::now().naive_utc(); let model = resource_groups::ActiveModel { id: Set(Uuid::new_v4()), organization_id: Set(org_id), @@ -332,6 +354,117 @@ pub async fn list_resource_group_networks( Ok((StatusCode::OK, Json(json!(nets)))) } +pub async fn get_vpn_config( + CanViewResourceGroups(_claims): CanViewResourceGroups, + State(state): State, + Path(id): Path, +) -> Result)> { + let org_id = get_org_id(&state); + + let group = ResourceGroups::find_by_id(id) + .filter(resource_groups::Column::OrganizationId.eq(org_id)) + .one(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to get resource group"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })? + .ok_or_else(|| { + ( + StatusCode::NOT_FOUND, + Json(json!({ "error": "resource group not found" })), + ) + })?; + + let gateway_agent = Agents::find() + .filter(agents::Column::Status.eq("Online")) + .filter(agents::Column::WgPublicKey.is_not_null()) + .filter(agents::Column::WgEndpoint.is_not_null()) + .order_by_asc(agents::Column::RegisteredAt) + .one(&state.db_conn) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to find gateway agent"); + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "database error" })), + ) + })? + .ok_or_else(|| { + ( + StatusCode::SERVICE_UNAVAILABLE, + Json(json!({ "error": "no WireGuard-enabled agent online" })), + ) + })?; + + let server_pubkey = gateway_agent.wg_public_key.as_deref().unwrap_or(""); + let endpoint = gateway_agent.wg_endpoint.as_deref().unwrap_or(""); + + let client_private_key = generate_wg_key().map_err(|_| { + ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(json!({ "error": "failed to generate keypair" })), + ) + })?; + + let dns = first_host_ip(&group.internal_cidr).unwrap_or_else(|| "1.1.1.1".to_string()); + + let config = format!( + "[Interface]\nPrivateKey = {client_private_key}\nAddress = {dns}/32\nDNS = {dns}\n\n[Peer]\nPublicKey = {server_pubkey}\nEndpoint = {endpoint}\nAllowedIPs = {cidr}\nPersistentKeepalive = 25\n", + client_private_key = client_private_key, + dns = dns, + server_pubkey = server_pubkey, + endpoint = endpoint, + cidr = group.internal_cidr, + ); + + let filename = format!("csfx-{}.conf", group.name.to_lowercase().replace(' ', "-")); + + Ok(( + StatusCode::OK, + [ + (header::CONTENT_TYPE, "text/plain; charset=utf-8"), + ( + header::CONTENT_DISPOSITION, + &format!("attachment; filename=\"{}\"", filename), + ), + ], + config, + ) + .into_response()) +} + +fn generate_wg_key() -> Result { + let rng = SystemRandom::new(); + let mut key_bytes = [0u8; 32]; + rng.fill(&mut key_bytes)?; + key_bytes[0] &= 248; + key_bytes[31] &= 127; + key_bytes[31] |= 64; + Ok(B64.encode(key_bytes)) +} + +fn first_host_ip(cidr: &str) -> Option { + let parts: Vec<&str> = cidr.split('/').collect(); + if parts.len() != 2 { + return None; + } + let octets: Vec = parts[0] + .split('.') + .filter_map(|o| o.parse().ok()) + .collect(); + if octets.len() != 4 { + return None; + } + let n = u32::from_be_bytes([octets[0], octets[1], octets[2], octets[3]]); + let host = n + 1; + let [a, b, c, d] = host.to_be_bytes(); + Some(format!("{}.{}.{}.{}", a, b, c, d)) +} + pub fn resource_groups_routes() -> Router { Router::new() .route( @@ -354,4 +487,5 @@ pub fn resource_groups_routes() -> Router { "/resource-groups/{id}/networks", get(list_resource_group_networks), ) + .route("/resource-groups/{id}/vpn-config", get(get_vpn_config)) } diff --git a/control-plane/api-gateway/src/self_monitor.rs b/control-plane/api-gateway/src/self_monitor.rs index 9c9604d7..c0d7ace0 100644 --- a/control-plane/api-gateway/src/self_monitor.rs +++ b/control-plane/api-gateway/src/self_monitor.rs @@ -90,6 +90,8 @@ impl SelfMonitor { "self-monitor".to_string(), )]))), public_key_pem: ActiveValue::Set(None), + wg_public_key: ActiveValue::Set(None), + wg_endpoint: ActiveValue::Set(None), }; let agent = new_agent.insert(db_conn.as_ref()).await?; diff --git a/control-plane/registry/src/db/agents.rs b/control-plane/registry/src/db/agents.rs index c23ce15b..263848a4 100644 --- a/control-plane/registry/src/db/agents.rs +++ b/control-plane/registry/src/db/agents.rs @@ -78,6 +78,8 @@ pub async fn create( tags: Set(tags), capabilities: Set(capabilities), public_key_pem: Set(public_key_pem), + wg_public_key: Set(None), + wg_endpoint: Set(None), }; Ok(model.insert(db).await?) @@ -95,6 +97,8 @@ pub async fn update_heartbeat( db: &DatabaseConnection, agent_id: Uuid, status: String, + wg_public_key: Option, + wg_endpoint: Option, ) -> Result<()> { let mut agent: agents::ActiveModel = agents::Entity::find_by_id(agent_id) .one(db) @@ -105,6 +109,12 @@ pub async fn update_heartbeat( agent.last_heartbeat = Set(Some(chrono::Utc::now().naive_utc())); agent.status = Set(status); agent.updated_at = Set(Some(chrono::Utc::now().naive_utc())); + if wg_public_key.is_some() { + agent.wg_public_key = Set(wg_public_key); + } + if wg_endpoint.is_some() { + agent.wg_endpoint = Set(wg_endpoint); + } agent.update(db).await?; Ok(()) diff --git a/control-plane/registry/src/handlers/agent.rs b/control-plane/registry/src/handlers/agent.rs index c6992bd7..eb8f8a9a 100644 --- a/control-plane/registry/src/handlers/agent.rs +++ b/control-plane/registry/src/handlers/agent.rs @@ -208,7 +208,11 @@ pub async fn heartbeat( } } - match state.agent_registry.update_heartbeat(agent_id).await { + match state + .agent_registry + .update_heartbeat(agent_id, request.wg_public_key.clone(), request.wg_endpoint.clone()) + .await + { Ok(_) => { forward_metrics(&state, agent_id, &request).await; diff --git a/control-plane/registry/src/models/agent.rs b/control-plane/registry/src/models/agent.rs index e38537be..ac65f3b5 100644 --- a/control-plane/registry/src/models/agent.rs +++ b/control-plane/registry/src/models/agent.rs @@ -128,6 +128,8 @@ pub struct HeartbeatRequest { pub network_rx_bytes: Option, pub network_tx_bytes: Option, pub uptime_seconds: Option, + pub wg_public_key: Option, + pub wg_endpoint: Option, } #[derive(Debug, Serialize, Deserialize)] diff --git a/control-plane/registry/src/services/registry.rs b/control-plane/registry/src/services/registry.rs index 3df0ec69..73fa39a8 100644 --- a/control-plane/registry/src/services/registry.rs +++ b/control-plane/registry/src/services/registry.rs @@ -209,10 +209,21 @@ impl AgentRegistry { Ok((agent, false)) } - pub async fn update_heartbeat(&self, agent_id: Uuid) -> Result<(), String> { - crate::db::agents::update_heartbeat(&self.db, agent_id, "Online".to_string()) - .await - .map_err(|e| format!("Failed to update heartbeat: {}", e))?; + pub async fn update_heartbeat( + &self, + agent_id: Uuid, + wg_public_key: Option, + wg_endpoint: Option, + ) -> Result<(), String> { + crate::db::agents::update_heartbeat( + &self.db, + agent_id, + "Online".to_string(), + wg_public_key, + wg_endpoint, + ) + .await + .map_err(|e| format!("Failed to update heartbeat: {}", e))?; crate::log_debug!( "agent_registry", diff --git a/control-plane/scheduler/src/db/agents.rs b/control-plane/scheduler/src/db/agents.rs index fba9b0f7..f29eb4a4 100644 --- a/control-plane/scheduler/src/db/agents.rs +++ b/control-plane/scheduler/src/db/agents.rs @@ -1,4 +1,4 @@ -use entity::entities::{agent_metrics, agents}; +use entity::entities::{agent_metrics, agents, volumes}; use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter, QueryOrder}; use uuid::Uuid; @@ -69,3 +69,11 @@ pub async fn get_assigned_workload_resources( Ok((cpu, mem, disk)) } + +pub async fn get_volume_agent( + db: &DatabaseConnection, + volume_id: Uuid, +) -> Result, sea_orm::DbErr> { + let vol = volumes::Entity::find_by_id(volume_id).one(db).await?; + Ok(vol.and_then(|v| v.attached_to_agent)) +} diff --git a/control-plane/scheduler/src/models/workload.rs b/control-plane/scheduler/src/models/workload.rs index 4b1f9fbb..676d178a 100644 --- a/control-plane/scheduler/src/models/workload.rs +++ b/control-plane/scheduler/src/models/workload.rs @@ -56,9 +56,9 @@ pub struct CreateWorkloadRequest { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct PortMapping { - pub host_port: u16, pub container_port: u16, pub protocol: Option, + pub node_port: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/control-plane/scheduler/src/services/scheduler.rs b/control-plane/scheduler/src/services/scheduler.rs index 1835c5fe..8ae77ebc 100644 --- a/control-plane/scheduler/src/services/scheduler.rs +++ b/control-plane/scheduler/src/services/scheduler.rs @@ -43,6 +43,12 @@ impl SchedulerService { agent.free_disk_bytes -= reserved_disk; } + let volume_pinned_agent = self.resolve_volume_affinity(&req).await?; + + if let Some(required_agent) = volume_pinned_agent { + agents.retain(|a| a.agent_id == required_agent); + } + match self.first_fit(&req, &agents) { Some(agent_id) => { crate::db::workloads::assign(&self.db, workload.id, agent_id) @@ -92,6 +98,40 @@ impl SchedulerService { } } + async fn resolve_volume_affinity( + &self, + req: &CreateWorkloadRequest, + ) -> Result, String> { + let mounts = match &req.volume_mounts { + Some(m) if !m.is_empty() => m, + _ => return Ok(None), + }; + + let mut pinned: Option = None; + + for mount in mounts { + let agent_id = + crate::db::agents::get_volume_agent(&self.db, mount.volume_id) + .await + .map_err(|e| format!("Failed to check volume affinity: {}", e))?; + + if let Some(aid) = agent_id { + match pinned { + None => pinned = Some(aid), + Some(existing) if existing != aid => { + return Err(format!( + "Volume mounts require conflicting agents: {} vs {}", + existing, aid + )); + } + _ => {} + } + } + } + + Ok(pinned) + } + fn first_fit(&self, req: &CreateWorkloadRequest, agents: &[AgentResources]) -> Option { let mut sorted: Vec<&AgentResources> = agents.iter().collect(); sorted.sort_by(|a, b| { diff --git a/control-plane/shared/entity/src/entities/agents.rs b/control-plane/shared/entity/src/entities/agents.rs index fe64aeb9..b26103df 100644 --- a/control-plane/shared/entity/src/entities/agents.rs +++ b/control-plane/shared/entity/src/entities/agents.rs @@ -21,6 +21,8 @@ pub struct Model { pub tags: Option, pub capabilities: Option, pub public_key_pem: Option, + pub wg_public_key: Option, + pub wg_endpoint: Option, } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] diff --git a/control-plane/shared/migration/src/lib.rs b/control-plane/shared/migration/src/lib.rs index c05f5298..4365d679 100644 --- a/control-plane/shared/migration/src/lib.rs +++ b/control-plane/shared/migration/src/lib.rs @@ -20,6 +20,7 @@ mod m20260309_000000_add_bootstrap_tokens; mod m20260523_000000_add_ssh_keys; mod m20260625_000000_add_resource_groups; mod m20260628_000000_add_volume_mounts; +mod m20260628_100000_rg_cidr_unique_agent_wg; pub struct Migrator; @@ -47,6 +48,7 @@ impl MigratorTrait for Migrator { Box::new(m20260523_000000_add_ssh_keys::Migration), Box::new(m20260625_000000_add_resource_groups::Migration), Box::new(m20260628_000000_add_volume_mounts::Migration), + Box::new(m20260628_100000_rg_cidr_unique_agent_wg::Migration), ] } } diff --git a/control-plane/shared/migration/src/m20260628_100000_rg_cidr_unique_agent_wg.rs b/control-plane/shared/migration/src/m20260628_100000_rg_cidr_unique_agent_wg.rs new file mode 100644 index 00000000..e1f0eb75 --- /dev/null +++ b/control-plane/shared/migration/src/m20260628_100000_rg_cidr_unique_agent_wg.rs @@ -0,0 +1,63 @@ +use sea_orm_migration::prelude::*; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_index( + Index::create() + .name("idx_resource_groups_cidr_unique") + .table(Alias::new("resource_groups")) + .col(Alias::new("internal_cidr")) + .unique() + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Alias::new("agents")) + .add_column_if_not_exists( + ColumnDef::new(Alias::new("wg_public_key")) + .text() + .null(), + ) + .add_column_if_not_exists( + ColumnDef::new(Alias::new("wg_endpoint")) + .string() + .null(), + ) + .to_owned(), + ) + .await?; + + Ok(()) + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_index( + Index::drop() + .name("idx_resource_groups_cidr_unique") + .table(Alias::new("resource_groups")) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Alias::new("agents")) + .drop_column(Alias::new("wg_public_key")) + .drop_column(Alias::new("wg_endpoint")) + .to_owned(), + ) + .await?; + + Ok(()) + } +} From 6507c18ea49ba8e55270c63109f85d6462cd40d1 Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Tue, 30 Jun 2026 21:15:59 +0200 Subject: [PATCH 06/30] refactor: rm unused code --- .github/workflows/prerelease.yml | 3 +- control-plane/api-gateway/src/auth/crypto.rs | 59 ------------------- control-plane/api-gateway/src/auth/rbac.rs | 9 +-- control-plane/api-gateway/src/metrics.rs | 13 ---- .../api-gateway/src/service_client.rs | 27 --------- 5 files changed, 3 insertions(+), 108 deletions(-) diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 24a6593a..9a920667 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -262,6 +262,7 @@ jobs: with: repository: ${{ github.repository_owner }}/CSFX-Infra token: ${{ secrets.INFRA_REPO_TOKEN }} + ref: develop path: infra - uses: actions/download-artifact@v8 @@ -418,6 +419,6 @@ jobs: git add versions.nix git diff --cached --quiet && echo "no changes" && exit 0 git commit -m "chore: update versions.nix for v${VERSION}" - git push origin main + git push origin develop git tag "v${VERSION}" git push origin "v${VERSION}" diff --git a/control-plane/api-gateway/src/auth/crypto.rs b/control-plane/api-gateway/src/auth/crypto.rs index 42e08d02..2a18426d 100644 --- a/control-plane/api-gateway/src/auth/crypto.rs +++ b/control-plane/api-gateway/src/auth/crypto.rs @@ -78,65 +78,6 @@ pub fn verify_password(password: &str, salt: &str, hashed: &str) -> CryptoResult Ok(verify(salted_password, hashed)?) } -pub fn encrypt_secret(plaintext: &str, key_b64: &str) -> CryptoResult { - use aes_gcm::{ - aead::{Aead, KeyInit}, - Aes256Gcm, Nonce, - }; - let key_bytes = base64::engine::general_purpose::STANDARD - .decode(key_b64) - .map_err(|_| CryptoError::InvalidEncryptedData)?; - if key_bytes.len() != 32 { - return Err(CryptoError::InvalidEncryptedData); - } - - let cipher = - Aes256Gcm::new_from_slice(&key_bytes).map_err(|_| CryptoError::InvalidEncryptedData)?; - let mut nonce_bytes = [0u8; 12]; - OsRng.fill_bytes(&mut nonce_bytes); - let nonce = Nonce::from_slice(&nonce_bytes); - - let ciphertext = cipher - .encrypt(nonce, plaintext.as_bytes()) - .map_err(|_| CryptoError::InvalidEncryptedData)?; - - let mut combined = nonce_bytes.to_vec(); - combined.extend_from_slice(&ciphertext); - Ok(base64::engine::general_purpose::STANDARD.encode(combined)) -} - -pub fn decrypt_secret(encoded: &str, key_b64: &str) -> CryptoResult { - use aes_gcm::{ - aead::{Aead, KeyInit}, - Aes256Gcm, Nonce, - }; - - let key_bytes = base64::engine::general_purpose::STANDARD - .decode(key_b64) - .map_err(|_| CryptoError::InvalidEncryptedData)?; - if key_bytes.len() != 32 { - return Err(CryptoError::InvalidEncryptedData); - } - - let combined = base64::engine::general_purpose::STANDARD - .decode(encoded) - .map_err(|_| CryptoError::InvalidEncryptedData)?; - if combined.len() < 12 { - return Err(CryptoError::InvalidEncryptedData); - } - - let (nonce_bytes, ciphertext) = combined.split_at(12); - let cipher = - Aes256Gcm::new_from_slice(&key_bytes).map_err(|_| CryptoError::InvalidEncryptedData)?; - let nonce = Nonce::from_slice(nonce_bytes); - - let plaintext = cipher - .decrypt(nonce, ciphertext) - .map_err(|_| CryptoError::InvalidEncryptedData)?; - - String::from_utf8(plaintext).map_err(|_| CryptoError::InvalidEncryptedData) -} - pub fn generate_salt() -> String { const CHARSET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ\ abcdefghijklmnopqrstuvwxyz\ diff --git a/control-plane/api-gateway/src/auth/rbac.rs b/control-plane/api-gateway/src/auth/rbac.rs index 9aa5acdf..9d070ef1 100644 --- a/control-plane/api-gateway/src/auth/rbac.rs +++ b/control-plane/api-gateway/src/auth/rbac.rs @@ -8,17 +8,11 @@ use axum::{ http::{request::Parts, StatusCode}, }; use chrono::Utc; -use entity::{InvalidJwt}; +use entity::InvalidJwt; use sea_orm::{ColumnTrait, EntityTrait, QueryFilter}; use uuid::Uuid; -pub struct RequirePermission { - pub claims: Claims, - pub organization_id: Uuid, -} - pub struct CanViewAgents(pub Claims); -pub struct CanManageAgents(pub Claims); pub struct CanViewWorkloads(pub Claims); pub struct CanManageWorkloads(pub Claims); pub struct CanViewVolumes(pub Claims); @@ -114,7 +108,6 @@ macro_rules! impl_extractor { } impl_extractor!(CanViewAgents, "agents", "view"); -impl_extractor!(CanManageAgents, "agents", "manage"); impl_extractor!(CanViewWorkloads, "workloads", "view"); impl_extractor!(CanManageWorkloads, "workloads", "manage"); impl_extractor!(CanViewVolumes, "volumes", "view"); diff --git a/control-plane/api-gateway/src/metrics.rs b/control-plane/api-gateway/src/metrics.rs index 4cbde29a..69bf4797 100644 --- a/control-plane/api-gateway/src/metrics.rs +++ b/control-plane/api-gateway/src/metrics.rs @@ -27,19 +27,6 @@ pub fn init() { }); } -pub fn record_request(method: &str, path: &str, status: u16, duration_secs: f64) { - if let Some(counter) = HTTP_REQUESTS_TOTAL.get() { - counter - .with_label_values(&[method, path, &status.to_string()]) - .inc(); - } - if let Some(histogram) = HTTP_REQUEST_DURATION_SECONDS.get() { - histogram - .with_label_values(&[method, path]) - .observe(duration_secs); - } -} - pub async fn metrics_handler() -> impl IntoResponse { let encoder = TextEncoder::new(); let metric_families = prometheus::gather(); diff --git a/control-plane/api-gateway/src/service_client.rs b/control-plane/api-gateway/src/service_client.rs index dad81e33..b2aa704a 100644 --- a/control-plane/api-gateway/src/service_client.rs +++ b/control-plane/api-gateway/src/service_client.rs @@ -1,6 +1,5 @@ use anyhow::{Context, Result}; use reqwest::{Client, StatusCode}; -use serde::{Deserialize, Serialize}; use std::time::Duration; /// HTTP Client for internal service-to-service communication @@ -335,29 +334,3 @@ impl ServiceClient { Ok((status, json_body)) } } - -// Response types for common registry operations -#[derive(Debug, Serialize, Deserialize)] -pub struct CreateTokenRequest { - pub description: Option, - pub created_by: String, - pub ttl_hours: i64, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct CreateTokenResponse { - pub token_id: String, - pub token: String, - pub expires_at: String, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct ValidateTokenRequest { - pub token: String, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct ValidateTokenResponse { - pub valid: bool, - pub agent_id: Option, -} From 86a2d7c4029d721ae51591c79011fe41d9e7813f Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Tue, 30 Jun 2026 22:04:51 +0200 Subject: [PATCH 07/30] fix(agent): start docker on demand via systemd instead of at boot --- Cargo.lock | 169 ++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + agent/Cargo.toml | 1 + agent/src/docker.rs | 56 ++++++++++++++- agent/src/main.rs | 39 +++++----- 5 files changed, 249 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d2a46e32..dc8abf4b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -305,6 +305,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener 5.4.1", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-channel" version = "1.9.0" @@ -387,6 +399,17 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "async-std" version = "1.13.2" @@ -1191,6 +1214,7 @@ dependencies = [ "tracing-subscriber", "uuid", "x25519-dalek", + "zbus", ] [[package]] @@ -1488,6 +1512,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "endi" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" + [[package]] name = "entity" version = "0.2.2" @@ -1500,6 +1530,27 @@ dependencies = [ "uuid", ] +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.118", +] + [[package]] name = "equator" version = "0.4.2" @@ -3151,6 +3202,16 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + [[package]] name = "ouroboros" version = "0.18.5" @@ -5334,6 +5395,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", + "tracing", "windows-sys 0.61.2", ] @@ -5691,6 +5753,17 @@ version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" +[[package]] +name = "uds_windows" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" +dependencies = [ + "memoffset", + "tempfile", + "windows-sys 0.61.2", +] + [[package]] name = "unicase" version = "2.9.0" @@ -6527,6 +6600,62 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zbus" +version = "5.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" +dependencies = [ + "async-broadcast", + "async-recursion", + "async-trait", + "enumflags2", + "event-listener 5.4.1", + "futures-core", + "futures-lite", + "hex", + "libc", + "ordered-stream", + "rustix 1.1.4", + "serde", + "serde_repr", + "tokio", + "tracing", + "uds_windows", + "uuid", + "windows-sys 0.61.2", + "winnow", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "5.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.118", + "zbus_names", + "zvariant", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" +dependencies = [ + "serde", + "winnow", + "zvariant", +] + [[package]] name = "zerocopy" version = "0.8.52" @@ -6682,3 +6811,43 @@ checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" dependencies = [ "zune-core", ] + +[[package]] +name = "zvariant" +version = "5.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" +dependencies = [ + "endi", + "enumflags2", + "serde", + "winnow", + "zvariant_derive", + "zvariant_utils", +] + +[[package]] +name = "zvariant_derive" +version = "5.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.118", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 2.0.118", + "winnow", +] diff --git a/Cargo.toml b/Cargo.toml index 792350f3..a96b7b0e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -99,6 +99,7 @@ image = "0.25" sysinfo = "0.32" bollard = "0.21" futures-util = "0.3" +zbus = { version = "5", default-features = false, features = ["tokio"] } reqwest = { version = "0.13", default-features = false, features = ["json", "rustls-no-provider", "webpki-roots"] } [profile.release] diff --git a/agent/Cargo.toml b/agent/Cargo.toml index 0bc5d926..f4321e38 100644 --- a/agent/Cargo.toml +++ b/agent/Cargo.toml @@ -24,5 +24,6 @@ sysinfo = { workspace = true } rcgen = { workspace = true } bollard = { workspace = true } futures-util = { workspace = true } +zbus = { workspace = true } x25519-dalek = { workspace = true } base64 = { workspace = true } diff --git a/agent/src/docker.rs b/agent/src/docker.rs index 702da354..5d883000 100644 --- a/agent/src/docker.rs +++ b/agent/src/docker.rs @@ -7,7 +7,15 @@ use bollard::Docker; use futures_util::StreamExt; use serde::{Deserialize, Serialize}; use std::collections::HashMap; +use std::path::Path; +use std::time::Duration; use tracing::{info, warn}; +use zbus::Connection; + +const DOCKER_SOCKET_PATH: &str = "/var/run/docker.sock"; +const DOCKER_UNIT_NAME: &str = "docker.service"; +const DOCKER_START_TIMEOUT: Duration = Duration::from_secs(30); +const DOCKER_SOCKET_POLL_INTERVAL: Duration = Duration::from_millis(200); #[derive(Debug, Clone, Serialize, Deserialize)] pub struct PortMapping { @@ -37,7 +45,12 @@ pub struct DockerManager { } impl DockerManager { - pub fn new() -> Result { + pub async fn ensure_running() -> Result { + if !Path::new(DOCKER_SOCKET_PATH).exists() { + start_docker_unit().await?; + wait_for_socket().await?; + } + let docker = Docker::connect_with_unix_defaults().context("Failed to connect to Docker socket")?; Ok(Self { docker }) @@ -167,6 +180,47 @@ impl DockerManager { } } +async fn start_docker_unit() -> Result<()> { + info!(unit = DOCKER_UNIT_NAME, "Starting Docker via systemd"); + + let connection = Connection::system() + .await + .context("Failed to connect to system D-Bus")?; + + let proxy = zbus::Proxy::new( + &connection, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + ) + .await + .context("Failed to build systemd D-Bus proxy")?; + + proxy + .call_method("StartUnit", &(DOCKER_UNIT_NAME, "replace")) + .await + .context("Failed to call StartUnit for docker.service")?; + + Ok(()) +} + +async fn wait_for_socket() -> Result<()> { + let deadline = tokio::time::Instant::now() + DOCKER_START_TIMEOUT; + + while tokio::time::Instant::now() < deadline { + if Path::new(DOCKER_SOCKET_PATH).exists() { + info!(socket = DOCKER_SOCKET_PATH, "Docker socket available"); + return Ok(()); + } + tokio::time::sleep(DOCKER_SOCKET_POLL_INTERVAL).await; + } + + anyhow::bail!( + "Docker socket did not appear within {}s", + DOCKER_START_TIMEOUT.as_secs() + ) +} + fn build_port_config( ports: Option<&[PortMapping]>, ) -> ( diff --git a/agent/src/main.rs b/agent/src/main.rs index a7d6cac5..003bfea1 100644 --- a/agent/src/main.rs +++ b/agent/src/main.rs @@ -92,16 +92,7 @@ async fn main() -> Result<()> { info!(agent_id = %agent_id, "Agent registered, starting heartbeat loop"); - let docker_manager = match docker::DockerManager::new() { - Ok(dm) => { - info!("Docker socket connected"); - Some(Arc::new(dm)) - } - Err(e) => { - warn!(error = %e, "Docker unavailable, container management disabled"); - None - } - }; + let docker_manager: Arc>> = Arc::new(Mutex::new(None)); let running_containers: Arc>> = Arc::new(Mutex::new(HashMap::new())); @@ -190,7 +181,7 @@ async fn run_heartbeat_loop( agent_id: uuid::Uuid, api_key: &str, interval_secs: u64, - docker: Option>, + docker: Arc>>, running_containers: Arc>>, mounted_volumes: Arc>>, ) { @@ -202,10 +193,7 @@ async fn run_heartbeat_loop( tokio::select! { _ = interval.tick() => { process_volumes(client, agent_id, api_key, &mounted_volumes).await; - - if let Some(ref dm) = docker { - process_workloads(client, api_key, dm, &running_containers, &mounted_volumes).await; - } + process_workloads(client, api_key, &docker, &running_containers, &mounted_volumes).await; let statuses = build_container_statuses(&running_containers).await; let metrics = system::collect_metrics(); @@ -325,7 +313,7 @@ async fn process_volumes( async fn process_workloads( client: &client::ApiClient, api_key: &str, - docker: &docker::DockerManager, + docker: &Arc>>, running_containers: &Arc>>, mounted_volumes: &Arc>>, ) { @@ -337,6 +325,25 @@ async fn process_workloads( } }; + if workloads.is_empty() { + return; + } + + let mut docker_guard = docker.lock().await; + if docker_guard.is_none() { + match docker::DockerManager::ensure_running().await { + Ok(dm) => { + info!("Docker ready"); + *docker_guard = Some(dm); + } + Err(e) => { + warn!(error = %e, "Docker unavailable, deferring workloads"); + return; + } + } + } + let docker = docker_guard.as_ref().expect("docker manager initialized above"); + for workload in workloads { let already_running = running_containers.lock().await.contains_key(&workload.id); From 48190b7863416a061e5ef8ca9e6ad83e46d78e22 Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Wed, 1 Jul 2026 19:48:51 +0200 Subject: [PATCH 08/30] feat: added logo in header for svelte --- app/src/routes/+layout.svelte | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/app/src/routes/+layout.svelte b/app/src/routes/+layout.svelte index 316fbb7e..73aaa73e 100644 --- a/app/src/routes/+layout.svelte +++ b/app/src/routes/+layout.svelte @@ -1,17 +1,20 @@ - + + + + {@render children()} From e37e88bab79d1e3e040c5446250ce93f1fd59d0e Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Wed, 1 Jul 2026 19:56:07 +0200 Subject: [PATCH 09/30] fix: load times on svg main --- app/src/lib/auth/right-panel.svelte | 4 ++-- app/static/gradients/Gradient-dark.svg | 1 - app/static/gradients/Gradient-dark.webp | Bin 0 -> 944788 bytes app/static/gradients/Gradient-light.svg | 1 - app/static/gradients/Gradient-light.webp | Bin 0 -> 1450076 bytes 5 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 app/static/gradients/Gradient-dark.svg create mode 100644 app/static/gradients/Gradient-dark.webp delete mode 100755 app/static/gradients/Gradient-light.svg create mode 100644 app/static/gradients/Gradient-light.webp diff --git a/app/src/lib/auth/right-panel.svelte b/app/src/lib/auth/right-panel.svelte index b1b6a029..b49014e9 100644 --- a/app/src/lib/auth/right-panel.svelte +++ b/app/src/lib/auth/right-panel.svelte @@ -7,12 +7,12 @@ class="relative w-full rounded-3xl overflow-hidden flex flex-col justify-between p-10" > diff --git a/app/static/gradients/Gradient-dark.svg b/app/static/gradients/Gradient-dark.svg deleted file mode 100644 index af49adeb..00000000 --- a/app/static/gradients/Gradient-dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/static/gradients/Gradient-dark.webp b/app/static/gradients/Gradient-dark.webp new file mode 100644 index 0000000000000000000000000000000000000000..124c75648599bea74435eacaecf2c823bb6afcbb GIT binary patch literal 944788 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

0I_ci{jBI9iQ{9K;5h3e zVKY<`(ow(Rb7F97v1?;5ZS+KsY3xrrd)At|ZIR{S7Jq`hPmq0=I@91W^$=;;xQ~a3+`@P6_sjw=3AN$RV3I6|H`NzhH zU;f)PQ5ya~GxNU`{m1ren*3$+I9bChFw;F|e5#cJ69=s{)nqduiX~0+?n1>X1h1_g z()d>`v)a@tr?hy#A=Znh>&^S_rDLS;#blXLG&BRp^)g+aUhDv&^cbwcTD%nwMca8NE!yl!d#{`pLvUIOE@*o1afRZMAzcafkYlZD@BHDJG0*#{0-JyKqf3 z#4ufh%AO5lH4UrC#;}r>l$k`Qi_NGm=DWAc(Voy4XPf3J^Z}AUYhVr8IX)TDV8<{a z*KGhy6!3aB-^QJwT!ctvVf@)pKkk8B6;_hke-+aEMB(F>uz&XPJ5#BJNII1oDOxHGM(>r5<3~6YpuOEGseR!nPNmf#}bbuYOs|Mg7(t zCQe!5+CS|`>Fh|i+w-Kakw=TSo&xQknk=M;m|(k>hUYSd?2ZMk`3@Vt1DO(~D}(&?JH@XwE^{rxzyMh|<*~^UT$p zJ+$K{hg!9n5r>m8cgOt6W9SRAlmvI{*QSz$3IpdnLfs)N+L%Q*J}c&y_)!JQ2%qh< zQB6<(y9UP;>p8Izv2dum9HSXpz`@h}AGfX1*Z*LA^aDH?k$!z|SwI6{rwBZ`er=t3 zzD;8Pj4?m^whZZ87&g?3p~?80az%oxg-?{uc(WU6zRGS^Xvb{xaK^U9^;eXarXrS`p3)>F?WYb{7N@I3Re-s2(tNV$2T0mjB11=nc zg{nbA(60ay=SmnR%~G2}q{>o3W{fl$2*$Y*C3__1!Mc6SS1p@prU|!)@bo)X4EFIdYFDR$HpfMS%6?xXCvEgJ{=CXVZ3&p%)avbWZWAI`3AHsLf!@2}j zL_@Kp(A=XNidN66yMA|R3Ryt?q(u)-zO`AIs2DUn`o&J-<}KB)-PZ5vifGBIjuBks z2N5NpL_=!dYZtq=1>oU)+|NbK&r|+mooT9 zi~Ws5W?>N3HQzo8@kUZ}?ty`CBx_29DDmkQdJqx6a_?qVqnIVDSvtjiM$^I}{uTnF zPa4*q*+Ao_+|Bn>^R?Jf!xII_<>T~j%{_nMMmb<)-iZXsjHKTcz2uJWmO+;Rm?6DV z$87D)QISX=|6=TNHLYck5z`v&8?21Ir2ir1!q_Iwm6nBq)9|fW_B?S1InTA(EQgpo z>xwTrpdRz2?bB8ZvUXvgbXe4bHGM!f%qP^Dl-ej58$@&8@%LGE>@~lj#ZpTFsAjq7 z0tr&OX`Pjl=%yK`)!fHHd-cWM&n(gRxwU=-Wt!hhSKEC7iw-XJUf+v1Cq7%v3`7sm zxvDffb`eA;v5GYvREVJ2@m0nqS`SyBiz9g-RqvVjdqI*`!tYRmtJ>vsrFyY@>`Nh&-{2ZLydQ0Fjg18Zh~S!uFecVrbrdRJ8?c ziYS({i|pBrzGa>co5w9Hn=RbE7|f9MaTs~r%V3A8Ea3H|wXd6s-^e&2p^AtPtKYNP zp>h3|`5ToEnvle<>l;)=NyN2vo!EQPE$0C{H(cb)?Vw_dWxY$JEv6z~k}oiw%GKWa znm1uBWgG7(5eE>GH#UVPQ9kq!GOA(0viBmh8L9i+W^ZUnBD#}8Am_f>=EguI*2Z|U z_tchJ;W3EVsHV^r`(PeRl_fG6X|17P1bt&E?slmJ^8rEsMM`fgaX`2``s7zY=WIkOh#l7F*gKiC&jQ-}q#XD9^I_~CT0OEbE0`b&lUrVF$>o{9>h0nsN zGmD$TXaN$?v)3Fv)n0|8#UM61OH)jI)o)GpEczuO(-3Pmjwp*YAh;q?D`U`dm0wl6 z=00N`=wKnXSkp9Qe)J>jlLOxNszdM=3}^hz$m||;BCaUyp(1BmKfZkp!(6mI9^4L% z5ffZ4@4iB!|2Conx+slr_c9;p=Bp2&gOAHO+DZ!*Xo%#x3~z3N6@Xuxl9Cw4`r#G* zG5HC+XR^|I5zHaC`fF1WzF+rYYo+e!<)Z!2HeR>t`nt1%WN3QJ%p`g=>2LT(6%0ty zrxDTYm*e+P1q&zppUn{dh0+&u^+<5yA(qS{tc+TypGF~Dc%PC_L?G*_>$#d2YV{Jr z%Utb%HWj^|VA@69^cBWq3L@s{b6J!`+y!=~Rf4S+kgY|EmWJ4{p09ijPe|z&!ksTi zqrG;?YGN$5M&`2I2|wSMB+bJNHc(2>lr zr;y7cR5Fnr0Reo|Sx76aGu~bS;_*wX%{5|9jY*9DLD9AzzQ<2IF8v6bg|hCpnQlE{ zdEv|Ml{I4+tmuaci7wbvPrI^uM$|qUiAZFgnS50RK%v?&RlR_jOd#X>zc&g z8Qv?S#oc6onF7wH!YFHE1?t96x-`*ZoT=w29y0Ui4jJNUvA{d^3yljQ!S*`;*l;OPhP z{#=r4rFjux`MIK>&##J9#fkLGCRQc`k#_SfmICKSFC+)}uzhHioH83=$L0gig$?ib zcafNT0H&Ds4KPA`o~`J%QvoszJY;5p=_wZ^6u)c&qkZn!%JXv23BK?s*)_PB5i?0C zsWZ)`XBEA=P}+GgX~E9982qNy<<_7TtiK517i_}Xc61z2eJ;@--Nn% z(-ZrS_n^s*ZDyk7;yxft%3yc-Mm=uYdG#Dnj(f|EM5N`7{tN?h=khf&jF9cPl8fD{ z8$VAhI4Z+EW}gBVQC!pIr+B}StwTgFFvyiA7`_9<4v=qq;yB^)pR0F$!xnN@q)5GZ zTdkHGm@L#H%NNc>4C(m+W-~92Co*~HC=LLB$Mo?<)8oCWNbS1H6X`stXN!~kaotF_ zODd#05?GA2U0`wB`{G0rAO;+@ZiGIpY|&2UrB8NzV(nG*>y==Qv$q+_uNa7jC?TAoEBqbN(7B$Bk0jMEH`8J|vaG0g$r7FSr=cO~XtM%-XYQL5F4Ors_aU{SJxpVFahVspM&O^3#=AzUkWDaO1JeP~&WEmd*!W<==SOa-3p3E= z!R&1~gyZ6Q@)Y3DZ6+MW^xhlnq9pQ>oW)--e)^CrtbYpA{#xH?HMKcnEDRsahU z1~+4F$n=<}#AtEOXS7?Yq)m=N3@kMT5_yEeJi+;xWA_MCxqY|5u~_vNI@_+$o_MO( z%^~Gco;~cJ`l|w%xXjGWj2P@Mak)*!A0YQ8+)}V=7OO{qu|tOp5E{Z0N`SP@0TN83 z3iIHS_BJft_(`I%ZQQk_s>znI^|wbtQyeT>dHh)2x;h@2tlial|X{IaYO zbP?yy)TlT@z?8jI6Qq^Xi7XYQq?nssvon|^0uJ+}JkNyoqRSSM>qoJmg!!;(=6KxN z<&U4lrD#iP>H1F&3%%vA_|$E4()IHNI-u%8k}uN%^*X>xG>tgytJQoY^a@Rd&fYlk zt2GhD(#n$NTF}q59PSnu_O}P&n^8&Li-{^(OYsPMunXV-miF^wgBk=O4C)z|L1d!H zMqf$aMtEA9brJlon;;Z*Vf(LObXzBUpFM@r^Pk0_WrA3Pt4v^IV@m{^qq}&*&H3M*j6D7{D3kS2|b6!s!8n(Gu6Sl0%wj#k_Q$V?-&^H)q8+ zUp9qJ169c?q@KBI;nzxFvc5FnW!`SkhPp?x=$&|$c>vK8P(Qe2ElaiK@mDJu0i6gf z=JEA;f@_^Kc#yVX1YhH{#pH`sH-0xM5|}LJ2j{E~j6g>;lXfDCt6ty_c~eOIJJ_7d zV1cUoqi90-oL0!jg!D`FnCD`T?0-fu{q?J?dX%)x-^@|w~!>1p|DZNN! ze_rCN6N!BsjPi^EQm{93Y|Gl> zQY1Y0?U-JN;pe%0_d-fWd_p7B_Q_2QSgHId_&};6ZRgBM)f_K{>xeGiRowwFt&ACF z*1DtA$yec`U;vlkpUyxku)mAq;GWg`4fXBbSYoL1sM%+kO$J2my+_9R?C?t(*R;EN z&`2djDs$n07`s|_otP*SNwuT-kl z){e+6t4?G2%58l%8ATTx2Ce<^h;i_|uzPj9HV_#N*p*FsD&P*u3?;d6AEK>z4!(a) z(L?ONnB+@Iqn=%m0+bt)o$uv}A%^`(=Yi zo27v1gX_5r>&jU{U^>{TZ$@3*IatKBe*|ANtoQ%wk>w3|yc!1p?f%`Fft*PKJsu3f z3xBe!o@v8Y%J8!kxx-m&@^K3@;ovZd_GDPQ-fk@d%s2m9eQ^tATLMV!pjmVgGicli zYzOk1J1ACjf^uH*Ql##-|7{xdrBv=jDDuGL!{-*Utmgu+a)3p-ep0=;88J0*D4LLi&GjMJ!fnt48{L3$6`d6l z3Dd@RAEETKoK#iJB3vw$XQysbk2{lMA0CtfF2_eRl@2Pq1P@_)jResa?nU}(!YwRT zocr72q*pc@rfpm28MMt6uM(w->ikQeNSdNiKTwso5zu&x@~|1Gw%01hkqa}Q25RkL zJv}GmkCcKbZO+59gd!xXYM9lz(o3d>DmiO8Gbyf)`BlgpSdq_f5n%7v;Lix1#K?u3ky5@n0JAZhU= z88Y2JehKdorouhvd`~Iw(ccb-R3<%~@5RRK3b~1kYKl>UL;7C%Q!U&)a_>UD45{cw zIVQ__IUF0gHefZyB)Mug0;e=3Yz)IficR-9sUJVdShqP}narAijHt<>en{w~_3z!6 z@&V-eW*7Mb!851d7)JP*;w_y_ei3;C^NFqY3(Tc_gU1OG10L*WZ~x^4UlS~OpKuvO z{kpoS^ZF`$Et`GNd!Fn)w0^f)%EI;Eh-+o%@9P0}DK%UuzQg9)K13T^J13J6ZcwZF`Vse27VBQ{0^bPZ z==yt*!UkPyNV6^MX(@KVUq`iUW>=K< zLM={1fRZttK3rn)S}o_ODF7ij5g##v{C?6dEJ;b!e(m<;DsA5jgi5<#B`#TKWbiw; znz14^7`&P}%RlY2(o^RdmL=3DKomf={$|4aLahSt-(OA?mOXYc`X{c&O0=aW{BxJx zC=C(OVG9cArW3qBc{I=EMJ272eD{F@tbnfOU#;Ni!xq0hn=n;DH~j1Kw227#WL3E7 z#;5N%$4O|afqD5ziCSvZeH7^cq_JM=V$ z)90vYFK&4r&6`4z%p2ZUv!&|U=!}5i_LhhNvMGz_80dq$^|I8~%c^yGA8lzxPg5l6 z6t1^|v`K`>%Nm*?P=_d&Qt8t3k{t)ME$pXv#*{r6lKIWVkTn!nc@Q!xaq(c4&JX2O z=wn(?@i~K4;6gDrE^+{|mp*<((ceb~;Yf0&RF`yMUxe6uc2G(V&53<( zGxg7Vsm#R7n{)K2^#INspgNtc0*dl;9DsGjQB(L_k1BgTZN6Linr$J1cB{XesblG3 zV0Nn(vJe1o++E^RAGH3_*WRmainwhobgFA9c#N5DaW}O3CAKvWK|hRFD!+T(WB%DI zS0M?_{eQIQmneu$R+wiNdRgs9>>(H#&l$S$jR+4pI~JgQjRf7wnwnUREp{5*lhj#e#ky7gT!v;;D39k25!)4wOoy1j(*u3L>xvl+C?yW$L z_0}!$x%DIY37%)>&pz_Q_OcL=SJ$3HDDt6yzvUmgy?|OR?ij~nudpi@e35#zj(B0G zPUMQCp0IGVXZ-J4kW0iF=|HFnCX%D1Z=*47#%lUD8cx-M9ARqGGXNT+_FErKsAp;E zwSg~ibSE|l$X#hnFU5t?*BipZ48$LuO^&O2=}bTtoh6H?PWdJf}U^_yJo7aZ`Iusn;N)Aj_DTo4rB@_@(%Ls}<@-oCz2o*{swtFYU@}#x z9A<~Y+wx`w^q-^|*M<)!h$^@=4|Bi7dLpgVH*s}IbkTrkPCthg#e9y#YV7Akr3(QS zDk0Ei!st6MX6@2ybJ3_yzWC`nC#DuYPHkNu66@yb;BQ#jQji<$pjNa`zfau2u;~Qw zrPrBL+(0ELOMS=mR0wAF25`DrMr9_OLz_VB!QZ+5?RqLaer03^2 ze6|}?LuA7``ij8(e|2Kr4aWBboP6Fz_Q%IqUDHzoRfJq|b+T#y>Q}Kl5_~ZiesmMU zJNgrxp-qa($oS<9d1A+d8fIJ-Eg8VTZj(u0VP*~*TK~jq!panbm5sD!u(oHKFbmST z>U{9a{`23_-(@l?y&idgIS5(p5R@sI@Issby)rr{X1S;YHNf+ zea#P|7W!vuKmVDaQh|V2aN6U2{ISH+uu)_nn-at%;MUWatmcd)dEUqMrFfN6<;So3 z#IY*jLj9|7YI=3F zbQ+26LB}p*hdgBiEDivs>2fZ&l{p|+8h6J!QS5jaEv(EOcXZp~bSCQ9dPp+Q)BvMwrWRo5-W5#t$dRM^dm<4fYZy06hQ&6%++!AY$g&H%mxEHhlzFYZ)X9;! zdmMULIW7imjMd$>$3%HsbNG6GO3h`-^2LTovSg9CbmA^AMB}CY%L5%7eg{*WHx$6QX=QDvIi4D+yq{=(atnoa^KQ&MIe$6LQu)vgG`ce zPr7rNxTsqJt8|)N^9uOy+pxe|^+yn7+o3a>Y-*9Wb^9kpYB0Q=E^PL(4&y|JPfp19 zI06d>E;R+uk$8aWT4t6sWhJz8`^t43t_+emyGK6535r%vwqG-GW4IpXHg&Vo@GbYt zcW=LPH130_BFKe<146XZ7L{(lVz8HUEcjCe46BEdMOzkr(k|w zP6O?aik?~rGq=#4D-ex62rnp0lxA$0pL8Oyor&`5ERBxzIlhkyw^2VuUYg?kh)!wS zYg~%)<09T7r>#{PXLEf!eIorvOPU4AdJ$$F{SZWjv22^oZuIg#Wh6|zw;ZOIfTz7n z<`_P8t0&nP-)xFtt_EP6WKi?DUu0{g#^^?&G~ilty*vs6<9_tHX$&CO6td=sft{dg zr1y>O;5mhmJm%ZAtZu}qOB)#gWmwZ=k9uGj))%WY|Gx$e`QC9%(47FhWlhn^6OEm2 zm~zEa$t-Qq1}J~$kXYc{=l(+c8#_VxT`+7l>jywrRA!d4SkiUM3R`RT%}?Lk z3qZ$$qPs(FXGqm1`yp^aPNb5H}z*FM-Q@4zze}4ix$XQyY(B?DNJ=mvIwdGyJ zt<`tR0*oqvS;d$B!gut=e;LqpbF%NHh2Z;*nQChy4CCUCH$C}8kjUClj(;;D3Q(>Q zvQR4G;#chMTS}B0_U+sF!-GzwcBncek`kFn#S|p^bHq2k%C{7c*tYI#(6t!&RA-VI z*0lPE?ESIDzx3puQNCX}JBik^z<-I%uQ?)kca6) zBHtLOMv(Jo6Xa_ox4N;Amo0w^5g47p^{MQmsX-M2ehO{T2Dq%4OAt!3i+mfq&wdGg zpm`A~K`0Se;UPsqZzNSc#0@)`F)~fs4Ut4PYI&?PWbo{PtrFhL)#b(2AhBO?G%Ko1 z%*IDd^3jbUWAgv|_pBiDn5(inDJ|^ebcPEP?}Dv|dIDxon4TX9=n?+coCdobXP2A^ zS!_`FA$o}hQ+^6?3DUpOO7Wtc$LQ`^HFAN;4F06|$`Mi3%%P{?x}ASJWEZbjNyWP( z=AP}aOOl}))-Iv8Scu}VsOx|o&9wsvfdt1Ri%)n8p--u_P%hgSEiL;UR9v}<8&3e> zFFd5+cxx^yr4{a8dKrktENVmQI*!lx5wQG?^-opO%A2e#8%qMAgJ8M`Sr$xJXV{L! zThC0%X?nog?YtzZcGr}HUmRG`OAvODn;vT><1RmSXRtn4Pl*0>@lINFofJX_4!t{3 zQd!Rv#c8(nT>!{sx6Tz7Slr(lP^fP?Usb=x9*c2f7VNK>PZlO_D2D5bfb+XDBr!X4 z__iWU&QwEM;*_lMHcw}8w7k(Na+{luH1+^HudhQSNX1XAw<)ivRZ03Kn><3EM5!K&bZ(K)tYBQ)9QM>2@1-T-<{lPP4gU=Mfv~rn{+9*2E&xNC5n0xm73`rWC*Qu= zV`I6K_hEXjp9AWfoFosakXAlb3C(igVoZ||wjl1IX=R~N9&xQ?k{Luu->_tvC}oMr zcUV*CE!&=7bfMnhDF)TCRPlv)N1Py^^XTyeWR|Af&zq8I3g)FOlt!Krsq%ZIwZ^yw(a7YQnP45Bau=S68RChz zo{;~i_G>%4u#dCX18^taNRv@!pwLvlWf7>`wJd6#{vwKC{YWlH(l{@g6p9-!;$*v2 zv@i$5qLCtSD&3&NfzF|=CD_q6FJYbylAt#F;J)9kS^nAQstKltJ)CtQ8HB2;BeP3e zH~3uqg}diSUJhwKMTUfKo{;d}?1g8MkaEs}7;`cT4y}TGcOjtL!%D;z0h3jxnJ!pO z{fQFzH6J6}b+s+)4PscrY^l)b+EVXs8ysB!?m8CUz)p|8t|37ffj?rw%@Z9#W`E_M zz@`U)zM~+8AO;dKw1@<*108q4Z+i^v9yv}e{9LCab^=%0EACv2j*d;abCszt~g%37vD+B%l+7 zc%{|EiX=RJ8m#DiFJZH0Q5{37Q|>}+>K6f%j}F`YfpgOyGpY;VjjoQx@R~4(-OD{b z-jxaqt=x?$oI}bSB{b@yCZLcDXQM?%8)*N+It3$Jfb4fykl+FN>Uhgp#j7vafr+mI z4Dy}npbN?bbWAHO7@V?70~d!|jR!R-=pc0imd6ccB(rh8^&Ch(2hS^Y2!3;Q0=>CV zFs;{6+tflK?CGA5Gs?dKhIPoW!(ABxmmt63j+iv94}_B@Vhu?>^*Jnon0A*xUZey| zp}&~fYy3g@-%R~%m}~3ns-SuiZOk<4y(f!vR9AURw{gXXp0Tgo%>A!-r}PS>BxWV` z!grJ7l(o^Zhj~;DbkwS=CX+Dy(`cv^c3MsBpIrU=%zk+ZJ)P{T{yeEvIf_HbQbvdh zX7VBb)=YKu{&>^ISor8oKBm<;E4El_U0K1n(+Jni1j)eEnevm3Y3+AvX^GD@p4-6$mdqyn8lVPx0%4x&{+HWq`p{bKp{)jDcD8}DJm z(1nW_dL)eCJ$Ka$!tr2L1fC-BR?)RwX`;npyLTkWJ&ViW?I6~hB}dsC2Q3ymPFT${ zcCdyp<7RZ9G}Y zwSCLbA`3cvD1X0YJK@fEWL;f=$%hnbcrC!RHgBcy_AvyL zvptHCQw7k>*qTNhH@tF!z+iSBJQSIpXgH1Si^6h4F)DMPSSwt1zd3z*%W)w~lWfnC z3I81R2`XkBIQerCI{yjn6W*JUVS z!^E$R@i_f!bp|d_uG;slnz_fwe?OZfPQaW9{eV<1pe-lCI8uNzdT*adEpfx6`tjF$ z_l%eKpyV>QEG2A?Hl3QfgHgtbL1ha+pq8EmGld1@V0yf{fC2X`X~5aOaIX%ZJCC21 z^y!Z1-G)G2|0*2Uk>f;Wp z`PTlqx4~lht*0G=BMFIq7j9qm;*H($ zp5AO+EA?N6S+(T~nWlE4EQ=rJjGv&?0SDsxi-&bb8OMd(r72#^f~@q)%gxS%VlY)q`n>R?;?A zO8BYM;m425Zg6V|!)U+}T+NAUQo7-SGr+_4qOY5%7hntu2X7OYi^6l9!HUVgXPGni zlZc!yEl*OY7^BgD!kuE~s^5&Ke5f(FcKy{51Xx3{UAuPNodW4=yfbia8@ZNE`Su0} z;-)c4OtnK7&QTj=Y;)RtCuUJK38|N2p_)Zo9wbaCV!ZH%q1ATvulE+D+%~+R{9OBU zxe4K?6AKcCC(h+0bO#2gSyAXbZQ5mLK5`u$Pp?=}k(-en%1KyyN4-6b#L1%VHLei5 zDyQGxk|ksnLOs(Rtvf6y7oPoCKt+ba3j`PAP)r*zLphd?qIdhES?n$=Ffe1gjr_(wf?5n7%pIw)yF;DiI21plDvwxa>8a|L-&BKHx<4D8C=*QQ5%CH+q-a3+O z&hsatx6=X>onIwD-5)*E8y?#8cy8E{5WqN})k%K2*uR$nB>Yh>_pbygR^j6N1p37c zAiyB;weP(F1atFUZ`_}=4pb}p|sOG z^#Z}uuKmF#Iv)wf$rG}k7Z}vrv%1b&XvFw^vrL8WBdl?Nh42^SBeGcf5Og<2G`A?L z13@=nAO3OLenA56e`bbZ09dE$$gR9;2OMi3OZv73ls}$~59$h^Z`2d?>vR*Ou)YKJ5VhN;f5BD>#pBZ%crZ6K9aR0qYKaK1%KG zgRl)1%D%%vN?*OX5`}Tb> zv@ULI%M$EcEAO?bImsim)%(aY)c3tea@($DdWY#T#+GOPb0-qvOQkJ8l7u7^Is~I% zbr9}>R)jW62)5&prs$58B4e}rlBZO{h zK)6s!grWTLovXL}I0+c;-sE)}U=y&o>x7Aj)dw$3QILC@Ru(ORLag|pNWi{g5A2eX z5%szblmUG6-TlcBF#e1EU;feUY60~X8vP*mTTgBaqUKfn`U&P)R|F}-> zMYo>IG14^JQ=wd@Mga=}LiD~3q(l(xkB|*eMlJf~{EL_{FX%t!oIDRxS5dXj-FGQ; zO{2Q>eoUl3Xn#Iqn6a4w1DJq%F4vBdOKnftO$SVP$`USiJs)fWouB*rc|8YErq_r( zTqIivpZUaT+XzFo9joZ^kDHd(3JYoptYniv;jQuvZNN>rndN2^W8hO`3lkGR2R!06 z#!(x2XUWEL$k|X)cfG_Or|;t|oQY(7aQPE~x1A_ALHG zXYXZY2V12{lK5ysRCzzB_?2TYbdoZs10lI)Mp}OPsnh$3Rwc=jzef6jQ{umDY*6+t z-KGf6Z}V>oiOO=)CGWV|(W!_90CtZTAi~@MO;p5T3{l9-2a?kA$vk)DSy8CuqT)?I z{M|H*C}Kl-k+zv=^K4A3a8u!hl#*XMb4 zLnpoM{(Ea@f0}rMa7M?QXcsh{e_Dn!c5t+C7dCaI&U)WlXT;w=YB#-TCa2!TtT$JM z`qee1T>w-0%B|W|(l~e5Q5C+*)hb99RGu<;qZwsMQMW245Ly!0lr4fhYk!SYXa0R2 z4fLY;y>Bn0v(74vY#U#BV_X}{Od?4?%$nQDhZSj^c)d)nn=M{?h&SU+eq*iHn2oBV zE+lD9*%g1G$7s{*@R&vNX(?e8q{6rNYPnU1_|6Q8v!f?EkFU2_&R&Ezyi&K%S`>#r zBs{tG%=n=#Mf>=%P<){xG0%c(7y2`g;G2sq?dnkCU2z|1kH~9#*uEa`^i_|&ov#9 zPJL1^1=|0113{-@XwLa3LwB=X6_uxfWaG~uGkxLXd*~dC=2Et;FDA{{5{C98bQU4n zniqe){LG;Q85$JKBPy8Oxh6A1{z`L3w zJwP}W3y&9@g{7Y%f@V2U4U*%fQa_x#;VmXJOXx%D)f4~PO|vNy!IL&d_?cKfYEFFL zm!R2fJ|w*&Dm7Y_TZ+_5I;9N|0q^`13B@)WN7Z$NX3i5Z;hHP=tF(cfCt&>M3TKzc zY#SOnL_88Jv?CBS%EUn@GD(xHcUW*?C7R-|;e;_bDy=8Y{e1ixvS}YIE6S*+8BI|GT)MYX484 ziSESVGZL$2P+B?|Nb!mORwI`^oLB& zN9BdH6LX3$)0W7JC*knEsus$Y00l@$q%LOH3QN zL1;1NpDIe6;$Kev^ueMkUVRUvvw6TokMEY*_7@GlsA^|dQusdi_21*-E-a33Q)GRu z`A8kE22-G>kLa|qS=;i+#EQa%iY9Hb-Gy8xk-5{LMHM{KEERZnbBlS1QV*oWq(5DGWZ%6$`#6vtKCr+aiq-A zFtk5kpq*yddF-5nH*|=&UbhwK`((~}*vldb>;Egornu>HANmC*8*Uqnnp!Dg+eZ!~ zX68N%Y}$ktV&abi)SV7d@lu|OKlLe42kH`!SWVspllqKth4@SOQ#;%5hpKr~hF1(LKXq3|EOS{S zoCm(IaFaG{wB24Ff1(?h)SU*l?*9NgK*YZueZXAZ2ox7)g%2pq7*e6fW02n=>892T zQJTo{LMMRm1&dka@eNj-9t#el-*Unh8!7{l0J8i+LJo`C*3hb^HyO+VU_Z&pi*Tg0 zWELi*MA(V){(yQRsUwSinpVa=uC%+U42N}%Vnz;iKSLtTYEuQos|6Kh*;qS-V$xIv z$*qgS=m1O(6xDmJ6UV!V%Ge<7CuW$RlhzVKz^eWRLsVTHQw0?qe9;Y>8EYaCWIN3aO;N^ z$fpQ(BI$6kfcR$fj8U_;XX;O{Fa(yx+9GhvT75_YwSQ(l4i@<5Xk9<-KXx?bN4#TW zF_@!QmRNoqn4~GQVAbW6L5vfXW?X2dM)j&G`1(KS848A1miMjjRmF$Q@z<4d&*EK0 zDcHB~3-`ScTVLSp5@EgTI_9{)^@;#S(kT~d+nAogx&)mY(~>zAPW!G(4Rg|_$I%)j zNKC`_z)TGt^=fj@%5Xln6XtF0)E=hy1n__T{(@2e`yC`^Ch8RtFcyqDN39XjWFjAv zPxiZk2gCCp9wAfhGRnHwTnl#IXlU$&ac=d38(5Sy3Ij356$HmZ6oAniZ4l=6sa)i=Cvn^Fn z`M&!M1;r9jMe5PiN|_vR?WTN5g{HDG3j~ zTK}9WY9LQc58sF{tua__z~jPi9guoyGLsYxsXLDJEwvI6h8LO%)nbONB=nFJCFl5G zL0?_0eK#}!YG1A33jORzG4?Nab63lPVBlEi-eg_Fj(47+U&NFJKI$M2E58^5@!^nl zrC~>fam!GA%3>9z)L4&%8WQV{KC6-00)eO~m;#n4l|>297B+)C%q+;|t>ErulAyV8 zx9Z^+r9eYMxY;o@Z8^VrWzGhlu&E%PY-7@A=`V8TjkCiy){VE(tQ1LQb14ilg~+-w zVk8hKG#|=^F3VN7)QJTm2Vc~G@=k+B_jjFjW${|IXT$2%5kwArPB%|_hqwuaB)ZS^ z@FO*jmc)|~0Mf292$(V1)1cUZW~)ILcTd=wR|iRmn;CX=ZGi#`C|V1kTWdWy9OCEr z0?r~sSQrzy-`kBszj4gWKzS+bh-VsZN+F%`;B$OjoD?D%tA-{4?@CgGS=TA~ZGTlo zXk(Opy6%j;y|LRUy?MDLjU${DZeYOKQC~bByq8mj?_r;kMSf0W%%9ElaE9$z6K~of zdfJw0R$=@Sl>lr;tvot#m+qm};>9}gHHs7LYf6uL9k?L2j9`YoTdk>$ei`Ls%fQw zkz|mI^fDoOAw)aF`+zZsxwRNC9Dv&Q4e>jUHU(TwZAkJ=4GVLZ(DS~>jz6R)#S~r{ zwt-vzoH^apDZJQ57=RW@*#o*8AOIHE0md#SR1)qI0YMV(G2pmK{mji_ot(`xJ_j3x zRDNnIn6M^7`D)YQS}X%Z3dRBv$NEPh6Y>?}C3aYC9?bg&5ORz>?sDL3q1z^~S8O`3 zC6K$h!gv|&M|$$Olz1Q3u~jP+46g2MCt^CPR)n@GI`3BT!We7;h%aJGJRExO8p9Vj zf%10hIQje|`>m%-q9N$;ouAOpjr&(jp~FFVU@r9sDZUU1f4u$l0%&Ucv+cU5qXdb} z+`^tBkHK&exF9>RdYtye4dqU@_=(=Org>1+ijBT+Jm1_xxetYv5{4){o^D+Fn8+or zyFgNe18B+X$MTM(h`KMb*~r)9(ThlhINYUNDRvv>{w-j&__#cNjx^O_n$Pn|gV@ocq zW5fg3oG(Om2igB=gB?5r>l_>ceD5O3W{1Kc(6(ZwE_ZbR0rx4a(o!}y>gj;%|JqVh zwgKE28`Ib`iXF$g>^tPr^t9S=jh_~FudRrcR8N!oTtOeu82z(1-jLvk?^fdg!U1#E zozTVvqJN6jRp(+-f6s-}N51_WGkFg~!X+GYxT3$I|5PsXm=$W9t^dud{NpsB#@XX@ zxxT%=LkgfULCj^a`V)iR#^9<#8LY8v22Y|IuzVf^V=}drzo-qP6|i9@+h={DY(F`) z(x<36?fK}eL472v0D^JpsA*ho=dyYl+f_$(P~Ty zw2a6MbJ^C0WN62Fr)kF4Ph(lxWQN5RePf3PG7?hj46^*ZytrHks^ynBPfT4l)4g6R ziN%QnvFF9|m$SF&^@*|mCaHdgPDoTkT;olk`2F*WEJOW@GDoG>i}^?kJWN?%&Bt{Lh zY7z`aHb@IxX%79^)x?ZVa>CdaT>O*omacOrjCm7c#Jn~=NK``tN(0_t>3d{urypul zdWi@7{#WsS>whhxSvzDE$za-8r5tzmZ6eyrba#{qF3@(fLx%=nS}S*+6zor1z1@`< za%!(%8DX`yEF@9T8t~`;T9zj$LlkLA*pppTuzVD~=d<+;iB>)LnNH#BQW`;%tRpeL zRsR8?g*M@E@vD_VA+dN3<$VLgO)2(M;Azot(yTK@pwo-MXxn#Q4@lKN_~hZj4vT*6 zkqRo+aZwpwjL<7QyPpIWO=9(!bjextm}a3rwrwi~4CV)fiqO;wF2CGqj97%PvnE*{pxG{kF65Hg zt*U=G&m?MPcI7uRS5UN;7@vhnC7&cTp}SOr4fEM?4vf#k5SA!j>K!{{Pz=HDf|Gmn zOIv{#gM3pA@)qBoqxBm?_;$oNn1|b{TAs~I;>X+!nDsnH zgk7!PcwQbqBpXL&#`eih=%sqW1A5vwhE;1&7=7OXfM2m80aM5`MNH<|(6;g#pSL!{ z<;Naf>zpu$JiIsE)%F1P; z=oT-VE?JC&pc32iI|NHjYkqfzp^0vDT%iK@P)D=-p1{IIMEdmS*I0mbq4xzK0H^Nj z>rr3CA#erLub-)2OM zS(t;ai~dbV`@I@bDq5Iiv`v;H@J+lJu$J|)wj4<>6uie6^%HPFH7QXo;rzdaUW_r! zSngo$KjTEEm)7jlY!u_~stwC;V!bCKWyPg00gPTV@=luSFL$koB2bD(<>QsZZyAPajK7Da_U%Q99QF&K}=D^qW z-BW4cWnRT?*Db;gwReElEwQ!fPwD2>(y6Zc#D}>T?-!MM@LA{vCiW13nHGp*n%aV| zNK3)7k)3<6e;m(vsF@QG*awq!{lZBp>3U{CdgOc;XqTsa2UHngoHoSj1hl)Rl1B1WEpoeEFXL&Oe)pU4C$=D`4J1wYCVUb}aM>Iv zeOda88x;+%8ev0=2Y`_^E%~e`X`RSG|J^=}|5)ud0MRewb!gh@{cO2i&ITWNVwsKF zBoA~>P@^^&=z&j3p9@nJd41bjFt#V^42BsR`!peS!IeF`ev}fVT2rKG-fk|;6eFdz z?18@2Y!L)KKU83HKMNOalw>wM71pnW@~CHTwQO%4F!^{hRzPZ?IaFaSAsT2z&3r3| zJ~sPGZa5XTJP-4CTQCsln+7zFZrpHOj=L+p)|JhgLbXsI{z@i)7C2! zVp9|e(#gfa%hGSYgEasr5AJ`nW3V`JbJnP+h5KWcA}67|DIB*drY>lo$Y@klDDR^J zK6}m1!#5QDm}`Tq(oyDX2Ii{?zhl5`WPOU|L-bny>H62C*+t7Sttoa-TG=_^mnGCr zDUC~iDLZZ4so9;F{)QIwyQa4kUNwi3FN-j z-F!j{r?jxJzgJG;Hj?LRYa;bVL(k)BHV1dFO4XDizD{slS>D?ZG}0OPSBs>mv@N)z zBeCjngGp#>T)T0!pLzb&cz{Pr*;2euB?_1Y846;QtIRaTZp((os#`g8WyH*!B`DjU z*<>>;%(u|dhuwzYfFNGIiF$fYQ*$cX-iyxEgJM)oCrP9n8LB8nRU>Qp9L6mGALM|& zqU+%4yo>Zat@uKRX&#E6E{B|o88at)WVx*XpT-1%f}gJxzpj{tYk;$LYeT!l;h?uW&Ooh|O%iUwyB{mikd^mrrjr>fsc zrzHihlMCf8my5nrm*$nljl+l`z4_g~LrN2W)*s(r8;SeV8EnxXgnkxO{bJcGGCYKb zR`L;38464=p|GMA0Hr@U0|n`olBNxGSPX5nuB~dyo=mcmXc%c(2>TO~*P+nhRkhsYOHZ0sPGzEh%WweaY zmc_S>ekv+Cg8HHQC|Gin{+K2gh2gs4ASFl5O_UBF9>}8ws51I^`iEB@4ocE}W8^}) zQIjuaV_m2cFZC(cTlBOw%~{Et$6!MPwJBhmd5;RV5CSzwzP$ zsVyR1;?V8&UNkAr5f4qE_}lNY@#&hH0+jRj2*h%-ESFCCe9-o05{u0SH;xlwBB~v* z)JtD1C}sSh_+qq&k;P5m0jU{$SGtqGdH<9*KP`O}e#S!~AI@!!RIl zOVBLw6rX_)I(FXff=YoI*^gKgin@3XsEAeQ8n$gg>tGgT-K<{;aECKjHFKa4>=Lyw z0Ve^ZpEi0=KqFlZtW}8>ze$6Ddhra7|1leIz{Yl|c`6Y!PQ=Mix2G5*>j(VN_Ny-- z`y5n_FoXaN1t>hwH2HB})kVdq*c6thI_XD)B+Mg1vTbhvjdb_FwlnV83{-R8bKi3;E_a3T?i!Nqs#+F+B#PT6st&`PE40vH3@4`(!flNTkowsF=|$4|R?y0XylR1kgd|GF6?6&V@RQH_AQS&XuWhZ28N zyyzA454ESM6*6TumX_QW(K(59T2sNyn!ykpxA+9kER+(bOT($GzY0o(+oX%jPyK$K zD>BT`*<^oLQ!e97`s@cS>y@bc6G!MWs7+l7Tk36v2O-x<7Oic5{ny1>HPeg>h_{6D zdxDQRXY@ByNsVgly#{X7zEJk$xz{x5h;GZE-ZSlfOF+H^KWwU1mr zlee?WNpp>tx*eW>M+M(m#OR}P06ilmN)uz%#qSoLOPXOlJ#&Ro$ms(W6xhI)q`m^Q z!z8<>(FkaYV8hkExi)ZT%gmTLX|VFDlw|R|6$bwLeejqD=MuGm7%nwEN)(?q6px38 zE3e=}0b|RSV4)pjZIoMB%=&gnrr7VDXY3^fS*e(#Xz5L9TO5VVX)3sC^@k>!1e`YR zMI)iSytNTFK>ZVBpZW^=R1h(-WJDKAQ*9-ANC~<46f0S?9Vo%m_Vh@L>qHFynEYn> z?}jPu(pinzO(s&}GVQ9uHz#&71rE6^)-a*utfJ4SQ%KBMOz`&FS!rP3)EGeRQ*HHr z=I=_&W&_etYe0vJ>t%G#(S5a>Xx|n#R%kJ{ccVDiVB7F|eeq4OM^+x%bA>vKZ1_#* z=oZm+KRiiVb1HnQgbT1U9eLGQ8GQVqu&FX##nrnWpDnCLv5<7zFz3trQa1xD;;%wH zxRL*h5{PZWsD?{=YY0j9$Wp|or~ov_1e)C<|1#EgjK}y7WsrmvG~F(#UStcaI2&tN z+oGTG$DJ(FVS^Bv)24U=sn7U$TnW0!FRZl)Jmg3-#`heJk4@x-C3o7xV}(*2XzD~- zqV}i=Qo%QIgwKIlR=%vSJo=SJRFNwhcIwa{3%)ziEYep`t>N}ku=P{-EueI)c073ETa_b!>oJ^Eji-B~x%V1?HC_S)}X6a@q zr)h?y4E6%!gN5&V1J{P7z(=ul=}*9W$8zCUn1{Xzz>`0y!GG7XX3pNcPoF=rKwUd@)QV9nj{V$SX+A&ZJj&*nt>YD?PMeFvD8qT3Ezpw%#UUl|Oqv1E zMzB>3)2}>;^CA!Y)oCS%hr}Vf(DZ}@!V1Nic)$FW3r1qS^5EgFH`_L+kzL>y$7z9H zej+Sv-<$jm{@9OUIYOlf;_vp|?Rs#%mPKyXOu`KQshM8yT$7p1EC4Y2uSDM0UH7F68W zC*Y8U^Ut1*O9OxL$`56kUDm^}@{lk1d_lV}RPt}^jXtMreIMkht*6oaI;mE(E}_Qm zG#DtkK60IN!WOm%W!#i)NX+xmWiW7BqfQ`Fd7HwPz62?JjP6#r# z=O}*WH=GjpVc=XF{GrDA43Xg74AJCT7mfK}b3Cd$=DdkU6izZivPc_S@2K9ujRrxD zigd*?3!MmK+e0^P#;WB9>qz}z7qMGt@2w|$wYfi#v_~jL_dlwlHBa*C-Ki`=%V%)% zLHwoFI{dx>eu_GS9O54#N{SEJ(tIX-(I%#DO1dz=)(Smh5&h39-;-O>DKvSSVib8W z{_h^Tcu}2Voi}O+*3IySAi8J-Lux#Cgye*5bZ&4 z{LLF8palQ^X;U3dN=!hqRwaVq$>jwEV*&H@mG@xSqUpejv9pJ=Udc#_?qIRJLbLyD zqrc1o!IKn83ZOHUTFC|Z{DnRbgpXS&?gy(wCX*4iqO#1N(@7w0MkiZ& z_*MS<-^$6{1^6GM1cf$e2j|aGWtq2@we?(Z5zD0``-*K7h+K{xk*ODOwVo0zz)CZX zIPz~`3Dr`6ukkMxEBbCO2xReA(IA2~_;2J*-fopbtu@#GENTkw3)+`F(z^~MC;Rjk z(1Z0XcPUDMd2>X|fAOI32vC#H8SpLp;_m-;q)M}f4EwQ z8a*XNM;c>!)el!!vLf+D5l{#|d~7l-Wjf(}oDt?0ui`zHRK4AUjulnbL1Ls8bv4L> z#O^Cq2Z=<5^?Cq7+p!uumX=1W?XfuejW5@QT~ps*M+0&L80PL3)W@>XJPW|$I(OLS zwp(cS!d;M_9IITgnN2(x7ep^!xgK`*K3M=m6H6P)`0{g!%?kkiOHZ? zK!92yk%-XFZ`D7^5f4)HX3I=*N_~KQ6HoUl)&P*e4!*i_;b@RSseu5#Wvtg`Y1WeD zty|pWo1uG|B~jEjB(6%4aS#E{_V=^9Np@B!QXlYZ7AAi8wMU5`h63j?$($h6_&_AQ zJDvN325`6nKR01D+lnWGTNvYbvmq=jjEPZ*&$_2&S&)l?)^+=zIJ(OB`+q+YKPV>B zvUU$0%Cmr%=d+L91EbNKNHUpC0i0oZHG_!*xOD&=a?<2$u(1w4IqQ!~q6rA-{o%LS z1@kP(bVFuxK4Y|^DBcyEh*{7KyOiDv2Ow=EFsYLZd20;5r-zZpgyF)41s z9OI((lnO{d5i^E&&UzUpqs_tAan0cTuH(tCw;fof&sFW&(Snj_M z;D{L99%RMn6IjFz((-XYCS$B_zQPtntTD@esn_888<<4Ib$I|nS&y%H z3G8QMf=#5@7O<2_w~O@h(e1*;VQYbSbSrr9oWGGCAVWqM@|e=0euwjX#(TA<_S*y< zom@b$eb5>KapNh1yq24_=9;~L@w zi~9r=8|YXt-v?QT#7l^kgPY?J@gv3~L1QXyfyws4)o2}nd3ef?&i#xGu75@}@UGrr zyJPVS5voTXCxOOTUr{U=FS3eVJ)1bZAj1U@@{ zmLp%3oUh{O#WT}iD;R@9Mw%`KH`#?^g-j*UR~DSa!1q(3g? z#=9b}ZE@t0o(v`{mNoa zaip#w&fydl3i~;Jfs39l?dX1b?|31l76b?h*WN^d%-7q+~!^ zHf)`&U(aXWRMDxlyiX|j8%mc2 zOUocC@Nv^x_DiZ(3s=d>QImXisxvlx7&}XBxg?B&vv6tJ0dyx$<$2$<_BjtFNgvX} zZ1!~|FGB~4UoKqJ6f0d~EuEKzk^%73S@WJu_|1D|m)fi8-#*!E4iMc^1=p^_?$^{X z-&wor4N!hGZYl{v2#c8J@96IFsn31Tapp&2ph!(>Bd=-~sT)zwSsfH$_1L8INUsU0 z!P!E;zF+d}pA`DX)@f~4sMo&`l%GTm3_!rm?mBC4i78Git5Jk;G?Vv9v-HAgkrc6f z?ol2a#lDDV?u>WPa6gXY6d+vNB0_B8d?}W>dGc)FuC3nJ zFIt2#PkFQ%qy?F=d#GQmD034Bm7hu1iV`Ad-Hk+8n>LMT%0r>x`*f%V-7KYzokXMBJR=yMuXkPD&0C9Ne2)4AIAA{Qu){qj)xU; z3MXT5nfkhB{Tx!af60cCVhNb;nEBIwbY>TbFXu)YCfvMS3g{Kq9K?AP8E2!735#Vb zA%|TJC6-&~hqUjFI_z)u(Z-A2xT43`p4-*g0Wk|-9~-zl(%t;=fRjL~KB-EQ$}5&w zg0RLIRz0hkR!geGjNz~i-b7VJK36V@UYdcb^dD(q)OjLt4ip6(B%vCAXX2&%t!)cj zOG~cM*@1p0&=jgoS-OYTl)qu&Mk5!g`YOxpt2&ea$>Z>&q0Ps#E$Hs54mP4s!Ny5K z)%jfaMjpZ4(eJaSv9V5ty(^*+6!)} zL#hy7M`w86`8;xut0Qxgl)j%plLHbe8@wnK`nY47<-2NYSaEM(?^r1ys-)X>8>qtw z=9v9*j~gy;cAW~A0wW$6aa<<;U#nwke<|{v_H`=#{jl$C4DeSAQ4ZY%c zwjvk~Xn2#D|Lc}NgI_YYaiwTpEGuv0;=RH>8EG{kuhdv6CelW}Q?bNnRlgVdm!GrlZ=lg}_F{5!4k=&gznW-2D)=ug zKgrz5G@U#hnl9P0;oU{}4RfH_6k-$%>tH^;PKM27<`(N5NX59A3W$?AZq!OcC*)DZ_aFI`)HqA(a}ca71@GTmIwE1&SxqS#~J5d&rkZIg&!x3-x9*wk_W-f?;5+6(XJ}6W?g`{uZwz>FL99k zZijkWtdO89&s9MpV#x(&zO@gwQ-@oIb?GV`2%ZuycvkFMk_*pjeZzXg|w z#>xb5V75RQaa01QcASSAYN>ShWAh}0va{WY*jmT}GgUwGu4RSb8(z!iJyJ&^J}(o2hbtFiyhtms#@*o6yf&1^&i zh)TQf)c9cSZ_zn6B-(vOcv5$#)xwjgYsq`KYMww`nT^kdG+;ZLc`O%ip{Do{p2sy;C2nw8KG9+63zH94N42Da2W5GciCGfL3)#Uy zUsey*Ng0{=e)S60ksKf&?EfQ!U(Hq|ggR&vS_pcb1tJ)DL!$G~oQ3P;8ut+>X< zW9E2OIxUaY@;7j%*g#2q_y*VCPH*;T8~ibDs)?*7|EthQG|`OGNd;emf^U(%>fHWr zl(!|CZ|}FUfju{Snv=7hZp2&U@cwcrlz)L=rL184XyE7}efL~#!a$NI0bY9}vF#}d z1IMgqUZ7`{4;c&qW~r;f-c`sq?(SQDd}#Mzg_M)Ejr|_R38SHeK4h{5ORrVpT@U`VD3rfZzcYY)B@>{p&^x#CI? zaCPeCkCy(Cn2a@3SoY<|W6zW*#hP9Qp_3Vl+5>}W2O(Itwj zWSw@L&x$BNxD8d56j3?uCkWbBE;B-I8EaRv=!t; zXv5Q5;+R%pN1%?UTHq(9VtgXYmU9q-M#$-=e<&l?YKB#Uwf zp7jz72rZ;_YKC}RQ{5Cf$LeYp2E>+@j;N&PNW)*(Eo_%JBr8a`WXrUWo&zk=R{sTV z_VC{^gPir3lgl?P7Q)GQ^`w-@Y?aiJ)jozhL}ap3*{tIRdV}2-yp@1&;W_S1h>8r3 z)qoS!OhW(I@k@U*@nJcR7h>)DSKe82m`Hh+a{n|Apk60ofi8}k zBv)6A&teK0)T}c;8rW|4nLs6ERZE)zy+juvi%4P(hZKqfx`6h3Jiv_t(i!izP8MfY z=#Ovn#*Uf_FgUoZc&J~ngIEkuC~VlCm(J7rN{s)_uM0_FA8-qTI6@E19}p(R+NdBgchJf%4HwkLWK*#`?!v)Q|ujjazgzedmtMUCR=#P|gd%0;HRwt`sr5XoKkH^FXv$YuGeL;)rXY&m}(aCZOHO9Fo=RXAOVb=I(qMmVu z*?HU#Hq=ZSVSdmZmAR`Z;BIO`K(AD45)p-Sw;`97#y!PpBZ*KRw>zyXJsoZe^xqZN zZ9i(2d*adSldxmB>B`azx&#$QwNddMj%Wtq`I>g%47B?mO+paJ2rif_AYwZIgJ-Wm zErHoCu_eUV&v~;p2s+DR0(nBpi7_jKTAHpk_+4ynrV2&s!g|V zSzgUuEAXqQY|+DqGatK`$t6S-i!+fuH^L$aJzDuqkS%STl3Z(L+6Fo?|5jtQPcs_Gl3hS|F?B(X#G-li>@sJ2cgbP@)v1lHZ#6MSybv6s!lV zZPbIL6|j-K(Wj(hhw~wLrSNX*58Xr6_T^K`fQf@gbOsju+{;RU0C^Lo?*GN%<$BIV zdwfvl)cM#(W9MltX7e=<&%FR$=jHw0gNuOlLjUvVkhQlvMVfm)BKlR9C(?PB*mmLX z5qw0R&l&jj02nt!tRaTdn~Vj;ms z%j9+rnk_K3qQCA3*b9Be@E?J^g+N!KmRuyKi-LM;?VZXtb`&T&_d!RnZ^iOpsP=T= zYO(J=@XoCSs^tcNN#%%{Mw(uw`_a-tBsFg8U7Cx3+>+2!fK`w5WD?8HliZ}}(aQiYS zTN&E$9+)4GY8dBgC7}m#ZG%C=l+XJq$!IxKe)Xu*h$$DOVMYI`Wexprs4%}bC1{vz`{EyN$eb-Xp5%l-a}Ddv#yL#7()r>oG~j5M3F900 z-m7u}fI&xvYX5CWLqd*#e`0G`{T;dZpXvwxzx>+9fOxR(#TBnu1%u<5_5%XLxU6%l zw;_VXBPY-c7VDZ1{m5ibFI9N&w^tjp9T;f$Wj5T)UZU5e0|9f=QT(v;nrphg(n}E&i)&YBt-|` zFvQ`gz)0Vl2VxkPX2JHlklegFAsRikGLEk!`#)zKwr=6zu60@UvW-aN<}O)?`9HlO^^K_Q^$eUD8d=yP8@iDGBd|4pAkEe4pOquB z*srs4u-UWOnZ+=%BK$s-!t)Wz%b{gDZ#O`A7J>(M!d<+X)Ste9bHf#fAOMpufL6`t zwHT_Ci#z4ZcW&FL{Cob%Yl7&AZh9e7eT4qeb7ZTQjh3OW|HDu`=I2?>F;jlSOy)M} zyq*I_?KKBBkcm+B#1@-_gxP`xB;{lwWQRO zo$ufjm}2iAz9KDEF>6?ZHehH2!AgXx{byZ4_FZE%$A*|By}&;4uA9zu7)!_Q;7nvm z3_?gICV7PYMD|cRcm>s;`Rd?%p)DwCz$Vr*{g^qf!Is<{X(1O@0dWUHcA4F-3v#YW z$gd)lb8gwRcS?hz10rCFaHP0la@^CejyN(4vgsgX9Mq02ejZvtq3$vjU(U$=dFDDq#w#OMkCV)WJD{(v=&)DaXlkh!i9n1Gp z^9w)N%@TR{`2yS;A|ZJ?&R#XMAT%##^%>dW{q+k2+RaD{ta6!GlZpH}}0-$`E!~M`VKMhA>GjT+no; zMamkGSI|31a4lnL+zMlmA5ZqX92MJ>YLHi*-!C(da!qXjvzg?T-PV^Pv| z5MaH9KD(V6y$cdwGG*&?P4CL_e0>90Yv{c^c?ZjdrsttgAa(h0yzN1&U>Uo!Du`cb ze|YQkDmr{%P}xsOhYYdiYk#}z-+e8zo51#G&>F;huQUO8q+@@+8IDC-mjZLlRFDz@ z)&)dFVi&o8bCk8Jq03bB&+4P_E`;zO|fBFX(Y@SNqJ zE7ninL6~d?wf^y?xA3J(b)C`0)}t& z18#u2lH!V;Lva=k)4q?IzV6}qq0V7$-o0{Aa(<8ywB5p}z`P|U_36_a>DbseBZ5(y z%s)8!FNI(X5o1}rOrkA#U5d}5lx;-oL0j?$OExZiGytEM@d(cF(WC%5ZfHWuR=dLu<`1EtP}`B;9`L-8B>T zZf{Vpi1Mej`fOk}>PB^8?4YY<#17*f`y`xYrvvD%T{?AW$ZAdC1;{OtkomDGPiq)o znv(qxMKJ?N+%t-tiSfW?80eFz*xHr$X^|qv3PUUoA_|!zviv$Q6a4Av<%9Kayyy&7 z>+;YFuuw7-{lkLTJ6{$t{h)8Bp?SdKq&oedT^%BRg6OEIlwwOYW0-ju>_5n_{l|lW zbrWvJ?a{#0?-6>mMd8SX*%hGX_2lJy`7yi6(4;ZJQ&=MxZE%a{WPoAo6BmPk(^+$j z)YWK1TQfc8k_)mb={?fsk%v+|d}5>HZ*)k8xhy2$T(~DH?;{MX4H41I6YSFA%LVkO zp&CpXAZkgr1Q;D>moW4OexTCgo}}xV#s;7lARGKn*lJy3fd%Cb1q6d78_Bx$R+#nu z{f;uRgb`2c#*d=+KmUE%%{%NaOb;)0j!XfxK4GX$zG($ZJIx+HZ9(O(Cj6{iV-onR ziHI!OnVeHi@R4PF33kw(A?0(V&?-(jk69XQ%iFQNm2dOrLs>2-oCvN?)M5+?$5uN( z{$_3~#k?9+Dm?FphUa7ECs4$2iae-`B6GvelT$<2+Eh8d)Kv8NR+uRbEx#-Kw{wzp zTLoMt2*hup`p|_c%h_^cN#dQNKPO-_6k{*cz}izt*Mh{;fmf|mk9kyRaPpV_M*_Kqnm{??gLBv0BO{xJW2SQd)3w|#~|WU zw*D4%0f^D-UcK_#GiR@(a6`MhpxoFAt#WayP)=oIF7v&oNJ6LPUl$masdj-D0dAy; z=CwXH9>cBqlhiq&tf`X-B{YnRk(o*a`0rNFjKuiOK3L%re2E7ldUh$)tG$K9On@BC zHpYQz(@M;BxTkRHz`KFYW4KuTcM)X!4D7qn(5W@2j;)p6WkO~GabkKXM!aqm-Bvi) zONys@k6dcq%PqU*?FUEFX}Vm*C84#ik|hR8yDRo|GZM^*G= z#I?U3qmkX(f!xn^a>K#b`hUYmfAAP3?fvb94Yml(5dpQC^W~hno%CCnoH(9j;y+o= z0Hu+!?3UCkGTZEHEpQ8fg8;Un)7ZNNeVVH~bLOS5dy`Ma0jZr#NGkQuKq=Y#1Q-33 z{0EDTeU_FHv5EdYezV48zgEeU^Vd`xhvjxQrY1CH^*)L*vjYu+V^$4&&1);LXqZ## zdJUkdmVw?5iB^O+kP{FAWkNOL;X1B_Js5AV%|@2091M0X-sAaEPa)R z9@@@TI5(hm@&tPfbJQSY1qFF6F9?3D`^#I>BB>(gST%{Jcs_oZ4%VXld?o`{Y z8dEeMu!6>u(x<(spk>VGjpWPmxk~J@+iX5t>uto}kR2_m!%lX^%8; zfWl_&*iv~|1De|6WRHfS1qN{CwTXjvjyJZZSKRd?OV-ABOWaA^<; zXJm9eZ$_3-sj-ks(fZo_LLQH_f2$9c3$w)i8YCO#WuAU>x_z(0A=B~uo-|bTlKMqv z7Q^D_U}>%w6~@KWJeZQpVvb`Q*6YfOMp=JpQ&(sE3u^AK@#qw^pB`QGTya3fsp5Ke zXY?jcH;o3SE{o(T7H@c4E}E$xb`9TI+w%~|90=qPG&hhruR6GWhU=7pI4GJ*(_xu& zv<9qUy%i;Q$N#Hf+VFL6@IEB$7dskj0tN>bDiPB8=Hh|%Zz`vYH>TezHe4XbHk?Vq zR}dqguO}xHSmn>RkKaD5A@^jEDfswNcNjv0G8r|Xe}hyj`MB|*mxB9HnniAn(1=85 zd|ctqXC&sNKV=qQ>h80-gf5F}!%+DsUz-~;Yj(Dwl6kmd{U%!`>-DPNmcQoGby_+a zH46--ST8#ZC3RfAW|>d#0RRUhqa*i?{E+W`_~bF;vMQZX1)*A29OQG9CpjL7AlhZw zrJ$gTz>)LjqY=6oN&U`e7Bx0$>X#}JMM7R4c)gFzS!o6L)eMA7kUKppFrG@sDbh>@ zCY!6{1kh9cVah{#;Xdr&wyiq$_Nw`c!Q~a;q$@OwqCjw$?I*d=&WpVZYeO1~NAZ)u zlS?;1-nfUJ@-9d>mE#~9Jw;HIU$hB1ns?Vh9&Y~!dK&+IlY0mNrFFWER7WRUY);1!s|CCJ; zS5$1_D3^&I9)j$en&#*?hukjIk%rjfm_r5Rf*-MtU(T_}~V2;p{-aQs7p8HBIeHBDd5IKxs)|1K4W zn+{0Ln}C8$yyfi)Wj|o=0YRJPnO zQVnx1E#zmMeaT3`CN1I#Sq|;pT8LuJRhck|yCK$^8v{IXc^bG_7$5 z14_Imk!#P7)~Rf{u=6$A1X-Z=TG$e?Sl9k@tkMEg{hWiTyP~Qy832>1z8BFk z2rIR$re;TMl1u^oV%RW&iCxWkEe_|ZEIQA!oe37cYqeP;op6Yg8UvKqS zt7Fv8;!{RK-slK>j9YFm`ty!@qXS@=Q|Mc4uAXxCJgu|D9!8p1xO7+d zACzomQ1(Lb{DB%cy-Odg=&)Y5H&GT ziDzv|bc-uQ<;DjB2`*YIZcWCy9sfD>g^_&sCz_7FZxvf9T`g%vp|JU(SjhoHW-;xPl=WTaoYoO}TIyK)h3B%W#_n? zO0x~mkX&-YSr67wlHh4?@kjNn;XO1|Ng%euQxB`PxDYV_iyOxuqk-^ZIEmD79N8%u zw=7dPn$4kiWu-dv3Ba}wk%z1T4AW^J=&1;<^KZ&e6E56^?rZsuVrj}@RR+$$*mE$X ze$*(}`Cb;~6%-NjR5p9X_d$O!ut(dBQ)-NCkC!#F7HASOwl?2l_pT65ZCugy@r|x% z9+VI0t|u_l8H<=q^v8(wKPK^1x^#BiKSZ^NhevYv$7Rn{eq|scFo$K))SaSWwih)C zfO$PnrOk?2P3edMP70K&Ioyh+i|`clLFBuA8htcN*- zO<_iUX<{@Ob!}%!zf|0K@3O_d6!~RY{9qLWgk`M0ZC94N<^VxUOTUc#v}0gH_E9!wG|YeFI2tYc1gF+e~y zJ{lF$R+ELqD+@H+-)`-~fn2u&-4^Zx^n;t?3QtO^=s;iyC;ekW#qr;&ZSpv9fj)Cx zQ0NzDUy%`jEvkX9$CtnwfZU`r%m1(S)hMcmuWXE0!{wW044eV$4fJ5{njUCWCy&CJ zkm-H<0y`f7SGXb$A_+Q>Dx?&H1QON8rj}!T+<EQME=ynKDvDHIK)pseA} zZ-^3wIz5AiUICKP`lKeR&QyZnveZkj>ro0_oG8!^#7?ap4y7%Soj)=FKbgE5O{CNW%bEE2 zI>K8A7r3F@CN8M5#x*!Owr5=!FS75yN`3?}j);Q&k6?PfbD^2a&e zaofT&F=LIYxlm7I4_4|h2{=x`7Zx25-j&7d-37TSXVQUTi|aCkcs$3=fV}?ulhG&V zcepbI4qavtU8_#{xc-6jW)RwP67T~IG7^(1QzEM3SoR2)ha)PXOfTH4LLjE5(28q& zr#!?8o-V}F&*R5D5TP3&TevG(-0jG#Z|9KqH>9Z`B~!296g>VvNXj=V5!&6cel;pD z@ILh{0g#Iz*eMqJsLW(!%QRZ2SNvzqnnprP6^xrWpYeimLY|MSxta!>LZ4&(PDU0* ze^fg|Y201vz2!F?a=?oH2MxBL%+g$A)get-2G$N`4Z~$GG@#o)Mtum8)YuL%{FCte z+zq~sDg0m#d^P#=IFtA9yUojyhc1d2L?v|K;X~&GK)P#%n9A#J>{Zaik3ex+&}oDE zfE7;*RC**9JA9)^1gqR^&le^FT6QNii2uIBXuBrc(Z^7--Da-MLbt6hbh5Cf^tRdv zXlI7r*NHGtuBOZ-;Q+7o6vg19pON8~VT3&S2TET0f>Hd zr=8A>5kS+Go#eW&<2^p{3p?s|Kq=68N%3dG6)S7hw_5JIA{+>M#RN%6&s~WB%Z)8t zAPJxy*US_cLhog3cix`jScOjqdGug%Q3ouQvUf#xOzRrebxOAb=fOb^l=DXJm(wn0 zO8fniq1w-~baRrifX9zA%^qwFSoa{UdJFtNez#}ljhVET*KKl3W2~Fzi3Gp>FQ+eiqXWctMnWoM|>QOt>OFL1EjcInaCybWlLsqF2qYu$wX9Qc=q z0+oKtcd7Y*hG|`nemC^v7kWH1A>HKY&^?)Te$DDhcNN0;ApbPQQ@pRyhTRL#6hqhe z(qm5;$*x{&-pD{aja;wp(PEp?8uR$WoT`b{nhbVRlt5bfZl!ZFWM9oa=GCV4vP}4m z6cOE(2Z@)yHUh8R0;5)Lqz|J{?$~Cr%d%<{-kw)9kWAU%N;bkE%IlWru-_*hQ}-R( zX82S6#;ApBkbINJYtt0Uy#x>6I7oEn-l*O*FAIuoxs1Py5`g2xZYEu$Ul z?lH|HxwVYnTPDhJ8QZ{xFm|T#LkM4LUOEu|aF6?5600ny?lA-S01;p2V`Q0TN5Aa@ ztMN8HsSCVGIr|Cso2IUq1e}7hp7m{``kd%T_zLPQ9)XzP_HF^7f8N2Ix4^Hf292mm z)vTYX#)!tM(2JOsr}hI%_&yDu;Gc17XYPsNJiP<HmVZgXD5E#2SFd(06k;j|O{xnwy@VDjduZ`n_}LV_6O zdip@h^vf173!P7S*ox@_&NZ}dvHT)4c&olgWyopCfLWRM_3yX`T1Ii={vk4d`9saY zH5)BAExUgZ3`dg0+a2LMx^@n2Km75>Uelk+GZ9$L^I?n}^{) zqLaJH1M@A&z4Wnbcgq%WAkb8;iWab~0!8lQX~YPp_Fb9jJ0vdyZXm^h*Wp zDQusJ#{>t2fSp8d9G7HC0R^M}2M5kuOGmtZus5-7u7t>_@PF}&>iw0(mWS{_SX>{= zCg-TYoVosc8MXk?A>;#-w$cCjrzTlYPy8B|A`*ZT;3CfdgHkEFm_p48yBdzkpGukN zfYngBf36=L);V-a-Yag)*G7!$JDrC!Vqe$@jzSa0d>cVDtRw#6;7(=^b!_tZ8hP{s zv-8wsx@j+jZC9;O_}6;!0d~}~l{y2|bYu+M=PU_OWdA56Zr=l3-`Jc&xj_{@Ru;oJ z@WvrDcD*R@@sAC^9B;6rM)3R$K%AVqGz}|vy`)l7m04j&9g6G5Bwgss?|2>%a1x;Y zSCji;UPCgY{!e{K!(!7(E6ZT8nZZoUhu4gKzH)xs zxHynSn2B*4uID(-c;N=r&SntZ`Aj&8M!dE*SDGixERO1&~=s zl1-6nbil2^erjILHB%TFX7uNEN~{X?O~pM!1_~#FljPbKNQpnb^!f<1UOQ1OO%(I@ zDe&=*ip>-0;w$BU`$luZRv1X8;kvWH7CKd=)+7Gfg;m-NDaSq%a0Sb)3Dv814Znp_ z*HJ_Suwed3q3EY2bRG^H-~;@ULAWN|bSv?Hdy`gxAbW&Zd{pXLT|p3_s2V>c)J;=j z$~Q$uFB&GVCq{2+YS>u%^#m^@BxA@dC%fi7p9&TlKh>?rZSfEE#7$hUg~I8qu6;y2 z;kMVMeFizJ+KMLeh+2lKOHJ)h;7=BU!ofAPqI@GXMJ@?mE)Pmp58*aEbo>@>GJ_%x z4;QazzgT`lM@|e8C9cA;a3?8ltPa>nLF(m1YvcR47caL5i@6!!78ei` zs-0p4ttD7KY!)~l?vT#!zr^bumjGbd4!LDb;alr~TcqT4vn;A1^jOQhn8@C8#Rh`z zCOh&N814*OjWJ+e7-*({R5kkE72zL00wy=^pHwJfXp1g?Ds1jLc2|bSygon8jnP=z z-sj=9_X%o{^CTTne6WMny&z_9f-$byKiQ#6!y91G^ul9vl*?B}CLPZQGm z)?%-6Ftf`$A%-z30cT0;Nb4S5Vy`l_nZw%~;Y`lpN~-+dbkK9}Ha9&aY3&fZO=x9= zDvXske+Cw>!*azt9Jo;#NvIs=hOa_K=|I?D-h~=u4?Ybj-tbM_)~ig_ZC1cKU?|F_ z=@JMov9y%p$OUy1B)!h*XIG0PPw%cojqkDR z7PWLr9Ed=K*Mgmyww3}au}!5YCBxQ$Ui-U7#ji5Qnz^3w=JAc?CrDY_O+hQf8QoRA z9mGB3AQ|e7`{WJ{MmE>HGg)|qHGDrxzZgnM51wl62r;JkiW5j#)cNOWOFEgnilNhD z^buNm6hCT;oPUC*T^%VK|prn=r+B?oNn!pu=`pijm#UE_1c8O{2l2B zC4R%0B&$Pk)3Q`oHI^_sBg|F)bU^C}4)$~+1HDd)B+zwae0Gu(lWk(DSEyZA+c6QRuRV;_!+2QirOlAMzV z>5k0Hm*?blq=)E#S?Y!KQHD`361Ke?#dZD%>hDzrw~#%X1ZfFVeqk_`l-L6q!*RU% zL3E+h3$N~Gai;vBvK6>u_N5p;eNcbMgqRzlM{c)bw)|^V#M&Y}hCL%{&YY)C67Xq( ztY(qQ*}4XO1r}(?_9{Ij5g*WT`#ddx+oxm@15X}3Wd=teA$414nwHI*oC`PH5q#sI zAb^P%gH+}KGyA+H<(!)G{DfFC6_dd;R>op?^$`Zsi6Ag{$)F!fLil3`{#Jfvom8+$ zb86ZCsn3p8XeL*f7w2Yyyd;sjM&l?)u}dKD{VjFFenIU{-?ReG5F+R0v~)zH7HruB zV=7pZY6Sgz?l*cSzPHy9uq#g&KNyh(b|~76_!C~N_a1)*Y_k4Zf?NUSV^bU$kV?|a zTV7J2UAUHh;e8gsie*rluLbE|J8l}_ThCum)sY{#o>&a%G<+@Z$k#ce^qnsH!c-m? zd|FacIlb0wdwMX@bSKWq&PV_(vu!mFMLEnNAqA}?j+;RiFwCx3_x5as|9mo|>NE6b zEp{9Yaanv(@`1&Wx{YMAuiKH=?^m@V6Gqt>PvFi9(6frYGNUB@TO4SP5rw_T{^DV{ z3K}UO;QNBsC3cQNJ;2?nBymoS7pyB~tF+Q4dDqg0ez(fiU;C`m=(lpy2?srE09~R&U?^U>^%bQ;#R4y#0E$x9(1HD}de&I)Wkw zp}ZmpWDY_!A7|l+7q4nI_Qa96{Jj@~?0M1s(@uwxP%CrIzNJy#+&%!8KNd-o9cM-v z!@g40xq}@tijvs3X%(%_To=-8eVIv?1;TJ1(>^RHL3#{8(>-yB3YS0Ble#u5d9)yI z!8f&Lg-Y7rgRymYss_;nH6Qv3Yz~Bsu=+A!R)$ly7c`*2h(Za9EjY1$A1d%Y1^^)n zLhFl!FxDxfjy>~8nTIKRVqSLl^gQk7rAM3ei$HF2{-{NCX5yJLg>PsDuzZ&~6$L8C zn|$NG27s6J>;-rIyhyHNOf8-xD!POh^R_Jz8b6Dj&^Ja@S9y(*nTT<~p{beMg7P*T zvCpkYsq65c9G-z3Q|Mjm1vf*l9lAtebO{%o$7lT*eeqNj_l@iki5ZeIQW~~X@z&a_ z^hcchl7GVB8u0TFc+_hO2@j)W)Q1tubi%I1Cr8G*9xZuBTk^g_xFfkyju2(4wSl5? z4I`O*{D=fbarx&Tb+PuLd_5F-k)8PmM7_WE98%@xw}nvqk?xI_11qQ+kQkQnnZrXj zK^GGLvKc3)&+?zbe6m6qA@=jWQdTo@=GavqZQK^7WLbE+JR&_xFUlToM;+E1_%RJ7 z_c75LUO%d=Wjw&hE_gL)@%{vgqy%9AFyU;iq2KJIhi$=+U*~1*FFPsCmmi5v9bHWe5;) zD{oF9BEPKc$ED2jPFyteoEUzC5)GP^FSmk4WEA0O0?||fv>o-mDk_6Og`jWGvM6T8 z{M@oTDz*uCjmDozapTIlx_wStv2FO`<>o!nuwnh)C{IC@<_zli4;mwd+Iza5_MhIk z1#oj?LM-Z(`AL@pk*7T6DN$gOu;<87iIxhwG1zBV&bsk z+n{X`CtLGYTpbulm4Fdck(8d9;PiedD!-S;l}w#njFTHT%t=_Rnmys6MCZI%7wpVk zn3rTq_sej(O4F_f%5%CHJmK1{conNs79pTD%#?%4NsInD&Q=Ko%(BLn&tgD6_vYL_ zS6uT|9jn8ccZn70IUk9Gg50_xD74SJPeV>8zJX#YW$GK6X^;`6-R~^kFWj5buXG0T zx}kwU9{EBbu{9&0W4^XjNh%#S`BzA=E=EXygXQ5E$8z6uxh{0XO}Ba}@j3VRwc?{M zn*cssyy9WTYL6RRSUi_vnjGbGZ-u(P#BFhH@#WX)Nt_a#er*8b&abXo98dtbTtfB+ zo2(f~w5V(W?8!65gTRS2LdHZLz{DBoSM&9kDyx88CfJ{fAIv2PVRcC~k0t(R2FmhM zJ$}@q<&Pc9Jn0Sa_;er`Iz2vk*4kWcoLl-)D+sb)7C62#U7gecd7Pp9Ii_8l4}q!uS@x)$U`97NOhGk@&QTo_ z1{ji)>SnMBW3Qo+_6r#c)+`W|4g5%S*9>?r2<0`^Tl9)xFuNXL7dX#~P;6M=duC_k z1hOZK&wK8gqB8HbsZ>F{6njrK9F=R=?W;iSPiA6b!Vrs@twxhkj`Ro!e%3O9%R237$Gv#3`~Rq zI_Wl<$6SZYz+j8_mVyI7;z?`fvaWUWO{4+qZf7S{rlx7^2PF57JC5x^4i@LKS~zyv z&-ELGWy(T116w&RMIxaY*R#HOMcl^wlY$aaOuI`e=X7C#UPO>flDLNtHNlK~LBTIy zQ`42kA+lA~L3~S)LA0X{K*U<-N`sR$Hp=>rn_q{*ER6R)+zIEEhQU1S+-pHYy*(ja zHAGt)Abm3>o{|~*qVTO-LoZ8R$?&84n@K?kXZO$Scdn&258`wl1-Coe73en5TBa=! zj_6*P3)9-?_+~oFT6NDzNWx4@7_cnh-meQ3%6u)A7d5+W^lq5JcgEr^rIfH!$B*CG zrW`}c2?DjuUbR1?U!QNtYNxyV;}Zd6y%0C-On57dvh1Ts zxjBsOSUqnQ~bqC0k@p)1yl3vWckgIeDg9u*Awx01A7z zV#NW)oa~z=A;{a2O6Ka6-*OD`i`>B^zXq2n>i?MEEa}>8kgd2rixDc4x0gzT81|;_ zv8tQ?6_MZ`sj{En~hWYGqhpL@{_> z0{uY}ZJWYyrsm&_S}vpkYM8@iW_4nFdTr9gz?M}Mnk&D{AZoMECU9_7`kOVqr@*9G zP-H{2XNVgrmoV69%$;YZpE-)L3N~D5Ns0B}rBfm9oPvpztyYgcc|!1~$-@kS1&cr@ z{a;oS(j<+)(b-5J^l=$lF}%JDOdYd&%&Y2NZum8pnM8gNKx^4%&^O!mtX%ap7Jy1c z)a#1cY>?FWJYOU*{_44ay4Kp1y!PfZ$*%ilfumQiF%~i_j`PzLk(5>qQs&d^Ks-${VccG~LWwPS(NOO?`1e|tv4mp}B8Z9>lrU^$-O zLyA|J%nm%tmsuxnyM&wa2$pUJ9EEre6#cQU9JFps2=TdqW&e*fznphg#=B0Zn%oa8 zBVe*i{O^Nt!su;WXVF*Out$B5xsrp;xi`o~LA;jG<|>iSi|POk4}EnqV}or+c|Uve zaGe`r-GQ>n!!l?LPiCe6SH%1(;}J_D{RQ9E*$t07%rU>tif|3tS@PhwR4l=kQVQmL zQonFHr*z9ct?nI`I-ZQi)U?+HJ&}ymo5{c*hHyC~%P*(34H73o2Dq4xGQOAf>Ax(C z0K3t!nZAC=OK0wc-(hjP`yzn@*~t&Jx%N5Pjb-R7d7EnTd~8D@{P)V8G90;cA0oj$;R z=r2z3TzP#4FopWN`vnSN=gQ_L$tbtv^!v({<2oQ_XC70w%4E>c)V!`ukw9mpTs2`u zPCDAxx}H+ZPQC3Nver%eq#ZIGVIoUI z+n*LgeLkte4ghlai;aRn#6xn&Zd|9r=n*}(=3vJYQA>9yYCgyG{8Fa_JW`67#zY^R zDNaJ#=ki+9hsf1%lvkp9e|gtM%+?ugjLT7LUoT)g&I^_UnX?zY;Q{~!nZ$t#iCE-N z($2!<0+9DK$g~Hq=tOL41E;qQPZ+SjU=dm4xqB5jG&C)~*KDDz#xx* zP&Sk`RI*7I#Jk|E3xUea%tcK$MfD+KoK$jpersjb1pY;j{m56cTk8N*YYIUh9iz7; z^%fgPHw_&r^#k2@=Mi{6r+l!G;v=SU;8IneUieCLxPxQ9`RqBi#7`Ou8W8@T8~&s& zww<2_BAR}u$C+Zex-WxA~Op;J?4(>i5Bpg|RnzI7LzoFd(xSrsJ7itz|? zTm6pqIS6WIwiBV0rUl0Un$RFz_g*h;bq}DRv6Yh-f7w#m59{02l|JP9B2H;a;D7k*6xhaM?^87jT>~jRb&HZFlKkU8&Qy%YR)~L8_6^*US$!28xp~N;F&Kipx@qWO~0O1OK`hS9%_fpCQ@Q=;N1*2P&v0zOAW(Ih<@+ecV4G{r7@2P5(!`I89EYjR)=-G}*K2L^ zDh}*j2Dl6WC_Eob0|A2#NgplB89v{=jr{mZ>24p$+;*0rywQDXl?&X!u%Jf#;Dn;` z(3ENma)=l{K84-hbA;5{+&WDzCPAPS6=TIV2N`sZZ5U?8_xz?YWiue{k3JirMGU0K z=IEuz&WGU~Tq6~d4AKVxWv_VrSwg=Fr-^F`rhr-y{!Pz zDYXqpA&{_xLW`T}Ab#cAZ9aTz0f)P*F20Tx2{gru@9c?6c?363tt(x;c_ zEG24o#Y$|R8=!UB${Qnmsgm;{LQl5uzXxy)IWF!RCKV^a$?ldo!l7GRa|ko&w%E}7 zA|F@?_Jy<2f=1<=hBe~@^l=p^hmc657u5KOIL9?u?Wh!ExDJ@wU@89;_@WjvT0MCy8DWqRP{}QK0CW{Ff?wl5W3k2lf%&ki(2c*{$b&`_NyIHfaPXTG5tpa0inCN&K zB~1}|3lT}8c>gNvSA-H#l=#h&br2M*62`Nm2C1Y+$PF~d4f>nClx#1PB0w5aOizfl{m7PSiJ5!u(+m4opvH7IG1$;R#1SQBCzb>L6~3 zBgWQFBW%15ann}R>;iZWL`f;o%P6>o!&U%QR$#rGdvPE`*c3UuD-l;w7yC9gQhf=9;IF%rscl$;?5uK5L}C%)8?Io#^zGB0=KPK*uubrDX=xW z^O&_4&tYi%{J{4jl&kl0o>ri_SNIp`2)mIcfv%zTq9S-%} zks$oMaOQzsZE*u)_&IhZ|MsA}S>9fvrxAd%&&@n8t?E?|C2Q5yX=Hw%hW0*)RL+Qd zRKG7LiR0hmkB?WIw)?tbTr+DhmGJ;j`^Z+1Fr4E9J*sT#hBG5va@G`(k{{fN@%(Z@$-fcfcLuh2a69is>SIIaDGh)O*uzoj^`2LmE zxzd@Oso`JntXhr%cq)7EOZ7?7gThPUVU81?J%;3b z-FT8Ei0DN`>gB~&p(KwWHs1t zLiDhfbAu!of&?XeqLki4DLqOA^+No?>Z71{p@)?CTPqNkYj4a)zBTqlVm^Y!IxlR5 z3P04kTk?g(JFv9XEpAg2^9$)A6P<2Z8^X|K(SP$(I@uGVera+hYaqLH43WAD?RoSG zGi%p$DJ3V`{X{WKknukCexXmrHDTXlG>cGFdCQO@sD;Ktp+1IP2HtBvz8dtQ!RUyif8UO|GIb@o4_AK&D2Uc=kM)T9`H2PM47Byz8 z5fT>0B_c-z0JquVu0`MMDB|!KljIG<8Y5W9H#??+KRDjg-(z%~?V%ckNc`YB@XLa| z-nzrR#30hhl|t$EMg*Re@Oye;B<17xTnagMAV+b`JDG;To&4NMi{)(+Ig(>BI<51? zTS}5qsm!?eXBBv&jaO6`4}=1n$dmNq)Y{^4mj+) z$n`l$bfxVKGlb?!({DauHhrb=g+N2D_P87xU66&kH1_?et(}V_@fNWq%GDNM^~K96 zm)?u|6UqG_#(U#(w!FVf|GqZnnx{IPkn=aaXTZnAlwF;t(NhnKSdN}HH5)n}X+dZr zmmXCkP&_#(%Rh$;i0D6HJT*x9Fn(CsJl1QDFfh99fwyW5!6mhun6u&u`^@9rml`pL zZQ7lWhTOXq!D4Ec+zR2)>cgTo|FYdCnoxWVRuTg`q|0<2DJaZGH$pR(rM(EhscMQ#m=)+G&j{4sfQ**uh zW@Y7YeD6^*`rnI4&eUTG7pTQEk8`|lHVV|O@6sUz;CFgIa=y0rMV_|5Xk_6sM5vf{ zxN(bZZL=MGG2Amngn%qr>dCk;!jact9!ORW&`!tCJecyX9%MNPH(9)>?q62GmE z20Ze=s3a^oK@29_qygzl!||3~gut?pC%$NbZTuk$SQr=Eh zFFfMpKn8gWPCvMTyj(@ADKB7Iy$}WP$=R}m{vrsfBPwYG>YI^4TWZ}aZ9dUwa$d9P zGfe#|buf4ZJt(ff24&_zg==|z#SF@2$5)!B!BBDqmCfZ4xyvQITJ6WY z`q-dh3W>r-piJ2A4tb(OwFWMZ(4x>PXh^}xW2(G4y23+b5ce8UUR*c2%3-nax0b_H zNs$gb6U>Yxoj>K(<#3LFF;UJEP(fN{TaSIv_9zO{3RR{@KtO~7$Vb)MK8i)}qRuc! ztT~t^>y&pil{-OX8YGJL4vqR9N~8prW+muVv)$&0!NJ&GHub?|9~ipnBn{| zp%5;L(Zy%M+9r&!JH9!(3cl{62gYSOGkLHI~@IWE5@E{^cUHy$c zgqxxe63ksta++baMV?Tmwo=2y$_RTN{?tH ze-MFF+GWRqEqh<1NF;<=(vH*GDU8LJp3k$ss{$nK&^m2w38xL=qYu+!q85q zd2`h^whUOX5ZtxI5En*F0958?JU@2(+f%aIA{dK^y&jPf!`p6`byMF66o#)mduc(W z9lh|Ap(00rO&TODb~7y?I)WHB=IuJPYmtForYY8+6$*@xrmygb*PV z!M6HnHRTBoZK~ei;iT$vAG|IRV0Fw0`sL@bM{v49Pe{qq6-zc~@Cl&^`${?>Nd{sp zq$KZ1niuvvoopF?g{r0v&Y9`U4j0+mTAA@4n>G8qPyZ+-UWtIhPL~M&I>cY^V3(^M zBv2@^&52^FsXNx5S%_UuR_4_hH^ePF&>lZh>pPln9GF$>SmUSU#0yfiPDc?TJ!**M zJTAFge7^37)3AwA;XWh(UE$blS+Yc}C04XVVydTN!Xy*&f;-f{(|Wixk;rYMFsiRH z?}evFJ5#KaJ#z$q`cdZRyrf$U6^^e)5?JqHzIMUHuP4N4TrwP!N6i!XY>DR0i|{$m zv2#;dXbT%ORVRZ0jJ9is9Ra6a2TFP{ny1OnF9OCVozwBzNX|Q>+kQx$W>|)8g96n= zqCXH`gy}k#B}lE=-h)@Go^W&8XcWC5_Bi}t9`J4_ z&;g**{$DqjEZ-j}H1`nnHLFBav$;!bl%B3^hJ*^VVb6GkBWCRwI`sRmXfX_t+q-Nh zv)crOUh8>E3}$Y$RDIThJV%w5*f#Purw#MhF2^yp&2kclh|N#hf)|@NAFeb(S@Bfy zr`k8H$>^9|Xo(9{Q9T%g3~=yvR9}&k+uu8jxoN(+YD$f=Vud{vtY_H*Tdx zf!k@C8iBBFjiS;WjU{RjuhDr87ZLgdDg9-|i-6eZ4w{T0$}8TUvqYK{A(qW93CEbr zXTGTPs=1f?YhfA#*?0Gn%Keagx0UOym*v?YPwqQz5v@KlsTCBKlm?&y-M1+S(qsPM z<7~p&+iG6lw%C>0TG68maDgjRF1{bvjC&7Du zMabyDPj#%-0r=Ct`$PjScoP?tP?;=k3tuhpr?Bj321?x!2()_sNWfq{ex3_f5$@NZ zB7EPRJr#`|_u!=9AHR{6uXd(I%;ejrre@MQlGPXbV2Zxc@^f5TN0%s<-h2IXLm)Nc zTE~Om#{I1lC~ni%yWWSQ0b{*RO`|x#nc$LLRaHPY%nc+Zs) zfbQeBkzl!b8*bkgI1Tv2MG6!_izFIrROPNpSpTV6ak#gritB7P2T9$T zz&7a$TC(6y0r0!N*tq(@H?hMa$Rp>d2An!571$8eDLzyPcOEx8>nEU0e$7HN!lf5w zb?eHUNd(*LDYV^-R69sOVlj=iqxY+OdM0!I)Job_tGGt%U0;^A z0Z;_oBxlcycfbbL6eqi563P{D>Vq?rjol=JrnAXIpV5VzWE$bxBk9>we=B@hv zjcUxLDs64~#+`C#W1gXUcUCqv9F&Mw$-kkf_rHTZs^J6k=rAk%137@sjq5{W{}WNf zlXYSXHJRj`V;XPe0QFZciob3Zz%1@6&(=7s=9A$?TdDB&g|jDdQh~1tHDV z1`!H##Eq$!ua$)F`qxfJLM<4pECGps=#G3JKU4LdOx}b*o*89gno6dOyo|`Kx$cb> z|KtV!Ekn^n81OzJ18465(kE$FZ$Bt0tQb?Gz=>t`kN-WjFTsm(4~5PUu-0xbQ0*A9 z?_&g~lFk{hcSPSHFn8~yHEqW(xF9f7srjs7MyY$4+D765^NXeCx9!X+&^@2f|BgIH zARHkC%*jQBt{}Gkv!pv+i)8b34T^0SZ0_#P2U669t+0gN^&*=O` z$Dqb+ao+lG08+Ayr-s*^=MIMQwxhK*Cw55|LCSdNtbF+%A`{>v140`m?S1KZb0Q~Z zsWAXgmg(?gKuOa5CEx=WeKEl{sn!R2f#xv972 zOOmAEKJjd&*3c>=Sh;K0JK(Wzuu47R63<5)RT8D!`!U!YOynq5+)xJ$pO`Z<&3?1t zX37wJ3Dub}TxW-nx&6Ai0^;ym;sa}y?d}8asH#@S%1Eo}tFQigyXl)t-{-mBuf@17Ryf(U_0~;zSKJpVYYIA8q5@$7fEPu!}?s#6cElkrBs{ zTW438*U#zPFo)kmmqL4#cROIUI`|ktX$MgTC58cduGjR%OdEY z1q;4AdC|Y&{Rn8CQnZU&!7y5NwjG_Tt||-Lj^Prnz&Ns3P7F_r{NHiQzPRX??kmAy z`@N>60o!NZ_wsc5C_!mEp%Z{j*@55ex^SLIEMs&M)PX|1QKaJMG|;+WeqkQ|wed0W zUM4}hojYK`xQ~Olg)A0rW8>yN*6t6hJiNnn46PbOoUkMM$7?QlSeV0)HX%C z7vCRdJv=KM4S_4~%N5Nz3Ft_L>IBbw!`R?%CU*n!P@M&_U3XZcAwKzxOj-7cHn#%1 z9Tv&%xp2WO*9+WcY+P7oS1SWvu1#65pR4O*NzS)5lXI_76AIka)-_(9JU=0GPoL+t@8!(=E=Z(tRwA6En{csF(++(zbsK5NkvFdV$r!dX}%Wg5(!-1tSB`8j3 zNu}5&6Y`?NuZSC%>8a)(7w}Ya*2UQsg!D8{w(5Y(LvSb27DeQ+Jkd(OefZ_@Xh(~kIe*eRtJyzg?gzvsLh>X93B9A z+(wnR?Sa~ppY+6&fjg*LL&V{sR!FA60j?$qPcy-+eSFvjAwk1@rFcbvagc#r)2&M! za39@1Lgxg)w@mu_xpONYWiN$3uPp|(@xzb!$I5M)apIz*sUr7ND)%=nz)OI^_$Zu% zKh=`#i-P!W&%U&c2LW8DHnQFetDAgl9UX(6#&m-4@){>JrQvcosg#}6;hMFqak2~s7gF1{`P;VVw60xhK~`g8g`+lrWXi=RU@ za>!=s6=1DprWA8!HnsKb>{7AXT%;yurb=^F0(1|po!I+xBcV0qX=~-Q!;SJeVJpb9 zlDCN;5Qgq*vQC3+61$!4B@k18>sQ|Vmg-LY%q&-%eg>7yyc60O*)tq_4{okicgvGK zdhLKv%c~J$Z+Dk&Z*M2Zoedc+bE)Mo0C-#7AwDM8o`}p{&WEdx3RW6qDhyZ!CX-ZynK2Wv z%kEZnw)`&CM;;bgK0to$TZIhjk5q#o5ND7hcfPGx4tyNh+Bc$eFhce7@AK*bgEu06r8Q0w>q(}!~FgvBQ(mO zJ`o@n%SL-N(;GQBRIf~6@$-|eJqg-ivQq0iPGey}+Y!SPaT?aK!%yt^FmS!J_Sfw4 z2{c+|9k71xTZ$`Vi0edYLyc5+wYrIIvILvvJs(WKx-`@cv!T(gmLX@TZ=<{mu1?fx z*QxN#Z=t@qxRyYjMF>4+`-gi`9~!)(q^dAb7-ZN^RCF+0OC#I#@rimwD}65>A7Xi+ zwUI`LVV;u*5=-_blYkr=qJO3@lP2PseYvEMB$;8%hL;Q@cm7~*N5Df8QqK_UiUw>! zh}CgI1^0*G71X1(gW$0U)-8^g8jF@OvR$tdHCg59UI^38ULsj?gPJdusSylg7x2|2 zf=QR6eWA;3@=_Mfi9Y?{7HaHkaY%J8;xE%QOK^wa{YIe}=jBia{CPJuGOD{VlxHpF zlFf6NN#EyYcfEKFK+6l^8FU8qA%@JIq8@dPlV|>dzU1Uca*E}Mm|{PT1=Bc>*0<8a zXGHr4Y!P)v);JGcC40Zh!maG6ZC%PR!JGI^pgFL{=1ToIfli5g&6XG} z-BZf>hH*t z&n1RLV*wtL0Tz`CqVITkYNWL4E!1o2x)|<}1BycfiLX;0z8O;olRA$d`O_UNo|7gM!vDXVs56P^$HfxUIE=-t z69kaT7AkGc86qqUyoeo)*0N8Zoj@BMDPS-d+Cvns@YL0F{tNfsp7xrC`{=R+8`HRM z`P*S!0qFDxaYDnp?BkKm^KqV*oD&Pw&M$Jbj+kVP9S=a1X$$!MaJCF>g>O2l9A%5^Vsj=kDYWgU(hxkJ+bW(s6Gdn++1eAD=&ua>uzW?pyKQ81c)7@JY0~c0E z-N2jXy7e0CSC*=%BemtER90uXKZ(Xng>~In*W=i{1EM9l@qJPxtu7K%CKI&03 zl1`K~1WA6<=|N3CBSo=Nh*kX>GId9%&T%UuLtXMpu#W|1=no-FMu z^&+UeUFqTZZ_q0~s;-f|gya;Asvp4M*RXC4ezB-sr?X~z75XP`E*)|${NX}&&Wl;F zC4}27_@9aM8udq%c7r65+POmFkJ7b6jrIDE;x`ejR+9qezCGIo{Fi+4N282D1qonV z?k8#jyB$#2KVTVsxJZkL(Q7zy>n8py{elna^4vG8@O9{auaJk3V!MdWW8vwkiXXWL z@Bag$oAELoYV-sD*56WVNB0*wjdMC~+P1O#+C`|Ws3qNa9CP=AOdu_)uJ&F^g=6Wl z_VwmThw!wVfv;sCn{Dn+JblD-H?n>6xxwDE-_|bj#{{%WB9(2Rz8fyeXlJ&!Efu_; z()}f84mkzRH17Ns4;az4m>0H17xYZ=WC#DrX~HlgW4D91DHRA{bO_PMQV^%!I4Jga zG;~nKaC>4-8u)^Iht;^#EPo7XAiGd>Q45f8WaBAP{?F$cd|EKHd`k92;OJVB!ClAL zF!w*6AZqS3z)M12yZ{}%Zwr;Ye3l?Y{5ejwP*ce56X8WMSQ0Q3ZhIRzIkDDJUVl5r zk5Mh0)fr{^+bb~0MEJHVEU=hfO^0M;3qkd!jxt`#A_f_4ihas2C0wQPxFeMi4gj2N>!-` z`Ie)ZP31GGU9ko>*h~eRAWunpJWtgrp{f-FNkVtnrOfsNgt~-s3@GVq9(-7q2yw~Hj847cI$|=QK9aZ212$m!o^ru=d1o$)) zGva1m-GD@{^li2IsP201Z8Lp!aQubd3&dkF&wJ35z$YmPwk|N^;dO z>U~IR=+pvILM`T{J1hiZ9|wMAUxhCzfbP~Fcol8W|7wm)E;JN-M(jn8aVo!jxcFds zJAQZP02w!aizo(&vQQh&IR=7FW5_)ja`px`!TUGpV}4JFOn_DZ9>dW+LHUp?<*#pw z{7;~0H2s~Ok#73lp_H#cEQP2{!a6p2^?9raXaE953L{RwJ2c9GiYJPhaF!r62Gcz+ zX89tVPZh{wt;!SCVPe%px|x66OpXqR^O#*KuADP;kDuPh2AELJll%U=4BDICM&e^F z6Dw=0Zn;8pJK-EcW6q1}3SikR9>MVyHSfMir@k||D@4Mmr41*x6rSnXa5!?p1Ik*vY^g`LBGp*sebW#D{v!_y zc;Rufj_$#A*|Q{sLk>yIQ5JZUmsl$@MnN7^_d}ylwCP04jHsV?zsQ|vOKOlRC{2%V zT=)4 zhC8M{e0*AS46~@tUJWK-GNvZ6_JuU`T6P)9Of>walb$EMY~Gm;K=m2x=MA}4MgW>o z`%g+Fsyb$tCxrR-wr{aCuMzuBvZS!))mRPjM9S)Wu_$L;c_8^2gLtG!^at0esR9zE z_rk|7C|5biAOiHVfShK!5>9aO<7i|Dii~_U2E)Y=S89c86Y$-8vE~{(1W-r1wPdv( zx%7?br7{vFP)HN@bWx4gMYJ@_rlnb(|J$%}ZPE9m(BN>V$9c+qoQiZI*z* zy8xA{Jl>#0`QeBP{$ba|kYzxp!KPq2I&8oh7QZWosqzZ7bh(3|(;NZfd--?(Z9Lk} z_NMiM&)5bvNo6#wd=SJooXpBn8n^XprarHfCm1kkEoz1vHG2->Wqz_{b3L?EB1QN! zC1+=LQ|BO9#-LS>PszU3Eqhx=c*uFEHS=X}X&UJP+?{&o+IZzFa@&=r2_r=KxXSZe zOA^)mhihrO|F$&36YoJBWK77Ai%40BYYNk`jjC~F7V|LWy9qo;(hZ+HG8k6=l*|j5 zJvQDhGi?1NAc+UpRb?nDO^KY3LyIx{M#6MqM290^8*|PD3c;T5!8xbI*=_ zONwgnDf=gzQVfHnlTzia&%!Yr=^c2hP+_CkfaOssyw;Cz|AxFBC$gq|bHA8B541S* z_%k65`f4FN2*^1RGxw`>Ura#9a(_>=#HO|7+he^EC_Xru?IuS-bHl~_K!%`%I~s2! zc9%BV&GM%$esEp;i2Vm7sDe?{WhVY3U>=3ARn5%D*T~f+o4u36OQU5YcXpf5G4>E`IJ9QMBJ%ZV;b-ZM(Pk% zYe*n(|4AVkJn6$@bL{B#q$lpkoiD@&{M2RPER_-zi+{NHAv<*N2>d78^F~FNw8^i^|OqpuHKK5#E zg)RUlrs5thR=aobE$+kk3H3I--P`^U8+Lh^0JqD+(Jz5~YsdIiVV% zMvFcVlRLPvLwXIq~-4iGXU6%NsE$Ge3EPGIt7d`Wq*;$RVj(O_{N^Er)>JdSHHAv8%%Amd)= zBSdOZ9^v|Cq#>Ih-QqHta^l>ZI@bNFA$zK4oU2~(BM6N}}Pb6$N zNyn80rE|1WLh0bREBI#oEl8?ris}Ne$ageLwB@IhG=DWy(+Rv4vQ<-Df1Uz94 zRsFINVsWePKk?ZmcnLoJq@RXsavD|o5p)Ni+?_E0vMJk(3fy77R^fBC!aG;!n+nF5 zuL5_Evnx`RhX`Oiwb(dN;TB@m`j+eRMQ}SLk!@5_you?-yp}s`w|S za+X;gav<~#R<|Z);#E&@8kH1O^wx%Q{teG6y|CBz(=SpLNt(Q(MK#c8TD9z3c_hD- zpI1Y1(w6K`iz*7P-F)52K{4NaZ-qBE%W_|k8}t%=S*^`v(Cv*Mu#HWCHw)DJcf)T| z?Nq5$yfb^smYxT%_nu$-1^CrMyS$X+vOBXt^hFUJo-~8umZ8p)RjVAC`BJZbPh#Zl zLs9+B>pEXobP6ax^goYArCl?u&CXpoBVonG(oh>!HsKqlnF^BtSxh zr+4#-nLq%%_K&I_4>|p6{s*h2^Y9-O3EocTgNS5AWoLAWG3PK&!X5L3XyGv5GFC-oMUSYz>|=1DNUX(L#|LA=sxxhheV9w&8}tg93?g zF00NlsO&?B%YFSqh862=9?&oD(hX^qaAP)cvCLO*ZT*v=!aM%qqG;An~Wys}ZNh+Jb9H}%30N7D%LrZdOYv=w< zwxan_#22`XuC)<-qrB`PBYm*GaL&v^ahNRlj?S*EY8 zUsEUEF1Awkw7=@Dvf9Ny`z+ghrcpb+PNaF)o^XDkfk^Hq9r@b$NQW(l{YA{@ke;3P z-OA@|5#i-#mWIe|pJA%L+uqG}fU?UkwWaYkQ6P(7EUV1SOXU!BkuCG5Bi|#t>cqqP z$B^4l`qDp>*uyhfF@POnfV$F15}x*T|NZuyOcJ?umAeJjg5V5&cbIpOztQ0cD55(6 zyRxO@Y-+V*H-72X{(^eP9_tGmStyDap`G(aXw^roz0H}s zmGIOpBa^73CMUgwmoUuVE1?nrz@f_(#2%yceB$`@5E8GZBjI*&=B2Uds+aSUaC4ui zTG%e5{r;Q-nMbttqFH1)g+#^O96HiPZFy&fks~8xqx|}`%!%Ur_G@08ne^*b+Oo__ zFz4mvT`t`-1tK%%gr+1!J5YNGfNtg9 zK8gw3vbw=GH1(~b%|{!FxQFIaYKDm>YH-cwJ+FTf(6N~=MQcl&yj#3((EC5@T`GxXEy@1RFEOn4@`S8R$Ikp3VN%8(Li*s57#xy&Pk_aB`z&hp1ohTPoq zbLOHHGif0qE_KLh6+TKV+ut^ED3MJNlkSTX#yVaxR!g5hrycf7e9opfZ=J6J zw7Rc)!LBSpD4{7z_(7}HiK`0U;gA!AKc;NBXNVrD~bmRzEz87lqBpyJ@R8I z`4vZ_o%9fv8X%34q@`HF`JRIh=H5w@YzO$+cMAl-7?_aVtPuy2CFRzt21u91n-p1a*Z+n0k(q^U6*_$+J#TY?|gk zh{59s8^+<6GB9cvS%^^P>{3c9VAq{I3x}wmO;nFP_VeDr-0$QMw5VQ*OVP5a*egqe z$}PPu-g*0Ax-M7HWu=RHqIC^+G350UVV^waQUIGTAnf>_hN=$+4=ySi@-%t^#xsW^ zi-X`7vhN+C>S^hzF`H!a;J`Ikdq@eRkale-V_esRfc;A0&@|9L=)nSEZ@j%bOwuJr z&6xVIsDC*207W?ySLoM$SV*Td{{HL@BXq9N=N!hX(fc zX1e7NMs|8N4n~qjPQ6lhb-d#J-$&4j=lJg|yL8K<>?VG(E*Cj$bn&wYVa^4rwj~>e zpOy=eev#mtRT*f_vuuT;>MlyPCS=}x1av=%7f+q2CQyAQIg8{s=0v&&uK_B$IV=|| z;XTDwX-8)sx&;Oyg@RL}IUW1G2^W^?!5CPEHS&KAuP@BHz%69@G+UTnR(o{W%XOg5u`Ii(ZLGOWx0#E`J}|=nrBK<; zfm;`6x@8de!<}XKp#5%^-0n|kI@Rxu_O@N_$f(-D$_m@c9_%%42xiS)wvpr-Rj;d> z=Inu}ws7zKgsS81c3{;8EF#KKppS)Cj#m07S&toL?{bMC%&A>9D!LRRvb2CLsc3V9 zqP6}+*u%hq&&$XaF&fr5=x5*b;~UHJtz$25$z99qDDw3Gde^R=0*!}6?;3dL^>TBb z&=WQE-Cyndtw#E!$x3*{3>x<-WJp^Cx?}4J>?Kqwm=WthDSH~0J%;`*lXk-Uo{hY( z_xG+?O`*()bX1Stj(G~YG9sHuFwoI`hNqZfTQTr6(Z#p-Lj|X^gJdpEk3Xq`CZ69= ziT?Fc4^^R*W;HDQvu@D*b8sjiIzfihzghIGHxJzx50M~T(TXLJ|AV8Yv@{m<;JRNv zwuMUL29q~Q!3SbMLrULUzlGftRnFNM7UQeafCVf3W4RsH>UR=C?3G;h+KZtD>SkTf z8iJQoSILoyE4JXi5_VVl^!IxKe*sC!umZGi27%BvztH#Vzyn7e%v%#N7drfWx(;=5 z@w__f_XI+o@K6g6CRz2L)?9uHz~-Lk_eHvewNg8(>>5IH805gS&m!7_j@vJB9i~Y6 zJV(=9NMLNCaaVQ{o5}%JcafeTbKb~#nJwMLcm!EE#7FYdAdM6FdA?}+GBFs(>yy^cb>t^`$T zb%6pEsgm^3wn--7T8y~ZPgjrQszVL5`CXB!Hst-6^F`8Sarjf?RnR55mhOP*r_~g} zdR2l;v~$&p}97QF_@8vbTYImKm@?}ca2F98Jf8NN{VT=Z3p2B~1U5K-DE@6^(1 z)!1u+^J+!RsK)^DUXw4fyUL|N{+pChzbI##6Kx3+*#;>(JhWIU(pu<~{=eE1UOZ=^ zZoJ?3cpU(yO0gU;2%?rv!;689tAGPWk#Hd7(9A@00 z0rtCl9A?pxbmz~H%PCz4>ZtkYM*Mqwme+1IHaZegN?l=M(1YnGBGdQ6bx-%V!}kVx zPn-+z($Jj1dM{j)_%aa4iYEx`TSWAkj}NibdMwjv>#8j@Cs3gLT;pPt_H$Q{c3qE= z+M5keFB$bV$aHdXWclNrx&1G>+v%Y^aPUm-v0zc913B|etjhz$Fs;y;MLq}04QOjD zgu}-E7HYqU^}o5EUBKTzh{ck}AFP@Ohui)Ju$EnG76YnztTbHE1`{?}c^x~LI>ndP z6fzw`q!urzJ>j!R=V-OVj=gW(H{>hI4jMn`n%g)|lK$o}0s##y7RE}H0sYqzNvNBm zVTyX`NrEp&WhU0vlVaOP!K{4`zRctIU%rcX>^c+=fp5o$_70VHEjo5y+ehYOx3YyW z!+f$$5;^+O<#yq!z0}z2a5QYL$txa)z^KnCz?U(Sel&*eT?0b2sAoARTz`Ki1nHmU8!hPOf)mZs5Z0GeSEac z3hE=yTeP=&WL4{g=!@7q+AB^fic&|W;o}YrjkamgEq__{A~HzB85SU&$MQqG>DU%& zm}>zdw*fN!BksHbH9a$@_%i-R=T-1W@|XIl zSdpZc`cgAkW6!|p{vp$#>Qy9lN2|hCra4)Na_E4z)Uli$TILI*&Ie$=awh(IV2%aM z$8ZG^=gUadG`LPh{wXj~*xuNuJrJ)!wrmd1b0zs?$(Oro4UPcm0dNaVZpJ zzXR0%f?2dkG4!{HH$t34ha&Othi;B5_2N(#Pzz9+)JXX)d&HK^S}f9DJumC=gQm|% zzTxPPIt5UWn2{SjZ*}PI0f67h8pAQtNr}<&I`T&ajXD{$Zu&v;7hxo!1nMI)+8;_%bPHbASczwoFB+m^%rMjVm=RlPIlQ0QoW+QfM(@miBJC8qw?L#AVjj z$;$wqr3R!U0MPs{bf5qWUjVgwl1*q!c{?CC&&-ZJP>$97$FRJ9H=)_|epiYP<|K`T zKJ^?|HdG+nj}x>_(ld%9wVuk4S(f{+eGz(BC}4>LZ*-aFp(3{tYG|63D@>zT=oXhe zT3rh^>17r#>&($Huok%;(UVS1E}Bvwk;7AEh;1xRJ{n{)D((bU)jn|ZW|qm)pTofh z01){>=Z|WZ6aTI7duq{>U}B&hoxe z&yq&8HU4(HYPxLM=ZmR)3(QMZX<4Gdgz+br3EKkO2ZH64y+GemvENV{kp;{YTsV{h zbZYoa)xW%|6Vqya#=6SU8!!<0ZWE}@Vdd!Q;r^b-7s1C=w(p@9hQk@OUbP->sTi-g z;JKRqrudP7UO)dy(6>o{kR9!XMYC?jd=X_@NqIURp_h4$xpAK^K8e-484lOPx#`hP zMPsRekps0{CcCiKB>+mR@}=CbJrMBdGC^zZT^;hMoJ0Q++Ixdj%L05sR+=?T?x zad5C>-4u>%8tAdapnC@Cm)g<%pf}6PL=Zzf5k}0l?9I`fl<{*tonrm#!a8sgVj1YX zDA=KcL~#*fYj=%cA_S#m;pCWsyL}p~m{SQz{!qO}rNuo)J9JSK;w|2F2PkFa(E0qo z(YW*%#mi5GK@v*Z>G-)QDbWi(yRe=5mAk6%1|IS^BQ}167wthm?jpW+{XQJ7$YImN z++T`;7nt~2#9A_5BF9vc#7S_1Amkt26yN!D>KYYN1W^2 zw3B8R3Wgedb3xFouLauk+20Slahv~&Sed%Tp}Ydw8RK$YW^yCtD z?EroI$mS8GElo4b%<8T87>L_z{&sPpyQNROpH|mwoM{fbDn{&=nGLpGI+>~cQr`&I)9P0v#qiQ3k(V#%Rx*^QhYpC{9ls*^CD$fcWt3xTTo_3<_=gS4t`iymc)wkaz?*(8HBnUZ27H7%+~BS;$H7FW<7@6R;+fa z1<8v7*7b^x4}A(e12D$9SF2Ywa0&d&@nc2?k?JP9lgjerYD052%{n>Oknt z%h+diuenoM?d^TLqC@{rgK~y9hALYHeHzjPHemVj*$64zj_XGdg_J>(O!nQ;5Ng7w z&8}GAYj6`EHyDN@5wrnEV;UC0J!4m!B+RtHgXNXMrQ3-zU&~jw#f0ZsQJV*}Xe8A- zWzEc#p7ZGhJL&Q#+Nd2;j!JTGoc8B>ts|kN^B1X5JUZsvH9QLESal$%i|7{-T)aG1 zw$Y|^D%&xkobg3gcmGZwT?pXfnm};e`sk&qixK_8$DP~r;-YYHZT=19f>zHhnb#`2 z(JURyQM=MrdU@v)*dTWXeYQbcP$_fG9ed2wR-h6ku!>IePY?RsvrH+OArl~dXDNZJ zG-5JQlHetrT6to2sfzqdkwORAyAgOmjKWS6uR|m35^wM&{03kZQR(O|VaE~Rwq*qz zoSV7UAr|8+(1_7OD&b1>lZd={mBHR}QOd177=0mX++3>U`Q?8`G7A{8jqJDYO$^pmo%mMl24YEa#{4MP z?Dl0qQest+V@qLPqSJuJCSNXsSr7?t0=**tRt*D9`q`p7lX2E(JZLF?{yM=Od^D#6 zcFn5XL`3ehy3OsE!7i-dKw{fqY_N=x?ugOf!7|;@?SFwz>RHz}$enM*H|rIc)}c`{ zVB2{WWW-Os|0TbBg~7F4!@)sOksovPWKXP+B-eKxC+Rwf9OuZfRh4YB}Qq-nIr-t@C{HlwSUZX4AAmJh=AF(Gf@Mk{@Wm zoZUi7-#POFD||lA8}+xfuYcj|n(5E+HgYIhVWixlYeF^dP2IJsT-l9Q{eD6gD>OZJ%R~I;hA#{+qX#-$gyNa zs#6*f4a?)o!xZ(w;>L!Ig+$3lWNdS%QCm@<_rP(Ve~mq!3FK6SPb#$sM0p)o2I54> zc4Bu)fM|x|r%<3>WZwU}f!tkVR)FT3Yub)xb<f2eAIBK|A{%+MeeceCCT#B!BY-t$Pu5iIO`|YDj+SHioNp0Xx z6c|&aw*C715vzZvt$DLqCzEh*odxMuNwjxI)5B&zO!_))%EwZ2& zWt4m>*|dS(c;~=N8TQ(S=Q4se{4&j_@UF)o>_9DSf>{woJg|Sn=LH9gy}n}#n6^wV z8XQ8p87pjJQ0@2%!^mps?kYGwsj9 zm8Az;Ov>1~7TIo?Sh8yeJNRo7!SDD|h84-~_R=hl`JUwvy` zpK~SO$%pB_wIvZDFf4E#_F8OE<>wUTqmsKFeX(EeY{!@t0@VE)SH>ZC(tjdGfIHE4v-A*|Z8c zm_*-;_O}7kbY{M>paUoWQqWe8=t~CQA4D1=6^>3~RjLsci@DI|dhC)~HW)QhTy@x- z08hDQn~9caDUoYW?&}-)z(S;t^8CU`%dz{f6L%&0(aSg4(0;?Z){m*FT#df^`7aV@XMx;K&!?2*Nl0ZNzkM)AlNxjSu9N3YS_1-`s?5J;G$e;t&o~+ zsZz3H3X!rpy1KF~_*dT=cE=8fJ&({HCvuMS_W@Ll>7&ATJCHuEHPC2Jo1YJ*zg%mi z9yy4urm>&}c)2S|KVR)H2BBOmx_d$&s89*IzEqfgZ^$r~Kr}hqUSa8AIbQQSPI@Y1 zgSRF(F`Q*Ads^fJPBaHOk`Qc9jJ!n{VY9|>#2Gxa8cpM`9V!O$!d=p5$U%Cs!%7Vi z;r58{i=qXfTd!?KkM&HitXHGlF+behG9jsp!a>82ZhR8oinGt$xRWiz(2+8ngZ7L_ zH#@!sZaJ+8heFpT^q!6ixGbJ&Dsn(Z-E;w2xMD?oAA4GH-M0J){7Ft`M~Dc2$|rt? ze#bwIl`?bRT(A!zVO=pds9Z0#9vHf)UR0*%LjeZ-r@6nQlwA9zo^7l)b)Y3sb><#% zhTnrQph6VqbfunA7W=uwmVxEgo7(o&;7K3g3Q;sdki>L>2k`(4%5d#65M8CX%gp?akVa2{}tMNw(}!Ohv2?r_UjCXdAbvVIUSzcKljGhaU9lq!Ob ztz&-C`==`oB9_Em`ZNpVNHMtd;NF7^N`6@*H z`C=g=cNP*XR79ltsx*r_rsreJPgESAJouDoX$Ha2z?k8CkM%0ubFY}Jd8)~v$fmaG zDsW%|xH;T@K2U-?f(FWrM_Ka=xeIQcNHoMAznpIfauXZSO)w@`0-?JWwwXpxa+@q~ zQ9INh^qB91BEd)1vvLKpZQ^wpdw1~OOke$>GDBJhQ*2!)s_#V*uQ>nar-y;7;C0N4 zEE=V$KY%kDh55+XwrXPNLrBk*Qa(Hyl+lJ-sFKlf4b;AV;}GHxqGetEF@0w14!(7&ZQ(qvK; z&vy#x^oc$3Q9cja%NA#^WiO~WxZW2}g9eh)t&}*%kN~1dG%L zUZ#WfdlCl@!jveRUxx;&3YYY&TjknuJ38%p5bD~E)RJQKR+wk{k}>O*#v-jxhOHji z-F0Qw3I9MaU6-2Pwwa5l_qt?l*c;utX5Q}zh64eu%UmXAc0&CvL>{V_&!A!&woMkeeZ&BY=xsJn$8(h5!=(u$x40ExL_tzy+pdh-y=hfo0r{u*DZFVWFXcryJeM)f)Qzmd?z&BvsBQxMwWV}~+28VX<{q|-JUEaDr z>R+(UrTnhXMMG{FbLmN{hZHWhdoUu8joiIHmoAvkm;0n;$*Dejf&tBwoFJqF6a;;+ zf^Or3z4Vi7n0Q23+E4<*`k3Ssv$jC532&Y{zl5^w&{=E&k?mr2ysD!zk>ERH`ljib z*tcrZPqvieaqwD%FNKRx)g|k$0U`u@t2(l7=PJnhr>epIjqvzk1hkU6k0G>yJK=7Y z&I4+tm^|%2b#(sU;do`zD1}nlLnPkABe3Es4-zFWo%bZjeX%!8SnRGZfH8MHOC#)y zKfCUg*|#jv_huVr@)0=Ja$3S z$33Qm8<4i3;$pwPFcf*w>hHq$nG$0yx^>f2SrpGD179f+xu^9rA7WH9cXAs{`tB&T zaK9}Y-}%dZ=!Fgk+@4?)uw}9s_Z&4x;nBLg2Qu!G9v)IoVEv-~UREpO{}^LZ>sbs{ z2gBTQZRpq^kgXfHfO^@4F-PL7o!Il&!1-_VNHx zx7J3d7)Ri8q(L3Cfe^+mGerB(4p^KU&|cGP!7B+CroB&{DFll35Yb@I&{@1(D4eat z#KbWC34i;QGrfT+Y6f8#2HVcpF#%@PUYI1xT43I_$-cY9${)K9#m3>}!S#mguDN9Z z3AslwinP#B^WTnTD!Q9M9y2+Uirdzy-n>)U^tc|DSe+6bz*RFxXJzyC-`q0Hix-d!q zTL@KC%j?uy-c5QH9x8#5X3AQQqww1SpZYBo4G(Xhvkecd?PUMyj7fQ&S8Lf)F%~AG z;6$6{{amxvK@dxpp+JCKQ$Zl8L0pu@Ocs1EQh1qc%W{%Qbe?su{m?4P_q)pB5ctrs zsA0&P`#EkIIpU~sF%ZHkQ)1ICs1tJnYG}$*xSw|+qHGmWMB3M);vr#9>|2G!GIg(! z?hNh%{KhN$gAT&z(3$?780XJHL=j1r7Fvnx%3olKrc_-1aX730JYlbmgfsi z0hoe7E7Lt9Zst{sJ%nexk$|#D`(pa33W?MGs~4dT@T_dnLxv|6%bZ%3fO=CbVEhFA z5Qzz5H5uoLI0Y@u6>Q!f*&QQDZ+VY-%iy_OURT6bObM6vu-Wff`tvtX^VWQzYoNBv zaPS>2)hI=%b<3sILkQf|2$wTtW&gIN0(1rfoA-^`=d) zxciQuckkCFDq+#h)Y!HXVKGe_T(=xn9f>tfnF6^mjahjGRAfBu%?95nVv7PF4`O+1M~6te4|Od zFIaW?A?oK=RrDOPQ=%3s&d5dDGVu#5k3bX&X3I3q+uOdz!Xsy6a@>Dz8d-X$;9l?9 ziN}$F1I%;IkWpvho{d9x#HBgTZ!oseQ4mkaQeb(k)#g&by~k+s*bv!ED*Imp`bpM5 zuZQB`!=zcxVLTLmycFJ0dtDe|8rDd+QV7lxcGGQ~z_A;_%vW(;z}$=biC4X zqFQ_~ucJT4(nfYMM{3GzJ}1;z+9TXC33G=xBWeomuc*_4A~?e}ju=I%POoO`KkQ&k z*4NMh3>;cW2j$6hO>e(vhX5*)*wVegfEZL*7<|z#wWJi8Cg+0B#qrP|l$^bS+8|QE zuV*S;cRkt+;QGBr{s9^RzeByE=5mTNA46q>R`9SF$GgQMhM@T(iuQq(^$azHsuohz6vZX<= z>7JS^Btt5XKg&YaXY@#*JDXr(&h@9`P~yeJEg)CU>UMJXEb|BV0CQQu!6$L0QR8=S z&*I_i{x`DX#ed3kn0pwC7w&5;ri+EO&I@(+qh!moj7H<9;_Qb|S)F+z$PLMF+bIWzU#q@(M|zhl@p*HwS;e#!wGy-b?+S#q z8Ka)gWRVEI*iKCY(dXSWy;Yprw|fS&%&_LNc#M7`JfT@a^e76y>#Y*FY!F+MV8(ALX^w` zyyQ5-Irw!v02X3P3Cxwjb=fbSfx6PPP>gbn*%Rzud1h!-1db64pg2zba|oDR2h5)e z8b)|c+!!_>B+nq^r{fsx97ys(Z;0kUFk2q{U1CMI?>td)evcnhYqq%Kwfk05CT=e- zj#b1KAadHP?=wvIlvy!s7ABsBQLt@-6zZO@r514K8~|4RD2N%j@y%lMu;`C}m%4ry zC5KSE`H;ZO+&~9c7h*>=gK7825Ta&X8rxWPR_nw2pT8-REjnO=Wn6q%mnd z41FWcS+K-E&~JJ$Ta?<+Ne`yove%Zu^f@ucKjmme>U3F!u5qUKuOnNIPj;xxwDj_AD1|YA}aeP_tfoLZ0<_YeA-t|JB{=>l| z0?eDtyT4MM_2elH$FRi!)eSCq;#{KBN3#PO)dsdoLL{??%ppP0FGg5UX;<2eD+4lH z)_Vs)GWAK+1B3*jjVR0LQkbWe3}|(+fGlJ^fy13O1cN?bjh%*e5UIhMcyn8`6_2&U zykrxFqKD58j!o7IYup5Gl|)Xe-J2vjId@3zyjk2rt!t&kq^mW*0geTCOM5$lfeAkV zF+k40I+`^f@*&;~-z++;H_WEN8_h0DQ!5~>ulEH-Iiwe~W4g~3#T>`Ndx6>wjErNT zzn!h^<_InrwV)z(|#Uv#0P1>K<{UDUUr46-1>^ zt`Po^Pcit}dXGtwN%bgXE|r*TpjAC2Yy6a6idI>}Xvq&Y52Qy{Kmq_hEc z;I@1{m2jR6@n|COO}#-{Zh&~rUW1oNP^HX!m~ z(JR6j2kKWb7oEn~TMKaT$^OLtTu|8M@`)!uuF z^JPDI_1Y#$JM8Vd#qKsN;_?D{}Q@TX$S-t*Ahma;l^6I;4T{ZrQ>$7;* zXYi)iU1yN&{Z1jOBR%zNM;I}x&qoot1WG=IZATjH_PiXo}?y%mWPu6kG`ix{39GGO-aC+*OkRU2FRycW;6E!{i!vg9<?y7p z>cWhK(L?7*UrKV{e~~q8yTm(y7ly&rprqnlPstT@L%y+G=1gQ$y#p^>_pU%XFAB?k z2|IMsL)#Qod-+NQ!UuMa?5Xu2&$9NNcR*cNDc;9bg15*)@uvprzXN&;+0zyfuGCZI z;4$B#;mPJyFE_yel0=saoh9iMy#k9bPg2O{t#TcgS-D5 zs4s>l6SmKzceiBsleS@tI zA5Fda2s0I8^W8P9BtajtQGo1dyhNb;t@^y=L^AzJ*6)Yz$|CK#_M(eZTecFA-2*`r zd~D}edW4Hs#I z>S&@$_u&D*7?>aEmQVvNeqRyYEzQ*g1=BQiYaq2JQWPgJQ%Y8#?Xr2azh}a+ zHz<9dI2obl)GPxOWM_X)zhkN==`cAIlJ;r34Y4Qqy50@Har8hc zQm*;_5SKH*P67gE8nqZ=X!cV2%n(LP_*Td# z>k&UK|D=sT)+3r9LEd!)s**a{+nHJc<%}==0 zViK7Z)wzr9eDnD?w;yI>66XQR7QU)KBA|e!K*z6oz7KsFW zK2}YaAxOQ+D?4u9SPVD)b2q)&5odL+UGl&lZ-(*COrQnz3VXrQWj&B8uFw59z`VH4 zBS(7M^Qd_ynRys>beMrg^{+ow|(3V{@+} z1(z~ibNLo$pIEM~zq_Hw^HDma%&KPC>V0)A5L!sAnR+#~7fP|RbK-lb$A^v29$yDC}rux0RLk!rYk>3v}k^jh8c?gnpEv}sDo z(CmekQ2hX_XnC%le4LJZ04sj}A1g&p>wXMl)Efnuat8m`8%zCg^>vbMt3xdoaWYLTK;NBMT_^Rlh&(k zD-@UEp@5Mk&^deg9pwFTYIlq5pb9|}gw_34@UZf?RXjgC+I(cpb7g+A{!@LkvJ70{ z8}sEt1ps>{yc2m#tHy;A@#_XK!Ibi0>w%IC)R2emeXic^`D0#9>*KThddP=AW4DH%(4d=KMWBB+_6IdT?k> z+|r(d32lWr8Qr`);Nb+O$3dFnF&?+5U%aU+$`dclQ|88|N+cy#fc^}cvlag-b&&2P zZj)txoYHWJEi}>IpsEY>>=7P^A;!ebe|_1^VwjcE^#K+aLVkB{bvoBpLOrT$s*N`mojW?0+weM- zT(6tgEg(F4{{&zp^(6(V1+#2Gfn7jS2u%tzJeOuK+!)R$>S;InT~)rB6sY9!n}oGU z8D6A+&CSXU_*G`7=%p&-%gYp1s{FrIf)$__FqqR6STSV8swKRV zCaVUqfb<7I1!h!~qTbu=?@I@y?P09Rfm>8D+|ksGlyk^Ua0TK<#16-hJHWf)z05<* zi`mP)g+aH5^d9@&m8`~|I`W;Ib0)|!v)43JQ;l@7#_kz}a54m*#YV%^o+TWb)A?JnLB%E+SW zJDI@mL`nnn&CoQn9oHDAD03gQL_t=Af%q!!rYN1MidAncgSMZAbn!c=z3wG~wWaJ0 zxlHpoYcXV;I7-$U-|r1g#-jd_PYn$ZA1r9P9C%em_8ocBj6aPuiPA`MF*TkercT_> zuJkj)ot1hq$Q%Qf1Ycshy||MShOJRX1CA9h5aoRyv?C@hEA_J!b6hwMU;=Kj7%&(P zHLh=7&J810o6DUB_9 zg@<4>VfjviK9jtVD3SpJazzitG#t;SEqA^&Amlp3!KCW|eD+eV3pc1kFmLZaMM?QGb0#E?m zvLacrm_7xR?DMFlqobc?%C`lW8aILsJ!ynMSPY*cCam4DhY=RTH6HoYm$1vcQdiCI zba%8l3)1CDbyJp8Wm=mOSCXX+Kq%@7YB+B?QeuiwH5&0ppQTU;_W+2#tcVkk6n$S? z87S>ayZti&5zTtx!IhI>So*1a6#rUohM4v~IvV@*2SnKShjd`x} znsP11Bdu&L>4D#7f|xCUc>+a>oR$jx5S~@JpKvSeH=O8hbKpwFse!Me+xms^po6>F zXE~cGBAG5nzT0JRc9T+WG7Sn=@$xiI4>ZtJbda92Ry;Q?dPj1*QB1u3ij`gfKjD0H zqDVk@PpCfF2Thon#TMh{!3oe3gSMA4EY(5iNp>6#NeEYcN+Vd_ygnvd7v45i6K;|m zX9aZ2EGcOGqd>@v!W$Ls#DRr)0e4T#W`Hih^1_dzOM2yV)cJ%IiVzz9W_rczWFY$c#mj5{~(FMV2j|khf zlG~&E{g-|R^-Urqk{H$_@E|>P&~c<{ahUDc1B{(aE?$i??!e4$hdQhPVjtG?&4pFPfB36c)*b{ z<9;o3cmJ(XdGv!Gee9$etiWv)1tG<<s+ zm#PY(U>LMCMqsOW2%Bp$YVPwm@^Njv?Bn2{@JVS>qU4NEx;LgmbKT#|dthp-*taE1 z>1?_qJ@z%tX4)dNu>UZ&SHP%E+I+gd;o)HB;_ah)*l{$8%Lznd>&A=?FwmZqtcP!t zUyOL+HP(W5qB5k2Ft7pZI!>EWrK_G1K_jG_B<4moPb%f5B(j%PQ*cIP`zt4g--5Er zr>p_?8VGk5D#Ai(qz(%WDgqqNfNz{NUNyb6Z+wSAvSbW;H2%C>?laHZMkg9cNtxpv zYlr_`{MJD?lH2oiyqHy8TtvyBHUEdC5%c!_L#~y0-iuhcCvrsq4S;SDD~FOs88kit z9}drox}O;%EC3}A7(@L~NBX1<=nNB0m?n_-l;-Jwxmp1#vT&5ur(EeT+!? zh)+{uN4b6ux7`Y%EajHhq%ods_gltjDC&l#wPaD_aI)br z0K~55xd-epo1C0Tc?gP~1P=-{W|iprpdwGM>&GXMUhp}&cG0N<3w@{(Oj%&UQ9ZG` z&Q^L(_h5}&MF=lJHfWrF3gPD-#;Z}G&DP!AKw6VsZGCF?;>TxG!P!Ek!)Cq0pEjQi z{tMqU+)gik3Ids{WI5@|iWI0OW_;~``Dge)P&_;zah6{#3xf~0Q_HKMuDAwDdxkVD zu;fyq<_FSn>-h#Y_X#}FtL>TIJ!3u_1xzI&Cae<)%ySV79J;it6|tD~YC~WqT1cHn zQafDlMV`0wgdG~bN$MR>w2R8-YA=(aKEwYuzgliktf}p+uGf%5m9&{s$IlZLqu!zh zVDfx~$7+q#yEbk+O8E%4yD=|l;BvywFq^jg?I z9mjBdRAOpL%QYH_4-6><)LypOVZJbGF15jOM8$pSf%V&~I`38iO9O8rM~lN_7eBZH zv?P+k!@L=}>$w+rlW1Am09tp_E|heZHtNKoj6}fy6QC{7npiHk)egWjt+^SEY}*VZ zI+ib%#uiRm<_c_-xXDA%L}nZ7X7u?{#S&D>4Bb$`kRbZ*wc)pD ztTXr>h&u{iyI*HAc{1tS__Ds{__)p*#>xIp^$xvPLoreN_rks}0aa{-Vil#ko_#&o zC|9F{KO&pc2N_9j6-h{;Rbk4D5Cb~RUN#tfn?r)IinaDbChLRm?O>Tg6%lkGFpU*L znA%59&{+xIVADZFbhZMOD8qNC{_cXPjr)atkVVX>M8n1!bQkzcMYZB0-N3<;#J|`n zj6~y%!WUoB0`#^?=6Atg3UT=bgvs{ps~tsvY$(Pq9CsUAu&I_q$lE$LG z2v~En3}_2gK?CB*!N_gLYu zf^7i%7%-(eWJid2FTrmTTv6|G>)4QpTKYmT$0@YtdBngfX3_PJiyBXoby3j1 z6h{AMSe8(mH@DbP6 zfizI|xXseBv2fdQN944*+a|BzYC%b<1a16;k{`IK_ z4}^iiBYgj6RIJp3pONh*v;`2a8h|1+q+L;Bdw=n6{9^S%k*l2?=FrRq~P;7 zqB9lCBWYy#oY8V9VKu`}yWinG3gX9kd{Ao$NX2*r6Mbs*b6RP8>uu~D36u*RJRh8! ziGT6>#0Mq**XHV%Mn^hBG5q-RKEAsaCPDUAKIa*$`tz_AQ?831E?p%~JBg-->w#=* zDE6@`K!J+j7R}KVq!D-R)k%^GXJ>Rr`B+Jl*!_s0LrFJjYt#tYg%#Z-dr_a}499?0 zWI^r$_r*zjuojviErUOYfCR^8NoRi=Vi=rUqvy@HTzJuy`~FTPrH=ICL`EYE=_{{t zT3mNNgsIVv25N2KFLO0;8OAI>n8&CaAb9gC@-J7)Q_5=GTG;f5Rd|?J+2iK9ly@^| zVeyc|sbB|@9!Iyfw~(&`vAKg;%>Gmi2k?RmZ7{`Y!XY>^eb#15iG`sppkvFIX`2-X z#3Z@0(i%w5%}ib-(p7p7`BS^Q3iCg4zhQXVHPym}k&Y(gI|1jlWn^1N^s@rLO_ zgXTzS@Y15VtiOhidK5%hQY8B1rx-0_XGp$@JeA*6okgm!F&cU0ThMULsH)F;p5|ns z4-P{hdg#@@kr$t?F{uIbBmjOaLL3X$vVTH~71dUjwsS}#+!Gue0p%BJ5Pgal49-HtUq|BIyqAVj@qcQSa^9T zXsFCjzOU`frp7GpKUn}VUvUS3t7}l#T32ERXkD513v78qjkEhJx*f)0I{u>Kesqdt z3wWzX#H;Kj(@ivHdBMqlwxWPLgM8|oemYYydo9i-JQk=jxGXM+e#JDWMD22EH|j%2 zPT}7LU<$7nUUoV7#`oDcRLwKU=U2hAro#^Ptk@|sS2fj|(q0FA5a`qM0kI^+UYtfc zUUU+l0Y_|(B5+X*sx*qi&MXcL^aYCK!3+E_pbDSi<$0S;@XuDQr&gVdpn-NR7KbIK z58+j6;4FJ#9~B7}9cO(z?HMtyJI}OGG*JOS4ioA??UV-1@;Hie2WqANiX?--Uk+^V zE*xFBV?wQBe)BSjqxHuD(iqIpuUj)hE7$4uQ~Xaugq&2fGy1Z>g%W~IiEvLc)$XEP zPXd}ryV=E?pbp2Oj(t%tx;8Eo#L2gA1L%K}{~Bu&*k1ll-abnCckV^-kt8IASp%qc|^Jm4+z& z9p$`&LM{A5&Nr&eZ!TqNNhSHn#$lzu=W*X_N_n18c2hmWJErnXOgESC(n{cIm zsKGWBp0U(M9t)E6a9Gd8{)>?DA7=~+i!GeBq8E?^~!6*C-M0xr}t`RYBxd72fYk1 zSx8Vioahjdn|LT<)W^1K&ZHq%y(#Zn&fyM>?~a>0Zj%<^^(hEf82i&1=`W(F{o;p{ zjcWH!CaeKrLygbZ3Q;}+BYI_(uV^) z-u_3P{*Hn-kPy28*$=ftxZ(sv!=iFiT4&*ObTa{sf0MWq-kzDKizw-LSt^n~=${H0 zTa+8v^eHeLl4t@x;`%bOv`p4U9(w`Z8%IZpYk|7@4}+AQAb(v*yo49_rQ8e`DB+2} z-#Mn#RM%Sroc!-~?_PyiBc#Yy~$^Qhb@U(-<^G&oUcr4E5!vSp?C2ad9Pd z94E5NMZR4$=D_A0uV@<(ZQ^Eo=%bq+D$9PFE^&Qge7D!Q&uJmyNHE*^k zIp3;W-)= zM5hg|XD$JUWL4x1j@)3&FyF>^7jOhPUXn9|z_Yamr_NIOK7MJ+{{W*)a7?L_{MH551uP~> z%eXrfNJhRMf~=K<&v-U5^k$kdZypxjkHdc<#*;0K5X8TgC9>;C%%W6fH%Nw6;DFnH z$z++i;D9zoM2Q?DyO~VGW5%w}=1{j_raxbKt#e&TKTxQRlRgHDlO~C(Xd1~nsCg-eV31uTu|>ZY`;)6HAO71VowPwx zBWJ}E)pRP1w1{@thW|zqz{4j{?OT2u+!-T)fvFPz3)}#_GbkNhSZXlt(rS%CS@nUq zb&{UX;~eAHSD}Q1*m+TIp7>tM>@6>r_>=c7c^aX}cZ7KD7w(7Yi5lyYN8tdkoa{Zy zSTK+>!|3G|RIGru_fjXEe^9ygJ9S#EX-lJiY7ptBBA$-O4Uzb3Ls&B1C=fI)5%5&$ zAT!wz<>n&42{l6pae~aNyFh{!?Qc>nQoK+QOX<7gVT8#>|23d}BG*>UM?@Bfku|sM za`Bk|qy%4eUAh=fi_TPb1<{3=jbg(Q0MNqRA0sR52S~_C^_4o(R%@#3Wx!2;dZqbk zbgVjTGGB~Qu|Z#Dqm#%aGFEvEe-xV~5_fdLKFLztD~Yu-6Jp5qe+c6A0b{VvRP41t z#_0r-^e2&_GP{en>=;F*(}@Oc$A@PNS(5TKFDt-B0_tGOcs@%tGA72l( zleq)PHC%N3*4)KVpDL>)@PiRXF0iRRI+wQ2v}MEE_bs{64R9` zmQRu`YTb<~DitV@c#`;jRFto7MTt09Ktu{APk@(o=x2Bjs}w>SYse#i@YdWyKdI%{ z_wDpTXTm9C<2+S|k3o4<7Xl2!_!Ku2M}TI;Z37kKbCI`|vE-X?Zmt@)b;}?UfObeL zT&8Cpnp|JppG3_^r%Wl5irn|m`2GQ-(qk1*v}-ujfO^kiX5kfBdARFa*N#59dD%AP16p%pMk>sTA4(_gh( zZE?U0Jf~njW-=y+yVY$dZg5%4$(aq@O~#4jQK^}{O5Q`k$d6@Ef)oo<|lp*fc1 zP(*`Z*1Q6GU+8ac&M?3#%bi3Y!h7JaB(YgS?1Gm$RZoaI#W;Eq^5>JJCfMD+;C&vGJsYJC z7l`RHsZ^ss9_=3&u7a>ZL9T)#`20n1(;QmXn72*D5p`x6Bj6Oc1}I2T#3GA|$>1Dv z*fovW2g#$R;enn7QiX>;jH#)(QLx_2!X4f6SS~1!5cMzR5^42O7^ifF(Fj>0(?K!3 z6v+}-=##bY+38@hF=OIXgGfvHz8>t9!TZCQ$=r*Dm=Gf#=6|GiLF4J-o2jvL7SjkC zwI=~!!GpsD(#_^W^>|giVfOW(uqDK85P6_{K-$N`H*!cbVoRU{;AQQxHF~Taxvk`y zQucY9rCMs2_ZU1k`o75lsC0>Jrw%XxRTlYvOfqYNl>)VH5sLw{5 zuAlqnJXRnJBwZ6|8@7$uRg1}%ubRT#w_yo?6SgmSkzsoLf!MglmceeELX_&+2tLkH z8<)_YGrF#>5Rf*w5R8Jd>n84N4@|>PkgHoeOkXAgf}>8RsvDvTiQ!`z#TC`Z-F-pg z1)x%F844ts?ofE+W__iX%?wq--|c92-9>c=f7mHtbzL*8nM24|j#3(gAEmC;6WsBU z8Fo!5K-@-CzRmRu{g{!_La+eI-Q3v#w1c@!=%DDbga{H#E?DkXLrs)4cKXTI&p_Se z(V=`8B5;K&C24Bt5y_MV%jgjuhc#2v6krO95XO>|LRFpa0Pqe2aL8b~Sg7JmkyUjW z!h+q$eJf_8`~vk0oa=IYe{9a-B_6!3h`FF+WdpFq6m1B;yIL81F?*3)h(xnMdu~2` zQ#=&OkZ!c`Ttnq`2~W?PE8{8Isr-K;|E5@okj4H*O)Gv>&t*sZBQ@tbVjQCMJW4s1 zzXbB328>MqX~Ex7xWh45>TVeeBpLky*FD&M;f};i3;#EP(YW9gr1M@E4zw_-;t&qV zvRX3D%YGS<<>?4DAYAv z*k1OCDTSZ_NeW~j9`N1}y5Bg?r|;hXG1T_z|1V9~$l-gydE@8_B_-bJX*vYm0#Xl3 zkS0DgHsO7nF7~G_4qQXRdeA^53|jy=Oy4->PJO)*eP=7!oA5r8wTdzgqbk;##T=L^ zMnk?4R)*9871P{Iz7gR%PRWthfvr2@TmZsyv-F%~9MK=}i9h&UZRXFPLf|IT3HKcB zy;E%?ky@0Z&ts5*WHsq@g3XDwT6KW+)S9=2)F=$)1;deYrvQE)GOxb~k#_+PA3Xjz znlI0Qo;jW}J&xHmfQVo+fP|hsIJ&y;a3``%T|4Lv=oE}2kBW)YYH4aoxwmLkgc53M z-Jr@(qsAJ;MN{4~+jf*xoPmj*AP|Mt4-QpX6i*iI&m9q{ybVS;B%QsN;THz&1~QB_ z5l(VSaNF$Rv+nOJ9JaxJYta0SmDi_2Fjx*<&zxGZe;%nklVpKN+{M&=;n*@_rxf4KhcnLGWz==&I%_8@^nW{R?_ge?$~&Br*?<=! z!yi|-YPkQim!HihZJaRc?OnTvT5yqGDKz$i`vKQsmklMo?uM6StX<_Hok*?Fm3ZjG*haPW^{=*%;xLN?nYcwT;68JHPbP?= zPpL);xZn45H9~m-3m$GH>mB55H%(e~aM0@pYM8)l4l=JX@s5)rnZupY~X6G__|c17R}- z=0O)q|LiE&ljz_pLK@qSzPDg*x_G?-+rihl%F(^mF;0#F^q3?QT9^NBNw%*v`eTElP3K{=+n)fO+Pkwu{(An!nWJq|LZ zGiuMNj_UErKP+F}h)1gL-w^*k9Y9y@z=?5CqjlCVY3t3nus@F_wV%p-p#Z zP8b@d`n@XIhI#@Sk)gh6nbx&|jr1o4{F+;4eM*;Ej&PaYDiTA zmR}txVr6x;U3dn)cSlAi3~Q~ZYp48HMDgPd#EzQ>!Q+qGt4Xv}3xOw=^I8g+_pxq4 zb5PaN1IIM6;wD=ztTRQ%&rH=lNcd4odNnSG9mC443#%D_nWO9=HOwr>N1=(u>hsTv zA9;U&>PB9VQq}-ORGBC`)fVHS)!og0DcZQMRaZ7&FNx$Jl)3X-Ciro{oFtzXZU45? zo&zr^AU0rE>NM7fGsk|DP3VDJf6IMh*|!w?%kAbn)d^xqMPQIMzap|}+T5VYr&&N5 zNApF2_Rbv9%k84icT*}_#mF9Sd*ZNn4MD$DjPTh%k!J3i3aUj?7lD@s*4Y>DmTIMR zdDp8aQyg0bjFU>Tk>A$q?C~;moCMaFcAWdIReAd7H`Oc*(saI zLc1*LI9H7-e8}qYoVUN`4Bq)k#o*Y~HtnugGMD4d){bHHo7}R9jaKzkyKC&c@8Yzd zBw#aDn1(W`n4m?);!9kx9&gcEkU<$NRM-|W2}M3e3QJih-|aY!#ceHdtjsryAcHpL z$Q`t!gx6tN!7;<(Nt~5WjMqqn0>_2J!n->(+&`R8lgXm-n?jTCJ&lH9K}lEbW+y<- zD>;;@lOwDx7($(-SbUAdEINg2SFEbL!TwRbQfjP(;mT{|+z6LYirue13Xzrztf00P8`?A|ELiVk#D zfJQPIEV0i7CNg-rais0^9*AYi8HI#o+uZ|0#?*-F5G_|U=2yhW#KCChaQAX`)-SCR zd{;Eqft)X2FHzl~#HkeG+pUm)ny)GSQO0V9`Cp>Fg-24ugGm+1(Twr;di;>qwFnna zs`L|XAP|+9pdXemO{CB?&idap51COgU!8`W%#a-^Mv7YBn$q7(hxvE>q4yfOtQ@{@ z_|KZn=5V4)@w9Do8D*xw*Pt7m2(0K{MPMoK5b%xIFGZxsv7L4Q_m~yTNSa!77%tc6 z)k>&92qM2wXm=bl=a0ZB#cGkqrX-k~21tR!MI*z;_04m@*X{gRY38eQd1~|=(PGR# zMeN}YYCCv@cxpo5Y2g$^!#_a&#&6fSa~{)9@cq4yTHk{tyPxZziD-@wCIrvQE;LqB z-tB(u8DT{baSfJid}OmUq9JV%qSxP2fE3^Miz5l^xB_6J2n9R*9rZh{d7@8Pl~X8u z(ijrckc$l2Kyu_LhwB|hDjTd>j-vknZ`Y1Vxcpk+z*VP{McrNc8)?WI=+V78%7NCJ z@QgxgM^iWcM8VwN%Jy$N?$;FQ_KCjznOmd=0j3hqeVqSE_P>;5_L7-{q6$c@)AX!5 z2a?au!sLbD%w zB(!S2(f=&?(`7S+J!iGu@MH$+{BmS?D{%2%YaC-{E_BsHCL{2?;IBwSo3Qfo#jE|5 zMSnnGUbHb&GXvMCMajx8v_Uj#UHgm)o|prtANJVXaH~k$LPW*SqSG7wC9OInjhAC6 z@snQW((=tZtB^GdO-c2Lut9t1Hf5|J4sz9eRmS*qSP(0*Hh}cy4Xgj!gxh0{`E5BX z+hhPq2pHmn9kHIA=s%`3Z$Tf{)vpM+iS$kZPhT{**Ngf*-fF_5H=8JC$|S zQ+Fb-Fk~%E`VcK!%kNdR2Id787(>PeNAa$W@$v1yeg02}ooR!axt_g&Ku-Hdw>WG{ z>k|pe!iCc2j2l2I@CKKV>Gl#jRXIkw*qZyl%F6hf<76Zigo$if>rcOv&9DRK)QMf4 zG|H)~G~`uO_ClUmImF||XOl4%nuvAzdxWo1gX^M@xy*z5y_5In`;sO$KA6^n4FLMm z()#7q8T9A?E~nciJ8>_(km}hrN}HPoL6>2*M)3*##G8%O9%^=JdE)eb9xGp2@9E0ccZgZ}VSRsLT+EG>XZb)#<(>^VVcwGGR= z*TvtkNU;YTeiR|gM*C+s-hs}V*v}z>ylpbXJvjF>v4L_6G6c>QA&)%UmZvY(6i3_Z z1zqv;YcBrzx}=PzoLCjTAEeN+iQyQ{p$Wfw7u7$OvNa)tHGU(HZR{(Ti}fuRqBDB& z>QpIP)}}+w5)X}WCh1-#Ub6Z4RfGkY(Lno;8jnXlbG2OtEc)3NJ&-_*b*^I)RHqO| zF!>|G>%n3Bw>fIiJ3UOT-#<_3WQ>z{%om4oxmxh z3Cd)+&!cd)HfqU>L91{!Loc&(mw`yOh5-j5-(XJU`?Dve(Z~Q6#ts*R9Vp`pv+a~e zoA^T22gI+5TGeXr~DcqUxWbdAr89}G*1ZsfxB>PV`{5L4KKS!_k$ZC{#!htb1xfAum>WO z{PYiYI*T)5b)&%nA}Ka8L1%$CEh_@&Da)R7Tjh2UC_*>R9M&I6H zWx_QnTZ~_49o;~v=?UU3sm5=Qq^R>QIRpe{(^>%1E&f5zY1`O3>7pz?^mX@7Yvp>j zXv_9-hZ8yuZw!9y&u6D^TlC@_2+AT;mua8Ct)6$C>WTQVlqlG`Y+Vl>wyOuESG+Tg5+}kSm4oE zKLKVsbDU9NVfp~c)!X~WueT_9X9*Fi3JGWTTsw`;q-XUA{w9!s0LenCK*E(EnihDH zKzIeMicT07Qc5`sC}@bW>ncyY)hZk7EVj6bmk0tP_yzj!pqm2M_pTSc7NS1r@YFz# z8&Z0z1;|5lpZEk0sq6)U!Fl<67tZ$3@)aDtHHFbmYqbED&8arjd%$>VAL4|Zgh|K0 zO;K0Z#(pt#?YSZm7)}$wQ>qQjg9wHgBh18SGCmG{w@(GZnNtWbNU`IM^e0mM;u+iB zUep1Qw0F;C0tzo}xn)pB>0=5{XNsojK^*G{I503n(H~2$ix;FTBt5BHBD}Fh#zc+$ zYK_Vod+(6AX%9)4di(H`beb9k+qa2q3mC(E=nc6dRd5o8>8B$6o$Kv@;!DpU(*(Y| zPbCk1+Ot1ob&oLfM}a4#tzrpKQ254pLw*JvaNb7|Hn3LsV80?emGs+^pl6kGU#0q4 z&IJD9L#ak!`*sXZw;1Sl68H#U&fbVkjs`JaM$OJ!6XFj4M%1$p)k$D-Oqs)}i8i|d z0ZFF#PMEY~c;eAHYoTeX$V+E2HGDTydI}I)Ty8_=r1TQaW(6VDH^15*1Gr}5&3wam z&^NJ9po1iC2-Q0mLT0ppD}@Icc0emZK-doMEedS(^=<51rLxp$mfFUEU_jAW8l9me zaXl7PuT}OKdu1w@qy|x$A3crIs7~{Zu_MI$hz9}8g^vew(LlWMQwx~dNm=E_{H86h zGN-+=n*e{3NW|Y6O)H&be$Iw-dl82!Ii4mUq%~S047%=eL9KnM5L^yM?R6dfg?Vod zsm0c%dE8EX?iVoyv=1OJZ*D@DVbkfg$z(OMXMK-xIo`LD(~C0tL&LK~%bKMAdH5MX z<$bY-%0zM`jfHhhkS!F}FbGZDtlnaVZ6_i5DjBXOclWf*X?jz?5U`0xkCN8~^NJp< z-QsZDW#MKskF=VBq_b$}d}YPW4|D!ODxr>3sRhhdND|V44nb8+@>QpO>(r8^`~}=S zhKE52$E-dEyNj5uT5>?~bNJPlAi(>$m>T**Rk{k?>?XZLO5w4MDTOiPamjj!!4id7 zpw-1NcP1z69P8KxyMtl1@Pnd4Qy%uVB$(5EI~P&y{BJWob9hXNby1^e2kz{f z+B1+u%*hEq^--%dh>(adO)=e0sw*Q*a=;$2x-&T%cI@(=HR0Vga7zS=+D|sfhoF>B z2(1v!7Dvekp(-Zp+n;)HS%mDpYJ>*zO#(Sx+^OuQ`y%IqiYKnDZ!eVf`@Mfp~i?dDA+kn?Gt}ic58zEO26?d`O;7TNw|GhSXgvYp< z1xR(2l6YFh5>B)cjJX{FBOuu0 zwPR-dG5Zo<)wf8e=M?4C-^U9{FBeyX9wAA?9PS#^B z&Pgt|_5CwCYgV*ZdHO!(o3_SUT<(%ECGQxmGsilrU*zAJ-}Rk^ds2-n6&^28nG^0=uE7f0i|XbN!LWv3Bz5KP zUmjV{?ne^V-oH8D+iw?4jN!fS!K!w7SLL#WEq8>*n^_ln^AhbkmY^?oKVDs%VC6Zk z;GP4RLBc2QBb&TkySKGj?$;b$L0Up}v^zKEEQVMf?%b8Oe;sFN+Ka4taD#j*K>&f- z22(lsT-s1x@FES1f6{CcS|(?N-Nqb&C>osiEw*c$bg;-Lz58-ik0mCdx;%A>hn2wM zMwrR|+J_GZEhNy{bs9v}NyjnZP%p2Um7IvhVsuqje=97e(}E8e=#^>XG0TwnS3XQV zYJm~k$&{9}=XpLSLa8^E9Pe^%n3>V{ks@_H%Vl)9zN4~obj&t$=@M4{?MU%ip9L_E z)-PE)0S*ghkJyd2q17vGKSEhgnlpj$pDj_}bLi%5ZMhfx-Z`AR-<~n=V5%oG=%oVq zHE|{Du z28P)o!9J;z*&a}o3$4^M8X%#BN!t4vmTXUV$|~pdyb?lbAsdZk#bYifKxyC}gWHSB zPJG#X2p5QVLamb$GK=GJrkyth2%Rr7L!u=mB9I-iNX5w+c@cI3Ua?M828b4?V8I&R z(mcf>T%6!~J~1`BVW3`6!685-A~;+7n+z^?;OW6fb>r>#;;C!y{|TeJg~exK>if*> z@&}Th+lxRM`{S9{;3cB;?ri_JC2m~_>L_%labT=~S0;+wjm8mShe zsq{M8?P$~@8s4SB9f8Ug&Tp1`S1dbn|+GLcql&=8`0> z6^MlW%{9W}C!?{mc`mt~M_CkUX=F`=odxwIU;U=MK_k4=u*^@9X_$6|KHa}e zmnV)9=8?3WsQ1VY_KZQqy#>(Cny3v!_(0)$9A)5~#P^2EEK`%zIfCGieBpVagqo#r zzjN{M)RyPubgx2m!X|ahZrm_HMg^eHy~wWFs)S0w#b{D_yOA4~CX8BCnBgFm><)?F zF|dOVZh&dpp`y9X6`qfspW1@WIX`8ed1u07RzJN&*XHnKo^HGg6E0Fu|2xS9asgNA zx*nE0NtZkm(J>0UbIfk8V|f7l#1n35^9}2Ta>3f(>BujS&+~ds`<*NsdX<2!iQGCU zpo~{;N(1~)6h?0i!_>B$-{Yj`NgjP3W3r+*Ou&iqXqwAY{G6YiJM_l&s$SMpu5dO8 zuBj^-(^kb5xl@*H`Lvr+(<`yxFmR19=69Q^Do+rZl+pd^(={mHDhoyT;+RN0a=l&K z*JxpXmJWJUC0x_nY@c|#W~tvy@!}_aY|05i!p0rRC*jRP za1kwk;>xJkVtA*H={Y#*%_-WMzQ~U!7Objc5LB6|(|-z7ICt!#2IK{O*-cGaAuxB6 z{p7w-YFU&>I(4s-SVkq4`Mbet#zJ%*#&R(oYsPJ>IKPs2Yf58nl42s-4j2u@_cI1# z$#d&m|C1CF;yIK+JjkC#(-L}sX6K*=gDfSDUKwdsTrxfu4}AG=(hxmMoCI&DHc33!3A zqe^3H6^c3~b~-WQhPK^$@+O?4O;EO5e{owF?a7p-bOb!Z+_d<+q(@53tT_|qEg2b# z(FI&m5aOysXN`&_R~f&5^sPZpfT=%y(jvwok?fV1c6x_Ij=t29_5Pla z5as;k?{9&5p3AeCTn?@;))fRbKI9zJ4%0NuNl7K5R`z;xh~_+`Ls2*0w?9Ef8^GPJ zu@yC?ARF~5sDWFVg#a)u36)N-GRGAr%(0h#9q(MwWHbX4+;Ie`-A+XYKGV|3u;bPk zRSw*GfV`uDQwSMmE~cmiQa)elcICwmNIR33F%i3JuiBC+ z1Y(YWZR~3w;MWX9lok}I{>pGl{Zu6N;sxJzcZO;GN#3;t{YTJuMy#XqtEe6vXz%ZFPM1 zd}q$a`9UA*3I1I;7(?yM^yCW2S1Z8HFs!tDe^GuuwM&9mw6`C8@c#iN)#uPQ1s)1= zRYD5Z6nFm@r#aOD_{5!_WHCX~UM(c$zPAa>upy8lp*Hf0 zAr?>#tZgTiVw`LzXu4-D+)48>PYjEq$WXrzf5Hfzk|1_8_pp*oSF_&=Bt35JQ3>aP-+1;l zGXtBqmDwS0-{nKiiXo%dktJ_VIItU~rF3B(jVh+c9lgi0~P==@s zmQ8B2i4$;YkG=pTG&daM4g%)*L`=;iZ>%U_qZ?uJf(m7?4h& zw|mBkCuq*&0seRcfew=zDU9F8!owLhj~s*9zi67ba#uiRhQ(&PuT6RjGjFRN6AHdr zz-9rnH$k}Q$g$3m?F7*%J^VWf35`8l!xR2atDpom#67xOcK__U!-nO z4v&cU)jYgle@AsWp`*|?kB{2h^vI7FhMmh}z&WfM5{@9dOAPtQT5N(4EE92Vd`>SR zErFRHPjQ+yDAW71DkNSO&j#}7;y!3p&5P-WbDu50t9_HP)DMa4r@k1EsgH+NpRiGW z%lk|ydp|)~NoVL1{V5}mh;Q|fQ&#dBKBi63F!#ciNKzfHghR{H40-4bs2sstR5YNE z73%Xy9hwYKyF2<*5=F|Jxc5nAR3Nykr{d@doZPmLrIp;8(*_G+8LBS(B_UF0biHU$ z{32EX6$}YgK@8;31-&JT5-a}eKH5*RFM8cL-{O1q zOjP1m+@s$f$n`qJ-i~xnP6@tNA><%6-LAJ+=j2po1_?MNOff8cfUgMx5KtfLsPilR zgfCT+vm3(P%imkc*)iq(IzS#tRE!d+Nad8$?i6MM+?eXPb#_*PkkY&~AQ>TTh(V_A z<{T_%ldC7cNy}+1i#_FWrc-e-j;ju)bKyUpqn&ncw#MmIQMmq|x*eutf}7lj|3yF) z1|FK9wxM+&_h%60Pz`FL^~;JURz?p2270}XV~^`+g6zIVHhaOcjKp{fQl;@zLUickM$)W^Pqkt&mrBE?yr3>j zV!3coQ0#o83YQMZ_09#GEioxvbnFbFYbX*Y|3~8Khj9ibGxc8si6y-B<#R`?v0YqP zeW6D+CYitVp~QSL>~n|#;Vql zv1&nKGL1e11l5%n%#&x0Ft-{D{>~Nx0+bhD5-*ZfaU^ck*9nm-`6Lk8+aAYT(0KuI z4IU+z#uGa&x|nLPe;|hmEiE8w;G|z4Pq!J53ot3qG|8~0*;9c$c>7D zs3evCPKp>-nNaY1f$rEXa*Ogw5Tks$s;nJ*o&WGRMDuuVjRFZZkM?~=H9`fMhbZc~ zY2&(JFgJfV=NZm`@SM?Vm~0pz*4o5qv;lJRO6i@Or{C}=HRPeq-TncXV#cdGqfm3q zgHogov^b`CNjuH(l0WSX-Nqy4TAkLO{9U#bRV0&@`KE)1H$-aa8El4bzo0ZyW)$Wt zdWFiNZTrL0^*;N@Z8d&Z9-_L#h=N(ALfcYBqKw?UcWK8d4q1O~e9f|%sDY1zR+Mic zmMPRJeO^2EU|UDLZWiNhag(|)#^v+C?0b(W${yQ#*`g+tJ|D*Q7b#yGu(BwA6H5@KkgRmHyM$lLtyZjc0}7Gzlq z?DwxIMCTry2~U*Xn=C^A`MiEf!Nz%Oegg))&f19rq(&z+|Ky(}MrG)RswuV&d~Hg7 zx)b$iasmNbNZSBc>6R$!h?8g20y%v!-$8=XW{2T`U*QVzUluznUvnI>|2I{gL+~Tx z%?O1;vI8V3$>Ve@wPjM(F+{<{4Lf@8U9>5#@xb~_`%Xt)H zBYexzu^o+da14ZZlXz!I@|rs~({ofS6i(cpc2L^Te}ffuEh^w5^-E_ISO*aHH2_gJ zG`qHBUU*VP0)B+a&cJ?O^F=7xcKh#)RAliNyi|t|wHO=l1D1n9^jxLY)vSTsVutdK4V-NwzA-((8xiLUGu-dHj*RBqDgl7T0S-lO#0J2j^ zu(b<$2xl`5@K@@)& zKK4eif!~`u#RtKGmlEW!elllZ{7XWbk8sf1(E6J^VQ{?F_=LLQFur+%&J+pnhRoc% z_%cJqCuP{eT^&O{5sYGGKePPICo5n5(|?_N#+Zc0(4;xGR?vH@9gzO`d*&ZlQ-T9~ zTs0VkaRWC@w%o|mvyf}@L{9_^DO&Zbsi}{T>Va_Ee@QlCG2#Xi>!jX%iVfyuH>Oop z^c@Y4JLxpnI#eyJ343&89U>9b3$I7#yGa9s{kE`^>uM9voAN@iTZZQQ!G9&fiotkR zcX(4*ZKErE^QJ-s&OF~tVCBN)BLTrY(W>n@XLcp&0V`vRLN+!bhT&D-AyF@Lcx~b4 z*4?8=0Hd=_iUica>@2V$UiUi-x5F?FR+f^4h|eh# zQ_!`NMwl}1ahD>N@gX3tu%XQ(X%^dUsz=~4pzrc%f7FT+gYnQZ(+tdKP&Iqs}4Jd#4IO3$uoHqNBK8g+0^2fnbC6Kfa zJ%>V&9C1_fWp&MM8*B94I0K(HE0z=RKWN>d#W1>u2x=x|o&kp-Ddn2yJNM_B5X`R{ zAzV^pLxws61CUVjSEfsTfklExX2BvGD2TBLCLj6z3ylfdXi!NF9~+9*MEACEMmyjF zhk}*9u&g+nk$@tN5XN3gu=;RD5pkBa0#s3X@$SpC8;L6aw&j>L7?+OeWSmo@UyODF z6E{(7RcD2w5x(>lL&FbcH@E|*2Rc`!Yc`w6+9qkZ97@KB7q7h&WR9*tX0XdxMY7~l zZN7PsRp2`s41=?f0UkgQ9DzmaCG>6(065m}h+n1L}p4zHjKf(sRP-IJWfAt9$iG7LiarFB64W#aWv1MQZB>;}t%4RzFq`bZL zVZh@e({|D0glFabC&ejbufmBYp`+uzT3-~#QDQ4ZP*mVol$Lb}s$cBk?!Dsf!ZFEA zv4986Ee?Q@+DCqtlHBH1t0otR58M-%Aocw} zi^D(F6R+owdvid!gW~wh2sICYb{^lXJQ=MN#|%XD2#?=z+S@OG&}XxWiKN35HBbkE z3d67O!(U&JNDK)^Dv;F74qw4J!eM&nwE`$^*OB;Keu(#tes}xQqjP1#YT+s(6hde9 zFQSvVC$$%dixq39X<(o5l<=Ij2-Z95H`r_+c-Yr$K0^?6LM%&WZsWu&y`CN!PgU}Y z@%PDHwg#oPvW-ae!OQ_vL*b&zWO~Z>Z1?$|XZouhyBbZC|D6CyNBu=<+D1=@O^b@t zoSr5fVnA10q3U6Huub-NwmbIKs4Yx7G&iouu`RjYm^p+(+l4H1xt4mc|9a^!j0X7( z5x)57yJ(^8ga_fN;0IT1Qd)XTOLa(~xs7R!ci8B+{c#1D0p(D_S-mIS#W{iXzJ=^2 z&=e>M3bjJZ0T6lMIZ*z}@i&0CA@;5jz~G&jI`gJvuWGDlvP#u70>Z-afG9^6?W`tA zx0kiN1@AE{Y5PV6NC1y9HCap|BD9^cyGhps)4~Ik)Fs#Q9So9`W^}mHla9BPx!SlI@WMSUKg{YeyQO~i>yOmX9da#pro0ctQ!=g7ti5%or;IaxWXO#cnd$|k zfma}N@?m1BXWpo9+TKaP{Dp{#KAbex`n+3Yi8kz4nnz);P_|^03d3h4C`OR zC)}>)KZEtt+=OIy`spfpMvw(%80wkl2y`q=yS0?k?CG{y5v{_Q3#3&X6JSry^&Etx z+2yWrIr0<_Ot^(9u%8LY?;P&*1hnOdLsN%oDjTpHHH`(&{aBZ8nCwp# z(tP@aSQiWn6BlQj`HZ7@CK5|wQosu6P5qcO-XhUjAtYAKfV}0L;w!^=q1+j0*WSYU zW6JPN5XC(U?_t%ePoexPyKmeq+LPl~eLd_1O6oaf33A6l#x>5%S`l3~cU|2d_k)QKXMX`!L`S&{OIB9E#*={S;$ z@F`#J>a~nE4|UP)bL11BgIjzN1Dld_Z~;lgSmC4YS0cJ+ZZEv4O~7Lx_JMb1O!^5s zI{4HfmU?6{h}t040Gcr;!QN%THV3-WZLR<|-yS~Jz>*xK$)=>{+7xoo@RaCF*Ghxs zP`JgJF37q~&|&zL;pmU7rBzOK?y6dn@}je*p}^jYxvIqjugOV06_=s@O=)a5H#LnA z;sX$(Oj}IJ9&xfYf*Tx^UZW|bOCg$rmmiK4))0luEM7(V8mGrC(YC6iY~Z-!BpeeQ16%T?kzYoo@bG2NxN(FK2;c%>~^3_uL3_%2gUbJ{Gw;J)sTfTAUGz^ zWLqI(Vb$r_(T8~@j{ z?gu%!2Q2{d_1`LI5NdfrWXFR>QobCjM=IbOSf%7AXE&bG4*3U*_Gzn;RNy4Hx-%?w z$1pHpWY#!q6fOO;H>(Mrg&=%(cXVOL|I~O;M>3|MN^WD#iK(p6?@csMp1 z2l|SeXZj-30vW)EPp-&}8tE+cm6TQ55~i5!kgYL>mq#ymb^PU)#v!wR>*J+}ofogk z8Q()w>^;ymF4XDNy%j61!w(y!r`&Q_4%9RBXg`WlU{^A4_}?-)b3f(n3e5}R^Erte zhSgSf5}j>B(kj1~<+{Rro`(v>x{eoiDb1~I`1Wk}EKd&K< z(^z>opndX7`z|d(FrJDJ={uw@ToAe}i3B|l!j=OJk0k->;k1NQ>Vexl(vLO*w7m9+ z&5>UU`j*nlhDEv@$u{+v`1;dv(Op@o0=wy=puW^wq!lzIy6g2bzz(Inn1el$3L`c4 ziLaL%(RT&~8JjOf9}Vs>jR~c}0mZO!mZXuy*c(VmxWZ*7KF8;hamLdgu}}>%1gA?j z6FpY_$@Nd}cI)?9qk-@M{`s4&x#t)&bKX$s{zU=}tgvWRK|Z=rzCV1td$yiCh^?UH z1R$V~ z=Ks1+lfBYoaqPvWeuKxn-WxVDO>k6{?}bR(7{JM27u_~mc>r$;Dyee z2?n144qVH1OBlVs$c*D=HYE{{=tcB|9nEeQFR44uku-Ukp2#ZYV~%^jYNZsw*71tk z-jX=2Q8~qqk36b7c1P{x*GY`ywR*b_$!#_}Fy=_sZWkZ6 zK&gxBm14I{9iPvI{|{UYu`}+?TmRxJEJEG(Ygu1>)J-&y1%#(;upaK?@Z4BUK zciJh%z;2Oi5RKj%gb;lS_U7!{J-*Qaa0!i3FGrRMw+{_OOc3KH=)`)ucwN@>-Ya^8 z%USnAnXv6@xY)7!j9s7aS4*DG1o8o#s8k0!_!HDK1=F~*qH9kb?#2G&!yqERx?a-3DVPN}!{3ghc^G)E+iVs5xZ)+nX*l$3>br={ z%Gev+5Y=ksCs$!&P9Ryddg$4H*lz5xQdkR|o~Z!b*16aMjBtF2xu7ljEs^63pEzAAVB=lEIDEB#ig+TWxa>&u?**6Yh-EMmP(M*rj-JxJ4-a; z?QI>VPG0Zc~R6BD`{sx9fR?-;Yz7}M{>Un0#ui&8YUV~RX=erX; z#r%=S=u2DM1sqYdH3WKzRKe+EnqG%3?umLDrn+(zdR+(~-N!<66F0E=g~} zN2s8qxz(WxIa;H6D-rxknR;BQx{<{s8?Ec%X8;%-I;h~XFFE-y4BWfEAWN@cJbSa3 zvIcfgXi?aDoI&!cp_)^@e&gZ*k&q*lDM7Gi2+pXXykYY>(S56fB#RQhiH#keX;5Ec zP#iaF9|_tAp<8aRG3T## zj|YKHR_u>tgzeXB(%Uo@uiIg*S+d-lTP*2}rcR+AX$qw#)U_0C+Ez&eoU@;TmB>k9 z@m{n4g2T!k$DB9?sRto!=~6tsTbhVs@O<^|L~WiGzoq#^cL<%1<4T>Ai;^pW;eIVr zX7e{ancHe$XTmu{$=qWiV_>i1)djRqUjX6(oG;Kl^ft*mfQqxk`hMOCzswW?PRF|$ zLrV0STz7$|9q4k9MlGE|<08<#$^!fjs9m3P($U8`v7Km&dI2|{+T`h@% zpH$3WhVv}fgDY@hBqujf`#K1dS{Pd#Gi{UMFq@8>`(^&q3vI~X5C-BWR~IMFB!g%4 zrY&Y}lG3U|Sj5{Zt<-C>$S3u^urrmrCRyQ94!BMha>-(dcLc(69`~-<)>-IMzTZ6` zd})nGQ@qL*QlBB~!7g4p0SgG!9emufPc%i}#RSK&oL&{>NHFO^>}A)7tegS|8=Ban z&+)AOncu=()y9>U+A9bIOrX#>3)8J8?=xTsy?USQ=k$;ul*vx8^SFGU(0P1(IL9h# z1E!ffwMNl4Xs)B+QkX9yC~N@vP=}R|-Fj7<*@YSRs9gA!t4Qtb^QQAao*xc@1r@G` ze5J&8%_QKxp9Y2);DP+Wp_U45!iqmsQxdEcAtil$=otfmqTDs_dM)A5FZHelEzoLh{Qbn#s*GQQm@9zjLIf#4-jpSC9uvnPS1`exA=bz~* z`A`5p>PPO*M{)=Q{-xD|dS2dDN(^Tnqf!#StpVXs{Wk@n*j6_xYBEbvsLH{(vzQor z4?%mK54A7VPCYY@$`g!W6!=?fO-#hQiK8>AR1*y9RxHJ-#@Z;e>c1>Ob&kmB$tW@o zeAcxM8b+GcwD1HyZ!6Kpu7S6(xW4xSBct zpM>ab?Pu*YgB?0sgR1fL#?>*#w?K5hG!ZwV!T7fb{Q+s2)-x>D`9N)U83;3s28I#E znn4~GSB0Q33EK#$Qz{reHj^jgqUbk1BQc2Tm0`}ip?^g{R=X1v-77hN0xXHX8Y9&f z1VDmmyoMpi&>9BpfC0%0|N66Zp&|ufNUC0FeF$WFKuHJkod!+LpT=%GxU()RS$8RV zOl#Ay{^;g41eXV!v~~BlxFURiAS?d*;uGI~22^XOzedR%quFHDCtJ5wuny+XUf+!= zpB)bzHEC4y3IwpyLW%b9Sq5Sy^+LHOI5E_ma-{pB)kmcd4)+_A?B&3OlXJ_i%JXcH z7PJmk_PKCw5C!~_O#0FE41m5oL2C`93^>QcbwkcTac}$_?V-L<+B1Ej`mj94gxAX6 zZK)|&1t-_o#$n$hG@)hCY}^`0M~~!gDN*W}M9MA(9n@>);Pz-aw`+8gYyo`Vbo$_J zSnC}3;fR3HvJ4iakm-xlPY@)v+(|CTg?5$$R{uU}00BY94(f)Xi+pRpH{tx`jkt?; z9HjIPLvgRZg#5SBwE0nxMZ-9WDu2>40je~)eRyJe zx@GD8euLgPTmjGsVX&4?qq@+XG4Q2r)Ne8~&kEtS3yOoUJyg=G88{2p)a|Q1qvT)) zcPvLtq%T_k;z+U?^Xp*PhrW$#Q}{LIzPFOz^eEmFxhLg01?zOnxH`PRmX8N6W#rM! zR?N2Bl(w8P0?*2_JNZ@L6NRn!YCE-yZ-?kCZ&{?;1%s zh=h`b8jr|>Efy9$+R%$^XNNubUI(;hYzqtsmH5TOUjxf`7LQ)`&%yMI`O&G~G+k2> z=a7J;Pn7|g5|9@s(Q}6&HMSvV?AjtUK0^2jRTYP*)^>TI#ITLe$R!Q3lx zyls5cRs<_@9+bv2C*}^_qNj1JA8SzsTU6C(Y$F#dd0#X$7VWf}eQmY3iDEy63;3Z~ z-oI;wE#Qnd2NG376nT8j#^RYjCcOfqSP+)rYw zZ{_X89{u#>g0lfv{%~;|q);O^cIG{cM*LRX`pUo-3617<2)2XqiREmqM+*QbnD`a5 zy>}E57$@K1tZ%!dS0_Sw5vGq1JA_HgC4_-Tix$of{E(e-aZ{+9wxYr?Qoc#Z9r{xZ znaM%5f#DaRor(T;AlIfb_?k21%@_H0?ZE9ry}J^A+Q5X(mr9T{%HMSbzAt&N870Wb z5oOY%=w$i3f*HO*BS^%rkhB}4CwQ^F2E*`6UKm&b{6r7&>_|*-SYbdbN=*`E$T}jp zmTRda&#em5WyHAX&yVBjEBXV+V0GYx#vp&7Qb{y?|Z!;~HZ`m}Zfep!-&JNA@&L=AT!2LmW1 zz$P~>#8UQxf&r;@+oq{$&e>T<3?`wMhi4}0@S_i2;;jY)LWr+6KaBVI{I9n&22%Z& zWWF!rA0G&?p;i%fyF3wL!~q{h+6eK`V9HG_x1$>$XxtPK--a8cTU0A+hp{`DV(weO z@9`EpjS7{#glBD{{n`q{I<_^}DVzt`{ybm@eYAMG@i1-ZuLCh5woa0dR6lqs^^g>3 zP+Cv zC;TV#sHMq2X$>7C3Pt4UWzK<8H`fRl~j~g&; zuMP8+I1f&A6P1p87C}uu?H0-xvE)aJ?WK#T*er~mIbVI#&IDxOmW}CZ<_hql^9FiZ zut7PcGqMw}xKL4FYY?`i+ui!Mt`J>-O6j~#24%a_pB+@MPT{=qwluf7x*T_B5!O;B zrx}!!&XH$f-8VY!yZOdTrz{|=(hTbwr4k;22&e4gGC3fk z`s=#WgpPsu&LCMDzS=TTd;TL#$tJ$sV}67DjjJ=^`i6G7^NTNS@1m5JgTxtM8x}4Y zIBrw2+lAACyVrm@v=U2U6VP55jn`xXEPaVhkmQ=5RTj=(J1rfSoXA6|!DR7zz>xOj zX^g%ObnhGJ;R`J=<&9-`a^8AL*wPm+Nn2uvU`PObMu!72c-CK{&9gV;?tdURplpf# zML`I$s`Q#Ayxlv!S?(5pIluKOETI#hs3>B7k68cIZ>+3-8-RQF1_?X3P_6uII8muN znn9aR5SPiPmrCuM;6K+~Uo81ARV9r^-Z+N;@oaFcb#)iIYn11J%{TL1cH>TJzRmD$ z??N`2_p(YRxE(w)0u9BTyYs{3CLN@#!;DuOwiD&bj4a9h|2=nIV1V$pgz+>{3I*PL zVrWwHJCv7t@QWNwTaqQw1Ic};HoVt58WOu8SbWJo!3yqR>HSMT zRqksvDQxnFse{p-CMqqtB|M^*oCr`0;?7#|V?QaB11 z8c0A|u_N>Zne7@A6uQmc|DWtKMU|P(^k9-Yw(f-WIc0qZ$++kG-V7mLwpaGLHJm)q zLgXcJVv7=;I+j7_u`?jO5TPr7o4Tdo8q;hdm$J7s0Q1nXE-EC}ooj2K!2|B&*{e?)!_z$FjqO zjxg~S+0d>XQCB9*D_8XuFoTMBocKovno(Em(I1~iP))U>s?BpSBkp1ZBR_vR^V}UD z+ZjLqeQXq2>VkuPa`eqiZhPt9O>|m@rI>6+*>aHCFdHQGLA_-;bY)lr$D9|)opIS> zw4W1^beeTmt_5mdwp~3Cm=9xB3B*My;8>prd;o;^xa+)D%)Tjz|?hd!I zY>H2DG+eUt6rAmRwffzi5KvFT9yMJSoYW}3sXHS!n+;&zri*8F znh7)tlPn4?j(~DiLcqT(Y9~8E&-5vWHaCN}X7fa_4s`Vk#+q$Go~vU?C`cTSE^f?O zHhA&d+)0(&HM`iC!I5bB7nZly9FRcUY7hG${Xrpm&}T^Ra{H%6s?E_U9WFzQ))b4x|N2)~Q}a_@vx<8_l(Ni}t2qnui+3mo_an6b2Y zu$YY3NH=x?AM&3bex_ub^oax@r;uF{G(+&f}sWF8vWeiDV}bj z>kiXLcU@mdX8VXHZRd`MTD4ZpfT|xkn=-(Q5F+2qaAbMWAUDYv<~gaF`;k2d2~gxp zD4L3HRk&p=PzBkhDQ;%SqWV!rMzh7wdEE7LYY)9X0ZMYsR@xh`nn`jf5~WGD)aieRKc+aJ zEA_D!bJaL%)1^BytSfL`&SG~FD!+#hj;hT|+RV`5`uU9-x&&@8QFC>Pi&g?VhV;eW z#k~&b()Y?I@sp6IG`OuHpi4>x4MnC`V${n7sITd?bqCTFb7Ais;JDA@^KEly0M;l_ z0;M~a*v;P1r#e)~#1wLB`lnH?v)o_ae3u)G^}>D(LHXY-u&G|mA0pCtR4;;G3||vQgF2HCknFG-R;cVvNIVY00YRd3tgK6)lxU(tY`dAa9+AX_6kxOMN}+K+z~Ek-XHe%|OnAYNjnG)@@ypz{L_;soNfK zlO~4n$Dm4m5TI%$Ga$1HK2sD)L6a$oFcH)TDqKq~n5 z+W`~#k8f1x+qK0(%IieicVZ>Nmnt6DX701E_sn1KM^B%MlmKe@cwd@5_4-!zv#Ude zQropkkhPFQRqr`Vfaw-OmlnwH&e_2?SSL>aS%5QX41PF%FC{Xr!yg&kKCO;rg18s~ z=EH+|nKG!qjSjHThwFovfWZ6u{CY|{qrr#1#^h^-kvXgMMb5thIcJ}kkJ@U)h2}u7e|3`)h zqUr`hJPteyO|3Dyju71_1p@cNpCq1b3{JG3`1ur3^ayO9zLYK^LZmt#x$dj+-6F_2{h!!nIsdvBJtXgzNtsftQEq}C7 z1~=ZYuy>%prSo?#(nC2?QikJH0A$uGv^R&Dw|E*elf}fDAZfBh7m2m|l52%i0Z<$= zYZ9l_YuUg`ZU=HGSJ@WZZgjwcY^55s5wOEZO9l(naPTwRfHKT+YUSK^8Vm!PPT-??$29lE;Fl;|hS(1XYUCbBI8FeMXo zRpG%I{h(}79TU0-q>G@`fu%d4H(V6ATJYubz{ORE=By@7fv8EMQ3ou8-T zQ&v_WuB#LLQVCX`h(eYHqPc3^WBS&P(i-2{C%1^t4zYn5ImrF zmBe{fWUR-SvHl1fK!+R+?Vk!q3Am}9ygCLmf2-t-*D;(aV zu{GtG-+>Y8q;IqW{hL+P32dGB@>Iju>~E{Wh|a*sziI0vNbX`htYe z(l$@WKNgG{h4CtOF|()(UW_-nLQVQVQ?C;Am%}99}uK^3A9_u z(ro+Q_i2K36KxZIG~~O{sZu+JkX+8q(-aE^gMTi^mQN8?17}kw$Px386=-43T2sIb zcoUh*C@k&L8&wU}>}lt()g9A2DmLBFl;*p+CwmE=&dKH-u#-~TO-)jhACA48%&59e z0+Co>&yjh%0RVOSC+=px+3f#d70qv3K);0aolS!gq1X#lC-vd0u0UAxlAzKY(uzd_ zProanLG6H&S`*^4gURn<5j=9vDY&i+%r+#H{kfrm$j+>uA^_i0?*^rdB#843O)zG+ zSvECe6v&^oLeAD%YRdr31Q1j~NAU9Oq5DdyVTjx^wz${X@su*i-_Ux_P7BBE$%ZT1 zhN4-bh$v>%h2tLT?mG}AyRU+K#o|4M4v|y{M$cWbt|$8Jx6-f&Y9)y=H^5kl9P*Uf zkuFG#;#L-KEFTMI+isQokwFWLqmgX>3Dv64Z7 ziNh4y0 z)e3gG_gJT&Erj&lFELD)uOUy9pi#0jUsUA)aNdF7t+i95vrxh?!n9qJVPB@Z(E0VR z@DrXHDo-h8o0moN{@vd*1*wzKO)lbY?j=L`)U{-tS9RCnn<2_4&9^YB`P%sKiInC> zTlSc64b;3oQm3S)KjpOPz}UX%$@vCg?*K67v2LwY=($^Oh8Y8Av+KwEywas@$!jn^ zGNVubbUn4)*F@)-9wzz;KT;-TL-+N#rW~4YK>)(HSt1V6OjycHPCzkaD}i~0pXjncnzA81AeA1rq<#DCVL`w+Ll;?X&furfN2 zb8kb@u(}x9miemk^12!7@e9O@#m$j&>U@uyQ(vBU@yvOv{M(g7+imbTv@Nd!90(<1 z+b28h*76Q)6O%*-kwtRZ*#`<&KWEG5Lz$q$_R6j$$HF_=Z>CvG8prnpiS@mh3J0rM z2N}=75x25#!WVnyQCzBC2Ek;YD1D@kXTAj8keGBb9M-SP34n)dX0Dh60^L>FSY>Re+G%=)-m~XVD>Lq>%6SPv) zj{qv>c10nJgoF_p!ezm>Li{E}BJ#$jhU15d98${O$iQ{LFF~zGlMez!GgQWtWESU~ zZG=*}IFMZo!S%}?I4r0+^n$5NUw*WS!rMVWyS(q4P?6s>k@V#Vh`_D>59@RU96%ou zLJfU6e$8t7dhM>~*83g3+loo~CKht6@OkMS>`id+4b{H`LLJDV^SjrQH#*x7WL>0> z|8_1|vWHBk@)k^20suEa$iHQV9eLUISR*Eakzl>7&}Bc2V=k$Wa$bV>E(Dk+h;E=M z)fu0yH>ZakZL*AS@w&$l!JlWJZjno}P}fRBN%jS7bilpClF=8o`*iX2a>*;UR&a>| zvU4Sj{O4DUu>tAGJ%`BcOS@#kaZQ1`3_H4YTYdxEY5b_ElYfaMcR6NE_;zmD5?d|U zN6ML<_D>ew?e6$V{-_2$NPQ^Wn*59-2{~{cC-^QeX+-%z|9N#6Rqm&HjjSf01o~AG zZXR|glF3C04c)04)8#^`%`37{H)Oj+>9d{s!%6`7Sj|nG98P%|A<#a19GfuMI<=YS zy~u-X^mPCL>ShuqU*>*%T)AiM;@CrGdoS-dtM3S4_~Vw+3?ESfAC&T?NIAg^>a$lQ z*RaGCMi%DUb-_xV<=|oFks^fk8V*8`R+;iOqI`?v*}io1O}rQY6Y}D4Ezi-QvBqla zmTmB}pm!{zfXNrHxl0@_?{DJkI+fHCE^?GDHT$>OoX&&+BcrhmAWd{R|9CBwSN5{nJdm?rTJqU_XO3$R$9SC z;IC+do^8g3t{PA53}ygzCg#QrftF}9`*afv!ppUgNn^5hS&A-hQ@ zHR$f7YsgubT6mm-RaS|kY8tMNgTSR@R~IWSI~`Q{YjQuo-qhruK}PnpRzt}7V|QNF ziGto4T#L9^Hm3Dv{3Y3jQ4R^`AO5EmV{rw+yKGj%pK&RnTGELQd+6*Q;Gw;Ob<1o} z@|6P|^ExQ~(m$2~`20gEwy^3E_LKH^jT0+0%kK2515pL`A!5&{rNv(zs%ZWP0mhUso!Xhi@$!kNn0b;$2VGdT7 zBagp*voIyywuHN6byHW{Vi+CpULxGq25$PbIKrEAw%mfURZKLOAb)J=o!+x7sIOjp z3jY>%nakZj6DzWrkCTMP>+_Xtnamo=Z_66z>G zia~)Gd=9{W=%}<<#Czx*K?0~kY{kays!Htg^u#l1yJFBGkSAH?7Bwlv8k$3EM*ns z$i|FKDD+gS9JtUcO@UWXx6OshK>NVgvlogRryJT;H>6V{3k_1RBXumFYL!xp{)61G z*06E|X;+^QLLroj&(UI2@k^o4<}=LzAAPwC<4s@P7?~x?UvT6)(mse1rI2}6y405G zW%M87-l1EA#`6pwwvu7OD6I$A)2pr+fPId|P#slqp2~?fSTZlk`fhiW3Dc>9Iyu_- zQ&(S~cWVWAKY09pPh;ZnR`%1W%Pr6AT3K(Pr;>T@NCB}x8+_7na1j`|`*{gUTPyFm zrRi3cH_|TL@Ht<~n(kg5&hfHKvcAm>&g?D?w_DY*V`L9%LqMBLxB8%f?uJ5Ly`|{3 zm;52d0*hmF-OrdX1Q)GRbU^F$OU(k{$yw zVY!IrWjZD9K1398V!6$q@1-AE7YEi`5oxTC;9CBTWT18#*wm!2wX&!1CGSD>rn9u) zdVo~lSjxy3gZcz~Big(OM#QA4;C59$6XnP#c?o4i(M0(_Oq7R9LjNvIzg(^|d?76i z-#l ztt#-*qz!;{%*@fTv^<;&#Q}ssRq=F9S2;C~lwQW1h-YXugh}Qw{gpSyOR2{nW77n!r6uRzc;Azqq1i}Um>IQ_O4KtLZe z*SI;1L<;fkE)4w)H{OMXyzl3cBPlB7TABXPLVpSV{yt=IPxdHO1zsizJ)L1)7&kJZ zp`BBLLb%?_V$YOi(;(L&dO@a=Z}xl+bM?K5={_K-2j8QxOol`jyZ2##NKJz0htnrqgSX@~FBO2i19)p_A20V~9v zu5YH|%7r58Sx>88jvA#r8uydDm3nR&erHKrJ^UD!7USIj>Pg59ou(T6IA|KHDdkU` zU?}as<8wP>=bo(0;6sx0o89o6vTxb?5hhlJH+S-;K6I639)>o zqmTI|W~4cEB5Pw>Z;fhgfeX~p9O+OqUUmebAys~5o8TuaI=zR*7;2hhWe*dB7_amb z9!cmyViRl&Tp~i}Rc0Gn1H`IyaErU@HFv#pJ5F)^N<4L#^yYFUZJXLAMbjq)9~9ID zZW3=dw@c*fQ*?<))7SH7E2b9>KmMJ0uFiA!i2rS(1j+2;u|t6p7O(wd5bt)Z7*@*Y zvTFHQPuOo2!Y*+!zXUnO?AXR?(CO%lC`MLq=yR3*iP*o1(MT9QTm@x6huTDKW$LetSQ@QMU42oqF`@t?by~? z^5lRa6Fd7=N7gTAkUrdd=-s7wu~{k^p^h_@rUz(~d|wDgLaDY&8&1;->TvMwhc+8p zh^1o-N%FEm%^$2 zcjlkCHCTM~T_@fEJGaMpWz=DmX+2&E$t}Kcb--P(szrXDG!@6D`T=U$-IYIH-N1)Y zswXJD3dG9Jl-kZjQ^XH5ksrNBL2@N%K#mGox(qdq4PbgC z^|()exRUtXdv^WB(DV2t*$S0e{T!^44Qy~SMJC6ETwPa92dG;Mbwx(>u>^u*c$5t$Z8;plgjJ@M z{o9wz6zMtQ9$S8&H9$Q%0QU6j9#f>I+DGP(Pc_Yr^ywS{n)klfvuP4-+M~r z=%NUD8F<_NTSYhj#m#%Vo))8T-g5#%^Y#pT=U|Y~KOEIwd7al2fdBWsYnF3tRt#W= zI5UyWgpOc{h8CBxcjzJm<)BQq0{atl5zoR{6`Zv08jS%|2Rotnv%+x}Ty0pC9bcB_ z@?Cl^>CB*=m^l0I;oi9#BLE-|Yl`x_nJ&<=w}_k-SU-sWj?vtm-4H4_m4Am&7tM5I z=u{a|VPN@o;U79tZyV0FgcddNV{JGDaJ5?o`0Hx9NZaF>t_UzuqsF_dLQA8TD0mJw z0yqsHyVW6x#x~-kR225j|Ce#k#cHC}<+#{2_cYm}RR~i&8ki`jAZOg1D+k(xW$RFSz(;YBvE0UIOl<+HH*&ACi zCR2Vls#PHJ;1()>6(vR0)c61cCB5!W0A_mv*CoEd-K+41pDb^O+7K4cb<}s*jt3Q2 zgqpzgIglsw9_2F+gMA?m<9Dnp54&VoUnJ7JjxfrS zx)F&R4r&0eY466_F=YDq?UyTNu`b|*2{E>~>@|~fQB!~6=P+{Z)JlN-6-f{{q$A7v z;o~MgpG&vrAV-f{Q|M9WaexLCIR0o#+%8-X)XoSrLy)RGa|Y!~uJMzLoi>_+!7KUs z#;nuSLD7^cify>NhuiQc;J5@cCZ+B7t@l3p)vjYia1dlP`qrs^!weJT6-tfj?kk3r zQ9TGsfB|x{EKrM?*=&T2yhgv|E_MniXYO3^(fFillSU_GFJ9bE2Y{zdZe9{SN)9J3 z#*XDl490#oIs{5Ll|wxSAfxY_h!ZP7*o&R}`u(y|#v=iH)EiqFY7({Iwjzi2NMJ>0 z4&tvo!lFz1=%&G|*oGq^`7!yOCh_&*YKW2c$3@iBl*R@Ee6vcs!kN%8yYg!#A2ND)$5P$&&uxm6%k7FCI{pfFWjwd z1z|}buB%w<6_aSy>uA(cOdY7KZqR=iYwX29$TZ}I532;R_AgI+@^YIr?YDUK4iC(; zDwV;D-XS3!lAJDxWPYJGOQcaR+4=b6r`I-^2UAgPVjge?e=+<$fJyAbXG`BDsI`z6 z@$?YD!MuK`)y}l4M;Ti2;Q0o_V$vm3vIR1XHp)R)lw&sxg==vg6qNwX!NSugURBnA zqR@tPHy5mScF18%`^mI^@tFhd?jH&y1Pbp{IdIWu&UBP+oH3cv%alF3^qqZ1cqHnj zDNlim+W_6C)5*R-7#&TcU74IFNVQP`+PJ# z^WBxr-iA94O{g*+*cQ5I_o{YO)+x_EpYn>#ahnI6YXW;-$5Q_U3p;+I!(Aq(hmkKC z99;@im?#@(zxM;GH{qQ*d9HzNV@d1yEaTAMdN@IWN`;tKC$1W{d8Jhw>6;5mY}s#= z27>ruWglx#tB0=QSOD|opuhhtdyLQOHk#zaaVK?(VE2^ABB2I&XRNY6NbZiVP>O(o zh1qF#4J(tsAExP=e{U%#7BB1&rZ>tBjS&b1F66L{Y!yZh{h=CYT$ZONe`g49iQf^+ zjMpUmNqvKG_X{Y*%g{*av(Ws9u-lsA);M|2y`nQbj3!knoD!kYh&d(aiauw`rC63) zGeM{T>|%3epH9Vc+*vZ7hjZ%QrA5(10Zu*TQEVyv1EC%!J!dY9~7jxUM4Rcde881>o6- zm%i<@y+{W|0*vQUamiePi)Qi5j-O3e5R7_{7A+th#SMLxXcIKm8y`L{9{S+i*HSb% zuO|3oM)cdWPb?Cn3YD-1EA!$dR~8H_qiuzkir^3t+Z^JW_DJcQ8sc#79WhMggXnYM zWyGx*dwd+YBG0~+O@pKgT-OFyJr}ddfqe^ja_}RNk=vNCXcYmKHV~_xJlkf*ku}+S zDjQW90C0;Oo`F@80n8fWcyww1YaJEvp5-{RO9l-{7CZr6$g*2e#)FSQjeqqQe`O*B zIl19qvP2>yY3#dS7^QaW+G~Y`);Yoj{viGrx+mGZI5H>7(Kt73FG4d+B6S0haD^fU zxIAgBcYb6aRUT>E!vUPv*8oR0{%bU1k83o7w;MDRs1MMwWGV&^+Vzu$Z1Z#>jS&(X zH$%c6l;965DgoF1%sI%1A1~;^4SDE^S-?4Q53p?*bmX7UEA;er0H4k>YA$C=QNSKG zvHtRX46YYOem7Ua4YWlk+pO&md+H<_N!;rZ4}@{d3oMva_YuXNqvn#8;82`)VyHwc z*n&6u!sbTUcC;ENi^EayEtnR(HG9Zlo-{*#nWtIRCx!q=8iH|rhgBf=+&N{_$; z3AufUZR8}ybRT123q8lwng2;=CW^Oh z2#5_TXqa389s<(5TFS}f7TK2ab$9@Z*ULrA#8{Ip#^_N9fZAkAs~kM{z(6@bp16j= zqdjuA&zNa|z=-yKHsP_ZghsxEZhLLXf)9@{O=b@5yN`CAK`@LA{OlMb%u!Y;#H&W) z)qQ5}AV#tT8L~ zremYaBCG$h&eQ02Vx=0c?>k#v0&~T9Z4^!97o%q52sKiwP*$+}lmnWyL52%`*1yhRbMuI^m`G7D*1G(f^%_+K9prMFAQ zN+$ZSNht;OL1L@3AR~i!h306rI+HLfuDVfN$9e`dC<-7qX{X*@?QYeKdWq*eNnCJ! zltiBajSfh(St~Y1t3>GBEOb1b3G^4U&k672}CZaiJ72fY~>8m7D^Qh!?wyvP4&bJk|_zjdJuCMEC^<3 zR6OpxYq9dwn$8k>{n*ek*d6hF9@wYPs49sK!S_d<8}gt}KTGT_)rB5DgexZ2=W+t| ztXb;>tR2{6DAhmQTh=AEN-sV^X8i~yuzq@s#+R?KirvC-8+9IJD5^o0ZT=7-J`NfP zA9p7nIXn4JA@2x{RVFGSsCOxS>B$6$^-2lb@?$W#O=kVN|6h>3`xt7YJXLU$Md)Q)q@X)FHdw&h!RZ$hQ{8Z?Xii}C6@FNc>=i?wuI_4 zpo=-oCv2mdXz=0S^vVQL#?DB+&ZXR}%+-avEXP$gy6^Gfq#DmY6@F;Cr(&=HvlBQv zf%5cUPbIf>wNFz^nXJ>wjKbW+^1Qb&8Lh`a`j2dT*JA7`JKf8g$oPo2V9U3F}AihIpU6XD-|%`P8W| zQg$MLO4?MM^;$FQJ(_HfvlbnS%<7zIFV&k*C+p1*3Yt0l>31E@+T#05<$#*9#9R2^ zoSL*)wj8~mJ9X44x4Ryv)+9LY=m8DZlKNxiUXv^S@UxCoDVX0;2}S#sq?Sgl zZ8uX!NsN^9*%McSS~!MuV-ZNvuq5i4IR+g%ZwoYSOR#BNrn2GzU36>0WmwxJ(e+}B za$4*xrf72s%H*Mq@y^AeN%H&su12$d_Qr7qF?3S|z!zqN32_@@tR?WG^#^y~L?;kA z5J%}eji{1?Z>?*+443cvBnVoD#c*S(-c~gc8Ez5d7OX_nzusf-X#H794+O7B)Jp%n zcr;s=pM`Kjc5B>SR0lP>Kf2y|IY)jg&-^obFRZ?eM%3Ipmo?qoMo+=Dm*^qm{88VI zr1QCYGSgS5V3)J6cXWy?52LHglv;Jb_DoUwL)B3(wzmIEY(}>KC8P{Tq{ao2Q-uR< zf>r9|+o$H3nwTe=X_6QlaQ!L@%8zuQ*BreX7H8NHoZp&AsnU!wx9Cx7Lt#G~k4cT1 zzqa2`Rku`$CLE=lpb19r;m$UXtpz@8*SzH~(BCp(C9K)=QdOkP58?Y)4Un33E|3J^ zhnrU1)k@KB_=>w3AIk8ZT)DBs70iAwdEmBcfL&H}A)LMWS9s3QYLAG3yJX$Z^M4A% za8rD3oSs3>KBh@k|02szc)oe<25*Lb4;3SQb~tRp_2+TuhA#v_gLJ2}1c==>pp&6n zrzjkw;y1WU5qy$9uWW$Lm8?>~9Bu_SqJIj(Qc*Y3z#1fik(A)0oD0!kHq`l}Z1-y@ z(;31y0?qs7KkG(Qq=+jDhsb9zq2yi};u zM~VtiEo7(I5WQjPh_qc{m=o$IU@nQDT4GxqaHHD8#OlNR+@>15SD~LUqAhpIEaYJ5 z1PLn-+hzM7M&obabIXS!^?lpL@DkS#XRvCODIyS^1!@Mq3b1`>A}2Nd$dn>t0+>WC zVY4dyZMlBnIdNstqe`@hC)+Wk|YYR>|d zqDZ6O`%RTRDD{1AqjqiPIR+1{k4A1YKIoZF0@gp>3dP>9#C6il3p|%$7@X*KF4qx* z=^UK$sSw)wPI$X?#I7Fq@c0YPe0Uqu>5$#@g!(xZru6B9w!b(oV;w!d<1JKo0Gd+i zyvLCbjp72q856c-&cWrnmO?I2*rG%^hO=B4q<$FZ+>lmDKEs3L6Qw=GH_che`byShh zIttRjIv~>M6Ez@IB3nQ{Q&)zXWC-(`#qgaf4U{d;1TtYJT`VBYBVDa=KQP#@xA9Ek zY*ziId#;3Sa2^P6{{p*4o#XD*F66C1_jXj^Wq)4ML7d83Fl(;48z4FT;b54q#&2-6 zWJi_QXhGX7J&C2T!3d5(miDLE8|OiBdvxo)97_8c=FaFlsPNqF0q4X1xCv?9a-kBX zy1p!eR>HYdCkG6Qs|}S@dm^>ds;j?`MZ@D={Fd6FlVg zW1Y~vzUv*L(fI+F&ZHw1mSx*rB)BUyZ0w`alFofsM~m2>(aWnDJ+YEjOa5?8tX!L& z%^=ibjylC5r_2&~b(fMCb5GT!nnd8(D=3Kacn`6P?9r?t`hJPy_El7SKii^uZTgo& zx<+zL`3IH!8E{&DBE?;a7UEgFCh(sMO|;t*ny3#PIBY;E4>&a5(zB?! z_nI!$E*HN1J!Y{6DAV7M+SkrL?f_H-cMctwJmeiXe#$Kp;II~kxkx{}a@C$sHMq3R za(j`9!!l16ndTtmE}{e~Z^SZa`4a;!>>&vpxqd z$L`wv2lm1VcuXpdVJ|TO%)6s z(S;QP`|qP9w&x3nx&fmU{VGpO{_=&z2M8#7!z}gCYSDKKclS5IKj^_Rd}uDz;4eVk zpv35h0k90G=GPmrH7%kcdfh^|Gj$`{=EC?9H#`+H>NOK?r0ge)lUsKFbqJw2b^A34 zT2758rs{9YvQK&gpLX4sTR~HX{w<|Y01l8hd*X}%_iCvvDb5`X7Vnj50J`Q53%eaD z2Xm!+Kwn!0F?4VcZ$ z-YHeuBH($I5P0aes>69;7vYKffYCR#-C~@aa^5_tCfv?I>WS@QEI}FA4~jtqd}!yQ z0nVlnLywQ|39CHu6cS=ZZw+4U6BuASE8@YSk30ix+S(u&BCH1CoP7Z02$d)sVm*O{ z-c@9a{hk0k0|!Gm#~^*Kg#%Z+_*0@D!#v=n1m6RnN3bhau6P(y^Wb)rO&#NeCsQmJ z{k&??y^ZZ~5>~Rx%wefMW=E*v6tTXs*Yi5GHw2NnqA}>KVN)#M`B-=?pDN@PwQV}- z%waek5aMIlr-pX4m;XpxVM^&d{Dg>@umCXeYh$1KmwN)$TFL!8wxeB=C?q{s!y`9x~*I(m(K!pg`?okq&i9q z&hHwxl`dyJ4MY(MW%mAx@oXbMd;XZQ6hnannKRr_6i%dguu&%wvZ4asVR89fgO4{4 zw|4tjK$n^W7q}WYnlc5%q8J(*KTV zLQbL>njmc3r#&C#2Eu?F0uY4`1^oC1)ohU9)(;37+%RqcFR9&0Fz`A@|84pOR^U77 zruQDV&UKD8Amrf`_&|i?k0Qp)B~`s%un4$oe%D#foJ+TI)N=+&y#+>P9_&1c!gn?;*4IEbvJpU9VVq1z z{XpQA6SRhL+GiF7N?+XzCd^>=)tMp3F~0w1ci%az7Tp(2tjkh+8LY9zmpgch7cQ@ z4Q&n|oES9sPWAnFrK=6XR6|a|@NkkxQbm){2l_j^G>(vg6UhPYmn;eSxsWRW*j}rx zV#5QFr6aPBZI&ofH)Px7MvF4vDGn$<^lv;hdF$s;=y32AIFs2zDIm7vcluO691&?Le_?y5fZ30t?d-sG>UT;YuH2 z&QoYqt9`__qZw(PQAXTt0fsnu^dPy6pQ3ym_Wpt3#7np|3!ce6r$|BcI+OU8a6Y!8 zq|9^wK%I0Z%gvWPKVdY-GEMLs!q*+$KGY8Qe6yO3208=Z1u>@8QG%_2QKY^c;a?@n z<*J+TIvZbdPsrGy$&Nc3v#%fCY-M>@^O`8j%&89)6A?A(#}7vLSV={m(rf8|b@<0$kB7%7D-S2!R8$!d= z=yw7o11qXozOd;>nbvd^E*gLU0Ynd>ViEVJJNe^g)sZAh=YgK~A5yU{iU0%!f%e$F zihe!`;rk-ng^UBnj<1qwGuj($tS4Fmt8%K+mi4VJ&#J^Y|0_fV(PjGzKRCs!xg$GiwY^u_nBUJGlznc#lko_0%N!IqXrHcm}vW`l!c; zC1XxsnGM_0Wlhdk_?rRylMzsoB(6_BY`lkQ{x03F!)<*+W|15ig=LES4hYSN!j zT1o?Xyf&MIiL-uwU}SbpJ^pKj^08;seD)WMQh3mDu3mo=3t1`Kg}U84ax{Zyf9#)F zRIHA+V4_A+qbNtX>Dv+U+eNaebWj~>5zxZpDR^Rt0%}?SHofCfBv7O6cU9eUtw$KT zj$kCSqHmIdeTl(8I{4h{Q!CgR>ejn}C1*;G<+aVNsIDVlqUs zI6>D`0UB>tK{#-lBKN4~Gw_c?4Xnqj>+vV)fCNq*Kb$9jWiVKeB--9rECHKCom_j03EiO=@evku;oWimQJs=De#Y`vm&03Y|%HOq){8>Y35!GvdIcDp3 zs`^{C+&UQ0n%P>E-;dkjpHn19aEgn%hT9o>)x?d^k@O74otCnXfp%y38~<_{v9CNI zRV#DyA@5t1D$wN`HfO`1=zn_$dtCwYI-?5Ge`&|X@PiZmCWV!Myq5C0oh6-C=yic! zkGATmU&1L{mrAF$ocTvJp{nD74zi@-L+Oo6&;*LS9r~Q%p?xuW; zU&MulEO2)0ABVn|nR}iQ50j)(cI^EDi~qPLyfIc{%-Vw-6?2>Gjar9BUECv&afW3F z0qUQ>4e`yJsSW9;<6{cZvnt#^=l$o@?R4N6q>YN+OcUO7uTLEJ zTY?sXwt`5awc3_EblD7{FEd8lHm|v173FxE92|_}OvqL1M@y3{U~6iqcEB#Qq`6~Z zk1r|v=S+~yrfxin{DDOCqO^*ySl2^^&$AICo%Mbc09@=8r;Lfe{B0VX7e7510`REa z|F#06F#KS*D!vMs=wqS!?d*kF7tMH z!n@WT684TKS1B{>?0Db3D&qn5gvvSy-x>bvne862^QC=5!bJI_hMAw--WUg7<$k+LtK^fi;RMXB=cmqLQ^ zJzM*X#?NP3b!j32d81~jfcrvjt-eX7V311bx{1ts%ye`&%kzue&6C&fz07PuZ{qIA z$&Tu|HO~>Wo<0RJyeUoxjk(TNdKa`i z)08=N$hU=)X?s>Xo?|WDq)mZeKy{B~CIPL;97fGGK%>h0I#k}4{69_6`4Y|d+h}Cm zJg9*;2sT9j9kAOV)tNi5)E6`Mdu_jMdE?$!Zc-P{H;{*4n>m*wnpVLl3L_&1xK^q| ze#L?$z)YYfs0$Cch&A*;H3kNZ_=JoWjS+4>OVIXGt&fq0$*gna<>o7YyLtRLqN>zFnmVQA70qD|g*0+xA*75QA{|pIO>wj#|p0C7XOkN;~c|{@nto z5{mjp{XA{${sMnuXS0fhzzZxyr*RgWyEz|H%_mJa4LM@5d`r0>&lrA8h$wlzlDfF$ zRUCacFC6f46^fvHMkwQIu+Zug%+UvYYnDR;=e+@hSJ}h3O9gBLq^Wl~AXk;Xg-S^> z2-Cml=t-25osj2aGo24&RnATbxCSfvh}BnS0!ZWGSWwQ4kjfCyY9F+M%!^Vn6@0Ye zi6(?%|L46piAeN^jNm&g6HCAfh7#mh^OZgj17T>Dk3*A!+A395tl%dl&JIJ7C zLV7rUgIK3N3Ma~VrXN5HS%u5Z)W8XB?sHEv8YuUB5$VLs@s$AGcIW2tNb**O&sAN| zzlZQ(eoMr)Xvu3-#~`EBTR-)#_6ay*KC#*RM#}IfYGhEQL356%VxHLOJC^ZfBcH4-;4hy1Peq`Xa;r^23Fz0^CK|#qlpz5Cfu|z4F;^*Jx7PHalCT4B5x<-S!rfWgU?O*-c5V` zB3POZ2~#;yRa7vI6BYZK4JQaM&PLj${DuCIn++T0`Rbn>D_8woJN-;6FJKsSTaJpQ zFvL6YwrB*%jUIW!lDWhp!Fk^{%XJuV#_pNz_P5YN$K+T0e-V|+qGl%O?nL}xY&fh>} zUeK8Bpa_3>dvG?QKZt)#4a5?cn6Z9#11(AYbUe@x!yBa)Wz5c@}_gEAfIg zc>2fJPP*l;T(Ct`2;N`U$S?(1kKMZ6_+CAhEuwRTw9ZQV&vs2KL_642104Rz_1K=& z<&b~)85Ad@6RG=Yx;!fCLUWv(r-M7s0RknJLtpboUZUyD_{!rA zoL=c*1hQs&^8VgkjC=BwI~?9sC*@lcDbZQj48F+5Gm?P03|PCXeIRt4BOHGB+LbP8 z0&Dlo%rDJ$<&P|2rxSUaUjqFGh&EWG%U8C7E*n|`%iJX6RTNC_BE8qsJqe5UjMD*q zBmjcoyq*)gLaEAgvp66o0syPb|cUp2>ZRjib1t<39+9sQXG_uvL9` zqTadQ(sVlpkP86U7R$FV=``a+Vi*lc!ii!MhIE9AEF)8PHA36qMzWynEmIO8lvfjo z2uLHH(P#uAJx25U@!E^d+j6A6b#Zyp)Y?b{FShx|FhV5JahCg5s@}aqRM{&&VR!qD zd?|>v(AD{~%6RxtScev7s>2^49n6zB-oxW+{2pVeS0K6f{$`IL3N=&5tW4`6Zs56i zgoJJSdP$Dex3rBaf$M9K1RdnfR16TD_O9sQ+)@~! zN6SKbVVnkhnuSjdB8x${>^UlSd^aI?SjM<{$(vSwE34y*jen>dwo78$9d?MHtXkPa zHy^OCUvAKM>gA^<*?=sO-~jbX6I3h!7m-cE1Qn#|P9F>ta93E3cHK`tT+_zU?Y63b>c49&U>kp39Emqr* ztV;gzQ2fM9@DZglbjrV3u*1Ck`I{Q8%O>Kp40h4J=V1s-F*2JQm`K3bgZ;%kN`7Tj z(gm9$UEBtSnB_pbeTA@IvoG-E8kT+Y%;mW?AG<7-!&_zj)Qhn7DOV0@8(6@H*fk<- z+&si=OKfH^Txd9-Gnl zZ63#OI7;?lq@j>}Un@&ws8L#K7pUJC{p#(-QTXnSwbeOGjej6MMNH$Og**9vC9W2- z96;-j1St~Ym-Q>4Fr>gqP`~op!9Zw3`m&Jf))y#z>{ZBT;HV;yR12BZ8efjXh1P_jkYp&ci5F$1ceNX2{*$@T`s&qcE>E%> zrk}nQ&Ugh;!?SXZr0Q&j4o?*PHG3I$!RjH~cNVdTGRu7&^06oM^@1_G+P1A|z*UTI z!M=Mr#54`bWzcpukaVa}map$O;Vm7ScFDnSO|?&#fia*viH#x@P;(c8-pt;Bo%hAO z@-wr&dr#|8TfnB|BG9i(!L${>P|q%`b~jV;t}9EiSeB{ky!NX>J8Y zj|bK_(87zH)QiOtP$ib26i%+w#{{e_x%4pkULr63KF!8-K_*RR293*8$wOEY%5nEZ zl2XxrMe!p)s_DJP^f1?UW?6a$kq&CbsZZuq^UB(&KOw-lCqp$6k!sE%QSHMj=RisXVOvTQE$4qWRh;px5$+bfj2?I(b6zHs z4e_?+P4C|6Xm_uaFLw4K!!TZNhya8tb7OMy(;%`IiZ2%pRVEacnL1^rS?$UhnX32! z&zO3F#Hl8fA(N=bDB*?YP&?7fA&?~7@=H!LchT+{Rlx$0I0U%p_F6l=lYDW(3yUU_*I3M?vWz&62KjS5sNRKYG+ zoTDd=i}y5yu~>DOgG&P~mkMOK3bX8cs$zM%ri)~FwE18M5Z-rMFWb9q6RmB#$P9^{ zu16njg{h>;t$GVkzh&aEX{eOBOL-!71du!v2d<)58o1Z*O@$0H*4u}0(0PH}E_HO( z>=uJ*U+kW|BB0~9%%&KNA6v+3ys&nE*5C)SW=2+N7Wx8BXF>#knf^LKO?A%8uASzn zmaiuIxL|Ckwr)gf42th*1OmQ%q71ZuO29-#LH0CiA@a1#^Zz3UW90cXO)2rWk>rIT?{yPE zpP&^t<^T<-u~|i68iEe76Mk5i?+tUFj>2JDsNk~+a6)*Gc*8v>=1>~zraAuQO}hZ; zN9asit|3*|bWA=2F1r4=|5kbA=C7m?!R#-w83vcGlV@e`=PcD>?+NHo!02r`Q$tL7 zgi(hhtk6B1Rtrf%htatNd=QT8Q=5#C$Rg!(pmLApCkLKD37{p>G)Ez>p=*%F`XFN< zc?u3Tlb@SIB&b6AsU11^bZ`;it(Y{U3Y4Gy{hp08`V(|H3i)X|7|rQXC_afCQvin0 zm}i@)Wg9pbio)USX14j?XUr`}i%0IZ<-FA2&6{m4MqM~EL zBJJD#tBNahs83v8%m&3>5wRg?(pA5``^#g<>AIsGLf`+lc3fp&apxw1Gl-EZZz)CT z%6%!-<@V@PEuj$YtZyF_-{I}M{m{teByZ*pq)`L6hOyC>Q+xebLukW4P3+IrBTjuh>M^Bkpdku+^%V0 zeqi*5`KH!P+C#lxF@NKGI7Swwacn@?XZ^~5xr>x{842hw^|?B)S%lT`ua52X z%XhV8PM}$)^TmCgSgxe<%%N=e%Z@(k3r&n(;n6eRWDNyUZ+l&H47v(u0QJnVqPGA( z{+EAuq;R_<;#-lDL?ve!dN6)~s(VIlzZ?ZM#>e>ROZLBR9nddErQ$I%Sgv;ws*pib zkYDoZgm(ZH1dx8RUr~0jCY%K#D>Ml0`nRcX1TMH^j}-~`viuX&(exJdfQ@5^EJ5dc zkyYg%sB88a+~~HaUm`XTF{@~w%r)aJ&7~G}dh$>LyTh03LrdVOcAuC|F>}@O6IdHeYbZ*+ z=@Sz8d8?_&H)`%oEPF>>t|jChh|0ucDC2M#Ec9?0w?ubQEgZ&Cqce}0!r%2y5B)PW zKt<)YFqfNhofPF@A8Ni+BMWqWbe|7o*Ocnx3C1Fx=N@kdO>r#+U4FAwd-fF&4pJCWw2nv`XlxHW?1j?EDgOQ}BaHN6|AMFcx~ z^?lvE1*+$T?l~!c10aGBbSRwL{ZwZcy#n%2#sJxglF$lo0>Ww7h=wl(Jd0|WYXK}N zlxpD1VB076uI`iZcD(_VwAUH&Z-^G*3@(wCuY~PF&Z${A#LBKYA+XOUUIr}5awD!R z=+X6|y>M-1K{ewo?Q}^MtJtR4zU0nhRuS)&;UqjN1R$?*6J#8)*ub%pp9unMCy^Kw zmI$rYPa5@~e)G?>{nF2ZY*-edtd(N?mz4e;y$cZc^&$LN58J}qVrW?=8}&&mZ}~B* z!!DyGHttvYe)DRxAF9`}?GF#qy#J2_O*2iOr6tu{-Jm4VKi$j|LLDY6vA|oDjOWY# z4D>z&VdCo*D^|4hmt1MzLLqZt^&)2*EI;>e{T42M{NHUvXo0y`onhHK(5Yz~oR2Ky zk=VGeb(%SNDH6S*eaPVv`*o0oIRzop-F;4jDwW|?Yw{YD>0y&h`I(sB%P)t&>a)`W z44Q!*y7NOvAV;3XWgpdzpVAfFLX{u|t^i6vwZG}Ghy?Olc8&NW;W^qmhs`z5)6#{@ z>n~@Adx0#l#X*fn>%qj+m^qmk@g8s#9uE&l@`-I$I23BZL0QM5jygmF$DO8$bRDAl z2)Seg`LO*{oVBxR9C(haEZz-oR@MgPCs@(4EXNeTiy^rm7S3<*+AFW(b9O25KnGVJ z2fEHVjSqs;LA>Axi)?%Wd02$;*ib;A`KO~j^SDIDC{%1$-cb#_##f!ycT#G(e6d0h zUP%>$)9`Zb@}z7!&0%H(Iyh0zwPm<;0hfxx~&QPecXb-fm z45Z~{NHk2WnA!s~zS43n)RDL344+IjR7|X^m4ru{Yv2I{S;+;|QQzbONcoAa;H}UL zL9+B8^jTvM%;`bwOmp&RDAv`4;Nq4anK2B>tR0c0FQ!Tzxv9+!m7QrJj?r`57J^&oVlx|3T5^9#KkIQmQBBEHnu$!8MG*GyuQg%n}v>8VLa6L_ps%N2c;ls^yEL9f$z(%Df-li;t(?g`9!*}1=zwi*}GB?qpeGQW-KTfvgl zQU$BiLhWK+I)!61-OD*FD4I&w9ax!-fqflhY$miJVL_b0alvR!Nn_grd+W%Zj6v%r z+(U;F;T&eh@-r?9V0V1odr+P?BzhcXZ{+8GxymTasC}72@!$g~$skp6!Sp-{?AhB( zdb-4jI+R#P@zsbX?Dny=qn==+7A__~&oFG^K*J@9X}i4wa#=oVP6yIRmg_ zKQo&*~k{*yNX}=yMSj8v9T` z(IXcG(@2NC*ezH_8Ibl3ur`2{{bl(HfY(vR3$B}w5jeC2 z<}>Jo?i{KJZV3Poy`JppRWng;cyNvd0p;?Svb*Jg0hR#cCOt+nwI(KI4S5e64>IcN z{OVwf*OQL7lzJYpEd_lre7F|3;OTHPd=zeaUkvs@;24p$bEPhDDqWD6)j zc{j~#T@&$3xXFdX6E=1=lY*B*yMNA;y-(#g8FD$2MG4nE{Gl6pc_>4v{ZHkUa;*5Q zOk8%Q+Psm;h^i+ErB9FC0Bo9<#L9_vtuqD*+j4BTB`h0@cqBAoX(JhMl^lVp`yhs@ zNB5EpJ-L*f|0gyV(C2%Jt}bCUu0bNd=dc?_-&3iENAPUM{?Y=O!T;(8@ohDvZgxVw zA-PQa)<3_Q8}BG`MLKX@B+aQh5Um#3{9n6`_OUh_Zxj+9%=D_}hJ|8JZqKT=< z&1Al17J5%7_ zVzX#XrGS@#S%!+$a+P3t*xCl`tNo{3?WFK$vk@TuRG=i!8Y^mwf6QH{`?8@j7jDlE ze5tou99i3xa{7!Wl#CTXI?e4gw(0n?SHA$ZP zh!He$dw_mYrk9RP_?1w?uWetR4=VM@Qs6~-KW$V%EBy~V8-^SH2r7Fkw`Ja`R1YJv zxFKQ)e~vG!9@-%+_J*+6F32_S0#iDdYxJ* zWN}gmq-uc#{)H0Hc%eCleBZy^YOt6;_C)E$raSsr)jt`hbvc#bJv_t9h&54{22?N* z?-o@Qh0SKHSbu9+{aULe@FuJ@>;U}!BHv~yN0lpE0ZUxlW(=RmUgd&S1*jT(HE7Y{)bkWk%+0>@dkSFY1T0ahmemzh$tu=8Q z1-YCwI*O7w1&;Qvo(Hi4PQ1Bj7-Ma+$`GU+UsPBhT`r`5uBLTuzZ&_lOa|8>U_^8N z(7%qHUPzwW=U~6*W<~U|I+TlN0$!G2#F34GYu7GQGvjNwaK!t{wDg_7T>6E42j0Xn zc{J6l&mnil8Qus!fQwUYQpKi_2Fp)VunAaKH{uER{KC3nx}o%32*HD&0$z8=f~tql z-w$Mi=DbwV>cbM*!Fo}$QY4+nm|$Z1g>$OOP$e>qPkCVDistPM;^4MPMW`KJRZhc( zpoN;tfeHNFxx3hgwj%0OvG-=PxGTB>P{B^pqC2MMN_lhowhMo#%FE>vItfEe6-U1Aie_`n}~53Bv=| zXdgxG zOPg>d)~A&`PZx-}FYoG`(%lpH(bi3n&HBvS84_3W7JPIL4T$BiaCEvJcu>!22kz$| zmFYw>XV34RdKzgLgVbW#tWD1BL$WhkQNG;8gCS3PbB59ouT2uV`L- zM8CrM=Gw}>TId*}+Ak_;&iEHMTOyio4#X}r=%kdtcxu#6N zMmb?}Sm=Ov@P-$BzERN*5V$Nc!oXvB$>i%o1qttxWhXv-i&dN8ww&&53!u~&_N`zq8GE@P-s z!c0Kjh+&lA-aAwarZ^XN3#a3;|7K=agi&Zl3nTGdjZK!Z?3$a=_eGKfqQ~ujs<)}{ zrhpS|&z$0-7@}2jUZT%FKnyMfVNIF}ZX@MdJ+bbtdl278lpsyFh~fRyUW9&T^(nU# z=O2WRv(i@k1o&GVy?_O+63Ne~1=NhTY#!_WMfICLXtq00t_H#rX-52e)AjDbyeW1I z0VT2+a5J1%56m8msOjn?Is(}m=SXnP#Ietq{rY)WJsPF?rE@eiUhuce^+b_&lL9#h zUczIE9gBHIQnX_(P|ZjiltmIO5VV;1m}dO?b2^l)toKIJ%58ayj}~Br$sw79qtLpB zg}0)76rpMXlqu#hvHv~f!_LMU0gU!K#3n>&1&E2__&E>o@A_9Gm_P<~w$i3v59Q_j7y?;4uf`Nr|~) z=l*!3rjL2wOu~szK_{*yk?=~L-`if<<<#vRpZ415%D;5=sT=xb!Anvk50&@pb~kJCO#lHZtI z?DLM#O)Y?ov4o($fvs7O!$h;)MS`acsRal9Uf5TCUmE|!1~3cnAuXzDRX1oXJ#D_^ zSoY!KADB>3YAS&wK%@n^ve9;b3D!T;TgOv{CbAOAz>~3wZZPL6Sqy0?ciE#PT-pSb z^6RbKUye118w2PbE#UTKAjlQDOf(|t?XLzLc_4)A_F(r}r=?>^OrUZ#SuLTne%{}1 z1YjtSlUo_cJ4q-<@*Z3p#nKUwJvJ5PR3B3ItW92L#yMjIrtY6(dOY2lrVBphB8U#Z z<4g$5+C)7@=T+@i!o8kuta6X-zY`JJXGv11zC3U>B2k&EO4oH3{A7eAmOlZ{J>_VI zburP;>)IuiOvQ`048oksPi#b?b5T4n&ghHYIiOiKEj zvqKLK@(--zu(|q_DT#6;vM@R+*PbDW(^sRGn(M5510)OR#F-JwfeJZs33>6KUucPz3W1Lpin8xmx7c=$|1S@q+`R^PY;N$ccq5*KM zQdN(H)u^^x)g{mNdJ4{_F(}L?G*opgl{eb_5!uJW;dLHj{h;Y6kx1z`&J_mFX&6dF zeKaPaXw3#0n<$1_FKwZnd_+F$8u&@s&?brJK2ri?IT zW)@vlc7&s)tj_BhSD(t`S=X=cJ~15$oLHm6DuXrp9BlghTV<&MKiejsO(6l~?Vi1z zKr6UqLnNm!%?&OM?DN(NsBlh(Nq`AxIXr+Gn@!A16Op#{ADC=?mPFX>EX&R9oob?Q zBKr3)G0x!s1Yl9yT0+h?&k50{gj_ZXaA=+S%^!v)%Xf_YBvwaHHo}ko|4)@bS0mq?uKB$9FHkuMHF)HML@P8jK^c7*l^| z+8@Vtc1HS5;dB@MbF=IN>2f6MYV~!xY}GwMNf$wE9u~+!Fg9>`xj)?oW$yFw#oQn%N*3Y;0kOE0~vgK#BSn zK&QYH`^=eS(iddTB+u1Fuv9_V`Pk7xWHW5(;%CmA%M?JDm>yS?K~qz_hI6_<^^FC0>k4AO9vypNehrHy5nwtjuKE5Z?b+UYA2LJ=L`-;O;Tf!SO zJ)VybYAyM5d_5`<vb>5zxfzGg@lEy1=Un_Ki z?1l$lAmKivh15O3(_E)Ct&UoeE3MmnTfL*e5b*G%i0&jz%(Ft(tG^nBC0<}Jmc1Jb z$>X8JM*;W&?s#=ue^_9)T~{YfpP+Tvw@WNUbexWa#{%t$~&P2G-TI_CY(Z??%k+66H<3+ z;BHL2nz18mKFvr!&+UPU+b5r2P~xaM|Bl0$quI33H$zIm8A-Fhu(cZ$(<@Mox-Wdj zzQ8jSVJk(uqsUwU#)M2DFM4xyDCY8KMLgv6S5pr2ic2Qm?h#4%?ETk0-K|T(7I}gk zG#xZ%tHuYnUK%_T;NY5GO4AFg{W?xOWmo{p1Ho6IKU3LZaYtT4H63@^{HT;L){|La zr5@d3Mw4Ne2HA>??0Sqxrort-_J=V#8&o^9#csqc2v6KO=}$UaIitCvEL&<9rjWzM z+F2=L?D?*@coPv7`zy!3>LP9Vl<-`pP4E;9W|oK3mhE-Duot|p`-Q|xpp5sT3xhxPHsD|XuVn6b_%Eb` zUE2UI;a9&>h!v?7`5MqSi9IV}7K$C|m9SKoWb1*0KVTcvWO;tX$D-F>?`~`) zkQ9y5pa;cO509qoTVhB7l`T}gd%UCx2q!Dy_JvjmdjDTw)R32J)xC-=BiAS8D!(zP zOe>T0g5-^n%DUcIM;LPA5G3^kqbhdg&?Vyr6&oY zXA5zQwGtsna0iX)56%c}z?ahHPw;21urV+(kaIbco*`F#5{YY&!zz_+WU}Uom-q+h zR*s^Sg7_$3-@5P=r)Y^!Zhn^yG~RG4IUm?Ju$)AJI`j*&3~Xy}iJEU{Yfr(D0UoB|Azif1%x~xxSs6%Z?o|j3qV*dzB{!zxqpi`R%|w@ z!fVKeHlx3uh|hGflry6>1su#5Un>d{fIsUW92ppqL_!`+tWJ^owdL090Z1ql0FP!9$xD#B?JoCm%6b8K$a6%A((N`x3Sa~c^G(a;OG5uyt2DHlDq*_h{u8_tVG|{jp{3A#-Q-%JKTApxj zY^g}L1kiy3!Y1;=_iWn$6wCYc8rM#AHA7*7b{B@N=Kf#L>veO1w)=u>I1CXh&uLxc zfJ8Ve)dY!`Ald6tq(pmO0W|3P#u-=%dmYtQc~Y1&bl_V5jF_?$4pFkf$7H(yAP5b! zVSzT0&p2OBVxc$9eKP=4ur<@fhwm;M$miu2%CBxCYmFwtN$5@0L^{(mQcEhDvAqIW zm_m%OxImy2I9M}xOhkG5{xj8y6|bQ5TwYH4!8t+>U;-LnN?R#(Wul;9mPaMhr7zCz z3IHfTa1(Tc)fgoHZF8_DAP93(kn4Lc$Cx@H-}T5^coJQgWD^z}2J0^6xXHQ1mZ5op zQlC(p=0)nVPn4!)-5imX0HVEpP!H_+YxhGbL$f3+8kG1uZIwrGhcL^(O&<_aCD^KLv0j*6p z{vm6Mp&zW;@uw!>02NuZ#%=z;>se4YFUssT(^YJHt$mqu3%s>NEt2mR%}E0b-krs< z8}UqkzzI@`ENw9!f6zr%IM_1lO1o0S_ec%NF88r>$)evwsZ)s3q_TL`MNZ7B;$sg? ztUrPFt%OF3Z36J-^*^3Vu=sVH;mh={3>YL{k-9|n2HrQ2rQ#{08&2xOagFETMM#XV z;49@U5$%IgOH4_nbU+$;uMv=}^qykvgwdw5D0U$ffWGEF=*dJ&+C0(Ut#@gdv?gRH z7-=npdbN_n%m;p&OlAn4PD$3PL!0I{YV=gM7gbW-ftRj==&+ba=vmQF07&y5k5<8y z8pkmubr%2efz(?on7^8+(oTx;`&FwZ+_2rk9X}9uuBy5_)+;TJ#{y3x5svtuIB*x? z@t)dk>D8E`!AUKnI0F%K_CaObPTYe;e%+rw|DQhYR5t!)EHAN+D;8a}%Lm}uG0RnQ zIxq`bJ!!eZYcu-DFudl}Im|+lEwfv8=Uo@Rt`4c+x8atWXjBabYyD)31Kr-&bXncm zWZiOL%X;$o0#zj@A%Q3I*jcj@U6xr!EZ1G5wDjf1=Nf(kpbEuAM&ya(dKh_g`Dkxg zYs1@40-{K$L6xwrpGln%mhv#~;!U_5nznr0`t;Z2yV5i)140N5kZY=BwrzYt-gh%|bHQjhvh_EFGH;Cke08 zB7q=MG)uM4cpE{>alR z61q9ck(Oaa;&h{Q)x000>9-cgU49ilYkb;lj=yPW1f5PZ8W5y}v@mNMqEAO>9)`Nl zHhk(+&>-y1Dg(xG+zfJJib0|`CAOJV?QG?Hb5tp*kXcAMP?O}gA^Q8Tv4G4nEhdZf zBD{7nrB-j0}4-9xju!L*-+|E}Ee2#ew{*%GJ;ZA13JQvdFy}n*I)Fw?+U@Rh>QXJoPfV)JQ5MYD8fQ&tQIHmjrvg7env= zwLSig)6{Z4<+X*Y{2X72D!Wr;FORowot@*Pv&j`z(E_(DYSC)7?C@k3 zjpiozo98<_xKD}KnvWt{a~vW~a**go(BeY<9#^;n(E7xHTL+e4yDrawBg(!+a( z1Ijz|=^U-@PkZwa2-V&K!EnYGx3I9Is~OtjxV*sctk7i!e@g1J?%vKm=&*b8ffkLo zpJlAo1WK@Cwb3BM+FU)r(@Eyya4xNw^Ew@Ha}!q1%LbiLMdXHQ_uU!uvd2(EfhV}* zxaT-3mJBi!+_XE~x~Kd^n{$cU5p#jTeBgQMppp9Y@K=%wv;*=3vbldm&Ti8wf_e2v z0DJy!2w;N@R*Z0Ni@Yk-%A{By-y|$`bMwkqWJ0x_6R|}Rn2*)N$yeS(9%nF?5E!@W z7@@Xfgp`Lb69Y(}#;=N1bJcS6x6Mh4@=+sJaB|tIJ$j^KK>?Di=kdYFFSR;Gz&ROTu!^&C6ByP29el32PrV%3vUf(y@M5y#*OSb@ zDuhfUVM5|=kj#(1heQT8j3ksD<$RuBL8*)ER%*sRtdUD7C0!P&w}`zq{i! z?Y=p0ZtG-qF=Y-10ZNimOzz5!?^lqX&H257R&fc0`y)c<_XzVyQml&L*2C&@8l(ZM zo$jX%amUly(nHa`lRL@prP!s~g_vWU#~LYYOMy| z`}_#j>eo$J%~ws-B^n|Op8lO3^&KtCgGFu77TW$}nb2vLfMbswAn5mkm5hK=(evd^JC4cG@gaZ$JXM)2+Z^|lkpOU~-t2aK|N86Uxz~QZu6KHd zRDeb^CTxi z5>M0GA+(72A4yP&;(r|1Hq)#C?nj)>0zCj*qD{JCj<}9S{Gyk=de|We86;Me*7bOX z%gPV#CHe33{Y9s8H>JFzd`euE(CSsp^KQ z1b92+TkSktvzQ0Q0JyUTU8PwFp<_Ugth8&nw*giUJq+Zw^1(Mc zktg+MvBVEoJDC))Mu*dgpjFQk)MEjcfHd4zp(Dl${0M1MCDGIc>%dnR@D(r&=U5jw zXW`pDL2UJH8Gg4eBDEe{0*A^|uD;C@8ST zp-Oe^%BjpSn>N-pPqX3VeE~_xefc0-vTm9jXXJ1vZHVuCV3JYW=1`!4AQ;5}y#&6O zLvRMmU=OqgN49QyK20r8ysZks<-Uf+fdB5qLdYta2Ebj%GTD_S)z*`JbSHf;NViuH zT&Ss)pDw!m7J!o`i%%x4g_Jq7#msE)Q{|OXHMio@Txo$PC_?h>jExP%=TR)MVFRFt z%bVu3Y=EAwhiD&WX}i}n48W7d^}VgDhL6z-I#W+S*_Qu!va_0+hO(wq+kPhtOGk6V zI6$l3#FCsnZ4-k}dC_w}-?xszJw8+_lY{N~Uyy}*;tWiC?R^c*`V%bvE_I&5&f zx_je4sqLdNMldD6h_K_@*qFG#U$F9kH4*i-c~5F+?ZI;G@48?mWICU!vcTt|9oV1Y z#rvSQj+rq~w!P z*bkNINOiQTfzx{O8pS5AxSTFRq=YkS>dka@k2{=(Ac7U1IEDMBXs3W^wiB$R2@JjPOGN_u+GE2*m}o%-Vx~!OwlG14(HohAC%5(OY)3 zzeolDF#00!^d>MMB}AhMZ)~@jj3mj~NY2U1x_od~h5oM!?McX*hO%~nja_C&ibn|a zv;cHU_xA#mI#kNpWXxio$0L;H$`q~5&4AwIi!`696(Xu_F2F_)6t*G^V}cUI-vDXK zY{p~m`B39KWj?PkWi2S_R`9jRn!G}_ZEE;}?fN!G;`13;4CJ!Ofxvr>L(|mwW8<~h z$h1$r=#wE&sh;!|!LBR?1s`(V@^}5CPZL={y7uyI^$zI|9rQ*`&ijQ=#-fNOu_i?F zg&4`gu`8G1W-zjMFu#iCBMK!N##le z*De4Yq;g47pNOTuJ`gKe0k}1_&7~V)BjBYY4c)HC{&Rdcw`F3cuS~J(wKTMsb3o`v zJ%K?sw=bQfpvtsqQ+LMgT(rUu-yVdE3S7hlLh&X$#|Oul+An#eB;zOX@ZXvnM^=qH ziby*Ffk7+08!(aSrt_*h7712##~NtV*J}8acQO zBmr;PpVN(!1_{*_ZC@%d1N$Yym!qck`zevtsOiaYho)5vd& z!a652Mwdr>q&98(nFCv=x?>W1)QZa9f)h6S=dlWAo!6d#BZ!set4Ev^7*EZ8;_>M* zUF|GaxkeCx0E8I-R5(>xw?umxjLgTi6Zf*)C3($XIOz+oA!0_#bz(~p(G13g zM9P6c*!`ztS`^RE=C#P8EavS1_3nhjS9F5kfm}e-CccRy$&aEsn?bx59FtTAVxtNn z&^<=~Iycis3l4D7@P+cjSygb15%q8&l-C234u!Mt08=sp(g- zsS!2~mcS9I)rH5r-e5ScIG~3{6;J5pF5gBC2%N zA^l@iccK)m08${mX*HuXskFfONsqn*_9eQ%Iduu(Fqat3Ya|hyX{`efFKD8m%(uDB zK`T5^ZT%oD zFhXJ~_q6EX2NaIkhQ6n@Sgxu4xypbMZqgtXk%)y~=^M6I#GH<;xVBJOfcB5lkghY} zf1~ir$gnaxp}#%0L=nSkKeHh?DDc8R=Wp^iwSE6cq^KX?g&fqS((8*UFD62#Ge#1* z03ux-OH=+QT&66AAS*V2_*mTH`)s!cDg9d50jT2}1Pd)hhi52dzR*C?wzMaoNChSq zb40j?wa6sj&|N~=L=^rkPnINnL5wZNX%#rkjzLlfnRWIi+pSJFjmY=C!)+xd_DKK{< z#XXe@ucKF$?|;1335G!mdVuFDw7~IHf~9!6)+>B!6Qz{rhB%>dS3dmbtk45GaA{~M zcN`-0+re2JdAp!w*CZ-;z4fea^2(APi%)`xS~v~1{$0X228p5Xmx*@zCm(FZy1QQkK&dprjqmZ_mBQ=^s; z950HTjus`cQT~*(tlESQ##`?mg}QujU+Y@oM|mp2T3X7OQmFW!mH0D3>(GNv|2cVf z0TaErlWO%onwr6mO>DxgWibGmLrnLDGHTd8YRkg&csYI%SN}fStUIDEXg;>Wz*8o?Di`DID>D(s5`i% z(6&TgPlyx}DT%rRn!ccF#q5+L1Y#((XLJ-2KSzNPkWo+ml(xU)`e`XiAdx{Q(p?Yz zA0Y4$XSSk^cCG|!6cH(!ij8mz`{IJ=;uUY1c1m~z3?s4cKq^1aDCXiM2+`j~x%n9J z1lpIPA4^1e3QKbPfnspZR3@`!ydr7E2?9dKJt`N%O9VnhmFv-6M(4fy|O^S>a{Hz7;VHdT)Aw=_l`utBgH>RWbSU0!2w3`XQ6@J!-0o_=N*;6W9dm zILHJ7vhpTRP3KFaEoktM)r*i#KR{Pe_7n!T%44xDE_RaXegb(*^b8mSn}69l*s}~7 z5q||m(~L;RaIXV-;+ie-ssNr(0%W@OHTc$uBDYrdvB#^!NKCU4^?ov?per6gD5ort zPufH`i+K}rQe1)_EGt`_r|}Mzl&Af7cj5HXNOi|K^Kun$C!Smjn;{WkW!qP#wcv}Z()Wma6Y4_S$gGwHED8@K`g zLGBRH`u_{DYh0*|DIjK*7?_$536(*)yDRxU`)YQ%Z^}p@fdr&3NUdMR$RUu93$8#T zL+_uBTcG@hE)ZpBs%v73rvU8m5>c)=yGNSNSo_Uox^8 zz2koSuepOkA86vXhtGuwC|JV0P9c3bq$7>uQ=v)(0Pc2q6TUAJ&!I7c(BA_VwZl5h^VWZYd%j-7HB)@jpNf5rpA>SzG)}b@}xZTJi367!nI6a;2Eg;bDazrf;4^ zKF)58GW1mW@q4wFO1$Gco+s}+^R}4XcGU&Vr|^y8DUvfd{Rl`fVQ|YzsWA5x@0AaZ zW;gVcmIz%3+afF*ojt=H*2Ngn^pEC03Q|(L?wRgW2tQV8GPku*N@kKYrl!KElSi&$ zoBw$wWm)1Rr7|{??oYFVw^1_m_7z|5sHuG_9X1XO5M`=!coj+jpa}_kOrqeC zd6M$*ap0RYy>F;ut=Eqmmu<8FlzmSyFS8YbSby-Ytwn~9rSGvy8>8WH(_hAAmYu7` zDMZIN0Oz{Xb|11zU9HI)wtJl)bv2-f7U^oh1G|Fq68T=-&8Y~>Tf#`5R3{%H{y`W9 z9gkot$O@HP@9}Cf^+1k>&9FNCVu(~#Ga5;MV6|v93bfGvMtvr zK}xv2v%1aPn`vKDNceye;g)l>F&K)>0~#vPTK57u07?>iBBC|5CK@+yV46G3Ovgc* zU!d(~N$zZ_^LNMU+`mbi@dsg(5MJyb8UQLzr^*!upbAp)4n|v`aZ*B6Q{sVW7Ihpu z*b3@dzNw7bekN?MKRIgJo>}OFsyCl5?jJ2P+Qj5D#o}JATcUC#KXua^WjFY~bZf8g z25Lsj=_{2bTRU=lP-kI=A2(qd3ZGS`%1qF6!hHvr7nr^cH{Fv|__P>tDB2@9;Mc~lybp1$-Yny&a2!L#ur z9st#AvB}JeO-iux)w;A!U9nGA%Ja!jKu%Hq6~vp!**Z~3O!cNH0hd$vN$tvwG@}^& zb6$7p`!?0In)+@Vlq{DmCHNh;I@!qdB9rnN{fBmtuT1cE1H5>(Tpo=7XhJQ8eLr)CnOlk8fU~?v-ss@>)I6mMH_o!_H9hyp%fuzBVW*adD0yj_F6I%G zgx=Ks(*ruv*6@ZvJsm+>&Pp|GOv$ph}G>DH+`8vmD!D>bv>AE#aMWE&N|^_!hM^LZhTbkP-Rw3uD6D z97$a3KE-_w?~NiQnnmbpy!7Amkv;c{sC4@;QoOBW(5Qcx3Uc5cVC6Wxg%^*~JF=}o zw@9gBVbL8@_zP?j5P-t$(B}QxmYH97W?_9liy;x4K!G=V#IH?(`nR7=<#y>Vke#1+ z*DfY&TXwV>v*oF)8Zxmv;PBx)Al636o?iOa-SVFn+8u_RLvGipksN(-v>#BqDf%OH z=kUl4la&UNr^s{BYAtV!9+cR1*z*<4h02uiT*9c}q`lG9PXAJZY~d-~$2Q@(x<*=w zd5Ti~)myM0GV=kd{N^2vK(km{8H)-glqsE;a|-zz5o%26%%E|={HU?~S}~jDZ?21; zPd@Y_=T^5CNG{J8Qr0acrndz?|9vVfm(oY@qzVkl5mVJxwBks@d_u2=W@~?DP%JjV zTU_@H$!WBtqd2d!hjvs6!~i||K)A;BE0%8H~4wuP8o z<-(qmzlL2xcTsf7GF6~%ZxBsR5W+HG04YdAVUNN}NZ2I{Y?|ech4x#rH_TV6SaKHu zyOw`l$n+-WeySRfPiP;+n0a8rjn65_A_udNrytp=^8ZA@0ZNCYGwu2AG;07Sv@`XT zIr+43D-8g81B0yZO<4A=9=KV?_#syVwp5?8O{S9M=#dnh@Z^xWx(G255E4ViQQnd4 zXVo3NyItRfjY5S#?u3H(_*|*=U!s65m2iU^59kp-H()5N%Xay|l{TC^Y`U0P+d?pJ zXu~Ef7GeR+&MT$bk~8c$ImTgQWdZYW8Q(!VR3 zc=)xpxm$0CNc}0j%BTcL}4V=?6>QrP^+VkOl&5ViCn%HW$bXDCXMm!2(F zIbZ>Q&$)2-jN@}w4ruD=+VMg~;HG0>o2t9xa?FLw?bH_-AAq>LoHm(sIr!f6Z`sxf z@DF_xutF(OL^#65jnCsek8#|nSOqoPhD1ospT(F;1lk%aBktN#1J$&O9wuh)- zo6i~Z!NWaqqDsY;&PSJ$F138!kG{6UzTf4^x!KSz<bW4c8-8I96*Q+1Zk+Fob<1+8aRkbF^Ui-)mB(HYelUh_wyC7+EApA zSnxCWY@cROG%^5n)Y6_-K9o2jU3c*~&7Y|za=wB{N{1-KSsCAf75Zi~!?)VOYOs}q zk&|}w4(jga(f;odn@cr34QNK zi&w<7gzt0rM*B2#)%4^iiew z5bWs1lwitc>vLfWC49WK?>~&LwrDnPd9)Drye6^$WX75_w=-{ux`x{q zMz~t#Jk5dP z?-9!106Rd$zfxBj4&rj+RZe$Q8+-eoOnbpf*6#8JlwD*O^^B;dOg$CkJU!@ULzIf% zQ5%2DGb3qHH>S;LvDj+1DbWw()|s(8r1Ce2^91y;gk^+#q0tqEChHJ}zRoJV>{t%F3Ug+ZhabZQ z5rUjFecQPZQucU!7H`xPlT@tRQPW`8dnRVE?;V*4m7W~PvgMjODvLk5fV>L`NGO`c zq-RMBCtoqW@TMZR!4IPTNM5$?T@E&xP?fG11u)6AG=Gmw6!U)C1=Ln9J%O*bz#zVElRg8&lDCR(4XS zRt~F=yNiaERi&?IfbW-?yzUd)WNJs!D2*@YPs#`-TMn$!()%_V2g>PoOtOI(RWkKl z8#5*Wb;VO7H^B1?h4|0C=<&-aA9)=JL~`#k7|eGZi0fig8qS;5Q2K(Z`S_Hu=M^>D zx7HjE-1}SUt&~+Yq{a^NqH$#xN{*us(-^vzp*S~Df0)IL^Z^(b;X7f2oteD=z8Z^# z$Ri)8SXCjeKn{rLXhsX2N^bzYP6!oz^~VxJp`njf2z1Sxpg)ocQq+>G3XtaNvQ<7{ z4U!YOUy7NE-g~D3GWao0NC8O2xp$q1M0G&RUl0I_VWSf>bF}V>Rlr?q7s~1I_MAuZe%ZMe~zLDp>?|kBv8r{84_pD z&+zA1iO`=mS7lTH>})_XEx_|nN`nH|^^QGSov%dS5U6AB{1IY#vu{y(qTyn`5ejP6 z=DRql*ylWv7!WxI(MtG%V2;6g9!-O&WoEz(qk#g`qu1=+p}%1p{N(N-`D7x0L&riW z^Pu%Zg41D5oj}W3`?+QN8RqCwVAbAa`Z*M!u(Ju6P2saoEg6y>_SS#}Zbn7-kW!8l zOfpZSC>M{omX7F=^{fJT&kjyn3$me80;Y@+u^|wOd?b(w;Jnl`GnZwz*+iabX?5Rd z!3tD!1SS4$h4YI{A*Iqe90@x2e5<32n@GIWv1Ro<+hl@q<+B{^=^3v~C};;3y3Ia` zS|RP}`7b^Px6G#V#N)z5Yo&yh<$*ILZ9zIc5?gItRc4t*5XAP$!MaT0JDY%&~{e_N*kw zGMqlBTN+<+}c^L?Ccfxr!ZHF z{b=b|`9Y50UkNv$y6nur#g#)iGtV4vclR{cgbT3`>ALDec zfX=120VbXy_;{-3b4Qq`K9}uz*I4^{W!WC_^tBBUlC(W45L8rF=8Yt}52d826d!XT z?BN@Jy=PCWL;9NZ=0J`2H*{I*+L+6qSKoxliF=Va2eZWf3~%!{9xVPp16-~)DR$3e z|1swACjbXa9C@Z~4?iPAP=$kJe1gG#oG!?Xxpj zRQZhTn!=5k*%xl=AGoyAwXwPl%NlbIvQORd#N`)MNAjJZBKXhCph0cqfK-|}II$}_ zp4zgSdx~tn+EZea7zzYqu_@%rp{JgJBkrI?C#mz6W;PzTt1tlZfGf=Jb)^{nv%PDm zxFk4`T|OUsW?9)~LRQ$LPEA3n**3u?Dd>ixjy}3`ZMrtz!Yx1qE&MiiyKz$Q8uJ%e zq)2pc4iqa=8*^CNCG8#7pfF6(~Svs`(F4rYi(ktk8^IRu8FY|{X z9@7ZAzx|6lwLX2fPD0^&!ClT-c;NenhPhkmzX3fR+og)$$?8o3d6jw)XlbNy8(!Y)K*y0Zp{{J~u8vN_$udOzbts2jcm| zRrbwG-~duV2Qxi$4h`IaZ9%ubYBct3qaI;HC@Ogz2RXqNBY^wYIAx;qg4xx4VG5UP zJ;dK2Lgvh8XY0?*o~+@r1z4IQ@cNDaYu4619_JF_kwQqU^mVolkUaGUv0RWg{{=EU zt|EA9vcx=@!k^X@myjO>qtvp)W|1S{OCa_A%UD`L!aR1cB4{{-Ik*&n?2xXPDEqTT z*Xb0MiDy?lth4H9ue?`1l^Vgd0}S^{3+1{8My>}qIg>eP@WMQ3!UWOdB^O~rGV0Rt z_snW12j_-7X!R)-Q_wim=adY!M|GPZ=Hd_GVt-I@T^XgVzrX#wk|Ye3DSVE<52{)X zu&((RZm|t5!D?qs$3_Ms)|`z*n*95S4~l%jsA0>UO(iA7jsYG6$YXw3BsEa1^1KBS zbR*E(j$~qwlr$ZZzVlh*HuNi$?b7m2DPv7wxJ_CpF!;lG-{Ii7F~HzMUcg_cQHvS- zz7uQbhqZmcvwvdr5<&8qEwoP{lKP+Ibmh7~1RDRdGku<1eA70NX#WIued{ZQK)qKG zH0@(A)h!Q;bAvtw3T@7w{m^2doCqHPS8aE~j5RT8=drM-P%*q}m`@Zzg3SAZ|ab{Nix<1FS55F3h2rT-}x)p6g@xtZ@AKJjH5 zo@A>lGJKPgXmV@QLnY7|&S{8T9;uA1kaFkV+ZQj^ zF?5n~H5G8M-oIV$mvumcaz`}<0#K!NVLJe2?_Yw6@nGm)R_RQ)P??hbME&(gKoTq(wP ztNwbtBs&ntRW(diX=tL3U5;Oe*OMikq`5F$b}N(G^bg_OJb`Um=SWq^vOoHv#jr?v z4a}eL%4JQLgY2Zz$KHLcJk~v)kUIbIh$#I1yRWJP8r&No;VTEc%XIJn0t|8$m2?3= z5Y^(CzzT)~%dpJ_4E^ZnCktnJ`4mBIEhmPkFU#LlCvh-hFFgBOwoNdhL)oD8)pRm% z|2ta!D+b0~M{AKJfARjM_uIga^YX-4z_7@RNHyeu(ihP^Z$gYWoN2mdxy!k~OPKm9 zeIHu^=qWBi@&o}og;))aRJQa6JQN0U^Erb2q{Be3AU-A%y2&B+GX^tNw36Q^iq3abh|Oa zf)QNX35rT=lHiEy#t~YY`sN4a08?TZS-$CkDon{3;jer9Qeetl%y zQ>B8y?p`L4qaY50B%g2EQpGi$sOLZ-NdrG->~~SckoTv1BKp3EoX-cm#i7bF6$AHuXhRebp!G75^Ug>=i}Q%`ZBEZo374#CiS>`1SezMzJ+#!6H5HwnUe3lx9X9LzmHEZbg72 zI*J;6Bll`tF{Zf8gc(=@f5no7aYOFV zWYgg<_YfctrJlfqkbBl$zsUXWq<%#Xy3ET3ADjfIj9vI_z?C5@2xJXFZ#fZ`Xmn?V zBN7Y4D}nqI$9Yh-l%glt9y{ou_~59m$RKNg(5d>AwEhCQlO5PlMEP?@Ybx@E7ZEVC zM8l-957-HK1f3yRgKfMRqCbLZEYf(-bvFRAChrxaL(l_f+Jsh|s!PV?Q6#y{`!UCJ zi3vBtYVs|&CbOo{2q(MqTOxeIZ+(0wH z5$c9Q^H0T>TCPRuq?6{;d`)+FMaVX$0X9u;3H^5PUe&P5DG2<3m`e0x&F&iH*A8{PBWL7#PljZBD>pV3 zHo8;6+9AMY3m9jz5GYNm`?A!6TG>qTwr6QG+b-wCcIunN0jOXZz{IUrXbnQTpZ`m4 zF42vRd{++b49D!?R=uGgrnj9YsRumv7FUFgx?#Qf=GP({53F)6CU za2VZ%Rrf``2C9tW%U{DoytO zv|pPmp#vrpp49dY+UO9SvH+Jt91qdI<^`S!Q4Rl|jTNd0T_;T|d|sOZ9Jl$wGX>ex8VR><@mY7pn;Z&82?^l2rW zxO8@dy(zHUeqgL(V_5+W4WbCJ(-~+1f0oP)&||$1BR65L!0Snnha_tmE zYIx{WA{8y1;C8wnmqMC2WAI{52ALF8J346OxU*!Nw+UcXn49fg(RcLqB|qo&+Hm)K z=|DUxlE8O4ZtgU%ajN{D1&t*3U~yPGP(5gDc=5?ir<;$=fkjnjz(Sw0sUTxHGBY*4 zLBS*-phOGHoiNk3nsPcfzy;!9*MnBU?lwd|#Ancbw2m2Zi0*kDB1GEM?lXQJ2MIj$ z=hZ^o0Jc9q+Ylt7TZ!dB{pkuV-dvp0K}!pdZ)>kCeU~`w1m*Mrs957PFXk~T)5I(J za8%#O{sGBlax3pT0%?H64P(jF$MG=7%|MibxX?ASfs@O*Q8L z>e~SF034`V@Tqd4itT^^Q#RzcwF!5*fOJea*?3$7A~S6cKyKi203kTZu!WZhg|f94 z)tMKw4k)RC4`3^%OSQ&aGb~?1O!kOvG9T43j5)$uj?N9Uk)DIY@~8NPX(Yy>D|h1Ghlhw~N?AciBO2+^Q#Jel@jo@N4=t0!dG zUXe~8cRE^E%HE04I%1`N5mao)t(kN4j*>F=z{qv(L>NEFUTr(fF{oUIaKZfo%BiCl z7!t2JIPVMlyYCsgJsw8k=4xlosFYj73W^tDz@QOP3E4s%{`b#oC9v3l->4`+Ks)CQ z)Cp*PO{BkJkcrEOVnT9`}VhKlGe?{9^Jjv&w3A~`x*PG|e`@%t#CO9dO% zPFk&8V!R4gUZBr{<~u}b%{QM;ugN56W?$q9u>~?cVjDw=BX~%d5-|PL20SB97>i{M z>;M?R)BJcRV5Qa>Dr1fXe7{5B^$z(_x)VbmLPNMO1mc=tb2f)a4nF$2QK_d1W-FnB zk8JKqMXZdERVVsXeSX}rtWx}Ips}dwD=;8a=C0~7d>js2-61Zhhc^ZU^g%~=3a2kx z04t|oHA2+!%4csc@2N<{q`&i*df4-X_?O8psV|Iml`9cNC*Ow|HPDLybrZSOw~x7>Q7h%95a2pdXU)tfwFI)e6+$t1`f& z#bT+#m;h?PU?z{MqHusV9BdK>QAl_V;YA3_&|+e?QBy5cb6gHYUER#r3HLg~NiQfPMNu2X&Gbc)>KP~0H6*PT4T*AyJ5)K6Cd|eb`>s*M0 zo0)5$QoE)D;shN++tO^AYp~7pS z(MflT%vzlL<=@>lsaFN^KhDwhyP+-_Aa!3)LlOA05*z0X{Q7uu<0HGOq4p&bO@m;V(r);U*c| zn{Q`WgS?-Z5Q%EvC_+(yo?>|3=`Y&{az$tc5SvVL^cZZSwaK_g6EVMYRNac&x5L<> zGo-(RKBRewA_P{ZOH{GST+11+-reY-(nlMuAd)N?QTTSo0?d!S&h z<>rx5=W6t_p^Hf|I-5q{2~i2iue_sIG;O^X0G~<9M;s{7JkpN53rL1y^DwmBlrS0K zcpS@q^01<{7x0d;V*P>-*etS_H2;%0`fxn3z>?Lhg95P7($mux2z0lP_ znKuFeSHFnJKWU$br}-nSSmkew>BahZz!=jpZ=?#>LF_rNX%hqS#Wf@zoZ2|VQ4Tr# zwpm{dP1CUuuCQnfwI|T?l-Kqo5=yRI^mkI0i2uQ0)>OG><%0cm!y{K<$`czdwy8Y> z%vXi5u>t6Za|E-bIsiqgRYBXyavv&^ml4fUudL!{uFe+t_i^5=|J9<)tW?1TQ*H zKZ5>x2OpfZ_G~nH>5CqNO0(}2n3?fxF75X2ay8v_%A#TfZ0;R_nvl&_j0txA`Vh3r z6^;qm)893cuA9#`$$7!wSW4g7%n)13E~BVy23u2plGr~letU`|8cCK_?iLpd?=ogL zA;Zd%H_tx)h6P=)S|s79Yd`o4EK}(diV(i(>TuR^)yYBh zl>PJ%sYVCi#orMfRZQ(}aTxs+!v^ z;Y#CtnHpY);+1wXkvK)qVE#n-ZRcqY?hr!)-!{2%2S6j49vp!vL)4-xk1HUnC4yj% zromV_G%+;F0@wXWr=;hI(#fBDBJL?nkl&q2(UrYTdcWHO&$;+Ir4-Md`LuGn%tXG$ccm~Dr zd+$sCA04uDNtxG*gFpKrSlf?s5Za(35K5wzhB`0CFY9laz(#NgW;!ymc9z;R+b~4# z55rCE$mfOfoqS!Szo2U6Mj(Rt8uRP2Oh<@>J*lE2aOZ8b?DI?7C^?9h&!SgR8kQ)| ztpy8cr;k^a*`e({MnO)YCk?2w!Lui~*b-*g#;&cjV?uGQpyV+my+Tk7KtBRFYQ4W| zz)-~#k~)jVE<5xjf*{`50U)JbHbspY-zlgYMFHm<+fLcJkI;-a0s8OUe+a7S-OU)jZ8$6P zx*wR=g+jfrtQsTqBDxpr=e$&{^bus!k#GV%rcpNMh8uOW4jZ@Q}I#^=H` zB2tB^^>;0i^Q8Z$_<23X+~)HXbxl7`nu%$Uq&m&c#x-MANVZ&2xS`7c3B+&Z!gPxh zY6NYWuU|X8?o0OV@OSQ(hlbM-mO7${e;?-^wDu<6s;Co@#33QV9Z;$j65TQW(XKqu zy6hc6QHSqTZ#bGgAD)>iui(Evw^X0F+RU}nzT&<;2*TpwUplJrRrxC;kn~=LpHHsU zMBq^>X;A~7LU;u0O<&DF;4{F=?vF?{6Na(CWnxjCLNx!Ibtnh77K;SsJFg%gFH2#ROjy5FW z0l1C$*Ag~IItfV=vz0kG5nDo-&&AJHP5YDbL%1&>N#{UoefF&Osxciz9e2OW!nR(I z)g|N(st;4RgjpRjPPBG*z!Y^upANDrhNE=MV|7W(BXgVc!+KInA zB;E*EK491E|cLTY&fbt8A8#S&G0)t`C}_aY^DveqNM(EwTYD0~CBK%v+-z)m&po=10P8MkV~MbIUJi=KFiI5b8WY1= zH$iwxR9m$e)}>q<6^rQsXc?EZgfvT#6so;D;A0K!PqGw6A3MoHdC|f$>V}HHayVpYNfd^ST(BJ;sPZl-7*<_ zxH7akT%C}I<^_%>mM&wbW3mK`8}XK_bg8VxsLgNYVp?Vbj17E*oK9&Hu=7)>=yqFZ z5da72OzWKjptJ&kY$>G9rCdvgq(2SrQWK|{vo!>b$KvLPe3397NCV;MyCvS_jgphX z#IVO089AWvUk3m;Rru*)g#OLE6FLX#0W~VIx6B(xrh1yCSJN;FEe_9^HYREW;cl*8 zBzf=Q+2x&74AiB_69q??$e_3T{mGt|udkCWJvC=_cdWOOP+@;C>BQ%dsfl8AsY($l z1*59+457nOHB`9a(@^+N!)Ns6;kU$tA})GtgKp!lYspx=>5Nu&{U^AGpV*3q3@Yr| z_}Lu7MQ*MSTR$9+FqfjnhLqATgP3LBg-|H7ottn2)43Wty$noxt^n4S%xZOt8*Dwy#QP=_AVE_BQXIC=fLnU+VTSYG)r|y zbN6Y)2CF=1J4PFB6Roz81#Oj&pLg~#B)73IZbEYfuuSsfsbFARyBtetiYMcjjm*ni z%t<1JB$$}g1Ss>;6T?y0B*M<%xv;qNx93~7uE1FxvkZ0z^YNw}m<}7wUPj$rDb`Nr zWYj$gao~wx)O5f}$WaIzY(VfwI+t-ajkk7yR7t$Om1F^L7>lce^V&M6nNn`kkV2v@ zz-QRX9&84rZ~y_4&^k@WDVYES#%p@k2oCbmo4sM$VgO|{M?yQ1jvx*XicWhihXYY3 zR7JNY85x+n5D^iVtOLAj&N>oLZC}mO2NU1;xCOvufa>1oei$<=;lo5skoYB@%$%8L=W1G5W6$1x+pb zw7oOonYDiqtdB8l;?npxT4#0A4!1KJf*p zV1FvK&*NoJwXe??2YX_&HM7!UQ~FX$;m-@i1sni4(=_jCIU`Okg0I(H*#%1IAQ3v<1g7i4_(J-?0S(7R|LW9b%Y{VXLMwF6)f#(w}7 zoBWXMCoLzDohDy!OE_|&jIBj)K?nn<-iJV}(P>yQiG7v(G1g>)RwE|SAlOm@J1zDpSHqywt6POw2;+R~s$(VpuW zh{n}y{D8b#dBUco;kBmCg-Oh^C9vgt0rNC^6YVcWwD1hBGb;3`rPfvS#e!>*1LTPiyn)y>qR4u)x;6yjZncQ z=D$`Z^*&O@>i#elGdpiw&}kisFo!bn`S%l7lhNeW9XqrA$UweL*-|2p7$MpF1MzW- zDTZwRJV@QovfafWYn9o@q}UaV)@qt*k(diNLN}T5Ar~jnkkwIhLVnf|uYK=@MI#=0 zMgK$+V2H}$&Ta&)pux7wCZbedA0!D}G?)oQgORvL*EE&8bFgidrRGFX-4eDsHVJF7 zKQY4fp-ZOhvc*C@Sn0V6=uQEf@xe@^e1_3q7Iq{?B=Jp-Q5!obAJ1iyDC;2D8nDqY z&OA&k%RyIQ~gCE_eR*^Qv zl;9-eR-BjXC4cD#1HQZ~V%*$EHdwnXRWp|9s7KUvd7DpxwrfGQZAJ|b*b7L7epC-P z_L`g-xTkg}^YQ2e{rJp`T%&el%c=r8T!woN^xMeqrfji8by4|xc*2xrAVn^q44m?1n~cG?_j07AdMMuzVi9;105spY$q3BQ=_) z7U-f>lTk?rR0UOgCzB7v5X1*1z^k&$^w$}A=%;!t@|7eJv9YN$o4ReoYc%KBcl@I? zs)2K~aUn=8|GI=@jRUoAJt!Y9^<>r(z($&fnS@i$1y&NoKBN1GP;Q~2!JB;c3xxzg1AExC6h{p!`yc;94xKGME* z0Th-oD~5T35aLI$54FI_vay9I?o!6%Nqql$8=)I5WLH3-HoV^-Y1unLo!7%A)Rc86 zby(#EXB$-{`gP1(Wn%J|z=~&&@@~$D*P^mc5%Z_b!?MA`bPSEhu%JIKE#H!%uFGe2 zi)g>r>Uv(&F}upHvi9%Ju?!=f*bch(R|)ioz0ni}! z4>t&SWRt4U;eUO;1}Dwat_`!@NYJnjl<*t9IO;4;rlLnzWH+l#8Q5_@0r(cJ-#+T> zF}$0wXZwWBJe?pg~p8pi4}Yc%;f&#{6tw(DB)nSi@y}U0Er<}^ zAfI@Q3%+{_6iJNdWdrDk$65~m3Ewo@6n2HJke?dc(v(SS@w7PPxAh6z2w+xXuxSK) z-9Hl*UywQUtwp63^ci59M#aSO5;PfWqPE0|M!~glXYTqs+G|Iy`oeD{Q*lROH#)km zn{X()a#*S%+`I5%;2=EXeVP3!-}jq`%(8WAb{V^@(huz&5eZ7-B(J>|%9xyiJ6i5j8+;h4qC&mZ+ZuQNW=hdG%NZMD(6C@R^;Zbb_>2*iA zL@LV&6CIuv2?i+U0ux<9CVU|Q^Y{HL^FX!4^E0$B^xuo$9)3O}!&rBB60g@XWJw`D zA|GpNtp0`{=4=^{h7oMIv1zu1jBP63voE#_s{x#I5{>Yb(4(^Z^0(s*aP27vD}6-a ze;=>rKT!vV{z-Crw*_(P`7?LE(?dwojJr1*Stu2TdwP4+A zgJYRN>X{)~5;6pWr^TO}xc$0?&lj}$?1|=sHSfa}oBL!yob68oMOV6(ZJU5z{ca=YNa3afjMCSIk$KufHa@j)kZtL#X>HyKFaoxo9v` z2pPBuq8K-YL>}nm-p7p4VcAR=Eq#4=kl~!{MFWbnal(6FoKAZB0NVb2A5pa_X_E4% zwF$w}9{|V|pv+h#VkwSZlv~fVyx#ZaWQFIcgX4x@#OSA?$lm=7;pApmKyedmsfkpISmS|z#qOSJ7Dswb@t(Mf;|PgrA^c`M>%WOVdSf4S1FS2`wA2ktYk(-by^H6|Z#$dPjJo zZV?4SbY>b(8-xgX48c@L%FtHVGm383Lzo&!$c<{4V@yR9#p}NK^k(h02Q;yeUl66o zeMyR35z_$zv}sWJ0cMuN3dVRGpTFZm*N=)jyXpyfVnZ`48&KY6ipGG*~%kNZY&hXni)KSW__Pv#G;woc2%sQn+sy9#gy2z3|${p@zf+5N-@FD!pVr`&BAW_J$E-On>mh2ob~|KAA~?D-&ZzA;SUT)0IA)dC$c| z6+)WE_U3&A9DmbT@o56G#qEh0>nw0Oz7Za-d!$t?*_gS37DfS;Yh9p|(YPu78n9$2 zhBp!lFweEKS3!&b0eg~f>k;Qxc5#4rD;z0R2)U9xY>#2G+3%Z#NQTgPwpi5m*-!12 z>)6~}N>~Jd3sY1HXxpmJgYPmom0Z_Sal-h5reY{6OcqRn7V-Z9N z4XB8|QUgZ}WC;iWqlcPcugax!Q1CZKgdy<&09^i?sRUR8h=>3VL5IR5mZdL^P{}V; zUyhdhT7(Oi&}B3ZYcT0o2iA^wWo5vf9*gK`R%v_%Hz80VrnW39Xm2#w3r2 z9c^22Seavy5!_I#G$)AptAMJMp8#5t?k&sF(op$#zMZ`pvU? z)aw3SLLMT0-~c=(g0gKsgZQ}Zq$|Rvbe{WXzm+}FEkMV8J-U``K@2It;PW_-KevtVU*#8;}A zJ6N3|E>_*&yv>5FngC+zRU~Kwqh(O+j5P&lRlE z$>YKnf4UdTF9OJaJdJKDwrBT14hF1XztiHF!#9-}{=&|CPjP7A7XkSn{+W9pV!Dy~){blE`y#5gDWqA^7dk`k41q|%3 zz1s=!dXuNn59e48c>A=v?=>fxYKy8NK%xyrDav&w`TKeUEAxWUK~FZ@bbOQVOOry2 zPz+(kiwwU&e&o$_{<^=nHolN_@B{B?Wj7&dW~MU91t^@6)aNLV2TIB}X_iBhnP z|7pRmv*Tc{V>T01dPo&uAY*QZavL*T;hFyvg;!L>&Q00>SU-4MGkPX+XM zj=K+ENJ;8@@_ru!@5a8Z_oB6dM8I?93NMhkx%!bb2()jocbRj)Xb?5!%I-|D!JOH39QgNG#?|r{`q|^k&ItnaU{^j;(=7hO2Aj zJcB%nV#4}AHUKJo`R~E;&QKGEU;9$54G1ozEUsg{r1AE%5gRZeGqY1C8KwuWsyg;S2dRRy#t$1983rQ(JKh=+WPqPoY9hDs-iEtwL*&`z? zGYiuOllBT=TwG5=**;#%k)s@gADPCe0t3=cCuu+}@*lq%6lp80>0tRhbrBBb&KtgV`C@Dv!|* z`2Q3W3rnqRr1dIT{w+>Rjm_q=J3G$pdzznxB8rUoGXhPdQ|2`|P!9?UUsJ1@-upD9 zwp$dGd%R|`qqA8_OA_M+j_Q(`+OT2OO;sP%$ekc#%X77sn)msx^d$QB{D#)-3vC;OvtU;Ty?f!jj| zeF3B%+I@{QQ%)o|h_R75Sm4<822SwgMF9eq;>;u|Vl>WL`P{Nb)haZl55tg;*lYf` zAJu_27HAPfYVU*8j0h!)@P8X-)iwmzv~uU(uVRS+(a&y+;HqZ*6Xc_rR2_U#it_CM z3|SP`a+@a4((iw@PB6GRZT6wScI*&af(mkE&pBv~XC+)vwOID0X=j^wz0D?Y3X5z) zcpa;G(KI?g*5D&k0-6WegL(3vo&VkbRghz)Ut#_lBb~g(Moi1495QIt4bu956Na(X zw{9wRZ^;gx&OXcX@y)7APfl6vd5%yT*9CKbIwiS|QPuth6&=1wa`g=$fK6vn$00>_ zlhE_5_~<6u&pa427mGf}1n`H_AT1WdFj)dAu|=mLVD@}lmf@p2Q?-iMFU7?8Ktzj$ zYU!B_l+sswk<4s{dXje=T%m(Q{HQqzD~MIXnV>-n+94K)R&NVo5{*f<z`h47!Q9tR2T}e$jr7A8ebw3$WgB@? zyhEqRWk^(U|G{t-9g2B0z9m1#<|blY(6oHIL^Q6B!h3w!R7>@F0x@*Vl(47i&vxE~ zj(f(N@hXZ`30rU?*;cAzMC4paMq$n787%WH1N^W41d#&-UvM$Vp3$x3Je+|MB2&Yw zP&WE16ij!Hlpvn%S6xub980kRJUJGkalaXmPHKQNoB2+njl7UWsT120=|>XR1N-IH zTKiWEiABf}SPBJM09x{bvZ~VudO8fBXaP%;%lP6|OMpP&8Qu4E7CU@t@hhh#w{?6> z+h9H&vC|FidH`c+G=E%DxjtiqXsU$_lI@0IIagvHRUO2mz51{QoJ_cj><+ig$BdR5 zxTqdHOM&#@8Bp1{DZxK8`n(9M^vPuJTM1w+bw5UNk6AGtzs#2=BGylSEo1Sl<46>n z)(Is0>~>|fz&YNr=?g=kCR(GO1lY@Zz?ih`C*8;Z*ws5p`2VzUkTyeQPE-O*0zh*& z!cfC(qRg2!1&{*)^1asigh!R{*o&4nq&*90*{%B*1xG!(_@?(r)GX^gNS?n=hduo! z$FmMs*WFmf;DD|og+8zB2Y-J5uERTKkg*-9hPGw+Pe(*bt6;b7SurZ%ClgqT{Sv_S z3XP46)l(~J!>HT~Wy}%V@KPKVa|mfP52uwASy?T5U2;2LU!F`-8y$`SiV_nhVsA0= z(AKcP=JrFNJuojT7B&_QU9m#Fe9$@Be5Zjh9f1V@m5(%u0V#y-pS<(1NI_hLM1N7C?aZ*SIE)4ZKOX-_FRrQdftEBC_}R=<(;vP3)mV%oXpH z?Ed_W%;&AIrMG8HI17fKf&Rl?@KdSzI#N;s*vg@bFS+id$cL_=YxIec_@^2a0kV`$ zJ~x*gcPET~RR?#+Xq7jkr1{E#(G2K4QArnmm9}%dyjzynEW(0cL!oGfJ@Tsq9Q-Mk zEp#Z5Ps57OPl4Lu!(<>%SwhcGJmf9^?~EAliUAFnY=1(TfjhR$cgN-#$e)s{vxYuT zU;E)y?<7+`&*hyU}d|omQe$bZF$Thbe+tZ~$UOu#tdb-wJ+`UeCJ}pmM^ar=Uf?Uf*!-G014<9u z+BwnY-*+(IX$hbS&G>=^v^8&caT_tYIH89J@#|OO1U^M$)&?CN)586){IfTYWMH!I{c4tTnvX5dC19{I*LOJa zeN7cz;Qby&Wg{;*8SI{tXFX0R=;qWkE8Mk-cbla^8JZ6{JSb8&uBXPN-q0eTN#hnY zT4A3Kr;i#9cSZDJa)jfTXSixKol_RtJt{y| zjaeyUE1fC20Q{v=eA`o&KtpJf4A7d}JajaZ1a6OA*a+Esi=ne$gIOsT5|PzVqX^t{HvN~uWxreQ@HWO9M*ZLoEEYR6|z?25As#UlGxYz?9l z7O;chkXG~!8wVIbJuKJf1;bH$KEb%X5G!BsWN7)M#DgpWg5K0s=B(cWnwtp3^O3DY zF97yxZjg#Q1=TL^YDClAXt6^eN_fnGZiRm&(mrbjwgW*EnWHrZRT$#P3?yr$XEs)x zu?`w1LUNd>A%KX{lI?4wMj5s=9osY!Nyg9N*BmCXQrV2$;60L&DGC&BBR~N);PnBy zJOF)iC7g|db;g7$^-XKNXqIZBaj$Rw{xixm=TO?5M=3=D)J8V|sjSnR*TfBOndr+m zCVn}VcdV4_m#vCvvfx>wQW{KyH$MIJ=Vt3q6`&WYQsQ*53p%LLz?&>gbo>P+;?VqG zw8wl(tOHpFt|!few6S?a1j^P;P!A! zGHaLWfUhmC!142D7nH*N|41?$>Ol2#Sv~MfbcJD2Ji!EX#kHs~|Mqp7+>tNltMQnF zhENPYJpSS#7sPOZ7uBD?Hnl+j)Ny(hB{PJkUBk~1a-K{^fKU{jCRVFcJDUfrWKje> zrDcl=l{km%WjEHOig7Yt|Nf1)^*C?1i;d1NBVesmZ+yVgcNFYEjrXKoS$$8e69dMZ zP)AW|I?3mT@XE$jI;6Bl9=8pTC!$lyAae>46xh@9 z$6z8opKQHSf54A#ar-A?gd(_kq4T9NP-KQd4UO3(iJ=i+%Hy^Y1IXS*hP>&?DSoEX zzRTQ#T306BpZIupXHxdKEv+2Lrcd{ryMFWhR$lbIU(uLVs%N=AL>-4LssD? zVF1&jmiW};M>bD{psXC@T==NZIsu{@9YengZC8Nix9)?nU$S?`Z`f5*=Phh=SN7DtG4dB`sUeq=QY~cE zuwi3;@SCGX2s@{AyLBEEE|sQpMz2=tBYf{@)f}O0R{Mu~<5+N6cO^bB&i?@xrTovy zQ42%y{Pyya{u5yXV(h;os<#@c2JxSgm zF(B#W+wrUblmlCJNU>Fj&OI)!6)4N%6;liE0py_l%7wc#H*hdP7L1wsFDg*aDm}3mTSZ zv~BR8T9Bu`5%`1-_xTFtyU}{}3wI%+_PfT((??mk`F3nevIRPtvf*M++c)wt1?4%; z7y}$WX)YTu>scdB_9qLV;VG)9x~GsK>G~i;VgY~bB_?9$c}Xmwrg&*`AA@PSFWY>* zVZVt~wi^{E7yA z62N!$T{-=oz3iscds`vRxE~y< z6GgxH`V|o7o@USMwL=i`pvg^{ecI5y_8I5`FvvSAp5!3aqc33#T{2~q2lTPHUpp9HQAq<;Pb-t>FykwJL8Pdw^8{fq00ONqTpcg2WXW%gJrsn2dZq zfl!tXjsnsYOAI$F0m&8$8#rG}m~z!{Qdj%= zOdrU~d@=R&JL5LYKxi-VIjZxd3D#YFbBjnrtb~+W9v0RqTB#;)x|8#6AgK!5) z?LtcV-6P_tE>v=S)GR`h>5)b*++e_zBfSw9&Z85#HtFN_T3l|WFeDg6cx!aYuyc+~ zCbCJ5f002Juvu|OWyM^6Ytzw(fE##Ju2w)!i(AvDt9|*w$cec>=HN7_Y64SLvP8`A zr!RI6I^Q0&5tdN}QBj+SA3FAzB<(MF&j+E+=IPLdJk;%Sr#kvLET@(k(7{6qd%$^ca6)Sjp-g8aMTzkyT{E(ff+x#Edm%G0b=~D9rRTm zo8Fq8qIhjoJIur;0EHfqL0Gk?UxxP3DQ>S4X?X^w~&|x8vu2>~Pctn=C%Gl_g z^4BeE6dmgvArEcM0;c7+C5CTDNc7-43zKQ1*fq)fb7fDvN!r{_DXThcIU+F$=H^(w zt^B1X^<;u~hzJvSQW+b5crossEj9|G7e9Z1GUIZt5i{ufA`6QxF{bA#HRQfE>R6!` z&b#o|gWQXB^F^nM`7$y_cfWK90CKn8UE!`*=>GNlf@ze3aBWQ9X?X6|Xb|;8GSup; z&3u^+Ip3>HEwuAYN{7y?xOpam4!CR9Y|`T>ZP%i5U}u>iqHUR=Eh$mhok4hfO1~aFQn-se6*0s zwd2Fk7d1C+9#3TeCUt>#j z!4$QiYUC!Z2!7GYmPl{M(4p#pZd~mb!NlFj0(C7%gc1M10-&a|EVgz%o|j~0U&ZJw zbw-M`m{{Z@@vYne@n@)w=<)z1paC}hH zW6|(~%?>@6Htlu`!fm*ODwEo6pD{y0@=t-VOO@-pS%e0FQ%rK?75X+4ckN9;x}LHm zoyXh~px^;LliDS_)|;!NOlMb6cSF)@k_Bm9k&&kj3YHhSJat!F#DjYWFFaeaTqFlL zAN0KY4R_F4e6NK8PoFiPD1qtpvVMd70QfS--r!DLrxjtsR#MNp8eYyw#nPM@Xc}v? zJq6dHH3t^Ut)IMek=7UfVNg47EbHp^#?$fdWRrvX91^JG)A*S8r#{7yw3TX_ByM0j zjmSE0kaNZb9#9qqk346^%N!~>huO3dxiD`D6DT=ZyM~b{H;j5oHT8cx3*+<;Rc8jl zdWIN@hKPuPV1-jimOdP2HS8_8?ciOsd}ZcFTO@$xwCJj=TpY;82NqHZstp{KRi|>nz7f z^$IPxVc`i@Pp#zkmFSQpTE+(Bd}c`9AgP@EpY1Y{=jZ#4x)Vh2iPYcmymg;JO=M7A zS^g|%hrl&bQqT87D{+I6o6F>y`fdiv496Nc&3(JuD#!Jg{Ws=jF@Nyqb z6!5n~{g&X45F@dJ9X>7A1rk-)V}9a)dOf-lXX%i?G!+7NCH6 z2>XRTW5?}Ge7F)D2Jz_cbcHQc`<#@riQtzN2cAE^l*_>$9S}d^nqxEdtb%`G0=1VR z`j)%f@%E>ep;RyYJj&_|P_;i=^@TtI2r`T>;(f>q)fEX38Vb*Bj|Bq%qocC+-9N8d zi~I#W?wjt(^?RfErQhnR;L~*j)N_G3)4--_s_!1oVb7kuWWuU-NzOa9R6X0D>R$_q z1p%o(j32ld8^FPgmW3nj|86k|0vl35KhBupmYan~Y+avaGG$_?>hH3y_9*6-MQ~~Bl9+z(tMcO930=R%f*4HPL6kyzW?agVo z`c-QpjcLFvYl>4<;^V}9QFiso6)m6NnM0W{d2s8{&E)FnS*m)e$@YOOU_0H(fnl^e zN&1B!lmat07UwxZF?zx@lklzMLqJwnQQ$|fYp4tS2AD*Q02ALD@h@Y`ncFlD$qZI| zENl8bESAB#jKoq_Uxb-NB3|k=-XH^PBpRKKJ0=&JjHxgAK!#Az0u6Q88JV9MQjRbo zSee=M+!`%w2%Ls<4OGdz#lRpJXh8&T9a3RhZhcmO-N>l&-?=G@9UXShUX0IxBNn2? zfC;Z54bf&q?UA(Vm^&>r$>rzO&u*O22kBNLSQ&>YK}Uy=lhcF3DAmFj5Gyy2xd0LI zl!q&U^#{NJDk!pCxO=Dpp$5B*m5Qm0fdFa-Frb85(pV$Maz&88pILAo0WtuoO_N{% z003LaJGeM&szF|1$b+@~*}uSm1BG(am1KLGD6z_7Z6L&THzkx&gQV;5Q#DO`@gGxX zoi9=?eDV+4Tn!iFHbb(Hau@1yCRkJ;8yt<0kH#}CN@2o?^1tQsJ0B+XDF%Os*#yM#e4`+GrU3TwmWcn_sCzgXVT%TkFI z|2C$eg^m`y$rFieHF>BwjJa@21b;Vh@TVrwS;v1&EN5%N3Rl+kv1`>ZB4l3GZzYy! znwrCAqFE@ld0FKuvx1YyCd}IM`y83|sqzO?9kdD~dPSx0ukm#lsz?5@jpE6dV@okV zPLYzG?qzt543-xnFP2w{T=Ip+tC1lOY}AN7Su*O*Hx;^PaRKf~q9~5F-l(lUaYqO> z#yd-m%*I4KP<06zWmv}l2!t_&02gT^UEBJ*^{%PP|4Gr@0m}`FOJr8pRD^IBMKqWN zf{jdAoL9OypP4B(_J+nghWM?TQ`d->(`0FeaGtDA<_Vf}+)(8lXwOZi%SOZ9vLp3* z-RZ#*-2XAWz0bYBTDG)C(j-(`eHvjndSpp6aFg7l6df)}MS&S@6`HYlJAe`~ahG=p zVNIg>uthh9Ka=CCUkN1zO$@IPH4J%@(Brgw_C63qzXy5xJ@k8iQh91QytEiKfqN5A zly8Kdl7axJ3!y5}UViw48@Sf>uwJY2@qOxY9xBDGqPqS$o0>k9s|1$5N`1#!I(7i{ z7AiY#mv7xO*AP%||3F(^8J2Cpo}1ZJ*`IeOe#lEa*%XFO;iDya*H?$$FsLfDH@Dd0cwcw&Vubr4hv zJVA=&SSEd|fFXfb3T4`IQvy)c9xM0So=ki4#87{du}v^bw0WOl6n7Q#RU_Vlo7g17 zYn_%vS?1&*G6Xya)5qzK2_i;H@c-}89K;T{p8NhSinrVCiBJ)v%kU3nGlf%{V^g*t zIj0dAgv{{l!AP48N=V|E3fmi}GLzz{a#6!wPXT3jW)TRqle>-=Z1mgE=t0h_)$Z=# zm0;-rP}WsBis*wiBYW;i+;P0Vj@(JQB)d>)H#=S~WJ+>3B(^<)^O$z(Q}bVC4?s|I zq|xgg;b+37hj59+i;YS4L6IV8yoM+~rI{{2Q<}sc9I9M5Ys|6-)~ycPBee&QCtYbf%{?V*u7ik1SfLTJc~~f z!JP;$Ty;nUz$FyGi-U=9WiAb?y;7k_bl_x>o|(0Ud6V|iKg1Mlr=xcRX_>)i>$Ubz zPlOkF0@nA&3T@RtP5sP^xV;FpVC>9U3mMkgD*q8;wzU~3zi~5cZOhoZ-0!s21w}m=a@fPOe ze$GnoTz9@#@Z6(~zRvJA*)0LUxyqb)=*a~C9_z~HlLE&;68KjJ@0Gpr*t}D#h&?{;kf{?nd0EOC$HsCOnT#41 z-GplCYgWBSNlDmPg^pdVDsRtg0S*>olDE8#i-08v;N~)$23bGzp-{FDx3|1N!05Th zB4!O5e0O?w$PlwBu5NJP{e=I%OwQtzC>_6+={9n)|OG=By7ihZCW&2X%brgz5 z#s_(LF%C)hSuFltd)+3kE^z*E!=)WZ|NG|4c zKiF>;EonlyTii=eTvk}RyY4U~f1c48sZ7=XGn78y)K|c94pk3#QI%@$6)-nG79q33 z!~X^??>%EW^`k0v%(4`*X2s@)K&Bn)zhMu@$REF<9kMTbhSt9`?{$Ctjt1}+pn4Ml zLru;OhxBpoV{Cn`p`A@!*)&vk&emI_Sq37R#Xb|@cGjbW3~1K?<73uQ?S3*yLT)DR z{|h>kF-o@EM9$En9`th0y$i+OE=ywnj^TsQa@B zJGbE;2ET$jIY5005i{Cyu4VlvkF0fRJDW~e$!cjJl&*_jfv@0z;cr6@$7%rBXv-O+ zr8?o}%()j39v=kc!MwO80DZE0jJes9bQh$qZ#C*~sBOgVn8o#762?-y!+YgXfh`U3Xh?1`PUI_(WWER5yDD51@;UE?q<@_*5y9nikeD5mOML zH0ZnWT@3#3_+MPtpJ7T!g$qEsZeuw6Qan%aQS|Kc-|*2td`>kaoe<=YFJ>|CDaIL5 zfi(v}rRIm}v4vlVQnJT8p{E~d(bvZ{fk`NSUNLaSGxs(k7E)942Pju$s`R!?wn{&n zs9ShfnZV3b$DQVz;a$3jJp;_d6CO(MMgD`N9%CB=o8{Qa#>`G$Zlm#y$%Ax5EZYeT z5cq0m0VfA#YFUDMGzuactUL^-u~g*dpJbqLRM3YA)3YzQ0yLhbLIgRf&gW&Pr*HJd|tDmt%_f<-ZWQrpx*rZ@I6gC^;mKo&)VuRIA8b z?JPNSQfRQ8r`#W_l`w${-L##%|H9+B!|v(EA3!r9>Zy)yT7Ngj!lY9rtu8>Kw$O%_ z{6IPAgHVzhhRf;D1M{G`QoC6zQryQ*g?(8R!R+@}(1E4`UidE19xsQSU`A$8fL>75 z>PqaY^ml`x0V)r;UlGhMKOF%0$60WgJg za4y5+94=c;?`zieD6Nwmjf@~h4xRS(m1zt{{aEpGc4Ni;jfo5bB%rbXdN}Yw#PfO# z6L&ivMmLzjHI;v2$rP{=dv!#!zypAt#M{y6Lg;cZLWZ*foFix`C8|~~U}%kO69A4( zQ&0LLZ`Dgzy}#9k#t$^zAbSMu3fh zU+{8Gqcj8%-4eKUBB)4-p4P}`9lU?b7T7>ynfk zS2{TlxVKsqX>d`+Vt^K%$C!-cT;@iV-e+ilSZ^U#S2rPLCmdD=|0JwgFkD87D?5}K z$!bj8E_|d1$ypQ8e}1~WC(}zPjRE|=w3FI(yHsE_WO@NKJ)C*_3vh$I^4rNLpvUV`sbcT=lGo-i* z=``3R1l>GYf`bNr3O?kE#0b#Z?A8GhoIx_@7;ntI8|q(MJ77J&UBI9dVQ-9nGYi2^ z>_~=488^yEMx%iaD5nYaFS8G`Vjxm! zl3jXM?Qz}P*7ClF9RT@M-3BYp+eOD?4C}<1HikhLD$DE;irN~?PGE||@Js2yUNUo& z!8H0FU){&HvgQ(gTo67(fUBb{&H^!}#3tL=RssSy0yo3lSM!1sgf|QG1Y@p2{ZN z&K7d0hKF;1401JzoOB5nje9|wR!Iy3L>Gr<4cPq!u&*Vi0Zu%sif63UK`MQN-+-eUs4 z+6iRx3X{qmx-^djPg0bt-2<o#O@WL)YHrVFg%^N)LPN*HNg`NVSAIm$GUTG z@gnwB2!#PSz2S_IN)0E(Ij07Z+!`)3;W&cl<4Dzx2Afxd+c}l|<`HYAI9fDIE5~|z zr7~Z%*i|x$-guZp%LE(IB1aTz04V(vm-u3WGf;-5{QP6$az5L2XIAFvr5qyzM+OWS zOx8X4>C{!9@iGrn9m4RR9z9`VEaENdbMQi-kpDw!4y!ptMS}t1uR0JHqPMZ^Smw|w z9Brog56~GDMlP#NeDURNWrEL#iswG%`7Nzj3~#+z33KS z`b1j!sx_`*9$aguC;J64Ety1CFSsdS`1LN5O2cL*&45sHaqOcK%oQ@py7iB`I# zmK%0RAiV)L`h(9io_>YLcVS>X$rGWHrK zbp=r=5)>}o1BK@fsc^Thmj!R;#%f^3A0YFx)+>+pSJ^dyH|1F<2!>D8Tp+}eUCkU1 zu|il=aykG02!LL&;#0;#3Q_l@TZ*}c73s1aWl4N-wNaMVPT4ojltKlXvTqELKiS|H zy>k)=al#N+vFlrXZ-MrH9WIXGraQ{o&pH_M52sSvjk1*OE?5!~h_d3_#HQ)M<-Q{x z%8NU|IG7ZhS|x1lkzl*NKhW7F*B{(~e&sSTQTuEp8 zzKNlt;lA#q$X=Fp6Vz>vmC6fE7rP^PD8@ZlfGmoBeO4c5*}x^Q3wTR3r_EZ9LAOxH zEkHfL-mZ7z`|~wNw>OS)!?d??lhI&niO*lT(*>1jrIt_=_qcCN#98Lmz#-m6e+rAo zp=822vy6g)8RTgAS!etG)6O z)Z*$t3ew!!Noy&qbO*$LPC#v=PlY|p5<~4_*5>OpzxFO}PQR3I_F1P-bQX<5DLmCC zQ-J#fdKfn&hu)P~-lqyDTlV2M+{LZ5i{ZT(;$q_H&x2t3_wbCMw|r7v5H~3x@6r&7 z5*~?ZH~$kssbXeTaffA3D+WCH=;vME-k2DLU?nZ-JW}R7Iwj5Xz;06?1UzU@q>hNL z8zVt^OQT#N{1c%W(z|?REW{I1fciFRo9-NmE2)lAa5vOFeMGBNuAikU-m*af67F!l~TnV1+clU!A;{Rp;{xBCovUEP-zjo!zDeZ89vw*96> z>*F4DWRsVLhUiSI@mGfp^~V-LM_+#1sdulfH?!1EEd-h1@NYWF6<4||)gFXOW2?$- zZXkkX;o#MKIFC|rR3iT5zJf^I-KIWg1BU5A-7pvmE`(SwStH5_(8S!?I#v^$+kX3j zeF!KdBg4>bRT}xEC(Y+v9P%zrwOdPk-(7%u(^Nq z((tKAg|8>p2c7p`xL{R9bsw3k(ZL&SpGIPC(D)kg9Mj;?2wKY&RxSDx`4t@v)URX8aR^9)C#2j>r?V z;q6f>EO;7Pke)wit*o$di!}WMN*q0MXKy$f~5Is&(F7E#DQJef|fCy8R~%d5x&m31knrGs}Xft~5FH@7v!z3H6Cm)#4V(KE6IG7g%9(nVk#p98`;c6OZ>3^M7s5XXH!Q1bVB7tr44@k>!EdKv# zOYTwo`UdUXKgM?!sXGV%tSqhYi2mvuP zPSh30YMOe{YN{3pi-BZ8GntK1#I~mif6K~9G)xW#v9eW{yZJPM;PW2MOBh85TxJB> z1dc@un~Qm1vIMNSE1A+eED^xHXEVe2{i)~xsg3*G^*{h7pAH(J64qLJG^aFzLnP<2 zbVc+N8O5z_gxJ!$#^N(>7tZ!sj;k7$3x<)H;T~rtzN4-~F8x~Q#v}ujczyk?pP6H& zvs>$Jy(XDOPiM6q-*01j_FxH@iljbPaZA4q{Cz0fxp2#K3@is*%&<%fRF(U^3IRi% zwDu}On;9)T4?L>zrR>>$Uh#O%msyC;lW!>s^XLcZI)0f#jl#NhwWx|aEoTj^Y^ z>@DJcX5j>ifbVjvzc*aD17;`%qtk47>eim9V$QgM^!_+#+ z@U)_$a^p;DMV9MX-$kI{BkTao$hUVFmp0h`o#9EV4`SEd%hx7~kZKC7)~a2bB_yK6 z!fm&{(OKp69rQ_)`5FnnW61xWgn!#-=$^SkWmFo=6gMSNR!VxL^)k&8fN;}mx?@Kv zHipML2BsJQB&*mPKZV*YV`4auZ51@*NmiU5k?PY8sK-|1PO8D1gQjN+Ke1o{E(<6B z-uCGUlS`7Z{y6|b3>~j#ID*WNVGPi#|Hvs@kg8*4E`6sUJQ)9Kc-njl-1=PxdFe0> z1Nm6JHkP{WBy*9>)4o(F0f!LVA_bfd`xtOss*v_qN0T_OtV5=zRkYkoIua_NP02pg@Y|U2LOX>_3#9}=XigIZ^trZ003nwPQiJiyBQW~pKeFRw?n`v-1zO;u5%NPe*ppvV_Pj=p z?V_+H$yV&KWPPDAAd}xst$hc=1iwRYrGi?1W}`aGZXv%ooGN)04tR>ncj?gLLog0E zm5amRYOQ(@sb)zr8+o6&81%HTLX;cFtu`d?b5iheGE)N-|J5!IjtT$+9d02ytb%+; zK(aoPQ&%Yn=w94drfxAONM~@A$L0M=tLUwv$3p)GXG>)7j+2nw$3#S((a?@YpGwVa zrA`xFN;Mb*wo4h(&H?94Teh+>9dQqa_mQhzL!?ZX3MspGGuWc-Ixxz#JY>r_E`wDo zugUyD$sa1}UMO91aB3=Vgd-{9{vuJKUz4S55YETQlppH zAiEe24dMZ;Kfn?CI(NW4IlVqW0nS%?8^9-i#=J9A89T5!q0~nQ1h=0CXd^?SSRjTAkhrvf&SD<)?z==Qb%ugw z{GSBsk-kp!DNVbt>**b(%+{<;7^H1+paQYM9R_laGG=FQJc&wzEyw)m`py3vWlHe* z0Y{9mpAC?^&4dB6KMhBAVKHybUzW0|z-`{!Ud3ucHf}ml)0hom<)8Eh?%><5aLzf# zb%^C{Gq`Fr19{|%9;qJ>``Qy~oJ3g-HK}k(1l^!(2c*7#A0W_INDyDeBvB6Z00GJ6 z9zU@P?pz2Gyk!bIsS0KU9smT#eV_qmYedN#d-oo!uY}#!I0AVjuYdtuGOsQ^z=6R| zQ7xJ$PPr z`&)Wc(y9BIVj8ee?&xCo>@&`I5jI2(^ldu0Pe6{ds7(-MKqrRZKo775vSWJFBzMJk zMo655gOE3--A+CQVgJTG#3Y$c;SIaZ!fpP5dgH9J8DW#?UMxmQRlzNUG8oQVXmIj= zSOfC0I5wE02mlFMX5ebf*-xsToSR$gXX;9GNt|_qRJId=#cv&);D)nXehUOz0Mp3} zBVSZ<%xDp+IQ$g6fMd-vB}lb#gxBZiAWk}Qarw4q=BoUakBsM&L zc>^yB8$)Q9RRP5>2J9d^aA_Bckzy4|dXvr=gZ)`|fhnT|uHo7R9x*&GGNOGE%n3C8 zPDs(fI0E^B1Y~a@sX*m{BFl*}CV-gGB9m=xD2xCI(9Z&{UlPkGrx#9#?o?UzfULWi z7a|51!+D}#?nN?$;T#jrCL&~$rsp2KYA|}hn5nvymF<3x#&oBl`KwsEYlh6RLoRuI zINupZ4;2&F;IqyMtclZ&&p$*Fj$mCtAm0)uoG*T!?)Q;AS@c@r>oUB~D0Tmgq z<&(?+NSiju)^E5}QY+C6)+sF-?$70Gj#r`z+vDaA>gumz@x_<6_<9cZHuQfhd?UW&AwC7-VMWON* zO+aarR>TBe9DuKm2R}~57)KM&0FXdJmvvsa9+I>B{`70)*MaBytiAvQ{Ne}5asVo0 zpOk`sRbF+;a9BG_Gub0g=AR#Z!4PO^aq%h#Jq30TzEv0v?nm^l(+aH2tG7k@0M#0N$%Dp8n zT|^;sR^`{gF<-s$GgW%lFWwjvJ8Va69}fH_J$8=ZHFCRBIMP}0ls64Qzs9x zqoOX|Um8?zGMY@V?}AYSbV>I}6)(zj2G-6aNwe%+R)*?S*IO9s))DUYPzyi6K$in= zN6+s_tIXp*1(v|?WVSQ>JDASrTb+$1mh8 zPLUJeHh68E10*_*fj~w5aNpElVt0s%TXMUs>YlFq5X0QltRRxcL2$ZPw9Sf3J#pDWNs8wp;#-TiG+ zOvPs-0@jPM>Z!lO%}Mfju~lZA$GBtA;6$UUlm$`+ukHccQj{K~L-{xrVY(eM<~;v4 zfVbAez6ZXX28}Z)=QrlZWoxXAjQwAToxzk`wz!4fGOjcv?Vh8$eVQVJ(AZcYI{%S+ zu4{N84GH^`-6=o4Ru$9FD2O3BZ*1|P8b#i6-I3=eb~hlmqaRT4i3E&pU}iPGM+Dev zYhNueLIP|S0Fb;jL&UR?E=FD&=Iu#=3|`HptD`MQG>^Rr)=U36mGZt%S@pg3AMU#k z57?$F^9BUiMo;rx_@vy17)5vl6S|K+%`|2s{9&~n4~5_hT*B5~LUe%NrynkVzGEw# znQp6bWslW{oal!)d^H@*b^n=Al*ZbnF#$1fa1t(cs|{ZWH_c28^uK zY_+#8ZdGYsoKn6xq{xRmr^#()XUF%EqdpkQBeu*s5~^;uc z71?Z$-yiHqU+7;te)fM6R(3jC>!eD&>OZM=#>;T?Zdgg4>AZpU-h5sv_A7M6(KBrIZ2sS*ltZN3C(j8-$o)3JZZOej_< zZ-J)5k>?PdZyQN^UVW<&pMTUiN;$4m&hg^OG$e2A8ovj94tKdx*cWg_NR2HPQuCLkEVj|jW=X#C zFK1j{{{_!`ga=mL9eMl(L&_?AT=${-%8Tg}l*J9Hq7yGtz0X|Q4scl${qp~2*G;yB&vV4k`VzxZ6z2O1V&Xn6XWBSh8$Y@7jw z!~nm~cW6NJX}XcyKCbO8aClI-xL|uSoJe@Fz%^~6*>SY5?Jyz-0D*ad8Dj)}GYU8) zaDMF;&CVqEnq4y%bRJd*xB)IL>4$*8ul2PQl5N!Hcw%3XY0T$oZ=E@dnDivg_lsra z+FJb)Ugy9-&V>~`?sp-TJBjZ z|C5s$I?Q^;RwezKziM~Nn?FeQHqQhn@f!7^Ccrp%gHm@K4HuL67np)*pRUjns39eZ za`R`yxgE)~2KS>&!nHUA$L|bc6W<=1O5`k2E%SN9G(-p~{VAaY7POPpw#}6M;5)*1 zrtUCU0~ad*)o&^2+~!*rjvZp$i(Gj4(KiX7bo6bIQ;)E<94UMa8MtV`8_p90W&MBM zU+LZwXuJlFP%=!RR}OF_&+%kb71y~I*`b?_WL%@4hCY)bJpA1}lWGSPT+Np!;urq= zweb=ihCnyox%Jci=ARA|&8<$v+0|n|E>GvZPuM55_NN?gidKi9vw};4049CtC#t8! zA4|iOx;C}}vS)t#6--=BOS#RVIl!qLB_dy%v5WjiUum91tu7|fV_2vxscgu#65Eda zci;YcZ?nHk$^|ib%#FvA^QI%5b7m-Ej=CY&swnHNcg_IT)jM5Pwis+y+>CXJl6I@KsQJi0>~xsczFnAll;QprDhj{frC^ZoEmR5{f;^QUSzJwozrczi$m?e>Ock7d z?7hTSNIHJQ81v>XsQc+Zr$B_p~GEVHo)#lgFM##jtjKO$7L2Bs8I^J8%a3M%UxN0)#j(;t};b+O5@m-u02fGe#}FC6#)L-7(jbF)$EIOh+8AU5#kxtnGe70IL_U78^b!g(n%1kr>l|X=fVW> z9VS1Bl1N+OwwtVH)DsG|Y%qvEfJnsz47Gfq_VgfBsj$?bNF=5h3E+EAtr`}Jy3oNI zJ|5nu@KsPA9oc6ok1QOoRpeT%>9rbNE?@J^!6?P3)C2-3gs8nLcA|%D?ZxJM>fU*V zkXOzSC51MPbSQsQvDXddf4E_4$@T+r5OTZOnLYG{mI7@{y68PIsA{{hCLm6Xt7|6} z24O7RB=7r*Y?#w9l37J)42AQ8jbB+%$^Oy7pw))0cXV;o%25g_ed2dbv?<~iH)40& z)++8=?9`qRwbW!(M8kD5fNBejBVU+lv}jXLH4F!YPU}=W$;8R8RN-g#at~iWs-XXz zZRb&g8GyfnE!nMmDpwzrl1x*cWCN`z<5M$4K4!v{&l6uj3ij5lA;Uq$Lv1iqYUbj& zgGTZI#=3%8TLOoWp5YV`MOPB%T$%CC%Wy;xQ(yclzFY^?j{iUCi3<4$G=hLaRu1NS1gVczfk)PNTdV*^7JTtoI56m4Ur#pCs$;guP>8xEu7Yls%LX{^D|K@hs z-AkSRS`qv|18dTY?wCNt)KB}u^SM1R0*B+W_1Gcdg^gE#bWURh->JNUo zb0V{#4O9xdutL}HzPLx7@|BwLq8C233LpVgglF`;Wase$ZG}1J5R5aF~Jl1z2!W za+E!0E;faL6z! zS_3keKsqL}MsNTmECYBK+BWE41glBR4J2WpOT`z9{Gr0PIrn2d5LX|r?t(jHEt;hZQ zNeT@WDvkpli%+8uMmaA>U}~PoHzV2rE@$2V z;4+b}B{t&>iuWTx;>0Ysn8MUzQ?Gc;5lrd802;1vL1J|QTh{c$!-A0mBL2y%~)wO4gh&8=Cv^U^xNQ+7HR5;?V(*&948i4|Dm^N4-k#0(?%PH}x z52#p5+$M=S8eSJgCsu1{xphHX$(T)^iT9WWe5WAI|Do^0T$Lgz2-+Qm^U3^sxecvV z#FOE5A2Z?%^XoJwBN85%yS~JU9j#&e6BQv z>gVZN$CM8;46z+Y;)oM^mlMzKK@*yfXEy1%mHXKEQYA!-Qn6my^$@=Hc}Lv;3!%Z5 zBiErGVo$7MUC`rOpeN zk!s9W$hYOpU6ep0qR?dUk}H; z^R%s(lgy)S`*&#$SUsF4KF3e%Go|#$>GzlZBWwG0`yZK!W~ArIkKA ze38}QKr6%fwRnPK3F#bi5x5Lq+-n$y*T%rJ~ZBo(P77woZ^-B-WyPDG*wm%+! zrQKO%TItw(xMS96JZ{_r2@ojW4-qv0hREn{-%ccSO7iXE{<>KzAhoL zy=ErWH$|5lftL$VhoJwZ6x%CM)k6YTywGCb$r0shey?%DP4RI2pGMlrS*MRnmWuRo zsBQ#{zH~8r&c)?{!%F@e-agNO4~;*Mo(k#Tr< zE-5?%0Gw3Zi~tLXYLYzEw?L};_%N0Cgl8)V);Zn83B!7MR=Zs9-EgjL-AhRHkTsW> zz2qpQOJ-UB>1h^|1X3`tL;3E2yO8v3vPI}MZ4%CSZkEJPlwIlx#p7pZ2ry`8h^ z)?7`>qO*C%r@Xf7UjF6neCw7kPk_ft6K};bBts{4)KakB1z6~}O}w*R*dkg&_94qd zATLu6Iwr^4ZAWF^esKjeFxV7=gRDr|P0nxYQRwvC)0yZH7mJ8$l0npMnDvdWoWr?s zRvjS{z8d(+1&kgdEB}K86zj!Ss)iiqNNu@gQlZGK4)n}5?4>^`N8XX{lfc4#X66Qq zJiJ|-Y!yZR!8rOc2YC}owJ-BYAxnK_*G&2RpH;o2>6ushvC;R#xV)(e!Hc}8ZhKb> zclrW7rzJcNVdYS_$3-Tdju(ap+G}X`gsh_utao-E675wNk(AOJl*(c7OlvfVFCigewvmm#xjbKaa%RT|ku5e!I*0l0kiAhJ}_A8s8` zifww^gUht~9C(uig8-M7+z1>7@cM%FyEvB*g0Pjf6^8)npWH8w3<2VPi_!c<+$a|E zrBTalipW0CiyC-4y;N$kD0`JIv>a{Nq4>jLpDj9rhr7C6o(%4o^QK|6%J8j$b7vS+ z*u;DDMdA&0rp@R9o)uZh5gHU7jh78aPwE9(NZ@^_yM_VzO z_S8_HpjrqT-U|EM-dFKn0QrwRh4a`BaZ?$8!95c#aRfF!s*fMdBKo=NvwFr|wpNIw zpkA-4OyTyjJan!ox!RYUP}IyY;Q*~?+n#>Oj^EnuUvfYftkuFpVutn`j%cmUH(r_C zA~v(KhYJMnf^l3PC5!_VoY`Ck3jQ0rLLXn?t0>5|%V*HIKa6eH8ot(V_k0_01%vd-C0k?lKYZ<&6Y$rI z>%YWBHmrO?oc=L+s^r<&;NxZ_*W|#n&%Yh`BKGO{SvJ>JvWb%bW%XDlpKMX*2_zkpAk~AvRHl>aQ26 z%nX`)?hUp+%HLP_p&o_?lkM3v!< z_Wl);{lii}S<5S)&PO(q%1P=N!vZzm!?fJa|GTF4T^>TNzW9VZTvg=e|7DXkHj6M= z73|{^^3;~^m32_7|E7=<@eQeg&+Yy7O%>XrsoqZ*PjjHP{2!x%!%?xr(Yi~!|8nVf z0`i(J_q^gUX=Re$_#SU;kqGr)45?LngZoRF3$H>6N(112?4a+8Z(VLiCEEhgs^nC5 zs0<@+#Zq@ zoYisKBklVb@R`+x)~xtuDVr38ru^w(Rc~34&s@DDJek%bXmND63z9^-K{TIlA7jE9 zL=H9F2EES!xhAFR>3tYz;8Tb}UEm&gqt2qKP|S{~yA4bZfN|V99>E8x;&74D{(J*_ zlC0Zvd3BS?Nysve&5!Ym{;wVjMiz9HVy0#ceX&qJ<^wCE7kOo!*JKa~ei|Ky=WupE zJX1Xtq7z4jW?awv;c63t92aY~Y{9vjEwa;ss%1}vZ%k> z_j#s7WPY^G0GG%#HHmXj3SFc2s2MiS*#%1crS!N4S93b|Z4p=r(@D@4xG(L)p7gx^wM z-7<>X^YBMX-+Xy$69yf7xu^w*+<)HV)N47aP=TTDi*=sc`FlbSXMJ2f%_eQBm*nAV zjhz!dBAf-;D*yMpWjY!KV>qJXtbEb%JpK6E#xfEpk$HbwP|}?RsK2}tSFt476mL`5 zUKr=OQQ)~YKBr%f*B=T1-cRFM4MXm%A)np_1|hGO?_O23x~`=)z3?^fR}I-@Tt#y< zcjT%P_SD@+Cx0Y$8m#Dgr>Y#;Z(bE>)s=Rf(X$Ua;Bam^?IU+((uRV-2yMUReVJrp zmfoZcykIvNz=S^u^Bnis%qp>F<^4Jdz7JpHRXLR3)zt+4jQd`|4ZBMh^b(rpZ5AfH*lKfHT-ka+`Th9s@x4 zLP>J3SilbdS!PX#;ocy*++rgExJ%@+-$xUpKa1@qoK3F&6zb$7+mr~oP7^^fiXAa+sSb6+8O z?ijKXV1R%R>#hO~BLL6zBByr37;HE1LZ&K8Mbwu?&x06o2`ubDsNgFACf`4dgfQCI zEx&><43FwS7p(dKr02mifw|W}_-2$DN#Fo2jNZfyTtf|nS18KTCz@0sYoSMoEY3NZ z00=}J+`;^-X%e6gEfxSGY-mmEVph-r<7-sntI)C3>j*8t`T?t8LcfHzH)r@Vo)3_t6 z^+^Op>)c4W>v#7i(n3%8h-D{AM8rQ8g2&9-fqx3p*P&|4OiUFgq5*(2Za@d-e?S0t z6rA~(-s*QQAvAqYwMWy@})buz$ zk$gBQ_&-w*uD1~LxhIh;V~|iR4paAeN(i&YfVYZ{0GkD3XQrM*!mlb>$WlEFu67$l zk48+3sq0D04Hr_1gI~A}dQ&x|E}$MERAlP%hv-gEw@~McVjSkj4A`;DWmLc==1ha>rbcnf6uv1}pe5eyZ0!S#*R)m5~8H{gGN|OrjT~B4laF?OX ztdkBLLJlZ2TNC3x6bJ)~i4=jpYUHeE$*dDvNz)l_3V;&$*Mp>B1tQQMF99gWr-Ea` zi$3_=%5RNIe?V-NqtfHzzF7%mH=z-p05qefShp7ZVR_J! zQZDO11ckIVnc6A$lGT&`<&Z!dc`n|n+e)C`uLO_f$u4?dbK?53cK|9aV}IS(1cAxU zMMZ3pxuya+3ghg&T~_6I2X|>TnPC4HVK_WXowJ}m)S7Iz;bjvEYSuw7wHyY-dpRqZw&-zMMI(6zg z7e$vwj-EKNcRM7?zYMNrZGuM^18GTCn`s5vK%HSH4(n1dVG6+9PP118qwyMr9cYfZ zqD?Qmsf*m2JMVxh>}ZH0h)*zXG^ z{N$^%<3p9*rv$>36|*6^s^+02u>_q0)V6K(LWSfP1#82xpW-`ur{w$^h=bAHq>~{z zeO=Q&v^?SGa92ZOnPK1^TKYq5&7u5BeLRsB85ng64gL_18Nd)79SuRSnv zCRGCQU|POZx(ndmRR@f#!DIzQ6?!HKvY^)lufR$y9gH+RQXe=pgSO9PD@yE^ROq2~ zYQ(gRiDe>?QhUU#!LaLsmguxUlI=%HNQote9xB{8om5f;d^~!Qb=2H9X61#R^B!~% z5KH>q3WJ2(G4!s(BZVX{V0*DkEwKr+j+%2E7 zz0E$l?cHKPYm(2E)~CU4&?hayFNz%$pV}-j@#T}lgez4!0BRf(i&-Y1VFg6xIraI` zF&odPD1iV_DhTJQ810WywJikAxqdT1%&&e$5hxfOT8OzKsis9A#{yHNgcQpUdy2{P z^wS~V<&mq&ypnA0-Jv(=m+Pi?PXKF)Em0o1%dJ<|GPFkk*>D+2Dn)&C?y6XDRjhEm z8mU5TZsWexi=uO`C;zVPF4P&2fL6b!GyVoR%Np1l0_CZMz=G~X^;Jxa)tD&}>Kp*5 z!ZlteiYl;|>CH6<&}@>w?&mb$^S1X+??o1sGpfbwf+|xl8H1ckC=0${-O2*!=M7E= z!8f?lQBh5}VvgpN1+ysq5O8IFxZ?3l)jPYT^Hwgd=JSS5!syRAP&WP z^L7u@h`>vv5iDR5dL;nab3h*(_2}bcj`srVCY{U0 zKWmUTPDZx*VUjp|owiHUz+6l02>J0X*Mx2wvw3is%4YPYQ%U*MS|u;^#?Ame$dpC4 z@uBZmysf;I6>4Wvp-ukLK@3z*s!{rKLNh3b^Lf7f^%>A`xA4 zy^aSy+Fc7wjm1}vZ*3?~kb%HKl1X@*MzV^TxB(#Ub{iHR6Yv78UBBP`HbQ>)u8g-g zoN^ZU47Dzg-fkcn4aV2ZnP|rC_s>YviA?NwdpRhSs}5G9?o~!1VG z;UPf^oXeZVp{0Qr=|j9=+t`X}ox$g;>)NM}ALAY1xm8;2&Gp}dIK>B<*cQsxsa=W} zcfJVCIUAIOL-e`JO@}9?0UlYT0*f7qRp2}Vu24Sb*vfmA?kb(%6?77Mk>yl1M|4cq z*?%0USqNV}zUfRI9Yk{wt~!3n0~3on=t>!NP|%tr1$^S+O~?U?ncav^T+T z@)Y*cGCwDy=Ce$?8r5Z(}8ul!O%xa_3y+2#uRKjuV} zyp2kzz{VIglJQ!B@M$niczcwELED=ZK#3r_Bk5e6hZH2rr(AR-j~s$+=RTUQR!`Cx z!sHW(nhQmT4q(+%$sQMM(+DrZ%Tp>m7;sl)7$SsMrbN94@0pG1pNeiC10x5x6yk8S zmM?KS#{rTPL6eg37oHA#mhlm=b=&{X1~T%Q@$V8c@#i?3J9l!INyO!oCJb(dF! zHaRC?Hi!<@0`R#mWKyA~oQ=pXhAURRC>u*=F-@6_w9BCy=;pNMFsJjF^~ZipJ)_0T zS~|u#xY**xoW|({mQ(o2J_MTun#$9d94R>loY>lHqT7CI6F3Ys_R0El&uY3UXi)3x&AwwmlDx9JL;~CUK86#@_7{ zuP1FtbzVIfMZcBY@ptcc=z+w$)yyaspRxMW$f{P*IwSy~$sy2Eo3MIAv)yNrR=8(X z80vYBndm$};zC~#{A2FuF;GPGSWVL&SEc7xUU=QpKw<>HUYlaQYcL+xLs-ecN1|)F zLnqfjCsGnxbBz6odvCus}l!v@TN}XxEOt;GLmt|aUC3K1=FxDl2IJKL@%DcR_ zpoLlL??Va{89go~zguDnaztA5F9i!}jU~GAOzgg_X0CaIlSAaNdO?6+fh0K7CM$Ax z!dg$6Sq#J{6lY1avoLf#Ht*iqXJWPu4k3C^*+qc04vmtSGgWL*TLLN!0&~C_F^OMx zeot48Ne(F?ZO`zPLE<US^69>KUf4UjzKPz1U0(4JD&6xXHL*UhZNm8CO!!~Nl8AvR7&cd9!v9&_Ypf;NwQBYK_zwZD}dy$>xu>CWHDI{;R zXnmcrXIy`Ct;K_nvkrCMQ?2*o>l2w+$V%gCs$|ND6(7Vey5FV-Z?kR2P_2_1_Tju! z!;PS16HmM+Mdr0QZQ4jKK{8Qc#*{JEgoR_!pYK95B`Mrx#^(*jd?oi@7+1!*1}}Hp zt^Cc|-fJO~yt0DeA*@VzlrWbEIKFoAE0=eD*5JB8RUU#m{6e&apCKz;JMm-y@94aE z?Ao6ea!Els1ITeP8sKOk z`nU2l2*fqrVDrsI8nKOZPRBAQOTH(QXKN8+~$0CJ;BwWJx+Ce?tFrLoBeKog)~ zvDv0(y`u#C)Z*)3P=YNBB;N%DWononl0<*8yXmskCxDzOitOdQ0hM288!F7@4Ad?C zRv)N<7KAcC|@0wUN^wduY}u>00vqD270n2G;=wg0x`G}GWplvlnTie z{5(U`QC=7x09mETI|8dfPN^@wo1N3`3$&p$lGABh9P@kiyZ;LlXk$e7jEKDmB_=Kw z5GvkY-yt!mZT9c|j3%&vzhA*WHp8UMvtZwiVgPrk=V{wVQIn_vpR{INcP9u7X{=Pk zWB*~is=&ug8b5|6<>iyY5c6}QZPQJFnX_C6kD zUleNDlW6DE+Ykq#G0`tdhEZbWvM&#J;N1MkG_2MJU_6xW393Q;o5GL-RH zL)swG@I4`dKGppMS0~MJiXQi({S;8nII2sXKM`eEf4_yy6wmPX*yBwOC9OXKG?a%TAIbvt&EQWnsqvAdqfACx?Qa9oc~DeaAbT!ZQ>PNti*<) zs&)q994rVNy1bPg#rsOHY%h#UlxM8`+Z_vZ!B`HhX_ZDb^m#mpKV|ZETo~EdLEX0~ z{5TlLL0;J3?|HF+hA}kVRF}~wEJW5>I{zrz20)#*vi5R9+WO22yGNrI1=I{viV}1e ze7k_txH%ABvT7BSbdwPkXAAIt@;3qx;B&#seZ^-bO}|OC#MNh;C3TEY`RTJuHgjG1 zSqJabJPvF7`$Q@<3PD%m;PEUhJQnch{MP(NonrJ%&y5j*0i< zaZ&tU-rq$6gVxZAb+xlx*_kw{PYeS1vFeR{$)-mnQ zMF)tdO6|3uHE0Fw{M4AyHO_XR?K9{38~`ant`p}D{6Sc%C15|C!h>Le9)+g=$*#kN z3ZNmKqInymbUfV{cy|(>0E^MgjE$ktaaZ}trK&2%stbRH<8+c3I#cEV!-|!8SKZQK z>a)OMW#wo%{zhi2N-c4?fg zDiJqC6y`|2iYn{RMJ%VCg*q733o;^kWP0BU5Vcn-1`x-AZhueu1{dcbrJ8$}{Lsi8Q_^ZySD25R8hC{Lu?Y=V z`!^^5b3kZM4ck3z9`3v_Bb?zjLHvr7ZP4bGIDulqI7+J@GhF=|Od-00>@zfHSO{z^ z^(v-UBZUFr(bmxQ1QWvT|iMn)vLxN zN;+7$^4h3VwHuI*C=KfJ^ufDFJ^e9}3alpd6s}WeODRmI%u}pJYu{HVXHI*Etc@<7 zAyOu`LMlmPrBaIwdZ%pel73V?j+tG6D?3(4`^W0qFH2BgLu$_yNfhC&_&toMuzKOt z{a+puCmrL;KOA|UG3JkluGU$f!&1CpxM|Vx$hvhlERM~Dr1EHU-JFV(q_iZHV7Zop zo5al=@eP&;5RQ)04D#(_`h})|L<%R^TPQ(eWtT~%v7S``RYKdG;K8riJqOHn|I2-$ z;5sL#mOsW$(AXFWM`SSF&3*;g6C>iOZ#kVpypcG~Zdw$C{iU8ThW+yOI>)N?1NZym z>105@*_NwH2djvAhl3w>&(KmbOWo+6?OZVINtg)$_!>$cLsX9||4!$#G?i0f=*TF6kGU}h*)Q3VXl$WQF zZUfDaov>YJcUjKGe1#6HqJOog;X2M`(D}5vupkaj)qmLU>qzfcT4kZ?XZ zUniJ^1oM36nA%2D`_{dQW7vopwHb?y&Q?jJP13)UzW$@V+6GoUG>Fpd1V*j(5BNZ; zQtQ}WcuE~XFnZ)Zmk=z(LE*$^NX=feA^IY*R~VCUnaI2@3cAcNEnrta)@UzwieM<%OCh#08lSbw}UmYca9 z`@B=j2{ZlJOI5XlVD48VLxq|G} zc{@0eC;&zB^Q*$=BgHj-0V1*-mUiZm0(gVh7i9iY-$Uu^Uv~`nlwK>?KBBU$fSQmg z1tPWqEm3;oUuS0;NUr3SxgYuyzqx98Aa1Lksy->&l0trm&F(e`PifR5cm@ZVhQqgp% zVFSqBmxg=2lKKJ{gJQ>5R;!b6{1jPM$oeNlM7iOCAmCL71jR1mKdU3%+@5Xc{N^+b zz{U7be%b#v?!&@w)+#<42Ke-0-^8^1J^0Vns9s5&=qTVS#xmn)2;QaFSGW{qpbPXT zKk3Wy(|Eg(7Zb*vbMnE=aTy}Jq)3zo|_=3+n{B;>NAKC>*+9m zh~U>U1tJmP>!4Q|n(&=+;%crSsYsy4d+V@D1kY&2ptr|@Y}Wr}&YuY|#|g8X#!c z_;vu__>DYG$1O$(M=Moj1Dcr4-WkG9p%WXH8eI2HU*y|_MYV?X)~ zLiIsE7q#*RB1|}^LaVXX;!dxZ!TcoggVjqnSNoipIUd3y{V}|Lkqc2Vw`wPreShAG zi70aUoPrTNQ5~t_9$r%wQN}tz!;w-tV$z0a z3b9J5RF+KjMW?^)fr-=1P6cId?`M7-5P-Uxr_{vh+J=mcmue(~p&1=_M<)7Ww@SQAAY!Qhe}Xe_cq4}f(C6{n7ao~M|MCsJ||teNW|APQOqI{cvi zr~nXqy`enSH0|+Z{_&d9pwj+UoW3hIs|8oLklD1(vA$?1Dv!TZJE9_}k>yCTih48w zH|IA~4T3)ysae4N;*b&`0h6j?>H&+*)-FzCEx75ln?vHSgd;9~T^>A;8+-?g5D_D* z1T+n6gDrgt;?cnCz?AlqoLo(hvny{1BWV$T$?2_#%_;ykOUyz@#(B7ee1iV@igejN z)NE#Shao{X1uzx#Q<(jL1E{q6=1x&#>9#;(5^OBTfq*UtqKD5xz*{-h(X@;n1I@CW zbTs6~rBK3fGl{%%Dff#V*s0XrXLq|IHs6Z#K+CEADXmRt{fCYBWu$fDMd)<4Hy%AIY=@8D) z0li1oS0$zf15W@dL6QVozR?Ta@(U8H68y>CBLMf7^h(A&Zk1ak1dD6h7I%XXvI z01511nxe>WA)rVsGQvd=>T?7~9f<0gHbu;$agf@vgp~6uJp<}70B9*77iNj)T>~Lb zljrAP08$HJtG*V-osnG&26*s(Bqq7@P7a|zE9l-v{y4>#2pG%`rY>Dj1?wcHKj|G? z5TK}}3;k!(*d&rAFP<4juxP7C5fL9}Ij}w~ttojS^23+l5h{`F>(*-iJWibz47ha0 z9k@5^@N6aQoRkPX)Rx#{MCy%vRAZ45U36obHKHEu5m(12g2`^%AQUEScVT}=PEXJz zfal1;WLaj|5cpbLx<9`vHiVC-aEgAPLaEL%cld^18mE>iX=xY_ID0h?x_a8{eHa}S zLCr2qfdKQSk_WM@>V4DkPV-Mm6=|r`QXx$P(kP`#9!j+cV*8E zq%Z%kF|H}g|0McM2Wmxp6o;W$xOf5`foaR7XOrbX!YM)@I24lAYeW~3(n8fy#7k2q zQ&z~0IK1c+o8+G+s1^}uK7!q)J4+ss_T^)yh!V9c?2+%9JjiwEoypwLa6}|mAYd}K zE0WV&?UxsbfldEwIw1{vA!1Vo6QEg4T>d>)b!#U9*qUnav3#I3{NBdI0@`E6qNaolOTDx zPO}M6pnzF!difnFzuv4l;O^e)Z^?IqMqYI((jM%tXQ$wZ;tWH4M5`byT;l0FkaH=4 z8Y7_c3;W}+wA3NgT0%A1PIAL&EXK#eBJC@s4xgT#$OmzvYqU3ATkPGnRw3Zb$WnqT zYNg(y-QOLcWOkj5Us!!-+qq8k&jJ;SF+JZyT(`SfnY}uIl95IRQIv(o&#+jt%&dmk zyfxt8)q{Xc{tZiY9Uk#FL!wUvtAR9X`si_5uw5jQ0m!&kNcMEl<$zEBvGfsa#Lk{& z_@B|2$R+3HhCri(6Hh@}RVs}WEoK1;jBM(n%*kUt+vVoi<2R5}aGZX6REu%<7u0D? zBsZK!?dlDM9E6+cLJ~b|C@a=^BT-61lZ9gIY!;?n{Sc&gWv~BqHuNne8>rq(xlig~KFqEV744G-k!&D7N<703{=NsX(gl$Y@%r z#@^c3%>MK;@u2=Ehnm9J&akIz?Ng2j-spc!OZ`T@X$#5DcWX-z!O)%&i1T+k!N ziWN$&&WJa2LJ9515|$VQGNMNZUVOC)=iccPffb+lp0u2~5WMs4Q>r1_6jOX}JM^j< z5xOpJ^!XuQL&#+#oF4L5u%?dma2JDu@ytcG;eJ5Lk5-3yVde>UdAGW707RjF4WM>o~ua8>|3I(WWEccnm>6sqL`pD~%Xw5eLOB>P_=AcJiQ2Yhr6 z9g*_%crMhj;vEJsT*MP^um&+nLHt;P9@KOM>VFAJQmBZ6YNuTCKP>&B2ui zy(eXTr&6qz5HKg8Vn`EG0|KmVin_U)v^IHMVBY$VPiuEXAH-hW(=<-JKKZq5aD_R} zl4c>&4C4iYy6w^qEEf7Vo>>>XipYc2_J5{XGk4OBA|(Y5>f9|oQ~mHi(sZ&6K)!;n z!a?xZW;pInj9pw_2|G>E9Bz;y`vI<+Ewv$f>@?ftH+)J=mDD3P^Vx<^9?tR3$Exp1 z5!)7c>n`ZKeaHJ-QGQmE6SAu_1i|X_P7>vubpiOIrPf!4*f2$sTUM#7r(n1*xjr!Hc%yC0{gJTTae_w>ase7KyZuZiVIRwjHHnS7ucoD#h@=UY5aUOSq=+ z1AW@)@PoXPm<)?#Z)hlQj*@LjY>wT1lAs9IYi6FeAO**`FZX+!yFKK@;`n3LS03y! z)erSs)$XJ{Ca;s(hOW$rYW@h^FE@XiGst4-+0YE~GPJG?k8cxK^=lgWdsF07j!od~xG^T9 zTbGNx9ZJyuS1}}@=r9PGzcdz$(l^rF>YCn?7zz3wNA?u!-Ej7vde>?ht_}Z(h`xc- zk!$gvUChofpQlC%T=0JR_RdBt1DMyUMwMteV@5rlOmEKQ|XF6C(!w~9&p`llLMN`ffg_%sBz(jU_SaRa$D@A zRx|q}pKG&FDOko95Eq)yi^@Bza{RXOtQ*+Rb_P{8BuYyxu-Vd<1h^2Tppz$A`MOJ; z-gx;70L9tWIC;?20wVA5PsaAHj(2lZeS_GRr!On6E5ejUO8@D&(hs~IwZnz6HTj5a z%g;j=Y~H;BV4trFoS=XE%gb@8=$beO@v#i z!i~qmP=cp*ikDwHiFLI*7j~Y;aP4VE`{)dgX9^G+eWddHY`kZh`Y__XC^tm`EiKT|!kYSwxIP6TL4TH~PkGbYt zjWQ2$i6%pO8EI->v9Zu5bqXM0m{+?ihraejrf2GBD;uhM1)f2}J!(nJ@Z0Vdyoqti zaWsXxE|}Co`DDeOiDT}ul!(06(PD?4R(VQ|%B!qbW5g$2g8$;+AqDnG$Dj?4sKz>r zD?l?6+@37ejylD}QLbWInLud3x>PD70gH3T7bpc0bk~-xTkl-^{6qqZ7=CpPZKnNF z)qI*)r0mfsIU)0@doey7a10Pwzx%@n=($s0FjRX&_y}$_$T^VMM{LA9x^t7PYF;*q zBe^YOhe66%nj@!6mFuEHM#38E6izN4Ho-%wsavrnSK5bBF5q^YE(hRfH32|f84xJc zM?}9;6;Jt)xLCg_VecWkynp|2GwK+T&Y?;p4-7i&t>W6x*TT=ZNrwqv;)P}E3L&Jl z>fil5QY0_?J9?hK2OfrS^g?2}dWwR-7Rp5PWRfdfJ1dXjt%1eym!HUrRK6>Q443Jk9#NF=tF7aUi8wW z#6x{fh9+U$F{_3Np8)lDAgm{BBgbjY#jz)ki1{^i;iSYqV{GMo(wI6Y|g1AtQ zQ1boG5WL5~$-r^)=Gj7=Gl6H5Y==!WAclflzwT2nRtRTH(g2>gQUR!+BLF)Q>v;U- z!n15t&oK{!Lyu$34^kdWP)0{tG|DakY6pBuYW6OKPBx)phtM}v03?xduB0u~L;$B& z>(VueF6~QDV!80;OO^1j8xS}F-jz*A-wu-=)mCHz6tOOeeKs6JF{cpmg4k58wMuUL zC4e!&b*u!$*c}Z~ThNbNJ8J%*nK7WH!0DrL?KzKk1G?Lb12$mfiv^4l@z9L9+EJkm z9YCtLzfz-r#n$jK2sSiC71SwfcjUVcPyvvyC!u$#(ukSrVQ;uaQUe@{bToB`x(?aE zbY>4RM+bx_C_qrwP0_OS1@R-4P2D6xhQCvzDgl7V^iVHflycwKpD^AG3%C03 zL|QHCWk^=9^7Jfv?xYZbfl}f07HfxK>dymtJ2;1fLN}>htilb9F#NmN zTI+xlPWYls4uTG=AJz7zv%f*POHkU*@^-ntK>(`ICGNKX5rWfYi~?v0c1Ape%e zucktVI}%o0jK*Dpo1?a){P%7$Wkc1fPht9SrLfhx8f=98|tKourGNG*;q9aM3QULi|_W zVpJaMXXHl~3Xlb4Qbcq@bk$(^*WJl#_#?*p+`^ZBp~_xZh3UaDOtrMjFH`qg9QP*b zUv1#RQYD?q2AzBrq(mBgS;TnYVsgy{#`A->V6>;B7(Y9gyxy4PK6VTZD4&&Im|JCm z`}<2pjwNgpxL3o*D%pk7`V=HLsB%1akE@)Qcn5))-;hbhPyc`yq;ym@_V3hBFM7N) zo&eynDFtIVKJcFF0Q99?kOZhQsO%@95SV6o3!r#{EtiHSU(Zh?ygW2_pAR`S%h~0| z(g51o*jCfq;LsgrF|sNPKQ2iy?`3-hKplftY2uGYXa`^vJnAN65rPv9bGq#ED-;6P zQXS*YUap}iiWA3Qwp;BTOh?MkjFzSpN` z*lvCXZ%ZFV(D$C6BPR1;qj1Nxob8Vpy#ZB0@{D)Oww~JKN>sBw)Osi2`D4W%6f!$= zq@7wJQ}2YTh<)!bYemB9(l((3@5UPXt#WtUi+C&&OzW4MdE;r?3)TgbigAGU{Iybd zIZ6S^6Yk+;sdk=8jXComF7!6B;ea8KFCw2_@?VSb zSMuEn-6MTKO_F(IL@oUdLlS~4Yz437VOjUlo$_G@;obg84@WN1O(z9=DrQ7O1ny{~ z&lLmPIKM6Tw6=o~IF;6OD>gc^@Y)pDg@|YxI+$!d1gy@ubJBtP6P)KQyI;3GpGO4)a2Z0=K~yDNTMqMMn}1C3T+Q)mcfAV z@)TCP3sY2U#^0nLsRX!NK5JttfijZ^ZriAx1bFhPt|~Ev%sm1U zHyt;X38`qQ5BNPOh(?4ew$yAraD13re0vgz0`^d1Q3lX4)dXi)<&A6f+%+R_V|;2F zQ;mHyXuMjM>1Ap*v&8k+sVzx$uPV;PWW=pJ_lWC*vj@)1-R;qi+`ewZHMG?XW^UO0 zX&aW#B%Z29NQ@2!bGA4|?%tjHgzH2GN;J3fgk?oVeqXX!Mf@l~cQ<%74Q)=@4g*H3 zn)YsvY;}7F{bqbug<{xSkm4llI@B8jgki}dD+9M?u!JL5kI(F}&yMUUjgP{V<|7lx zM;t;+>MI;GI=9Y<3Z`O3NN_Lls=7H zuk#NkQ~1r#1clqn?Yj0p{+g+8ka4CKHtnl|KqyK`B&JdsIw89P;nyP!TgJai zF6}_fg@pQJSeuqBq&C3diWSY$1Z|(nnG1<<9~UH6wltuDXhe*P7%7eO(?w|uqFaks zGi0x&hxs7+mkH0G>typYM7w@~#tYJZ;1(U9=Bgwl9yTf5(2c7XkwF(jM&n=vP5eu- z_&b&x+loTWQPK7m;yGOUvDpqj(A@pgNG>fLp)RX*ZTth6z`xQyNX6P_VYiKrlQW#vp2ff*aZ-9zl=@XNSfzED()Wk>%2z>lKyh~N%iC@*mn`8jtTVw+ z{U>{596|?dUy&fhb~>N>kRVz7{Go^Jc(MIstCS`S@de`U04Pg*ZBYxw+FP}LfqVl8DL0{KY zVq#!gdh9Ghv^b%G*4A{(9{HLWu`BK65+FzF1t&J&sx%R_=KC~my}j9XG=@6;AH`mm zTSQJ3_6rCK0wGT@OwtVW%?K+Z(LOC;-@O}+Lx_c-btC}I~;9_*I#iv)h~WR zUK<3|0gpW_z!BF31fwxUPp;)nZD#DfG-+xC zgMM&;p5Q5Ys&^3q7ML7odXMo)RbJUHNNo?52Osvz66Ot;&%NBW9UpN_toem8O z=90f>6R|5R#rN-w27A^@sD4e*O~f*;YdT4KZyK?#WYA2;W5r+<+EfecPPoIS6n#MY zj7@wIi?`NT`V@4~f*a{Vkm{%hJz2A!nmAp{tOLzx#>h<2e+PD!dMq_Uu#zcT_(zwG zKFl?Ih3~#fza}52vg=Wr4IFw=`@K7_48|w4JbRntsA)kn;J?ENcSDn5CwiJ4s&-=a zestB5V3(vIQ7}O4py9dHfWs^hS;;fCd%K25ck4rL~()J!G&U?6m{CB*Pq-mc|TaUZito5I)$Hh!{ z+}5D*qMjgEQVeThTWBs_-BXm?!^(wuDwa4X|D&0s2|si;{eI|e*?VA`t(V-~Kftjv z4)9HJ===H9BnO-tl>j)_WK5foumG(VlY&1z^kM6d4#*} z4Khd-wv?8ZrCU-n$R6P>M1W*F@xWwoIGFdR%#V3YsT_Hgp(b;V#^96D@mRKU88hT= z{VGzPC4^CmB;9Gc(LVOL$vy}#xUsEo(h!lzq#~>DvPayu4l3Rn2yXzOCrCC|V)c3e zwdd$VB#-@x%bjgs#JX7GYv7SajR1u}4I|GCs?@Of@Anq-DM7h)vwD7n;f$6KUmlLz z*JvxD26vc7X7g{l8IsNK$O$G}Z1!*)qcZW|8sZQ`t_lZ7EYZcf6TXmVx;yj8(gnY&?iZhsl z$wlfoUL5%NTim$daVhR4U|Sq50Wix)3-LOg1v9(Pr=KXcLV7*I@+G~3zc332KADJs z0`Aojv2AaC1dSvRT2mBY_o>a1V8@pS)Q7__4j8pnTcJgL@QtW!RzA(k2o)2F;n4ZB z^YEdFA9LERq(^c=2^H>wrUOJA`)T~kpAN{Is5S4RsO%2v=nwRX#*xOCjn{>T8zR)O zf>vbbpwix@6AEXki2}lN)LB&}Fp>UYS#K0z!CQMhiLt(rz;e1*Xx5+EUS?OtH%*;> zB+YY6kXZ?A+szKUUFjbc>u9F-=xS9kZqva@vILpbJCB?Pbi01?w$J>V-?Ei8;!FRF zFOlNAoPTFnm(aj=yiPrUP8QfhY{M)s8vWtlTks)9b1V_IH>?8%Nz1u>%)iZYAc6x6 z9aYdkK?Md#9%j@BrC4AljfotBs-c`HJytcW1JN0RP8{Z+ITVOR4j+AgBA zj&LY(-gfRqjpUr((#s-)M|dRN!sH$?N~T@bE;6Dhd~0@rQ`mkdeMeT>yUArbv3H+g zYI_S!g1r?TZv*naJk3NQj@Yhv_cZTShag~Gr~O99jlAgNDlp<_KY6>$qlxc{E#ZMr1gOc zu%owNXYY5IwetRY?^%`%^BkQ zz+IRuMx}mz8kzgRonM?bnYp|GJub8Z23aj0iC79=4eSga0YCAJY}+&M^1QFJHXVRP_Kt+j*n_{L255|3894}$x; z=q)0kYeoP{mH@gE3;RZhP3x+}@Ym08QY*@jtid!^P2Po%OKSsJfVERd%3_lMBUBPR zOTAvSd?eLMNE_@t1SyrI0J;i@lM$RLFx}UqW}huOM<=K~|2^m=adOsOXl>+5ru{#D zbW>1uWUe7>uj8#iiQ#4+-i&HM&tXH$bipo*dC>uY4ev#B$iLH;ymuv4t5yTXG(tFp z`W-ESPd&sHb75_g_6#%*)i8>+$JixMm67EPV z0rRL1XK83a$S5L>!y$@9cbAcs9*;WPN}*Kv=2lZedQ) z1xtuPMcQ|b3mpKHiPAEHQG0gRtxhz>&U#~~*EZ$F@B6G6ii+Yt9??=_1wz zs0aZAGbCy@SU#n~h3@ItsFf8j_y{x|9T@1uhQ{Mq=5vI{0ZrD#bfE8lDL0J0vX4Ff zPKn}m&+Ygi?1S-gk=G5YpuU`2Bx+s&Qr%T#(uq zW-R*s=M1U@+zb)U!w0v({^>XtYG_$SRzO8=^*-meU**%s+Fa)jpo^KBF&bBiGT*B8 zJo7N?jh!i?)g+LASJ!~o`jo$bB_cHJT2O~mDv@_Axe@Wb%mKfX;X0S%fC7%gsu)tj zJqsF5h=(G|mJQMvu_RcV=dX8P;O^TQMAU28J7}M{yMS&e34q9tAZ|}fzmAGly)#>r zr@6`wkzfFkzDXD<4?7tdz&Ml<_3{YOwu0X#2?$IKbkzS$Q+N}sA{W9kx%+CYtrFA- znNE%zdxuG=%ge-ijfWmtjjmz>;;w|j7`h~(!AY+zOlTn5vFvL10S+lq8D5;)?KH=4 zousPD7uqse8 zL4Ls|6eE*PTVba>71kjgmO>O%4r}&64{8Odr4eCB<>CEXH-Q(8OILa(@qZLT;{N1x zniVP-!~1ZUDzayoGoc`s)^f{pkC>V^{~RWH_iL@Ssu-Ob^1fH}`V7*>a0?5)lXRTQaJ`rH(n_S_31h+Pc$qSKCgx2Gz(Vc2IW$2nyo5=alrq9U zUAMF_v|NiAaeWx?Hsq{qBoP2#*Xufor>ba4M`X1Me%xkx!)}6Rsj=?;_2Qi9^N|FRIb@u`oJ+ZxK|m`v>-)Sft1eR`Ad+-^9&3gFNqeuz8w6isaE1g z$g^H~vNLmmwe!`>JB8OGj}jdN@edQK<@;xD^$sTYV@Xp_EoaSm0>A5XkAsKCZopu^ zTH!o9*lRBRv@m5KUPL~@ywVB*FFt@Y%-Pf&_p@2>Pq|Q_3$~4pLLak8UMJ6GSOU3t zMpwGc>;H%Faz~R^R{zx8R{1o_D$?mbCqjn2M-AzJ8R4Kt0}EnTfHw@^dsBS%X6#ty z+*g&CpyCTYY+Jqs6eeZ~Wl2+ee$u;hl4fBJpG^{nCA0!iNp#pLf_FbcZDpUi&^g(5 zjUGXC0J0=U0@U>Z50+p7HN=p8yV!PJHZZzUfg4}ecBR4GapaV+Fzk=;tif?g zP1N~S8V!m~;IhWJf~3l$$s>6q02*aMpAlgU`bVap?pN}g=v{~2X9L6JhB%LcqsxK? z4rv9gXwOK28%6d)=ZZ>rX`cLyG!4!xL~ z=dal?mySdAmmq$&7&R-4`Ma4R*I2`Si_Re{O21vXw$`T}Mv&XW6TT&+g$40s8MPA0 zt0ty4DnZ%~eWH$|x@!nCf$Ic#O3szg*QNJ@gH3wcf(>$*Xp6*t{&*nGCWQX$z7efgxU``y2jDz^DR32L%O zFiDH?6b9;M$f^5ZxBTSj7JdLI)- zn7;A%4?7uTuSq`q6k*Co)DPX?jGJ$%9t>mwEjR=pID?I)B7_B%Y#_u4cl^u%gJqZ^S|o9L;aipL|Ibgt?}aDw^Lm3o$+IgF4NU7x?h~tY|xG|r{e%Y_sT@HNzX?)3^aW42F)`Mlm-}}GJdY=Pk=roXv zhY3k6(8N9~DzH|-ecF=q?c^|UH~6I5Kn?*yf43ysw_Kts_c}J1A4z^ILJ|2CUOH#7e^-%cv-SVY3e^sNU_Y?rk?)oTha16-79+E+v;yw!7{!=Ad-6anH)mJw;zH0+NWkNJHBqGOeX)r#dx`%!DavI& z@z%A+iOX3Me5AQxi5z-^(Rh+|eV?_>pVT$Z5d(bK?1-AUdnL%6@$>MD1a-(x>_2-MU7mwe6wm>meL((5|0TzmbqehV@p} zC{LLMj4eufg!Sb&l%Ge(VEO8_*SZWx33qzq6tG5W0YQydrhrOr#W^8|X6Fb`MIPc) zFIibQAT==5S`T4%OH823tVy~-T!kq*RL)0~6YykOEC{|Ao8AB9 zj|^5YW8}mmi$FJ4GT+=YT~jkm2D3KI2k-41Js#MmQ!?p+NExEwy|vTEZ5M!4D|mi1 zwRyp$CdwCP?0>48W%^N7H0@5 z>gpN+S}5#|Zeba&*q>;;Y`pQ@&J=e*#Xb0sNnF*_IkVpva52Mof3O!v>C_cX3+}5% zk_&RBi^&VMw*$g80d_H1?$rkJVtTyYP0Fd2N0s0@^?0%gznF52Nb0UZp#4e?kJ3A! z*Hz}88NmHu&;2{{?gRe3Q#pJr()m^X6QxW09Gyu$08T(@_Ll_@lQp09a{leTra$V+ zC_q$rV1e@1YYe=-ukrlDD)zl>ZIf&BfD_W4fw?GkKOH(M$MOx0Lniz^z-~X#Mll>j ziB_M88x|ZEVnZX=;vN`j$f2z4O~{y+HW?uS>b2H|01?dYQ*bGk7$4E$JWUEB1`JwC zl0{)(yuDDdMhsN~nd^1|R~{JLmp<2NRiO8qs4PdV<3zd}R%)5kh2m256G2GC>x3jY z4J2i%v}JtIMeAVjxL5&qW@`jsLG2O&TC)p_@+B{wh`;8@rAt5eOq03IpAeIWd3F zCh9_iESEgJFwB{A76Rm*02ixJjgNS5gQ2qA{GTx2yo5sPBYF+1VeTy?GI7u@o)gsq zo9Ac#+>0zt4|=j1pv%_DQTliS(iR9YU?vk%%QHMr>_v5-ZlM<8MRv2{xR*&oqwC!) zwQ6Pg4bK-&mWAqgq0wwFK~__Aj=!-nrKevIO(v~Y{m7|46H!dyTg+#Mz$N5%69H;h zvhmsCHdUOXm+fIiAN8t*+;XO9g0xd>otvMDxhev6soJhouvfPraY>&4EHWt?6xr~E zwg9ejM9NDf1Z~QMthg5N{_Oe%G+~e*5Xi&XfOW5X)3BALf>}{Jn549T*U%~Z-BG$A zpUUal#ip(QFX|Ri`~O0D@A(orDDl^1xnVTRMdHG?Q|dooH%SNttnWdMG~Hb_IFU89 zJU5TkE{9ZpR12+0MSAzy{XvwhauWLPPCCh9>!4Rg1q!Tu*io*|aTo?Gs2<{xDf*26dAL?q zK3!?nmOtmR5fwhW!}PF<4Nc zd{b;o#cvtAUOIepd>d(fAvd3d5gq^nDVipL?2mu13~&=?gk5$y#KfuDK8>6Q$oRzx z1#1wKoFzNQvkDCnYOz5br)!|)jt@%bmSAF&v6c`Ji=8Flvy#eZ_O!E$tuYiA<=RC6 z(+sT%yjIzig>+@E$_j&kcU*&|l5mg9*rUOut+`uYcj0akKf#qEH)RE23GL4+4`^Wo zdA{a)ijG3k+xq29#OhP2I^dr_g7G=saRUMDH>u&Ik;K-=n?8+*>@fR}eC7hqo~(41V{mNX_Rj*PbBkA_qtk2 zWy{or;`p#Pvji^op@zTO>aVmHp>szcBtsb{L`%~d93@ z05Vh-;t7yQASA$n^&gidD_;N<{pbSYmO1$Sro|WZB?~MlM*y-Wm@9Dh0fGq|04x9q zWR6tlxLG(9k#(P|V0C3_DGW`6 zd6+kqmz$^F{)UL|J1M(XvTUp&RD!fp>z9^2L3w3Rx;SApnvHgRf2J~Xj`@Z{t+nD9 z*VqR{@oox>4(h08q-34YRMZv*i8V0V@D1?;FkzBYg+$Pm>IFZYLpHxJG)h^_D(@L= zzn+e9Ut}3RiLFZ-#Z9LdOjP)vgJ#g_B~dmFM5!L49*ZO?pbZ9FL0?~K)mmf8u7hHx zEABR`z`$sz(rmqen~LoYX@cQgW>nMYDixORfY&-w>U%vNLejKG4Pi+?{BlQC8j;}# z#OA~U*HQIQz6o{D;8RzkLBEi3CSL8k&e#%6k%cd6{yNtxc#e8j0&FWFh2$FabFLUz zk(94>xwBi10KRF5>yStOTux#LET;#T|KFMhW%@!#O_K09nlf+%YZi1o(QbkaUtaG`P}DjBc~5-SLbPQLBOllx4V)(x^A}9YMm24Hk2f7a&?O*D8N@vOQ@Ti z9SdaYwoe3DzXT6um+q1pC$grYMn}&R`@q<3`@g>&n%PP}+7yD?Xt@lKRi*HKsYH9u zv8C+J3Wm+;^xX6Q?78R#8y0aLLv5C-4`@mxWsQElEh?5+iyiukHXSAoN=tK5Pcn$` zikQQtmG#y+`{`Dd!%ZeG3_&M0QoFgtT3gp`fnpbq`jxRtr(}V6IRL-pSyirvTRCm_ z`W3+S7(D=tw@*(lyw9G0ED*8w5A zFbVY9nmBg6{MRr7-Di5a;(|?d4bzG+E>ty#;syPQ#GeMXSglzgrI3?E>|;?eu)cAh z3MFT0t3R5pB8_Q9NY$^(r$pnn2Em1wS<5DAq>EkrnGbFky=VdmD8B=Qkawf7<8nAdB;-IISlx-T9lQ`ZWc)279lFi{3q{4UXsi=u`{59D!>AL|qR&~cWVn715 zQ?MJt1RcLqIZaYW3;(RW5>|kGzHUr2KanZ9D`V8~DX{uBKP(N=qE=!d&-9d{^aTTpZ?Xq_sQUOWhvgSaNy^>pW>OYeioNSn%s4x!Pvz;EE zN57>ib`{N{tp`BpG{|2hRTwS!06#_vKseT#5AMD}0HldpU1*SmuD;^xw0M zIo_>7!8AfAt2}^3V@u1e%Ii`}&gbp;@bcWemCne!S5T3uocekCY%A&SMK)L?)w)%NK_pNpiAG$!SEF#Y2ZB2k=aCkzVGwhpn zz2UJ>RmmPHAk8l$RE(X`jbr%Ag3a@Nf5hQoUjNh(y?uz^pUHWrEXzHhV_Jm!A%1*I zIyn_1np^tqR$loE)AP0wUk6)}3ZjcXlcC97}8taKE#^@n{0_J>6`oi0p=i~!}zm){X6_2LmNB*qgC->8g+*H*flCL zn$FoHDRhAib==jVg95$F_|J|{($hU=ljy55!M$OlBhHK_z)I(K;n;)Oxgb!MDjy?B z^nMqSd>+72Cpybm)q*pz?JS7DLqg&&olsUY1^puLIQJX~B09 z^J@3BB8|Nl7gc)A@b>k%m7>=MCurM}ie495^T*-T>ZtRcU=RTg$%3){25y2oLw%ef z2ZmJxNzmd`Sy<$~rE2d38nHTM?HyT@ajqLbEJCmF#bF3gxo9CXMR3D;X4w!mtI#RJ zo4Pu;wUP*DuXRR4OK8Y9>g#5hLg(<4M@%I_s#H43 z+k9b@4`n6QcrTaeBrEO0AvwMqX(#-Zcb{6~)|k~Bm_5dUS+j93xs^L`e#V?)(gLy8 z51g|2&r0nYDS+YGq=Pz|%M5m31alA$PAQ+91^xFPH0~(zlH^*SOxq|G+Oy53`04Y4 zk$XN=D@jeRD-i_w!X@a~LE#4+7cGvOvQHl7%D5dcQ$V_&uxwqGzL%C&7``SfaY@cHJI*GPB& zt5{6Q)2A`m%zw9)nt`M+k^*dRwM9(6A*1OyBbS0`_7@#KN!|^(RaJCy5&M-9tMC%R zY`zsU761=71iyo<2i4M>E(|#G?O$iyBJ(`QXxW%t2M3_#lQhpKbn1ld4Y8iWMbArD zGva+nCKyabq-e#=h$$v$QXs{lA(e!D(Jm=7oGva0;Z;O79`Z7m=>jLd`1RJeu?7P{08)sSkHEW` zHQY;vX3VukHIT02FI@EPWKX~|IGQX(8dzi{(*e@m@2m73nw)l?4d)kVvtPPd1eOXI zVNz7Rw2-$0m27&c&pqXWHhA6zwTOYpEf#MuqP-^IbLEFIHjuGFgR$qrRq*S~R6?|3 zO#qV`@|VTT7*=b8Hvg=EcSz;?4$#WH)LGu*I&G9b|A3nU@B5AgY zhs33|$zoQCTA#Ga9JIwFFX^k)doXAVQACL$HtXTI=*FCTk>k)N0(Ie8y;_;dw^>`& z$%-=0HAb~JEWrb0P#zzjP=&9K&oOxmLM^>w?uQbjp*VZ}{DDwA}ot4kk+h zTa}Qig$#>vHhDHCCv~;y)dW~Q`}oK8g8>=QLy0Xs?0Gk-KPF{_=*$7r*qR?aMLAb^ z6D)b9s{RfV3=VXBfhdBS7V$P@j2Bx1gUkfr&1y?tS&2)&0QeAOz*alb%mftJYz&6N z#>c+YV=Et3mmmTTq%&nM6D7D5d+mV?s8yceA~Ahh2|JH{?FU+`pJL~mAZePT%e+L@ z!m$On#3>V5kVquX-4`d!Q|+QSQkx{O*PKfLma9)6wX>-JIo4sQxwWtW7SKTEYWX}Y z@I>U9DJQ)aulmOSVR`}TR0D2^ z!>BX_)8enS=i~XSuenG&8K>gD7}fE!x7k|Vq-M|j5*<1%1`41w9bgPQ4YyvaV=u3q zW%OtYgYdoWF+a?K#yBkLaj_lOPsA~@6OS4Ojw)7A3`OR!tNct1M!0k(`_<&2BsYv< z1afq?4aFYEdF=z^u%0>3_tcPD@FS%at&ZLTSc;U$mG9ptU7TI_pKT3Y$7XG!{W)BD zsDobyKZFACs5zJO3gaBoh3yXjaC_ z9WT72s*&`-i%K?2uPqt>`;63`khUnt1(}HT37CO=tRh+RA(;r})-|)5MVC|Aqfgf$ zO72#VD#tz3m@n=USrO zm=GoISj#w(^)wE}s8)P>pz}S?(TKv)oFK75X`(JF2-wgx*RVmgvKH7x9_u-N8zHAR zbJNm%aS&jyvFo8g+`;XYvovK7J{iaWX-lmT0*{_P^x}*5q}6vty|wBulkT|b=89V+ zF~spPnsSnkvz$LkN_t77v7HA&bhVb+GM!qj^DX>B8zGcX@l6sTcJh zB{0qoAib_Cto0h4O>b0FSTHaFsBO*R0QY1JA)k8SFqd(`cj}xl0KE(8*lCs!4Lu#P z=%8-^FU?2J^XFJA^XLYq;zk%2i55ZliWU&K&PwptbnT#C!grRTrG`8VgflR_cFOGL zbC>W^51GM2B^4s_I(4yb0uW0+oW|7c{VxpUkiE?ufM%lYJeww+P$T(h(y>&H{IiTW z=gGGD=zb~-f`K$(Y;7OV@vKscQV?;*s1#JrxWj)E^flt^K@8qME^rG@?19p}?AN@o z)A_rUtGkBq9v!({oa9;RNZ7E$U9c*!K~CHT#3rX{;uQ&5O%I%uz>*vq)k>cLJO8Aw z@yUZr*5en#%}z@$)Pbh#LJNL}8cL^Sc3>Rp(au&6e7-41;V1c(r_^|7be%$@YUCGWw1OjZ&1jiyP_U(>DoEcFu|^vS45!Ca z&|&b0SV-eq@rI%?T`D1CBR!flg#MC;H?@v_u1y*i340Sx31(Pk-oFin3IRG1z1ne$ z0KO3FRZ5KC7*1yuT>VZUE3F-(r_Ta$Vns8L2t_|E)9a%c8SAvB((R&3=l`; z0%!)GaKh&Vz|KV|00mNZ5oj7uF^5Wx@ZjD+C?OsQ!Ai_L^s6JR1dALw-*|xA_VcpD z>LaSdS(V4rY6lJ}d=_;@I>Tceeb4@o?2@&@fBHb%eq`tn`>T^Q6_iSvr-J54y-08e z)?r>sP)@8WjFE^q&yAZd8Ag7$pplw;S_xM4nJ1o3S|k#2!bxq6?GKkM3rG}-=twI{ zO$SMp7%pl?OmO4l@FOxU##Qpwm&q_I?K7a=_H!Mr^7=Nvxrlc1u&M|)pPUOadTU#v z!zc{hzh({;RP!Ir&$m@JmcInltE)tKkGQy9ocz-^Xk+T!K5-Cb~fnu zuJR8m*Hu?r!}BY*WO;arp@2{UH!m;{oNzf18ClI1pJY>FzFZY1kS?i+4s863DvH+4 zXdZj--yBgtvOA5PlQOl9CHo8#S5lWAT)43mom%Fud=Al45^ts3cmMsHhB%wB!};#@ z7RI$#`tQh)Qn_Jo*h7muX?!C_*qb4ELhoeXNpFaCb?u+s=o*Z+-F}&AGLV$)xmXU5t1(2{dW~YA6$Sp?FI33dtc@{V-xFcd0N~`wlMT(N*`)!Oa9_W5 z=-H;jd(P1k2@1g<(CsW*de~WvFl83?S}vXyJge^aF2c#+#f-&XF0=$xRie=(1(7BLPD0NUe#ZUr%R=RNDM?SDC~biPYwh7h;W^J z{PEfd1+ep7Daq}7i4gY2uj#L@6R9fg2Ic&Wm7p~B%5V&&s zv%;ScGq9`$krUJ5@7ZL6q!5f90;61e`hX^Sg-T%{M_5AJ35ju!A)m)1OgCQB+e$%uK`F!G3 z`Vz2vqx0v4UrajZSJAzy{uP7g)O-QPR`pzKrT8!~jEU7S(iF~yJ*x{&TaR(hVm2i4 z78bb~AJg!y`*dXL9rCz~mBzBxZ%c7G7Lk;-$TO#Br*eZ;QJEw9h`?4=(xWOo(8_Ls zj|O5ucBGr`vVL~;%?1-*5HmX6?`)PMIDP@O0Nse%lqCYr>YB$g#8job2k`vCkPFid zIjj&SMCR~Fvt}%K5|e(Lj60DLz;L;b(Y;dkRAYSi8y}qTLlT+UzFx^}Z?ycSKl2CM z$Qd{%m-{`U&I_xj`uBZ?dsoHPLME*Q*JGh$4xY9+#p6b1=#q3Hwu@bzfbkbBgZ{R| zo_y)7b3ji7V()Nsv7JduK&2m<`TSiWTkfhr@x4<_!Fd0jTjJ+?7$rbf4!UXg$p%jq`KeNd1SNK#bg<4D-gg{kw00Cx;($ zV99mCyJGQplH8qKz3YmVzy(5QcS{Rc^A9EOsV6K=x!sj95x_(SA(5z*VdDIXaF^iC>E_knfW$Qh zCSRE^N*Z{Gs;=5=?=s0&88BA#O`C|4Gn9ylB?@IXsv9q0qoPuw&=K4}ba`Z<@0m+{ z&FTjU;;%7GyP7PCn+6Did|Io=`qFtu+N8jse4{5gPC>-8J)}J7*_7_A>bBGT`!^J^ zv9F2NCf&_|AMVnMZMe56w0LNxW4pPOhkIG;5+jZ>y_S68{KXUMjZHP(rD+1@-EH!m zu_;qp`PcyM32ePtPsLBqb@CuGT8!C{Og`;43Z5+H6@Yu{W;Z z;;p!HhY``##9!~B1@UfDT)c4&Ps(|m-@#Hfa!9J;x7PLQ8_M+)A1Aqt~|72Jg ziQ0mfcQQTUdlIn0H?P>pe5&4vnj|pVhn)L7xEGCH98rrRO~#sD9FhT(KXXQXO0B=D zGTf9&|C_X(wHShPde(kOt*-iEImN%EayGPezV_^~Q4DM}(k0U(>9^PS z^M-d~GWFpsBw(WVBp8;npuPFb3cSXTf@pa-o+pwElV7YfT#n~q%B`WGJfoB`TAz`D zDgI_@X|jrx8PEbW)1sK1*cCW^H=~mDqE-!im=l9}#|=fhxUB<*Z`e#DJe$$2F{!Fc z%wDQ-=-)Tku=`)1q3lIZp(PMHccPUJQK`lc@C#XQr|V5tlAh)&;esJ-WrsaMtA@C( zfZJLi;1bkhJ3kNUE$$h3W);f+LpnY7B-~gnC`CI0ufi@jHLW{?6t`dH9JUIx zm_{&+gcp*;#|weW{rZi_wTV-}<%pqbRrcwJt-~`7wl{ueVnf~A_XwWg$&Gl|u$2jM z;~I&1<8>YXvmX2{VL%gpy*I`eU0?45r57t3y2STo9fqbs z^a^t^R312a>vFc7gpi7=8uJ(kDk?zKh#lmPB@*bdHg;A;*s^D#9N2{gSWCissF+F; z-N#atU;D{Fc5}n%cR4Gj?0p92aJp8EpC%kUfNLeup5t-1zde^%wCVk7LCL{9T{B2I ze5jG9v+GDiM-i4DaUQq;36lHnZGe;9h^x6=;by}rtyHbo? z`+qMe)smyaz+|&If9n9#RXS;R5|0x2t@Rdr1$B}?|KsQr-tl}wo|(aP@m;kdYF#!Z z`$||=GO#FFsU5+I{f#9z08K!$zwFjPa9g7vq)nj0GD0?j1jQ9OL_B}jl0mD z$OmXU01`+RZy&&)Uei?5S-|Nb^An$`M+cOe6*tuFjcz zF&sCf7H0$uHi$_G{3T^Oy6)&)8GPFwmfnt^c+?8fuVi{H`aq9CE_ zn!U*0>k4@VP7oi@``@MP*hm25A7@=BuKtQ?{O#Y7XDYVGZW^H`R6AVL&}DcWgd?6N zC&Er+Y|#si&7B8F9>rj?#zByr(2Fi(%v5Gn zX%gyfW7dT3?=)Kh(Isz*In{vHDM(m$IIE^phjc^hR~7p(ay;+Fa9F%hha}GP+_4kB z255-PsE{;Lu1IKgm&*fvEul2rZ9CYX?I5?v3cVv<-=6Kl;C>G?D>t_QY3!vCT~In> z7Z}XUe`fbPy)iN1yh<}-iT8cHFaFuz1GduX?n43B5v2M3vR$qVa;B7VMl$=rh0Ez3?VB+ZYNCQ9yt@2 z?5D982|zjnGMZ~a=+V$zbxR&3px^?Aw<=GGO=YV$6u_UAsDjLOJz6VYSLY*vw*{I#Ju8U`}_{;FW8g?Cul7m7wWpKg>!f+F%6cdm<{21(f!(HbpPFgVt9jT(rf39 z&lUi>02ozP~H6cZvhL*OG=YuT(D|*DbK2SHH!=x*o@(?Trg=%Iy`nn1% z$`W(9AD@+lWER(<2Sa<+n^*?^1IR>}t$Z5eumN)79i|#2hImaLAWi`gF&FgPeLwHV z!<+s}ot}7$7lw>KjF5SG`#V-(enI!XdEi=Ad({+li-g0m48I^2FK@6&{=WJ|R!-7CT#7Kp4=4UIPCm8|iOXDoOcEY-|g?Lnv z{(O7Ou2>NkRk->n>cq@Oi1!l=23PNLkJxdTR>YtTJBx|QzMQ1|pybvBM4PN%XWugC zrdxMa&o9W%={7?XsohaJ&Lzbf{jFr5y!gI@`?|f51Tn)XnSsw`y3jGlcB8I}_svCM z^D82G3UNG-A8t`jygrERkMQF_zQqodBx>QxcaUBBe|qwN6u5UW;`;p`t{nWe=3DEc z-O^(m)(0f3@&z=@l(ODBD|w@pb2w ze$z@*7PTqL;Ex%tzDb_Ih}m$IZJx%$XuTsJyz)t@4X|hY$_mBE9&MFcqM-jq_?C%D z@6q2pKJ;sBv;ZLny|V#-Qk^Qyl7B%-yjwuu`^?8lh16io^y;#Xm#IIGyH7(3Y<)ae zMJ;b#UnRr$oA4tAdHW(s_bu9Nrk-LBCqrX+kP{*<{_FYysN=ol3~Chb`^%|G6=sZi zLF)zJ+IdcAH2$x?w}zQM-!q1Y3hPl=^VniCquJe>Qd^EdxKX^{xW-SKA!iR_@b0%i zmHHMhsCG(Na*h(`7PE%V{7x?TM;#-jp0(IMya~tCPMHWpUyi)>5k^CvF;a>GGWbM; z%e`(j08&ZgPR&l|#vbIHyJQxEkpk0}CIgRa<9d{ZdJ9NqAzb@c*J}2HRKCQeYjYRX znbJiz<3wE|0WM?N9x$k!*0J@;K^X%qx4X8hUePq?F{wF3oUnSOmz=(YDq=m)H|W4t z*adu8WYFuc0SDMb91|p;mH*joF)PG2S<2};=P@RN88LH_=w0nH_H6e5$n4%(z$pw|-N=&XZg&5A0Ie_lIG znifQ`o5ux4HyAn$wZOLfDX;vQPz#QMYlVHp7~tJ(RWxg;r261`qA`xJ*wI!OwIOC% zvGO9ihrNvWc$#_r4b5N*yLW{+c;Fg-!c^;-?Ms5;R3`+n|GP56pSS>lsHMiMi7!}4 z>3gQa!&Wg>;bcHqG`v?cev%WOfg^V-? z)vBx3&r+hhjn*Di$)$cHp>2sdGk;F&8|TSlt#wU*{S>!q=+nVh?FX715%VW$qt06~ z@76zI$_ll1JTy$(KKb?B1)RCeD}n^cS5p!K=b?(~V&uPWo-IX3ka{lt%9GfR{&X)w zl^^naPQk%W>m-)XjOEX^_d1aa#HIWbfzA2-qX z1C9i{F(Ftvx}}>1Vwpka*aX%cVsRn^aO-$i>a1Hp6N~+mI8i5p!7&(B|M9H$vOB`a z=iHD)X(xvd*2GQx-rRAP1&8ARp}tQ3tE&eS63JR)h>-ItYw)rWKl2QCHkwsfaN{_` zAA2ugfUuVP0&ui~ZfFjzY*EG?IE@sB-rAS!%D0yVFqi@Z={XLRP#EjGn?K;x3%{B} zkylm`=0`5BIVdbo^kLb-lq4P*_eZaN;GKrmwaceW4XDxA;tU6}a=E++LivdbW zD9~d$*i;)eanBYs4%s)F{z{Y@;5gTk59$eUU_a@U4!Z{+nuM*h@*MU4i|mpI(M^W% z&t_FoD~NgR~{ewd7qM zgakc*7f6vC@rljR!%D0}6PS@ZJB^9)(`0JE^6_gX{s~qd)mebLXYpT%Q;}}M%uD|V zkvh8mQO(>ON^4tsijIEs)MJp>B|NGLjdaMg`9zyes~w+lty@lud-|rN8tCZ{psJSi zC1ydT1G(`)y$$1-k`{goa!bR@ctD^L@vbq~Gcxs0Yp#x=_j9 z%ooQ}rZX$~?#bKDx%s9cf$A-wn+~y5j}WrsD}90PnA+_&O1z;)*d-&w#RrfPpV5r$ z9@~D!(f1#FBnIMy5hMNMAma1CKys=6Bc}-<$P9(!`@a1*OR~|o(&41D+CuK-OHnAJ zQ_5iZlw$$F0QHWAN&c}9!XZ7Jp;ZVX`^^OYh3)T$#i%ol6HR1sFKMyc0hQp+N)I?2 z>QDkCCZBP+UqZ$r^)8?3iNTfHh^&&eReW4#3^nO27Q&Xmrjv+WIUC+p6XjW0 z{wut#5t}?djVg}|j0XBnyT+I)4G654X);H`y8i+lfnuC~1oTV=H~sTgRklxw=`WvenrGCT6mX#bj@ zYq3wzyxb?x9r(P+qz1MrF~h(Cd$jWLw>~9L2_>uD#a0ZE7m9}ZgUCX((%_-%@+W!5 zLsu$_)@%P9_JyZvH5tZ#OLOY0J$l2&GD~vRT||yJX8e+V2P#0|0}oF82>nX84K#IM z#{u(d-**maZTh)GbU;UvJ?d&d@3}taJDUP*o1zQ;SCoOSo>?r(sLQrw)^~0AL%_ut zXycdsGiQ({K}16cS##3=z`(BfZjxz96kgkhbACf3HkFP;B_lPji>q~b^UHx<|EyyS zHT%OX4tOu8KEW&u=*R|`$}+f9!dGL2-%*GG%D)c@TDm$T!b2fVy~chJsJx|D@j17| zIr%k!AGzrBukPd7j_Oq-6{Col;l(i0^{>VUU0n}1HT~mvU$)y(6O= zgUGwx*e`ou^&l@qG25*xug?i6^BMmNpx0#N-3$;w7He~?wWY;S1hTT;Az@*%?eOpQ zqgFa`lrPQd5R@-WQWKb2L=gbr`=AVP%f6!|tZRCPI=LFTrWK@9g^q7c2>X_v1o|dZ zKtWpWmk#ndUFQMeMWZm87i(s+wY{~&nE{N)&i_^g6nn*=iU-IU2+-SRPoMRGQ*9(P zS&(vKFY!u1YLuqM(36Y@K*IkC(}N%_dC1Oe_z_9s3I4^7e2&v z!Ku%qy4q{B%l<`m9Apoia6Y%f_~a``Jx37BX`@^s`RQEQI8-+3u%{PuAmCR(`oxHS9P<_ zjVBBfmnSjvfz$kIomodix6M$OVFPm*Y0e-gIr+@aQM;L_;cpv8?chGBCpvr4x;^r{ z@`UJdMT(U;;znWdaI7|qw!11>wm{5V$EQZ=+ivF`zNFKb-$kid#GWPXZ4l=*0eZlz z+C)DJ253k$>PlA~EI5=pQ;V3k0Loy&G@ot>^5q)|*Kw>n>=Nm~d&HQu ztf&j;g%k{Rv|m;16gG?KQZw~LfGZy7;PJBVPfVd|Fmiv+6#j4^cppXI<;I>|%u#ze zfY-=&x3b7jnWv7f0<8kt;FF^WhQ8o)F4>scM;UCmlpF}UKk-=tE0#|ngj6qyDm%-_1~AruNrj=#5~N&9q{c<)BZ{LWB+J^Qjg z&l5}T=@5zfZu?iwFf4@bz1yvQK5c`Jpz=Iea>5^@V~FVs?dH}BFRkD*71XRd1F^c^ z?qSJjTP`uu-CossFwrUl-pI{hLN<1K>Ph{g0;L|Iv@0RsC+q5KEO%rav+eN(2sojB zwmGucU=@9>e)QO6X6&cBP0q>|rFk2IkEz)>3-)l9dtc2my)&gWdtT2XZYm8z-sS@4 z0wyp4<1T|D%ZVVR`_OpFvvjvl?Q{2(!599Vi=(D;woxl#f1<4JCzF?nPLKpbi$%@ufKco^ zkXhg7Ot{@!LN(Wn&fq8x zl^CUQ(yJ~RV#AMq-0Lo88fq$WIWg#Z+X|CRn?u23AV=cn+(3mFJRzWfrRrI*=>A=> z!4k@EQh8YhyUgz4w>VpR69QA+M3&;unHNnt^2TG@W5O_+uPFRs^)`R4?X@Sb((b=|Hxv*PKD`WW2Gz$O9 zt}$jNPHrdXct78 zxf@CPmEQyAd#K>DIb!TNX+6G*N4`WZ|I+|q_3xDvIV4!Bz`==L*dP-Um6vFRe+KEG zv4hV2KN6wF9sQb!27iVnn>jlOGUqX&!mse21Cqm>OvXx}EKx|t1+9PpllPHwH!c>bFY}vObOvUzTMjD37_9 zzy&B|?tTb4uc+JInq_%l(-Q)EcMSE*dTH=b?`b@D{>4T4j&TaIa4$nspBF_B_|m4H z^E34-bKG$I)M10RN}4eE@G13YsZ@oIiC20d*aq8JrfPG2jYWl)!WkpTrFXE=YN#o+oat_8n=N^PLB1!HImy?1W%b!w{cL9cBN zGf>x-Ip}WdXJd82MY&*NKE*!&bW<1$|L{0lm;$Y*a)E8Bd4H8!B~&vt0S;>De*%5e z_l)-kdBP>NWS1K65bD#9<%F!zmCGt$HLopNe(%$-6Wp|H!0WVzKoOFqW7YPf3>0}k zRb81b8efXid${iO4W;<2ofWm#E`VtQP5MpNidzlqx6@D$DE23PDHD|cfccR0M*h3E z+QEBd;|wxuGhP(XAxEpxTg~l`?-EOPil=(8oVzFsRN7xN>E=_WG@r{ZgpfX8t8FT6 z^8t4WJ&yyS)JrpFfu4^R5AOt218gBW#1|L&_h;Ffp|L)+yw2+8+%bv46}JvO%3XerF^zDt4vQEYW)sr2!y=#4hEg@2E z2L$L}W1u0$j*Sx5b^2}P`%O8Ckfo4*v-0Gm|Dl$gopf9Cu%Y=l%AxHcyr4F-`(e41 zyk1Q(c_X63f;g)aFn?kwnA4zSo{L4*xG5>rF^>j4Ie%u@bCy&i6^_)ZZ8Nt(5@$+l zgY-3AO5tNK!GicuH^_sm_wPvK17j>_MHF{-4q%g*snDlc*@08p;#suJ$C;DnrRej( z)~T)`V7_^!7l%x#9g9N?B&pEiV6uM>dqKDfSV7j|d`@KrHUlFeh@2gg-KF-{WF z@TP2xfQQ$$1{W>*n14es3GHfyG9GJRMN^kXDova8p}M##Y~2 zdr6Z*V*~X1Rp(;HAR3|$is8sz+kmxNBGPvus^ZA5Y5t2vQ1ui)zw{b7F2 z*&c^->0CDi_^+{LR-yfWX#WJH_X4b9eXfQ95PjJli{r7~y|{kq-V;-v_Vht_^@58L z)->#(FaaZO@${+2zXtwu?H+8M)S4C~=N}Mf<5Y^&wB5^&(I|4$}&+Ji! zpR_O&?WfHKESuDlsQ(=cJl-s{iA9F#CO((I#QZ2hx$O97fjmo)wV()EA{V&Lr4L^D zRK72g?OG8^?sPEGc_>3Ycmsz4t^rprJUVXI<}bbzH#czc(Kv{6aFU347kd>xdJFIdA| zBYJuQG_rwc+41V~GxtJoYYcq*4R`SlpORlkk{6d)^`#2om~e<71x^z3Jv z$ex(@o+yWqp`}Wh`9(g7p~+{0F;}`%UqXzulY(E@bncZJTw-lzzy9GEM-v_aBww&( z;}sw@q4jk$jNapI;UHz73Ks$k*^|v<#Ax)aH+Fb0mtNn|fS843zOC^B#0SvlD-|0k z8Ps2_`d{{}1ZTOvQ>iH@ts1N?Te(G@9ART@(q{7xTDi1u}C!9jU4IIaYld!QSJk;Nb#KW9i|?3sqavWm+IB*08P9V3&U-S)Ok1usoU_ z(4Qni?6PkPn_k+hvRo*KYig8=5GWn^JZCio`GOB86qs?I8j1HNoqtt)CgjY){1U=E z;pEHzu?+k6daKMDWX*SC*<CUADe(VNRTo8)Oi2%^CWAg^|(Txio z-XdUBLQ66DLrg(c;sF#|Q%^;H`A9ufm{uJK@Z(p2r-q@KI zv;g9<;oYuc;$fTKaAb!vQaE1T2`#LUp`sc|1Ij}5q!r+sck+GV|B5B6}W3hM@8haYiRn?M+ zzV~;JchWe#}EmARRY9lfc={!MTm$ zR)u!Xw7AqN#O##}wD$9ie6|Ehxx*%R>Vg3$?%0f$Xu`^4c`_=Q((x(o&07Z9|~OEqdP202z~)foAt_iEiFC z!QYTBV)lZl^T1@vV)ytIj`cT*5WkVW;(@o}s+GWXB783pLk)V4z$;&H>e$#sW6W8X zVAUXAS%GE}47FIo6ux{hep)(XC zr7!2ZpfOhO3J}HXBsGk5fY~jigP|Oa2*-O)h!C6K-kTIylfSHMFGRqCSbsROnp^`C z@6v1P&Y|=Bcq5>TMQ)#_m}@giX5gc)b11rg^WJ=dE~iDGahXS=F6LLR+!BF+#Z}eIxW#1$wXS zjYj0+mBV+a7DcF0oUs#q0Gln}oC*d=oi9=sJNHDumCj2nbus=q)P2R(dc%v-KFrG* zRwQ$w!|FXG5R8Ibcat$V9L{WqIG%nWvR8%qp70d-vml0;{%z4ak-h30Q zZbVC>3s0|En7w!9sk&*6`18$9hInaP^woWW{uK8oyfbipU@f|;hJqry^%smqHjBo*4^v>Pp61qBBr`r*-S^RO*p}U70Xo_XvYFHc`eJ4 zxQdZ=`#log-cYW3S8v?iBcn#v&(d<}Av59ksOH0ty_woV*V2t9OHIaA()gS98JMX? zNy%e3HocJ$j9b|?VTuG~#xdk!zZ--b*OXd#I{)b=HCr!s!J;U-ke7T+Bi>m6nnWh* z8wkssp}0yJPpWAp%&gcdP1_(s`$OS|Dcql;=#0Q{N3a?B5i@M$7@I!ip=#f__}rWb zoOX8`a7yvH)rNIJzBQ0E1*$_vNvkT^yReVvS1-6Cbet)IqHa zSgVq!C&`i9r8mfmi^Xuqk-`9SHnWRZo}oUECw~C?a*m}0*vGJ@CxRXdt%|ueP2$&TT!8zROnvsl>`0Z)is_- zI0=VazLYx=j)2X}Y|^fzANdBMwjDqRihxn6_|YS2#=e(PZ6{srx%#Nc+K`1I0-h3~ zY1JvXXGaMin=&~)jwSr4CVF~ONL7%X>&0J*q-#Y~8D;t+T(q?~5fP7Y4dpo|*5(oi zC;|__+3Hol-~bM|m4I5aB^FHw=5U%;yI2~3t`~!~7=YjjvoaFl-PjMiRa@!+u~r@O zshK9zetM7s0|mNg8yVeOqA~zcTGjoWyM0jJ@TwEE%*_zBY0{3tFEBt5a?aLO2Hl;k zJ3{e2G1Q&skMCC&>a~34I3lk#(1YdcXv5EFQKve%z_P-6mCm}j^d>8juRt+xTjeAf zrk;~Gd5q3PDWQ+K>GqRm^=G*AbtZ(<4gswd!D@v*X#F|}UFOFj9cWUvly*%{k4g4I zW~X>X=@#84&6&5)6(2xnG2fSB#hy9a?Fk?@XjR*(Hh=FEz19>==s27iny?&o-w`X1 zgtl7haD>-~160;`&MrF3elP@>B$d}TmZJ_IBfwRk(+tUKR{I9YTR<#p}YafY5VEyk%FeCRti70fy6n25Em{`d+ zYGwq$4<#ZBEHz@k#b}06d0H<0#7a z8nNhnM*}EL@l6~UhQs)uJ7Vh*>8XNjtHNRkPya@N-+`Yn)YqMEuMY(+0Q-D73mo7r z5W@rJT&&{E^d9h0L6tQ6_u?gZ_K{l3h3PodB>01oByN+>cXa?Qb{}naU}`NLPMs^A zTW%*f=ECMYpixxq(s>Ea2N8GOIa0{pNE_^N7PiC;0xJKUN1_q0fa+kr%7-Vj^M=KN zr5cNdsBmKzKS;CZ$Gxlz*CjmavM(9u*S6eq{F9d8lkMXV3g-t9u`RXn8>qE-1UeL9 zHkKbM?zUzNA3ularSGoV*fE0iP`;NC*-PxNQWNHl2xpI~u;*={zW5}(k# zF~s;cCKx48H7B)4;C6%_ujM0+RXJIF@cB^AOmmdNpiQqX%^&Ki<#ndYp!9)BS+MW6 zyIx&EZ)b6IN6ub&?y;aH|K%H2Y!POM<@E7`acp}~!z@gAGP4UnuSJ3&Z;P|ciiu=6 z@%S*J_U;c9wNU zp}|)PB=T;IR%K@pP%+geK}k1Jx57u_rqi+WqL2rkBlPg9c^aNahu-+?G7<@MlyF+B z4Y6Ym5>|ov^13NdHS=53(UpV3ym=r_SabX`VrEp~6U)K9>5?{_f-z%>Mk# z&xCYxVG4j3ys;#LtSPVNMYeOc@)R{zvuproYc&iVVME|I+);I1ihNI`^&o1J<*|2lhC(fS8`2nn*@W4;O5llo=+8kL|mIyXiX z!{$X16n7A1$^y=9cs7%|al|abn}eId32!tggj^}#B^_*6(ZDP+(qAb-btS!P>90@m zp5H^`2sG1A2{@z+ymMEZm`eJ%e-`G~iwe%~_6(Pm|B>Pgx>{dXxQ$4O zDI>`wO?sE(jhNMuZEBEvrMhuK)z{8iqkG}hx=WSAHd4I8OY)FbuZ{ql`7DcP-&4>^ zfrE7>j|z39$>q9^FIKj=MTP{YU(B~UuI_A=JtyxRUhTGvqdcS+qN#Rv4htvTO~tls zhUrNaB1--2R`>!JV#Ybyc@Y2_mawK zc*{$5L<@e2lc*wK_ALxOP`YoC)N;c6`Om$Vv&aE0xmN58lCMf}ZRw_KAIJ)5&qs<< z6O#gvEq|F>plq1f^BMU6?nyPjz1WEhhRcMYZK`WDbb_D<*21Ni=O#P82s26<4qdYE zkt@n}2y}`uZ)20B4j?sJ1vg-?66e;8y$wI zjFO|TfveGzwpXctJ5bm3b)Yll+DWGLCCd0%R#wr}KTT1dy*%dnQ^xwf5QI1Mw7%wV zdDr%&YC#z7wS{K3gTtA+E}D;Z(3^~~T1pSuf!+ycFn5NA$VR+feFN7z_@(WU8j5sP zsA|qFPj*DD9mDP;bDETe+59>58t)5>hy2ypT!(n$7>X+8GMgt7;|rK{&~vfSQ6&Sf zj6FAD2MS}Uys5gd#9tR;$ijP3L~W}oi(X#A^ZRQam3^Rfz*w4e)0uP4-|Sr@u;r#6 zkI2T3i}Gb-8ym`AsZn7(_F0;px4RYzq5KTjvB*+9@-_MKBbtyL7q$Pmq< z?oG>HD?EiM79qM1v_tGiFiZ2au`4?xYO5Sxy)PDGc6`DqEaeh3jjaJNdkpxl+UAi@ zXdIQ;j}S(Zu|I24n1i9pTQUS+fjwGtt5$0#YbI?iU4gandy-@7&bJQ)l2Jt#cX02e zUXfTU(P<&Wc!Z5Y;~-(c7{3!@f64E zf-T&pTe3x4sK<34nat>X5|uoLKLEome!c3ST|XA=w9aWpujC8)BNDHG*~;b{r8!=Vm@N=IgoIz9TzChld2Kx-b=&9^4Muj zVEyng#ZO5Q?sVch$u{de)fR=?${mv4gfJ0-t43_AM|}O(+j5Pfhb?hlwdvOditdxS z`~4Y$EuiGsGK;NrQ^Z5lQYfmKmrE>NBkRK;xp2uKSgtVY&xtBye&DBdSXw2gdmbRe zt;SciN2o8B)KTu%ny#R)59TBm@#%mVgIGCjw8ts`AHe7d+eTu-F^|2%c1YXh8wS@h5?%7unh0a<$%aBeK0lCIH6{e^k_Z z5Bh*9b*h8w73cUERM2OWu^BA``5_>s8N(epas>9Kc{S+M)Q{gcAtUnsHo3noDZFjq zj#XLS4gL+w)0A9~d4$S~B0(!kZD?oy1wTee0x|b|zKW#EWs5P*UycD(eumu;sJ0Q4 z@8{U^ZaqWok$PdSIh)PA+d<|ca=9K$L#yLU6sYoBY+yN@i1hsRR`Dcp5`RT2s{#00 zE7;*{=2vR?JH^|snrDjdzB}m>^`|Wu))qzhl-^6HuV;CLlem@=IuUR?E%C@*jAOn>%4T1N#B zbB_pSk}dwwa_4BoAdOOvB3fgPJu@B(NFVdNZJUxpbFKW>;UAcf`Qi5ix|L)ONSSVE z6_T8}y?1HDh=lu0Lu?7GzMtL)E2zFr0EAsnUY%o=EHn9rK-E-p92F#Rpx~**v&vJ! zHs~#_20~Ge%6o{!+;OO_P#`35Qft-t1lN=*+Pipi5y%N)M3$jl(t z%JF!k^bUm*LTGg@n2(7EC3#Sni08n}NKH~4_D-ubjd+>uUhlQf7?edr(u)AqwfB<1 zqgsmU2&5j8Z7v;QXiS~p8|OMRi8$P@SWG(hJB390)H6#(1%BosbuNZ~*qB3HtpQ4C zWtzk>d9w?IosAkk+J8T%@lc~fB>0t(qdMcqKV~v>B(l3v>{D>b+8h@AhvNu)>Et`$ zB=eh1RToWCoyPIGSlQFNJI1@|Muh^%+Y*LQ8P5^NEQ1#}z zxpuw(Z%_q8(TF!D_Wfezu!c={t_iYZ>Xv=ov2=Jft=kUEy&BMIq2*w1g0WpTYG@a-b`ZFB_448mcASOXc z2?~ugS$Bd_h3N8a&W@pEx{SYxf?-42ZK=3EPTmc>H*zhcO};{`*7q#XKl8XX07=53 zFd{a-nq_ZmRI|2~awJ@2>&H=ws!ao=*SxU$j?8K>XOt?O}a67f< z3nXEFh(!mG<4l1d-4j@d~>*9?jMffDJg6pkYmyt0!kWv*73M*vkyN*>)Wy_%8 z50}s=nMffPq7I37pV5`8RDH{61e1b|a#t>djCiD=wPWLBM@V9__s&1;&3Q&1j}_`& zeho~800J1Guj#HcP;Y_t@Vv=O>Il-Kl5a3a#bYb!d}y<`!{D}WG9o{068Xpne0>t? zur(q-hv0HK85zWGy#rk2R=-$?nHyRWt*F6*;>#(A!GLnUpO#~M@+gf6+?5ddI?`2t z1CiLnY%yX}**pK^+CeZ(49Ssepa?CMYRlQhq{}$_f#-R?lt`Qv@i`t2-13C49k_1c zDkrbVw&m-m6|W!!KlM4SS+O%c)?32s)>}%(MJgg!Y86_NcPF{^puPdWhKSbs3PA}6 zQr!Q@lbpv4me2c||3${T#aCLRrai)2j=zFIkW86Ww~ZqOgzt9)3}#)zquT2EmVlxg zGUB2-v0_HoY3Jo$cU*sn2BkrD>d7iTtVC=4X&!_^00$uxrE28;{k(&bOH?WE*N3Qx zBiM1o5sNo(QN&O>6toB|23msyBQ+Bf^f>5jt;V|ozOY1U83;uJ8cllBY-6G{2wJ(+PEQC6#4Kp=t+LOxq;vZImj zVBin!ux&bC2o6&`V@9s8)3JyOMBNx+{N6~}D!)2S3)xNU#3pH48#F(Z7oy}-W+>3S zkJ&{Q6hYnz^wTv%I;S3p_qm}ya|DE_pvDM*TByEY-$Tm%(%1wUauFpfpwWFP^&T(f zzgW5Qy3VpB^llBrN>o=b+@NDl%gub>3QM=-nrZyVqkoUeyK=w{Q*$`5fFYQY9VXi8DW1gk<9bvziEs)B&o^lE^2bv777As#*Sy$Qc= z4S%Qi5(CKvT}>~y|78j*Eo_hzYQ^Yy)>jrt>E;ZrA~6)VKhR2x?Zh+Iq?XGWRMyW% z1G|I})t1qn6(TB2alsJ8VqIe2Q;rM%t=8e5fyPX}glRwm$*1y}tCjO=9i}<5+m$Y& zA2BTLg{+9qzaPocJ(0lqOAM6Rq*lx+hhIq$D5K7^~)Y zqecPaJXqfS%w^tS>5J?rSf23ed7?S!_yY`!F6<(ni_KKPsW_3au_dN)uJS=s_A(qC zVBSv(P3g(pRgs4J)2`_lZqbU>lK9%I7uO~rgH6&6qtEVU;26FhocdW7V1(q50e1tD zN^hw+_P5i|_}MsmG_PYaUip1a0Ztbz1f6%O+7I4s6QVa@WI#}01Dj#1H?lAw;&nlM^vJ4qvVTjppR zy{6JZwm0;PG$o1TpJGMbw!>omD45szfGB}S^aj9EY;bhTcviJ=r;;9L5PCEwFpl;e z>j1J94hpCPe3>f$dKX6;6b>m;qIr=?kz5bsme$-$2Ed?weQOf>UCL;?IudcvR5i~H1BSma~(R8eXNota8P|f zNPu%1r{_l=Z&b0F&twv|f|r)&9bJot4nMr)H=2(81YDrfp6*%F@E>TGODdyc_V3|j z0|W?50bFqLAZUnQjbDm|zPC(@qEJ+=1&!N0P2pa3BXB+zFDR5#zMn6+6qa*MiX|bx z5xutdSZ|1$&(leBHTt~JpXgUNEI*qQ^Z*E6bIoLMEahfj*_&S*{QQfRL8tD54EPDilHkt>VrLFh5_|6~bhnO@8boTlTbwHt(uGE&z=@chv2 zuPli$=+zSAGT#yatDiuxCN5R9&(B0UE*jEBlh>3x5?98~HjtW0Q`gEK3M=2#$0@%L zY}1ww!L>cB@8Me8@lpN-=Riv!PNWV7@N zC-GGQiYWv$-Gr+U2?Mwtv5tmYizwJ&CA6M6GpPW2B+Xw?5MLhAJihT_0uH0aD%RiKIP`hJp< zCAL)`Ja7db$xY-}$Ew$i1?DJ*8@aL1lt@4R=9`8ab`QY8fIlzHhwGTmkmALTH4pINp0)Td5LopT+af=!EaVp{R>6Q@?k2_S8@1RMjS!foe z9N1v=grwOc40UTqu$6(>D<40r>@_fhz9^GfhdKm6C)@U?%relO%EP2%Bl8;CTwrYB z=bK|F8In68`1)QS%L40{nryjh+FbV_PjAOArMsPr9|}tYp-SN@C&HI{s%_PH*(qr- zJK&VpO_&ZgL_5C+QHenJo_uCI4Na3K9lgL^-=>$lY8$pipz#*hxO>P}jSsgG$8E{? zFSLm!_Ju~+)C3T^9TIg^zJF9@E$fEdse7~fk>+fX5J_j6_a;Y@nIWrMNbQ zQ^2z7S!T_~C@V~s&{3HT7Vp4Wcu;DE={1HJIFUONTcEVpnP8^U1&X;=a9hLJJc#`CffH`iUyee0p`ok+}H?Ea8ok_wo8EA-FCyr;!e+V<8I=fb!gN8SuRhd)aG zED>NsEoP(ix)H(ypE5y_A%oM|SPM5&m*GpNGe^_)IK{jb2`WFXd{%K`u=``=XS2&! z_42z>%YW;ZeZ%d1gKsnLo1%r$&`hz?4*DOnV6RXcU{I~sb0r||Yctt{zwnqCT!1n2 z08$iFfHV0xj(Qh;TI(?6My2m7?@Nxix@2}xLxBtOFapiy;gEWiI9&a&HA7vKwZE31h@KHbBPkuu|wBEE}!Yrgn@sm3JbkJioV`&{gc{FtD5)SeS$Im>sF z2De8s-dO|iY!lqtf54?3S6vj4Gz7L7M-!JtS*&?*asHZ&Q;V2 z2Q95K%tRQ6y|!f<4{_&etkL$iuO^3>iX36T3&72sc#cbl{K03I%u=**GByL|YQzGJ z2;Ji|R#&w*6pbZu)@2+M6v=60%}*~Ku}byH#)Q@Ye2yfb?BVAVEH_db%NkCauQDZn znNngfXZ<&0Bo!I9Y0~`Y`Pa4yXGW4oI_y178h!GlanRIibtPelJ)qh2E$FVBTGtvy z`rX+uCr`a25Vn?V=3IIy@O?WsUwUf&p?RSYZfG;yKf~S00R-8Q{q`=MQpRo%xKBUifId( zE*v}q=$cuvdM77Y62iDWFg@KQ zYxo{J*=p9C4~8w_pXDM=E!Wmjv{c(ce#Uc?A2E@rZkd?k`}ZSm%taAD`_0uM_o)u8 zDT3F=)y14Sjj@l{9q(cdJwuI19+lbE7un20@)XSML^cIp( zr?$b?FsZ{Qsd=?$76jTJW9RMkf*>NH;AU_e#c}dp7?M` zYDE;#U;WU;6}a<5!w4*bLiBJs2DMdsVt<&}xaCG@>BC%ir3@7BhQLlLGYxv=<2bQd z@W>_)Y{#t!&tS~MIjb-7zW)6#!tcOy(%5cmAff_cRflpm~~60@Zdw37$8Gjji7sL5a7{*F8?G@ia4F)p<$Zm7aS`g zWW7g|#~wru`3XG|!r~(Y@FxjL{ZBNYrR&~WDoV16xNI@`j?(qC_d7$|=Au_{bA43& z9Pa&uP1(O8w5ygbh6x1BjETbTy2SgZ^e$;@s+NU7l4yzMZ!QmpU-~+|yu=F_HM4O} zFufKX+Cf^y^VX-S1~J)j)NEb9<(KnfY(t?1Eun=c{zWe7LC`l$Hm~UVwkm+;3^(;#ZVTiGHFl zkh2GiOZ+{|TI)H|_w(Tl>*WlS*IToma)J`DiOV1W9yLh^tC5WSF}iy^2s0(G3;=#Vg&{MyoJ*bR7eY|1 z<}SQgXKr^aAzY?Zma&Vs+BnC|QSC%?h?RSnJPpmqCxeHs!vOGrOh2vkMKkE50w@y3 zRGQM559<|Trnb@|^0O&9idt@c4!S`t4V(Tejq-G`JVWoI8v?dhHB^Cm^(UYJJb;Tu z4R?n=BZfNN03>_;I9L zCZ|s1HUb7Dc4XR8hB#@KkRTw)1*$@&yQ=^nH1cjsr1X@N=oM{=mhLs9spU+6(okJV ze0%(CvAhX`a|FLZEr>W7_fzVZ`BN#}St#T8D!{UkcLQJRN#q8Lkxu0CXY4^~IVVrh zvthUVmNxH-1sy0Ww9Bdm>zJ%{CczmZNzWy-Wr^(YLGvI6JkJ`k5ze1I6At~2@npB} z@6xQq+%P{(`6@v%K_6$ETJmct2)-F}?y_~-B@F5jEN#;TmGjc99X zVTPtv9Gx(x`=YUH@x=MPGrN)_+Hh<1a&}@A(Hu?`=xS)&-up{;y0=JjyoJIf--e=f zKOu|jh=sEa+xV|7<}vc&0`}zIb)#=`imE$WE5kQE@h545`* zL!S~{2?Xxf=jZs3BWP7J`wzt0yva-h zH0eyHg%J|D3a2YaUyK%hN$H%07n&Oe$4&syq&38@n`AtOXRiRJFRcDkS$BevLsFu4 z`hbfz8_l4FmH4Ib(=W?bIZ}>jmgLnJiWmc{!|cRq=}FhB*4~2DD0;>k$3~KueHa`l zk#(KhPOy3(fAe-W>M9=^fq&fr+RaluX#CWF#hL9&5Vztu}^i*6C-W z1yHYk0UIbl$9bp@3czulPk@-`Q?ZIrF6Vg~l#7i5r~=lg^0j_39nuVW(}k<@RN4=M z3s92HG$cWdS`9rlxDuD?x^@vTzZh3w+Z*af8R#f_7pH3wj$nHXT258*iM3IeL+2>lnF%AwHv7 zmByW^7B1m~i^_fx8EGJIHsb)+3^c#%d~!oDMHCqA5~bDq`;hoA%jFrUU4~Efz+)~e zA<-TVgL{bz!4w7XVI1z12OHm7N*nA@y)Aj{VOoR^l6Nw#&x+tLAkmFmFZFz8fu~Y! zu`@idD>-?Vn0R>Xd7f$u_BXdGEvkgIeIJG4<}F2)z_ivv*}v85PjIGG@!1yCn(xmm3G5Al+FFa` zDA60oGL&eR{AngXSohf>XNT0Kf#XovXoOAM|T;B*fmzmpM>%Z=^oG ztEl8|Cvb=zSJgc`<_Nq6@%E^wJeLSkfC(zJJ9{k-fH3pO@6HV(C2KP9?7Z1Al|vHaZOFyb(0rvaE;? zg;^B-l^Y)D#h&%T&w;B*PH&gBzm&kTDfq=UYg+~EP=2LG&>!+J8=}}eMOlrfPN90< z2n8m4{^6ViCXa=^4;fiY9Fwi$I6w~}XSv2(C zkn%8tdVh~tm~>x^5h5MwRC$a=Im5D@uZ9L(K*6X1Uj^eA+M+RgS?y&^M;sB2|GySn zPZ=J#QXjIrq<0rRvouPkN1@E;&PCRt)hs_f0@iGD%jZ;*>FV{}(&ev6p?uZpIGWXp zK;iQoPFbj^M&XQD|L?Xo3gckWyfnUg&q&t=3A?-0YfEq8oQNFu=GkFvQnrqVZY={H z7xC$zes%P@%%YsAzTRLUYlOZ<89o5pe@UWpVbboXy-g++px`x>K=|!LsZ-J+w8?OYAWqH}uc4Dy(_{UTc#SrT z@bl-Ge)njq!Fd2t%!iB#6nq0u!#Vx{JT40gI>L4U62z$3ZeWF(JUe@Fv~XD-ND-&Ca^Rm)DG@w|q{5ukR-JLB z8!Hjy)QnkVw-?kRmUX_bNWor>eP|v={o6TekaO-IQ7njL-Pd*#*sY0`+zrD3dvoX# zomqSIiXyrw<%(Q{t5%{)lZZp;37(a6guyz`kkG@?m41$<9~fCHT9X3S1F=S%_|izI+=6@dU^^|UJcsY^HntUS@>GiFij%wIvtjLZBA4lUWnYy z8)Cg+ru-&KI?KODY)vMj0uFCH!JG_=Am>~X1 ziiG(BD;=hx*C+R4?3qAFD3dNwfHHNHvNtc*W4yJ5)nJ+>9<(dCI$e%awpik`%zhaO zfC7tpY#9J?h>S;f%b0diCQ+_CA(>>?_y&OKOR0mQx!I2KSYF@ihfs{pCmU9VOvhKm z%){g~?jY@m8<1XN^W-dOaUdeQ+>WO#$wJ^zm9o09>dls%%pc74%p${l_?o=+#vN}Z z0j7W$U2ht3xx{AJ{?L2(DftdoY_J3?->*AH`Yh>oYSO{jfc6q?xBlxwB+tvlMay4d zMXAg^XlPR@!wx-sB8(3gS*Ny{v6@{p3_WTe8R(W$cTLqD)H(Hc?vYxp9%zZc5Tc@7 zx(=uu2n#G4RF83G@6M{H@w$78!;5D*J%s}tfo);5JFJAU?D!k%=DOp4V^3XP6Rxfn zLt|@W7zk=JrcgB?)+}@_o5l*TG6m`6qB+e9<%%Fv*LF+{!WSkq zW^;yiuX3H?AstKUgf=Gs7#u?X!(RcQ8mOT~?o0OMvf;?*v~m1Fl2O_>*GPLrRTz@q z)x@qdgnv2PgTD0G4U-*dPt|_JvKb@Z)&4kl+q)e;?9e%GUv12rJ(dpv9Zw#9a$`iA zcIO%T_@{L~8)6J+co%g;?d1?6io}gFD6jKOr0(#I`;JnAKVF=y%2Nbgz=3-iT{fzd zM;!sZaijmDq>|{3ME)M~W!HK7Akp~Yuy_L~^S`bDbkR44>U#_LfC=iAo;4}d7)Yij z#*7JM=mE^jODP^A=Tj0=cwm#sG7C3c#J(6U@ zl#df<8l`1j_tu?bYqm%P_v8 z(Tdij2KG#Y&pO4szl!_mOL#G5AuD{?CXsk`sTj@$S|n!&)nWRW>k`fgs9rJJbpZS# z^JH1=oPJ!G%15tkTlr1gfwiQ5b@Wm+Y{iqotCPJ#kZRf4y1y1ShZz{Kjh@nl78uk+ zx~7kkews`ojf@?fyA|Y~-)rQb74h|i%JPC9^0>urnVr976@hE({T39Mssco}spU9( zJ_DOX-`fQn0b4I~YqUm(M!_{U^cSZy=`WkpkjgL=3forV?n(@UVPY_EdlZX(Oy&pS&}Mg+AuYH&HFq z6|51jq(5=svm$X~RZl{7*_B_9I5sfCWzOYxXMZuPT_1_e1^FqOo^`(TZ-~eTT_7`r z0U;Do7-c>O#J?16DqZ$jk_R+{7u0at1Yu9sTkN8p8%bxf(8AQJs@M;=_K}`-7m`Vc zFseuPJ@}l4l0DR0M~{o3mjj6;OmnrE6D;o4z572ph@&gH;79#YdI+===udQ7KEg47 z%)&J;eTynQqnf@eo8s4M@EHa8M1|8-^7i! z{nwRq&b?N67}9}P3Z7yCO8G&36jh~dR3a-8H4V-EAn zg}28(s<+vF`Ct+C^&d2D$B_2WPD*D^hvb6HK9*$bVD%XvKHB|>*dHu}%rJ5Zh9!f9 z%daC2waekBsdW-sLX*F6fcW{8SO1$_%g6N)jeR_0snUusg5DqcQ9h}$ zoGHN;^4*$R2;X6oogL@Q91>6C40UH*sc1)yqlg+Qb*4XBes*0MS();OKC!kcoLW1v z^powSIvJRX0ShbDs2uSLxb@AzFIxnXDW^`AJu(SLH_~(5cUD(v*Vrp-L<|jd1SdZU z-C=fLaKj<^o~1Yk_uDeCxEmf_Sh#P?CC8++_q!UaitKW z(%ru&nbG+PI?OQRzyl%hEp@L#S+6$;Xinra1TfLx=tmN?9^#cy^24$9d=w;4zm(k{{ zJH|S-{Fb8pY;#M3h=9HyM?7w0g$(MUUuS#}S(n7Fu7Kqiy6`f%H7JxOY*td3|xX)OOg3WLDY= zT7+Gs8&V{w0Xq5X{9v~X&?`uPFa8{e^KL*vg{|-J$~Vk?V$p|5sYx|HS*kmWNH*;- zTl@`&(SbNXnlQp|9z4ejR^t; zp2wPdY)agjLy%QZeLTfIqtjI@q3FR?sIiMnNiZ*BS<8&@*pQ==E-V!w%1fXswcV#d z=4FN?Ck7AdU#Diq1M?AsR77TY+q$EfZj)(eQ}lOM@7qxa2SBKWeNyZx{qaw$f~!@$ zy!|nmw8e3p;6y(bpaL72QVAC`a!j-!y6=Ay_Q>p2DE}O>~VXQ zdK=bU3&d%}Zxj@V%|ro~F@*;?D%@V;R0}W20h)o}OcqY$bc=6|MmEIR=JEgYPG*F{u;S8(@IL5V@J(g3G)L z;FgeIT&uTbpB5=gd{@=|h;T;O0~m<(12$^$-4hv8F<{y%Ojn#{&^QqxN~ht{^B)#C z739mtBg`{<=j+_3lVh+*YkV!e!jYJNn-M zf+30gr#TPsN4@-qwI4Ta!Bp%vj!zM_z?&mV%0tA&2J)hbJYH;u%q5igdcu7Ep{snc zF(C52Xx8qU@mAU3!3z25nU+aZv}JYP<=(GrfG)zBMq-#hPBsAdno2>X3r+%Jq{3| z%a-@qb1FVJmVrGoSi=j_lE6xYa{?Podd|?yO!Co^FhB4dk{5z>6wpHD9@u~u<#h%^ z&8wjbaMYj+jA;`{hT@W9smnBv>Yx7F>){u4%cnG$Rjz_(gEq6hoV~kQ?+5=lD{3KHDmbq%=DaKm~6v_cc;o|r7o_+s?0@+RL z884k-TT47w;o`Y<+YA>*W>UOl)Wo7;D8sazhgwwavm9U>_yRZq=52Ca#ED|ahygIFXA&9bApkcGXu zmmvZ+T{`HLWrHayDCh38!|JZJN9!9Q9anb--(6%-P(Q20q9(@EU=)fF&OLqk;+XZv zmgo*CG_0R+#SL8{!Vct64!R{++Girq)mo|4U6F4*Fr?7rFiw7uN1OHwlresXqQv_A zd65wIQe(;C9Uu5jh;O(8;2|}fNbP|N+eflDJaV(ELOx)yv;c!L7(1qoN_1exG6(s3 z7vKl4hELV2HpA;+(6Dr$$Xl>mFg{hc3beDb}OvY%Weu?8(1<>rnfas*4 zW-@~tkfS-tvJ^ zc8<}HO;nT}$=eFXhz&sn989# zm_r-CG01YTSM`rl@@uZvhiUHz^YlqcBw$*%r6CD^?Wd{BoAm=e8hp|s0Fp^~5s5Ia zPvqgeS}4rrfbWUVT{bNHV0W+wC+30D|A5I9GKiuKq>ay1>7cvC{Z^QOo|{~bq1DT1 zdE%yB5Log!-3BR#e$aW`y#XP(s6DH1@Ua$O534}aaxg(fj0S+^gv^9i7PJS&vntdN z4zB!@qlNqmPldCXex|&m zeIkCc2uFW6BVgGUWT+vnvSD9X$0+2gQ1Thr?zzAH9Z@8Lq9fJ#L(#ChDqXJY9AP=W zHR@dmZ7-S|EY<^8w;y&wF|BSj7U)nf))Aq%vUh z@avyfnC)?cx2R72elZsT7!1jo(!0gA(-lu!*U`yXjq=F!4VaH4XIXqq9PddM;oQ=|TR}RpMWrHQX+%&p6OIXH8ak0=`2ZG}y3J*c*!3x`ni>17i66d9 zr%G8l46y<{C)q>z3k$!;O-aFqc&kj*w)r2D|Mfe;ES1$}>4@<|p{tkTp$x zRO{YlUQ_LXM8JYh!WKmyGm?cH<1rnzC@g@o$(=4ROI}@!$<71e0e4Tex@*>DX&||b z_2Zt8vDeEF8<0|VwCZ1IvrZL87wS|@`tuVOB~cW?KbFC>48tSE>GzLU{#uJ3>%>>9 zwfW{NagrPpV5f>n)(W6<9AeIg>x8jV^M6hYS8 zaNrZ+>mFJ*xC(3S(juiGzS|3G|8gP(n;B*H;wcD&&@#bCK#y*Fx(s6bK!|LP7EO3m zZfOj_xuUQ8(5Gv09mjf60J1fp4Pr8~-Bqf*G`H@0uw!|a9t7Eu;O|ldhJ?%ZZ8X|k z0H**5_E^~PceBr|7$}7|E_w9d3&bA>fhEZh=DyjQfc%Jjd>OV?1S2^Q_xxw+I?tUN z&nQdK;BdB^xmkO%ZX`8`cGo*yuN{U&t31wf$T!@D)0}a53pJBVjn*z+ns5E;(ha9whY?ZQ;ch22)DAelFF zySzu|(44bp9{>IpB~>;q20*HFqH8v&@n#I})azoSpvx4NbN#}a-#nCQKc^aK({_G) zU=kHHk%duh)s*pxGMB%pBie2=?#n_Nm&JhOM%d%kmt(*({#4IFe-{n|5-V-Yk?)gh zv9Hs4pt%M2ETvv*JmeySnE&%+6a74yx#)G&=suqyJ+2FMWUj72>|q$Jz(4csCjf5k zF>{ojCg+^9kw{liZLMJ1aZMMDm=G0~;)hfbVCx-pE|r+|Erzq3M7#`bZf#+0iQ)|u zdn`wV973`!ij4fc>HlbRX~MXL?8qUf`xzY3N}@vMSLDL-KKC0+x*QBF^Rvo^$(4Uk z9DyCcs452R@!x$wscPoWI6c=|)u=2fjlDiqB0_xBBCy9Zo5fB^V62E|dxjXgzasRa zMznH>YwyZv%XTH=HG7$S>B_8vsG0Tp&pg*{?IEQ?+iG(pAY!>-n_TBa@K-4aGYZ<< z-Rfn~iIM(zN};;{w`PATK6j~{j;*uk3wfsYJ2?^3t?tXW1!r?vabA^{lqOu!l|>i8 zZWVE9n6DLm`r(j>;;d48?0f;RBkA6>+hZP9E)juMJ|hXm=d}hjF!QXPu})bnjd8`k zxa(m|HFX(ACH64al!W5^rWkvYA%-VIBm@tIDyKZV(f9W+0u^Tq!zK4aqr42&dToNE zdKQ>BdG4YpyYf`fRdgT$7&G_VNKSbJ7#e<4mJ$mv7}|#CQVelIz9o+0!PON1TS&#c zcIVmQr#VGVwC~wC)nU~1Y&S+h*pOBOW2{4=7CM7?9MVL#%R^`3wkWL}24oOkkL76? ziV_*#hP0-bwpt1&mX)BP)B=W_JnYgO0jyc{IeIp1UR(R{rO!Pm{Ih_i_h=K8V`>9- zAdkOE3YmpMe|I2$j9MiGwdfayVB1ibSkX*z_Mf&6bZL63JJ5$5BSxbiZ2*NcsDN;w zp6-f12={TW87gI1+s2Gw?xQGeb9&x_31>VZZFjRRB}j_P`h z+Y{oWACV_dMaINbm660z02@YQSz}p)y6*m8H^I3CTg}ALl%33kjTF9N5`; z#KmqQ{k%3wHjErQX50U}ME+@@RQUG;yMDWDlK?Gyai}rm@6_KP{1*;)iHSzH%Puh& ztBH`WoK_dkqGAxz*CPVIiFR-@?WdF3nwR3TT3lo|GKO7heEgPJJpIk5=}NRMbAfX{ zlKAVOWRy1B6A{;oi`j~zAH4%&+kVALmw5PI55>O|p7?FmDl;Q!d2J+W({t`__)WQp zDSKn9YN&IWU#&LfJ(pA%GpFxZ>Sfybx2Z!2j}vpLr^% zc`YhWjY(DY-(v@I#&Hi*ezSMljVnJkc&;x&Ttq5}UMbPA_Ft#=zt@C`72?J5;Pz~I z?J{D5Rvn7kx%f~q6Ir0JWZ#OLtV}lfwMIXtWa)xI(J0SDw7-zI zZ&`0FyC=M0pC`OgfSdeFDp$?F8pZR%n$U+JV+ttr6F1~CxVR4O4AsRNRs^ZQ2;sYT zlYL+Hn(|=)EQ>$ys0EkJqOe#}3$=PSc))1Qs>!quZmeOL5_|S!P;lmzW{hXBj383M zIfc9OQ2(0U(5Y`(7mt8;t@1X;bE&U7WLa%&ncsVInznq-69iw_#wFN=#wIP0`b{U5 zGX>@Tt?3hZhbfT!Igi;+P12zh89Bpp&$OnjqIuDR^rn=2oR&1N0-DLjL{da*e;)+T z67^Wazb-mbdiD=@mD-vX^TvWUdKu_sRDxvGn&&m(r%W2F;V>)}iAj16d|0e3S3LpP zUI(e+zE#VCZ6cA#6qa-Q<(9$1UWprANfU{Y*i=CK&Z{Vz5xQG5rT%Hp!OLtW5vZ(~ zlc!UP;afNdCQ(@~DC#y8^lkpyk!FJN#{W3}-Kb!@e{=O?FgSrsb+STXZWcXV%SlhH zNFj`U4db<+>ZICCSmc8L9?AUnP>WLu-Sby6X9K3I!bzh72U_pg^f^%h{XMjI&sdqM z>@+-xWgla#f){pUBR@_GQ$tXq6Ay95?d}vg6{twYTa)QQ4v=enP5Oq0cw2lJp1sKp z&UGy)u|d{hr94mMxW=gQB%~)7kRXo$dPH$C5_@f26l*+ylR=q{ZF+isdQ;O(8~IDY zFF~Q;x!WRAm)151%b48&82ZyAa(`m8_)OE-eV@2k3JEbvK&}sMNV0Ho_A80fBcwmN zGiUZEVi-v517ZZ1hLjOR;w@q$n-^74t5WHUG|%IZ$kS#bk2g1dl3UcE@m(>Yh43hV zIj?hKu=c)RKeKN6N^lKJg${jyz}uY+MJPEsG;5#_B>)isiAHNxQ=Z45fn)I3t_J--(=p>OjN5{?8jw>uMUkfh8$7VKY% z$d#ulLM_TEN%1FF=^zA!EO%@Q0J1RxmZGA{9c8T0u=#R4x=dp&dcj#GmXU5|v~p=Z z7005P(FvBNnlDyOrKrit8NP!rI57OAWGBP3@8+hawWD5 zQyYVqc3UDINW~WhdbZ@*YVw6;4y9_=dws>Htv2u|p&ZDgK)3a53q;yqXN^XPf-6Y7 z+Jdko20*=fGuA9vPHg^J(xxDA>p=HZOgcrkfx~yVJXk#p!F$p#9y`>0Wzmu}nfUcE z^l7K=pSxi6`;?np7pS9S6xg3{Dg{(4t+wt2bEhq8U8`{K^7ZL%TiRuvVLD$n5f(U& zg*zqEf#Pg@>ll|9=KRZ-UYG@RD+>F-T=T;gT*2RaxCgMI|x(Z-{FqwqQ~eP z?*bk%Ah|I;lSIDYzjtO4yME~-Q*}WTdAoQZc=%Gi8;2%(RRyOx^O?To#Af2*An45B z4!{t~)$_+etw?@&2g=o5SQquG@(El!I)@>nwDR-2Y9j;N@gr`BaG=1KJmHO)DdiBG zFgBs|1sNa8Ks%BG0$Q(Ar@g6oL(MaN!_>%kUYr+=E9)#q@DsR~`>PN(ox4nw49FdK z#xnn0Ljb$PxWoz=@M;LK_T7FoLRr28)NK2`MTE?-)bm`;O}vTG#p~ue6bBir1$4Dk zYnSEbuQi49JV2p}csXbNHLJkqat0cK!#rMJ;4kukkFYrcH?Lt%&}t)vu;-D40eyzX zaJ>1b2j$r?L9yM~3P%=?Hb}r`s88_VXY2Z|Uvz|KA;3FIc&i4sXpAFd4AjxB1JisI z*1P9+g%=Uqy9YbOO>wA2uzMLIC}pLj|Y~rmVfkAoY zY?@rno`QlcmU0<@al=fz9NDS9sm?kHUPhL4WZ-02htE;mC1vxiXs3b#a2QpiMg$Zr zn>7(&JFC}#eVJSPBHG(rgPMSh=VKXLDm z%n%R~aG|exVq)NL2k2B${saW688yh{Bx&SY&s03wA~}>O;9R?SH~=g`r44xs+mLLt zE3gJN=u;9qFzkGgJ$$lQk>NA`ayuo<56qME;CH$ui7hM2;YVvX|Ds4ZTF2uBu%dm5SZ}lXtVlM5Sg9vSO8T z@F%@1xyeohvGZ0$X6rnVdp;0eE_>bNLbUFrekCVJff`O_pKmlKasTxYDHAS>~LVD<8{No4adp&$nLGa$Q(kcqu_2}9EWa|P^D z?VnYF^b;!BlN=4V%%6$E3rhv1K_5efq^IzkWf!STi4#yRlD{r>|91r2?V~O?8jcy3 z^BaRQ|0dl1m&%f=uzjBqxa9D8*q~wZzUyH0(sGT3w`xqT$Gwr$VMeMDy{m%K)!-{= z!s|l2UK;#11{#I{(WTPooj^*|?SKJ~WQUzrro+*taK;WG_M3gpdS?$h*%ymUwKA)qlL(tU|m$Obr@Y`kyg zv~L^`qgSappT=!d;M8EQfDm?yr-|`TJ7)V)?;O}9D@3}^IG1*cc!}n!N`^p(=Moxk z7K2`M+WAmT!r?4q!}(p0HfDd~8=7bJ*5BM6txby>A3e{IQ>_kPt47JFTqL!aO<=|* zFqdod?jrxpO;mq;i10Uy5yQ|QxjRv)APC$eSd$Z7P(Ea~3EJ?1T!*Il34qKkErI-_ zk8F<%RttcwF_gm0sLF3z?GH3`Apr00ty=|%tp&fX88|rQ2`3J<`a*fHr(CMEid~b6 zS90;LXTJ6Tgqst4_&+uOp*O05w`u~8eEfGvEns3en*V36og=&v00!ql((^Iw;;&69c!O9`%n zzHmiobGi`(X&+v03mpmodT;A`by*m#;A zU@3~kdK5LrUKp-5S#`!eSmgY@ZsVnIJ?{zknwhPj4c;|KsLK~tjkARHwtg-2gDh@C zv@zE4mrI>By>;cum6(V)5DG>F+8F}xALJP&dhLmHnl&?zDMCQ#!EB|i3=7!&@raJu zP-`AhGMcJ?EJ(7Hn>94_gOS;60zh*NyvdP|(n!dHk{plMv#LNx_*^_#%t`!k(i=b- z4$$`r>PlO3#Iw79X5ke9>~u7~qkNNqxaL3_(cb*Kz2pZs%!fa)q+FKUY#wz*?s~Sj zq#D4Sw2Pyr|D4NgyQNSl3IlqIcS6ppT{$qSF@!vU7dl8xX1g9^0r=AK`B7NKP?m}+ zv+Uu_;?Hm(cFvHio6`*9An_!elJ94!&PWoCmxnmD%B&(zgruOhl5qH^g-`u7H2uLR zaS*a2EQ$hosXNSiQ;eiGQ?c#*`3iDq;)_>K*^!nzO`SODj?xu+Hj?#I`4lJaP*WSm ztl{e8B4y>efhq(b$9^%hMPCpq<^-3iP$K7=Lf5B^?X-Z`BAW7S%TIz**Ih*GYoV^M z>>HepxZbFC+L7%#^pz_FR zIU-w+Kszbx^yM6=v+=zIdN;;eomf`<4?On5cDnR=b2TSb+iZqoGXCEZ%`Pm#oI#O$tIFbQ|=%BChOoP>s;k5f1&w8a8! z&hGkhFI5pWER;=tVl(9Di9kXy|F)2@vAq+ZA&4=fTBEcU=UpUjYW5MD+grFnmu_U@ z1$5KBFUQ)g1;2 zOW)T{(7?=9SA{E?XZfTa;jvkwEM_Wppf($tiD6%v746T|b?*#&@}%Z$eBadbGQq>T zo6cNJ9;0Xby44Jx=Ty%20Y$qKh*?4Ho8hT~!@CGlw?uv|@ZE)@K_B%^>4TeXNa9^s z&F>7ksBbH^tvP3lEH+BMqv_4}pRBI>InTz^_h`??2E^1wzw%4zbe5{Q-s74AnVE{a`AcI|+ zVYv8S`CZ*49rq8c*NB-!5V7y4N@(IQ&ZOHf66tbOb1To|Q5u$s-wPh-o5UVz9ciL! zO;@gAKGw%=_yMy!Y&~Jvp3n)X@Kkj&efg>lXH%$&GP0_ixln8a1b6Imc^2!X8e!z$ zs9g0|ve(<{NY>)Fl-Fw=6?&nmuLl=;Er;`Wh-%>T1#1 z6VHz^elQCZ7Pmj#(uW@{DfMzSxu!FvfV7s@;9avtl9hTsVaeq6)T9*^;o?;#eZ>nx zZ6#WW1hfL2JJ2xCjzxzMYc>d~C15$gZ0Ar?aVF!d2dqY}Zf&c60%~?O5=!~)n=l35 zrJ?=?_5h}2Q%iAjGX)E-3qif=lHX(wh6O-{q5oeMZJa{znAo%0{NMj%H^_mS<2(Rl z25S|Tmhqp>j{|9_G3_1xAn6vzu1@iXQtJswGs0*sth{+7NnjiBqwsw~$lgv0P20GeGYU(5xnxGYhU!*p|tPZWPA z0KG)BiGkl{wG#&&^Zx7*1A<3TVU^_pwe&pSGDCC^wW$qs}tlJm|2n%FLV4$C4VC-xWiH;^{He$}Ez^DnPAa8kM_5lgiKF@Il<`7bWD8-U zW+$5DBLD>ZlXP{%DG(Tj596_(XE9lgHv?y93It5$^Y$ZxEA1Bt+XqR^d^l$80)oFoK@ zqdlqwlNnDfI1x_S4SV0P!OK6h4~kiR;Qx}X0c+^yqVEs8^=Mr3VhfisIYGO$E5Fdj zvb*C&y2EEP06Rd$zn&vgE>piGzXp)0lMH1tC8!Nd=JYyL`=`gqbcaM%gGwNU{HDrD zIid3!ex_wGCrVjS$9rikD6CFRoC$DqLwvezM~|$gQ}0j_CJBoKYA9`1M|Iw0&b$$F z`DWQCM8zK~WJg+FWO9`6#hpz6>~k+E1{V0Vm{&ilKYHsKQyC+R9evOCPj+_cYES89 zvfyo0+=l=!*l*{va|5g2r_ev;;9?Ct#A!bjkA%gx{-LaT0}`zzQzII2jiK3?O-=H~ zv#+SKFa#>6wH6n2J7-QB3Ju)-&9Ob`4R|gb4`Vq&7j1uq-^sm%9dm|Oqx0UL|9>q( z>^}ZkYHOIj!Rj;o&HYx9_9tRh!i%YghsP0FucPP$ zL|ifTaqpByjABBB5lDQXtFVc($xQc>Sqyginx%zsI9=$!@V?aGz`F=GK5Bl*lZf8? zoq=Wua6@zj)Ey;Gw@F8gkZ5R@&|tDznsps}{>T1Zly%wSuQb zU^{mJslX@(4C&}Ar7B7~eGTC6AS-67ZHUEQEz|h}q+7Pj1qz0t!Cum$%6gjl!?s%^ zCK4Gq+^{`X0|yD@H<`IwP8>%1H>Bfk5n!jD3Xvy4J^f!3-8)*T$**cj;(Rn_}DnV2{ls-?4-)yQWz0 zXL9_hb=Zn2rX{ka{QrR;pk&`**U-MCOa_8mP5a$>lpD4vy}s0yYei~-->%AW0X&`B zsihx&8~KBD1xhZ%0~Duf`Ng;yqFNua{cM-g26W`d)YeaNP<^SEGQq=8$>6u&PU-CL zNYXy^ozBCqaSwK_jzyK!IBGshRWA-a9yDQ_+P;-~BTyMPpZU`5y5ezR5)YTt?ahmD zCpl}Q&1v-#I{OWLE)2XtHK-ZK|7x8kpoDbAet6}w^G~DN{}oA84R-H%v529m3v_a2 zkSQn2<7g)+f+Qk@4fl7t*vX$8&&sB^J_iq(Jr34}{5P`GdjXhfk!(cQTCRTzi7KSG zE0*|;iUM_*bfGVu={#LEYbfY!FS8XsX|FcciXb#?ofr?l%@q14&-hGFB8ls1XS(T}P}4*sy} z{_XU~DPKD!0-=$ohb*GBQ`4)82P|bCnK748Q2JGvMB4R*g%&BSQsoePqIOiUkPdi7 z3&dP8m^Rb<3z|~Ee|{8pwGH<0u#aG%!w&ff zD{N;5Gbf0MRYFQd%16zF9U0*ISlQqdb&}?22rE>#@Zj2Z?uEa(R6By zmH8C>&W#q0w-1STeO}mfaRuLys)fH3lDXP&l-VELVbpiW?mHi2)e;1>q!6*Td=h_l zvc7Z)P&5dhS%XvvJE+ZM4>8D6FchIZ9DxV7IfDN(`b@fQLe_{Ygmh;VH->U8 zXoAOvda0ujRCb09-oHdYe>*9v&C4LgHI^m_deZCMt@AHRKMfAB#}e1}o(xoQxYYfU z5)G_;9dB+5#i6%^yd6jJht<8zEKRyRtM^zoqye4~JGg66P$~ZjcUQ{_~~XM0H5d7ub#Uk!q_jR#j96kpyyaSeSg( zM`c2n9fy@Y``O~pGo%N#w_go&WEoq*%+|w(pyXB9Z-fU@pj%6=Fw(D;BQDMWsQMba z)-KXL-5F})lQiJGh$|%r9XC^(Mn-+c31A0&xBuU^wi0&OaS*;ym9Qbu?O2`ab5f|i z+K*sZFoT~4Qn&$%h_6kQ?p<%+p1a)%NWen&T=N1YPo9&dIZ6|7S}YE9Rd<+nc#uOr zAwt2zgKu{kxlxZm+woOyzH5afa3#8;ImQZESfrGF1mQ&k={KcP$>H`9e7C=fh7nD} zH1tWujOWvWi&xR1d{VNP&-K4CVYkKM#M8d3Q>%xMTygr0hjCgROGJ|biD(#w^o`|I zz;8k4!UmgPEmRXab3(odRJx6vvTz4mBvdQPqE-r@(kc$r6I930G=LNs$wx^g%aF>X zd27PN4B7me8U_YX_}bGaJHE?;)9&r!h|pkV*kxa<{Z(AtOB=-CrX_%0yhitH*lXqU zMSx+8O!;VC=$KuZ?c~HM$7NmI9wG1JrE; zCa}mRrRByeehl@EpF4E+Wj68Irw(<1(bwKkD?5V%uN{VyxxDPb*=YG*@z zXk|X{#NqmEcVbdEDAOS8MTaQ=ZqjQSkUa={Eu* zVvoJ2lytMGSgj0hbuH%QL*Lo;zt%6T>2IJ??uLK6w+gF|>y&=yUy#uNMQK~WL?Tr5 zN*&97uD%a=#CNHe0rk*jyE-~Wnc)15Xb_!PNQm#LPEK4Dma$)qq(0CIZ3Ufj5ueO6>59VX@&t^CvFMiEbVyvIpxXJ%aFSlr#)k zCX>Qx*$-O@F|+b|iBv;wM)=Q~A0VK?91B02c^yt=7`%(+0lk{%cyk+NV?irxX!1A$nA2&LHXTh_raIsvg~rTTl__-RPmBMM67}F{pUsN z^f;L6*Z8;qm&A^Ow&3wEI_ri3&H@vQv(E#*xqNi*Vd^9}X)Orm+-)dr-WjHLjgdxf z_$so!D;v#_(n0SCL6LM4=D1fYRLx1r-3b67Z($p{^pqfCs19=EeG&EMOUaOjV z#f^wm_%%tlf;*uZtuxtA6zy}=NTX#u3Vf3LVh3+TUDREBUb*U&E1wrqx$71=7)C5{ zu9HM;=L@$1Ug-m*kPL%elz z%mW8**{OKulsN%L85HasjgW70wIcaIgyG$W{6R%kR)TRUU;9+?b*H^crnGxZ%p(FC_O%4K8>qR>VL`p#YlnTT$ z5|K5!UfXlv6|!fMx&|9X?0SKe_|=TU2Rr0S<+%hKA{szwvJNk`!8F%MlAa z%BM??UqtI6|BTX%D=hR0YlL7-sw-vt1t7loQ`ES$vgHVKeFOl(yWl`Ed^ymq+Yc^o za#D%!iH9dW3q@MkN)3D^`i+;1Df2nUV_xC?hVGd1XX8xyWA+Jzs| zeBeRrT%<&iXV$Hhxw{?szmc=JCfc|sP^R2NGfB>jfSASKjdYzn4dsC66;PZnEUXx; zg1?Lz3&4dI81lSk#PUZgWz?vILG^O*y`-|H?8 zq{#?3zb+EO;D0DOEFz;94_r9h?b7`js zxhB6ex2diXBLy7xMMS|X{7)scUqvc68L%mP%9!_p-Oi&S5@X=4$Us{x_uvufS}zXI zvx{HQO5r#E&HsZB*x7g(V8%2v>2O&+_+^1>0?92utx&0J2x=$bov_Kfp+e%mRzo%3 zD?CxhPQ_E5wowlq*C^jh2hrQY2$MS1cb`MdeYO~ z$7Ii*MaJJ)lI)gkdMOj=yJVE5LVi}EvNmXKOUQmu^FkRrZ+!a@#euav&GL|?W(ljh zD71dd>GIk>IRtmtMv0i4_q+I_6))+@Jr_~JmWeC7K~uy>GG>OF%cuH~=8&hj3$?_i zAlSIrzJJy~OekDwh0b!U>LkF-l}N#P4YUL0@VIaFemEtEl2vkgGMnC<|8=1NBW@G@ zQiP>>fUV(GW)U&u{KyMREw&L|Y!Gr1g#~A+psu{7r7~48>kDJjp+>iRgLQr@z`({U za!}5QKxBGu{$OGMFx?|r-5@+&`ZH6icF$mKi~bdTCrOU|3DgQ9HSb75g%~f|C8e`D z36xFCXp3{CuT(k73K{QKJFY^3Q<`hj=Z1aH+pH55sscwx5Or@#WP{F8(^%@w3STJW+hJONPYF}X z286LHUgt!!I7qPsY*A}RG+;%=B_p=7KF)X3Rv(8+Ud{4rKiF5~DObDk=6^$vFzxOI z5x#4ZlfGAtI>-c|uhSH#>^Yt8_)Aqi$^wJkDTxI;gc0A+w-n0n7~{-;36 zb!P61kn}&;SNGak*aCd6Tz_t4FSqTwD4a<+ml#y1+`dE zav|7?SIe}_`&}!@_-fD~MIY;{VWR>4WXc9-Jt+=>UWv=SwlGK}O_vL~LtA(H{hvgX zFYbf_N3G7g5DFmSlz4WD#@B4z)lH2u=E+yOTqvLigV6PLv?<0se+UMMt>~z=mVafS z!)e74X;)5JJzoO&F8|4bcWFP14$Lg=8{*>I5mcgPk)V41eTN9Go_^pFB0Jxkft`$B z=lW@N^ZpakJ~P8I7}2mw1dl%$8}M1vkh)YJ;H0EgJXlo8;5YmOiDR_6O3T}(2jru8 z@Hw4{sr;D=lO^zd@t(_;8JKJ)XMMrx4+GE5Sh=2kEdtNtZXb9=-*e2G3vxWy{?MN%09>X8LzD!kTpP zDuug(XUgjR6X+aw*jeWoFzetT&a1`*^{l*9W~VOSX;wyrc!ZsSFOfk__xl&GlW_ktATlvP@6Wh$}P{Ec7=X_f($lN^Yw=Ko`-a2(iL( z1Z|lS;jL%(EPA2Y<$pvJat^2Qo6;H#xbto_DB>vot(z(Ehp6-`ns=hUqm_nl*B-KH8_XKMc#PQ;~kd3+=%;Id^+ z7q`8gjMIo1{F&A*f#pJE@P*+~b8Ttb$Ovl^)?y*V{%Kc~SPGAQU@{*2&kKw?hk&jk~jP<+7mwts&a}4m-)& zM!hu<3~)fb1QtUYkdy?7aG+4qSC=}!ms6v?e6Z^n+PVCn@?C>45EzVE6HrK&86gdT zo*~|pY@$pA8hjvR>;j%L>+R&90`49$ByHoh=al~<*@zbU13aq(&d5zQYQFeYv>1n) zRZkaSv-WU)eWJ-I^{jJMG{Dli+pVe`EMA97N9*c7ba0=L6yXOjvM(zc2;8zpViScO z4qbPD8JX(E&8OC)k|laPRpdQ%wsHVKrSVfP3n@F?1m|yLX_k7udw4GvFA_(54W!Gu zN4+G0sfO|!JsP~OflLcGFbtdcbaqnS?mJ%MjW$f{EY*%D(;ZT4-*@uCMe6y8ZXSZH zPt0%d9}Q$PiV(a#JEPdjf8k{Le{F!n9mX;Iq)1dUY#ngD1%L`|b1CjC&sPV0*EfN( zSDZK8zb(n<`p!5DsTmDARUT00+>Ct-Q!Y2#S6Lw~!|3Lt{MYK#%CGdtuoC*+=CtJ- zTwwqH!|6qVX4;`BWg5&+#1X4%o#1-gO{_My{DnD>GA`ha@ND5A1YO?ae?4YUIb2&` z7kXh)^-n%_Zdb)G0TuC^)+ie`);BX_YVHg0s@*~T74d;c>P;B(qn<0+d_ALuk+)VL zI6(i`I|%99t|Vc*2;S=fpg6qOCX zUBym=^7Q2LfYP!PXUQv>;0o(X(wtnT)2l(m8z2Gr@2TDt$ZMWF!R8y!$c&2_2&&hp z+Tjz+r>maK1uWsKeD?XH^2d{cm&y5Ci9hiZ8v(Fj+llbR+w|n57?x3AX|A5s+9V@{ zbZ@!|&{KRj()7Y&*N6^G_h}|KJcoteJ0M~U+1!ves0a@T4DMdT6p9GM#Ak%+nC!aO zukby|nh|Eaho+(2t7MHE7i(a{D@zu+ZB1R>R~n$dReU25 zH@V-{f})$SiNWLWWLgt{95lAht*y^-2j~HmqDDS~?kqRmf+)_Xv`0zYwh?vz9@VUM zK4>q77I$MrAye#}lcZlhGOC6Jj+eZ|&*sxozus+;CH^KyikQnnewV)e^e9i&U+866 zbL~O@eN127Tn-GuSJ{~?5&*W0{Kjl4ycTLCOd?;PqroM6qyou5pn{`oqq>9dDVYQi zK=dQDKXMwtT5q2yU@+J4FCLIzyPKT2&NvAa{oF-|g8k&DN6#9G1n)nT0S@t&Rso$p za%)Hh&Bq6=Z%*inLh@!)<&QxMTf`GkkS!Q@Uj#9vp>g7FE26*^QUh;Nn-g9P-bvzYc#bQvC#LW!syRZfONlXSKMEmoQ?>T$`9th(=Cp|9Vd&S0A zma7HxWiDgy)HR3D5gO(_ei>Qp?#3)=!3(jbc@C~FsVM*+NT!DsA=TZT=}bE#oK%qI zI8tDsG}c&_@g=&4F&MU&k%`v|Ul<%LD4OY#$^tdCCFF5KkHC76=)tE|tx;#K@huLU zKYMliX=OKa_k}^XKlun0eGhYKKLbE`a1qO^mtCEVYM{ME!HN-W6Y5(n-&9XNt)r>v zKuP@x{LnAZKSLQJ1z3Z9EbrK8uy1)uDCM=x&S9zws*0Z3J3JfcvVbf!UB6nD00!3$ zyui3Nk)EJENF1O%1&pIR6%&^TBnrQIax1q007&{XV2|%Xw9je7HpD^}I@$nWL8>Q$ z-30H~AP>44M=%FH>_D=it@`c=P-Q=_vrVt$ZPjKP6amOlPv2L(@Xa03n|fa>Mqz~w zfx_LkIZ$rpdRWRu#L?esk7xdztw$APf|}X1*;Yl6YxFmP33{Iiu@{o16xfeRbcZ6| zRIV`K_==ILJ83T{Aj*1E{KhlPTDs~m`E9{Af~{GZI=BI9Le76IGIFOGC`Vq5bn`u$ zZ$OpM&*=jRYwT&+@Hy{DPMsv$4f8zxya-IQfR@n2n9f81yg)JgJsT5*SrlBgMfDcl zdrD7>yU*QGn+EQt_`hGGxo+eN!j4Vv%FiUAHXWf8q@~$QqllRZVB|#7Tpn=u))&=x zn9N16#6cEzWuBPLbd4PF^Y4Z!*u*t-k&Z$j&MWD;pJdWb{Ji4;()1xSQ_5k8!s13^ zESwiiG?jU6)oy~zr7q8jgLhd+lwQvLoET&dK7O|W;@WdA^f_GC-38q;hR!f*-Ys6c zC3ZOT6;=y_LKJ}xI0JtT*lk{@*}hjP(=vle!o38cceJ9v52rzezL$n0$FG?cNgR47 z1Xnx&rM#$}lO^c8Ms|CZ@2eEF-1pBB$IOPV1O|)NQqiCftx*CB);)3ITPh3F<%4IU z7{%QJj=+Y&9o?;W!UihS2U~nxr)fu3`ql4P_+(LrQj_;ktbpO8XyWN_#5kz!twrb; z0~SA;nU&}N#{k3t{54pC8D^1p4Pv&@Bu%F$HBjgn8?3QS@QsQH-NxqHb`odfEVM0{ zF~YO#!GHsmMlP6R5ixXbUM^uMf0c7dHa0KEYE?i(GtUHIAW^>xEa3TNL&AdvUxy)q z+G1PlX4z`%j)e)hr#*g>*lFWoI-mvJ)LAU;;mSOJ#-anlHvb>eSqdKRhi0WCAEHYl z+Gja}SA<9cIiAyKVnEzH=PGzl7|U9qFnt6`g}R41dIA_bC)(L&wm7x!$*NXe(icW9@a3#>0K>tx8b3ooXILg`0Dfa(;sXd2sD;*fGiRV7^s+3-~G zQqrkG*)A3M@IZZo^eKRjOx0jq<)*!G>r48Sc`AzeD{*S9Nb;W%5AR&=6-;>8X4}(h znp+KocA9ot@l4muk0+CugH`*t+53pB*~f-4K&&i=fDJ|}fe{MinV2$MsO;>nbq?f2 z=mV1spl*;f6|vjf zJ79yK!Y3caK;rf!fg(i?`Sq+xwo2NxjSS3DF797o#7hdHn#)93bqW=-%<8e`Q_iws zR3k?uASS4T$?=NKdGyvtT7G-aF48rtAy7#RyQP!V`+PBNGA^~>7kCMdpg>|zoe z#9)=siKvZt1SYs}9OY~tBw#Hx>m@|VcGba{;;+{Uq=PjV`ZHZJRYXA~7Yk-hOsJrz zPCuLW7^*6lE6(vJhpq*A{hnDDeeB&k`(MZ>`qM{cA9y@m;w5c zT&5eZ3T*yjysD^?34Z#OFGl_mTu4*akRA${dJ1y)yEaPYC~|dVrmQRF-y;Hd_sd9< zvU>RxA`>ijBJ#rzLW;1emsH7DxTgBkYhW;yQ&{ITt*P)jfu~L3CTpsL7j{oY_fulJ z;-zV{sOB2xi&SeKmQ-~J-J6xcfL!QHS&~Es~;HaS(r%+_q2a;(sEN#QqYe> ziwpx#oZiJz<2K#YA6^RVKP>0%_WQzUnEm>6z#I)j@ZyhNA8!Up%;O6SQFyR&>-5Qi z|BtT?=D^P}|C^4?-j@T=WIXT7bE>}aP+uOh=nIUzzB{1fe1ptUe_KFJq+EaoKc?Z& z23G2fFrqe|gX2hV2E<~m9Gn0LSIFN->e1WU2qt63-eD{oj3 zarzTj2(vKikPBdbcPtRjA=@C*{hWjww(XHpU4xcMT6#3p=N*d^X${^JJ^s5Sln?!g zVR1PEg#)d4H1u76S%_UaFJ6T4=0Rc8&!0$PfGL9hfwNsCRiky3yKRCE z1;Ihxiodu-n8`^~gRWI2_?Z@4TSvG?dwd`KM%POx_}e-C$=n&*r2zZWz_*fDk2Bt% zZoRKJLK1#dz^mq%Kk^2s z=J3*T$(KU)wo%aD7UR}-V0Gac)@XCw0@W63j>0AU_qX*h3@3U%M!g2??k3%@+-t+< zRD_8fY|A<1S6(f*Y3B;D!=z5XJ15W|4%k4<`hq+-Rax8?SZts_h4ZtdXgKa016WhR zf+AJk$`Sv7H!o^2=lUgZfV)_nQv0k;F6m4#o7S1fAOo-68CpPEe`-}|#*O=wnZiN& z(zm))yk6tUgCM*g4s#~IUjG*6kK1;ZQsIo`1xC}`BMm}NJVp(R7?tE*M$K-PRI{7n zMYax~yA;aDglIJN_;*P(1M8O>v1*~9Va)=zBWw|7ywjVrE0{wWSBy2#t~ z>PKBPzU)psJN-u^g#W=i!SvOA4au7r_i^>UYw8J~i9-pD2d{HetT~WJMF+Ozg@A)r z=mu>-+2@WZ-#`o=q30>^ynshUS;6yw6*oNrU)O;CT6=_++rBa?a^+psMc=%r&wvJb zXWE`;S00S25oem@Pk5LHR*5g8W4QfY5d3{~QxV0au~((-Aw@mcvVqJmZTBRH;nyxh z1#|bs6S*_Wf>t8Dp%=4&Bc;MLpMlvm2ZOOm!ge-!L6UJv;EGMie#lYD0?ypH8v_XI zqJ)T**k#px+z#pa4M<9crfmUWoj7N&cdHLe0BRf82|95e5p8XS^xjR?(;FE<1t);n?t2)u-ke|}g_y#7B%)sC>40~q= zfls*!{&-k|LcUm%a9B+d0D7GrU~X&G?p(Vuz;KTjZ(5cPOl7ag0L@=~Xu^ZS93eG> zB}$x7m6oz_Vh+#5cx?jRJ4c^#Bil zDg_c=-ln|&^on%@+@Ug3-Nte1e63;*~At3vA674%QL0-$& z*BuXJzKqpJ@Sy?}{52Q0dYUoComzJlfQ~vK&bpe7S#5N9y9EE-D<2<${}ZNNrrn~z zMvp~le1yJGD?bd{il$b6%A5BBuBJi!B$!DCkdB5pKR2~_^*~#Zx9q-F*oue}k*ACI zh?;#4L~ce#zb2I@JskGe;2v;!i3{jE)x;})-u1*;@b#0{bYm#Ec7Z_*AxwpmO+vM( zO_tNp8cRaE#u!x|rHKzfxii;TAb_K*L%ZhanVlgHV(DtcK0r>?`#G*1C_*4`H1-T=Sa6bjFtqJEU{>(s1N2OX-GwlaPqp-h` ziN@IZE788D0{^op^u%v#kIz=^D$k9P_-Q&${VaXEBMBUp!uJHAaO6Rc)((9g4bxnK zH0=>%osAg7JvlTS)OOj1SHF@<5iWR7ov7`&`;;!X35fQo-fV9X)U&cv4{#6dA!2-_ zSv%}I2~uMQ=h$)45M>cetR&HHEux+O-5ms`&52-f2@XE-0kk)J7J;B!>I+dY0)-i~ zx$Ply2^iFNT0V$7jrQVlLP<-HfY}UK)3AwWV-@yfK<1@W-vzX%a6NE5X|9i?iON6- zUJ~c1#vk34UX7}gPhmG*psb#)8n`U#!dVo->coYirT&c7=y$V^ zbC3--J)2%)FGG;Lqwvmc{P1JqvTs3UlKpFM&IASb(?GgV@m_}~#9~G_`06vT&V>HR z)E4$OlNHhHO(1tv*pg5Mp>LQia2((XLz0(D*sEAq6m4}b6C|}*uwbD7FvK7w_=)k? zDJuj#@6=OFvumlUfc1T8>U7h&gXu(qyakGY4P|pll{Qo~%OG?A?_$$jQa1B|bR=vV zfdedgl(_ev-wqlwY8OW@Ut(#udwXafjlDbI?xSXBG5?aSmK6T=U`usw{5L@f?#pz_ zaK>1R`Oh1%lpNrnt?RXZDuk?-irms!!u3K3pDl=`YgPEO6Y+liz^e1vU8kkAC|Lgb zQsf)g0gIXae4VaYcva`F@4&XK?o?Db<_ID+a+GzFD!(4-j#3u(|K>gtZ`qxW39xV; zC?=&aQxFvFDEOa0tLXskK%WRI~CL@e*iQCJP6pk z=Oue48;~LU5yO7+C~>(>J8GI*uHsVeY4VJ^ZINl+-4IU7Pv)D`n|_WO3obF5hLQ(3 zo(CXp(a_~C85(HHB1Pn7+DLkq}&=PRPw}z%ac(rp-TNisezd&jj9@Zo%QxN5+ zJD%htpJs>~Hc!6lU;vzc8R61tNOG9SbiBIlYazZtLs#$V(uub)Wf_wp@Lnxoi~cvf z;g(0!G>Qi?aAty{i_Ur4I0C|}4b}HNRw8yVAj$y@pDd{D{q=vMJSAI)9ritw@a=V;ro$~$gD_1JqX4bt_A-dR~>S8u1>wf`8RWKpot#Xs* zSpQoDjG)2MA3OTNB#;p6S1gd2b29Se61K$#QkdS_waos#O!G76@8iF8WpS^l#yN(la3&qiA|z%`m%obms$)X)nVq4 zZ{2R`6=s8)x1Z z?{@$}cU47l2POGFIdsZ3Ra-C6eeu9|ug;bBpbrhRZ5Jq%`L4z-I~MVILdbDLm*HAF z2tP~GA&aBcD9-*_FbyCKtxHrDpNTOnC@s-n&7k1FR-vOU61^Wtd}njQTQ|zv32AOc zqL&(F!jDYO?OxD0dhFrdWYv;NPEMP2OH(I7YEKE2?Gqr&5Mi>bGJPzY=tI z_A4M*9A7P=*t{}Prav1SJ9?pB291bRe#Y)+!=Zjl1^kGi`SjCTj+3aJn~t0f0xsVpBP_R1KuA@9m8qVB{kQvfpIp@7L>r7YdEu+W5=2Y&U z;($RIEknTMHE=dxo(H%{t!~)7vUvH{axpTM7pXeWB080d8dXwUcPa{|?lA<=L!Ca}a?_*G1v> zf+WF|E0u5t#S}g@6UJEefahT=UzbNT3rxj350>2|jmB`_Av1W-^R$&>&NGFX53~>IBm^o!MRv`~?x1@{7 zBQTAyy8am@^#|&JDhYS53tdOLza>QXzzk27DHzzJ-8xSh4fw?%fT$}Zh@+3MMJ1)@Zkof*06O5vB;bH%Ma9COfPMEm2V=ie-G&ay(2-DAU%ZuP;~J;|TIBG+cd%UXs-Y zc9WNwj4>L7DBM(eeC44X(s=6sORC7p1#VDn#`HiOWq_#nc@g22aSLrZsSQrl@wkGM zjYbfx-F(RYrAmo0w@Su(<=;!K5+DIJS_1Jnby&z=umn!~oa-&uM*g^};nWW+>kpNi zW4|cw51rL>xhoa}Bo6(sJ|l_D3W{L`ZNo6k&RH1y#_)l@Qs+OAzeoKM9EMs}KWlJ|^Y$x-u3!+jj zgyhY&&QT9P$b)XvQ zIjY+PBqho4?$h#}vbj0+RtZoY#ef+^y~jF?S3TX<3D5t}6=-%dZei=%uDUP_E{glk z4I4cRC6}m(p!as;_xiptkNNmxjd)+v3YxR!{{vhi>UvB8fH8Pc>-_qhMC5QBxBf%q z=Nbt^0cBbQVO65tb_%^`LLJY;eIW)xfau#iq zEZ6!$#silohy~j+$VqaoJm}~#fHgXBgYfP=Jw5!TWyvwZry>_ZI}N+oQy2jG0cN7B z{&a1T-#8_<;9D&aN5ZY_-k3tsuK)_3g%y#vAsbc72Shix<=-@d3HuPuM;$nsVH=Yt zp^LspEnXA@{2g1i4>ZE3MpIFZUMh`j;6mcu8QN<~)bQj7s3&A9s^Vg+8(U4+Qtg0u ze~5HwoGWS5gL}&d>Po`9mmvQ>c-GQ1dt%N$nrw_NJ2`>(mYxBkd=hryr%n$56lT$% zqnDlP6gPR+yb8lK$gD;vv{q?{4xfC>z9B z1=1&XNXr3^;It+h(_JcsBQ7)HNb|Rkg@4g~P$2gh__!IzlBcFtB<)X*4;yPI5!p4O z2`xC2AyABFTm>9Y=B#V=XUJO{!MpHDE|5eGkF&pryJ8rrbaw|7FC|#QLR!0w{Yb3A z74=p6$Qxn0NJjg+^$$W|5(FtAcp~Dm!90kzEzx3Ak6-x&K0O}b0xp@_3T-ajpgRR6 z;<4SQcQ|p2gM@mxnzrI={)`+RLuM2^el92#0}*ka&IXG()RaQ)(TJ?VO4eoUWuanE z72cWt+&;vj`3p^l4G+8Fh)P>mOV+*|6gmC|?|=iBSj`0JuAYF{j(HBxf#URON?_v$ zPW+ab7+#~LOBa`XPPd!Ii<#K6yO#jw7iV!Xmsxoii<9WkShW7Zj_=xn`Wq<=&Ez3< zWCVNYm8ZB|IJl z#c9;|?RQ0{?R#)`<{f{Z`oxb|X|9V0za=Z9N2BK$oCzL#^EiiFy21o8z5t^nXK=8w zzt%gftdO9zIu}~v%&Xigyh=64)80E(!w_B!zt$g;FBEvQP~0JDnzwB=Tjj(9eLov5wzpHktOHLwY>@O9lmr7Y~1K&+f zH5DU{bE391<^wwtuzRTXJP4k739HVR`^q0&!mc+QbbZl^mL(%!vb*D)r4)DhtBDI6ZPh_>0fH?f>%yJ)Jx9DR$1#})u*+$Uw6kQvGUOezR}+46d2`w6 z^nbeS*evbSXq=U|RZ~gKDcRK9W{i5B>4?yp=MR-C)s1Xi`HgA%pzEE$4;~CK3Mynf zi&AxJ8GzNrFiR{yQ_k`l0*0+itkqokWj%bWgMK^BUfY8=dzVEC))+Vz5s4le5M3g< z6w;+5JjsDbBNS{YX|9_mjiUEkR{v zQQkro%cTkrM;vAGNi*y`&Uk#1F6A#ldn_MpdAQ(rUdh<)ri$;oVn33{U%uGRSk77D zmI(y_s`pE3${8u%J(mI8Qx3I9LOR9oLP2Z?*3+rMJeJ>_AKS1>t(gWyI*PnE6=-p% ze5=<>lW`l>1ymZJqLZtn6-_q3E2z&r+#VK-sY$8Xu1Ey!qxRS?>lh`vcKoa`#e z*M|RfFZSGCB{=8;>$g4Hq^U=PbQrjBNT z`VL;Gx@y;fdjQ)Ix}2u29jT<4^v-jqpbCo&HNbLW;CNe9m4sNq*^;LWpaEuhS#s#0 zmW1=vdE1*^kc|W0a~AW&s-(Y)+(}puDYBNdGf;(X6ZMfWxbQz{3`Wv`#o2J7{h(1# zW$GT`TTxB=_c_J@+1Xfjl2da1!J9Kcn>x3j%>ioifzx4)?E94d7&@6vq( zE#$m{uU|BQeK^_aPlSQ|oJpR~N}%T-wp%7r<*e8KrNj=^pq35zh*0ANE(i&4{L_M_ z@jBQHa8DOb#=^g~DPaK0Xy7cdf`Iuvi&)FBH)4VrnOJ6U`udgtx0 zIH-dZBrV?;Rb9dAnE)~9!M3#*EY^K654+lXH(%*HMibL&2eUsgM5*vs;)o$Cq0Q{Z zFXK8=Yruk5Nf2N?J);O(h}^fXo=uJI5bPQZN@mLqo5DQISx&?`Ev9|Hp{BZ0gTdw8 zq9HHBR*MNCZM?ETP}+lcAy{Q|E#Bt|<&MJrT*US)=p6#)^7Xn=91ANc2PU!i`1d_@ z`PGH#86N~LKJA~;;Eci@Ye4l!$0SipQ0yW9%IqS>XXK@!LrDZ#fn-rXD)Q?6W~ds3o5nY&4U>1+QVx|H&+5y$4Y1Rp{Hvi-0_q(Vqr15221d=v^u*$F3pw z6pcI}l=mA=dva00fD4)Y<1aR@Nf+0$20~K+t&Db1g_wwp*ZfzhLRJ&9Z%Bw4ERc6m z#5f}0-^>o&gwFLk%^`($^v)q7*EoL@xF;gYSPZs9} zCIm+mLBuEF3NeH!?gDVS-7f^mJur)*FQTH){I~jUgtv(TNP+r$#Mo|}{_t?Ha~(mp zXt9KHF$J>YW{HaAm}A2!&DQh#3%&`SAyu7+MpL7kGRVyAZ(wpB6_tt?*0k=E?Gq$0 z#$A>T#b7evUZgL7LIar|*Ky0l)&#J)e9uGM76u75pa*Hus1jawFV zDy0C8Ywoa&=W@CHE0okV`QYff`2KF(_!IJeiDWUrK^*;o-Ffw>%bWIg`xKuE>vG@t z2p-=$!2?2!3TcM^Einbw<#P0p+6y(eb-Js(GbRKPmFTKJ7FDM{+z@9ps1t283_AFX zzQOdlnnwgmZrh=ex9JEG3UTRdAWJ9fDM{wYML+UeW4Rw_zFxuw+}yRzRFmbxM_Lk_ zE*k(ROS7?}Qraq0f$it^UCf{aBsU0rG$%b)cO+$L)8yRRKGqth@yR#aeq(ZfAn!jC zk;kU6uJge3(e9><)rC6nMiLsF(Wb$U>6&(cT)eHVA^XG`ri09^dPhWQew3z_w)XdF z&oB`db$2yMpyr#BTNsQtA%D&>80p3g4J?%=TZX0F+8h|dGmZv!`p$mfxxBf=uh+)m zc2Xks{6C!UiHZ%=9PnwLq}s;pauEeZVprQNIt55ff}{@P>+;}=hk}kxA4k+TBJGXG zabNqkBDB3t<;HaVxN&2^WCC9ObDUA3OEUoZ$l+Z5CBARuGU^AJ=72y%tOHe@VEfMW z(Q6isFX`kVJaYL$*Fcf<#`gx}K7e>jOLfk7HEHIGh6ls2YN@rJhO#-x+g#ctm#UMN zs-gyy)__D8iI-Ig|%veblq zSX`iTtRlVv)7tH{oddgjpT;5K6E*Q8>1++t>9^p~l4X&&R~WNqN-T!5{Osi{$N;9j z401a-FTktxj~&%-K*o8^QP9piwD_JbV>!p$3##o~dj@A1=V|5$R1lHVw$2=|iu8Mk zvn_WLrR!5ne-GY1PvsZLN?Ql55%0P`ptY-w%Bu-yu;S1Nv$^K@|Lmc0KSdYo+^>;VSswF^Q5B2AX^x<$WEw zicFB~SKzy~>+nWFjprvOo_8e0dxJbIX@>s2Pbjwwr8sA-8ZiJ0zPES!G?AKkbi`2! zU|et3w7Ep00-%KzKrO4q4;a`88Dr-uz48nlH74x$x%^m`P_c zo(|uMA^ANN&z5>VClf#zBu;-%*lZCs>urhWQmC<#?xjew-PsIPqd`_T!vvS_7IB*HRuLlO(Hp0*O>l zUvLZ~kXzRrTtF+9z5zxd#1Q1Hs1<|DzOh;6tjG?iEThI2*=ao{A}mxEh8GRi>jQy9 z7%EJgK{Bg^6++yM*p}1!Nf4)88@luLX0YfQ7=-%$x*bWfWp6}6WlXQM{$AR-ys{W0 z^nUSnYoAGIt#FmS`DeGEt-i%MpieUnP-;-be=fwVkbgpK^FuXUrnE{v_3j7&I^o3) z%(mKEF4=(Z4GW=sC^tdp^pHEO;+noh#6N7t_%d=^e6b#1x9O_qIO?Zd)Pd=xdyPxQ z4sR@qHZqS}DFmJV)|9CsL$9KPci7xXOQTsc%k9{_!Bb^em-GUJd6dY&Zq+FD!Y+et z8E(6Ky`Tir4=avFCO)+^saJDYZ06x(-L*+3jgHEw?N19Te(fOt9gkWg1_3350|3!@ z%t8X4I0ok%)eB;@Eq22kvBo!4`$ZvQGjQHg+Uc&P^q3~6btXjx(CyWnZz}&LoC|If z0{hhSeO2l0ZtD#j++qNSBVZ;y@$r6yylXw-zE(m@5MF9V7z;T5w%2^UbP5g`NGS_> zAD~qDJHUl^)+yi#NK_x{$VCGQ`T!$5FEa=EPf&IC0J9O~LyzIem7NyCaQ0FnsO4Ed z1&t#FWq)T@gI^Lvy z?M^g6tJThdFRCkaSqPbNMTSP~L+CNMLe~E|mDs5q-8^Bg&9{q}q7o;eFG-kXsEoA6$-)okD!<^4=FO6HmmaQfyG z?2PSMIG~2wVhPTJ;|&4q$aoIJ3r?fl#$vmRu|#JaFwNt-q1|&o6IEKmY8fG~hNA$q zw~0(AmUCSJf;VUM7>)B2^$F;3aZ2Gc1W!Gn4`=9zUjZRWw@+X+`tCR5U?WT2^25lX zz`3lpjSsUv(}HUs(24zkJk%>YA%LQlq*_#?P;`onoQO7tUvmw;vN2!!@H|0|(N4Qn z{nw9zFEg$SnZ|e5O}57K^PT@_Hq=D=GYRqaSPmKuVKzUz*T~VWQSVbnt2Vq-KBhTdH8!*cG-2NX3uffwb)5hU=KVJWp zH)&H&YsQ+Xpv|MtIGOv4(CQ&Ba14@DpJR#bWti%nF(dIi!*# zF}x9^PjmUvK!J7ZT?<_5h9--hw-|GD=mC_UXwG>9uR+|Qb7Yde^hS?>b%cPdh*&9$oMQVXa$x zAD-0dI0J(3viHK_+WzccVD6@3O^*U?)Mu3s^eKst%!hc344YB)8nK5v>}*j#AX`UBw&iu$=r3;a%{Sp9)^(NEJ7{3A_m@B3rPm^Qpt6aZH z7SBBCR#EWSM&s7*ySdi}GpB(fgZ?RoXub@Zds`96EE!{SgJ0`mqB-SM6O=agC?bGQ zSZkJjkAR}hf7{UIe$$|87_Rw(6z*famtGO`Ph4wsTMA+^^W}7*QJ)$0)n`sYJ0MeG zJW(4yc7@jbm)4e6t-A2cZc7d49BlcdF^g{b^XR(B$uv9rhe!S$@HB^+wA zA~vkSl8imFMLTqi?tVWR=}jCjIV?K^m}Ccg}=(_`l6oQ~+-PFQ)6 zORn2M=4Uv^6XoxO*=SUL@VjmwBfH=fapM)y6vtH958zk1Of0pf&iHtg_J9wuI1F(!MYP z?i5RQGR(78ZBOOzyGY-IfNq%?f|tny_{b*NLj@non6CK=JFHWH!O6D0;R2o31k(ux zos%l8#q>!Y7P0=O=4tOoU`AS#t0V_PiB>S|RWSNpOycL?Erf=M`vD7H?gG)vCQ-36 za+zTrVv@dU3^?xVO;5W( zr$cxV6RXCY*(y%2dNDg>5mUiI_@{o2lD2QrCaX{?1)bO1M$$=L;?I`guOhAu5DAr9%TcE-ucI5jH#R@E_p0fs#x&e zuzCkR+(-q%9aJH zDQ==gnP|iWNf>l-v^38F?~xz$Yh`z{wb})WnIYc_rpC9x}0F zRI!ku=|+iezUFZ*A{BGp7~T3r6U9mvDWI;J7@eZSTg4BZDW7+uS_W0aTa8b(P|iN? zb?ur(-moz(3k(tpSl=`HG$+s2zn>KN?K{->(b4dzVVFXV&r<(_A$n0SEYvO3Lt!-< zO1~}y_HM9uYY|=xFwt(qnOnE<2UGzw$U#IbG6RCOT*wvE1Jj1szZ6{K__x0BVF!m>YrH)N0U3PElE-z zn&PE%kcfiQqy5{l#(d4Eu(=$a(lVYyM_BL_10{mPNG8Axlh_AG;TSxXN!nit9aYHm z6m4gON=(LD|4YCLRol?}bB%EModNSt7rHPrXKfJxR8_sI%5Uy*`32=7MKrNpx-c;A zNJ*$we}dX&kj-(>Er_T14VK)IH+vHc-%0NmUp0`_JHwl=?mSGv{-$;}NrC^$lA#Yboc&*?^mgEX`V!`3% zcLpd0BG|u?s?p2m^7tJ%sBs(A%_5w7(IRh`^3^XZ-vop;J_h>LX)C2Hy0r0ge5*$J z69V1PY^V?BCZhkv2=u z)XAAc1;LfV@zQ)|zj@O=Ev;sqSt;&e5z~lG1F(F&=%a0C{n=EjAfm%M($XhvfKydP z(_yg>q1GT!bt9CxcpTYgu6uE9<$NOZJaCT=66S0FcKIB?J3ZYEQ=qU?!BJQ`fbE|3Y*Nb-%`kvV z^o!d_TB*LLP6Aiq7;c$e=K!>CwaX*i6$UJ6%Odr!ie^bty5cn>4Z1OBd=rXLNs^c< zcYRk*)CUM%1kjsr9QUzKQzJQz87aFG0yw9HKX#yZet;zdcf^PQ!z>Abq{As?mUh3w zLYB1!NZ|pO$9Us{CQ>5_+Qwb8`P0)G>u;;M^SWj6V0nvOs~!_jTc(caF@HikCOUZE zTfuK_9wY+L&p5T5+wPW06O5*&ME-qEj%-bI;Jyq&r_^>Op_H0s%&t2wkeKgj%bO*U z@VPChhbX)P`<_8KJJ5Wr>|wdtx*Cf2oD0@@M2lP+tMv_MOP{Vyaa_7;fTWYEeCMf{ zJI+`gZZGekAPo&<33Vm^Fw925he%sbNz$i$Nrb>Exh>i#~sqtyaa%6LH$&R{Kp(uU7iMTqq@>`LIi zd2vLm`g_uBjphIa=OSX=9p9q%3;nedY}slS;CM0x0%hT4QoQOs#MaY*v>9cJyM@35BVN|kIxlMh36lj<{EU|1%}h^|W$`50=KX~aZah5W&< zECkRa6`*Bq>^A|_zIaq)W=mMv6wbu1AHDdS;*9kbVmjmdGt$v>qz}P`Bl6%d>&+)R zU?PBvT=y^`xrz6F07Cd9q{Kk5%oynTVNr*AQDL(3!Te>r8d^~$J0Ozy_m?J9e+({E zqG6sp19X77)P8n_vz4@VpG^K3u29Vr6k0S88;h(^N4?p%NdC9xd|Z|8hON|3L zBoucniXpA9EQH!C9XzcXH9loxhv>e6sl+;0Bil8ND%cQ7!5Snx6t*h(!>FWTRUo^q zZAF;ccKaY?&IWXLg`~XXspP$1^+Hi+o20jMlI9XY*j#*- z-7SpIf=fNZ88reyMq1?l;bmKUm~rR% zf%?VNsoQ9`y?Z9q8p^wWs1uRXvSiPj?Qyf2E3O^)34g#J5pTTd4M+R^Ra$y-_Ff}l z4WCpt#P{;5hlkz*mI7ZHqU8Drq?7rT-TX^nNsFT9RtMG7-q87;-UpRW_qnEKK@ji< zYkx-QY<9Oaw6L+@25$XwQ$IJtI)Cu!wPpIuw#po59i#bR8mbyDyy*QiFx{fa$OzZ0S8qQOBA?Y<0I&tUlPO>|a`rXwDi6mvcDs`I!IgDhaNUo_O% zd@4JI;@UAW{jmg&r13*dm7xcj^LOpD&~ARZ&Tc$F-6L*;V<0HBI>j1L);tpEQU6Ng zhe#M)U&6N)r|hFi6|PtW|I!)Y9Gt*x1?^jJ0A^tFU?VsUqH9nPyqwZ84|A)~*8%=-F>CeF1m)i zSn1cn2Srr#_c(#{T%YxeSEVR2?J(&C-+gn3GFtiHnQovqK%V(?!Utp~+Eg6!2|fc9 z4gGZ|FL5#oEm3BaQLM`)Z-er?M0x7FeTr1-ewvNiuCV}RS4+RDbUXNR)X%=YxMJa& zje{}9`P1*7cC_yFz>vn9@4kE@^pIp8dIXTg1NC=n-$+{;%d@*Aj_@M?)l$;am(&>o zWZ*|*3nFwqC~D@j+Fuo+#Df509coU7aG7f7I<^XEh6~2|9w%DobZ_9|xPITlH zX`;0^e9)(su8u$tCV*9G@jYiW<{i6Qp70xXc)}`AbsxDz1$nP7Mzh`Je#_wZPD`wq zK*_t0z!0)w>?Q|QcIP!0gHw~C2nEOg6g{0{1a9dUPGUZ22xzChsf+#BTFXV#eoxv@ zeZr7FRdm|`y`q+wa757X6O98QlV&s#!3|1_64Y{lr;*!Ea!3CeYDVHFB3tIxvQ*0a zHam@Hv%rP3aKtVXe5(-P(?G+o_}V-G8!R1C;7%Wm`#C_%PqCO1j`0QHjY)txlfi>x zyA8ji9552IuIBjV?rF!!LaDb0z$=rx@-oyAQaZS&>+$~9$|4$3t75Q6!+rmajXeYa zBruw4Jdtd0!vRnuOYy2Xj{A@~?2Z~G;6pFQwul7_PP}JqNeViU1kl;Ra?!8*f7{%5Sqt8LMx3$#JPB@yQUyz z)1V}n{-F|-$p4w-ahTlIPio6iJ|+%%p*xB~gqw=z=*u?}a3b$}k#uUa`N;yX`Qx^X zTW>!DJFw@ z&{5emzE{3HqH{!`M?Rwb6tmp5e2=8OhzRb^gym}Ah6&4YhkJhUM8zsTkC&#ksoEEI{1dF-!I;=@lmEWb0V&&T%P>{0`aipD@aUYosx9iU(GtfJJMZ;@N@^82 zZXbzfhoEz8NJtW9zQs9sgTm|NJj~afP?4USs;v&}>Pr8uC5iu;)O$Pw3IaTIaAJk;tz%K<#`UPwawO4jdeFuWpju1 zwQWI)6GXlHDTGn2-wtGrGe~?@)nO=+0Z8AqGh~o{z^LJAw1mnqdE$K?be}_%jTk)c zc&YzKDPz=)#SU;QE11~+?HwmUVx5J9nJ%#{Srt?$d_2)1Hn)|=+h zqoy|iIT;a{(H(ixtA6!>QAVA@u~=k)z}qH=sY7O4V2*_^+s4KbOCo`j06jbVn?FEA zlRctaTON9VHR|e4fE-|<{>`ONC9cI5-aqB&k&itw?au&xVu3J44{?f1Aju9-Bf+Jo z2Jk}6k=(=VezxFe8#+OsjMsNa*$0kdqa^tQasZ4@#N_LT$LAC^SAh~FD;Y;m5WV}O zL;9;~hk#co=#|DRUF_wfLOGA4fnkZ25*Dt|r9%FTbYkznCI58=U?F^PkK@&5# z8agr=F%${DfALguCw=--%TpayfCkd?1~PiA)it|L5f1Zd;MAlJpvt;0Xo1m;z#@3U zTPdeRTac_7L{gT*B#7mIwTk&5=*n3gAM=5d&PL)F__wCmV}Wzuc~Ct;3}S7Q$>j8Y zRkDvYHw)P#BYMQBt@!CE@^bVsc$zbRqarlh>f7%Be}k`A4{O=|I%=Hf;acr~W`%~jz;nhj>NC5TmC!42c@h_Rj5+~uzuPHgIy5l$A2TX>h2{D8*@09l@oYkoF+T8Pj{o0M?DGaS*;HEl%ztvK*6 zd&kAVjn-UhSUm4Yh+XN*v-X9bepX&k=^X9>`y3ew;x_LPinDS&lv6Z0$}{TVb$%#; zAL7gx;H8c0&G9Oj27lKE0w>qwD9CUYk5$4${YNjU>r5p@m8*;U^YSW-57zXGdyDm( zwSeDQR@RN4*pnX8eny{Xds|8O=e}p^b0ou^3)esN`e_-BEbczru zas(};10;wUC^S2=&n;X-L87y7Yt#F_4Eqf&zR(x*BUBQh8Pa*4>y4EWy2E-T+s2PS znL;S|p{UM(@sL;e6O2V$a=wJ{eNYWA!VTXE)xrUGO*pA`*oW=}g}N_W+kpG0j2sSe ziHQI?NNwO6`vZctO*&cbq?M^5EDt-Z8ProPq^)S|AeQlMXv-YTND+3=Kd{W-znn9) zg8d4tpz=+ao4Lrrx&t|7-5Rj!Zgxs+g~yy1up?G1ZjXv(wdxq)PdXle`5u)Gh^@U_ zx&XGz3vF5(Z^`dHeKWPDAu{`e{fPE+U@v}-r)M~(#yWXL-J*qyg)}NcoVBbldgnJ# z>hP5*rqnocWwGJh4e&B)moi5g0?8R0sfOEZ;KDnZ`)IDuRORuRJg}GtVO!N4C8S%(;%9VC z1kV-dBm%}1nZ!Z)&UKHyz%iP0Wv)}~C$k_kr;d@TdnhT4r)jVac3POaJhFiW5F;`C zCS%dVBWAD7peKvxo)Y0MBu!90X(b->k*$Of8-8@yNWG{#;;Zn>NDg&M76{=S%ajl< zmFt<;o&s$yS{%=pDK(RX5f%DKd-RtgmJh(Z(jpzeo-4{#(c|6#iM$LJuE25vl zpWjWDQPkWS`7GE}{)G4_solO}$+4?nduQMIZ3cyHU|ZcFg&-Kn1~~!{nQ`C5V2{O8)h=Gt8;3C%3ZLsaQabO&jM9-E`=;#pK*`YuhdDZk z9KXIl+1mfF28|CxdR-9R*EH(9_<<=!MVdVor=HORAp<(!8m z?5n6h(OInRcz<5JbaNv&(Jg=Fy;XAUQKgfd1Zlf(pJ^?$vdZ`c7CeD^h2_)Zawl&g z`JIr-BO6Z%cMA-ijFPvqT&jE)`ld?XL04kJg2A~;-0nhi_(RD#7Lk^4kt^Vsb~}mS zZ>jl8`FKt~n+lYDRDP7?cQDY_?84&>7uao&U_NDm<6eIy2+=)$eKDBanWnx4KVwF|<%-oszskAiXxYyiC)YFzd@=IkCqweQ z^o(zQGLqe5K+z<{a}d&xAY61R6;2}J(<|A(Z%iTD9LfAIj?XR!e<%R)nrr+X!yBNW z8}=>&i6&J$BgaQy|C|GUyfdb{wDd|6$T`&ygc!e_NHkb-qPyRXhc2)65ldH0QQVJE z4zH2hD}OVuvfVD9#+?f=8%nMM2-WurzbK$rHhU&dMjgGSRQ)P{Q~ZA=im(46fCz;Z zGB+x%9wBM8m5^%e)r)f+o*^eP5tP?xq5KTJ(a?biO04__ile~0N=IuuFOC<+H~BH5EtYjf;{ERTUAdO;n|@9*;ule5=CkaB+TCh+*V+C=zi_R zBM7HN%1ikQE?IZ^_clCF0D`70subXt?DHr>xJr>CLFL=bHNT>IblXkn{8N_X)&i2@ zuOSXxB@^_;cDz^i190r_-zJ5w6TPeuL@DTRahe=EB-!eWg&ep8a2$Da>~{nLC;Q5; zSi)t*B&@=Otd@K?N9P`2J#~=0f?eOO?8tiWZ#&~qQ(avj?Tgte0^|BonH>j}ZbV5RMSj2{H{HHn;ukrp~DB?UE@ z;$4!^j4`R@!6n11%%A_1*lIjzA=9-9hY5DczYKVS0T^fjd->{3z-ui5t|3_4cd~%) zSp%lR=kpghY@(Y3b5EXwW%C#-O zXgI0ff1~v;i}^Ubk&&SC1COro{Yk)i^Am+tI%Q*+gjz|yFIFA-OeCaqIL7VM`IJ1? zaV3GDKRF&J+5Uaakh8nVr>;_;{yI5-Uw{X!5vm0tZ1v}?E@K%v?kvk*Kn3S+e^*Ko zY1FRT@G0aVAaBog#1!2IcUr)J)$)V)mggVL)*;zR?8QijSTL0o0XZoh*2FQkK$5If zRa`#l(bzL7Q%RW)M%rV3%mgOtql8wAM`b>au|Luw{qqmPP z4fzNbFQ~?qogha?WEfAsDFsn($p9u5?JBY|fIB$*qnhJQfrJB_k zOFGQB<)Z}`Qt}pB+G^R%8UzG+)#cycqx+@&Ro* z2KCb-Q}-*WyZr@hg>q(8sBt4IbpwnVmlap2;v&g!?Q^s|K+ckK`3w^YW`;|NFP3`d zy?jEB2Z+E57MiN9DAFFUwlYvtew%Br>vIi@>R$JhkS(^QChQdET<)07DT82QRh4&W+-bF@M}L=3}kmGXDA2L_D4Ge{S#FqQ02Z&P_?c zko_D@yo39oSf@ zSWN2$3Ij}1zFT#-FnHjI{>rV^U$FfTWCtscCtw#@NhFK<`o;9f2>5+)6M# zHyEY4PVEPY>n(vVnIl2tcx4e5Y_*P94Jl5Nlj^bvAdl@(Lx5^?q@VP}?-$_}sIc zYpp?E5faT|aVbEJ;5$^INd5Vv(h6AUNK3QBChHet8188K?0lQ`U}*iTiK=A+mG1CQ z4<>``fIc^J8m$tK)52>sBj;k+1-0m%AM)0&bVrLP!yr=vNDMm=rynI{Q85P`k;Yl1 zdXPCC#`4LhW}l8K2*C72%rB-|#cdf~oyRsfdNbn@3jy88qI5LEvqr_!q8b)*Th|KO z3>AS5s1CSi2E1L$LNx(#oqO%gbiMvR3}Wm)8q|H5qVgeKOP>N$_>6@NBAuqxbDK}viD$pNPIpe}t;Bx<9CY-ac=;!6 zC7G*q=pGN+pDSOT*IVzg83{V)u5n``eV2`K9o@#MRQsAEBcjIG=~)}O9B&6$23Smq zHe`q6(eoh4E}hx{7J2#RjJ}JhgwY6OWt6)5m<=;fnO8s5@^a}aC~qFGSs*N)XJBiI1{QdM5Pke@*jGA3=h zvSJ(PS+R5d%NjN|r2feC<26{HxYAcnB=;f7Rc2u1d#S={^j~~qK~CELar4WYzz=hgvHM+Gr4%N$nvMdRQNrF8g66P%=O-vpF zQ%QPttXJbIM&@KrHs${I?=a6ye1ui{LG z^dbRiXD<_^!nq^vim?~R#n~XwVqD{@u9P=@gF%`j#a8{(RU|cYm$;hOj^o-|@)f z^9TmO!3BlInRgT~&NEAV|7snuXfdgbLd5B4cO(3Z_@NGzPb&wm>@o!@xZYfB#Fki% zE6%=1HOOhr*eqKr6HYxA6YlS}|9TSP!ZSi7GqQ541ijh7Tv0dRnMO4!GF5E*yC#_G zQrEe%NqyI73&!`dTxU3o2=iruK*L@RJ?~iB3o;ROfLBSPnDHULhmk0 zfQvY*$`pfQ!MMf%o(tetz$V3JFZ^v52G80enzN`|Q@jIrFAY@ML0e#ieJcyA6Yvhb zN(xo{yUwP-I^vT$grjWLR2IUv!byVY`6lEW_}xmth0C`KTMVNZk3ZOlZ$vg5r+GIN ztOiKUi~VQIq4PHP#a`H5eo%X{tmdNr{yt{`gV_jMQd;XhRx`jjc^L{;9QOb)Tb3x&-;FAW>Ty&*W??oa`WdjPZCnjm>cT@VX`@){^xu(AC_KJS82HW zqcL12rj2gVZXbLFXT0{DX9$ttu`PSK2*Cklw+WNwom> z$VV->GFT%ulZ#i3xU{fvU=YmNk5zJd=j2(`55zMo_CZZCUbdQM#uCFaRPrQ=P+eBk zP6yam=uDOtjH#vwdJP)#szy7{5W@gXZWmJR$;Y}%NA$KqBwh`4*_m#ri#o_I_=$J;%uzXIMIDskF$R{j0arEy zs_J{u1|?t{w^?h9Lii7DXRIL)eXY>5K(K4txZ&srs%kc}kdBTyUHO$4=mrth5Qn(l zB!DGPPSh$SGO-ucR^*q;$!SZs*i0LiAL=wffV*nZz|*aV zL!vcPTrTPFKR<&|VK$}9YQ$=dx|*kk>Mx`op}@PO<+s7P>!yq<515~?pDSOZ5FcNE6 zWM0lax5fN?A2_67)38Pq(;#~b!O49-lRTMD>llfwHUKCX89c{Q@HseV@ZCASNfgr| z!y}94^AR(-8)-%W(yMxmE1o8J(lUTFeDzL`IlNxllt5(pF{SbG_1{_;a}o!woMPkLZr|3HQ2d5YR;*t=iOC~xUs>x)_4N$e5aSBN#$6T~f6*%d z!|0I4-pgcCU%r{QB=jw7V$=qat{$*S&qoMVc!XbH;650gVVR0n?$wbs+^|Md8AWf5 z2de?_aH1MrRQDLW#Gpz`Z;^73fw!HsJr-=aYGQjA)J_J_J%gB1IGVf~dA14R2)WHa zj65YNO7(nlU4>8EYQ3I^ndVXu%5wQXL_d&w%+15H)EAcpnZ*7~W-aP#J(by+BEc%g z9}u2=t^a~%)=^2C;*?+61#w}G2};I4h*J5~+jv21<*d05h!w=VvJFl2dTU$cV-|aC zG$aKyp@YLCt@o-JP>P%hwhZ;iek!2-S|Nxl;C46{8K*hVXvEKf!?kC97Q=(Lq8Bc; zBIdc1LzM37W3@&fYhAyP*Wo;6F020BRfU&zTYIZdo=~?z-1T!Oqm|kCO%qs$KWG5F zY&4EiRb^3E@5FYHUZ1z15g)ocpEpyU7S#SO!KjWbdD}ZBNw(Hb3XAQeCylifRLRU4 z{rl>fP{Ug?(gA4<*F<}DOY01-tc`YlmgQE+E68rMoI(bhIF7kj+kyUKJc*trX# zXEe$Rl;oU$Q}Y)KDT3c(Gk{Emr}x%XOQ_Jq#00eLCbxxj_#!#x2Ow3I4B|LhRfwwb zse8+)471uP--vL~bhm+WAuVe6(N~BQmkwKHa<(7~cPQIFpOWal3<69naXwgnBmP$L-792J$|wLXH#Ag= z>?_}a5TtnH)65a>1GH7OG3a)l}-R0my*gZ z*Y9zqtftOX6sx3D4u%&IIX{!i!UQuk2Zk|%#sD_1S^3rxN5}&`-4Bl^)y;EP(aMyF zXr!wc7Kqo56@}r$Sh;U@K)YC-Is{$e7~>%ZF=$~0Mh|tUN_&O$VuqB{#ExuqAItoU zge(AsT~;d>m8*}_#wB}ZI=1$bhUDh;mj~NVquzn7MK{VgY|n&T3qjCyU+G9?f5EuF zSw4i5lnN}JmxEldnPz1QCYsYZSc%26OOiusD2!cKMQ>+14M0m5;#ozhU(dedAWs{q zmDo>djfdF5Ef^zpi-mg0&U*+JRYy?M~oqv_&5Rb{2_cw3M@}l14vl zX`k43>M_U2GP$l$iC&r-qD^KgP2&l;Y#`3zV$R)S?0CCVsrR1v`&!^t#>ww4yXfu> zb7IRR$c6WOrFR2W8jm$84t}=ShfZ@#Kpx6~sUIujrux!rMLYSKZ08re52u0ZPqBsv zja3tM?;*0@GPb)n3|@35jFI8bBKC>hYzb6RX5A8(97efCP6%61+M=Ew^lzjT(Y)>- zf*H$2)q=f~RoL=>qk3s>ccXA(qAIOG*7QK`G((NUN~9mAp9r7rwnH=T?YQRm7zx1a zL8PXXLjbVL_Jzo{WSWRoIB5fRhFn$x(WuXB4_dSogTBP=p_LQ9q8|euKS?CKW2aCo zxwhysAL%a%Im%+ATE}_xRHCbP`t(~)1okQj5QQBR)Ms7I6)Vu~$JTy>D>5RMI}1jW zh?iwGVo*_SAxjjNr|@5LDCCk4n0m)*wHv?ktI&L`0er2j+=gjIP0xZN2EU*tIr0LpH|uqpAFkL|fZO zrJ1ii%n>>n?q?L`6KP&v&m)`={-Z~{!US*%bCi`^M_v^fsoPm1%fRNie4)9E?RcaL zqhugnrS^+KIQft=q}#_F26JCTU4&bnDQHB7mqw5Spc)$Cs|er!S7Sawf0jG?luWw< z!?9us$DZL!LhSbZhXf_DB#c2ETS{Y+YfA&G9$_>0#|b))=P!#?s6Aw^?Vim*jxZAN z#u8gf3mPdD%kUS=v`Z=i$T0=b1NFPCL|nH9hJhK)?_aIp5_96vgKp%jXN?%4x}UX& zjHbrK2u@*yuP!CcDiHkj&7ScJB=y~+k#@S5LpMw4XW<*sSa~A}8X{ur z(bwD>_e2lolKlK?Ct|pTB7}9$V2GkDwEB>)-Pk?}>DDnfRkD7_4*z}icd5+@xBM(j z+x+A-D}luOh`#=JRTt zQFa}`qF2YmpR8lGho1yz>%egWWM4cvG0jNR6H>C9`&wpHdB7JfXekRyXiVs(55a23 zdrc+73HmzhyS1{8wHEr?Mz#LVg@kWn7a>?rl1+zD8n6Bc$O6Cb^dvUZ&IQ2{8bc*61bv%p84tI zH_BMA6GKK|Z*o6mmRWlcg?)1s@dXg%`A@es%x1+4&DuzE!7#joV}DVJ#Sr3OWvc*G zK&!t;n=O!$aQ~NV=&8R6lwIauX65UJ(W4|H96xk0d^~fCH7X;BB4j7%0xb&ZZKxeDY-4?N3C!-rvOqp85z53kR6c_lQDwX zDM#&8=0#4N21QhjtEtAf4I2`kQsfq^O<;5Cb_ZP=eyd>=&Lcb{M@<%LwC=t&QKVa^ zii+j#vT*f9|DjJ6Qiq63qNm6QQ} zs<|J0YzIL@N&!(}YaHiUtd@A2P1X9*CFTZ%ScODeaJ2Wuf!vp8cO?>f)mVHA&#lL* zG{H?fBXI#^21nnyFv(B`IFQpS_jWTA-0#x(p8-L2z~@f`?BMw4U_90cIUmnpq69NV ze3@~?lDawM#YCIXp<6DR6!?8~;t3ZvkGWdGlLa4|{2@F5BmDdjdql@lwPLuhGI#nY zlj!%G9o+Hqf{5p@CM^Zk)pRi+-rE-I#-x@=%Tl_%{+YHI>Tpux8L*|_ITUDI5Au$D zYFnF0=3|Ic4w0|OIE1#tB{n0aTnwi3Uyq2Ieg_c5YS0%`w|d_jW;BH!q~NRc<5X`o zT`^(en=>Str)99-9bi$5Ex*0BeX~vh=tb3_Dx_uFcf_z-Vsxa#>6^TYC&xNm&}+@p zNnW zflXkpXU!EES&Z01E4~2I@ zXY|E#uxs7;_;ze-`Eoh-D}UxdSTMRabCR2+`#p&?Suf)qvIJxjiPn_+x2D>Br)1Rk z0Sd$%Vjs*+cm)bI!i=1*me%~7rsS~m8FfeP+=|_E=s7JUy#X2#;(4wfP)imA zOuZ_^%DmpnZSf4mkaT3O&b6_oFpmu_>uQ9E}#iPrd{YsrVO1AXe@J|O?X&gfy^on;mA3MmtDt@s#ES<%O; zGbx>~(#1E{8BlHp;!#^AotXtg;(uiG-t@;V4UJ;1@T!2I}`NzZmZ2XaGBEjs1;T^T{gzCWr@XzXa zM!{mSbix)iFr#0E|5gwhFj5eJJTP6TrmPzWrcsVdJLqs06vsM5Y#gp28R{b7DoBsXIm!KW3x7c&Ns`vTA9<8kSWya@1+((;=Ey$muEw;iOM(`Phpw_I zhb)9MwOSw+EXkY>u5#=3B^yEjT|8=@a`K(}ig=+Dl@<0{9*?rj>*Ni4 z6QmbpVHyIy^>x3Y-LM?;PE{EXirPqVisBk;6Gz<|XxPe8OqE3EYEl-6v%w!;x`Yws zNAVtry0_Mjn^+_v0*<-7NvekjV9|I3xKLsh}aGiM(a6 zM95c}ZmKOnjYWNZ=J%>*Q8ryG{1wB2d1p#q**93%B`;;Ohdl*%`~&cbCCtcKj676} z095W-&4+4=!NX8G*(#V@T{dsxIo=-tcoTD`sxD+wcs~`xae-BVR9V5$>I*)v>?P#9 zlD(ZVTsUH+rxv$qN9 zXX^#2>e4|WwLbvE-NP-lmi>CEqNwoRh$91a!vjCNZE}nf`-s>n5q)X7!Zk0}R*?<{ zkXuJ*Y97P^CSPCI=QX}D%>=y=O0E?j$J}riVXM?UYwUY^QUqG|J}4hYKSE8o=b9Hg2Xg%GmkV8R&+p|Igu}G z5;C@4KmdeMbph1Y?1bmk=8?$wSR=nmZ<5ars=8i#DDgy1hA#TJVDfdSSwCIrM5#2U z!4bb|y@JA=v-^;~EduO7-a+GPCt?!{M@px3AP~{vt7+LUt>=}`wE@!#Uc0<&yJ2is zJVbTB)ZK}PUa+D-egt!ZT#aU49`>-3D53amGHEMg5iGvlWrq%F;bxq3q*L>{8V!Gj z@~;5vZiv|wATl8Z4=p1#^fU(D)xhm8;Nlw`y z<>p>M{nLa!GXE@^TNwr;REJ@pNXOvaXOrxvwLSspdyI-CJFkY<9-Opz$lOFnZ6dS7nu0C$BDX06{#i z*CiTRx~U$dI1Qt`dZH1o;>r{G=uxu2DBT*Ti{5LIisYtf`fK*k8fw1%PD5KWTyCSh5+16~Tx zDiaV5=@l&-Aq!d{NgdbC9JfeonQ-_VNG48(Iu-4G*{=vN&PN6@FCJaJ4i^G^Fub8P zDmwn3ZGbe&3c{5Y50I8>%j8(omqj-61q4+>K`HCc(Fgd0N_Zsp0`K2vAU4f41f#!~ z+Ug7a=UL0B&a*h1AbN&^2I)lSd+;~>GhZ=1`Ej^4!iB4qN8Y9r62X0r6~#|X6qzoD zdL1w_g|bpjjKCAs;&s!CsB=auKbG^kW<0~YkA%rYC$v)-clx7<^8TuJmkG%(GTfkH z>D7bYax&M-w(z6=h6y?Qec(N{ZC&OAJMTlfigavI@EmqE?-J3u>^Kxr4M|H7By z^&wIt*=&4z|InQAqZQ{VsN;*HEudgzYJz{P6$AWG##;F>Pm|Sab>F)ITatN<;rH>G zCfO8Y65G(&`PIXviV?e?*GTaJOAp)NXw1F|~ zls5a>hLE0MSUSl%DO8x=5%x|lPeInR8%-$uQW<$V38IyC$hn(eRvY*ln{NP}iJ64% z_$5eLGmJaw!A}s+@luI3nt30=Rg?iQ?y~2LcMd{&QtXGomS52=v^3E5oy}E~(~F?m+c#+p!QsaHEl1Z4gEt(uYx&SnPgyFc9R<^?Sy~OG*70~5Sl}z zedd7h%&PnKP@R%&bt4wW+$TFZK;qYNuElrf2o&McFwTL6PIAMb==;u-kYxc4eyM zm)diTm>N6Ysw!98c!y=N6m@CWKr;)iJyv`JL{hpoHxBE*=op7lXh8|hjfnprA;dt9 z=4W*+%w*EPFY{@N87thY`&u5y`w0xI6LG6w8lW4`Xe>7BJeS_M5>lSDpV*n`qdzqimJ0U>iqJf6e@3;$$_>4tKj5J-#9*p!_M4d zM@gbx5l+}~UJ#~2^$jV1Lu=o0Y)yojEmSv@nJ1JXY2sBNLx2g?Ir<3fcLFzxs}pLs z!v%J1bSiwk3)&ljK_|T8-8C!9CL~q~_JnaqlyC`lGTj%Ex%)Z%0smE4{AgdkgVr|A zu4qWUf@Y84*bu2jEbA*)!N1od!HHI!TKn95eh>3zYMq0FYNg@^@^ERkinr|xh5RYi zX+xs-I=Sf{V!E#N3aMR%P%pdMMHO$xMqep_&q2AG78<#!6!Z@{9pjbZaV!CY!!&uG}%C*kVa7kzCs`H;(i~6bsToOJ7IR z`yM)E2W~@oMAf#gPgIK3O+|n>(-+N>=szBvHaqnU)Rve}co<-#RYHHlk1 z2;_ooq+PZ%jMW)kgw54p4+B>egEV{&T>fS3U6R7hN>r3xP=gx9jL5=I{K_S4xj%?x zvR6Rdt9wx)EX}ZUF5i1Ig|BSSxBZ10?~}D6)Y2|K#L8z5RV?gFNWn6PD(qiIK>Ysu zNfY)zli!hD>6Hi{cNo8vRS>00?N0ms*HRJ5tUJ-bJLce+vLPmUtfhAo7+}3eCz%o>y(J_{V_WRmg5KafFS1cvPUGx53i_ee-{*v zL=2)EU(kxE!olNB1nu=yMNW&gMQ~hY#rG{)iS{%3>hcZ^o(b@W=olrF^v*kRU2}BJE)Uv;=1gHKv<=z6J-RX`870xwlK)-1gjLz&haxl&~k~2$hoyKU* zp=lD=Q>KD|aSSZw$M1c8v2hZ}$I`p-b_Yfur2w;f+4@Rqfv)PK9vG;lY=!@*0M4}h zcz=qL%e^6m(#xt4Y0gla9)~3*ONb8RYul?W+=`;WO1u9{!j0{896})jCAL!&O@V>H zcGb2`IIPF;ARd_H)N0dLe^+ToPM5z_;Jus%WPB_ zb3s_`1i_RE#N8k=j=a|^^Q0d(4@yl+p&3g)^S)z4&|*0hxx2P7ol)YdHrQSL^1@;Le# z_MUL)K#PGZk>umvGWepMD>LqKC8P_Kmym05tt08ZIu~QZ6(^R1`9rOQad=N1rM!_v z`d)(sVR`@oR54^pCE+wQO#u)|8AF!vl~Ja3DQ$dpQ%UQ~Do9HQu6!tkK7%dfkWX2?Mb zA@b;BN<9s>1l4;+6E=|SivHOAC0TJv3U6I})G9l}8Uixx8kJQU@txb;e-b-Hn`)e1 zyZB+;&o~ME?i$+QU@+n`MA|HKsQHPaFquVV5J^#0O1Ly*KgZ_^srJyQS)#2|@rrtq z6mM&_k9OlUma)y!z(mXewYYJd#TGtk&6XP#vGsVZ46scZR7CPeUM~j>s#HyLrZ^5i7|Ysy=uVtLq+b61Z+7zk%@XnU=R2;E?n* zo}91lvK__X z+X&aOVd6`rT#);q)L1N#YcAHD;6Fvk9}&oCDtSzQ2o%T-qE2^D(@8=fK5xSLEkzE@ zpDqkx0;2tbjO`kr8@@3~5TLd^)=ML2lyt=rc*xkd8^%eUGxy|(lZ#@15EVjgUf<+c znIf&ubQ#DG)ICF#@I4gDxc9BVTkoQM?ibubTUt@fNFn0_13AtvXzqTr{iM|2I>7A4 zLR4bIO*^VdhJvR1K|A)gjKdH%dF8g@B>07AL(BA>Q0|0Hdu5h@#KwD0`*9_0ie#h~ z78KXV$92$eX=km0$QmH+eiXkLA=q|7)Y7+@A&Fq|l?RXmrYKl!yoy+6XHKYZ*28ZC zKGALN^Nq!O%o2wC8PAaU3!6GFkzFcF6Nt$oKxeTrL~Xh_vIS$YCNge=)AUh5$3!v; zz3~gKDK#)h5BEcsG=+JtOeV;+R3BY9y{)ruth+f*TR^0M!;rUKv+A;ELcY z91sn5Bi^|mF6ERtek?$wv14z2h+8HULx&lkAiVi(4UQ(p{$!6tAvL8Sf5_qM4*P?H zsT(}{{s7L}8A6HAsKcKKIJbhfEe~=P`of*Cihr{nL=PE7?jzOlnuZ2y=4m-bA{5jC z1BE@=6|{=09X+%)mbD?qH_P(=}$`P3pB8`lxh~G{Hb}bL5oA$v2-qWP>ug}5Nah?{?itQ31~_8gMgyw z?tdlIdjlInw73^z`;tNJRiqguHdT=c>kizUdm7Jfwr;QBmN7KM&*HA{Ii@Hycr26w z)>sI=n(_fS63*hX*+odY6&Jw$ZL@%@1!8}IEp+KnZA34Lx9wa1w*aI*W|bOETH8{? zUz>C3UhuRD7BIxQ434e~=wm#__8bO6mlOeth|>YSPWO&zcISYu4)Wt0!Xli3&0ix% z-qaTS`f`z2e704Y$Ebif0Amv1j%pkxg9V;i2nz1MzwgNiglOMNoL?IvRgn&mz)_}ryFhsHZxy*M!JJkVx(~^VnuWLUJ94Mq@pXmqKC~13M<#^GQ#P28jk$SU#SwJ_|UQX@--cc~i@qF80?OpAHht@SvsDOlaOl>nT>7 zb~C(W^}YwI{E!cRYwax7FnMczr2e$hJV`ngJbmDm=*$15+K2iz;~olM3ylsMf(@I? zSs+;)SyCAvS9=g;6vLjnV@-sxx$}!)RHoNPThZ&VSa4sh3CTiJ0B9os?hj(~6rGK? z`3j5|_H06H837=>F|lgrD}chUPLZvp`G!za2zySCc4imP%xJ@*Bw!1>1uoAmd8Y527xrBh zOcvkcMw*>Ad4D7&amRu`P@Rd`+bXgL12G%m`ejgP=2Iq8@(*t+q!{b4a{)GoBAlVRR?-Q0sGJ`1;r`&5yLP7h*c5^c{C)csmzEM*1A5>=V*4n?!# zUwjXJW;I9zoZa{`d0>?fR9rofHPM%trwZkRBL&s06WoYRJkDy?XHj-ouGY#X{GbQ`cAFsnOU zrLgvmmr_Be$z_Mq#e)+jve|b^K#X7m_AHme=(NLM^r!{+S%DaY+7_1i!)Y^DaPq9Z zSz0)vRVAw;kJ0#Z%LqPzit~S=&gAjm-fkN+`HfB{qzxu-cf@qay++?Iy06aR4Ow>D zyv+EUa$NaRIF#(e!}S9CoV6GX?y#H$lhGDD-m%#g&2RNV+C0gk_EnqrF`U`e!}FjX zT)Q*Q1LEO>QIui8930oi$Q?UT*pxS*Y(>eo43f1QLpSm#X}Jy(%@5l~Jffx;mm~fw z*jc2uMfx=9yl5}6bh4N<5s2YFG^fr(!hbbc82JzpFWtMZYZt7$!1esHkk0S(0ul8R z>#xYhT>|W6u=yc->`UM5lTc3_7S&^GpBnoVo#t2dpZ&L6nS2SR%XnRbiD&t25!*Kt z(8)_@lh`%2ln4d%URMiuHZRwkjp3~eZ2KQ-{4?4c=FFoJea4PdJG3;K^$xK93d{cxXAeKd zY5F$8Smt;%xHu)gXm$Rm5(Hr45v>@6nc7296yM#0DBAC8iQ2;lc9;xR{ng;j?AfD2 z7GJA(VM-(Sea8^KkbE2K7lRiVHc}UPPc|cmLbI*rNdL9Vh4}gG@aDCy1#WPBfrGgHMMEV-&Y|>1 zA>7H>L_~&;4(X;sG!iPxy7a1|u498`PI{@!sSlb2HBQv$ONw+<)k9WSh*BxexyC}M z!}04YvUK3UV_UgulO)eTDvU=`Z9%}z;ckCJBY`j}Fg`mNak z9Yl%zW6{L^O$$|ddAfemyE-&UlD*PI%F=}~4*kDSIJ74-%fAvKV!{h%J91y+%UK-W z6<_oK_t9|<4YX~n9=CYr`yT#bdMx7A#CzL2KGq@Ky_t_iULO~eKaJ?%wT=UuJ+HKP z(GVcGfD}eLlX#YgWEzteQT=72F_AsP@(MA?5V7I+##bnop?~hX#_k2n-@O!vINBJI zP2<`m)l|DNxQ*;^4Z369koKk@dxf*9&YyMCL@LGk0Qn&iQClOy{1GM!p~1E6Kt)Ln z7B2dd_~bii9#zj`4yl>gFBlsJVuz-ehCMV+pW0io!o_-_0*;s^7)22yt{3}88y6bkliWw;&tjuQ||<@&!lRr z1Tc-!J#zt&ns)G-CIV1Id?dclL;efSB$R{u_H zMLyAKgpy&}$N$)9BxQPH{P8o4h$Bz#n8JL}`s$WQR{ zR=|HTjNmTH$)_vblO8ICuU&E;5Om<3wRXMm8=#!l^D}A}KIeya|K#tMHjs+@3oIYW{1-T5+Gxc_np^U z?Y~ORmrZ;_n|u_3ULn{WfkIb}V@#wkfTak`FeRNyOF&;bOx_R68&V!p$UA?7U^_pj zY*5Be@?bzL$!FWP(0X~7p?mueciU)cZ}bCm%aw2i#%H|ESym)fnl-JINjR4|eR|+r z{#X=tJt=VSAIh$V1r!!Q65U(7zY_z@L8EsG(B!0<6VFN~tzc?Tcp3g=q!TwJs`0?M z%@3uw%Ev>Jct{a`*&@c9N`0zUj-sp5p~gBcq)f~vBLHipz%_D-prisPp!`cdr0g~_ zsGn(^HUfQs3K;oTGl6&nR%u1Pyn2~qIbYy5cGI!y#fQecuL;)v@r*l?G73)V353ni z%!k4N%TC#g7sCNY6+YA4^HG;7G0E_L8DJ9I8negbccJb}f3aJyjh^!ZflQhJsPaGEGjkCP3r{5$3N8ls8wGzTt zt*r!7BreT@gBbzQZuV%)0vnBqK3eKC9j;tQP)ul@sEfdC{GgLbVM2v^i9Igwz!c*x z#Yno`qYi3k>S(=>ce)-?rPaZBr(nB&@gO!%_hJ@(Kw}ths}S)sS-xtf`;|Xh95fI~ zN7XU`D*h+)A@|o_&=ffH`D3=In$j~t;t~_)t}VR$_c2F?-l1-jJMlU1daIwyqtZH@ zQL1Q09<9^7rtsY0B!Cf%nm{Tnikm|GF~TQq)eRP%kSDsFOZUc`OaGD40`I8$XzYFg zY{K=GigHT$8g+V(R6TkKn$@&FDtw!be4~yHY6Y1;uoiGk^Qm;I|LAmFF}T87^%c?a zIBLKN{4(?x^URA&yU7-SAqV@lP+!R!|8aIx$ra2tG*J`9$`_AYzY02C+Sp6(+>oo) zIl6Bj2;KK9jy4+9vicqqC(u9FBz$PF0JOAI{OR`)3YZvW8$&qaRh*Ve&zdUu67(=A zsYl!Q<)+P4e0F#)oqfXAkFcXJg}Gw z8j1y#Nk0o%%I~|X%nCq~5*Qh&!q6U$>)9u__HCP|GiQCW#2k}oKpl^o3D^pIDvVyq{pH{Y$%o!(}5nXY&8hd7zZOh$^d>+%6d zj-^ahiC5JV9M67Ad!B^_Jitg9y88Ee64!k6Z#fjEs~|-E4*?aJQcK!2jkubSwm3am z69JG+RBbG-+M1elwvJGQ*wZ4d9;LcmtQ{C&#;h18wy)19+zjju{V>##GcF{yqJqdTu+>0ig|MnFOM7TQZ3h*Zz4wt=G@_Zw%zDrJk4h)y$2wg6*zm%#wYDtzB%|(Wi>? z#9QO0c-0__cmx~=m1g|x@FAL7;*-rhxWEp|2)?C5EdIQ&U{JCS<^Fl6+K+U!8{3x|RWY_;WaU?@>PrYW4q43&2^()XJXsz1Bt~{v_P1b5 zJ&acp=ekbBPpg-yk*!&#Ool>TlUhb;^bKkSVyb@NHVsej7w_P*iUGPx^NnLw!?Vo; zHeXUeYv{AxI7E}O#@zO+gM`bRD;MxG$ocxAC7JRlVmnm4Ncbac7mviHVgitCC!Eo) zKt);Uq35TLF5Zz%QALBKl?Z$o~m+2UGA@fTlUR z=#4uDfH8NmaK=bn$l+YzsFik{&|Xqck}bm2Lvs%(O@gfSY$)^04o5?CR%em+5_jsv z;lnc`EZZTStmCni2w+^C$-4J2A^U`0aK+Fgz*jqLeD;0wLkPnv{ zC&jKfr2aV8yud$7!XO0LQRVRt2wH_K0^b@FyTPzR_s^rESjD}A5@n zb4k;Ms+eHBsZBP<0Q0yyN7pwHSt--9fZblXj>rn0Vz5N}SXS|XD!WW#9K)1v(Km6m z4Wg5q7Q8_-WwUV9NaSBC^~)Kui>FG5>&3hy+~MJV`sCT9&32zcR33n80|}z=_D&vy zIk>>}`ruUFQdbNT2{4CTk*=he2^5~^2AQ#UiSuoxLQh4mX`%7c%BCGKnFJ4ZcXA^C zniK3qik!2hB*z>)ar-yl`0SEN30=MsHk9iX(@l1iSK+i3K~B8Ok7#0==r+cW7V1TMe~D0q*KP;vup$f4h#S z+fHtYI`p)-t$%9KtgW}z1KmBb`}p`-Uw5F1n)lSU8h){q8Zuo%y0i)P4zcTG0b*-P#;qLJ z@^{87CL#-&RLbmE{WZ-sA=~GSQs8;jIbFLCa>&{@9+aH?zDOk|poBCF;PvD`lx;<; z;*<<{U?nqf$+((kG>*mi&0`p>*QQUW(98}M%gIDJb4fT}p|6Uy^v4|t-bEm?UulAW zBbh~;rHO=043<|U*l#T$Dz$3xFZRWtX&wxQ>%`uIs1sakivy#i20X{PD$@CSpN&sx zJz8w?~4{L~A8N8UjX8d$V2P%19r^=^WD9|yKhlqPTJv#R^(}N&>1NY3_6icWFye| z28>VY*sDXz6<*z(VcImHO2Cs3&zxnaYCNb|5b3A7%O`crlwD-!kSw$xQ$z{Ox&%Y%s^gdKP zO^UfTGXr?RmGThxUcz!=vvtj3`7R6gZnAnnLfC3OHs+NC$`d1Ez{E956v|XTVY-}% z>9sJ<%5-m{ji+_!sF5XdEqDcX`zFPFgeaBW+h#_XJJ6)ePYN5Zt9lBVEQ03(((6iM z1xpba`uQMGcXP}6ZT85R4%1$eJYMWf6zuMcny;sG@@K)3k{KZEj;%pksEINEw&9b4 z&v0X0imMce@$pp&(NjEIheg^=rwjHt#M?gTaQoaR6m;f;~0C72rc$%-&$r?$BO# zQDoJS{Lyu-tI$OmKJZStcC?73EwCS;c15&|NP7zZG^op>+LnmGe=C@XnoqwOx=MwS zo%<>t_hbk7jq5nQ`5jP~If-my>HCsb1wBB&!k=d_eW zeXqOJ2ZnGqxCEWx^tvb-fmI?^VF625uqCXqQC6+L2cZCDQN#;I`27f=o3Zr|Wkywg zjHA_iV?M_y?*KT;C7yRX<* zv4}CCN}xK;gyqpOACEN6-6-XYbYwbuT7!dJe@e=Pw?Iui9=|D(SjdZRq!qFgnq3q9 z`pQ!B-UrS(?jW83Guw3TZn1;pSX8?H?f`iwC%630+yD_iqj@LUMMHopmPDaq z!XNC*&L@R;nhHa^eKx$kUvAl-IIrsVsLg8oJAh$e}rx(}APUYKh$RNyj*u zG|_Z83D%k^npq{R7&{mMdsv#d&hmR6hqf5P#hX`7FACx*^dJgV`%p=H4A8mfRn(X(fAr(#61)ftY}j z{8#Puz|FWh8DFIq122Mxs~K}k&C2HGP%-LbF7$rTo|bb9%@|Aoew;-aX&QHN8Kwu? zXlzV$^~5Y&U1Q&DNb_x0%ZLB3VcIzTygeV6GVi@o6b{5(C~{`tCSj}?cvhX=2F7W0 z-wK~^6qYzUcC{)UZF6$9x^a1>VziKusnkssA*UV-@s?|}vrIo2up3QIM)@jAXiGQ{ z?XDLzj(TvXH1WR4jn&X6^A^IGCs*Jbnt*Dwa_|t&@AXYyRTF5EIBIj6!TB+4yGZ@7ODc{oV=+Y$DQ$ACi z#eAcQhuaV26HZR=sl%_(s)#vp3iZcc2ZOsxzvY~y2_Ca$xp>4&O}UO?wlDqjfT@jz z+L(Iy8iZ^-ZN6+t!(YqHr)ac{N*c7}V7gHM<3D?kVE2NFq7mCMu|9yhnCZG;xw}U% zkUfo51{z8oXVq(@(@X&4lG--RbIqqeF#(Rk6-Vw~f`mXYPY4-jMTz8h>>6QY_&z*^ z>!n#J6c8~*MT)+PAkIL8R;ciyjMgm2bb#6TRc3i5NE#x!%(O&c2jQ{Nk*=_p#wYTt z^|4bs(r_htNrK$k$8iPFL%|v=nj`7HC~KyAz1y#9K=d6v3@C(BwvZ=wVUUwKYne+d zThd|wI$^og^^|Wf`TE5x^;7isX)HkN_9uw?o33UV78ldY;t>$Q%J0|nv$z#BSnj(F zU;IOL-B?Sbt<(M}6m51Z`-v*I+iE=Z>Q9#)*SqI*y$_9g9$SegqsloB68=dmRHXpi z9+Sj15$C3t!Q(enE(&CvW=j^CTbyhW_eguua15tl?3SY_Q1vVr!2$Xv)UUIRI&p?$ zIprE;ou+hRY?dzNF-6tn{Df$u*ikZAH7o*Rd4Og<>MlL3-&(@`N|3n0Sc-$2%XTaU zdpwk~`#0@HGm-{DBuNpr0~aeRRB*=*I4_tAP{qc?JLv(E;hgp~g*0hW!I#=~C#737 ziSWiKZb95(-wd)Yc{>ilC})mjGsIjLOGs`0j0#rffORyHji9-jrfJl-GldFuQL;aw5)NwKIIi@LM}_>#?Aw0ct>{Z z6~T}!Omk$?kgliPMx5OjnHtb*+eq#4e3S7KlSRuRo*Cml%;Urnu!efD=~aukn^0?o zJi{xPaa>E1JzMcTI5aKEcuwtTd^1Vi09YiI;wMLFBhqJa!fj{-%GIxOS6=;)xfVqp zcfLB(hT#FOX89@iCCzfuffZUm6$bTbWhw~JUij}yllCysu0tmnoT6z9z-~W)L5neU zQ8=U$EWFR$+33L~iB3rj%GOG!I#}HXuy%chls6%mmI(_U@Lud)71_(k{+S$E_BdhF`Ypb|m@x z_N2Z%!2fnF0Ol+=lmYS@J4!{(Fea(Cr$+qmqOTnq)lE_HA}{XoW~Uw;zf7ytywbi4 zZ56NyjtCOibBFi*a9DtOie34A2bq|6F%10-bh&J_wm)Vf*UjRjpw-hRKUi;mA%T4m z3btqP=J&BSI#~6;dY$fNoR)p7&FNSBVz*$sbrl3XSAofi%iU>8W9=gqlKjP$pn{or zP9qdWdA8xIj4jENUSNs15u=#T|2NZ6a7b|hh>dpT@$gM4*zyE$RftD!0?Kw7Kdd1# zC9xe@Sic<5VOCWo_YnlH6Z4q$60EGV$JU-M_Tbf-H`76jWHLG8Q}w4LTS??AQ^-|s zQfs`gy3G_VyDQZ%;+v$fS(Tj%&-yvo4C~m<8XKFH$ojVU&$l|Mr&S}(-j#A#O(n&^ z1Rs~e1F6n98}Vy^M^RgOoTRHbj-_yqmDlmz&05sjhK%)J_V?hq`hnCk-ONNwoSl1C zL$7sDu-~c7)Aq0e>&&nu9%AI|?z_3Fz$ArUUutdIPE#TQKG!~pg&iXmR2RC1-KnCO z^0<+^0OHoPOWrvlc|fM|9AYKB2TB@UU)DIHa5T9Wvb{GJ04>x3*l@Br|6vy3zKE(E zNygoM&;A58uQ889>9iX_^ln=agubX!uX{u`JHbch4s{yqGP?bde9OJxP|8%6kD*yg zI<&+xftYI}4R%?^#9_#HoLOa^Mo4_1J1yE|O4)u;|C;@)O#w!xoqqg;(&svBxJ|{n zO<4cA)hQWhKFTwPB%>j0vIdE-Ad+h~i#Sgf+Ul$8q^9+5d6i3@D^{zPqIW{d0W^J-WZV@h z*J2M1)0WiKi)=NrUk*C_kZMY~dU7oGay>D9Creuz)YcMoalZaV^WWkPNa*TXJ|M9!P}Kd4kc0^FSRFO4lmLe9j~wOL8!2FZj=+EZ|d}8HF@th4Q=L%Gb8^`=(By754VK(`cY|}+&3sZba$qWW0g}F0jte0p{=+s5B2Pdx4Dbk`WDQ>DE1)jXvU{slQVqjP4|lRYFo6E(+jgFJrNmnqQ>|v&0FiK*cu&1*&sa=GavnLt zNjGF`$`3f68O#Czpn+Uum`VRaVq4Nr#u5A37h^mNdhW(UmHvzk%1mi5`}jC&YXBbXB4mwyCW8tav(6cd6jxm5KO zW=`U0X*B(6QUMqHBAfbo*@05dwl$Sm(Sk+GF^G9~R${f%)b7bcZf(A)Z>jv(d>?Qa z5SRDC&I~0qRPG#CFjxmre{sU{Km#b6h?Ie-Zag|V*-z&Y^6@@tGWp> zXz_64YDZaV@oU)PE*?NJ`Bx7ikZm-kLAO17b^uTY!7}L(7LBa`-d=9Z7SIFQm)1YM zMGFEQ(7@Ew%~=JVBk_J*ueTzg6tbgag~!N;#qdr6g=hnxEGplK{$Jt#=5#s`eQC#5 ztCNB;)oSb2 z9X(77^v=IZ^caM79R>VwH~guCmVP}FzRK9B0dw0rq$Wr+k@3mVqfXQa_Qt)LJ>}+0G~=F5YHH3zXgvW^K5UB+jeJg8()mfXE(WNUNTG-ce<_P+e9f;aiy_d0R%oo5 zb~wdzE?YY^fMAo(=&2$>ggeLnDK;t~12J{_W5?Hj%fmBH&b1b5#t~Y?f>X)aovSPT zi?!qIIzCQgw9V-|U;=}-tVv+~e#tP8dr2UFWkt{lo9gf!n8Q1)h_i9tWLpWPu zumkG2Q*V2U+voGylz$XBEq#zkRO6kEii{(4qd)Ep%(1QM;{e?HkS;I9sPbbDM%r`R z%i@Pf_HjGbi;T?r{BI^m30LA2m%%$cT@UWLFk(&SR}$FrsILW}Z0J=1i74CJwG}`5 z;3KFyG+dO}_F@0i&4AG5&Y5IET7`kNc5=juo^vraxDL3OU@awfUmDzmqy)^9p+RS+ z;7Dfd_BvXV{^_+O4bv5bAF2*%YyV1@A2BILt54RLBp^a7P2!i6|IxQU1f7oYJ!dH= z$IYBqqcj1S+Pj`KpNYk-ts-x(95`H>(}{nDUAnZxam?I=hBpTGbhofk&*V_7#tOBc zNS-%{`ds6%wf9y47&89fnlVe4L>e@3Zw@lqJktE2mA-LK@fERWZ6-`Y0r_G?A8rAp zy$6*SBx4RA8p2CjBNDKvN*tn$;-V>hNC~d9x4%hQDtXt-c9ZbTYxfFrfOi`LSyC80 z1R&lsn(nt|R~*m^YN?LF~Ex29MaG@j>PdX%Fy_L-{VBb)Vt3v{34A7(nOGm+>sGos%&y)=ns!XCQ3 z%CDZgXH#4>l4krr=evbdA3b+PBWoSoEonkNI>OYUEyT|S%O3d0O!@!yGZ8y9nT`7X z+os0!N+Ty6?)W4X94V#sv)q9tZNOD$=E0b9{335rUUas0NNo@leALyNV?+^bI`D%= zgUA}feiOq2Vt02hsEFCh*kf&)ufSy}n3ZVAA*JlWVLa&GV~(NZbLUW;YB9PZ8ZXH9SF5pl^iz?0dz6Y?8{K8C2Ncjnvb6(2t{n z=oD}wsTE?2i$N>%umS#zVm{S_PTFEpPp3|^Vg&L?ZCRm3CM{6G24=Nu&VV$m8kU#I zcQ7eKvS`%F8}b(7>gI=lk!nByzFZkrkR8}+*GY1m1=mtxWYSUS%KtGVO){b&pk9-i zz=pwK^=x7`+%pk*O{=eW-8Qid2e@!OYR7`KlQTEqCFm9LzX{QE_c6k^Zn7$scm_!! zu;cUVWj53zL|fR~*I5u*;j`C*NdVQS58*{P$648j%WJS@>N%2Y@9@`EOVO(9DW%Fm zY8KmS>H*js0v1YQccCI3woHItdaBBcdGew2o|f4>%?qyK`*78Sa;O50Vp_$4;pEZP z;iOJ|-Ub6cbz)rSS#1gI+`KC752k<|o(LZ1_rYIblF?$tPWvA?govS9vgdLn{4i3s zD`u6W`sh?C;gcLLqyC9JjY=F{&)S`SV|zEtcEE^B$668!@t3o5Kyo*+$SRmn_P2SO zfeQm4RRm(7c@#h^szVf-gXeu9mFiuXdNWI(|34x|^yx&|!2o6`WjV-Co zsnlZytBWZ(>gEqgn>!1>*4%LmJ4rf{&{mksiypyEEl`}n;fqZ@O3wFQX^H>>M|RNn=#XL*IR>Srn*6U8E91)--y0KN`n zWg6=Ooy%jr^-ivPjH7c42@wB0v7t2)58EqSzcETnNufR}rISF{xC30C+aGBBu36!q z%KXVrR|Lzbk8qT+nLYSPXtLi1?cM$yOLBV+>s~f1oo``hnB)ihs^!+dmffB@3Osih zg1Lb=8O-%p3A;HQgK02rMseQeSoh;au<@OW4NDw>gEwbtgV2DqCOjFxH>z~oEMaNg z8sJv@yXK?&IFE-wCr*xGb$EPoPr&K+TPS)ZA={8$P3iW%1lJH|7s+4CF6hRIBp4ae zO7jtUf@9+IfFDyPBjOEI!eM-ztB3IqL8@CQj=cjZRL@@Y(D6B?+O2+@e4Xbgl-yNw z^kp#(ant^1#|uB*WqpEtf5@y-*pc^WfzIfg2b^u@eKk>x3PF*YjRcMhI=ZXdZ*6A*&;=p$ux2mPW2|AtQw*m|1#TIE4*}l0k)oAiqO_t(m~FOQfFQ{=8{sC|zoNo6*Z{e4q79M3gc|LE3kV`A!;l)N#=1KlYinmX(5d0VcS8#e^ zo)}EEkgp~0+)h2EVwJ*br8RU_n7-;zfA`BmCU!w8Nqw%a4<#nlikiZ6@eY3%;9Dbu1@G2NB%AqW`3ES4_d0A#Yi3$lS|L_k zy~0$PbgLp3{mvVA1?pGFyQwgo61pJ@({$BpNvT|=fCW6 zs&{DI#~2x-#b2N#R-+Cz_3wN3q%K*8B1Ed^PWz?Dn(BG=74$u~6^oyVY`ekPG>Nmd z(~OtDZL`_P<+xw8-=curuNBvK3w$Q_5?OK=tc(QLL)_U$; z-qsv+=n{zJnblKIGNDIug#ZE~DeJ~Xkp}6*)Ik~EDMUpI)JABl`f~{4ZTOU>A(l2= z`6?u&+;s5rYxE_&>u#2Xcmwi_j_Wa ztR~TXZORe1duUM#6qE}aoFo+SX=DLn+SYDoFgN3*eVQ`cXEx1Nhvp)Y%Y{u#oU-C8 zuH4pau_JIgT4v-ZR^WL3<)LG9z--|#Cys^+mrOk^-vD6m+32Hdp+^qzU9o>FGOL8v zu{lz4ukwVWhA0r?^aZB*lGo_c&Z&!oz4YBt8mm^wwAiI(ED<#_R^CrZDFB@&(^vw| zYl4o8hZ~Ht4G(Je8|CJWH-`hSvWN3;U_LVs9&Gam9IjlAnT9jN!{UKtaI<2M^pz!G zee>GovHAOp~#yQ>>#Uuz;@rf1*X@c>xONyylty7sE zObfYYUj5=-da7|n-hGSFLT#w-aNPyn>DnlfocR}^gm{mPMc$*%}!`MeL3o2jY3m#?@7ZR zEG9JfPCy%5aPFVOMzi!xQ?z^ zqYrRR{Rip8Y6$yck=5fO5<7?VZ_5MADLo0>B;Vq2yM9ePojv4&% zJ(FMuA>ZB8(WEWh>}c>lt2XNQnCHn+_M}&f3vJuiMa#3M2%$1o4FfGWcgguIt&?ko zUvy0XR$qjZff(rXgp`VY?{Typfz;6_6b`ob8dWPGXCdpI#S;Y@6ZL&Vf!%w{7?({{P)d zZnKTa?VeuD=>T(CdI_Ct-K?jgcs8k@vz#ST1BN_a{rBbm?%#zgRJC}CxX@G&T6DrfqWBBR3;2Kdray(ce_ zI$8E(^!cY~ZU_z-8fwr17FqD>mQA0DqFT&`Qg`iqw)ZK(u~r#LCEsFu3vx(f`xVx- zPCStMJD0tK`)Bms%^%Dy9Yo^o7%ryfG;L6!sm(x<*eJ=oa`b%EqIO1vWY02jna-l2 zwL$`&uylP##YTeS)J-YfhUI9nIM2Z~r`kbf9C*Q(uno|C*CMNwn_G-~#5!8s>`~aj zgTRTc7>|MMu8)H0I`)0nI3MnZp-ned>u{+Q9d(*WGg@x1>R02}=TjgM6QjFoFwqjZ zvC9g4y8|Tn_vqe&>Xh=7(%93fctgC9jzlLmm&e#~5si4QhfCmha`DlCH`lm1!M1xg z&n2D=KpVpu{P0>!I?I>)Rw#(nk5t6Qk=fxr%>06G@A!mEUQ;wSs_907cddJ27#+r8 zG^ZAJ-veglDOU@9TMix@{3V!9>$Jz4aprb37c`0wZ}~V?)G`1wTK6VEJk7@9#;=j- z$*)Cd->B@Vf`6~Vw!6;I3$egh%EH1?;cfg-h5)|mI=-o-FwRT(R0Ij^h!Lu(c}#2y zA92Q18@PPp3_&w*_iuEev$?)a^_|tz!C(KXLt|8XM=<3Xvc!A=YEir=8YHW&5c`GR z-LPh(Lo;#5|NGpSEAUw_o#tz5tJ=bD?J|JMR=>eQPIC`!< z6v87IU<1R%LA5PuvvcNqJ*ZlSUE3bkaLDnsv>SJ zx5(!vV^I12)|CeVvQ-%F;S=~N9V+VEtdj^5siQ=}#WIpu=h8Z-4J*9&C8mvJHFFpteUA(Bg^@6V5^NEQ8Rl{N>)99~1;e@oY?}{|#N^0v!;79p zL4@S6Vob$#9ZZYS)2mZp4UlctjIV{ohq^wmD<3SGo>so zT;)>UF}dX8UT6{(0PP$qShoN)Fd>gFf@fZi!g(L^r37jB1Sj9Q)!%OBF{p_0%SVo& z-0>(~OJSN1@>KmoUV*Xq-S^3Fc+StFou7`^9PDwEcN%MVIaL9mua1mY>Q>8~0whQy zXpV_^PQCSfWZLrTaPWvmQV1+2<5NCjLLgh!oZ^uqV*l97c>Fupb2pY}gGC%QL3}D_ z=gO*$J$B*)Qpyc(Y%C00PI#S{ok0IUg=)DaMSO(Qq5kU2pmtWJvj@a0cy#Mo5KU<3 zgbbE+1S-zJ0f-d0W~U-Ig^BCvPjh!3Xe>uyHQEF6wS`ca)S$iZk!BT}`4mfYP#o${ zc{njDI=9TkqLEJvn`GY;t|mZZ;Hj0lZbPRay7Kqgx_l=sHS|S%~9GsZ3+i2jt+I>w{r(l^-8WzqN{@*_s8xp2|^d z#0@K8)GhYC=pD%O=oZ;Jsc&xyO_Lqcvql?E7qdup6q`j(1lB|eE}t`!FeP|@pW**6 z^6Ik5FG)(k*1^cw<-A$w_Ef-pL-HXFjrsc0EmxH^ZQ{6K7x~y6QDt(nW0kzLJ%D?N3W;Hc;W8XTzz;;~@;2i(Y9f+4a3Rq@SCT+7;H*T2Y#qMvd85f z_4WJ=NEE9_ln$@myc~XJ8`_LH3YS~yKT9O9hc?{8;2ta1 zbWxg8Zo%z{W8v3x-mp}wa221Db1RX%v^l>`gRG6lhv!9HnvLJ7>3?l z4p7?zt;ZWG71!ja`M4f|Af!0&B8tpF!M?-9p#4t`Q_yQWZXk=^gR(c&Lcb9iirIgW z1N{=QD4CZrEBMPR`#nPdRN&yqhsMwRB5b6z-H*{7KDoRM@^6nHxn$!I!|I{H%N3}J zSD7ZVG!EEjE-|YcLhm_>nx#M74P=Fj$`?VGz(&ns_fbHzVp6j7^qt7`Q8(3t%xI9z zySJiN{fBglYS|3r}=d~6_y)ovc3_{jonn6*yl!b)OF35Gj8$b;BTVJYqSU$R=W zL?(sF;tIT3*>~k?OrYc}CKyN_RjfOQeEa08RNU_;ymmk0_q7AB;y`$2G%#Ofh#z4V zu1&nf&uCTEY9E^TS~n2q=_)6=uqOfJM~cep1mO>%=OOiRTF!trJ6s0Jl*Tu9YLK}` zKxC#?7}n(0Nrh||2_R2#!)+0V))rr)Z+DgWQN-or8k8wk9q3Ecc)GJ+YX|_- z@ih?1TG?vi1TE~k)9jkMS<$7N^TkZaCUP4fv5a{%9}Swa zM(B+!AB-9F=-m!ES$18Uuq$n3vi1Lk9pIlse>+9k{^3+0bhW66cKjXv3(JBE(Z%N( zz?7~GKWRjd7fI}7>qPhfrEU=j8*Qyv&Hf}DKU2~nZF!7hyi+2B8D?3Ba23dvP zbljKl`?a*TK{+P~r=OCCfm!8!!0d|r7oof~n_=H;IA3|Zj#_ZpgYHo=VGn_JJD;Kh z0|1UpZK6JSTE>Ep*EGyKS45$w94qw|Oq_FN#zH%1fxJl&*>fbaiqv|HWivQ|ccIm2 z0isQ>%*d5)BRR0coFle*!${0!o{QdY@`T6mbNANvhz*k+Tw8~z6F zz;ss7Qei&f91Jwi_!&wc=MLw4UiibH=*>|% z7}XDyE2sU`)Z8DcN1h(RH~L^seF+9xGgeg--AGg*px>w++bNXe!}?k=!hO$j^8jAL zi6`QjiA`1HQ#`4FwZIc-a6`3jE1zd9LgkQFZCeHac30<16(wX&nXvQj>^gl+g-(SA z>MBoa4Ogs-%B6GRZ{IfCgcH1y|t5v1)Lc+;@4v2oTBv2I*Gs<{AK zYg6qN4HoQdYyXCcPp-~%@5`?72;J@j#V^jMV!>pR6|+-0RKIOqGf`1xmmeqU8FEM3UoIE-P?5WM>FY4^yRVznj7->joy-(raN5HM$sJbS7 z_S%G`YyA^Mgw|+o;YeaV0622&@x`=VZvpb|wk1C#%~I1adD< zMNaA;CK>fVi;T~Up9iR5Y^Tr^H&klafPsabUg#|Vo+ej723Jyb@N_PrAs0rlX|k}j zfgp)TI^12FHl^gg_}gsEWpt?h(pc~{iFCvB%(akK?m&z}Ll{{v)0xB8df5KYH{xR8 zf99D3daIjK%~O=vW&!h(Yr>WSK9;6DoD{)OAx zz+#aalbvaAhNOjI{VliHMkC3o&oP<^>!OV*SjS3~lKGRhD(L5ao`pG*8ga zhVpbM3FR%;A$8Q-Ewt1|1Dr{crfNYX{t7RkH)6tAIcEYPP|+0x65kr$DQ#+G3_F~p z2QOqni7r-cmN|@&N+@uwAj~P73GWP4*O4-gM9m$DfS>VtSfvE zPHMUTMgzC9_Qjm(TjVfunPU|SHmq42En;H77Z zrf1=4VnObRx@?vtv~13rhAj2@16r#&`FWb4Y=_c=knaD0P^w0+=hSeIhkMWlp9_t; z2^1Gx13|OwOq_)Sf~0!V?>a@&_`U1Ptj-z$Ca2ZVF2earG2m%`i%8=y|KxFb@#a5g zz$NZYI)UJW`)KAVtX!o)v3lr!qB-%v9{$rSEcYfQFx%}9>%e)_q*vX9CbO$pWu(Eg zWoQOC)fb`!$NMn&Y-i=)bB{3pX}kShZh$i5z?pI=5zHE;iVHf6xHaK)^~{sgoa8Fk zBa~dJL1hWEs(lXKRN;7?2TbTr*o&*JCoP9w`9jdRfSK_=?U$w~w>XQi1>#{ANz=NW zmN@o+eb`#(+VHCYGhl0uUijM{(GAr-{bT?rrp0k9ES*iD z3wcCD7zAQZ`*Kr|X4)@C=~q=40)9c1E05<_tE)M5m`;f?GUB%?Zd^RzMZH?Cf!p3c zidVJoE2q%U(8MLV@9+xrZG7 zpvKVl#WO!+iALuhd@QkWxJ+f`G>+%XkpNktBDX$1sQzN17My97A%NmxM&kL1cW1ZZ zlP`>kEOkn(0w3A~PMe+i9>KWc`$S`7hInh#@nRtPQsE-;d_C`*B~e}~@TfL#%VuFpF@1qm37Xq53#JbJX(wWc zl^*wk@KrD0P*XkvG_p4`M*ok3@K26@>n10~Bb1A&*iBK0jp9Dr6F6h9-qqsV2vc5K zUS(3oSFp0_~p4mUXc=Q;;fs5H7;k3T1J?@V;ua;ST^)gvY*u1%vxZs~Wp6urXa zg$XqqmTpnPZslhh5VaE)Wn=1W{HDuP;F8<)Y7)2=tF{FMFHcxeJ_)v=s3J+u`Y`wN zT2;$35b71$LmYkD%e80=a7vNy>d zIW<11WWk)@4%r(>UuQKva+a#sH*d>(?SCX^ZmUhX?GrMP4h=8fYt4-E;rf(jWzvQQ zof#LF0fP22qTvibxqR_D07MoM&KX_L@8IPI!CS5n86k}4UF*!7QBH^R(=PFZV>=OEd@R9JOMGdj2J9+Khb?Itr!eTw4^cyBl@gRxM@ zM2_k0S#4vkI(T%%QYDQhp_Ps2-!jzgDe_cj_Ev@`*i^y?@|E8qc-c-k2jRMXPb{;% zap$k^EESQE=RyF#TP7K~rInp6E1LpFWKHM0tU3|pMYe=YjJ-0vN8iQueq#O@VdOYX zGrN!)pvo*PSGPLt5o7Vy*+GLykiU0EhimZXr1HVPPC3VeMtu^Ck??%Aax{g@QfCZ4 zF4p3LH4fh(*3BmNz7x;DBQX-A2|*722wx$ImP-^YT{mgrr76hReop97LkB3VMd$KZ zw}$gl4HX<>bGaFYsaMtCdl74QbQL<&rY=b{f2pSrY0IfD^x$Qe0QgUN=&GU`84aDQ z-7*avq_O>iT1vG6ghgpd1LB04Pa5uMy5CexUX`g;--7YI=sNY1|>`6_5 zaoNsvcsz=aFlVr7a9WM{I8mHi z#kl-N77l(-GKP!TMzAB7T3Z$!t{}7J#$a4Fi|?l>Y-z8X1wJ9fGK;rP8Hpri>{d^+ zdljU5@bccoV^2CFBZrt94>AbAKWh=|+swJ}2*gdhBz*nk5v>n2Q-F+9}q+PZcP9A*6MEyJTV z!`O3#OfT|L5255x;d?+7(8$+3ESaG>w2K~bF4R*vi6E2G&c;!1{(BrD&Y^`-a&cf8 zQ)+TUbSCgJC#C$bKvBLSmcK4hdOv3Q+zV=ix#NM^Ki9fLfE~2@AV!F7m^*R}stahQ z;YkSo?}%^Bjft(QO`QrmN8wf91w=Y{|7=#YjQeWY%O;wenD8*P-j;FwKRKaD8M1KY z?N-7SHGP$msCUGZ~4hx(@vF7&FCUCeLS7di<}5t!!*` z2FCZNbUoE+?x;`*0Xzv^l#%EM@AHF#3)a8n2d}RTvYK^-YnDs(`t!8Gh>EF){u??N zV);;s;(|({TX}bRZm=kvzlxcnqvm8h7`yp#xbGy%1DGMw11T@zK2oVv;;zbgZ84ek z$tA22OJDutA-0zsX3D)7F)C4K!;=(+z$IiEMY&xEF3L61T-(TrJ^@TjbFo{;dWrE_ znYkau9_`)M;(r%f=TU}?f&|dnYX>`5PclEz(J7nfbD5eGHf@9V4UlNQBHC?fJ_i$F z?Pn&-J%lamY-dy`A5L-(DhkDrKW5EQi<2PL3V|tv6h7G_zSA!Q9@9;%9hiAQ28^+` zirj>!mb%xnLDAmTS6VPoZW@}Zzx#8wB@pGY7}Ee*oGI)hDcr%-WNS(Y8oj*}#f3KVgfnSGlRki`d0Y z6Y#`jZ@_@mp3dIHXSX@Wsb=4u_<&&Ay!<2r-%SB-M#_yY11TIAIJ8rG>GskWWSfM$ zHY>3Xi_N=4^b~G=&z7?*pJchaMe~5jgv(Ib#_OzLi>^ZBox=AGkT3RR@!yi=t+Hu7 zU-6C2En)SW!!3G7BV9%vD=uHTHoR*|mgN|b%f<|%Qbibv%T!^|(4pH8G*Q$ePf5bu z)*Pz}i-mJkAyR6sdl}WU*W)?%4D(-zpTMVnF&A+7tq8cX-M0R)#V7Z&;$^zNl3kf zZYEA5gTfukbJ9@cBO-v*WT0$;-}bZN2pA68^s&X^y_y4VHVyjwkbJ3JkXs9ou4zSPC z&2dxsk)Hf+b9RjUmwP#`uDe(ThknUQ?z6{iV)Dm0mIwmjc6LMWIH58wNHFGZ4T!=k zFWy_4>VM?4<~(#4%2Pcb0_DfNC_KiqU7T)gT`#LfkT7{ZQI`=1UV>g!cLuHFsIy|U=z3uJ`If0bKO-xc$ukmXIsY+{Z! zXj@?8P4%BkliX6UDJnE^uw#Gxk~fNOY&2^2Q(&5GDw?(UqbIOP0+ zgO7V!-ArD`wxKg1i(6;AqDL2lePE0Pp6@Uvw_;iwe=1`O?Xaw8yFM~iSsb_$iZ5|j zEir=ruA|tg9wyc;zkP6yasIR{1(~JM5S@5M?wgy6=tn)QUk~`sAvu1-#-|=}-~i_Y zh1Ipq_3Lw?3SY5NJLQwj!u+$C)}-r;o)#3A(w1s{FcKAD$0%P?#d<~36Qt;9mkT$J z^SD4;*+)RDgrV-8C#k?l)eu2*u{ltIaSI<8J?8gVR!nv)=ZF&ilymO6icI_y6vOSy%xP3Ja3jsDy295GAV#GQ0Xc3Kl&9gPsruh z=6S|)SQe7g*=ma(skpn`8Uy7pO3<(qEozt!7ClV8?=S`fLBf+a#*^_8f(}wZ(itHl z!<~zD1j-E=Kc#pEMr+h#C7j+R%U-EK0LIybxdCJP;AcPFU7fB0U?-+f*JzTC(g}EI zG>Mga&*pvS=%Dv_5RD0i3Q3rJcT&_*$9>h45LCs00{cP|V5!0`%uwZK2526pe$3bg z4G=q>z!P36IzO!pY{T8+zJTX$4SJWn zIg`~4xor-=YeW|6^O!vi)i)06@eEnV%d=;pnN_{3PU=eO)=t3ZhV^$vYezvpr6H(U zrJ_az)yW~pAs{gi@ zmX(;`r9wOg-9sO0s&XF~4-{9q07JP;#R(Wt0Hq}-4u`)=5E6tTZXm-pA~*m^h7IXb z(9`hVpz0$oi3`S?s(qYCU6C_HvH)E4XW1 zhTNdT2?X!Pyyd~0*Lh@tmT?dKiUm9Fq-QG-Go;NAuV1yE9^;fT@3Hx=w}ET0k#yP{ zHz!_p;`eBzDN8XG%o7gx`-<8%qT4sU{l8wI+TKctvfIK0Vr(kn@D7}bagpb0^bihq z1tAM~#%cvP$>Ivb}B zfs1u|{`pnoiJtau{FLCU6y_~ATc6la;f;HremBP>AMWT4*Y?vWED}3T^u6prdW~!7K0>kbDes3cjDF!GoSlhQ_3o7&kP6K{7s@BU0+0i~Bp@2ID6`1%^O~rNQcx5&( ziB~NJY4{LCg0>#=9FJx>bdAMvz^3t4Ed%%#$1pS8!@B$?kB#V1#)2pWsjQM_bMeA? z#b(kr_97`Wa^?zJzyPPYummF8>2OVxv9dRYpwXtWHh8HCdsz_95oK z**jt@mnX&7+GSXl?;u$uCDnOPXb(B6t;*$1V^0ihs?!HUGPE@K^}fVmHC>aXtPp#{ z8IZ>SF~o>OirAH;56cb%7ACT$sDQ+z&+tZu&Rd@NsGAnq@k`SpVqKa{v&t<)Ii0_& zBAF4}!F)n7^(!IIVuT@RS494`ZU@QT7fuSrO4+H6l zG+od$Z_gsvj5<0tl!!`^^30JR=@GvPb-ah2T&Y<@FU4?gFHy(>Mcra08;KcjN|rN} zkON3WEI`6u)Br308@ZrXyt`_4Dm>t!L->JET|(=T>T8=!MjyFj&Gy;xeA9V3D%_A{ z_mVGqzr_h+Ns7b_Vlk$0m1X)-!e;zwmNC|gobsJdoX)I;(!CDZ&L>H98f+;&Lmwl36D?fgrSbZ~gnSHK z`suvRnY)r40hJfy5knT-9K}_o6UwsPW809!q$_!30(M+gKQCC)=TescsRM|}Haa8^ z42b3SudPfRCFw?&jQ1~&chkOZe-sZzR-e*tmlASC`_P2@h=@zDtNT3@T;r}=dNZ$2 zX(z!?1_OuU4Zy;e04PzdPD+#CyGGl@FP95qE?lF2E&q0Y{kE^WCxUTPiBpS40L8-% zof0oLLMm@pj-n8^CX2{7+WmtN4I5!a>nqclaAVK0z1|<8K!$&D2?HBVQ+wRSq})V6 zv(?LEq&_z;Ft_&Sw+m(`EHf^5VuX+d(Fi}ZRUW}m2j7wH;@RN>^3<>#r%J>6X)v4N zW=gNC5}W8iPbg}5xTL5yDiksYJ#v=k!UO&YUYZ1(Jea<*W<>N|H&YuJ?l+z0sp{^#x2dO^1kbW6Zxg zZkTjc=yy)DXDa?iz4LZl2r1rrGu(IgCYhb~CrXlzFYa~zdfhJx06vN=eloFFvN+lv z5$~sJTTo#IT;zaL8ruh}aA}p>JENtb4e1}CYsEM77OlVQf;>|F8W123ZdZkuqST=; zd}gC#5(R)gc)MMW8c4+ytJk4V^aWBTTo!fz5x1qw96?Wv>cH=mExr5&KY%LrnH$=Lf7=p|P z{5CP`hW>eUMEfUYI)4qcm_sw6hWW4y1NzTQr~F4>l{V$J@XSZcBcqDdQC<3trDW}N z%aumuD>(pNjJZ&WN(r*y1Kr+QV3}!amfQpIhmd+cudVzdx^jS4Vd#k`utq$O)UGDa zwIJj3Es@aqS?Xj~rGqrt*#Y92)PwcvE7_a#Dr=({g=fqeQFU=ACYRsCV+%(ktxE?1@G3qG_m}_pKAlszY>#}MxS9)VEGdRQ)L`Rve#`4>v}>I#L(S-4YiNPweq#eFuKG>V z`ew8oM$I8l2d+WrpbL+yeQ8JMUEBF=bMPd{lk0(t)X)X`rj(_N8>8M6)aON>9xPAZ zlH4yW&JXXpR^qQ|NPuiZarZW0LqBLC7`=Ged4?x!=mn2*O{qwm8dyW}6;^+9AD80O zp?%%+s$yktOeKu0SPS8gQ z2@bfAt5B`@Y*=?-7PTw2;0o#4`L?q}T3*O?Gz%rvom5kX4;H9!teHz013oYu_Jny#%ZOg44f7macr*4f#*+%eYIT4F7Eyi#Pf&(#a$HR9E7Ba!Ce6j34;0jL7RWEFK}wpCgjA@LX_4i$lV zEf=30e(l!wrrk09QU)HOV&MP=gzlbe53yOLWT0^u1s%X9X23JkHRKKh`?a#A%{H%J2mfWJ z=dspbHF4?Z`b#74=5~G`^{Tx6?~g8(hNLKUzT*g~mo5IYT13$t%~m~+2o=CbB}1zt z_?bu{d{*Y1#eCBv7zusV`CHqccjbQuX83#wqwwb*{p4p~w?4K{R@~cm_&QFIj9pKs ziy|~t6lv+~-uz%K(`V{Lb^q5IBq2dQHpm2tHa-YzXE}brPr+-1($-}3@70HO(Ok7> z^47|7&MO6Ai%|8RuD9Wx>H7!*nBRI@GZ7zF^(9S=n3DO-!j9p>t2*KT8OmL#`Trr- z_U?O+%0b|{{ub8dSPBqF`6N_rrO`k(kkq{``IyPU~j;W~z03YJl1A0%Dzyv^*_yB!X)$#Ii zSNbrMv}ei>-w_=Ab21iqh`BW`P}RYQ6H1Rmj3hXe()oaPVD#_TwgP~Zgt!#{vzW7{ z@b$k<6jcY@{YKW#rpIt=S&4CsoTX;?R!(V)2*}`;G-)9IZv#9$t26^m%xm1nZ3!^a zA7B(585;2$FujLX-Jt%zEvh{kYQsou0~K{#Ok#q{xZ1Hm8Uvr339)v3M{;I9q;ti8 z0=9w^f$vz^?z#{xjcR3#!K|Bl<{w(;=S6a{$x)JEcryf)){X($qBH;0?fuzO!P!A# zQ0#?kkcOo{1%)=qo(OMMC8@4+7jVcThqrrF(lgPDJiAcd%R8jhl&$|q-m1;}Aw_)e z#`Lwwo!vKPUKNUf3Ekr(??yrSkMy+Zo`&j z-5S=7agzKZt!LR%b{MLbw;WlM8rt^o7=e5u2}5D>Fevk;X&Syx(N+BqI459F=Kw80 z(!Vs$|MYj((vZ2&##r%^i_OBqdt4pg(0aOL_65xIXaw#~8e-Ad{B(H=1b_6<#8H#Z zbbR(tPERtSCcZbI2CQ}+)j+ZY{dng+_Z2aV-U3q*=5n{nzI0rYYnr2@JEx$Q1=IYC z10s})lKf#A?>tiryo%fYq&Ax}dOl#aagZa)pV7;qk%=X?3!tpkC?h7Tj zjoR={X`ADNmS!jb6cyPCRb_DMB{?Moq=hg0GZ7urbLZok@IKroA|$7;*zgc&yzMp1 z&~bEiOZjHphS#mv{T&mMYCxdkIs@cYjpncqZ0oN10|OHZluZHMOP4Q2a0|VLzX~wi z^Hmw4k3bE~fnTmm8AYmd-k-M?W-)MV`MxMz{E9m>?-swurMZmJOn4I4fHX~gO686} z!R$eF@IAVsA^@@mfuFf^8Shl=^8!W6@n z>7pqy&Rtbl+bw$9gYOIcTKPZhEf~n2#sjRA1&~7n82RDQ^d8XY1egJG$(vn^ZpU4lyVOs{!U0)WZD`6XSTMO|r zv7H-X2z57RkH=nPpg(?e7pNr7o{Bd^aws831xq6heK~Hu`5c=2PMFPRP)n1hREQTl zj{cE~+F^6%N|#@q-6;xy(zsakl->Y~ryl-C*E)^16t%d+LSd956!f<5P;9h^dZIl^ z%%6+ibl~=1P(E68g+tJH396I%umCY@2}l<~rz z^zGg(@mt9$vDdY-#;td|v?=HRK_J}EkpgFUK6`De9jI2fGq^Le8+RHtF@|NRSvsX~ z@5=MfuJ13XcWa!Qt;ayS-A+s4Z;Us)2ShN22CW14TEmHFu%g|(ueOqo^TFVVNQBUA zFYlSki>L4o)?J_UmQsNw7NlPUV-=lXNX?fLX6Vlf>T4nH4p}jvb*Mx(A|K+^$Sa^0 z;&3G2HxUE6kI*?c-R3)fmd~cJ&l@5s)+gRG>7=+MXG13z6cJo-C$zz<+V4BKf?O8F zTTNfamG+J*cfRnaTGZQA>=|9Xmf`ThF+rZiGyyMt*MOrg>C{+a*%B^y1=@VV?hB%tN+Rk!+5xVj9 zn|QSL)shG@bzhY_ET_{~ZC$kNv)2m+0A z8vpM(MqYoALIm?m(D}zDRto1k>1S8zCCufdPGKnV=Y_Sd;m~-%<1fgEiWSJ)tQI+e zhe#$hY6ETl?6MAZ&wS`ld7j(Os+3bL9*kpp2I}MovJpbMF@wt#EaqiE#G`q*8R?R~ zZ_7-cV`@97`$JW!i)+8V%o_@^dv}Ff7sF3IA>vOZBd0f5q_EmoZmhJ(ziZeRztd48 z3Su`$j@xNn%HpIy_Zi$cQA^=?LI^cu=4|jt*D}j=Bfl2n~lot9Vvr!cevT4T)K-Uhn z=CmddR1vM(PC;9N3cgD~cbM9do&-+7s%*!9X~ex+^iu8S7$!1+_7H1vcT z&6X_Fn0N&8-`ToGl4V3+ zo$R*Gr4Xzdz|d#r7JvhJd(k@Sp zRiUbMCl&1@Ad`8)sQ%|f5G;#P$A;@2S#%IIIg9(N$A2OP^RQ_e-^pc70#LU5VF=>R z$AXH{ov?e4M&&l9VGVd6UiLxc4gn+|J0c^_fU5vm+T!+1CSP==mzPyi?TZ93EG5g~Snn&KPjMUvpn4%#^7 z+9vWrqU|zR+ozTjzicMoFUCHpY5ea>i(c0U!aEi7uR9|@{s5QJzy)qd)v~m<%4OZv z>%6^;xX?D!7Rm%Aqw|@DY?NmL9ZD$T%nbA`wM+N<5t(RO``F@-6?)v)r*^&ZSXG|t@q=^j^$%t*PUHadz#8K zpGa?5WyuN#cTn4d3a*<;EXQ~TyU32ve3rG$L3bY9OARv(by1Yy)F24x#8{NujDfDlR?*GJNki^$yc#|zBrM`OA!auCcDYxfT zM97?>E8a-P9=P5w54*8WHq~Y@`!mqhpcWGe3`?6=JpR~2#Wohj|0~`bwH8ZHaWnKC zh(67og4UFSl7ym$sybXZ_L4)u+GcKvS8}rH7r_fLm5uE^`0I%rZC9_Ic@H0X(bp4w zJ9e9bNAOpU!TP#+#-A=e+C`U?ahg3)Wx09RU_5xd!5oz`cB$IST&bG^6|O>EI#L0E zU$Y@SF=Q$>Yaq6dhMl1bHcPMkN``?c2}J3y47YSQ^!3hwZ3VD2;yac#4ocr1S~lC( zG2J=KW(5iOr0nZLdMjC1$^w-1G~ctG4MFxg^~O6ZKBdW}x&0)RekLD`5|yXHZxF{A z#f3cAUL&CVOxhzBsfo0jC1Q0LDJa}2N71vM7T*?$(G%Y4sE9)s$#o#U7*yOf9pBO@xwr|7#d{g+?7H><` z>Q)ilIk;%$e}yrw{1aA$>tjT?El0jCnV(6QzH~AvPUjCfqfZ|oNGT=sQP75g(N}l#gW4U^-?`o36P<*;#Ik~9w+v6f=rUvnz*Eec3>_iacI=q z*F~vJ*f;U-HB@nq@rWB^agsFA0jx!LCxnJV1d1JbqXSg99it%K{Ku1RPTpNmkwAP= zdv6*ugdM`*go?z;ujr~GTx3C~NN?lVf-+Qfesr`+YD$SY%(s3Y`&!h0@rxb9~GW;LJrq-NA0eCJMxbUKLpagn7q?_3+Ud*i*7lj8f9Cr_``L9K~IV4OMd%+IbV3{$s-8BTs-HzqDgsNsg>&O zUJ|$b;ET;poC%}_3~2yf1h7e~Wwd^XxA^#vtosh{a%t2;BrF>gX&K)}4+|p%%~>&X z&bP=En}I{PA7CahB{2@odf_^b(Q4FiHk7&ZIYapvXAr~d$XTy4)Jg_`QT>DSqN!0f zPwF)w4R!%8tZirma^hh(H-De^6wrkf>qTDSc1n01PuX3Wi2u3sG-p5FkTPnuBhR*% z8^B*C(gJh`4bZjw6L(4Dj&pYWmac)`{>Dk`deTu(H^8KKqE+F>vq8F5Y zU=lh%(ribmw?h2>{>>m@`F&f)>%8DckseV{IO@HA=_wQ9#H;(8=b>CEMqfYTt8YJJ z`}vz>AM^8*>NlC^v;vTOeAV5Tt#;VYg_lod53EKY*e@k8M3Z}|U0|LV^OZZDdvJ|u z3oHC*zuC><7dgh~18tS9z2A9mx_cWu7Wdl39FgN8Ua7$@9uqbu*X4Y=%hPp^N4rGk zjLp$UGHIx#%b%Hq3sob|{?fp!2jv(_)9AF{NN;X6%%9#M8y#Py_}{ick)fPp(?JCq z(uLMW5-;^CESZtkEKp*UvFfgF>kiFpJSXK;_A*wCu_#I}*P zqQbH+0j};9^oe7gWei%b zDcALFl#xys#ra`=>?P3^k(a^AKJ@j!X}gxU#KX~T|H3S}d@xlh=ALHjtm>oePiF`I zNk}?bZ%Y}Q?)q;m!l*aLBptriI7L3m#?$G-i(y+iYv1kJck0qY*QbX+ z&565tktO;_p8yhbl2lVMm&9d#J@o<>T8EiTs-m=~$i)zdQ8+*d3*+XPu#O<_y_tTh z8D|SjZ$vXsU(GcB*uvV+wfBK5Qq)cU_C;zJk(;dG0X1Uus*U7UR>r_%$o0I-SVDHO zWPuF&d}AlvZ<$XD!vUKHiMMY3*Cr{H!u~<8u^k_45dim%z9A_{XvvVqR&W;0#3zYI zFc+_qB8c@3r=D6o8oeX1?bj)SDouR+SD*{Vp2{!X0Q6)2;GVAMD=?ryIzPti8M(bG zZ84(Q;7xmoLX;5hbko#6hFEwfB!Jk5SocpcRrZfz1ZjO6dz&g9ZQJN2@#;zGBpIuK z1G&-)ze<)buV4b9_^@QxH362dAe&<8@>^@oCJN^ueBRr93Yvy4sIn3uzfXnZ3s98J2oWgB$c`*UydMVvI~zkg@?YdbI>drsr%m7lmIvda_(6id zXO5i6y+o0%NtT~M2W`-kvqZ*hp;H)Z!cQHM0gZ{NdE@*h9<}D?a;On96*Er?c?`IL zK3D!|hW6`D40&GGF}Au{T(+-~yuyX)C?i7AopP&C1#zfvca9;;y#Ph-%K8j}KR3rp z&V8%5+_#}O=XCJc)&J|_Qld~EJQbaIPf>tKQ94BNl~mPZj}i8Cez}BGe67t;Y?cGZ z_#CJHB8bS_ZLqC%rzed&Cf@CcD54Ovze%S+UI}yu^UCwy_GX2pT2Vv0o_tH(sBWBR zIV{<_5jXYTLB4^4puscXFdghcF=!HJF+Q21FGlSd;|Ntp z;^Lj>qmHpJDapu-Mq$wic<4rn6w#OH1ufP$rj+}JBF0b-YW>Urx^VtRh)JA+4g9)J1*~K@_l$NNoC4*{p z5J3sDQTi-MR=m2hdN+sqUho>`Oi7^vK`@rq zeauSmmwtZ)_WNeQTVeLMu+wxsS(Zs6_ z7mLodXO6b9MroqI6%PyUj>+6f&1^~da~#oRLTJt(#7;%%pSPl3!AOVWy>}ydk&`Px zZT>CWm(J@yrAQ(2q3eKxP9)v$H^^hp4xkO8Zna4_O8MNHK(YjNtQGu1x=|k?gr7lr zE*s0mmm6a^i_y9*DHCH#;<_Y#yl&-Rm_WS)1r*l|+1mj%6sz@@{xrCP#Aute*s)H!MSoEb>Cvu{(e;~ks>Lpgpdj6 zKGMVs$U9NzH;{K9r}|eerP&RTR!IH!fI(0*6A|pm#i6`k6IcPaG*d#qM$X9^r#Q0( zc(%P-4s8VV>H`bdo({7d3g(wC&KBR@@DLYL;|b0B-D`nUz-TEo-;%n4q;#6^%5os= zW>ZS9m&on>i8!&40)_g1k(C8lU3_Mu4(1!l`ipM8v1b9KOZsAJGyY?ZsxET2`=NiM zF2FBlqLn>3XnG|RM=BVgo>GAu&O$g->1vslr&1m0b4!uexplBcTkjFF#P)R z9WT5R#RuC@*5BU-EwHE`ck?l@Ilg%w&!%0^EJ1tZ;SiK_-=^he9+BAmoRMHp7dP?B zs!YE{P8U4(vH-K+cPV8BYaLf@N9zp+Aoj-IU-T7X z71e%ZtKGYQLDVsfZ(17(i8*VFq*mwV!vPobJ)B431g>a;z8kG}d2?SUvkfZDXn&cp zFV~}PwB|u$Mq!BByi~VIJEKR5)^Wm9^9T5N)%{@4b}YP^AoXvZk+EW+t0Zrvl>ky7%=L+<*yPT-S(iH1H)D&v(~G>rH?BPw!l5zGJUjhh1Og^MD5_J}x!c zx%e(u1UeRIy;!U!?(H5lnP2#nbu-{Ex)?~3utt62_RPBYs50!a_sAFwAf>C6mXKXw z@rV$*oIUyS0K6I(2HGoGObUQ?`iWhe-A3>5)B5weEzrLV6q@d`MIfF=n4wDAwjBSe@k-_4nzd) z^3h7R=J$kgWWQqq*@O%A6(>1Tcf;GJ>F~o~YRi80DJS%f+l6WykXT^F#fa(PK2Mal zyOl$!-plMjnUE)dlRd=gJQysgcQ^8tHy6v7iE{PY2i?b?>v8{u@h)S3*3&&P*9NVo@QK?_ zQM3pUrGdOnm!gIBY$)W0FGfNPHaIg1Sg0S~)=$_TR-mrdw!xxKt@rL|-vjv`%DL;e zqopKIJ|g)d5UrhOeU(qb0}TR}uKVH2dem0*QnJqRuM6eluwyho`$boqlG zIaaZR$6x1fzI_83Mi&Gh?hVcj@qRcr9D(+J^6sPWx`_wY>-}%?_%K}_CapTlnD@7j z9jpi6(&@HvLFdI?~NazNN(x3AUGlJBwCSb=JG7Z{G*BZ=G>}Bl_?t@gpYmh%oTiLzK~wDSmG(e+vH82*lPo9DFW_;bGd3r-wNAE zxMwrRMtVO}P#>>*o)&KKqZ39)dxuEyDi;iXNI-!JBCusY)O*hh2cmTM%0OCHM&Vp{Z6 zObu_$sFtj_iUnenQ#Z}5KRCLbk#aaBb|nX&!ApQr6b%jol7x{v+6~F7cf@n4`lR@% zh^NqAA`8(Y&bdrN#fP}f&{%t7JV&Vd zn!_v|Ps~u_&N6yWWbaf9LY0eIl%Y~deTv!IP28-FSrpyjV=^=n@=7?ZjC({U&jaF_ zErhNeq`a2b<0P6!L9VEqDV2u_$E`zj)Jb4|C%j$a8sGD%nI=j|aLUdm?7eDNdt*S{ zZ%NxeZPSXIi;&fEPFUy`FAe*H=FKKG=$col-#;xJ=kVymJBvf;A14 zE~p%w`+)R?V#NTL6v+YdJ9zl?O~MHq%lrFgdKp5$$h>MyB(`9HC<>kHQ0R;L=h1$yz}MyiW&p$`TIaTm zXv)Y7vl=r){3jZOO$hEq4ofV!-zr{PoEP_uCPB+An%y`gK-791-LHQCiOl{S8X1NC zrQJvj*(40!5OtVZ|Cl#xbPxF;p*Ff84{uHgCMadejgdQKqGra?QGd9|>c8jfoTd(- zXZL?9I8mpw+XmU#5q)F~!%@W+2(Yqk9OH~oq0H+dV28wPLET@#sU3JuksYf6tB}73 zI`T8=`ZoWwHx5>eu>SsL1K@f@ZakNu*;B%Tk2Gy$W@59N*YFLbGy&0+1-iCPTM90U z&~QUz8YkP2$`6FQ<^c#CJmpZPinqClM1$h>Tqpuw!`-~-mph3&qh?Mr2JnkPKTY?f zJ0VXXF7Ez!maHLKba?;3G5vYM!bh^W;{&ge_NN zU>Q_RB!l5|;-^Ug#*NJopwuWxa@Y@Ub{!4m@e8QxmaW%BWTap=HX}wJ>9cKL2z(hG zb&|B)x{qh;8&!MME4L)Og_Tj2*%{_Ub8&8NYT_q5&Eh)t{X;0fTdpugi3;V${mi)q ziC6a=7=`f!Ji!_loSpd}yNMiAX{<}QS$Cz0HgV2z6oX$G!h}61r6(xRZsV|Z(uArM ziZaACGVS?(aWi11rjfRuXr^`6Lr0W>8z=60^hEBzk6Cxf1Wk8Z?F&xv@&9^?QLfWB z=LPKg+#3uh>iQrG4gDzNlB>6_6Z;f~nhbRyeJUBv3GedYbMto&3PC`$2=M#AT|Kkp zTbiGvF8IlXr8Ff!W={c6fIMnau_yh1dW!%IB5cYxd6%liqaC};qqvhR5XG0*2p)tq zo5V;pDKzIXjEmj}66(JhGp#SpgAE8FX^!2MqHRNf5`<0G`|_-mBGVc~8zNyqn@=H2 z4kz|Rt`VE?6taP3etM%r!-hCsx5IlNpgSIeaUKT`zi@eH55OLBt3*9-!=D6`N~W;z zp1Wdz5I#fBe$RytUMR$ivEc7qM8?9VAs`IKJMw^ia{(k3s($A1Q7^h@hNW5Y)qq-` zZgq5{H2agU)EWD`aX})9D1eYPWJ?*D-dn zsA-&C9m(vd`imPCdUI?G3!^Yh-X`rl2Q;Ki_n2oJh z6vZia)^(ndleRGfQLsJX@nj+ZZP_2oe>1XXIhC=;z0(#rXVrU*{|5$r!@f0S!}Av% zl~&n;13Ld+)(9YYeqrI)2HXkBdFQb5tqfnKsbHx2(xbb=@h8#ai&K3>Ob~yO$?#;0 zIar}1Bxyu^SuiU;t8)0H>YABPpYmks19q`ClfVK8YT5~~_ikh}YGv|n0^q}ipo7ln ztx~kEVKJx=TQMfWI|7E=>p3bJq({KW^HB0FT!Yd_nBb#`E}&0i(dxo?d$hxJ6lQ|i zr$u~74EH}(_`FfuAP-ZGaw5Y}_EsSu1w1>}d>mE9W}|4%5+w`R>%elraK?f;@ov?B za`8j1#jotD(N(6R#AGwd-cfc;r{24MtSimOMx^W}iUoByg`@_3fI{gnnXB9;RkH37 zrl6ua&5IvIN2Qe=G7El076NhEWXHtFtBO*ad(C{fD06_YDkZ)7wp`Agbn)>W1@0wy zXA+>;weoH2yu>&tT`98R<>}KkjYR?iZj7jD+U@+Q|LeiQkIbBg3D6|0LlA1$a099qrx%8RrpfsC&;2*{KR#OL) zuM|4W0w#of$_as40TCej!}DsdwgG0_vo?h~0rRjxQPfrAf>yqETZVYmqm^dj(jmhf z6s)?gjIv)#>9yfKz-s9sh)!EmCVQBo#ARnxg&4(6XgL(=sSiAahzJutQ#j7h8eucW zA|VvXG`@gN7FL&k?(k2q64*$DXmJfM-vexgj#Ca^;3Xy$&uxf$<1i-)7)Zh92d`!8 zk-hy79*^$$@eD)RuxUPUS(n5^IxsGt>%u?NY+>Jd@ktJ9X8UZ=oHM&$L zWVwg_n0c?o&2o3cTO#>als63WUx3*<0ayt=q&0nsZ?s~te(S*JOBvE6Y40Wd0A1HDg0ld+inwL?I=N`}QB&R7g z6W{aa(mJ2Naq=F>Nd-|veDjR|Bdc0qti3sSAK^pvb)vpV+*{ivyS~t9gW_~Uc3|x8 z9iR{}(OAy40Ec9G1m`S3HFfU|KA}h{pL4#det{NY37)@(g(tXhLK7gFQ5xtSfCibV z=!C2SRJMvq$=-=$4Za?;y$e~Nigo}!!|p)FVaLB-gKqe1$W%Iv>C^A;9_PS>XT9Gf zKWA23pj{Ie?=?;(!K~GUUUo7by=f`s9aPM?abeOSk{N+A5+_l_OTkL82ujUG$Wa*TsCt2E|L(3$8&>M3J7LMR<+TXdw;oT9 zi`XIs1k~k(364zrJcP*={qX!8^N3;ARN*6ckAjR00ab=LJLVQsm^0>A(SnRIJ23*E z5g1F?%Q-S(g`oqeRnARB=KZ9IGPwR+M(b(D6_b9cJ`8$GrDy2Z7Q-=Gvg&$Ff%*BMfF_g#E?~a# zwk(8U>+R)d&5mEjJ2$unq9`(E;d^1t+ujk0oNHL-Qq@{vQ7UU=$%z+BPFo+%1LO2fDzNHX^FilzF$41?BqO!Z!wESuH%Nb@bwD3r zh=0UE75eYRm~^dyyC)36Q^p;LZa))l0x=wZUALL3?68O}za zQrv!sZW9A?EPJ!}&OLu<+pZzJPik@?kzJp!7`oCWc zZd}yfXSKBHyF)@*z-ba-qw^1zoF2Rp8!;w7_hZqaF4Y8Z>~BY*=GrsKgbw6U8*;;Q zK|&5Q{uQO)OXxieVGQ6MK7VF4vGdQ@JKRjoV_Z__Wgt6OONx5#Qbq3g|5YL_!Cj6Q zIrz>bkK*)dDF^)0TC}_T4yS5mGv+y>Rz0z>>E*CfKVKIBr;b;O6ydDS>*a(mPYKWB zupt~PYE3F^sx8nW@yA7;c@Rrja|8s6PK{@5fz?B{;T2c&n>AuS{k_z(ZuuVu$rA&u zft`MypZ-_qd3KIAUyphUg8?Wh+LPvde06wD5(CT1_O4r)@HARCk23iX)m&~E9H5#! zoSF9^%s0XP#RpJpY@Z?RbF`W@kXSGmgb6Ii9)=t#>~ykeSYN7E_luA-1k2wrQOhK+c*H1Q z6z+GsxRL}sRg(FF;~p$?9y>3-=Ig(FMK$!-DsU(oXk7jBRlKE$pv2b2b=TgT>p~Mr zXpjw0rH87<;-piN#;^Sn2`IzpQVZ>pmD>cs0}&Ty(W7!*_>Nho4r1tKi|SN8YA0X^ zuCO)tZQID|CSnG|w+%9b+y$UNl51fT0qk=Q+^Kz0$s&{@PYOJGmAITVB#^7NGh0Alvy`m%iKrpz#Ng}xbDHl4 zDzW&)6@~U8xhAd%D3vTH|6-(aykVq`LogIuxYl+u((Oltr@4*z=aivJ_NBG(OeZL` z@IuXti=$$6>EF#X(-nnkM6p)oC^#>Ow6{f=L@|R4Q#Yqu=B>7U78G;3skvKNQTG1J zYfKVt`5hDtrs*`;&U#Cox)dwO2_~N?be67Thhb+HL~D_WYvmi80EqX1+2|6m=(J|! z4`ds#fl=fNxjE&nsKpv*As+jG0lE8Das-G3&Q+c(P~t6lKjxO-vxfRw53sKA`T?wR z$RPE!fQYe!MUFK)PS%q64TW^g`EwREQ3l`gruJx)b+PK{DH4-!;_?3AR&j*gPbNLe zKB_27XZpif@vQoRPB3QQbc7YV`MlxADf^Li$_?~mIP10XLKlZa=xxfj`BSD_DZmF} z4ESj8xePYg^OTXs-Aobzye^S7)NvoYx#%jQ3S&Q+NVeGR{@ovihG37r`);|P{ReEo0pPoVQ-36tmScstgdpcLT%L)IpA ziEOF8-28E-qDU~h{~Ri?z8Ujn)p{J{u0nBgeBEFQ9rzdorU34SKM@q1t8IS-ovd+@7R{X0eV&t24Sa`hL;au00GBnTC6%t<%38 zW2*BBoBaJ9ZHNnb39_E-IVg51|1!|pEtLB6!cPK_7d|3x@aNh7jYcIJ6yss<5b#UOTd>F| z^s^TJ>W37RR3_49mlM)rctK{dl7GMAs!N^1@KSsZev1eP{F3-7{9sFl2Sjpqqw$G> zgC>~jXCFH-X2l`;Qhx`nle>f(Nv)I9g^sWbcwaS?kE%u#c?9VM_ul(A!`Zu8LFbVPon;24=eUcI5QamIk~SHGmEM+uw{D*-UPi%#YPbC zF7{w~s?oFvth8?~&5gjy0<(bcU^bV%w~z=&<%BM+J8s`M)m)OcV=zHmb@6FhS{eBA z1ms=cbI5 z{Ku;(+IZuzZdC94ZHsffO}{eP-s083N$3#5WGnJouLv#afhrc?hZ5xG|GxNkHi;Lb z2Wv>qDOKuWt zlBHjh6Hy(iN6pG5V)er}iCtiS=43M0NAKC_q_`n{KrrrK;!&ZG&VSAHK1e zh^A*lt5B-y7OKa#afTw!8e2~NZqL6{G4qW5J8QX}rtGv)G5q|bJT0Aq^-1aZ|ql?_FO0dRL-a7Sv zbG}8C7c}CSBaf_V%%wB|52WK!wlFFm18j-N<$u9UBXOJU7{H(_G+?wKsM(p&O3TP*%c{5NKbffV;Mex{{%~2)pdv!@5>lav*)SRCxD>6OjHL~$22M-^y*O^!ApOzx@ zydV$SQ}&dedwTH0C>06^Egr#lB$oTwKR%APgNCJH*yFx^5ti9B(t#jWWA*(r$elrA zta)5KvMyyE7Uq=A_kBx)hUVvZWqyQ5)uYyd22cXbiSI3#&B%q?5eNATca7g8;^!`~ zO2dJJ2S*C*_sRnMvKUE~YNM!h>VzL6&6RJeDR~z}d&yn#$WD-F1qwJUOXZV%o)Kk{ z-pH}27vY@yXE|a`dRe{FB)9!einO4gF6XWV%MN#@AH`IV7+N3`0|qZ~BXJz4Q=vZ? zq_W}i+i6WG;m~=jDlp_-DkNppu<<`#$5^eTH0|u?F*zDT_>~_N#{Px)s#Lw-Aifqs znJ3+HS}_l?CJ#C7W4?SYm+$8Dx1)1p8d!j0szM@^XFf6Wt7p{%urVOmsu=)2SgS9V zMRc}XqEJ~>-jHqvz=$<2N*hq8O%bJ`0SJ$}upS-z3c7AxFQP0q2U2Oj+=Lh5te`cd zh+3A+uX@zxyP6@OpK8wOg8r2i30(HJWC%JK74$gw)l8t>V!hxyHPN+^-~}OEt_MWi z^F&;0%~xgX4?VJ9-W?isMB?sNXGSd&r57s%s{_99%Ize(9|6)rHua%5ZlMH0CH7J5 zJdRblUo~T!)|@|=;r)R#)=FRHOksLc%y3D(ZR-1VXR-~l*#*&++T$=PKr*|lk`UyV zPJ+4d{09$-Sf{6^6Gl~c@WaAX_uS52$lLA#BMl~T8mX10^LjA^vf0SQlzZY(W37S9 zlfBQ1(+Xy!pbu>?yCm9`R($HOX%6;9{)TE1%>!_5NJ!9(i0}C`2Lpu6Dv9rP*F$|E zd2=<2K>g#8*RM)uSdQGS8VpBUT;{ML#@{LzFnRHqPY#8UA#wr5-^?xY^*Y&^Bcji^ zsY5aO@KC?@$(aJ6*vABPd;B_K7yEi5tds2+=AGSz^b%YF+Dv|o`Z#RsL`-BzrFiSK zrj94EugjS8#F%)-qzY8qwkBsDP-^CsH@>T*ebh1yhn#ZXNECtcfH{prJwt5On0_+( z5%aHQcdV0`D#+_F&^56C=iWyV#wO;o({YV@e3IZJESEq6HXde^-*4G{vnvSJ)SYvc zM3Q6dwtS<-JGSED`go>78vhz#4o6hm-R@5W=7CJt+0W;8$m8oxquEWy|CNFEij0o`9G0+r57<+WNVM3;wO$2-&e(TRFG1ewP8ZxskzkH zs-bkUzm%{H`lxcoh__@a_dK2JEOleugU-B-@X!1vz!dHGJF)9{4w4$NS2E5r;&a!8 zZq~eY104h6BFG0s1w5wK>_{DJPF$?CP~zxu(xvQ(vQJM=>U$2b9qo_Hi`0%HOkI!Wvr388~yEXggdjqHi1;Q2K9rlNa5 zF6+T-C1aPr5D{k*CXofNK!|OpUiugF7|u*qD%Wbgcb3E(JBHKi(SWYt5^zq2r3i-o zW>)M1R{9Rd3j?-^-(%_n3cQaOf1-)2V5pU{HKl`ss$ql#QL*- zr@<9lFM+9QFML51II=m?#+S+udS9HKC@)#@Kh^A9hZJ*LTFE7kwGY@Uyn{*Cul%L* zU|qyP|4MCZEECq`W&=3 ziSD5IeI2-og>1~&BQl!u!Bmm{cd;!=i0<6rNdWK&fFE)s=*m93oVz%r8Jm`-FxaKwi2gQx$2YYhmEJ0LT)R3S z&t*}F9Y%?a!{iEA-3`*Fl8K(SnbqjpD{7WBB9ITnT^B0GbMdp6AM63p+t(M%8Id;d zV!KpE91aAhnFwQADyzM~3gs0Hk=(zA-?rPbvEo_%LJ@)JF2Wo<=QU{U3$Mkqa0ioo z9Fb0j*AW4R%4d5&xk|Bz+o;rz;6Ti5zXR%X(3El$@WE+rd5nTE&`5+>e3|vgINcxk zA)=X<*8Sr9F{KRx%eu2JaxD92*kr5Ge4A~C-+rkZI6evXaPzZk*wHb-MZNR7lKvab z;-!6K9u^C-X5hn_zNvjqj!9_SaH4@=B08yco|(66eNtX3EYG)$fh<&UmLNkrA&}ec z_6q{qw6Up-Q~lC5#KGz5U3v=(R1AqB(+<^UL5^2Z1v8uV>#kft&36hGnEOzj;)$W~ zmNr08deim5VT)$k2j|D763MDg#onsRgvnjL+JJn_9;m~6m9H&e0=(kH%gJ&G9%1wC zh)LdhIBSs5ygSwaz>d+mB%CH5XZWsfhiipg_ge>gR*#2tJ7W9hasbxH=5;WFXh9dO zF5n+O-C2LDh7*5!6Cb!tj1E4$M`Ln;bN7ROC;JbrQq$3QSdB%O-3j~thjOHq7xMKn*)RUX9U0lY zxs!ku`q-qs`x09qC-kA+CMqdP4-=r$WVVn(_)6k1w2bBa6BtGO{rL3+NE}x58ybvf z9m%$Xsd>;@cRNy^(^f6s#Na|KsU9oC4U2>UDrHMwOH8R^bIdilqSLkbx(pm5%oUJH z2QLOM7)LDOu`vJ&QBpHiwDn;8vo{v;aZAtWQU?fP;Y1GBC8XDBbZCl-J|3!02skQKzyhm# z^~=7E$M~&Liug_c=*%U_k{Zm4WO?Kh7bcijL|=a`OS9LUp;Ah?euD@ruIwMPp5LM~kS$?O$0InXi3@2%(*4RXhH ztH;t{sh6gM8UOPzc#yx_vlH(X(=X*uXdG+?Y&0v!KTqjs6vk}cIHKaPAJ;Vv6S#)m z-wl&AnFt@+gD0!X0lg7~HfUiyEs^O82w%X-t2S^p%Jk?YRU-mNx4dx@WaA~X^Hf-k z^&0SfTkccO8IJ+NY8X27-oVX<+)0#>|5v-RNREZ{;d0tm8ZBf}GGz^DNQsP#W9NG6iZ=97LYYnx|v{+9Fgy9v8#h0Ns=TQcIf z=)Ek@n<&Ddj1_9nGpr>=swMXN-{^kPeR@&arpkxuE^Og0dp+?|DH4Pewpz=CxkH8Oui81xph^mjn^WB+N0_E^wpqjr*E;r7lDudpLJUl$<8 zO{K%2!Z6JRW4e=UIQAIVFen~NOGGw}!_7>X-<6^#8}(qnUr(;}8h=VS`Fv5_?;-S~ zTV|z`0vVbgWF0jXDpE(Yn0}&+foD4_ylGRi-C`AOKcW z<0F{Vp9rXa%Fa>aUMpS4ePRj4P zj?4l-V^BFhYr{+L0)UY1=nDXP@XC-jV6*CpwL1N_*Pu|o?2J3?(?u%RW1Kl!?i=3Y z?VoP6<=Wgc(1pUVjkwNS;$UmdU_s;)qG5!l`^Pfj8{SBY9^S_2f@18gQy@qteR0c; z8u%i?_-c$ZUx!HeyWj}16o~!bgz3|REYIU^cWaeWW~0-vvbcIx z3)g+OoFH6X0{2AtGl_sWeEtQeBX{ zu!FM1pHzo4*%|Pi5dnBblwP2Smf=B^tHl9yBUu@QTLIRGy`(cz#P1fpv)9_T%Ud|X zoC%Ev5kJZ8Jssy1zLSh%U2V1+7labhJL%>}=8KbNEWr0KYuF3G7mlKrlyX4q+XEMI z72_Q_;rG1%voACpUtMdjHrNsiJ&{eV%0;wNZwD#c>DKdHY<;2G{1zbDS%Wx+>=OmB zH-ao@F`8`qT^T5yfv+S5504{}>zoosWknv-|8!+kTQKj?P_auvrZlF#QG~>m^<4lr zk=E-`$~x1qW9_0<3dsSG)ejib{1lK+KCX=>blV1C6q=n=3GHM&I%P zIY7q0x7UN`NyqR4%4IIcAziI{8hqIjY0iQF4|q2&F*$7BOi_u%^3LByn(14>z)^5| zs7@aXoYv`~9bR4EJ+0v2dlstK`Xng-TpQ}GlenC0<94W|-^-k&c1zPp{WO2;RJu}d zd}me2MVyU%z40<9da-$0cry}@vN*8QLKX31trvUnqJbGN;AP{WIB3Qs78BRkON#6< zMc#+iaRG4Tx7*uJu%MQ+Bn3z{sqtm=K&-heqXRVX&X{y^RndA$LZs}lI0%%AZ=z1z zR~i3Ns^D6y(y%pqu6p|t)$m}~z8zr*EC{ZEfhmCYL^~&yN_e-QUIHOny;!OH4la<8 z+l!jx!D!c<^^d4hB=-H)x)(nDhyt9upjUyc}=HlQxx za1He*CY{>w)lXX3FaVIv2~pni_)>EdVFt@B**fp!CwA%ED?Ni3w>PCoLGfSc(}S1f zsjwib1e@^fa>9K-#4A+Gu1RB5lAsz@_)~{zas?{e#=;3n*r{KB1K;ibWp$h3p>3>e z#fZrt^9S@iH4bz<2oX>o90irMuYzJuFzc2iC{%nLp4AY8OrD~}GwQRX+mt6S&qZmx z!5erq9TKkCMcdhzj-A+yG2$U)6WR|Z{CL5i*f={czcTC{TLA$%^diS`$v9%ZIWlTu z--YH)n*^iy<5II4ljqaRZRTB>S`I#vLF~1Trjisx5)W7l94lQ76juorRU`HbdtRqX z&jq&t3g!IrEk2l54xrsWVomgw|JVAv!WT`Ry?6go6S{w022UCu^V6KAJvY3x<_r8u zd+|QAs&OydBH%3|wknq+P`O{&p1Qek(6OvuNxRs;JP6bY`0AGwLlI%v7=+M8?HNG_ zf601uKM1E(0ptAPNhd`}Jsyn8!I}DLY}ktW&r8}6{{_wdsPy-iBs&YeMkym{cskt- znh6mh>m`24cIb(#_OW+b+?GrYpol=G0zz|y%~?6f9i>_rzvu;em{*vANScxZ#V*!R z1FRirgNwrm={K^Khc2Iz>2%~#VDTL!f0M+Mz|}MAOk5jHIbh^t>=#QuzEnzyIRx$m z3z=k{cP;%AKxAk015+|N{?_YeNfqWJ_E}9U8jh2HV(0DvMiKetb?pd#DD)4guP zrd@ikoLrzoqY#CIa$%6N5u&o`CNj6|SB8pDq<35nbT=<_vZY14=B{ausU$bkTET0g zBfiBVeE^`H>z!YTMnHvIWqUbFC$`SbThS15u2M@WN1(>{uCy7jK8r3^Worx!55V>@ zPI5=wLat3Ycj{MP>0R4dIRO-T9Ra*6?Tl)g=tM#tBxpOFVf)%HajHM5um;YS?$5b; z4#GRXn@C$Hz65(E;uBB@od*j0<&I$3S!!IM|2h1{x=erBF^!B%Z>=Y)<1q*GYG}X5 z+fK)K7H?bBQQpC{d3hSb$4QsMcuM5LcZs)32>0rRA^s9MfV`-4Q2#QJFNk}@;vNTO zkNatw2x$+hN^#)PfvHg8S452hs17%^i+$PuB6?-K&?i`7#|{-I1~Q{zR}sLpvk-pX zf#5rA>3?jQJ>xx-=V8S6*f_za-@&>y!bCr=zGN9(sN`7*H$hsm3DKnQ4<3uG%a!KK z%3D+qR_g@tG&qe>_4NNepxyMUqAEI}2!)@#079GBoIztho_#}8CA)4KsY26z>?uy4 zl;dc4tYh&66sPv(DFCUcgQgQx(x_#-(jzc8k@@E^&a0q4NKRa$m<^g#rQ@#t25Eil{K^Nv zfQO+wgurh8SDkqNmT1?41^2pzI-RKd2=&T(Ld?=)@S9=z&LnBXwsf=C-6OF4pU^e4 zinEqYbbh=ls>6*L31G4k|weh3i#+Tx^+|7 zkc~zRUkX$Qvvq@+_qdsOQJv+b# zu>&K;v08)73lZlPX0XHZMvPwbHTi7@NsL0i`V!(+E1ke%*2fYd=y8{%zGC}BAk7+LDUi``HL3SyJa}qWw>x?(=KU8NqdPq*gVUW z_5=>f;`IFlrq_nEVa3vLTC)OhLJb^Z-r_jPC@`V!EpxWBr4Z@)dqqicvI7yN=e|V& zjCfUW4_lnMzmx-}6a;Kwe_z{ zz>gv4dkRs#!yyQheU(C};0z%I?DMG2#7X>N2jdenj4aXLVT%+0O|2!E&nO8bFBm%f zs^O9|ZPgaWBrwCA#KgDU#}PC11xW2gP&e#RtireDV=yctA_p^JV3d(%v3BSLkb6`! zFo2JO<-2>9tjG5l0>sBb8qHQPP=tkz%kv^QoX?K4ew9QM+jhE`{^^_3wD*VoH=X|X z!Db9MoE%=CWK$w!hO*?_6+9C`p&{fAc8${{Hvyq(%^U;IT{xP_F2QEnph@m;$r5$JL~{# z*N6C7zdo|d5zSgUwLDBlme_No^AU6KtaP-!|7-`#1&0J;BY{c4S1;zBE8SbrbTF|D zFD&1C5HN&iIR)9q+DNp>vSNpfEJ|&z+Xz5*2 zRy`NjbjzOEI8`14>N|O*6?0(L=(!?TL~YD>1swgz-PTwtyh#k+$P|Hglb20~3*}v* z9i($47ARMiJf+?r-QfSM*R&0+{}CHA>+{;5f~Q`zNHfV~=WW@fPaq4ZW*DB)+(v*5_a8C#WdU!KZO$yv98Pz-4f9+Tlik_N9@d|D@(*z)gdRkS^xKxBs^3sI8B ze}XRBj^ItS(`?BLBm0m~_c1JD_RT!X8L!+Vv}YV~SE#?_ihi1kNp2T^^^dFJ!+oz)dxj8ahs(gA$e>QUeVJ#;s?DQhqQd zd}Y@PUk;qB(!c-4=Vh{1vlRtgWS+IWv~6b~@prNOGjX65^CWkD%TFhp{S;!Wt>q+U zCXX}Eh{Z!aV5pL0e)`*P<4-%BQl3xwXPKWNhHk?sWU8Z*b(hL)ODsQcJ-A$m0y=>( zr$2bZvONVBo7*MdV$`jk*ZnJ;q3-TDI<{7wN89D_W95^K)ig`KVIR2kA&|zpD;}&N zFTY7I1BHPBCK^Qxqu)mpWXr%ULNXS58hM06=lefM-vkdh=SHjg#HW4rsq(HAwSqTv zrY6FCGMvcJ2$0M07%*sqJnZw!}U~|>CJX&>HEPqwyh$9Q}(;@$Q9xejGLgFp%}CVn$D$BQWH=Y?gf&PY%Ay zD=>~q;RC|@N3bXcUTy+*x!iJOx;&EK|C%92yB%yMrkSkC1G0M;SE#)=2jBUy-3uSz z$$Z@(KyP@3b4kdBS{ld@>vUU}qF!KT4eNJZ_Itl99vYq|v}WQiy2egOCG+*d`;c5% zFy@I^ynt#@J+(qwV~eUBs7qpnJ)zDCN0RNl)%KfsXSE}8iLTNl?P@pcX?=q6^u zPOK6a#yx(QctY$pxkwzpV*(JS(ipL2Cx`9^irhrH-Lya_Q|U+a^I~-@eDt7}JOGWK z$4hw5j_wc)I&uwyc~_hv8~Yz$Ej=Ct1s00)#&y{&@uE;d!g_K}(M~43bZ?o zK|*DO7RvKP-zY#PU?p_k)5Kd#GV`%8Bcl>rWbV@2!S!uo76NQ@$Z&v3n1!(Uahr&F ziDtvwvA3w+)qf9PB&rG5QI^m@#cH65RWRDrwJM4vft(K10JMC|jr($bX!)`;jjdm5 zOf{II>JoeVk;X8{Zv(~AhDH9#foc6XPCX(<>Wz&rg+Tvkn@t-fLzt%@8xJb#rveg) zEQwb6J4HuN*i@P(xiF$mBp2d-`~{P1sJ*^Z3?|YxCfXu_nDJDdL!Wh2e3=>13EscI zo4cfwBwiJm<8m};N13ZMWiHgTq9b84*qCLE1zA>D`G-vTE*9vR2b)Omwg>D71>2&d z?$|bE>uYB+LK^vl_>>@ z1EqBLs_WVgiU2FbS2z!08g!NAID^H`w^`(<9T>83iq9)~x0I-XSK$l9xx5{Hj(bF0 zcxgR;i38b$5#|-H7j=NG{Wklq!qDfjhFg#y(AyL+z5_!m%_gb8C+K{}0sx(EKsklC zCvh!tKOGL>1zMji9$R3ZJn%%COC2jal0iza?sz^`EV!zZ~@|N;i%rGdlP(4)sCG^e1%--{!ank@hwK!@ZI8ATc}*k zSJN+E!iD9t*N7oybS0JiHgQo8z7p_^12vm6;9Vy$c$Z zvm=i~K^mQpx>b$0*SXut$&Y_@?1C<71pV|G7UWw|6cbe{I;O$;lRA3~3GEbVR`UE< zuQg0mk=k7&Lw7?{=g`LQ72i$t;;A(oy(UC0krd9v!+HypSO7}69AOBq{iS8vfw&f; zHjB??ho|is;yU~7_0eBpbZmr>P|D=jXWZZETB?4s&!XAf-an`sDf-z~H%kuR<7J?^ z0(^8R3E>cPlEW#mriOFa`6{14_m)BNp57Lo>8}?|V%pa`tVEGnQWsJIae0VGlSdSr zh#MW83o+(bOE>fObLwyB8sNM7|7A6=Bh&t21!NWHe*`i|A?cDG(RC2)xE0rnM`XSi zx9n^li}5@P<>EZWJ#u!?ZgE`5&rmhgKchU;3YBHk)1Xonsnyciv)p{~UVi(Ii!Xts z0Q1RG3$%fDweX4vjd(S={!5mf-F={W%uxQ6g*vnuWFQuhO``Ha*-ajmfH*w>v)rSj zCOxbIfjvp6y_%FSO~w2;nU5e(z25CJwX`EMKgd=_3n|R`*7GDvT;KH3Z4IX(b70nm zLK2Y^doJ<8)vQQ4hBGQkClyS97OhkcZ|ZQ7+@7+esa>! zaX#UrD0KxMP@NSx4M$_{)z|R^X-_G!kY1PMLMzmXE?IG*oFlw)Ud4@=(TWAFHj&qu zhYf(0xhz674HL76%zr;_aB5klB|^dQv#4<)s~cnLuKW^vWuAI@gNMTUz@!C4;7B(y zq7nCMX97BmLXs2CW{qpixWfw{1E$Wz#Q=-0L%+Xx-eO`RU-^bST}Iu0tupZO$U?CR zSKMZH>S+{VS4iJ*z9pH1UnTC@V_^=y6i*|IiRsTN%3yRB5r6T98AU~^aQ3u`%v9)T zEru(hzf+m>AZ!+ySIPkrNb%nYJeASA_w;4|p7VgS?^#*9&E6oY40)1OLW;`RCjstD zV6+|W)kXf)##2^TE}uGto_%aA8M3v%l3EHI`py;1@LLm)p1ekI2KHXg z5XanKjoBbSHEXF2HH&EFZDvw6MrIr*IpQ%49#E!YT0OPyk`xMnl~p5;FJE& zcj@lBu`&>{SX@g{EyB0a39G%ctw02w)flkX#8tYje6m6fL&VEwxKM)OE~=oyqvkzT zFYe>xA%oe)?I7CC`1T=^jPtoVkprnQI-2TR0F~l^bJRtt0Z_{`COc@suu`cT!GC1f z6hc=?#~Kct7U!|GZ+P2u>z$yyVYMc(d0YA1a!m}3nn;Z*ql?m4u9MG2K)&BA{#V2H z2g2QFV?0Q#CpfM{8P2fh`ghZW0h5zRJ7nyP!T%_TAkrnDyZ9Utq;i}P*2~{oom8Mp zpf|sGO%3>i;D`SHlkF%bAsc0TjjNCKc_X9i0&!(Uy2Yh8VnXroQIPDmXh3thl1yUa zxiZLJr9t?Bu^_A^Ei>`T3?Ak1Z9o?&dtgYOc<&4i3ir zYp%Y0vk=zTri9XUbHh2~MUEvie>jfF`+fi?OvmIW?{bTgY2bM{fUD|&x;ZHt{I5|r zd}dS)Rr}FNx$FCqp*`}C?eUGkHV|Yh0DD=g?PAybE~jurH>9@#(9|tT+lFK1O;l!R5sJJr`qMH4+7gRNo>{| z{&ewlzB_+O7ta4;ZAaz`_ZV7uD8WjkXxG9PkEy)gy99~uuZUy&UH3(4+&lMbfvj89 zP|M^PemP?p!4Y<8+GE{aeTC6^9aEZcVjO$P-MUE%F_(ks{FrbpbV88#Ev|xPO=Ls2 zD`vTZ4fSVF^GkWIo3awVdkt$0bjJhVUFR#zYC#NWAaubfNkW>6vozi#D) zT0DZ|#~~Ec5bU4=***W5J7m{zzggNV)9hB;{%F=dYgE<-4kPkxzz5%|XzTudxP4UM z8hAWnau;RJY|7F@pzuM4Eyr+nJ@e2PS`Ze6{So5!VnBe*>%Ccc+u{UD%a_?yzlY6- z3#Si?dTq%S+grR8&2JFl+AZTjSl6s^bWK!)QWh^E&{@OzxTnTw9}W{=i1rpa-HrU@ zK$G@#nB-?&*%;mpk2uwkclOWrI%cDiivQDM_;(>U>%jGSE;#q;G`1q?F*3l)Lkmh| zf_u2I3k6$Ns;GQ%$M=3SD@Grk{)WJo%R99`gxnC1Hz(M{6@_4?*XI9K0pslIagVLg zl7MM#mgBQPq5!bVkx$(UcwIq!NQ$#v-Wn)Z9-xKz{Pw$n9ztD&TiB}!5SWj_U!Xt) z7CEBp8<`P%lj4i($c}%FPGM*%?K)BgT*ZDxb|)3lSsOf8(|hF;$5Qci5jgVvPJMp! zAVql)2s5er&6=bj3-q_2=C!NqQ!Lv*9^M~wsV_VP-)_jYAaqAn)x!j601_w?8j?wm zcjBW0KT2Udv*aTbjfD-%fmkW{dxX^511aY6cRkj2wyVz^o5}tvYJgrV>%&w3WPzD` z-9FqB>M#Ox<6yl^^O3zkdAKQ$$0AJJ49@`KX77+g#}YGP4UqYD@+L$2t+V>+Hj>C- zXAtjEIa!M~f>HfP4RVb+Gr$`)6fiT4{!vM?w>8{E{}tIZW)DB8{is;QBul4XaUBRf z1kXlb7vNUYKFVrxc4_y~Cv!8Fa^6FW45){XtjE;~T!++rI=) z(8AjcljM}9>055T$ri@}?osjoi1@VP1$S;ObYL(+@rY@QywNRqG3-9iQ z)Prxa1$xG#appokx>?n4#VI_#GL2)&z8$iP^cO=Wt_*@AaN3bKSZUn$MG-|Q{yJ*4 zBi5qE);!jL61KyQwz$H^U)Nd}+tSiELIS;;dV?cJzoCVaiC?K-nmJvl04jfxkEv1P z$@jw{Ye{PoT~Ip`c9-SEKLr8>im8a8bZgFat{|>;8Cp%<@N@_{jjqp{oJwJ?5n!W$ z$ED8k%JyEO9hC!nX{<`GquPDxSOc>P>LSj!-ft>NuT72)K0e6cQh#sq4pBvim=lF^ zT&dv=EuJdT5RX_Z9}e)PbP5na17&xBG89|5&9xymCLB=8SHY-daoYYoO%P^-MID-=53i|ISd^ zNd7o`k=`BQ<`bCTD?Aa)XVA^W%P6zeSgwupZlcGnv$QarL^XXvR}@EtL5cf=`l6|psXsR3ktmo~T?R=^1L^HomsE_wb&;Im@#MWg#C zr_vh-+5m~$c0#YL+l?z6*;~wyuwy&!d+T<9uE+XRylfP}lIdIdyt@8lFZ6-)tV7*dPUPNr_*x<9C|E9PS2v&CH@>=^Y}F=EsO zl1tcx7OG`C)Vg zA+6job-KIFW^&~jHhns{h1AfYglb)o?I1DVV6d8e4? zgOP@;w)*^<(8*b|v-V6wQj}dyH~$n{&y!(bk7usM>DHK_Wpue(^6bl=iQ51itCmc1 zH-!HJ+jK(%@SR@<iuk}O0~qi)T$<0#viS@l zqp;p#pdm~RX5l?GXcwIu+5Qrh;?ok7$Z|BubX*x^Km$;p)2=E;qxlm$oFOVJ0wVlN z5BVBNnCL>wIGW05Q%Vi`HQWTv;J?|Z{z~hfypP+8U zwjhniS&QQ#R~&qdF){BuaphobTHG`-5b6Pzs+O(vm#U%);$!Is3zlABj3VnY7Z{?v z4AHlGO7+8U{DH@t+ZJ1z%&h1`{Xlj(C~GV3hj|(t5!vSu8aR_8YKM zQ_CUkt#U5#8=g>)k>1R%O{8d6V{J;V^!zZSw(Q`6lX->Hn1sIAc@K^M$00$<*O?LmHjL9SQ9E}{EzS)Wo zsf^ybu0`&~d3RRD{GG>ph1kl-8bS88uV_fZvE1B=ZK~rOL9|lvuu)Etpo5>8o=`?y zX0mvU&WKGEXpm;Kemfuq=-g4)6&b!2TFxR`a~>?hZ0ewuB2l-KLa?wOJ0n#;o2f(t zV}1Y-N=$RO0uhujV!7VO?j{vKAz)T&Tk^q;y$>%O%fr765m?JF+a^s;L5oyD^(@&}~EgQG}SB(7Cgd$oJzB@gw0N5ECK)rkvt{TqrqBUcTq@EFK{A zUsX!T@E)u%C7J~A`61Iw3RL>KbPdR{Xb zW1E0cTJ;9rz}3N%*B6(n+P+q-ruoN{-?BhOmjV)(gvHL}k7H>;6E5x3(jB>`5pw%<^eTPg9BV#<&N=7T}n*nt9+$zW$p*EGt9K0>WV9i zGmelWSH*3Z<|e*LO@uPQU+HuF>V6RW;>L=NB^}j-Pm`JLXh5|NG8=RHU<|E_mQAyb zY%VbZ~65pUhZJ?H4`8qG@J8mMSQT#BTDFjBYkl#||L7|xU9e>ewyC+E> zd98mG*^K;|`0t2b{ULRxqZU}h@4}s9;Mg;4KCPD>mAFCz`B+}i`FYg7z4kRx7IRwn zYu#1e@b-=YGG4os!r+76`LSQH&khT;FLR zjj)z$75F}dNNPnA#U<1DO3y%)CI5TA{J}1zS#NQ7lnfR1x)OiwqOXDe3rWmzjdW!s zFCB#b9#eFKBoDy|akY4rW=* zNNUxzyRB>b+)Rv!>yi@1n9~HPAhzmif+%j_1oEh(!Tc{C+5)ATkXCD+Wv|~i zu=+I(?jA`AgwDgG)mnSbYj)Kp^H!s#c|z*~Jes#Byp=9Rw`+f;9#sG)tkMjL*-UD0 z-Q<*xp|>pw(Mx)OiNa^V6}Pkg@os1`ms zEj=rl|bkhrmo<)S^I^F&HT9&QBS@iEd_55@UYshPF5Zk`es)njkt zxa;K$aP()}g}7`Gf)EC8F8cCl#cm9n5j}m}T#662a1N=4pd&#ikyKue4vcHfv4b8?Rl<-&u5nvKFAqrQ$#1m{DVjKjU|WUuaW05N4^*U8+294K z6N+q%-#EXu*2787(q4zdX$*9}IyZNKObsq%T6L|(p!LZIZ$uj=U@xAg8O+qX;IHAG zuH8F=Pwjem)*ETaP*-mWDxVatXr~zd&o*X&W1(;)I~P_X#huup8C`FmSGuhmsGChe zMtdQhsll}4%6VbGlS+V%?N9VDgozuHCRQv-op!`p(11ahHikU0Qpp-G3g+V}>4J5J zqp@IoeNF&>GO4rMymrmWPWC7nU%^YMnD~-XVCVA&%kD;Br0sf=&m|b%Bu1;b3QsJ_ zSj?P$+;IlaLI6-E){1>_T19OIZj+VA2~VPp)TM;HTp&ML*G8)S2%K~67)3W}ySuo!w?o(gr=YsUh30y?NQ{F3A^^sjbYKfL{JXsdgA$|< zYmm{0(hlqBqiz;rNI}(ZrM3t*Xutw~2KHZxySQ&)XK!68b8u?&lx(flZYo1fLfAl( zr;T)APElx$E40zfczYWj&o1k1wp+Z%4#|Kc!$iuWnM z={SF%8^n1kxfcuDyd%Sr>tzNm^)Fb^iSFRwn!|tt;^~5=wr?249$Hg-0F2X9VARzv6kJnUm z{Pnu5?He9~(%va+CA9ay*xF;^hpY%`Z6AVqM-v+0XhvPbzF`*(A(>$~SLu5!*H8@k zX$0mVsN%#Q@rsf6i?MZa0CAC|eBQAk#3yLA@xdV_ZGJ)B!J_YS7^E3KNoxy89*5!p z6A^o{D0Y!js=(CPI165+q5-|Z=|sKJ6Q`fReZ_S`O#11->xBbrm|_iuu#6@#~gjxAb1& z7j?#Qw}}JIe@P6OD-OESB${cc5OtJ%E)bA^`Wqsve(-7!9gnkGO=ZSWD#D5-Z;Xdb z&yz}>yl%YC)G(%Rub^&1>MAoeS6edp_ugn)`~QH-vV^Jq--4Itg!c~RKn>=q%ug{2G1j2?b{ijPIxr#+2T`~*Uynm zi%I}9)Sz^UC6@~W(mJRa7@0ozGRqBSnf*%UgQ&x2mORx(3ofs_ew@BeYR4JDZ1dfg zZvZb9Q2jwrbF4{RWrM2*l#jw7?W}{$xWpZBjV3Eh*)D!)<(6hRq}JpX#tV2;DHF++ zCDB0O>}*uEycQ~~HZ^gFaua$tGy&Zlpout#UP$`7NT8w#kYsW!fh%^MOfJP$jdX5h zKHWQortw=rmSP|*>q)Tre8LWWAYIWCoA`Ho3kF|YXxs2^@VP+qQ`{{Vwnj~BPq4Z6 zQp*@s`4iwOJB(Q_2x+2xWXGhdyWygd?P4sN?xbkS`9gF9DL+W^6$6hoDLDD}NDQY= zozz{3K8EQv<{!lwMHF7`XLi3Wq6QxJ@^M1*vvyZS@RKG;ygbDmLf{(Hu|gE`z!lK> zzK6nEs-R(;IT8A!_IqkYCHYHV?F%4bD7?c^Vu@No)vVXZ)jPP|9+2vXJ}n^*q%eV%&bcSMdV=N>Aai7o zS47lT%bh;CjP$g~B6!SV9e&yiJd52jn!?EdR6~>HSf485DDr?ZQKf)rI%D0D$03T+ zDe{)Qsvd}KPBu6~2+qt0c$25u2gce#Dd(WHtNOeVe@R)T|JVg>xV%5NoX0|xfc+tX zl!%`Rlqe68?Iot%kbCvU|3=1xXXgcqQE7(HWiQPCLg^&qxRDz`#b=Ios3b&;j&Fws zD=b&$)hHc$B~!;r=tE@P=UlWSF}GKfwucXFWux3#rxlyT7A*gHf>me@74jJW6(^k$ zWLg(n+niGFGq|aMOPlzmj_W)TUc1vNT3Rbazp2$Y)(qa#uEYxdw1l2HJsb1wE{{^%e^T|*t+ylup}3CG_dSNm3gm*+I@Gq|Q5M(SMFVBm=oF`Kg-R`G%k>2r zra0hUyz3YIUv8OUm_I=DFYRRws|ekvJV{~9ynPYHX||_7(uX0fvc5w{OSt!e($|xs zrfjg@q77>`DpR9NHDNOpTYOY1qZDPOgT8g%imsR?BA@d3qB&P^@-E1dW^mF2uAVV&0EgeklPU1XEWCu;Dbgw?vPts7&j3%v8FQE=LxCr&v(BAu%-2rpd^`bF|qYlpVgg&J4E~@Ttq% z2LopcRZlA>9!w{e3P`!Sxq`@!MaewhhDS_V!!4jp+R`jA1um*ori%wKc^z7jkBqiM z?vQ*?jqvhKe}MhUUxnE^U7vA01+o#zKI-$*DTm+MZ;>wkF-=XIJx@MXNbT*(-zEw| z`LzVhd$gSNJSy?ZkKW?K=;q>-j$e5bbkOdm;<94@9IIOkFyCi`eJ%Pz7xzqPgJ9R8 zcGhuXxgMoR+O0JhcHzu?7)tbf5o^3;zW!A+SJsH73-YSc zK$v^*^IW92hPbAqUeGKOW9{1U>n3Jv{R@aNxz^l~@4IlP*FQ~-s2tAQi(|AZXRtNf zw%x&#^LCF0i^XmrWYeYA=IEt!JqAw{aB~HOgDiU=0(F~1%}E~lBs=BMR$^6PYftRl zrDPcq&>hKJ0aQ@~dG)Ah$WqRorvtoY5x=f+00yWG=hmD~0!_M8yLU$v9?IjvER>UD zDD*-1k+J(Uw>A7rdg+v^!eO;2%eqHpq2B`}ryZ^(X+z@Zk*?`fI4w4%+nO@tg;rLd zm*z^t^uc#;;jQDE$Ys&HaA`pZlI+mj5m&V|$PG17MS0mE3v&KER|hwrUl}vSeAA4o zIG?)TKe3+s!X|~=d|ucTPF0Hs;~;`%xD>4lVxAJ(KM%w2_1KZw_P$E=d%x{kXO%T4 zoDnY9KC?hW>kWy8=%A+gz&miun=0YkN6+vkKf~uCUP=$)k#4K3e!;aQqBbX9-W1Gb zDVfEYFka|k{bV{qd6A@uTs<2x&lDXoW1XE8?W0LTNqqq*a+ee;irLdT1>?0HL4*fc zb-Zk!K;V{AI`vbCqV*J!97Z?U{%CCnSMyQ8MDpV0HH)0WfTuW(VZM^d0$iGnBjj_C z2zFLrzdQXJj`!$q$P*hvk}x~~%6eJl-i6I5QRm3#@y8ct%wWSEB>(XH0>DSz3-qnN zpJe|?{&z|z?Ic#Ly^U^Us7#-~*3-B%y=kF;qQ1GV*ZRZ|Pmw!Z_qx)B?#(Fy&1!8z zf_}20a5Bno<*Z-ouN&0uj`U(xdEcRDY>@7%=IqWC~D=8GU+JHKR&9meTyrj~O_#vF| zTgrtD?F5Af7oVZm=Va*%4~wJAU!cI~L7BbQ{|7a(L6sm!b3aiy-ARUVe1kEOoa+Rs zoe8>`w&k1l7?f%G*O5132*SzHboD&VG8uxe?&53%a@LuVc#OP5DEUCXQ#xsmLy2~= z&552c)H?^XF~RY5w^X?qph3|MBVlI;oN=5Bz!kliV0)Lz2LH?Gi`Rb>i>QljBfH-o zIuv3+)aENT8f=l7jXz#G4DH~HSfpUsEsOK-+_B6-qHAwf+mDmou7*VfAAK+^Xp*T= z2`5}Gn~*u6Xi2wf#rL$tsSZ%1oyhI6|^yHMj7fu$Y_M?!y9&QE2~zEp$Y_Lc;UWSsEz* z(glakkwJI}#z-}0EeKs7JPVP2Y6mb3Y*1gmd<%XrKssq-sA`Og7X}w)K*EA;CdBGp z2;rfU-QqE&6r5Qi<^x%qPA(l}^lC_|9DQPVn)Or`g_k-kPht{zE(~{ z{5VQ_cXgKBDpe4x1$Y{r7+2YN!-=4(@VCzS4jQPKje;Cpm;iH}h5Jmq9~nmZ~1>b=>l86o#^HZ-aj`#0-fx8REdR#q!RXTPzyNVDk)IM&daB%L$Zk}}o?F9a#@g2{ zP@*<9&ma})vF#0Ec%@GxY0tCvTr^YyaJfy@`=o%q!jayury0rg&dzD5eG|GmK)Q^) z(g!nU4PuJDVWwqi>-6PL#k&>P+MHLMTVVNyt0v}@)hig&f1cDkqq;!xV65)e9ope? zN73SlH5D2poOewryJNldrmQhPGV-_M(NM*qU6qH13c=kI#G-);058E)S(r+VAJ|X+ z-%JD#a);1BNjF1e;1qIBAgnb+rj+q`OvLE82i=1L$_N>{uqMUz{4{io2p|%B5<=DD zOTZ%Z`6-pZwXzCr6X@2U`B^mIwQw!BSnxR{eQ|*3E?lXKlif>laWxl+@34ri7N+w6 zi>!`OvOpnq*;mK0@E7c!ncU!War3;*d0R{()L7EfPWzHEx=VQQ@mtZ#sBlc+X$Gr5 zDJ50e$^o17VYz}jR}x(F;^w?V5A+&)NwnaSM3HDQk1r`baen3!^#*|5GsU0Je&u%rI1OlVwS?ck$?4>iE^AXp#)J(eDb}I>^*3)i0hDlY zx%K%YnBoGOR?aLa{&W@>Pftz=)kIlW-s>uzrxHBxVrhGFq5xsQ(Joj5N73l60-(y^ zrPDZzZ|ZQ6L}$b~A2C}f8V%3v4eQGZYSat@5o}(IR|s=(gSoA?$5<|`44JXYv1@fr z^S~%_XxyrPW}!S`fdD~3zQ1|S$5|T2lM^v73RceK%rweyPT7=PYoYsA^;dL;zTj{j zYxG63LcIQxH&j48c6xw!kVsO&>JBZO;S7D3YMN|W)P&Ldtz@)Wu_DR;r}(#lc)h=) zw(FDn+Qgxg#?_|}n{Uy0weS+*Buib9Ly{12IOqKcf_j^Vd7!b)}(;N5oQI>7be-H|}ILrS~>OqC)* zL3Gco9U$hhp@B!WMso<{5AFm3D6W9Sb!{K4be4?$v%RwcOv2Yu6#mgmKQ-2TAe`mv zGC4G&ZG@T!>!3@pVO&v-VI#b?_gw+kJ;^O#l^$MCEOzH$ydwVDF-fVFXYj(S2Du94{l zT;qje+7wy%3Fft-mWcof^Hes9WTrZOno*t~=W)`~AHe(^#h%8oCu4OY8z^*k++X#v4*|9?7+s z@w)_Hs_wIXK>`^e_9|Fxof#p%P!S(5^xLQ)2T7L4o35g8!s0!f7>&b=FM4D-KM6Yy4Y#isE{QPe*ft09P&Y9QBf+d%vgjos=FExgr(6bVC{ zv%dx5az*0PZKxQ+^$W{W3Cs;E7;HvO=2}}E^kb@#@{?x-;epyIW}PeY(ka z`MPo34p1*n1RkR3TDYPg3o6w=N^%C*5*1u`=muCTnQ9N>s86&a(892XZ9X2#=+ISa zw4OPjPO0-nV;3DXtILQ*Zth@d=OA8;C8GW}1{+jy$==g^JOcxI9j`7NW|Gk&mpw98 zx)eITv->QYh=TU*3bHe?CIKr|u$h`kg2j#93p}4{l~F1AmjE;4WUU4ZABSEtYkysw zD}7vu7N@3MxFhe^h7ld8a-*7Z!Mu?I$7Sj*E0)06F$VVTv;NTE{Z52gJOgT`b`sKSzvh6pX%Y&lO& zi~3phnSlI;oEJ=*zLt%e-vlTyJ*5XD-2uWo?}*BFq-L=)u=2=xO~FXDn*}TJx1fz2 zpiJ3o`;1yVX4%x1ynsegawGOUlPyMgtLAt~;(O5{k(3QkUfw{hKiK6Obvr(Hs;>Qi z^!iTMd_cDwe*bT5^a;C5vFf9w2gzA1_okmSBWmeLWs3H0^^ zrO;7P$M@6TdXTn?JMiL=dmgDq2L(RkRp2ph9Tt=yj-$1~qua0vnA)Y{<)r0(=tE!Z$a5e`c+UbRvTZfK03im^Bv|jYa5_V9W;Z3tIIv*E~Ex z8Pd4=6O^aAVz2&V_P~tC2@4-@SCa!V%<6o%=@ zKEqN5fV?CzRw5JR!AQu992OJTtrXDvGzpI}X*YIH(I@{zaw5rfU2m>GKtpf9a$QD# zIq|IVK@k~xl2Tm<_QCV{HsyQ&h{bU-&ZlOH)$I+Gk;n6$@@x#}YG{iW{>Br7e`L03 zKunUxS>G#H-%eK}QBPtOPi6TAZURA9OwDU3QNs>%UT_)8DFJ$~U2-#MZ04z6<3)ft z&Bftq4|ue(5wE0Cd&OI-(e@M$1!}}&y^K5qR|6q4FNDSgi~p~b>Ds;gG3xTj&9EGZ z&@<&rB8bI9^{u#h5BPPs$KR=PJLLN4FP_Hz`^zmFQhwC>jTGVI)ETiaBxz%tyLMJ9 zyI*uNU|f+`3Eg8C!q#u9+>qulwJAy2<(3sM<0!Ry;aOca;phS95Z&m;I&&pEA)OR= zNpxlNve{L|70Ag1by}lAl&SLfs?k$33Y@+Y=l<@mi{>4*U1x;u9&p-thysVy#z6z| zA-W*6p3H=KOAz&j1ng0dmeJrLK%Mx%w8`d~+~^FSMHl6;{pXk6Db6f(R(KFP-A|NZ z-))}YoSdN%Tb#SaTfA3Zp3t5-$facsZAgpA1y)^MzDg4O4le@*TwP@GQAv;4M^Era z@6_42kmTcc!60h(2=;sdeZ5kg+2C{)q3>BE@dFm?NwaDQ;Dy2O9_b#501DfINv5du zq;`_dWE3mI<&>2)y+0ToG%QUyH845uhZ9;Sk5eyKh0&rQ%NfIL?#lq>2uaZ)^bRSuA@}#27sh(ho zdoyAr`Dnu+oH^{K1fj%}dO7&6+?XcUAp@@cIVff=!d1NvE$k+SiRi01O7Wlg|GID( z6cIdf!oE1a$y>Qk-kJT^e(IT-|AKURZW9`E8{KRYl35?|W3QQ^+s^~|Ig31De&=tr zWcw#&cg*wqORXk5CgxivS`%MSgN+Uwuk!)K&Edm7E2bY7)A83|k#TPe#AAs_YF<6V(Y4 zHIZFpwFn`jzq&$J^FTUOOJ=CaXZ>uBei&)7VSpK_r)>|eQu zQfWgmuqHr!=NMs?!%dfC zzfn0r0Eea;aep^#nSYHWb5rVaVQZH({G__*vR^vnzrFoPypVbBZ4qD;xe3Ej-=6Hx ztbtO^{yUTmLKdN+{ctQ+IU?6$sMZlJYt$j&4ktb8*L6qOvcX;H8YnO4byP>yX;aKvKil33qILyC3}R(thy;z}kt zcNxe3p9QgnvmRR+JoNt_`(o}P#NMgn!cucrkZHG{@S_3ubiNjtJ<%Fy~O@z05y; zl-U==bMxZuBLE%Z9Ed{~=Oom4eLUTf@{tB$Lb1&g_$~ImQr@0`uS@DBPBm40Dz7d~mg!+UH z^Nn3`X)qYge%F_7*=GRax=(|0dIG&j8vhJ1a8xv|yK5&kO;? z0)a%)kp6!aA9$esbWrdMS&ZPHL-7Q$)%B|RYOG{FsQ4L20LD;h6*rQJjH$uMivq5` zD@<^S`o;EtuQX)m6-Mn+z4z@54;V(F^H@azNmXL5$ZmYJ5i*ySeC>~Di9N^5!-qHX ziX@)IVsI-i%Vwt#kX~+MWi3}8gM)b=4|tO6?4<*QV_fqj7DfG6PzqSO4xJU0@#nfqjEIG@$vgMWc^vUH_I!zFQ%--9TZAZcIIOp&OsPJFkcn zG~%Xf;Vo0y`ko-_Uuw`uTx@Gvh3$hm_2(V zw{#vxQ0K%6XKs1vrz)NGXmjPiiNn@TU57pO;+PZ!+d@2Pu5AB&f)P!q{k=>tTWSM# z|6&v0>I|-VB#NYuAvBk$S4*I?w#}>TM2F-K0V)3`wwB#y{XkMrObbRB_IXM8FSa-e zMmg_&1%w^Vgociy^$ENJsowF$8d>NeiLyyDOaKRx*PvTcLAHm_t|v;=YIcoo2b5r2 zN;&u#IAG<)iAQ zn0G`w$YX|sn`^4q*x8F_GZ@yZLf5MN8F&*4sbaZ=@YNb z7&E|)09M`t1{>U$lVXO*62ge<6?YKTBK^1;2vBiP@?IwIo<`8@x8CT|^WLzxL?G&h z&-HLS;APA!yNkdzMEBr9LHI`8_fcf)c^E7HMhg=oe3~&4YE!HG#SS+HOxi;40|sX0 zh??tt0G4#l5M@Of(%QD9y5e+VhSX@XhVJK023qE+AAgcn zue$_++coQEdXQk1EIl#8vlfB{qV4x7`4zVnUV7WJAf{B7GDH_mq5fKnjEudEd_*g9 z!FeW!baqGh%uOg*Oj_!10G=q2fFu{c946NbGyfPgue9Cxy!@$Ab!X8 zzeF=6Do`$h1@qeoLI*Mz-*5A1E6{R%F{R8>@D=zpm7_wW7KMK=x}?^B8?S>Q7SvCQ zFfA+GS?1C3AKhWSH2bvK?a_8k#_O(igV+Fu+rye*Uf($8%aZYqAw!mR7rjd`Lm^WE zRAF0=`Zi;@ih`yfd>>&$n_R{kcUK0(415B@Rc7gBE9W1k4){kBPp7F4Coo1(cQi;f6G)o|a#*&cISS?yDawiYqOP|%?GLHx$v zIL;Y-LlIdRtiD3b8(;U7oFm*igPcX|h7Ipcc@>yKw?+DMhzaq#Nw>M>CWllwuTp0n zPZ>pQONqY1(Jo|u#a<;78=+@k(I()XLT)&)swCj1(t>)n**R16xd&E5Y&-d_&%o|C zC-7tUBO3DO61aE8R0DPKez_`v7r>CBsf~&wPC{zR0dBdb0K)cHBwbiu1c_BdUpxf5 zt7v|v*F9fAxTVvv&{Y5=Ez0+y2`d>ury~1Jgkv9*tuVqOZ{Amp*&nqG4DyElolH9B z6gNAFfV_d3_Y4Bm8W@lz{CpmW|0A!o)pP~QlYss0^w7~_O2a@(2pGHo;5xpm=1Iw} zJoXdEzyJVP07^r;%zEjU2{re9xnLp$+EcyT3IG+F3!!T}lvc?fXb6R2{GfcbhGF<~ zc1-y(OD_C!`gi2&`$Q2+~n4h4|Cc*+p490NRqbvY8MikTzmJZcF6@z8h>PPshtL9~_w z5M^#9MvRu^xQ`!Y|shA^?cQ zahaxq!G<4pK*-2`LJnG`q3g68YBjf@wZo|6VM>txEz=X0jeU;uw0)q%1qQ*eIPP3 z73X+2C(B`*`z}IiQOfzWItrc&^K@1fh$&9Xh)?Jh^;D0M;A|KGm#}2>oJ)|I;cllk z;AbU}40KXR+6j1C>mb=scs9he6?dkN=@__vbxc3@^wZe?gYc$X%nL2Ytq??gG%H;n zHjL*8evBej!vhSH$}|uwk*=s5t_ef4x1IJJXNa4Tg$K_*=ODux_^!T{?e{ zY#eD0VYj&>2oGipcYMp2)SD*;0>qp6(Z%jQg1Tnp<6jsxU)6~e2|xcPw~uNIRk+9U zu(;rE&*|m!BHD9cPOXaYB(rvRd{g-uJV!r`o014lY@B>bGa89W)~a3tgOCtTuRWyt zKZSjsb!n&?oz4h{Hh3J*LG7;w5-18JA|^=)omGY)pxci~e|g6EMEnBi_kXu!|BGCt ze;^A%x^HYlw&RjR448X1kAF;^P?7JCvL%G~TN(u?zcG}^`0K;nCZo{8Lp1KRrU42| z)zzR##8L(0km8eR~7v&F8vxa299Ah_9aeKhvshtz2aZ~~Ez_D!-}FOt?szv^|K{34UUD(` zYvObt{XcQTBfQ_|5PuP~8E9^G9J75XR5sFyR`uT8M`)^Nk5st zPbPu6j-8REf5hpwL+5+P*fnEu98@@6DZ2ngom2zP!)8ecD+4wZ^U&SCIhtAnW} zQUKSQj5!n4a!BzD@ye-`x#?j##rz$50v_Kfg+E<8&T{N$kWT-s@#AUQC{$u0K1Wu@ zGSfX;lk1J0e#y=Ah~;>t$m}0 z>cMATnJR2t!ELa(fY5_>Ivjr5iJ7CmB++3-x;)5iJVWP-EWhB~Q>W2TZ(m%M)NA1J zTMw85Ydk^yDy8w_``!&((!*-16=!aaM16=%?0no}38zPCRJLj2N5)O9(v}i)tcRAF z8KUq}`S1%kEU+dyCDbH@&My(7-j-?rU8M1$?LVh4YOiGmiwxO>HSMu0m+mfccK%vl z8L@y-i^iIVi~Y8Q?LGC&s4iZT5dWL%n~n7Rv&xep`ilI)ap0lS# zw$vhf=4FIhz7t%JqWr1HVmc{>{oQPlFhlGG_w^nzsr=AVt-klzsFmDhrlcbtR+0k) z+jMpmzwArDIkWFwxHf7c@jk_=U=I9y67(ad%u|(KFc>-`tVMo8_Fnd%94X$8C3IXO zrM^rJK*PZ2wBwi^vYE@oP` zwOZocuurwLq!<%yTCZhh>-vmh8yBxHz${LTru-{>9FJ1BS6AQscwIOP z=O)j)nCdlFLU&&F6J)vNl3GqWLWloscEuHt2SJ_a0@AYrG8Id@zX)+AL~Sz988q%v z!{J)wYL8xlbbDZtgjA3L#nzK_*k854QGu>L0BmLK zIq18HOA_TXR~#k0boLH*=IG8_JkeemV<$UpFF#nzQZIbvK+T~-NSsB~h?}!WsT$+v zzDG0Lv9J74-?uE-B^exJbOE3UO$%kGuS&B~mD z$`WZnc?TJ+cqZU#27Ws_G=&x$yyBJS83$nXB|Ddi= zNa0OglA$cvvE?|ZCx&&$(R#kU)Q9Z1+Nj*E@ZryK2;g&H_?8`z7EgUsJHtam| zAeMWrL)KxeApE!R`nTDgST&@W(GFv%@`(c*kC?)lw{H4!P41^KTx!4K?&tCN6<`Hg zx0l4qs^Jb&w=DfDoveR7?M&^H*-HS@LTAhntDJ93h`lL=4A7_|rg~5acZbeP9TL@vfr~xC`y!wki&``Y7BnU@Y!hI0K-d4pY78f`vA?H)a zDmE=erKrHv)Nue9mr!C+hjSSmjXCls!KHvq1%|15p&}$mYSf>jT?kBT{WrzxD5_DMMYxF6FJk=aW9VA>Ktf`%F{ig- z?D-(d@k!f!fqE~}3_V=x)2~l%6{q~5d`hqX$hb%%{~9|1?fPK3&o6-96fd-f5?=PLQ)LP1>R2L5sJ%xP zMncH~L+c4wN;9Ei2Fj8rr{}CKeQ`wMjtNUg#OM}wM~f)*pL|v!@ZULc27sDwcn!Ui za1+KIq{jOl7%?5poRJd2t`87FoS{*`~s*?Rk8`%fI zeRc~N^oe1K|6{k}5D1%hkEfZX;SJ+;EBic$)OS7+a^lYvyb-PspSYon_a73iTHh!> z;!W|IbPiy3wt*ol4UX0GqkbR;r#9^?n0Jg! zI?x|k5&4#EvW5Qma%ltl9lLarRvgEnUH(cuIiaT4$A343Lb=5^9KHdceO3pt>t`71 z)jBN>4yM%bznUuDxKbC+6Gy31mU^>fpRWVw4ldT=U( z^W5ON#?da>QBvWe=`@T0cGcB6X@tL0%J5i3!CRuOcB70WaT=7$j?PdFv(Maold zD{9&q!5ct5SLe+eLIa{H?Sfi*;vVK# zouFP(MeFMkZ~=!0#Zg@mxKIAwi$94mu6yQ2f&uS;N}t#Agp6emg+6TSuDs0P)av}U6eF^1Bf*EGU00_A%$68 z{FK)Vczbr*mS7mE|KTaZU!)0k#O<^ef%rSwz=Bk$C-}ao4M@P}N-exzOy}MDAY!>8 zGXS$sr*YLTs)v%LS{+x`J> zwX}IjsQwegh}EilYR>Um0BzkR(p8slD5(>4GNV}~YN!p4g*>x;@W?QNyDbWW98+dc zWfm87#;vj`EcvMT;HAG>g%!E(h(Y`U6;b!Mya7;AUlP#`rA-~ z;|EJ(rjys^0Vx3ve7GoI|7vShCYLcR)v~~mMn^ZP;@G~xYnVOI=nlvO$(9W44 zGjnOd-X&;0z1-3=huCcG>_Sg{UbSpi;$yua5BY- z35!>>n6*K_71YjKUp4`o`5$-kC)%`M1`H$W{pjensbJK1fp|OC1eP+L8e0C=<%N)O!5zZ~$Yx+)dt__`(?Mq;v8@jkv?U3F zWA$+%k;Vj!9FQ|P@H5#$petf}3;|A2;iP8QOx}%RLW*S_{fzVld?Sc{IU1oZlXbtZ z5YQyx-5ea-<9%;K)jFxwO2l_rwUwlBW~Ra9B&*OQp;wMIutc^P)em9w_(}M3d{5C8v=+j)Vce>lVhC;;Ri;78iU*Vmi`aV!0~| zxrP!hU=Fylk4lP7odC!}yT@kbS}-An%Gg;R`(pOeol}rJ&gEZUdP8~rG*upP)z6*O zE3KI>#GSwLA!n*Gb^0%nlqJ`Kq_`M#ItJHnxEV#c_0-$#IZpJj4-^UBg2c-&4jP4> zZev3-rA& zU3(W8{!)1sJDzbuxhCbUH8ygRjz0SBu3MTsBqsZSBiq;kQd`mvL!SrSrDJcRD1mvc z?CS2N>2jq+a-0HM3HcrH&F#i<`XS)j=bF8DqQPNfs}#YZ16Af_s{LX?^{cb%ds?zr z81rIl^{Z9xId#Uh8GGsa0M7A})*mK?L?~`F4yL+u1EzqWu^xtVpZD^Ck}rE>y^bLM z1PEl|k6b5uQS8u2%chw@F2c50q(3Q3v-d_kG%@Pzb)6CiKSS0;hf4L)LKvRth(ErA z8VO8kGe>}9{b|eK{gEjhcLqV|<5j$U_-c1I2tUCAB?2Nfb@h-SbD$h(nYepU211@4 z0QYGtx?O)K2VE%T#4DkM7iIKC$;R{hC8cMvxI%$;T5)B2at{L;BVZ2{kiDYHj|r0%q-w-#yX>0r#e}H# zgv`38h4&js@K4cMSjgvrhl+U+8?5DL>X#b%dAW>55v3lQgC)7_PH4 zPp8rq`=MnQ)i?=u=(uRw)$&BgkN-rkr6YJ1@IoZ;(aNZXb}!u23-s$5w-JfOnR(8> zXBQND9G}g8*3xPBU`pU`Px^kfx%}sR=fC2)QUW>?Iom}s`ekO%GkF)8>_R*bG%O!2 zvaO~lNuwUr%-xt19hFVNiuA|*7NPBwGUD9CS*$6jD2Gix!R+I9q~s!??n+KC#A}qc zIZ7Fg0bvHa+Hfgv+b~MQAFv*R{s9ouHj7x5A}KAzK}{C2qcn1sbQDTp8>a5AzX4j~^_&5O53Klh3JR$-Y<6oA-DxO#(VE|h09xXwIK zIMyN@a;&$!vE%X(;H~LR9XRRL%z@P%vg@n9GcQV1Vert}F{Teu>?G1yhv)`R0Yp9` zeSGW*U}p6UmlLB-{`~1aGE_Q{2>l?CXL4GaJwm^5>j7w1gdIBcY(FTrkfk#qGH}e- zSW;qZ+n=LEX}eYgTs^Gt^a}{yC5ckjh2%TuV!ODNn(6Uvw?J|Y^Kl-y%?o1!pxDse zpx_rxl;*h|net~}O~eWI%3T^lK-=Sk3K7489mGD3F$se@x{{s01^QtUE6bcOD9Hyd zc1?(#r3Dr$jmA;JCG97wM8t6sN1l;2V7$!MjMe6(aGIJX5sh%1QntV+^Fv4g5t=kp z;!aX{A3S|)ZlbAPDmfa(#%h3$_A;q1F$=`Y2I6QDteP5Kgpn@YEQ7T?8*_0wvAc8S zm=-MwyrDiN4KhK_b-C@*um;hJ!Waxw?W#hvWrm`$8-W$e1E|498CVz3@ZGSNhOg5~9@EImed z0O7JG)8ocO3Hc;ipxA-VSbvq%i;5M8oS=L;^DsN)mjF5Vz?|VYWV6S`LbLX#^U%GD zkBKY;O%!wW?htX+QCG75k1|E3oaGr=Zl5NMj|6%K7n&!P1naBcg7*d|S)+L&RnpE? z%WxkIpNBpQUhqe;xX))}pf{4mf&m?n4$xgkAWB9lEA*Y)2VOBYykkGKf}xW>raFII zHIuw(OMcfb%JB3`i%Ks=E56fC%mDEu7aaZRWDhaK8S}2Ln-}ix;w0l4bv|JSc1ErI zSeSC|Bmj`B2}sDJj)q5Nu*wEnE>Z#fE)=s534$))z&!zo;+s9hbCisqX|W}0?phE% zrCzw0K^Kg%a0qg~Qn@rhE$9P)A;~?IH^;fJxn1Z01o?m6R5QXnus#I7S$k!#e4U!9wif=_p z;y+jNozf0B@r3~2d4B6F4J&0^7Pw-ic_vXj8Mf#pXTE+e38^Mir$c3*{rD!GEaZHD zdVXz_#f0DZQ9YF=yk~wAZ;6*lU6&{tXGkSVUUktjBJVG{>l-knjt{T&c5J3w8x2P- zO0%96f9eXy>$$v~DcWUi)HFIL=MO%dztjET<8DD()a5%lh8-Iq%dV9D+bNx926r#{ z+;z!VB&d})-D5N8pd0izqDH(Qo5DQI5VmF#$c&Bx=EC=YLFHTlrtM+OH|S z*5i4<69UX2jSkuEt^Qu=%z^q8WU9e4nSSY%ftTXe^@bh*^aQ{)e#u(mkqU>&zEC(? z(K{o$?xJhfI>EKmiQcZE1F4TeuDl07%6bql<_@uRx@0Q|89-~!_8a49l3Jkx%c__4 z$?t%*g7v|JJ38pqex4MKda#>R;*7T)-;=m$ZEl2+t9(0fpKAqKJ#-@?mauP_93jdn8Pr6JbDwBvr7Y@(UpFc1-%Z(>ncz2eB5=EO z)p5Jpmu`o59hLf{71(oY>{Kpc|76+VW5o2-g<&}_19##+2#LZG+R&Vvgiuf2a5#1H zzIJU&+H5j4OTQ;LutML4T7*eYf7~AaL9c1|P?PQteFQ)JnRY`hFbAM*f2Fsm?Tyn8 zMQSmxNPDEEYfB(sKcxdwR3vCW>QmEqMO!moPJdq&Zk!9x3CdE!_!p3*)70uKUBV9a z)!s?hc;y)4-Xfl-XQ6ljD6ji*=)^r9`=htP_mwOuCB`~aL1dzw13}Av>9}>ZU@q^P zm+mvNKmg2(m@$A*lz!QA=AH&7a8OT{1rTg8T&@^fsf{Aqk;aRxmdP<&)Yu_y&?tuP z^)=>wjB#Qsr$oF3ukl_D{OQFam4eyPV=OvRk!sT6q;#R|VV+Ol=3%+;2BBZ2#&tzyGY@-3W}}iV0|9?nk_Q?{zeaf@ruZxH0a(xv4*cg z<8t~ejmFz6=|s69iF}Is|CBucWqr4%T7$0>+1sa(MQ?W2V9C7BWBD{gOMPVOqJOsnW%GirMYPLHCk_A}E>N&4No`=TDBYQ@E zaQe0kxeCix!?{r|JN##F_%4h|^Y#%=P~FsH7_gW+R z**rcEtN@GHi12FXtidTd+XejvBZv}x#;#~ROiV~bXliIMdbGTCYY0c{|p(>A&El`5kuZ*fi`PaUPD$@09u`iO@|jc?bUSZ#*LT<2Uk$UKuKox{WJ`Ir{!jgnOt{hE7I)3@O> znZ5Vgl0u@QE73o&nx&r&@xpzzfaa6RoIVqH_n5_nY4`71q_XdX>CElUtmMh(2=*x{0J(*J1V>^X^%O=S*cB%WmaY>84zyiLWcbQlKst~?TBLGeGU|Lg(hi@R>u&x z^O`!&VeQoL=dV)JyIQX$M{>bAXQ~~hx0iBw9mSH!z4w{6$TWIm1vK@UY0YIE5ca;` zy81**N;azw`A%&$UZ!$m(4t95&9;NoMHIjLR&Q4BH7V}3%iA<+TV8mQBsJXX``1X~7&89ok32@>lA7ML zx0F`o=81gYya*HOcFvjMKnO})%2&F+6VQj!IFpo5$)gL`qM*5Lu{7fLL9LWg!A3m7 zp2D?6g7WY{^>QmefEckuN}-U3YPTI;;_RnASlGdMM(yx5jB=Lx)+ti}&GPV`M@Lm6 z#eu_9%Z;<%0A4CwofPfuJoX&g1=<}gZM;ydp-uqktrhu{QdW%%p>b77cVo>0v^2!r z;qWB=Z|kB9YEw3WmFi$8MME=a zm~|r;0@q^52|>G3j}m3jy#Wpsgr~v;sb+zH&8t@fO7JsfHHGHUFO}yq(WGNGVz1nxql5u7 z+)khfIgO$O(^_kC?JcU#CBr9iYcjo>^-`u#ojvIJIY0N6h6%XjZdA zgW_#^ec&;R@&5j~x-a3Q*f)=Pm*-enjxcG!&B&T)#`1#tpE4{4ZBpuxSaxo-Qh<%Z z!PvOl@D9AL&c~o@B={6)=*qE&&i(mKvAEtzcI|Q^=tw z5VS~g1YEO3iKXBv`zB;<(3#z&LWRs6m54d2age737k~_-aCU^QmKpS*ozKw|nPytd zG0No!D32ZU?l~q6g5}03tP*#f{?0Y2ZI`~Fz6!k!83fa$Ug!TDIYeP64NRLUpDSJ= zXCAfjO*5YNrjYYlIKqi4tNJH@em!L53&yHY4tUJ!Tf|$n&;M%LpYuMTuJj9=fU#gf zrdO>N`BU7wGAbX@I|5U$J4%_&C?4{sHK@KQ80{e+f zwQ-Xp-fI22g;ZydwU)EJ+ih|L$jJVq2j66GDG&Df8O|Ll=BxA7N5fa~+B9Za!1?GV zbhHd^Cw!c|e!5I#VTMLP8*jM_H_BR*Yl=@tx)nXbz*@ct0tnETyOQXV3>}y90ZRw4 z+u6p^r@WLt*(DG^#G!yjFAkN0cG-`E@p|2}ZB{XZHj;#S&7TV=$O~k2Zwp0K9*cKH z%->@?~XLX_j23B*kA4|=24f_t{szZPvfEDh(3b>$IX_s_$DD9`!C z5+aC=F~kAc@;a94V!cNnh?vq284&tb@u%LFU;>cv5>ac+rjJ0+aPHavTJOs@I-%ga zEMTV6BC3{LRWCphrg=-7bg5J|?hwsAL`x%uitQ246zdN89P5#^F6QegbarI6nCtQ~ zq7z42IjSkdPwvcWN*&?ch5q2$GF}}JOg{@Gu&VvHv1tW=on*y3XnvIe*NI(rfj>Dg zAo8MvJ-UM?d}W0Co5qpgXU*rqmS zlICWU_TP-1GCexBR|bhEaDOXdbf9$&l+#B0Gwo+{6C~q5jzOtSM-TZ0P@314v$sl? z(4|3yK}weN_(rSDCg4&nTw)%#91-^cEdD1cD|j$60-ur!B=C%(@(43!@BV^CkkO>X)rpv!(8lWV8s zNvAx&My)nSzMSyzl_ugqz9o%2hj^_>9W#h0kZ~ck0-LfpjoxTa$z;xB#LdpAyWz9A z(4nL4i;d?H1e~{2v#KPb_-nZPP^8;J0KSVOp;T0=abp?)JwU?0cT9QTJb%Mz)mN*+ zTT#d_rNUPVVG2%>0TVO_6skb>_tBwqhvmhM!UWQ8*kK6X?wTL+l-_RI!I@m&?YH4r zg7~VdtTT3R=y=0+RrpmT>Ado^D7u-3up}H%v?T3(Hj^{XFq$ORi-{0)aI34`v6s2o zpPQdM69UV9hf}6W9asBzqA92TGc_7B>}=&FPqNpV$=jSaD(ev3(@%6hlV^%6X18Jx z`I_IsS2Xozs$S)JOwwVBh97WdA6oKO+0Bn$xaW=5Vx<4>Wd%5Si;ov=8sZ5xbKonY zq`(Us(y=sY4_R1T(jVFNBe3^Q6&fSpJd)%pP0-2Rf@Zck^z!Gx-iidto}j$Gc&QjVF|*##hIHqOTRlRvPYkeST)jG8A?{JiB!*G}28B|f&XbWcq4mZ;7L^bo zXwazo1A2_36)<8huM0b|u94Merf3$CJ;l;@r6&QaW!gLBz+Qu;)0uT^E9@TDRl~YV z>=jSs51ao4u54sde=&lysJf3!0cI|;30>iK&MS|xDo0xUN<}V)+mMSzc)RWHfFKM= zXd>)#R!qjMT5g^SH+91SiGsSK^4AR>e75%L>tmtR*gL^Oc^Oj;-fr&%;!+EA1N%$f zvdM%y>Oy&db4?K@aOnkh)$+)EUBc*T?@~%%t*W2ZS?Oo0$*-ZLzfkcW=G%>?+d zrG@|0vrJ&fC3gdI=k@%*-K#o32l9{L&(>m=H&hUj2@}nE9AxLk4hN8e!-$sW*+kY-w<@&-5w+x7AW_b81+V54K+ViedWD;mlkQXn+DNS~ zQb-~TqBgk_NRqVbg_g{Ew+T0nN2WDMHHMu{%Y_yh#QF ztv;;iV;(KuRjO0FistGw%*ZuAn#M5BMIeREE&sxdf%}xwr>OxHs|P@A2-8v9y49Z4KTj zQUB-$UmN8l(F)F3z6+YBCf7j1t_s(rg4AZX6ulMW6_c>b8s&n5SkjB|7^F2hvIWq$ z-_H+B*0~cYg_6*NC#jHB0{|BV3Pfoh(iP)`Vw<;v>!f^?eN3-a0aq!_Pj%bpsqYXm zLaV-2=sts5=-=V~;z)Z4X&o{*#B|}`Mt@Fl7HBupUg8{^ zlg!)(s?r9>|CD6z$ihR~9GCJxVtrtJv(1SS}tpOhl>_rglrj0&KtUm5TcqM~<0D01x1YiWxV8 z+tI=FVH8Y zN^1dA6e9J93Q*{xTd)>7d{{sZU}>B?2=9uE_OGH5i`ylv=La+pJ_1^_F>0 zjki0}+-sCoQoirDb;15Y-qFW3hk!#H=MD`1^GNFRktc;h%ma9>RFeee7x(ZO+b@=X z0wH~g=kF7|TNeN%W%}ibkN<>D0w1UIov*pV!Y%i)T9uAFu6sU@)0$g|Y z<9vZ{ZwV)H_~TGfXOZp6W0N^N@90w%vBS#yQtpFM3!N1g6iXHGe93CQ9S_vo18pyEiG5IW{p5A7+fF@R<8-6~CFC@-69eEXnH%T9v?rUPtdG(CIuJAqZh(`Za;xTF@Q^SXS>Adem1;IZ#rm(yoZp)b6EqAzkO8N=r~N| zzYEMQIXbPb_@;5H4~Lupl7IZzGy=;buO%K;$$p~*3%x^#oMCKR)P*)_BR)JZ>$SWi zb%XfUg3Yhi(+^TLQJ#eYgeZt?{#<+y6HDg82PKz%Q)6~*3}&JMQ&F3E_-qe4zobM zgj?GABN^y_=|w$FDXn_{nlC+Wr_aPZT)rV`=8|=_-i!fGs&e?Yt$*O_VCXGmWlJ>m z(5ymkzBM0`qpi8m$U4_;aeRSeBpZh|4tkTrXT;Nbt$|tpm>N2XVrQ-`r^7on^bQ9< zd+dVK{xxD3x%^JJjijPw=0WiBs9h7kB;;foG4ZPMon1z#(PEHz{h}R+`}Qwvxa_Ez z?Suh$tA!;3NFHt*;)i-)Xj%hr^SgpBm`)3o&W>kK}Lv6pqmGh89E7g{@6U`cw95Ag9TwFDe@ z1DFAxl$A`BbDImC6V5Q=0^gb11aYS_bNo0PZa!9NHkw+i5G@e6tBl?$3wwh76IWlT9tnPr;rfeN5eOJS zXnCypHt_VV=UFD44Bcbypn-+#k1=!#Xh4E>?8U1FLaq4o`8fWOj}xc=M-9P0D&or> zN^Ey2;>xzov-=_-^%a6CkQ1wYh?CTCZt*gL`r7Z26lsSFMpOyg0B-*NdX_2ERtyed z6T}M^7hxp_CG&T#lIk!2BsO@K<7}V9kbZEaE2}cfH}P?#L-ah^?oGa7 z1j+TeyrHl<6<|czU_{SGNQ* zyQ~=Grlc!D)!9*p)4i(YFwh58F?o@>EIs0+)*_s#l^ALoBA&EP(wgnRZANMqr{0U} zsV6bRkFL_3npaVyNM!4Qvs?Zd37zTHZ2gsVMA18OL8l|Xh35OXztWAFWC}92kNfv9 z%~4h~*WKO*+f9_v`@eutnNBgRN6`?rfy5S+wwkst4jt0Y3E*iZ zwRbOyc~H?%3J3GjEm#<_&GnH-vK2P2XmrkE&u!-1V4dD_fU!Se>AS_lLMxVG?Cx#` zH4%08v8%$l8%`^wLr)N@`s|DxYHX<-(5TlbpiDv32hqB+W)dTppj#U}JhqtNOi@1Urz2 zwIT_P>p(k>TvgjK&<)I)PZY__vc3BSzOxciMX)ulKnd{CH;Xm#^xI`FCLkC}^AAp< z$cJ;!`pyw!U+7BjA7ZQLhI^ikcVS$A%#~0lkbmhTA-TpXBAXs#h@)4#9UM;Hh7IA5 zjMiZNjTl;=<6v2_A=a;Eu#oR6bX*5DWr!rY{j>~`IMwUwLw5v~DC(sSy z=ZmT8#&y-qoWJ^uZm?43lrD}a0agrmIjJdb=fsP+{27)1xRPA6CNg8 zidyRGhG9eVqf}a@h zV3q&;%qxhiYeaqnj5Rywz|hOz1K_+>PgUw5n79c=5S#BpPSJj8j;AoF5*gUUh;e>q zkU6e-4QdG@Bi;K4zoz2Gz#Tjzd?JFwJBxZ!A$w#4@gBn3yLtzikGy7ZaPh%Ye2wZg zu*;UMe-KTt^(l&hV+~OF-i9);1?{=-Jhi{rF^p6t3hgjKA^c@Np#w@H{f1C8Z9xyz zF3IKI8vRbP%+rLyup*P>gICc~9#eO=SoACR_)5!JpnY+wL_UzV3#85l~2_sDg7 zs23vk>7ha2SGEd4MVGR-=ODE7(^sW!0Q$p{>}vm<-qp;Lzf zh|M9K*m3^1gMmiPqd_mDr-O-GiyjlIw-G|0|q z2y`5eV)ux<$B0+T2X}N!N=qfMX`f5i|?*dJuf!va%&JHgn-+llGMj~t-W@6Us z5K{V5QlUT2p9rApj2B><$6j=aQDi!+%?CngPVrP>H+H_;wnGvlk(Eo&iV|xIWRVb% zhD*~KuT3TSxeV!82|cCA8V1IDXTr>S=JC<+88+t)g`}6>15?s(?K#m2M?XaTzWU=+ zlSlne(u@$w0fo3W02751*nEZ3N zo+n=ufLd75k^*_|AZJX|zlkV~xO6N+6l!Jzx1Xg2n~kXoQorOZIg{g8en3^9{Eg`^ z811cAnzmCH8K%W7Fwb|4_6@8BYvgm3?=glqK7a(;{r1syg~aE94t84q>cqbvw%k2T zBbEpMpyF@e)pEdH@Imrl|1D*wx#q#ig)jG^f8-E=vbH zzJ{AWES3uTI2wBqlHu_ctlNf~pei zmfczI(eQhCB1Q14PsWMf=j@y<0R_JgU6ERKp!2?K0f{?+)*}~6Ef4*DhsolQ3k__R z*{?eX2=!?Gwg{4dq;+jM+w|WV4|w=d%E#9TOOmKCI-TW|u+z!DX2-w?3`ZDc1`Z7C9wd%5sy9$( zn51RWB%$DoFHoFn_sEaclnJPL%#rm^>^#GE$t;Hu1jFqF3y?S2dj2xq>%12ArsV2# zPA2;(X`8Lm)3Vsu6bn#$f&LZ10t7TjSx;sZYMp)~B9DKi4{3nSEWfH#cgfhFrmr|0 zfk-$x$WLI(6t#bWYs02Y6vh^O4{ae&*M9lv6n>jWhM0AfUrYigybtAHQP;rw7$i?lc_SF}2d zPrrG^l~@}^oe@Wac<#2k0;dWec>N({o*`GNs84#$GA;kO&hJU?UnBSgRy=m%>R+2~ zRuQw3DPbEyzoOs$BW9py-7{cnRUcdIq2CUU&;b>X#Z)Cbgy$ekcJ?JIfaoC2SZw5m zOpRAES3vf-_`8SFwHQ(X_PV;=kCP{4IZJvUH^9iNLf@!tfnhoqJZ*_yrP^HnhbTJR z&%&Zshu;Pw4M;|fd{aVRAa1$sKhIc~EI^nae!s}pq;pJAYu=M^KhPW29q=CYToGTQ zClz&5h6?L*>I*vI*S0}EsmQYI(xoHR{M=9q4FL~pto*@edL{$~v`uJZ{U6o6vY+?f zX0JgOG+w)kI1`rd$sen8;e6+o0M70UD|+KKC5FUq^W9jOU}v4Kh#?Kw79}t25|i8< zLh>d*pxB0Eh8VQI7;+;QRfx?}3yFPZba8Qq0Ro_nPa+6irYgU$c=@bi2Dnhgk7+=M z6=e)#Ec<_0&0BxI1`NjiW#q29%n`}W_*1Yqz3aZ>jagFcYCBD-UcFX+A@*R`ZX{u_ zmgNbxer5zMe1P0+Nqty@0a0Ko=dj|Neo4^Cs&)KMkbWN5r~dz#xew@s|2yy;&T)|o z(h67-G}1c;E;}mwu*nmQE5{@2Ttma9!l{E@JM|3K%mMoh0@I4i1(SP(IM$l4az8sU z#}=ejt%cik4X1aGdE+K#kUMVhBjANcFN)@4)3o!sCiR)hN|De~XxLy=_HdvtCvmES zTn+Qw`_w}Q$C;pAaiS(;u7Em9fz|2d^@P$XXVq9rjVB+lx#I#{=Lyj|$-4uCTt-$D zhaM?=DxR9Om_XtX%$fTrE7#keV~PN6+!U1d@Wl3#p$-i;g#9)0%%5`7epwZCq@qDf zP!FWOBb+>Aq5K*#(8_yFCbOaP^wr65N%{NSxGDnPfZz(tRqfU$8~Hd&sBHzM(&OQa zATQn6Y`)_)ngjx4!RPltHyF4Wr0b8*xHCnQ9@N*!^Bc;W2L!&}d$7IZqEN!3-9+T- z6FyT(C%Aa=kbvh=yeAu(?X?L=sR9flXWAvq5N>aN8{uIL0w8-0w;kSo9hPpg`XUXn zT?)DYj?N%oY)&pfEvI=I3l2JTIzgiE_}?c#%`#Quv}ohWITsIyFma#N`1~4_)K@cs zyY1C&;)a@sogNSD7+JY&IZzYRDRXBPLt&=D8nbJG_di?%T8~g0IULC{D~$%O7L+f5 zH3750Vx4eGX5$w54TuA=!Y)~e;7`HzKri-V@y1pJ3cFpEm(!eOhH zt(5-*>OlQ{$W+nq>0YJh?cmeGI7x9&6CSR|@9~}}V}WqtayqH?KhPLxvHQ-kL7;m{ zeD$sclPw%ro*F|cB87;~t<+l*t_>34=s$seg~j3d7Jw~>iNML$7lp?YK9e!<*E7PS z=?>nm)N~?U+7VMqkRa`4?Ta$bj$3o1vEg)oN9&!yaGCWKAI__u)EGG+{%CVt`$G`Er4Xzsmm{>e5$HHt! z>GO9t{14`WF{M+i^pIzxVD}ym>~JTV3L#XNZkttU=qa?eM~NI)KS4jv>bJ9^6(bqD z{SufqmM0Uj*KKGfRM*Meh7NvIr=f1^sRg%@H916;{mT(;hTGB(Eucv_X+k8gx`qTP z?uNx#0oYBL7Wu*vDH+aQqGemQ0BcIxkH#MukHvVvS(y$K;+dDaZM+g!9M2<7mi6MJ z?Wtc>*^6+v%cO>TuH6c;F=>KW3*0PFvXCqIPD(gcU79Ov922TEKxMqbUm$?Wzs>Gl_o&qvC7|2gkWvLA;pS{ou4Vle6_H z(T08d4CHipJ+nYSe~G9;L>(?ll#-euV*QGb!}qp-Ngjm%_cJx%20NU)4LKwhMq zG|%i?>M-6Lh|N61q>{N2cc(lZmt$s zpphZ&e7|lU3YEpx}43)r_UwYWz^_ z>Y{NuvhcBN<;u1caKMvRkL>RRJ#!ro7(@T(zWyPmKWZRwc1#3U%aUAy&x?6Zt&hs8 zf{=Ju2E9;$S(Y%{3~w|M#|fFgERM!*Iu0D(|C92RV6Y)lHobq42*&2voWPynRc};a z(3NEvWD4#F*U~taTV&0U-ck4a3DPjo0XTH9V0cQQUL-aeJ6oNw1 z{+M`<)>bDW&>>wCnI`h)q4PM~W}{Xs1=~Rfnb+ejprG^8zHA`OdnUC6ZSNS}UG8w1 ziInFw!xR)K`Gp>QoK)>4$JmFWSjo)b%K0_Z=bfa>?Ov_Nx%Bs9bf zg|}-aO=k|xP2=;@)9Cmm*t|o7TE)w4;CV&}`;W`iBa%(*n%A4Y)!AX1Hc|j`0Cy7~ z#coJByvf)p1#=;?BF4Of`Fh?Ahl&X+ZS7>EPA!ZfA9zuhVP0s;A#UER-Gov4pO#8t z;X2_bUR+6^`eIv0Fqt#LSI0k2S!8$1?sdx#J>zS$5=~q>fckqDhKLRl6!%{7VjTUr7_v1wUN)B)M@KGwq58byvI`sre5Xe=u`6!N(R~?zX5h6 zc-4JZqM5wHbuyau9SmGxAfebMjLHDK4>0BqK_M!NlR(w$<3|Qwkyxyy#*A=@@;Sc# zY19~qTsJi|cz2wVLfwLDA^X8Tr8W7)V=+3Zb19b@sie9ng=*(|!J_Y8n>$Z3UCb<* zC*3jabx5s0oM}hUd+xc0N@urg30|uZ_gpUGk?!wq=&lFPG*O8lXRaP6e#QbD+jj&|89J=j0Fz7-8sd#NRxl&lJb_FR`Gq-@E#t?s^Tds&A zP1t+NUTA^tN`2PM*fA$wbauLep@Z+NP+54}P>90SMvLdwS%EqRW>?QlP?mb_xmPJft;HE12L#YntKf)khqY#>fo)=0j>4`c~X=kmus+Cq(lf z&bgFOmnAM5K7i4$osXD3e+nX+qyZjx#$N-4Y>bp(Eb9HHhF_9Wfz8oiWNf=rH@SWv zJK<;J`rgRg>C)i|IX-4GxP_Q_rdFdoYL1od1M+{$n0vFjW=(6N2|+SwQ~IH{K>i?i z9CW5QGfk{0Jv+^OsmX)Pfd|B^FloXSo*r^4|I~F9iV0KU1-iv^5QOP!Sb6*!2{Wu& zfjB=BL{YjEm*BGUHwlQMPIAzFkH;-c!DM#5&=c=7HWE8zp%gI%rQN0-WgtElr5yYH zJ!Az}bfaeJwy7r#eaCHN|__?cf-wsEm?KhC*^F+3iMS2yEJv;q-BKWwgkzN_R^cr0Kah+j3h5y|7a;J8mis>$#ZfFM zcD8Z4ADtM#kDT>}l@P7B*DgT01sEr$Yht$vqt^x@A;+>7{S>05KyU-FUFcLskR^wL zQ$H>w=?AsH%e~RkM!VmquS_>W0V==90tlKsYt|D{aj8&w!aowU;&rp))4FaU7wm7U zp?;8{#cq8cMDUZs!Sj-pKQkq5-Zy|N0Lz2VMfVJwBT7xz!`I^M5YR&vJGgd{%nrQ4 z)1h4{5dy0{C_rTJw`PBDB01E9%`!5^?if88QdG zZS!1bR}ze-s~0IfF?cI-2&v9&sE1fc(tlXTTSpK-O)PR_k(R+ivGS} z{|ROp1uq~;^MpK?NcAXx#1zmo7D|*+jd>=c7!pFLS_pZQ__5^9>kz&qfV|e8&Sn`?bWD8^yGQ>!`1+@m#v#YjAdR5tQup( z+Z%KYuUD>Wl;E3KzGMuyH*IOY^Wyq|lhA_^Fl`9?$ypW$dsV^{%s@w=%l_3?8co%AHrD{`EpJynMI_bf@1}A`JUY@LDR<|qG5$72vlNQyG3IC zPTFINo<<4ug!6lOV*M6JS;~p8akd?jI3D`lLHo;6*kkqy%|VUfDB(YfvvfF4fD$5B zfZMy1oKEs%z=6iu`VEVj!OAl2yv}zj<^VnhKUL^uO|qCeP)_BARQva~Bm58YLVMM6 z`IIQ107oxw(IwNm$O_^I4v1bd&0iXFSzvpct^|f$tdguDRruwC|AUK{kl;0xOQvmJ z0hMLb@4|4nCgF3RGcsdY%vL%cJ;?YSat5CX zgf488>0|x&Px2I7FpLBCZeY!muGN)W7`;RinMAlNzc87S!NCn$Fxtle0$_dtT;+f| zoTc?kPpgBfdNlr**h_cpHh^p4)-|L{D)v#c1z6vZF;`zA0DtdM5vNa)o%XuG<__6L zXQ}`=0zQ%&3uLC@!=A7e29_Q&+TW>qJj53Tw-HYo#B!Wd`{7Qo22JzHqrgp^Tv%m3fMu40-0e11R7tIZrsue&4Gr7p+1%eH5H)7FO8HlR`cXss0d z{@^BzY?hn_D{MJ%Onj`C;1t)TnqIdLtC6jRL;5uJhiX)Amk46-!S*PCIr6%E1vmDn zGa?Uv1A7r5%n^?T$28`?@~gSk4%V&m6iCPuNZ39XmG_rc;hD5akNxPE(e2`epV(Oz zv}ZP)clS6y?5uWTT>RI}OA4P{UTbnfc+Q(4()HS_;F8JXul)!BTldo(OTU!1PfYXC z7zAmRH$90V(Y;xGOdysIBf_9F%STPzHx2}#{SZ8&##AQr;WbI}B9bieAC_-}7XbUd zZr!6QxP*y!6ba@qZGf!h8rHwX+qCRF=7jc$XM{Vmw9R#=E+%!#tLQ!y2ucaqEn~PR<{=?#NnLTu2SePxe9+{|MZu(pBer(Z+vH=ceJT_sHm1s`2Icser zi;$>0sV_YXGh@*TUgKLwF40`V{HTobg~~MC6~*HURG4Tx>S4h^`dyN7>brx-=L(T_ zY@|(VRSoTBeCWTqJ-O?I8%UP$gcjJU!}G%JJf;)IYSV)p)NG;!bJ}LtT35g#iU#RK zmBZ9**e6OK)rXwwpDoH3pCP0w=F*(B&tA#-KV7`x5zG3LF5^W`4{w#;b%PUMNkZ}) zn@WeLs{pRbtuD;d`VbPK2SwfZm`W1;2C z1bvkWr$460G!iWQUA`(uup0pv_tLtQuITF^c{0ht%=s2w{;$~9^risAR-GQgZ*We; z9^Nd6jB!L2&;EUn)xh~VYQVl=#00|_VbH(cdi4udsneLpahMXvW73IdKcLyy0vPwBo3cuY4xAO?Z-e7h;*d>c;>%(tz;gm{*(GDDE1HO}Lt(k965A8vkoS_4m4#jX@j9 zoShK=^UzfV;lZ;;wfd&#y!kZq<+D6&971wkcuipfeh~*vA0=N5CIcP%_&6C`^cLVu z)NN|%IrbEPn(&)}(JUfmJV?t=qRqz`^2<%qvKoM$UCcht3)sgV75>mOB~mbtq76>+ zXH^Cb-?pDl9|`O+RX*g*qusBIu$0fCK1Nn?0lH6pIchjgnm=A&uYbMyX$vTE7R|T_ zlOu3UvF7`*Rgq@N)S(A`$a9rU}i)w@(Z!d-#dDwjl<#p>LgL2l@+!rO19Q)S$h z1;^)sa2sVM6L&`@kSmHYeQJoh*OVj*3fve-mbJ!s0_GSlSd3szs+To}Mjl+{6)voo{e89?#6@(c}nI@!?(!a184Ori%&LXgpL? zZHvSaZe=8EJ=utej#%3D!3^~OYeT%L*h}{=W*dq=Lx6ZoP|R}}aV$ExZ0z+TYp0LO z4dNk5iQ*pS6p?LB54y))zteg+$CuQiljH1-Ou3FX4Q%of5%+p8jSO+7Y&2p=u}@%Q z(!Li++dOpqP>9a~!Ifl24NnC0J485`9RLQJi9pJ<^4k#C7s7Ea*C;YF1!aW*x2e^6 zC34@NFekIQ<-N3c*qH=X@KPwQ3TE_o4OylNu`4i*Sgqz>n6zPj-eaGvC-k00{$r(# zpCZafJ<)s<_3zPD29+#L8D@izZ$57;z-&%he&hg7EjEtGJLQU9<$|liCKOg0)YyYA z<=3Ib?elmDls1UFEH`(XgH=*35=7-CQ(BbA^YxnCNq7##C;;uu7_F{>v;(0IK1~s) z@E->1n(3P@z05h2i*+Mnxtb+f|J-D?roLrVEB;_o|E=)Rus{^Liq&G~-+0{ZAFk*z zA{`nqHL}6Gh%>gYtxOVLQ$d;n<*k9AujhX;G91z8Vc0kyK3{EZ&Yf1SXe;i-mwgN| zIdhCg|!tM)DB%u_}Fu5PuX11NIr$;BIP&JL(l1M}% zaWSPmLMXTWj_*Hbg8j_qSo!2u;@ACebEe?VM0O+g7wGNj1Z-fqQll_5LqMaM!-XE@ zdPn|+(ALBbx_F{$FS&m}>5wcJ?OmG6r)$WS@`#lvhML{%&eSF%0)IWP&F5D#hgKns ztS?sY`*z0+>k9uB*H6HkN_?}eDjF_LAm-xY(>g7DD@h|sbh3|>Tw)N84uQB)fWLl* z%-KR1H%-CeV&5M|wK)T=#5aBT=+W);@%rDq!OUs&^|`2=s#j| zDUgbzpfh&SjcaAj0}p!ojwXZ({5SDsH{8jNEE2-lm5FG0%)Zv zSo2WaoyHrs1wD+D!ct|a<3rJ zYg1QvB9`3}0H5xzHHWVz;h>r`j~;S&6lhVC8Q=PHy@bBa{WN{m&}XdX5^=~wZX6Fc zw3efj8%c)tt}LRj2Kf&$llpP{a-H#u&eFqKbVOs>twdT?v}RXx=8WYY8ShHM&^UUx z`)UfB3w;kJ6-&a(ZVR+38V4bNo5@!yyc$#7#L-FTG7&3)1@oJ&a(onDCTF3~h zu`_sl){HJ5cm~w6LRMrh&gIQ7*iYp@$gjf5(wgLKG)-C~fMZTpl{nHMz8cf`YOC{pwJEb@Hst{i3t3{fhAz8y#KTWx^P^FMRQ?o5`raRa}|i5doA39W>o%u^LHT9IHt+H_Zmg z*g(ly9*_t+Am(Kvlb!;V$~}8=2fXp_xL-C~wR*4sxnR$SWj}Loh|sIJJFLwdRm}Zx ztK8J46zLW8vwhmbotmF-Wj)FIW()s|8hu+rvGPX){o-y2+9>SN6jOuXFa~5|MzdHs zbM;Fs!>z(~x9+8ghf?VMhSgl}1ypt{-yQXxiu-#qb>6mDwBZc%7^f$)Tcu{7ww4DQ zhtoj8K=~kj(K;nmSsV%c6>)Pe4Ae)4AJr|<;k+5(b(4)a5N^RP|6Dn^kP|!tr|eZJ zc%}fqbO@F}%5234e}G%I6OAo?QyH6b6G@_2b9W7hpdOvstnJx{XX8(Al1O`{Ihp!K zGBIZ~1IbaKuUm3*=hPl1H#X)Syc4}ev#@VDt=-rMEF&?aI_Mx@)BzcTEcSas=DW^?C7_DgRLP&L>>MOW zaYRlqfG`l?>|{e28ymAZh7DlmjB>DAMda5dj7vkN%RL6RWhxqK8$V@zs%8wQll$^E zL2Bznk=YL9NuW11N|QX;`1IX%fWITkssz;Yyct_r4)LF_3oy`s>xo=r2v7o2=wf+6 z1=f>WkH^2|grL-{zRKRivs7L&`2WB2jcslo&WUAx7H+af)AEz5L({XB`i5NYUnxL| zDN8;fQvI`>gWeIVF!cD83Z*flhqu;^q9+mYcClBObljks@9V!iL|pc$$yvGTsLNre zwnctXxxHhCWWM^li{3-O;x3GaAeu&uoq0o-PEz7%i@a{@olg}yquFgtI~43-#lB_&>E{uLm6BT6wgs zxT-8Nk!&{U*~eAk4s_%V+8vpS#uQtxz-k<$8ViH!w*<}*iP&N&AvzLcl&1!OE`F)n zRj$}$NsDNKtBP!xg3}uYvDhM1Vui*O!{_3sHFNgQL8&-7{1XAe(+4f3+q8N3B6e0U z)^7#NSuJ)zcaoOOCq=ZX063z(w#iQtc7_@Kte#cPAbdjKGe=KU^PwTIRBOXYt|F;l z8c?B!XO|e^+6fXiXo!^m%H-hJRX%Q`)X*~HbG{6Da{xq|^T0U1>1Cu~QK>4AM4Y?K zP!N@ABH44Pi2kKTD@R7vB6riF0=cu>6N`{vqOgY6hDH)s#2oftbhu0DE(JN&rMwLv z`z!6E25h1`*na8fZUG4J%G4aLmiJ)G^I-^`m$PI`ruhmx{Y?*Ug&)ilbU?m%Lu>i3 zAp1X`@P&y5I5%#tWG6gXY#aSSx61MWPtXI=G?&3_FWF$ph!Ow@p{v~@2|?<)&^ zA?ODw)>hEtiAK!cE?O4D;3bE&~I=@ zJPxw7`O9Qt1!+X#qV3w|Yr&HB9i7`>pEtfM6!*Ca@^1M}gnNc5_y()CMWFLH35<{k z=u#NoR_3u1P(4LW61F?l@3(%q!4pyEzrCbr0B|i@Qjy#7&mX53hP9h{?HY)>fRvC3 z1@ui-8@O8t`NOjmO+J|k@zqwW;r}DC6ef8-e?=KZ+Uq_>YM2SDMJ81?&vs}68|=vt znNgsG-^PZ5i`^kW2D^dk0=J%;L!tbyc#K!91*;=iqhV!})6aBc$_bJ=$a?f3VcYMr zaGP!5>a1NaiUH2FinL-wZ`An-@pvwcHKIfmRp6LvYnI_=7ml%U51f5m8eZWK$&cj0 z2ZXC{7NsM6qNt1=1ZI;-*)WSoxhkjQ6j3--8uRS!!LCrDV0hDi|zX3p9 zBb;%vSb2y1M&exH_iu;%)S~ab8!>}{?R^r1rd7ARAC~(RiJyPEk3if9FOUcO(B+2K zl`3xx^3J0#sh>gnQIO}2t1f=WJ()TP?wG_DmnjJc%iiwT3x;W9u?Z2*>;L_Mn3F+* zvc7rVOi0@8&q_9oj6~0MfFSr)m$F!=!ddhlZ%t|K8#M+ZNY8JFM>nvTX4I@yyk)?7`}Kw^-w`S>Qhh;?ni_v(;N2dSw6y zdC9dpwzqlaZ2sfBt%T|nEVrdM2I|~0out=qE z9m&Q%ke|!%|L7R$VRy2#2s#hEB|q%7#^8R&cKOQ>v60r3+I;N6kpgPDmnYY{$<<`T z?AZKCa=Ic++fUIcwgUoQdxC!*ikK59pOym2O|=9HebP!b7P%4uD78vlN(%*#-{L*7O+4^S>o**n#Bl^4>VWC^vJNOno1Y)Fyd+cVEN zn#J&7)!PZ2;G#DMleHCkSm6#d*X&(CZ=Q^#Xr%dRxF*s+W)MxY@}{*(BI7TXv>Q#p z!~yiYByN(H8BMw3w8QBj+C546+4vvBYn-iAWu(@ZarP;m5e0e}ceyI!9nk95jp|Zw z$$wT`h&8-~v_B3DfSJf9eV5VlY=4v;uBq#*R0GD?&OZQs5R*&71Z3Q4{rM{dg87$y zT_8SJ7+ZijCO8Jw05_+V>r2F(J(=F`ENpT-Cbz28X*aK%#}X_N%&v5I>uf+osd|(S zV=HtgoKEi5;tz?0rIPd#6elg$#wH)!IDK~~*-Qs6H-{R&y@KlWP7@xMnuc@vOzDHi zoxGW)c=R^iUDw`lbxMUs|J2^JfFNmlFCR;H+<8N>+JIY%!qpvk1v1Wy-RYYkY1|+YYd6-hOAGJLm+7ZCOx%t42k5Uj$n#SVIai1mTe6~ z6=m>l@dUN^`SI-?VzE{uaMy!BB+-k-*e^K5i^g3EHDOt#rr11HILXmK@)y3rXvJ(E zw`WFPy@jAn&mfu;hjjG2wijDy_5fx|0c#g<@tNjUMEvm#7rv?wD3dO6| zZcvT`eM#1!72l&i{j%(QIPSBYZ}#qTes@ik6STOKIq6a<_PO=hb=wNk+K59miFlnS z<6U^@K$cwr@)Z>%;fd3nn{)@jyj@F{=fhzOK`l`|3{*|xGi;oKogZ_QU6lDqAG}r# z90V#osE{ipL&n`OwI0Y=3S-aZQ~fJQ-AVTY*rk=?fz)dIOio=-KRc~vY=pr_pme+3 z+Kn{Q@j#tdqPo}}j5-v0r!b`ZTmXU1?dMf&R&^pXvLaeyQw$#H@bX(?*uWx44~K2V z&115oE9a5~lUa;82aMFfws2fynWpai!*FJYbTn==bzkAHa;H`3)d!)s(Z(BYp)ij` z^_5K~a#Is6dWtGygdQc zNmSxHmh=5xa){Cdlo2r)h=7YxNs+q53Arc6Yt6aZy7}~xHn?G6Gv@IQ0ej26^@V>H z7jCO$i@CPhH3OrhXS|af$)kqW!wZ)vVz8ilUd$Qy8}|C)3m*-r`97vSw?c_AcdUR#M~TZI@Gjh{G4AHp3XV5Q zl{!=A{KsMT@$MLer!kKg@TPqCIC$w!Lwy?78c(|V^!zr;VH2rcRc+y=>2*~l+iq6< zp!7*FVJ?mRi3f;P2*>!jPFg)MFA|GbPBq3ao^Bt3i#wpxBd!0*KAoZqcKupO+JUHM z;j0)Sfq1-zH8CidKMdO0eq{mj7@N1ms>dKfOlR5yx5efUwg;mPYg-1u%x6E+d6W7{ zFzhpK+_83ouFv_z?0Z8RR8rhR;yX@r=gg9{OL_dp8;*t)SAR)je;Tds$APW@)ndOb z75`?}{-B`Nm~~%gcnOWEw*7cSL^)$K0)$A0fVS3<9E*1cSxua1k#6}fg$QOl!v7rr zLLVSNz05*ZKsBI&XpVK_pDt1GYrGDI(9`xA#X0Ggbg+{jEY(L8wHI*Lsxbx2QLyX0 zmFoss;A`zPH`o@7)uw}-3bx^^3wY%!CZ7PtMvOYHcl<$C(fLFZczBu^iAaI~$qkqz z-~Z5*xM^IK@!ks|Sci*_eHN(Q{D-6^oQsPZP63IHiv$s{u}HuV9iy6GiL_JuE9tGm z0zwUT&-%o6^9-xUR3=&I9e~4K176j-T5_1Yd*r&FlY(4jD8laVF1nCx-D}SeG%)_3bKO=I*>mSY=noVfm*1^?UKhKs;0A;LcIX(nUDmD^l9b@ zjc6TfmQRC?_W~AVvv2{))PxKm**d`g=xfHDj8|~ta>E1#(We=&wgSTA>N87u2qo+S zp*reNz;P@Xqrzfa;rx81wTuV)0pSU(9Q)Sn9OV_yOY-EYmFYz(3wSe+2;wH^G{NGu zazzJimk>WO3iwxkD~?DLC_JkP4jTT$s}5?KFv4f0Fh-3o^y_zqW7`B&S_IM^(UoH& za=}3*7!!89{UL-khDk{7w4SwZRn7(n^{_&&Zo~^xtD($m4)zO*J;P|Q!Q8}%B;<=C zT+>`|AE;% zi!Fkh<%K$ay#yxYQ5JF)ldxPLTnb7Rd9>*_Oi_GFW?5ytVFR`FI1x#eynb6U> z4q+5`vGIs-y19Bmx&WiCH2Ox@yS38344Mb&(R#=1G8n0jRmpA_nJo~MwS1nvdc>vy z!HHttHw=a{Rb_((4cK-S*j0z#xe&pON76khoQhw2q9bC^?$N261TnzL#T6v`)caP6XUAy_|ban}Y z6@n#FBz z!(3XI9GO~p=zo^UgJwh?AH?TFRk{E4ZS3BeQ^_*DXle%^)#-4iX@TUb;K?u$;?lS# z0ndh1ldD&xTqUYIu@ZI125;V0h3bMX6TyBI3uj8Kf5iT6_s$PQx=D32UNPR`q0pI1 zc~i$VpXFE4*WiR$x$T=Js}AP>0tqr{^fS`%p zU9sGqRqcHVCv<$3Z_}6#KKzy1^OnM5%CZ3xTVhmQor`5adaYyV(zjPRBy;jI2iQ^% zwS8cCe7O~OjHdb9e}*#4>IKivF3_eXY83%Sbaqfgj&ImK1x#j*yOu>NmnGFA<`+Ni)?zB1vK7s4TTh*Er+x6on z)upudm^W)sk_P-A^1H7604 z(bx*Oxq6yUz?W0mUBAWk3hsymylV9}eI4$ymuP6y_Rz&VseYJZUzbbPJ%wEJ6%oWm+gfY==VZbov*=%4t} zLMHQ!k7L)5}&bT z$EAb6dv!1%HFHa9>3x%Ht&<}A{*EkP;vXKS@26Rhi}RK;l8KZ3Daow0>;&(UfG4&1 z1Q`g9b8|aGDVGFp1jt0p^Nd_yJX)M#LFR6@Ucf?Uy?VKQlIAiWIia4V?KXk^VsyQW zjJcp}XR`k%e~Q=2d5L>t59_Ngr2lDn{qYjeKySQym~(6I^wl5xk>nl9jP3r%w&J6= zMmHFiQG!MKAj#U!(W*5HrPF)?{#NZ8aRb{|pj@tJG~D0*xu<6)q||aMis%+%*QBsN z>~4&a!kdX!$g;`-78R@`*t>@d0II4@u@LqaA1AIOhPu@w18bll&+UVCVDu3&A`p`I zLhlrDpj@g*%wGx1m&70wy%sIt69e)LE}OcLt>{R=9w4Qc#rOm@9KRBN@dIru9bUvF zM<*Hue8hK7XfEG*G8m2s-34YiF5k1RF2w@Sw~X-z@e@t#J9s9{auNxhrQ1OtI)h3%&_V};QBEu-c_2* z=T?+*VKT7LM}=xoEgrAsO)Mk3v6G1A0G$_(E@MX}6K@&sKY!VWTDj=arF90+sSubU zAib7_0HIFKY7z~|>SbI&E?k7D+*ztQ_4I=z!NlM{{kwnWQ?ExRb)H;5wuxp;k6waA z>`PF$a34XJHY>$pt)Ex6T;05XPAIh~20x~Mp~So(BMyf=x$Q7%a47ezs!RK@b#GkOpUdT(&)j+jADrC9yZlJdoIot7$aZOZx%TlR|yFtXy?*+g1BJ%q$(9Upx)V@8Cws z+Kd7JW<;T9WpT&&gdFT0rsDW@$Ns@JH^aE?kj(l=vxD)CmS#wAm*q~yoWqN>*C;r) z>5}$?ds`D_1PMG8ce|7nMhIL?XDkb`)5l)5!_Xf@z8)ZYGpe!;cdVfMMmV@txdU6) zb#r0xG@1Ip(ZK&?Q+63-d3U$(V(o&dpq}HoA{a30)~<%*g*nsiV(#JgS8ZCMmxB>e zv<%jQa54v~YR!Q^NK?33W;L;o`~NxCHO?0eMPw96K?Q>#u{%RV(gL+bf=ha+ zq@r;mP^?6XgBOk@j+n2g=i>@VAPBJ@MCF=g}% zTXV)~4N8W|k)-Tam`XB-NR%DauG4j^BUMKX}k!#Yej27aUO_V~SxK@MRo`zleb ze@J3Dr#=mS6cpP3GOK{c3H#Sh#L8NzRCl7mEyIC(RKNp_E%g_a^y!^fg#f6!erQIL za*Kf4$Q1VZBCFHpPu$JUM9Lb&9{R>>PwL#qk&$w?R_Od4@L%MPd5)pvg?_ozkm2O|$epXg?2p7#8reR)^`O zGK%r)xX;umjR_TvxM9y=S0Hm8-m5uU^OW5E1xODWfbhc%Sl8ijiXN57WL1bU{`akm zq1N)0JwI2tgQpj1T|+43*c((aa0|7EwqRfxP;}%VBHWqn9}v!D4zTfbT)eAQ3_^yZ zK2|Z9E8I{CH_euqkfkx2+RG!5Zs#Uo4|wM17Ue(F6qW@Tvma7u;Ku&LUD;K(E>VSj z^l$y^1qk6D1VfE)E377$qx?=V(0C^uUM;(H60jhyH@M`zAP4E!Pl5{7XiwgRT@ZfL zZ%N}@O${)~?;Vle51K~ak&0cL}lJsLx-o6-dfumw!~c(xbd zJ5e@CYj=rgA90_|xj~hsB5sU27XL6GW(XztlCCb54;IPq``q)%&kjz}uv=lPL7CBz z(s=cyM|y1C6s%9FtZ|1rg=9;ux$n4D-%Sp3tGU-G6#DYVqhi$$ghVfiv08n0z{88# zeccX%=wiTrDgAgpbzG4DEK92GpMC_)=BVQ!&wZ>}mS@*s?c5JpA(4AC2BB(ykvAWx zw57+OYpI|j5!sxkf~DSoZiUS)50m!J2D&o6@Mg(EQ4}(~bBpJ4*ys#r>ul>E#mlB6 zFhN2bEBi}!IE*a_6wBzPqhCX~Az)L{n`=+HpDu)FxyEC4%9~0QzVQN`Bct$MWc8C z7gd7Zi&mOy1-_-=dj9!+I6<}V;+7atl>Bq*7xn|otk}pLT5gv1R_dmy3MPco_vcT7 z>!Zze;MtnL1djt^a(R!uz$!UOR{UA>xoV+yC4Gq`Hg|hiXQ7sMlDVLYo;PV6lgw^y2^AF#8LuNBgP>84bb=r6kwdDrFOpBzHzzj|PqE#2P&GJWhwIW7<1fm4KS@$Sx#jQF>{DA` znT%`|w5ftLjm>yMd-oQc@M6}K>>Q$DMvEg9VoI-(PlLmVO%>~yhGNMaRupE2Cwp;5 zpu?w0+QdvM!xUGyw($<`lJWJoehMlyV>b+c-hB+!$c9a)lp>1%kd|#{0(EgVV(UU0 zSU zx=0nly0PR3jAL2i{)5}ePJ-hU&>;P0PoG9@@-;PvKb;5Z^rQEp55tPkUiD#cNtLK? zR&Lupy&G}NZOjusu$ljm{M*k41oK}km}B~Icm@zJZ+--6kzP^FMEkX|0F;&T1;{Z9 zvvhS71`F);XPWB<6BG(BzbO6Vkz?+4HSaL>Qef&_$mhd^gs|RZMqU7Uk$mfqe<>@4 zf5HM57H^%)A9^wCCkkFU;Gm~noEsinBlk<@e7kEhCD9`joGqfq)e{34Xh}q0jyf)4 zVD4Q1@mb26V;#^B=yna|6{X9LOHY?A_gaFmKkpzD)r`G=3FGIaEVsdrw=CRHw z?w@UA+(pI!DZ$>3(=(@(UVYXp&{?CT_Jbczc>uM2>zHoto?3hib7Fb!}hnkWi zdNZby7{81&F0)Vtj>K@BqWPzlsq3=I=XkJ$BUU?;I&bk??ddCUDK(*T34?nM}jp|J2EC)!+ zIyFblJGE6{4&kf$H$qn{DO--PM~_QKHJr%+fh_s=J624)_%@Fjul)TmU4`nxN>c8x zaYV4igsl|PV+Q@gu#% zbP8f8BbRVn3vaqjo`*#1+yk#=_#l+DP*mTJXd^h5e82wGt<@N?akW2QP!L`ceYAQR zTWR0bt5VMtsDa-eayuk#%o#AX)!CazXmsrcE;?ob6$O70 z!fC@k3N9MFJKzqD8;3@-f23I4jubDxza%`D#T}h2s-Ca+wS-5c-3x#;@cx&Odq00m zru$rbxmqJ^>Z{pKsKbo?fqwa<^OxuIE!so#z07ovOpg&W5@k6+`ivowtf6Y%TAJv_ zGwy(vV5FtvkLqKH@&VhAF7_V4n%D-KF49Pns9~+sY#w|cD(ZyU0M~&|-2?@X1wpiXVU9#V$D~P!y zY%o^6$}?X+O)y%^Od|4__p;=gWFdc?WxSX+xBv5$!RmrMrd%>5m>&@|q%(5B?L8>G z&lkF6&-_b0ZZKDG-ijA&Dw!h0!YUNT4SF~H;14*IbA@$KsE-|1GK{Ui#~{MXMeD0+ z@;C(N7q165&E(xVQHH~dfYv5-bN(m&@FbFVeF5MXz@c@%I-BQFE<}r33>!LN3)7^W z6MwmT)q)m)MSRV)&V-?%YMKk~$4?E!)p^Y)9d>!TCMlHKI3iZFt%gPLd&iW09+%3Y zy5nz>`wim2hcUr3q#@;`CCU+B2m1Je*~cAQ)!pHH-(pk`v?#NlzpCyIq6-K^Z&XlU z3Na!4nMO=Jbr%1B;K8;S7x&^XBlJLOvMWsa2}umULGZ$s+VwClsHUol%zVL{_VO4g zdP7c_CPwVq52iQMkm;|kP@O--1JOLnWry_bZWpZk8Qi*+Q+%k&PDo4>=7QSYQe>|Z^aPifM#~tr= z9OcwFY@AAuyFerxBFrKB(AgV_8Tg`Ymv7pO7H}8pMW5;u{BLClSmt&T0-;Ri$mbi@ zASc>kdz3DvEntF!cuw2b=Rt*<)9jdf(LzmBY`g~Od%ZGZ zVq?PN{&;FEO-w9IK$UIA)2gz1Ub97(XO+2FVa>SYzIAV=GQD<|R)=oI~q>YxZMTiCnv79d#kVdTp8&}vj7q!GCA zsM_*zi0B1nf1_`F=$qt0lWKTVQ!HZ$=KVT9O+BIfiEq3NBR_8Iw28NM1NFpLr3h(Z zXSS^93rM}=r~%|neAb!JJOj47ykWAgx1MWqdlwN+z|TglqI|*0uQN&KACJR20a#Y? z0JmegC!4K!{t6i~psy@gZB++M=q~l6Z`t*f^*g=7eKksF9%wA5R8#?J%U4UV*;p=m z36BN!%$T)@yuI3S@R%>+;9MRd;-HVdi5Z_%J&4tKf{adZ9AzhsArp(LmiRL&(S#XbWYiBoVv}X>mbodi*w{kWflr?uc0g%q_pJNgEc}1~X#Vd>^GX zp#I7sjEv#*_gP3tg`3@8FrBP97MqJoEjDk|hLK$n_q$gr2uA3;k|3nay6rWm|AT`83q&DCDgXeaUehBPwA_MBHJTxVObnCM{Mkr9-e2H%o^0_g zQh#jBPD(}*NWLi@h~|QG*LMA+!oQ3;6w)yZTSU{;;lv$jGCkyaPRD&NO}e}D3)9`; z>v|)%#wm)-YL0r0}(LjD;sXG_y3^MKqKW2ScbiujN^A`r-2%j`IplOxS&Yw z#6(=&-TdG*gN4Wu6S=nO;sI&Hq9ec*c~F088k&5bzF6|cZIJrmz!<4=Aq{8P{_E)M z4KU3z-{H?gha8b{C>y}(`SgZ5ZiMOY98ICJ+12xQ$8F8r^)r3{tq#5cwE1&vld_}E z)Yw1uwIKHB8Ak`3Bf=6@Wcl2N3l`iUGk^j9N!vyZe9tf{K6*FC(BfW3x_l>VCe z(NT`{%`~+;g<=+nig6BcI@e$+@o1X2WEYz}@m-pqMMm1P;(|Ji`UtZl$R;392I#uUE2YMFB3p4$2=I zgRRf!?R?{+aGT=*WvEuDxIqYfUf|7vQ|(Fw8uNKx!+Qy6%*vv6N}0m_l~X-Qz-o=6 zdNgu~!)#FFs}rV@FVLY`=ywREYr^X;X~Tp|FBS)(gMxEJH>uEH^)-#gLUncgfF_Ac%%%2EOrKAvhEuGq^5DMmA>EKihxxY3u zx0LA${Vx|S=0#j6LL$&n?=aEjL~Pj0?^dx&zF3-^?EDOwuYIZ-O@E2$G3k`v*5|T& z>`AuQb0Wnck(CHq$7mIXGI+huHD1BqCsLWk39ni-c;|bjF^%YUt77tbrk`v-*|>1g zF#K#+akoUAxBcn3Ucp>zL&L^RQ;%4yc!C&d^E|zW1A>!4^Y`>QF{Y&g*5V;lvW^Wf zy(de*dNwppcJY+k8-?2D#qkXq)J#X+nZm8+LK)F9S8n@dLQo^w`%M=hYX}>JZT8;R zUAFYBTzLMQYxKuM_Z+r^q7Ql!)W|n;nLhTe#q_h4OMHW>=`>pQK}RCxPLuq5n;MlI z+Bf^s{1N|jk>+|1ByiPG4xrkYI%(Tc*a*_|Xq{k=q0iHrFJ3Nrk)~FQ^LD4qYB68N zpTm7{SEu|2*Kp?C#JVA1-LtKGhDjRxrY1O*t+1Onziw%n(hGla0v+QIZ>GHlcM!aU z>48K>c6dR}o>&%S>YB3-U4x3_aj9^Yf1-`v4E1}w2t(7^UXj1AO)3#cIiv|Yp~gW> zVw*Fyy6Z>ceat_ehcxcOcr24)7|twm(J8WcXCWLiuw(@pMBYBW&^1 z;oAz-MGDr~h}VSLZLAu57ed*Z%)6ua?*Bn#&=woT{;U9iJgk7jFwVC~U^9vq>xn+W z7p|aVSSJxgN>`P*Fc&G+zO8cdMmK;sCMCY2pr(Kwd&aUq;<|+syYR1CIS& zdaeN}xdgBbzS-@P+9}l3C|;~w-mr1KKG9GQ!t=V^E)PD=mezmJgh78s8f!{tlD)3A_ zkvWqP#~RLB&(Sc75{ycrQcGffwCtm7IQ2q;ynl@PbzheCxCh`21Fm;fd6;ahvHMCy zIozKAdED?x-jriMfTtNc4z(JJT2%iZBxnT<&HHNDhAY(3wO0yj0h*JOtW*1NgOcIz z5!E1bz&Z-?{9eO4^3||9P4(Ac;$v3Hzn}K9Dva*A<`<8DBFh}H2lv;OCjqUT(mhOt z!-dHBo|T&+$o&#uD0)HDQ?x@Ak_$Jt-&V=I88Q9Bc06$`Vm->Ko;Acm*{yW*^onTI5+$2Cj?GzHpN8zs?w~CZt=2`(jbNv zg#%yUJK2cW(mL>!c?4gzu|&h(^hr9NF)%?;y!M?k`0{~HQf6cVhYSWFS3i$y6Qk|O z!=K*aWKFn6M({jyyoV~)tpKkPyJhSaleC58Gy#4^IKjWiaBpVB3OaHx)}{1`bijei0dvnz$@+)YIJSLHYWyKh3Pen=9{ix&R2!E&hTI&4oAW5a~G>Sg-sdeq8vcs zNbhMPFA#?o+U2!RWuxFq^;TxD&6=eQ^*lahhNr3f;*I_N7Vq%?I+pr^#>YLhiE#Gn z%*T=3{thX6F}N>dwHLHP#xR(WK#e0bPHS3Z;w4l=Iv$%wvL0FH)-bM%^MeL=(?2&y zLvO^cMI4?rtJw}?^f#L07b)ATO9r?azOZ4dr>|Vf7FK+iCVSEkJ$pMU$zLdF`H(Y4 z-NSO6W@2|5Oe^WH2o|+aj@`M?GV-Ad6ydnx0pSA`87Wa2>NSqja7NP-B5w+H3QqJG zwzs3X3)GECknPx!{dW3q5C)eF{7&Twte^$G`AeZ3e4`j2_$1uTFEAP&?dxu&mpC_v zBVRupBZV}Xbl1dWzue^#l9bT^ttspW$t73QEU`qLpSp$fyM6;S7&5q9?i;X`*-uNI zfixit6WPfqXFVC(FE3x>e>NPFgz6+fFJ_rL-b9ZE3{E%Fv-WlWqsZ5jkj_POX&;i! zK!%B+&N}G3>wLC3@QD7GAo%vOB1cNr@aT=l*#7S>V3dUoBEV8wYByl+d2O%S_4BFw z7{sgXE?gz>Nwjb(%fgp>E(E}TsuEOcoHiL!A3pD}3c9AwwMS+1&I0&Hth&*>jlElaTOZ7rknM~RelC*dW|qrD;id6R`I?W-Fa zAh{lS(D2^}qvX6{eKr6*Q&sN`W>8?2G3?b+twbEjOr=9YMmj9h(Q-~kt&;>5JTBlOGZvyTWJP6 zbLiE#S0*yw;bRCtXms(;Jgbc91vjUf$C;rNLtudv^1j*-TA7vnzi>gCMTW1T)5N-a zo}zfWf%e964_?EWDciJLlb)BNGDGhOw90hAa|Gw8YATj%vaE4`SZ%TxU6{42@0zy_ z+%?XruGkHnb&!Dyh2)B9Q_3#I1n_uAX=lK58E00pVj5r}Tx4_D|LO=f57IaV`?tnK zp;&;1x-w=aU5} z;ucxdPH$*<2i3?+eA4~c?z7F8v&@4qx+_WWi%VMPF?-N>kU|tPVUBNYEyJFCk+Jpc;uiMif8sY$P zmX}+_nDHzPeAoN}0xx+pER^dK{HfY~12vI;0EEJ|B6=0Np%f2#jPjbty7h+QsCu&HmkDgTve} z(z!n7`vD61);6@fqaSeu6pQ8(pOJ)8nA`F7Q7Y=2UOcXWP1gI#&nRxpI1j8c3AGT& zp(xGFDkiV=w;ppW0{_bh^7V_zENl0mlx1zsv-nG=*!^(%zHkG;(D(ABY-8d-C-W93-~L? zeBk=YTxo8WUq7CVn_VC`oG&tCg&lO5A?7#h4m~`g@Yi_0^KdeU!0|obp8zl0r26N)o$9;22-7$%FYDb~lC1DM@PtlE`tot*WkKZhH)K zp>=3w<4CmVPU-nQ{?+YcV<93_L>UDbFUiJ%nM1Cc-5vm1+>%!@iWlorGMRl+%Exc136U35ZKMra z!ODe%RE}IIn+zTt+ZuSsU?345-#=21tcKkEbK* zTjAnV1~@R?HT{f|WfZQ;Eho;?{XhtstT!%KQ+h8Z=}(Ww<1+oB@t200u%$#51nYUK zeR)07cmfZ#sOU#&jW>zmq9kD~IaIRL01U$YYWws>*er6XaBmH>ViM1k)_(2 z63B(kiiwGdNANkD-!N~&>U_Cg^*_?l?TV6rCf zN1x1NRB9gYMpKg>NVa|RmV*){bJvl#4f!KF6&xdb%Jk@^3l>c;jDgME5$?sh#ovA? z+BESZ%Qu z>?>rDhO7Tr1>fkZ$+VO7^f~(5;3Ad5titC-m0`yCwpPynC`NVH=OHwjw}v3@&SDH4 z^uXqXG{XxMsy))$ae?%3oXx2}3rz)%s7D<$ihiGiRS^3i;at|cpHiI}H53&~fvcHq z?DVGY=ii#V+$E(UyWb*I$G==RXJf2DXB0ULL7@%6;{LHz}8&usjH9o7bhr7cr`N-ny4(oA!sj1);w;qi~GLP}ZA&)Qu&nCVm~^;?ae>E%z;l{Uj5>tXsep3KmwKn|iNQBeo& z)d9wzs{Dv8j{xNb+c{J-J{WOY7<|li?a<~*kfsfoTtf2D*wjzmnA1of*=If<`};A& z$H$|d;1xQ`$W$MH>0;lAY2889lD)UD2^kXMIm1XL=%__~%hhGUx0YAY9QpoXG{T?p z-YjvJQy5$S1QwqJ9~(GlVs4#v34v9oS}5N&>P}g7n358(gwMsm?M#Mr)-b6!93dow zt;y;Tq=+lImI^{-y9vi24%m1kb{hdnFR*O?(XGJ&>S;0vXsV-LJMh*h5sr`Vyg6=C zmCntN9_Ih!zr0T^_$pHu)7}(Ztwn%cDh{){aSx&zL99ZTm^79GsLh`xjJ(hx+UYX_ zwg;-QvAaAq!0^N}Jc0Ca0;$C?T_BhQ&5?MSyv^{=-`Q_`nri3NG>~e@K5f>nYl_f0 zffTBOl@Uy#HjlFJuylD`1j2Xr^x3w_K9?GyYEBs)>4s$`%|<~&gg}NVsw%$AeM-%s zWXKh(?{(L{)Xm~qxNnCe*Jrq44t(%Te>lYe%U38z_N=sp)9}vG5J^JB26@&YPlC zO1PL(JC1b2<;~%3v6SUnZj-ixDf%Ms#goXk>@vLz89I3rErM zH2rmpm=UuQmZl&t^HJlzr+4q=JM{`>xJZpwF zzMsK}@XF?Ni05Y=pMw)UpobwI44Xo%4G&GxTcRi zg*4^-8ouE-2azTJqfBd;9iA7u}7QN?&Yj;&~FF~~>M{T~HRY+`Tz<6jhTl}!mEc6?`ggf`RTdE?# z4hlskLxavGnffq|*V-SMi35UEs3C2VTs#yb=YyWFvRxht3Y_>2nQ__RA2`4(H=}-t zjdu&@p2_m>R&MQyooEEuqcBVn8_H!-5oS8AF9|OI$3tAI+LF^A_yh`-6KWms0edIa z;re~mdVW}%4nsMeU?24XFi%}NGglU+@t6Me3%|kyxy=-fWU35b7VrW%JClZCGIzi2 zui~<_YU8?7E5^P-Z^T2-8=rf^re)c`XJmQRdd)ER43AvrlAAs8~l5r-&1GPgC zB@0?i`VO=DIOz>ulUFm~4>fsd0%j3wBOoP0@{vYkS5E%JtF$DRp^!nav!8koo7oX2 ztevKS6B)OkwCs~T*b(i-%1u14qygh4HM7SzHO%uiqZT(IYN=VG;=__kWB%OEs^qqP zOj_mn*o}}!?xV350avJs&zqk&!*s`tm(~zn5m5C@EA1dZ zOoGi`x?H^14Q6v{9SKi0K!V4msh)XMPIX)59VvBKMU&sUp|4p3bHP!l3m^nG9FC){UOmbdWZwu%F4(j2o==ky$ws#ubk-KGS#<^?x&^fIK_R#CD6!e z_zp#H;_voD{=AV}*y&2S^P?Qc6rUybf(kPJI`O?C)K)ml$kmxo#uZvu$JTtx|x-1 zgn%gb1GQOX8aV|pq;eKn4s;dxUX=S0jAh9DaA*JzS5UxLeg;w$C3PsH#?ytOW*1^2 zH3jLVU<3Q^7Ca6JE+}j#^oNvS7^}Q)X)nIhE(%rCYBFCBuk-ewp}+hrXJo<=RHyHi z`DW7l!yni#%@e{EJnp}VZ?SIkl%k$FAQW!UU*ngo-DGdn+v_kQrj+G zX@hqIK}9TYcO5EQ{_<=yz>Aa@vy0oxc1|h20k=OJShi^%skV&0jp*4#-9Gw72fFSp`GC1u^U zv4k;HPi)aa&wfGDa~N8nqWl+RWmr4-nB_O!&?;}3{KGOBlN5(&5%3HIHbMN# zveGc(Nc!3#L>G#y1ra_l8qMW4NXBM(pMNJG69UpezhJ}f3OC;QsrXurub9UW;`nV1 z4Z7!1@)Uc>)Ts#srSZv05oGQn(VfabMAcxb$TzAsEf(&b_1-G9^4qQesA$&naEMQ^ z6T6=F@3%4(TsjN0aldu|>Wg^}mo5=3JC&ZMxd6+qrmx5lp&uWZE)Dtxxvv4UA4DFe4ngqK4lh10>Pq{$uNmd3z}B$;h-%s#;vQ+9xbwHRgSu zJIQv-j9xTqvBnk;1L(WCDZNgGC$QrxOhKewEEHVh^EL7ywsCFvOtzsy zI3INxr9Ccs>DS05fqP`8$mPVNLIN=!%0?0jQq?mhdj=0NrlBmwT=49@m+eVz-!hH6 zlc=U^59gaRFxzb?*zQ6kPlK<7ue{MIvp8q{ApS3y_m5RPD1;ziHz-sJ&Cj04;%Lvm zA1*iUeFN~qm(4a1^nDnmTO$RdTO_Uh1~yH44ACmyQj&;K)N6e*)mDG(V5# ziJdq>3ZX#0t4%v5F3sTLIcuP84xKas%#U@#$wn!uApkM(etbRp-W&g`J=Qkz^TBLm zEq|=1C(5#lG<g}T3_rHTL);C4l5h?c`~qF9a)E7mV))t~ExjWg7D?w!eW1f= zwGA}@Wqd57xvl;Zk#0V{nbrX&Yehrw9%mh1vL7t9-d7jwzJnVy&lPC$Do za8d2TyG}>3GG4v0HGuI?X17Q`4JcJMLm~0GaXe0OCL+Iq9v<>dCzr9zs8D5az<{6> z3T4#ni=RkC74v2Zc&8?6W!9*TUQa4cUzSYN>7k zKNN>svajhH&02Ez!h|k@)0?wyujPDktATR}&7zM#mMAzG-n#xzZG^Dlzr!}7a$>c( zGl|4LXOLyLOhkU`L7`>j0SD?>)D5L7|TA)9XAx)u+XZfsBv zY0HJOk%EiC2$#~-E0A^!p?fyYRI_B9a>blLzSoj?AOM%`GjXC25y^Z2g5LHq(I$4g zu^9AfD~9H+ejxRh*T7zlQ9sy8m>PIdG8XPmA?^_^vvH+uS_hS_xU9(P#g5=SQzg6* zwP4Vux_hGFOf^~LsR>wsH>(lX%K8ZdF}?Fv%U0my{+BXiS7m_Hz$6vD@wNBz*Gdq` zprb=bSpbg@x#P>GKDW9Ya<-z_LmJ&Pb?^5>#K5$sw*yjG2Ou!hqbYR0>|YNZPpi~1 zt+3;YgoyTYGY1~1pG7x!U7$X&uD5evh<<$9yHEkrHgo@AHD|D&w$0$ur&PmChq|3R_SDQ9R0kFkkIdQp5pE66=~@ z*C63BW}kQkzHsEt6jt_z_srjV@p1xPoDAI_;9}@Ssi`S>L-fvhS&SXT=}%(pj-`tU z1!`G@6*(8WXs8)!jtPwN_)-Q+U!ex7HEiP&>R2QmEt1+`7IiP_046;>CjNh{guAI` zQOf%f+&;iBu7o7LA~fi*d$O3GeeCb~wsan)2_kvj)>J+ose{@*tFe#^M(W^UHC&z3 zoC2Zp^wK?9X-6C6oZ=h!5v#78u&>=X2umN~x)t@$^%vv*mQ}R(-d>RV!Dj168%~Rg zAQmrOyg{jkFJ3Z;mAm@Ih7T${m&$%mW$D>=ihX?(N4unAsU9-Q3HHA;OSEkX_0|-3c&_LD+N5H~KBL&X*pM;Db={E} zXaf^bk(e#$R7k{tJ7Su~(O<(VZpqEkHZaUgLOu59p|gdQ*ZH*}V@{HG`=YgNN_5*m zYD@8zp*b_sh5K;>$4~74e~j|4*T&N{KCKsd-)Z{V?EFK#$g7>?XvRD_Z}MApDqB6E)k6{Sjk{vt zzq`_f@dS<>Nt{=fw?byk(8d3JKp#>Yfv(IjQ`EiC7)kTr! zQupqTAYw}0((De_M_OZB6ol^D40PviN>kkbelSV>G9Kt0N{;#6#VYG09-c*J{!wrq z9%Prx!^qQ1ZA#zz&-Eoa*-^#BMmAvx8Iy7iS6Tc}eE0b<1y{h8v$-~y%Yw>OO?a3A zB>kwnJQ}F^puOQr0{du4 zJ5F2+zo8`-AS8GPuY)+st58KLRgwhH6q$`oaSe5_s&!J{OU6R^C^(d*=k8c zx-zuglU2UL>IbR27&k(O%;w4)v<++OY8IoQel->rGy!y7KU?v*=q)21pZeAOf0x)p@`wf>__SdApUAhT$;tw&=9P| zU=U|lal57fOy%%-U>9e_^9Oeo{vg?{u8O`}B9vrwA3m$|-Kn7@(N7EA4#6F;o|f1| zTKqfXsoAoLz39zef?6w0#uoAEb#KTTZh}6 zWfZ{ggJ}6anOKLBVWbpsRmS=mlj(Hz$4x~3qQo?qYCUw?$qt$c6-(CZ^3^zi4^D)mP6skPs%sxBH&p)d@Vz+Dv8t!0qS^0M*mw^_h$S{}iK<^>I+3JezA&tK6!$|4Bv zXT7#*G-y3m%vUyjPONAg&C~?f8X7+dl5abn3|)J>MV`5#K$j^=FYLDgmZYzGGmuP2 zjX_@1e3s}fedyp~+k>gtSArQ*>V6dXpMV0})$A4m*2)UjkY_KK(-Ql|yP8FfyVAuv z#Lx)L86Bc(d}knEsggr7{gp9<=N7_7&`!?%t7c|o?Y9o*({NKgFfQE8McuTjAhtYK z1zrfxvQBeQu~?_jC)4CQ;lg+DakD2W~JuSGA~9=0{th)9u>B z%`n!G+hC~CRM67?yInQ?4$Op1GS>1fIfq^MgpV9Jmer^Y&mx?hQD_1SJoPI7!K+E9 zhi(pM$tgVdll8o1uSTEDqmRsBRvwLR!b&0vE8b^PmGjtJwWzt0s=cQLl;tzXb36b| zOv=~{17`Fp#{Uo6u}67mt!G#G_$jD94{ckD+7VkOsIrZ5Y}LPWV9NaqI#W7~JL`U8r=td(4yWQ=+rozT6oEDVV1uKz68tl3CH<^Y(jrEyAN^+ULm`FO z5ZK#vJx>eD`e1{!a@l_*VXGc6ia+MnXhE@Tsh5y^wXc%-LssxDi6S&paUC9M*KTD9 zM}|EH=q~5s>K($LxNiAX%@pYEy;4wwix^XQ7g6MzIsZ&hLLYn7B$s}4A*n42ytftki{^p66D&UnS0 zK8oofZ&|F>(`zz0+`*$jgkA(Gf`tdQU-HXX8uMTHIM{hNgG|wiO_%n;)vE`2K1f`)1&1D zsaxKh*A;0ILff?d-g*;*N*v{5t+2Cl9CYk={>&M0E%feVfcSF7K`|*P6{rW{l zds=r@bVpA*PtK7^2`CdI6no?BUS4UZ3C#>VT)dxy^i=h`jK-u&q>BAhO|>H1#BtjB z89}%}vAyJZPEyp{I0;d-@21Kub9}tkdBZL+Xq{BjDzNl=0Jo8rY4C`x3tuA+2mUij zJ~}SukzCl@NscCk)q{7Mr&jJ8qpE!*t`HaIGw{`ob?y*z#sy-D&o~7_zk1dz`VU~% z@9P+I9Dh6d>^6~h?d`*2crHs+i_&%>^fWAuxd78kykbK4U!`NmSL1Wprp2}KCB}uMvPCtZ=FpVG`HXfJB8?2) z`XQkqbIN0-3qx@{>6dKLE~lfo9sAV6Ep!v-JpvV_UE2iKt|d_{nD%7Ac7j!UOYy!2 zzP5eHx>l;)lBlwCqw6O_%$0b{1}!V?kQ#9TNag<1-0%n4&FF9g*1(gb1E#8Q6b?nv z2}cTW13HayMR>%_W$;&qiO4p()aUsfXh_PI6RO5WA#Oe9rPM<1x%t@yePkB(&F`;^ z^?Da) zmKq#&n!x?+45fb|j-e_oC^&^%a4xcX&0EK`Y6IebS=*-{F!9^OkC_uAiF| z-sCI&Kw2dPsEoe~A`V%V8lQ4fdjCQmgj0WOP?h7rIpqkXB$P2F+9>+#a#|9dvb!OSJu0M0A0(y0_|fW7c%6@X)w}1eX*v&0ELtK*h1J-6tO3zxtM0evvb`tcayh!^SCCBANG(CS)k5P>W_;v&a4rLf za*go-IRau$FFU+`8l0g-!cChFIU;wei?wf)KyGzib)*l6Mmb5}QF#=MGQ3AWuB)8b z;lnh3>rKmaqDcr2FPu_!dLW$iuf1L8pCwjSoN5^JudgY~-0U7Dvk(+{S3%`xFKL3Z zTp2(|#1fpu6A(EhE)P`$E5?#-XtMiZeJCwX-;vVh0$K zj-x-7LQv5p7&by!Fg$D-l*q(&HfL}6>Y^4+cnMT`Y`f!VMR3XyOK64D-bZCXdC}C- zVp$Oewhp@{tE{8**>l5gb)2-Npu8O}1&-{ShW@EJE3}y5i}zJa^D{3TA^kuyhaw_6 zr1@-UTY2UGiA@$iC40t&dGFR7y7*DzgkXU1U8C|%=qv0^c_FK+hyUqEI~^6ZcqNJq ze2|9;h;#f-F4uMS zFpH9t?ya{%;-XJ2GvStL-u9FgH11BB9w%KEw@T(lj`XY!x?rrCXYn#l!f!65o^;QQ zi{tJDoo!}xK_CH^>DOx<9WY9l8lvovRu_6c+{i_Y!xZVQMpBA1Oq;$osyEynXgO{g+H_iTM6C z_jrA)|1tYxm%kH4trEIbz5;mYA)5|mA#TqwjUkfbV4??fhiL7f-1xu_kU|`%FQV3yhqgArotDG>+Y;*1gGpTl`>6*Y61XDXo^jtkZ_+p>|nc@avB>qog z4i0aR6U`^bVP~5x;-ZZ@js5bOL8FRT_dAy5b^g=HY{Yq60@#HF*C9-oeY15!jVF@v zW$lK8qdsFKK5ZyzjQSuaa;!Y}U&jtNve70isn#*I-KFTouC!&@D=R&9T)(Eg zVOORP;{#6gIr??6h8HY+;Utv2SvMCFpGTDD^N_aogWe9STg_CV527q27=}T1bF00_ z0+2F<&1|O^oc^QbP^Zq@N*p;Xh8n^`k+;Bd8`&GPNK$Mi!nR;i!5Lb`&+Ws}m;r^7 zo%iT__YvD2{~!Ph)FWmeS-Pw^A$9dufl&lE$@8`V4(#(g>*1cF<0c|j4+L-}w)Y+h z0tFF8GZH^uY%X+s+m%ELaQbwG*&#mpl7w4<)kp)8X#(;OafhZ=xiBytv9q8XS|}K% zDd=3#%#!w2_2GGcWyzW@cY78JzA@z;<=ebDn`uGnn`kRP;21(!(>!*0+d*8*qZYY` zYW8Pn5n@2Phy-a*c|hg1i@dO}+4T-`$dI)UHF@ea%NCtN+Dy59Lw7WI z(Y0yN&B&Hc-Kj&g{aG+Vih`44!5ESJ?C@&2>H=b_L0Q{?@zc*Apo{e{dW)X)B&DkL zZ(~>`*G+y4M;RY<4DsDj|DI?4f8yikscLaew&@%_732k34i3#&LLobWki_sGFbIPZ z-B%UVRA(SO+Tfee2-2b4p(0?105x5&3C#V;C0MD1qrscnZ93ueT=JJ|@HZkjQNT$@ zc>0wnZI@2{O^u9#K>Ds@mTdSL56H*I*iY6+0izg#X|)op?NVMXw2#5ToN}}8i^>}7 zBHPuvhs@mnQ5T040KnRk%-1#OF9ld`$JPHATqnJ{#rdwS^rl}pTqQ-}7GyN}L;evT zbd`?|50LqT7VRo0Sb*DTE)WvHOZnaL-0b*uhr8Y762`}1Q-7pUpX3VIz}X#l4>)lq z;Fl;+55LasxqmY=fUg1c69JR?%#J7hW!(^U+F0je8*eO3*6Jg0F{2CmXKEe1Pr!L{ z2e^Ml2*9-e=s%%#aB(Wr{lGL{+r#w|mF!+?qrOs~;HV|sT)mAsXF|WOxa&``ZNE00 zo#3v5yU1{rQcH+|3GT?QtcPR2EBUW3Z zl;33gC@Ng~C|(btU$@ps>4OwoH<@N_EjICJ%dCgL&hUxXBIDWj11#L$2Bp39K;^1V z{(!IJ<0D1AS7rd$s^N!<&Qt^aM1zDsgjkYDtjKyc7I){D|K1A=rE4#9u2MrQ0N8L zjD0o~`;AZN8h?v`NVBEfy+(WtlbtjmkNsMbz0wc5E57It29bG)r(C=a4RGEm4e?3k zsIC7{8WQ_Er;gr3435>q5@-)O=4e4d$4W3>5u#^~?I)pnX-TEo)xd9itsO}S7 zAQc;@uX_FAYe)c>hBKxcu}|=Db7eFLR1)#Ey35qDSM*qXSh+eyB9#n(ma#@jDJK?b z5lK@n1KH~8%pDXRtA&e2)9QTjhLbLfh}0mkq^NIf?E*{25#O}R)x)9UVzcwT->bCk z@1T-H{!nzBnZl(0BYWNAY1$gP5R9H7(sQr3^COm4avm`;Et`Pdr@2US&kgK z4A^cYfBjvU+Ac!oOrOLhk;s>6zinq=l<`0Tk{leQ`b8RExRIfKCW0BAurza8Wd)|d8j zURcDFOQ~Udssnwc*rp(HZBrle%vxYsi%2P*-z6kx*438G5`Y~6O;o#yHz?RxHaF#H zEPb9miFM=ChwXG?R)x-}=s1wrs?wtWrkp$fDTP}A-&sgP6*euFqRlxZne1LE-VrQ0 zho}JHUUx(Lz}S{gmBc4kBq)u@^W~R`kKGyi{p&vApaVnCCC9k2K$0YxB?Vtdvb&x) zO>}o28FP47A|Z2z)A``3_?B7f1g36eL}iDW|2#o7#Hw}hz`UShjqEt*AuB7qun0#R zVR>-Rd=i!C4?F)gzZV-5a7xMO8Q1e|D}0xQbt?0Q7S}Ay!adMjcNoUVMeuJ(mezs? zGun1=nR1PJrqvyp+GnR@KiBDuc$~q=6FLyaPEMzd;bh##>?tb(`;3d&C|P_DwIc}I zn7@M(WnJIDS$E2o*E;5NPymJ2N7ZiPJoJYrPF;#sfWoxXr>t^9V25~9$AlwyWJkC; zE3`)l-iT+J3}b&Db2I?{4k7T1R*7YydsBj&MlgYnS!rN9EhoZ0c)&;=W2;MJ-i@UB z7@OTUuD^=JL2FX9>or92()&QdV|N^V6e?DVW5bZYd{+d6$&8<#b$pe&M+VrL_@vWA zS`{TjE+mHUPb|1P>}ilCbaw{Q$uj5Ast?g8|^<}Q7zv(=EynHx4#g5V`F6YvEAq~p}aL5zO@DCksA zkWBLS&iWG29F@GD+4s88Bq~$ezK)R7=0dvom*EKXDgI=P9-LkJf|*=yvS4SS<%TZW zg4QdSGqHq`=eH>0vTdGDwJs2YXaJ3BGAsp?v@dbi(L+fH-JjiQ?%5`YR;A05FkFL= z_;_y(F|(BXqHr)W-%t`pD4DD0i*tfmCHnKx-%y$@IP#NtFUs6~hMNQh*uCF}KZ32n zbqX+Ro2L4yu>$zmiZSvlnRT{8b+$S{-xjsU;-P=9SO%Ys$hEzct(61Iy@t%TVdF^C zQ|q(TlgXqs~2ZTa38!Cuq0aST7JPSFfAlE`ebw9J;{S1_IGp=bmVat+k zf(#7bGr>Bm)!kItGdbr)-)={gRy)U$vVCjFt~LZxSidkXb?c&e-rT#&T_>w9TgYKV z7BZ+FFqT3^Vbrnt=QS0}1hG>R&KqTl_bkSL8KTBA$O+1MOngZjh5*18F4NO@NZ3y) zO?J~#s8=@=@DdE$wcy6iOh?8(@`rIq*l}wqbo7&?zZ(7l!wYvstm*>hyknG&qW*Ko zP0}vH>efD2=!);2q;aBdjMX*cOx|J)Phn zCn#>_b=VaO5ntFj;IK6Vj;T{LZBLa_nedmaCMjzUHL~c^)*PMZqznR)57{G^;cM(E zT`dhTR82~1k~2t*+d(-0#xC1WZ8`Oyv>{q}UQJ%E9j-0vqWIKRGc#EIH~n29dfXF@ zcGC*ozV);c2907YS`LaReM1wJ%#U89^=%K7Oiv7M5LgW8GSNvCNro{ma`Mz)Zgc(9DcPwj0W!ywezxZpl# zsh44o*Wx6!_dJ3Nm16BaXqIm=?azZz2-Wu7CXxk*a@|^DmYY_tQxma4K3{{@sKyDl z_Bkn(S`H>aI40bF19$ic0md&NX`=Nza*hOMj(z@3Eu38i-x~Hcs3;OWzw|0Y&1p;D zCcf7a15pkXkYFDO6(PO4#Qy*7ZrHsN+zxHD*eiOUR7W1yGKVxj;&w13auaZm=tWkM zV4{Mby4eoT;g}=nkW&H~``_sL4$-oqv_Z}QwuTmpivj!6pVE@L!^d<6mM)9otdF+H z2N{ZZeR`r|P30KWcU?;L^QKnYfUT;YzsFI|sK_s`bZlfB^AGl54}Ryo7j+)A3XuG< z2+o#+Wwv4c5^zR;{zbnIM~HeWaQi_tz%gknsS1C&*={gV=IE1su>Tl^QlW(>?tsU}fh zcg!2)Q|B=)@-R=`Tm%vAi|X6L%h;yByr>!|`P!n2`HQiFSKzO&j6UQwF|A_L97 z6IO2T+*7zM-$2TaS)w`>Al(N~G4~;48eM*O*c$6FyVU$QXsW&AqQVWQLT&d75YJM?PvaXZRNAjD$^fB)-}cJquD3aF;7Z>8lmnY0=i+zV>mzRyMC9)X0XB6O)Y|7 zJ6oIi${#!lZk*$XM)WY}gtnYRmR+F^E7^I&XHM$VE;onOXM$IrFIz-K4Old~5~8rMjbsCMPzN2EOr=KrjYf4dahYR*H$9V2u5$CV z$Ce&Z%eqo{CxgxFmr*cu!UQtQ$j>MyLqHWX1hoNtp0)a92b=(NCl+H@_27j*or zZ^}LGXIJ6!xBs{PpSip}XquxO;nWD+Li%}rEXk4?bZL)NS>2Gc<#wTRgp@0@nZ^Y{ zBJC!s;nT#ILi_@417IXb$;L4@#;P@i&TF!Xm8At}z9hc!&pD%Bs zmNQCFNft9^yO4gvAR#Z8^tb?)z~<;$i@g~x{eQubz;!6^*r(AR*t07EQi31z?(|3o z*9fpNR5L0e1LJdhnmj6(9`{&;tQ(0#?ealt{$@z?cx&vm7~H5Hwx%iyejOO%PCF8n zg3R=L8;t%a_u7U)N+YCCZNRr4lB*R%*w|ow*q6oCP-PTq+tSvU=qy6qcW3GyiFkLJ z&QxMOJEe*OK!YmG_r=fA=jcF-+8Y{tV;gO|rp?#_t2$(vaO#-J1SHzA`0SLNE3;5i zv3;mazU1C>#{%OnG?eN|W33viXjn>sez8Tp^2ROLr0F)*VbK9i;VQ;sy~BEfTotkh zVJrd?5VtP)as!#27@UbhvjQStpNgV7;Vo1xH6^1Sud*F|#sS(H@xiufMAiO#8X!+=$dS)9P z$^<4w%?+X)^o}Hnc!U_6)(7nG&~p#Bk`MS1hA#J|_2UUee|i1Sj+@@K%d}xhlme;J|_bT?{i;!+##JJ4f zC2SY6jM=-04kZWFD7>YtLKiy@8+EeS+|5W+B($gvD4AHL()XBQhZ$b5O%N?I+(i*P z;ar^^H?wUt%YFzo2lkxGT?h1j31Ax!ou<)X7`_BY-bHrab%CDf>Mz}mb989NA-gFw ztb7b3`r(luAZ`Sqq6eh_5O$bhXZ=#W*ko4t;U%(mj0>hKNk6rt-vk8jdF( z5eq~f>FZsXBZBrjV=!16EyPT#NMU!L0P@He<afAfk-nCneTZRk z4*&qf7vv${Ta<*Q+bW0XzE9e$tN}0q%QuuX2Z)H90doEqH6XuZpOxXB4(}y>_lwjd z)$Wv{hOiN-@8?(DepSyc1mu4}?Q_|rs8ys>kxEABq z&qS$~eg!roz>trf8Locr8)_7S5jZ@-RU8ERTCq4)7IIYgm0wlBAEMUaPl5$tqExD7 zhyb)Y#Fg${YWb) ztYtMvDA3@@!aUg5T#5f7^#G@4Ff*AS&f6o!<;N$8 z?;NzLFJ*q4A7(sH_Xmf;Z3Wb_g^;V%@+L+-&Ow)L)NhsIKGC;XMULbUJ(WWCa3Zyq^Jw+85P6>QXNd?d&{>-21+{Z`tPAf zWb>lg?*?Z-=TxR&*ytd?7y$1@A#c)Xs&yMI&GxZGEeQdOy6>llMl$IhHb;FUUVN=u(KCq<{SbL4Enqh6J^^V(&WljH||v4bEJY zaUB3-WD`CTOVEc#n$dxv{;}r2{HLMCwS$k#7 z6T8QcD5*4YB&#dyM}zBy*92+Al5(+dJ#(azWdhsK`#J81C)QwEZ$Y>D+UEhI(M*S* zc$mO%S*SOMmGIxYE(JJ;s0m-a;J7=I}#lQ!6FLULM8K-%`pb`chJyy{Au7f4!l z5RO8as(i!)Ik+Uj8@5@~LT$Q;ZQl1IR5w0F_jtp_Szv_|#U`QwN4S2Plkdm@_?5l8 ztGnOEGH2mhIJ>g0V%PgMZ>o8B87zhLs6a5fVR^8$4N&NORW?hANZGqcwZBy5h0ftt z1!vTo-U>_P0w+4XyJdi4V&-TFt!M0xnb5PB2}hqpr_$`%iTbY9*H;7bU_r#!#l!;wSO0$lokz}LS30r?fMa{k#>Yd>w75$gkg78W$pUnb>oK*I3nn|KlOa}Cc zoZFxkAb7&nU`L?P11Mp_ehWnE_br!@E7I?3jnd(bi!Mes>PH?|;0KNjAXfSU$8php zK$r*#R$(`pyhk7n23BF_!h4wmr8KXvzb&Awy}KhpG1e1M;d17f&zk6bS%nZgcbSI+C9F>#695d}>P>z4&0(gFS18HGR%#V2y?(z-T3NjC#NpIZ#ty*+E16 zh$E({qT5i3M?yKFZvLv3GQ73%Dtutbp~o}~K=y7*;fmhn(X8TTuMPkp#XAMt9820L6PBlAs51H=}CH!XFxQLr`~lrBT{J zaBVpPMRzAzHyI;JDRN$jY_3XXG?v-?zz>0tFgTIrk0F-53JFxU#=o|h0=m|+Lzh$E zBx0v5y!>Wd7Ew*wa;fn|bM65zf5oTf_uQ>#DFkR;M_OsUU}N;ZwS8`z!A1?@3eEqy zY1oDyh1FWt)?X&%O&e8M>*X~J!E5=iZ$s;I)mtI=_Zj{{E$rRMQU5!_*AX zSkBk*y`RC=U<|R(FfSKZMJ2Uz=wGb&SQ;fP7OSeL zcW!cS*6t9OuiFSy?Iky$Peo;9v^mEq(DqBbj=&)%D zC;&_O*vh9&t~(GxE-1%uQwDST^o>eSfQP20tK{AuV!Z~9w|ZQaF5j!g!z&^FcS?fA zm3jJ*qigHg_?-vD)EY`VgLTg`hf?u3tVmb^m#>Vx&cEEO4u%b{Al+)kqMYG5)^bNA zX=JXo^=c-aCMND1t8NcK8&M~w2%y-pU(4-)U32p;9L+j^@)D6*ZZDQYCIa2aw0bt} z(a|0m5pEN_@WcKdzzo1>IRH+Qybvu&sE{?L-!HvJ_nROAaooDX!d?~x@}~jqiS{HN z$woCBwcC44MN&nrYjqC~p``Q;!RW|+%nn!zqtGlytD}`R-p_T_xc3yX0|eDNn*&N6 zVao)Q+FWg}TH&-B$|VbC@*C#4UW$@--WR#+ER4&>pSv|124moIl(~=>l;hbVOjUZV zYZS)~I&~=k7y#L{G2G2feaM06rYirVoGx}EwOVq%G^ z5BRyiR?AE^d-xJn*NtoLCyRlUyUlE(0%6(&8|cKBe`+o!PDkO{-^xeKqMA^GSFy83 z3g|!#?%D#7jp7!9UlJ_bE!Ei4fz}bl2>t?;pTZFDo~>S-KiDvxUA5Bgy$z0fs*pqU z2x`WesgXzw?GBj3SF%Hai;ijC)Q1)UZk==FnK2R6=yqv1vtmM5w%$P4wQiH+_NQK3 zcO627oauE;$*8zOHod6pk5%0#J8nqrNv8UM8r|`LX*|EYqBK3nb%$^^Y>b;(tjm{g z0+8=1HjC7k7a&St64U8_Ih6Hzs>ZzN2kp{YmKH|4wf%OE)Em<8mJ33a>4nQ?!=6ri zTD>mpJ2ZQ-In|L-C9bXq<=%#CzQ=S~`)HeVe0b&E8lKm9>EOH6z(l9BlMPye$mRVQ z#YOFzI{Uc1R~Zo&)0u*i`WYEAgIXu*YwvBcX=$>#W2AlI`;1+V_6mV@Fghm>h7QCLx&vJaCfhp)iPV{e^vrcRP!Q6ufL0;oYsC0 zsK4!)j7LLOFVitP!V0jtpXPCN%Mnt=m5>VJ7&!dJ7)I#( zf>d*@)YcF=@Ot;Ae`2uC=_2mG68nU{%mJx0Gl>~5CFH~B`Gs9Yo^bcCA^8&2CjX$V zu$^<1$O9@vg1m@Q1lHUvQt0->_j_`YkKJM{K_?CP^K>O@z7X;{7`iYW+xjG z88%90NNdUa9j_qNit~`5#~i`b)cZNioIr$3wm~e;s2BjtQux@ooc{T$3T+&_HcbmY zzU=2&xsa>8)HHAh{cUF^<^KcNc)eB@hWhTeRf@!V5=g!q5DI`qP?7c3QgM1(!yZGH zCO*QVCkU$0`+n*lYNc7T=9T6eHTA1B%7%L z8GrX{gnpn*IoMNrh72Rrh#zHzrfo;)Z35+5jZ@H_-u<@ADr0VOT3q7f3w;Hsn98VZ zyfxz@69bL+tcpf4C#|ZD{_YjQH&V(HO%rBF^s>C`JOJ&Jwb2=wK&YxRX2|7cOX%jD;tfdbL^JwA^ z=5#zg$cb8SuTd5*1-kq*9FH9&ufqrEOplwk<$I2c6({#>WzHefK{(l@B!#?3`&`xh z<5WE-AVc~&G~iI3Xv+Z~x_8&?b&;+qm=jG(M%(ViO24G5x9!c$^-sv+r8<5Jm!Z@i z&gLf``rHSegM7;$N<fqjevH;Fs|_Iie#jW`Ci7v@v^BpIwzEJdy9XJG6ot* zN9-q@t|Z##*~=ITJ*lu(b|kWRRxW8%Dke^fx?wylA>sBxW!LK;Ya+ssw>1l41?IW( zjOMDKi~Nt;^w#1zz!HMSYC2ObK{x|(%4cLJ)p$c9rfD`viZiB8+kM(^tT9!R)}u_z z0RmE;{QmLuNK1`NP?)5jo=+c}(h|F^_XH;c2Mpgw2tVM0uLwK@Ed}G~tn43KC&q?& zvqeC8YqhU8Nimf7yHdN3jiM*(NaZsa84c)sJT09fKq41Hd(JGv zS$?wH{zx7ujcM@|j;#->9EdU`1Px{a{YY8#Kv3P30MbU!$z$Ic!*av{d9kgCd%sEt znlRS>q8-I^XcZoXX!%7Q=E~ddm^Q3xMSa8Bvaje2Rz0Mks=1X7r?SzpY`}2G=eeA^ z?a}sWPXD9s{LKZ2I;XmT7N)jTeNDv`>C9X~mSe6E?dA16`}B?Kuj87jP%%Nscrm|f zgeG_0EoPLt!G+Sx+GGmz_H+~o4QG*`6R}(yw^ELc6GY+|e^wj1mc*J$o!V+8LF07j zkvySo@lFNXT4+zdx*B((HrBClI@;PKR)qWs4jkF9irL1@4AW%?+3FZRV1_9FYEODI z;J@Gjy5M%gKcJ=Alh}=$&gJ+YfC*BTESI>`*jYce8aof&sSfvc8j_27tS&pp)2qZY z(CY|rw2SH0IGUFZ`Vzg8^%ORqSK%{wfhvsOr|7yK8kdb-PyysQTMf!|v^32t76Bk} zh;sje1^l3%qotbJg6PHE}65*BpZPAP?{9cxz19BT}Htn1Iz;j;su7xB(3u~x`O@<5Ev<< zilCh+2DL0LCwxjJR{YdtDyiPxpFe5{0$U1gquic+-Aa`3ZM|Ptc7b(_PiZA`S*dCN_DVvVhlMI}6migmteMNrBvjOUKwS~T00FZF(pt^F!F;}lKzRhjI~mf$t$*#< zbw+wMGN&d*Dtd*h<3~)&`45FAaHX4T%?S%I(^s2knqBi}#hx)(LL|4P((q(UPh_k@XwVOR*md^?*P7VgW`7}`W`li;f1g483p=Hu`b(t0 zZ5mb+G73k?Xf1wtCN$DM1 znHnF%#s~SNAA-|~w|b!r1)b_L&+2H}Y8QIkchpTcnUnNsaT>V~d-X>ALJq+=5!!o* zL%N(FfsK6x9LICOEZ60Jup~nh*}@ToS)wbMc-Up%77~ZY;ZYFdXr+9{f28<1VIaUb z=z@(UmS1}Cxz9~}4;PH`p+5#Jk)g#`72O`A>0J`CLCg!2SnS4uHIB*R8zW;Vm%8*w zJ`SPV2wZ55cN!gbBalb19D4{kYAz%dm@ApR2M_=`xVQB=3uZ*bpq{HtD$JqkJU{=i z^CxcP>tT)E{CC>FcOBBzBwV(KFUVVh6LH<`tiNPR*CYoeB>*2l;J?{s1t)TLO zQFjAS08E?pe;P+A3|L1RdzD=2|LO!+DmD)mlkOS^aK9xs_=`~~!m1hs_|Z@`Oic9J zy~#Ln52>j@VX^}E4sFR4wD25G2(Ntud5o1vBHeeW`QBTotWinTnZ&3zgVFtBV*i~@ z2KXJ3e-1bqYvQ4W&HrmW)Iy6?T%17-wPgYUn?Vy%*w5jfSAjorU5Z)&98qJ$#4FHO z+bk#XX^G{Cy|q?~xG>rRC!4z#hgdSy6l5;8!q`9vbn#woS&@MbuRM><0~^=$-@9!IFT`A-T6D(yc)(CB)uO2`V5`mk2RmtTI{*q<(C1HC1Kg|q>=u)QaSSF2| zs9iXeM%d<>=FQl*FTZn0-s3>P_>e?3oEc@Bn3Ka(PEt91ZUWU~wA3(MTe{XeiTL2s z2GF4Cb1ug;e-T+Z;PpW-PTul&Wlm_S705@EH!Lhm&W?f39pnh_t0=|@ADhqsu1SchbU`EQ!~x~%6uAIY*A z_o=ttpbC2D_HZp_c;W-*&p+>cPB*p~^KbbFXN&AF2oacF__~KyNUVV5_^Sen@L^p{ zfr|^c>I~1rD&g#yN)aw4%!Z-%jn}Ub&CeY=vE_*B3uNHmV7x+H6K{>&W8VO{`$lX6 zwschemvxGrR82DoRDX#ub3czn|`FK)76Y1o}To>5`AtBa>!3ZjZw8v_#yL(yW+v7ZM&L}PTYJ!@!S=_+SbazR@*fxz zFH~{F0yDu2IJ8*w}ju*0PyMy3Y=|yzL2O#FWwKCYN6# zLe)MsgoYhDSdvfZ5jZJ*7oEb8^qD_h7g^sle$M-0=m4t7N5laLKb5sa_mXLUvhAW* z=3NDufM1K{W=qTtQ$l*9rT9g79pYUf2{HnLE2AJ7K`Ypuln_;k9l+r&Ajyfy;| z?B8v%kn+sYS{5dR-o1~7ge|jymYE>D_JvaaqcM*vy!%#w=nq#8UGb-H79us6z}5sr z8@ys*B#AdIJ9(rDmSICb6(|7UB_TnoJ^SH`mP2T{zf88=-;ElYfze!Q5=b z8Jy*~j+l4Lqbyeh}NMVKF=FRdMP|KAvx7nBe7N*lX&n~ZH3ca_mZcRI{T zxv%i;T^9H7-Th4q&7Sx@N%q8ry-U(Q0en7n&%d!{Tdi6MPe_nHSMSJcaAco0PfFN> z8YiS|k-8%v3dXJLFH=uKP9;^e6OBgYfm%-EN=;)U5@u)Hs$KGC8T^8wPWzT2?hinP$*rn<9s9%PdNG#!=IQ9YXZN~BYtrLJv@Rahw>2WM)X_lX>>?Qs zfqf}j{fT!PG~O|l5^CX{&n_Ps2V8^Dz&N6(YgvtboFXEG7C6{QdZ6%^>e*bQGF%SR z+B%x9;moXe4f}+V*-|GGct@@#8;1ee;vA?@>yb%(R2}d~i!lH+`Qc-OyqzE#`dBZg zMn*l(miNmznWvB(Q9r0Sjk`C#SU_i(YQ?uZ1u}}8a zmQw*nw`HaC7_FtBJqR%?0aga}{Td1?D*^W)fcLJhu!39_qomwZ8Guk8imnus>Sy4f(I)bX4Fu{KvDvxa7^~<=Adgdv4OZD7*<_+J{h`Qn zN9A_WZa>}9ii0u!&erUd&Poy#3h2|Gqq5*^@NJowB`3U%h^0`PG&A4khKGAq!q}~b zcPzKNh#s1QnMxj$XB3Ww7?E?m+L9Dwz>pA~`Rlv9@W(Pna^88Xgzd$`(23@KTXN{@ z1Bo>E>1J7R!wJ_j+lvHTZSSZmRc-lgz1 z1^khSVv&STOgmZ}eP*(K&|gjtap-B2)EZ+MyRw36O4e*lF82)8`kivfun3a~w?;4& zUt|zoUj$7k5kaYi1&8ws`xg`sA0?0~$=!=KV>uFrKS_M7l+qzH=4~-G!%2xq@?qV= z{HcApG_ykH!s6{P`|dnLNE__*CE*z{0zDcRKS?Sdu5zAB6~(8&3X=-oDY*hA?{G?E zOm8pMCio`(x;UX9w#@kjmf8%cHZtIVbia)~j<47M244B5)j|#iv*AA;1B}a)Gq>K& z>sT4cD_XZvblHI!mg}tVrJpurxO5yj`gvDj)l(^%zQ{N`KsyNM)i3RCbRJV{QExJf zj5#91^*+joR@*{AG$!1V`!P;3sV(c8WB{A=75{7=f@q~%G)9IHgov)20s`C?`ns^9 zyVZkNLX+D{0~nAk#R~HG=C`4CnC6_2t&HAeLu78XSs2Jl6V_n}aPj}U*AGl>7Kn2Q zv8{r=-F;eTe>3+mh74fq@_U0y@$E0IBRg{QU#DY62-N;%V)rxXU*{UpcM*IwW&nDr z%!%k+)t8@1ZQtgLWKqtJPtT)dL=bMTu&JeGVy}>DmKcoR)`q z87tsgSYfAGR$#u&HE%&@(jvcllQfHZhy*Yg>z`8NS+9pPXO|piRCVr3uVhjpJ*UNM z_g%_D3LYK?eLS1%Sul|qgu7O;#~Eiz5xPQ?X;Nja06XM{D!V?bJ(d@`lf&A3#XAdD zKZ7(GAkfbYF<(Vg3+k>*5Er2ZOOeCPjNZ(q0eT>wh&ByB16LanDZiN^2x>X?JkmvV!+QNw*s6AP$ z>@Y`h7ZB)-nzwKMrJs5_SMaYqdH|R!dIwL+)#P~qU_zd<1JbelU#w1CtR&a`=K#s! zc?ts=_*MO-JWlTJ3$)NQF9m|9m9mEiT+dSSeQa=}_Di5jKe({`o$5F#wTR*OY*?F( zrcearMVdF# z+t1Zh1W$>>^wiM~?H|YLL$OwYl=rwEg02-%R*`{G{ENm|+vv1uBf=21{$G6k@Nxqy zK-IUj!6}Fyxo^RZ)<45X`@5dU62}w7o6^f(<{k9&S1LA}<6`G5t(`eXR|S8T;|P{R z8%D8}4bJ{eVQqCPffh~CuO7fj(*FAGc$IbCs)cDh7k2yhxu2tpMY?A zw1k4D$+Q>KLTj|WLOZ%*lvzRA4-V=pJnCdU9fv8%-oTh{Spw`JXb*_ac$5CE|$wPLa+1zp1zR`j67j+ zMd9y=Eh}&ff+#4XddV-Dj<>niH_YE&s$;zEY=5QP`t3N?Swls$g9IMiB*T-^FSu6S zsU_?2-cjAWZ1hSGu419z72*YdX8^tzv2?j-XovJViGuQ-Z3qCB9a+dnCIpC= za=#t(iOdp3Q2rg%@5LHN^fmqW>=HJE8NsEK?d@Qv3`lJM*7l4NN@9eNRnGNZ65nOY zQiU&C0CSuTvr?Wxr1;(u_;xf4uqtH_N@+7+(cWoLQkz9%qZ9A+%>I>z)ob>>~T#8dWoR=3Cc$O0Z7h{phqCcz>n zp!%tVF#|=rSWB204a~d*kXtc39m4ut>Z+HTz7*HitjoVcd(r?+-TgGlUCX!c3!=SG zXeu4abg#7M{~_wchABhWcljcCWsotR?V>-_Q-jG+uAz(L-+MR-B?BAU-exb#3a z+bynKdW7<EQQ%QM?Rhb{taz8uk7ay47=V?Rqf|qMr65SII}@|zqhyEd+q%U?_y>7Ciod? z{t)2%vWaf{cVBUfs~VQgK0pEt1(W!d^z(QhuVF?=HIB;9{cBGIUu-O!F9j(kq4HAC;9Y&`njun?_a3Wq!{AXj)J1K87w zsf5^}ewHbj`ki%EiHhgKU+*cEnrlR1k_0aDt?LJyqht9US)IF<`QVa$E|Yhy_l{wb zK6O7H)=KFdXAsi_47;w)Tu5a>8Jv{UXVIEdRR#r(azD42){%{1@O83nxgx9C_)qP& z2GA=W9oYZj8|d$0;M`AwbT($!9JC-oyx28Ym|~n*kJ&4|lLoB<#V&R(|HQ`>P_A_L zxMx32Ei5chtGadMwOY_yDK$(WK6JcDUWv{)Ct-uSQQ80fLsh>4P4Hlh1eh%fL5Mrk z;9aK35^XWkOBUgTMHNjp9v}Qfi$dD9SyInC|KSW7#8N4$z5m0dR^D#Lk5K*)^HQer zfHmnDhhV)TEFAwDA&T@$`-qo&f1^Y3hyU(HQEZ_2-tF8oUA z;eexFuC0)(we4!h-qecoQAl>6+QR0YkN|r??&|w;YiL%^k+qtFptE|0K+mELhb*l{ z8LHJHGzj^l`_(A&QvrZrm1*?#xLOM4GI_2W!F#Yo6QG-zg&pzfL$r?3Ho_ zj4v~fDRbPJGIEIJ*Gb)tVpP6yj;z7N9i?4uK=vrpTI6>Tvg3$&Ocqiz9baF(Uy%u` zDfXbtlM&_oLuKHw_feOX5jW2Nq@oN9JLr~&GsxFlyh5GVY6U;7!(8|=DUc}*ko@-c zXvO-6W5bT^(K7Iv1PjhhnoV%(o|eCtj4An9YvSWJ5D z3&6jOl+P(~-O%ink~(}M31e_7G-&2+Vx(k=1wL%XGM+;K~ z(lP05I;ZV2V=3sg92|(xs=y)<*8^{M`Udo% z$F1o%5?*TC#wwt1*h_?GC+j#O+gemQ4+9t;j`Ey^8?HA~wAUFdE20!@3}VA&PmUt&dC; z$})SLm@3`pn71CSwt*ZVIdWJT{ATO#)|yugps~00eipR@#;Ar`7Gg8=)TxKj0Wje0 zTH^?$A00n^c?%iZZX@SK9^5MP!zaoh%ZkhX)G351yNLrQir{u@vYy9n9rYiSbKxOz z#Q^4WEf$c~g=>ARpS(Lp+hAF+VsNs>>P?f}=9p%sxRJ&+0i&7+xa-pPh8vCrMR979ar4a!yFE!|7nZ znXrV+d+1#&yB)5hIl+997oBQYG1Qc7jMnG3P-}bZG2`~T9X=?As%J*$FB0IdU zedW`r);7jlmFRVXjBtUUan})u|IRmeSP08?66Ez})>-5#wd<`JyZDV--Y#L-0ycb| zQ_+5k0v32i@fhp5b zS!Y1R9TmZ_WEi3)dBd#xDO@-;3i*_zP1=e~Sk7Jhx(53M5&2RK@&-QX58>$m^n|dL z6^Lt2lYC18nwSTMTa^|x0j|Cx;ELp`bG2Uy6HPJ6njdvf6cv;qsWn2PvyZQ_|{GF`r>=)J8w3ZdOht zYXK83!5=L_+gkFJ)hG<>7u$u;l$V0BRyF`yFLt7vaf^8=;0Z;RXnY8Mb}h;^IP$)? zZn_c%PXkZAOk@Vi2)>XbX=#({Y*ALAMTm>zK{$KpcA#dum`)7Yy%v_d;aB^&Uzy3c zw2JgM1cRl%Ce717M$W|q?s4>;?7?_GG#g={V~XO7m71!@yrokayUSqGOEI8n^X8rI zr5Ug-*mHEz6G5=1*_~$V&bn4<*^mBo)Z(5{f*a14kQwohunCuBY&ZVL{`o74%b=OVu?QQlb- zf!b+^2fdnKK7l>h19Y3Z`X;K>zm~y)4Uo?SyNI~1VruN;D$nEwkFt@5TEm}5L&R^z zj^^01;b}cNhu#GDnM0`6yY(U6?z5N-pGJ!lBd~dF>~57ssNNQYv#PT`__Um}Fg44` zwDmEJx0BBdKNU}@t$>c4*VIe2TV-qo^PuukSZ^UAhD(b597YTrT;HF$6!HP4%ML%{ zzczj%oR}>vy^}KI<>&SUpn?bnm4YLCw{s3s50kqLXf+h?k0jWPK^)-g7v zia<&SsQ3I(@Cly&00Q={Hr-kPd79u=m23q!o~uLxTaVT0ul%PYmlP~+5qZ(qDJP3j z;^h&$lG=y^WC9yp$&m~h@F*ps7I?=IN^F36t~~qi`8jl_M;V4^wb%krvcQl(1O2!f zPp+@P1X|6A9QZo;8V_MpdE!^o|q7V(X0CL)h|Yk?7Z#774+PUmfx!XJ@2adc^w_s4oGm{DH^ zQ~*ykk%V*=6pJgc>|q^j9rE=ng5B<3ZCx`^SZ&V1K>b`bXS0FGHWctdLhc%2KK{(R z2|Wh0aYA=QCDTc)fF!TeLG0mhZWPg+YfzYa2oXvOGO+82ljr%!7QuebeHR5mbbky* z51TEt0I&HKcw0g+1Af^Ykb&)WlCn2ppMsaf)Mse@3#uDVCT~x0DxbRhJJ4}5B~jDQ zw8cbspDYD};f5mwM&};gEVn-Vj#;DwK(W4xMJ0!%StZq$#hY}9lTU|VykU3x{3nwN zc;K$4*cOIt1ijq0fsppOGc00HT`b-IL(ziM>apX?f$29^5va`YCHDbHYDw_U zL+0SJ%r^>u6M=o0jBnhK9vvos_TipKP4E=$y({6T_WwbcCTxRIi))#5g7xcU(@U+` zs5{^o!+EyO*uqFAP5~6A(xn9%C%L#hq#k;>ptRC?WN}Mq!I=QyOHSs2{hOfRu;a_p zX1DJu)1Z@JL1ng3m;G0DRX5Ng593oGL*c|{e>h$_TXLLkp6fjj*UxKXV3H z(wE&?_{T`~G)jmwa4Wg^5d+V~x{)7b%JA-*!E}|bF_&$miw{!PY_;NMh^Be_@5o#I zKM;{z2|={ERN#l~kEp@Nwq!JUTtf^A7Fo)cmaY1V1wNk6nJxkERklJT5_4>jGJo9a zdGJF~eLD?c8==|7B}stTE(FqtCW)H#h_h0f4q;I==o9KdW4mR%a^_wNg$fl$tzTf~scq6;sU}D?^Hw=XFJqv>W z=(c0sn=4e)x~N;xyIs+Mct@f>PHu0p+;EFfgvk0t>$hIF;r)$oSl&=|cgbhNu<}zUV?}{75E}c65LFjQ?z$knBh;g~0AznTtC}iJ=Rr2Q z4BQlNdrEW_+&dh~VohnMd^IWOBZWkrC>Wq~cgiF9vbsiX6Ut4?E3klZSxjWoY^zoG z-B}@*8^Ep9aYLj<;iokW$Vzq;A2>s{AnKDf-|)z~i?t-TA<8X*paNC(l1}tmKpZYE zs#P7ppgnQh%uP2Naj7ApJJBc7@_yl-KkQ>+Q(2w*k)yf(u(BB$kgwkf!nP=93}N)E zLRP4{BgmL-20Cin78QKAgsnc(U&2Tr!V zYup}Kg`7ukNiFy_fE%|OHhovAu(ku}k$rHuRVliW;QlrS_ik1n-1G-}&an$UHIgUp zWoi~oV719pplUG?Qi1b=eV|_8#8kD|?6{jHgFYtN)1S1L( zN0I`PAO@}mkdUV*r0D_i?`C8*PBXYAol^Y-!9t}cA3dA;*hX- z+~ZGR^)8OmJz&N}kGsdmsq(G-8ND)#k5hI^Dw>nnc$?M9SvTOf9uuxXTD0+0)3K*r zJ}cU3Zg^0MCZEi2X_5rhRO$_RJxf$Oibb{c64;f(txmbf$ z&M&z&;Fa^<3k98JjI#db|BJma*W?&>4rx_j@Q#R2j6v=sIKd3n-7Si%ERJoXiay*1 zxvdau;5wlrJJ)F1p{r~AF=`(pKo-RQ+32czKZT8umA}BSZCplT^D21<)!^H1(~E?? zLhfB;USerbV`eXt7dW0yIfum&KVg=nBABanTz_!c#?xBAX&HO zxHK5%0S>1&`ni_=N?C0$R?({c=W7*Xz47i0y>T*)=F#;5gbq^^1e+99Kr`Jn3@!c{ zdf{1CNuCTaXcN*bTTB&@@mDj6dLQB6W>m6<5egfH&>&dt0TY#bz&4dB;%GVz7beRa zw&+8fM~Rl<(R068wqfV%vO=(c5aGW)j>DE|+|8@Ln>k3&~FgoJrFKeATceXOk>;gTH^2)Y8SX{V^g z|23M(%c4zP3|#)x^5J`@mO(Svw{Y_3%+^vlN&Gzd=H(?fn=m(yoF8A5Casi+qWI6_ z(Us@J*KFrV=AhhptQ?9g%Mc^zFi|K23QPrWFS3qo5p()Q3So)S%H7NQ(qfTSaw1x!vVfmPRiJo^;mH{YMBm_ZIo-d)FO^k zoa71u}Woo#;9r$v?sNf5A%pb;Wbn3(DRNVDc0Sm~4!)F2pgY&--Nli&58-sJL^ zPx^MhlfG~mwF^ZCbgYMa(+*G;(4rm9h(64*ODLgHjmyK$zCbOx+(0xfcg~v zW|a6?yVe+TsvU|#r>JnK9Nz>DDY7@Q*y+eo>|XJssz*o=bQk7UfD5c_)UhEqko+gV z9{OeLvQXFN)@fkE|KTHur1HfLoJqZSvd8krW63jTK|D;2gdtD?q?bCw=}!n8i2zj5 z*lMB<&JrC&i$Je{$Lm16u$LQXgG~5BGG3v5U$! zVk~?UJPTY>{2S!M?^or9*e-fF13!vPkeOg)GcTccuMpqweMEE$*QK+RaPCm5ER*G~ zHwdK;k;B;|>Y_#QfOKoy#8UyfplM-D$=zHM*(!&d8$)Z#WlY)SAQf6 zO#iHnO^{Z8z;2oK^KPCC{Mc>|tq00n(wjIxA;Sat@dU&IWFM-BDxYQSU!j~vOK?a1 zYrsR2`Eif=E_|-GKY^__QrmovY03qGWqz9iF;Uy*Dlr zzO3VGu@s+bXxfJw9d-RoOhZUyp9U&Gx@c+5{l|alV(*3dlc)3@Yl&16sOg);$}Jmo3PrNkX{W$_6h z=baS)s*vH5-J`A72imRA@|GgKii??-T}m$j^t>t3eck2(uZ7QJ2^-y`lRMT2Z*~cf zMLdNnn?XceTJz^`5q{nh*+AmHT}hq#ig5>2@mseX&~v)rM@h8071R**0vf`ymizy#fUx!n( zqWNWKJ8<3cw#(wa<1>OA#VRd2->!P~3CD?xhoT!$z0ew{{lKRgC{#|z7EZx8!!$}| za)d*+<9m%UJms%tpJwBG=*>UneuITB>`!$I%ItAnV_Q}a=%5$-m=R!%{cfp(rT291 zYmG)B7Ai8lYf^_}Jr{m&E2rKk$@6#a{`rm`lu&wO(~$$~T%5j}_at8!3ZD4CeD`+6 z3e9P^v7Po0N+icu?w1`4lO5qH4nb_LIiQ7iq&ne+XkSy{2%T^stmjyD-5P4sQ=#I8 zM?m6X2lrGx6+-yDaK7+SHv}(v%Rj-(kk@y#WZOXJGDE{GqYN}k771QX!Wn`wjf*LRkygu&uiMv)4^q^{}M5AhHc_vgI&n8 zO5Ei{)CClhIG>2H*mv%?kJf?;%wnOV5Ja?!yGTuIqzAHgunI^9`7aTalpuo&dw1UC z0>nehwaDoCT)X0s)L!niej2mRPMhk5J0nF;udHA?*UHcXOc+g|Dzk1D`9M2_>&ZS1 zy~x&jM%sW--Q9kQN`f9Ruk`o8cK_>vgWkP zfV7;UH^d{w5`-wSlw{%}*j(JZL@%o2}YZ=<~aR>2QB+H<^E?FZ5K+-`L=ETRV zGx7^A1W#}`2p1=#5cio==SR%3Y=zi02*Fol=>tNSvU>`Tbn>OMg}w1*8Z4dyBZNT( zDmS{JJvOLqzyq+jy{t4W0GFh97P^`|#c3YOs#7+Z_lj0R6GoC@MGR?-R zT{?$_UJrYbeY##Cw;8M)xR};1pLfG0{dDcC+o(!r@Whg`c{@?t4l7708Fd ztJBb0-&P>D6f;-5r(H&alk)gJ{kyk$DuU%kS3nz)PNa6X#o$XGHon0$i{_r0mTKcx zCPxz~>FfK)@Y|XbrVK9_ZGTPxrq#9>Wfs}x!u3bSjs#qi=QW$PGgyG4RcacgGlLX^ ztO!+d;aF7gi~v?Y+4lC+TO0e3%LwqBUuT4@*)~yxfUH|Mu8nB^Lv`(lfTIk@`UBAO z@g2kbw>;c1snBCL^URzN*t?T{{|~VBol*G1!ktkzyOC}89a1s&HDWZ*QY=D*pDgCb zEMh9sh;Oa3=sn+5YUN&ibn&u2@1he4ucvSYpZ?)EX}mHj=7Cn+wMM#r-0yF$ypDV_9BeNbA5g}`c2Vi^E8ESvGH60VWC~hn{&Zu z4}y)64Kzr}MQ(CqBwhfr=Ff8!3<}s{?Jqu;Hope-NPfz^c(vJ%iW&rQ`v{0B;OHQOBA1)x|Zg&*N2%MZ3 zJkhN$(&8=`dMIdAHeG_m$`uqtCPaqdY?f^(3=hJ3r#G%KAlAhQNYHJ*CubMNeEG-( z)|VAUXU)sW%YX)c4}g=?6dd!~IY=6ecc$WB3$CW-9UA9rf&`RovS@XZM~RxI-I7N- zeyMq&a&4sYvU^KuoU((vJNdA*6>FZZDT3|)2}*)V=3#O0X|VF2RT=I; zjFTrzeEbx`M)`|`0NHUIMF0ju27Lg!!+4uON#u-(#05A%NjXsQh0BC7eN2YaNnK=& z@n`kb4S>4W?6h}pu_OF{5s-U@`S-@smZL_cY>lV_{N+bdQfjPizXcxM0C#Y%R5-UEAM1O3XHLB+Dh2Uc~^gv zIizv6VklgGr%31T8Iqfw&wi-&sX(RfI7Tx8Ir>p>lh=!3s5hjtY4oL(UU|1cX0_8E zob&)y>+koEtT{*$#Q|igk%5#fv{?B>ZN=%BhIR9v7_E$Q!QX`pV)tVj>jZD;MvnFe zhLtz?S$2EBosMKVk3My;jy#Bjl8I2p$I~>=9(nRxIGdOp*ZreoZ5XxxzlIJeM7$nG zObzU5K7*V}0%pIwntS>(f_pfPz)X7Hlov#xeDobpU9!&j)f zPQql(S}|oC1LR@bqi$k<3^eQv0ohQ92z2Uy)wKg%IrY8kzJ|pfMyfsBTOg@mg+ZAnq0x%tzee6|&VCgZ>3rK{_^ES)AuySG`PC&m zi7FczmD)0Oc%g}cs`pB=hMxdYZ(&A4-VWvl*U4N6RfHeav!%g4Muk1oADSPMl*49A zy!WaUNIC4YozXy^nY*q-LjJPX(juHNSRPYjJBu?zY5(^t8;{9QRk79OLCDMxGVL;_ z$%bM(f`!U#`o1F-VJxp*FdzN))fSTPFkxu_MWkCwW z^50(-#tns4E>?RbSaQq-PO1-l5hs%ONxha?FL@0mG&GpVk{>_ke@cZ}q8Br=9-|4r zE_oCoQ2BI-mKia)O3%E<1L8z$d6n6%4b_Xbo~J>?w2|v&pCm2O3SxIO^B;H}cxoYE z&zK`OTlzWTB4(~xXhmsIe%aycs0-$N+$16hsF(9xYnZAa)@mIg5U2e;)#l>&~hxL)>!IJwvg*nvE$j`p2ASUo%K0&r(>zUo zU_O_}pF3GXU4$MLd*5DIY2CU+LzxGm=XbcON)b-Ae5@u8CLx~F#+^D+~vu@F-2 zILTRL+?%?}X%N0d%gp{rxHMH}*#L={=lI$vMA)UmIENNjdeKh(6Z|l2z6r{z0U#TW zAH*Zl2IbR?1a!$Tj}*xE&2=#U>_0m4rCM7>j3BA9Vxa%|cLK3w(d|JGw%-^S=1ehc zQi-a?1T{VWL#N@eUZ-i1xFk@#kb}nJSWerg4LSub+DfaWO`w}hDgjHT-8kKZu5&Bj zrq#C|fq>Q8^R+3q`Uw`nqJf6!>^+PA(C5g`F;IpR&wCcAke-FY#PSWYVQ(3hc6;7|i+Z zBOP}1N{`6T59HgFN_33%f3DPilM;u_0JnJDG_r*p#-yZO$N?<8QHEo<-wi%*&VXH^ z_JDB^3ujeA|FL08y3CMK&=9#E&gXr`lDXU;9vr+4CVXwg*p6Fri+2ew`4Fr*>?4ZK ztae9?@b+-&Ha~N!#okQ};yh()MaGqKd}m4NWc zp+U8k9qeB_=92~JAS^rj7ucd!T6;<^{kB|Qv^1js4koH^7p!-bg!L9<fC@7EM&9hj-nG4u=4x$}J?U;T6*nZ>*0}TYH?FbKz1da%339u79R3t? zYFEr94b^z=_pm6YH`kV>JaQD$r#AbR>ak2gJHk@e6NlA3Z1w_fwANu{r}U?#^i#)v z7ELYswPq8b)7#Kk?aVPUmja~Xd6>(-JI%8+pWJfW9d&2m$`GByRa-L*)6Zv1&qEwntXdz}7CjrxrgB+` zUcXo~=7br+gGBe7&vC>GJG~{03$uHSH^;NgC1%ThjBlbYoa?omV8%MGD705quU3`K z=aT}CX(7@2dUl{kpt*4n|lqcWF@2^44xeye=h$W&y z_@U5*0~>i^I*UK8mZbI00sfNsl%Qdil(cK@FvnQuHqY+u@R0>=a7S#y8};Vn zCGHpEL&090?O-AW$S@k&gZ~qq_*FL>Ue?H)2GZ>;2A9TXQjsSfq7zD%xcDp4uuyM! z;g-i@LrFn^0Qp-0cqpDo>yk0+`nX@G4#cQ&*a_|hjw~Ky&*Y%>q4VUe20mp+(_12b z({WZ*MdZx@P?2*y~i5@TX!@mlOE+&dAV<6j>O6AGZC67C8e9hPTXTNMLZ=>qBG%^>ngukAsZF z!u~B^T6L#i1XUyV%ir4;4p&dReJ*7xWH*F85B!4!O7vvx^dPT$IA6TB^-&AvBA)#( zV3nlHQL;;ma|>|CrX9zDM!J`BZGmZdkxCB;AJstzhNze?p!f+1p%8q>4)TWPi z@<(Kia&o=Jc<)sH+=H&a(V2Zh&`KD}(&9J2(~g7n$MW*6=Z*_>z<(wJH<=T~;<>Ao z;3*6i*}6f3R|D0p9gs%L?mVdbT`@pys#Fs~h||AY>nGqwRI8kxRUh+WZyBtW0<>~$WI?rPubt>akn$c32PCq?!EnWuI~gDMcelY$Z(azp6dw>xWq>u z&FKz;9@R>EUN@1^wN0~NFn74cvM$gf&k5gaERH52mfu$d1h=QFf>Tr|c<3|)tTzTL z{5#?UrHx3~;6J>Cbpfn#^AsqfyP0e)Hh#rZSDpHiEs@d%?Q}gGo=$Muw0%Kt%o$)B z8T^^b97!}@yG?n>vT_Zwh*nga%qFStj4TqCleco45e@qtoff09RSm)att2-l)7{+W zXbjnulRMerR#@CB!m9i?)jT(axjQ z3R+=XPQ5tVz8_F>H6vzO>_$Y_dHh0?2|f3^06kke_`a8=6?49|;4{wpoSexo<5~C1 zV_dO;jG~BuLVZ#~0H(FiG#e;ur)5sFcyb*i5%6^cbc~_h4{eV4Cp$(m+VFsn?eKD*h28Tt*fC zpG&G&jAI*b*`rnBdqm(}b}iO0+rxfNE&2e=6*SQP9xLr-ZCLS6qh2oRnJ31Ks$NbS zM-fi0oyI#~uD0AcW@z>>dw$PqG=e!QInww~4P{wF7|) zuHok9KkWvrW6sd(Ec|f>Z~!%)ZfhL{k^nbA$iFngmPtTp0CoR)3?ZH;M?|P2&H2hL zP%G^d^KJ5qtN>>~ub93_My`N>U7M!`tVtR#@(y1PGi#Jb-oh`ys?5Oeyt0Qg!e8}{ z*x1rtCt4T{F|MTg!X#)Dk--CJB_&V|U6MSAH^jD$afAPOU>&`gfNTK@jSuJ&v#ylu4MJ0m_AcTDtb1?VkvX zbHu`7$F=p^N24asTNiV`M=0$UKZswSrC6Sj!b zm!cu$Us^i0U8we6L{niLeQ$PCDZXc9)Pt(9W`B#Gc`kq-eipPGPQu3}}HE)1df6L1| zx!XCGsS!Ff)-Yd2LT-Z8wzE1nnazU%VjwDJ|=e8X!oY= zelaT%m6{zw0=mdB7m=3`v5F9obJ#SE+O;&ZUHikVgwZicQ6bPgoeIF#;0s+!puzZl zrHk!XuCr^l!g7Ke?g?U>h=B=a{y*Oj=;^a_HO3IlvtN9=?u~_j+>#F~vLyPx(n6PF zhtc?30}gfDy=>SN3RxfU_H#nmc#eGA=`292$r>+fbf1Aqu0%j1uigneVO5+~~{v3ILGsgm^>#d5H?b#cU9#G+Zcl6Z5)Xh1CS=L{S8Cc159qp6L5aq!RxMR-DvH!f0BSA(iTWK&M) zlUbSeHx+ngRcgfq(fE#UKRPJCXxw1?Pq>J~zTWDEd!i$@w2Xa1uYgjP#Hk`w6jr;qua!haiS>Do3$s}_)F?|}#-CfMYR z!lSVjz`^=kF=B>}subGWMI!{Ya=w-eK#kpgsaZisRS;eGpw#r8Rway#qNG$86@Oqf zAEWAq0w4B7%(%;4D&l)35YeKK>jnktSkF?AFXai(%!JQtvnjwENR9 zhP%yP6d!Q{8V11k56m2@MtcPT{>}#P!u&la<-#E|US1Gix)0F-?R5tXH)J|&R)JIB z3Tu^AbP&Xz!7HAmi;??!x516JCtf25b>FTD(>LGLEVmM(&6u!}P;H5mQaI0GCuNKj0nwE$8|ZsnD;C zhJnuVD!G;hQ*!4xBwLIc#1uOT=IYD$c^V{+{nH0ZX9 z`>&MNTAk6F*U)Vv_jSVc^zcpv>UFon)RCzWS9|?%eQpm5oZ7*&)+t|=hCZZns?*CA z?HQc7k=Q1o6o7WFF*r%f6%b3_Qo8iI>NmA1Bi5)(YKlO&1@35QmTD@HJs9BbA|Hv8 z2?UL*qECz*SQr`s1rj6Ni+ZK32IZ0GL1%W5;Va*1_Eb9d6~9ey@v~C^b3#cD>=&#C zqf!+~ewC%J;)~+S;3Y>*)KmYy*}sTMjVDjV>D=d|HCYSm!g#Kn*Qbgz{3!l*Yw!n^XO_=EP0 zvvSbr%gBK9*~3n~T05Q_`x`jfa@qgj4J>QyV2nu>Zdin(nD~2rYmF*kHwA;REdGjT z1MSOdJvD)&l$?+hv=_Lb6iU0Ay|=cr>n1C%>LCUl&c-mOU?u&FU=>h-+Zdf4Isnh6 zV9?HAprgyNyVt0mP?ZO?4Rw=Ts9OcrO4B4l_XDog3VN%!+%7>v(mcvX%lR-Wy#vDm z7%K@L`aJ)SJUQP|hImxN7Y?o4TY+k3>I&LshL9od#4C~bQ}kW6VDO{k4+2sb5|WCs zyNE+(OztFF7ZUT%^EsFXcs!*FJ~XZ<7!Fk4`eqHv!PbmnJ1DqQOLlQyNr-lHD^2DK z2^XB{bN>&Jl|^&;vQ*9?stT3#-N%o2ojkT)Vq*rnpHwVqlPP}hGm_s&`tG$Ip5|!X zgjH2?f3PI$`B5Iywi_J=Q?-S8THe~nHk7k>VksCzpy;2lC)jkiMRqVHx9w=K7dj?T zv9uoN=w)%7xoug1m7Z$L*f?comDQ5g;B$W7WY8U{TicOa4G8mrd8YXKGK-<4dwk9+ z&|we&(-+a-Z+?Oh&5A7}Jl>?~#zy?ACHh6)!Ic{DPgfUNs0Uc<#;ue@taOdp$KlvO zNo6p(rnHYl-Zdvv6=hO%>MY4*w}RR^k)*@;K2Ntfi4==|z+6rn$x@;3)2!IUiS{Lr zM}F+02s(QjM=&d8H3E8I5R2GyY@!HovQPgCI$rsSPcRFwO1F#OJtu%gWY)}d=5odD zOg6eH2$n$)e9(K-Wzm^}!qK)VZ?5!RjZDzaaj!pAt$DwL05-tKtz%fnIEsvqcF^QN z_~}se;U(idKxo{usCle8KI`r{kkXQ4e{9JJU=^^2QxgweqrE(D*Y0X+6C+v%9!o@s z7n%O+QOTOVjqdjXER|Igj?%{yEnXTI_(;$~b*CTn>(y=Kfq!!f65Pa-1UkQZh zwZnMs@^4W6prP&s>6`kYWHD(yRXWk=k5|p+)4%k0A3EB(k}==AgTi???l=KIeBJ_=M>Y1wXJzKr7Vs>Qb@+JdR9*iXUBJy}{gbI< z6UV=0jyBc0#IX@3SbApGOd99baDYl_kLWffDI=dPHre26YjG2!DXC@^dx7par&pel z`l&?VXn8C(R=#W|A2lsy0t4i2V~8ZDfSZYKj4NxgO6Z(>fCsdwjWm_3DA}p#QRmXV zdSd-}Z}QEM6KU_DuQW3#IZAwEHZm=og6e$NtESYQ0|CSq`LMs4fUJ%!Qf4s!hfDj$P8eF%i;6~}lD)BmPTF$4^ zxL*`Vb5EeF1K(1j<8R_C)>-_DNaV% zAIE+$Ka-E)k$rOWFqp@h1rXpGOla{m_7Y>A@}acgEYYAc(c8G^mrA9Rnl&5D0p@_b zoGo_Ao~^el+Kl>emLXC`X4ZO*qMe@QuzQ+)LI2-bcx<4wmJkZ)0$-&kXo9tFq}N{+ zVfq%sIrp%KsA=6p@mvx^n7BV=Ba2T|yi;D+1zC5;zaG_Fm9p53aqQm=CCC6hBb|8j z@7W&b!KEeGcku+Bah{fKdJ{6NzEdc=Jw`}kUmWI4Eu&nS_~2o1W&k_zBP??pGd}J>8M~o`>XdFP7Oj%r-$_&&)(>|yfeo! z>%6vZvghgjZ^eRG}hy<1mgu3`1Ak)7G)k*_)~X+Rh>VR_pPB{W=l+Lyi-yG%fjmeG2F18%w5IYZa9M~J9Z-gqlLg(gX zkbZ!jF{dijkKC|Qd}xU_xaguoC)nbtFfbGjhe((tHS|7eLPm-L|0FIFGF#?jc9@b;>dN}y0adv!5c;LVvStG!ffqD>xEl4p7& z26<(n2Ms-TERQ7^L!jWj9fs$5sKBWz+5bPbUi^~0wXikf3Y;L#Bg+x5WQ^p>gj zvpkC;e`87U!WqZd9}a9iM7qfuT8Nw6k?bFVa8x@GI(;?gs#FcAx;|v2hjgB#mVYsGXFo^4EhS(QAuxPR=&!R&R4XT!Si#M+Gjk=%boXO%tJQ07khBzq8YcAQQgni4dPDq$q*(v zvM(B@ocUh!MR8J{XbOHRRqtf#LK<|=9Wa>EkK&ZDh?Z_}qHx3}EgP<|xE;LSR}$V) zzZ4$~LgPb@jIW&7;U@f~!z7(G8K^)GsdZ{K8IhgjHmP|W!6t>mI|-r=?R3Ah&I9U^ z#b{y?>9Ufg+F>I}S(G~@q5N!-Is@VJke!(eXQo-I_3lx>GRt-|qd90y?5ssN5zviD z#ao7wx{EMLsCIzbPTKozJyjS{pt`z3>M~MF2kHn1qgu9IycNWQfa)b#J=&IsNWdBn zflbBRxNCfo8WJ#fSt*(b3ll*<^k|B`E3H{4zHWqznLdfCT?*fnyDtC1jse#KFi2?g z?)K}&#BF%^TcV^i9(cw&kkC0#Kf!H?@#>D5w3YcMkh2wbDBq(a?y< z%e0rwaJ68~;l+!+vo=skJjHPmWSY?_*By$@7Rwr$ImZ~0gBZApai0HslUlh%%FxSK zy}6~F_ITdn06>)8hxTtPkuY?C692she*c`p1Zl(auK!sIr;eNG_(tQQ$-x4a@p=$Bg->NHX!VDQ}EJLH?r7L0DwHStr zE2>hrH;wcIf~Y2Pcr$PZzm}!Zw6YL|B_3dD!?XkTy0d4l>;b_)={Q&Cy(p=ylr(@G zrl;vZzy~3a+1+b`AJbUS5FvEACdjvL zkG#3y>)2UHkFs#`xzWLFZqci}`9BWLr{J);mV@_+6b-Fm9E+yYG{rnA3&V7V%NUtS zTk!xM6}KnaTBYtQNqQSbzCXg3mgUkmhA_ATGZ^2WdAM`48EorkB$p#7KEW_to|#|T z-7R;f{l_D6l^Rmd7*U~o>Vp%Oc}aFzhzbr#^57lNnSqg;$+}729(?=Sb5_{)#P0ym zV?k&G+rJZGdSXuPNK4Xqqsy{XcR?ZvO^oj}l-#@%6y=_#CXX}d)LE=`zhI52^L^om zH}+DNIr}9Rnv;bMB*C$$yj1J8n_hVIj|Uf_rxK}Lm;0Ll>$Z!Cz;4@_)g8QH6?A}y zF94S}%w&crBjYhO`Ny1l?H7oR@PZiuM*YtEfRPowmDDD5vy3IkFWmC5(rkVfkea8( zx&=B%vAHCpJ+9IJ;*GNnvBAZsO0Yp?b|8;XK1U?a^@0i`<7_WR2iVwSu@x*yk8Ws` z^)R?~=-yCR365lJ6*?9>nwLXA?Mmb6alO}rxEL>dO4i|qADK!ixJs#mxOLOfEa?;4 zATa-R`be|EzfTd(P}BP9jP0pGCz%yS*k%f}o#lOPd};tvq^pvqq3~*Pj&GqroewNY zgK*M45A&x(Xn4255}L?=2egYKBCAyW0jgDPx;2MpEGXmWU)c_J=Z9STcy#a_YI#;{ zxj<@E(8*qQZC5HV-3V$}hMkGFdr#-*}*f^)jmxD{#zTMS*d%>+Um(fXK0K`zhbqRn0W09&lStz0TFA=Dl{clQDjk5A2K+SEp$gofXY6Y+!3^Z8VZm&=BLX5*Adh% z_l7j1RLCW-?IdZ2_?Yp$@I@#5F6~xm$rI_Px_8)>&s7*5uX8$o9{f+-ojEbU%_YmO zptnKnRrx5j5mCff9}yft`32^*+EFu9fo!$<(WHp60t#X#r&|Ir+c|t~?^*ZS^t^ki zEPTU^lWxCCw74WD%8Z}wWnmzdnn^z$=)0aa&wBbGtiOQKd)1Z;m~FLOfF9vBc4~$1 zu61$Di@fTDH6V(G#iGrJ_FV*a^w%Y;!o#NCfx*L_V_j&k)oZIdLT^wyjs>$bFTOO# z%u@nw*I}ZHW*HQn#vBV)8kz@c=l40=fG&K_;CnmbZJW&+0^w}m-{BnY+}uX_F8rnK z>x#Tx?^8{SfrE3pveg%@E-Il^1sU`=f&{Ov;yju!618g5!rC$a*&I4Pz^H>F6Nh!+ zPGo_@t4lcx4qB4GN>RhlLw16it;;85fo zru5NRH`CC(orV=03#@z+T8iXeEUVQiZ|-u|_c?Ropd#I;tL!02S>=G*PtRoy4mm{* zjFF@fayKm~RK=NPDj`%W_??4d?PDF&ILNi<)CW#W7(MMush7P+?WsF&l9Pohbh1#* z-RzV91ETM&DOK9>+T{$Mk&w=M0WvkCesOI6LZvPkX9cM!Hs*+O*?!3?KX)!jR6CEqi%>Xn|DcJc6p*eX1NW03Njb6Pn*t_ID6aSwc_5@|IP1e7BH03>zAY7g7xV$f(c=|gJX)gP z(v3fvkZ+|3F-*=?=NTNrOWM=3l_5#_JO9srX%b~uvd^c|UrT{g5wN z+WMtA#xU34$jOiO4Ku=YzJHATt#s1cM97wSc$f+%YFB`SqWX!NYf>Liz0K>h4Oh(BVljB7}D4Q?B-X{ltPUf(@Qq zQIO~Bu>;Xw^#bU6|DzUW+P&XSCNF8tu>T4C+3`0>T)Cr`Tal>4^A@8T_ae-BwVA_hYS7fFEb-98HDV8 zInXc~$^iWQm80Py#YzMI#_sB}R(t*KR~mLZDK^v4nQhT16m6AOT;9148^W)MjA53mU{`T?yg8?od-by!ALn@ ziY_KEInPOiD)I=suzCUYrnwQ0!cy7x%v7?Ywh~jMRNW+|(4*ynl0jNsV*zzY;#pL@ z5cnCxJQ$Rd`TufS0FDYyfiMJ!+xHJTwY-KDxbIeD8h&H7i%2XEGhh#X)Xqr4t%hcQ z!uH&-wPj{9o8H_3!Qja0&OLqgE3>E-g?@$J56KPS&pmP~#=1OT0?FGW92s-riBeXM zBSfK(Pq6q7SsnNkzGnH_$MMv#p&WB!On!;bh^Afb{Eh%=oL9 zE7{EEXEJda3l5U?S>4~s3o49T70Tf4M}@sS`GhS5?K3IO^6cg-+{8Mgm7Zgt85J(p z@kf4qj^p1i=!VtF;AarK)H<*tvtMM|&elA?b41`G8a#~XV?K_@`K9=_8rgavxVisaVf4wcw2JxOsO zd?fp}bZ1R5W7976&>8$nyD;vd>;o1P(aD4mQg~OoJZNQ^gU3pJ>>k@-R!&;De1;Y0 zAFTl|FB&I+p3FHx#*b;^MmXish)VWSw#H8D4KEwzC#ibKCP}OylZ88P#>u8QY#43l z8CMNx@XxYoX)<|f@8n`9Xz%RmKphR|8nl<4PZFu9S_W>0gU+)xof-pEbF52WXcdt^ zDn4`1RIWqUST~pgU`nWMcuHc1&Q^uY2KJ@~sC_TgP{r^bL8gR$+jGNIhxk6Fqn2#H zJT?%B0}m(Sq|JH|g?a%^r-_hqmO7A%jnFs139##?U2vL| z>F2s@4oT!X z%oE2uCDmNH1zJU8(4vl8Fl)1tsg{ZX7}SX|G#`?u(N#K;j{cDn+ybnoL=a0U0z$29 zU9@KI@MRVaieLoGQ~-%p@8*((tV*)B0yPVY;8wd}IO6-REt5*D7@^#_IL)`c{&N*asjya!J@2}&!qxPzfxUjN>BtiZd zH$7mi^)?b~l*L`sL}&d$1e=_&{%jE%QFOrE-|uIRX;f7#i0B zGBBMQ8lB1WMLZUMJ7`;;fChf75Y=1!qK&^E>-*117c zNr4gb32^`^ic&r8v(evv;7l<6CHrwAjoAepp=#3i+Fwo_6=H-E8TDerZ97j%lkovF za1hY2Nw5!O$onx~MmZ4BVyZbhd2{#N8m7~e#&cHhE%;HW-g04uW&Z=Obufkdng@Gs z$q%tIFkM)=B=3u^zUJLuKa?B=$%HCX}*tI3-+Gz7rFdFsT^9V8vwnbIFX*TCwZ*v z3nd`+Fwt9kiSo2oQ`EWzMHyQfOcA?RU&}+CQ9Bhb(0Canjxf_@0=AUqGtiAN^=B^w zBq17C26FL?s@{BO2#L2?=T~!pH&v{isC$D%$^6lJ$?-i@y_w(oMPDEBgCfWdgegQ% zXYb-}Mv~XX5gZ_A(E&?(4kAAK=Ku0_&TKN=bTP1OC%4`(%7IxjHy2r%muf0BC$klp znFYa;*v(}O2|~uEqt1|PnLx!?L{=orz$|^W$eU&!WL_QsseAd;Pf`7$=`Rz|6o z!Ea9vc}A(*fD*H5av9)Tl2f;$b1>!Vx$Cq;FJ|GR7%3TkDJ@D0NyIG@Rm?xWkw_kj z;-@6pDZ8l%2>#Zv>bZMcmI|#hv;gLq9`LM&A%~axu_N#pir(Fi0Zw7ShmrWnCN`UH zh)NFM$yHn1`$d^p={4gFaW900uQ5ZBNDK4}*?oT5zE|EiIY&qm3O0kRISfP>!PH$1 z?xD*zs2BxyLHrx1X9!xEEr~Y+_=&HI>3jALzE##2%2zNYiu$76*$9hB(;&p+-mh`? zsJkMtUtKz*lsu66*=QB-!(2P~z413m06I9!Y>Yud>i9ClADmuxJ0z6=Z1#kL^nOa7 za?y1$u~QKyl_qIiU)$6{rj%*>lkBVt76dBcI)p-nLS zimIBG6o_Y8Fc}T^{WsQGRwt$1ht&U>CETYGr`i9VN(l4MAayLe;SyB!cu5WZuIkXn0 zAn+2B$rN#(e5x_1K2ADLyePDlJkC*b(p34Ep8#r#Jb_GcnFIoYivbw`zl_qSk@k#` zU`;vary9Eedza6jfB!;cJcP77cYmA27qRAL6Ek(BpxxUg9cM+>xf)A_ZD~0gZU!{c z8LIjc!y%*4LFzG#YO z4xBr*p(?Go__RaAk6`il7WLVm7bNTOqZ`R>8jIB(tb3$MLXL6HtMc~cVG`m8E@8}V zEF@idFtD`291td@p~?dh&Q+v#?2^;r3G!7y7-4sG1s$*^S)D{4T+3|#_a$X^!1sbgPtTW< z_DHG7b2Te1_|7WwB|1Uk;3;31S5z?SCRfF+;&eu(^c>{0%(fAGpR#(&e~G7fDBLjh zd@6xeZr7R;M2ziTBpI$Wb;gpcfi!I7FbJ$%5xbk!l@zG#ZF=9F@h%T=TW&bnb8bqD zSeocNe~MB9zc$$Ymk(YWi`6$jQG&ab*{oVdqpClh&va^P0lVqoUiX~&f9d}(7?k%; ztvL+6I);kgVf_5gHv*&v6@*8WjhWWCV8t+OH-ns-7tp;dJw6`?C@Y)kE^eX_MG!}Q z19Sv6WUJ!~TTDhZ*?V(9_yT7Cq8S0_Czt*7uOA-{tX0rk5NS@P<6eCB=w-y1P~dN4 z)}txM;@zTTy9k9X&nT<|48AhX=+prX?$N4=56$13lvR78f;L!f%WI)G-C!a%VyE?2 zwf41=C1%5E8s^zgY43mg53HR{ohkZWC|wAjawk^JJ`OmDu!1)CVR+X%;J~EhI8?aE zo@+IY+u^D@->wwoW^U1-mxudL`ve@+tfpQE zDkMi-=-8o}ACfZex-|84i8+*aX`6w0tql<@;gAGR+5HuAW)hDUs_ZR8{tMmoaz68z z_dGglW+A1ZSf&&50+X8q3d1_`X`%Uhoe_-*z&VcViZ5XwoxAD;>bXtF(P&jp5~XoC zj=F8&FY)?IF6zZ`2BFuq1~~bCVs^Q@&FWeVbKIZ+A1)Ir$A%OBh1j|4%TqEIw*Lk^ zIgnT4!QLPJGCp+{f921Ij#>k#;|my_+II|oozQc|iz1{ko~ech4r6AGga||{xkl4X z2d>b8PBh_?fmP7ndOFUvK&}VF17aP-xQ_CIomsrk+YF%}93B=w;pYJAIO-n1qxxT# zSqe?5#E%e=0jmhVTGXO;njzGJEf3^JTOp5e&70{vvhUc`R0i(-ik6#<+$bvO)V%BqL&d$R^~*@<%u zS*Fk%z`WOJY=4%JJ8}%>$~&AWF+k!K*MFfnptH=O3XM8c>j_iijZBA+6{Da@V4ZG@ zI;FNP0@)xv{V~#xrvA5+iQ1xXvTqEBGA;qf4{2)|x1e{!hz2gQCf+%>D8d23CTQw6 zVd23l3yrxnmn|#3aY{HaycnDKGG52U-N@IgNhK$Y}OP5Gq`gF$0JVn=DQIQ z@?&?k^EWt^wsi$cc@7?qVOb@jU52o{r-Lis}K3=2h6ms)l17%;2SP zvu%QLPt})}>Zh!G;8FPe^*}X#zCQLJ>IU>k5x@}2Yh2oGzv$3v4rd+6aQd?9V5y~J z&N%ufrdcGs-K_U@ReH<1HcE^SoKkY1WQW#PPFB;CD*1@EArdz& zC8IKFONlg7JK}WbnqBd-Gmlbdr3$yK18Q^6h?LgLs7if!Hsej-k^UJj{YKWX=d$VsE(klx2)0? zidEIuRf4Lu1^f@tSMQhEzW-`Ey8BWvnz-ripY<-GL_H2x-w=g`QJ7|O=9Nd0Bt}SA zw)N;MUgpb909|sIS;*s{NSwupI+i)m7i>?(R+^%W*~+FHHNgW1`%Q|J8HMlSQj0UO z%~UgYM=Kx9CZ%XQC|2{zih|Wtcj3pP$S7OldDJ_{`oV$ag zqt}99`J?egnNF9~h1$-^8ZtVssU4kxVz8B{dIf^PS%FmP1iaCT6SvYd5o@5(48%+qmoows50%S{3>r)vfK!vP7Liyc&b@;Xg`4uU@x3yWOI~G1 z`8W~c4eup2^E_o7)K0yi_m?4*lF?0rx?{U6g`JEY#1VJZ(;C=0xKJjqVJf2=={2XU zI#elKuHKN6jEKCOE@Biqzsu(0%lzHaA{VF^N)yPeq|Co;Jz>D9*yS3s>7s4dZ` zAO10=IRa!=)wGXD2^jBKm7XgH-yC<0G(aAcnY?nr@FpCn>tq|VFzPPFy|aA8$GC@M zwt}SWW_a^j3uJs?g6?YY9~ZgiJhnX}x&3bBeQt*HrM|~&^J*qG+agGtr;*5c3&)Rc#TYuarhn)KC(Z_oNMUJ>4 z5>c0KdR%*ozEA6gcGNiB&Lf7h5?QWTg|4mBnW~#0u5hFVB@XmgrU?kRUFH6vqO#F4 zBBbUIx}j^;z*f#>a1G^!jkW$e+$+MruD`lg+Z(WDqqQYb5!DUu-A_k=%fpH?C!Iog zunz;V-b)xDtaugr4o{;g$}71nSaikG*Hk?Hhq>&wQ00I>86SRUY>U`_@cU6}!iFi2 z1TUm9UshzI1Cab8s`toGv~W7e+?NPwpEi%%e&ZGp#v0n$3}4Oh(DM?8_+SSj!=U;x zW}ac@?S^>%Sv4kYe3++lEPuaSU%;$$>v*v->*>P;)I8SrYy+S8XJT=ASl_fXsAIsP zR$sp^2mrdqw*xwOMK{t`U2KE+1}9ee{6%U9OOZ6D!AnGx>uFCf8CQo8zOUoNba}pt z^Y+8bhBqnje>D~1mC8HWAeMX(`+9I@n2GTN%ByQzR(km}aMe!H;yLcgSNe4AsJOed&q zy941%y%_nJL#`;C87?NY2;&wv8enw(ynH-)3M~rhHYstH!-1=5 zpIVc*BTA{?cS;d!K6fjm@jmT}G)BNRJ@RwZ;lakgKKm_jK6ps)VXOG&r zJT%!AD3wRq2_s3z<;uiGG&%HU-E8so&v1!EsqRIAL!o^p4yUP$zhA7 zw5L*>7X2EX(Y3}cHH`X88>KYGppRI#&{L*d;%MtdcDOvK~TE~_3xpaH!Hzy_jiUu`nL)Y8^>fXs92EGX10XYH`2uP zgF^)3?)!yj?lf1QZ_El4YZ1cse{N6!cWiiBGR(@JLDf$#*2&XyH-*Jnt3_K7*)WTW z=n@U~g787G7Na&R%82>fVe`Nt85{=U9vDKyh1Wm~=%)GcDpeqdKG)h<-jN%quRExw zGyBi!bX&<;3xsWu$f;{xp!AZNl-uNDcdOsm&I>n-SFx0`Zcsp(2`!D~VH@t7Ps9jr zEw$0_4WCX9f6aybf((G}u6@+^&=QTXi(VMre1-$X=;j+gIX5aeSqZGL2N?OFiorfH zdDw?^{`+?F>kvZoXpOX*Fkg+>VS#}+I^yih#XLz8clAW3>A7m_4v`4kzupe?LmQRd zztksha+FO~gJADW7}r$y@T}0veo`72ZnQKLY^ z3Kl}yJU9AroR6C$CQ65a=?m^5187+E4h>J%5D>2L05f6_g_EAy;k|Jj=+L2#lm-x6URI6IZ}C9z-0y0!V^Y=*E}2;9Dc`(p7Uxi<@g_H(;=V8_(SC zRl_V6D5?umAVh?cl=A^aViAtLieo+XbU7QwB0bbia6Q<0i@|%Mc{Dh)HR~R2cNWV2 zmW*z_K&`|`v-L4S;#8(e#pO+~;Wl`^$}acD7=p_}JG+rcI97^9a~yOMO2GoZ6Em@9 zZlX5o>jZOJj%;^+ff-lAsZisZ__}F-^UQ|<_3Iddgq%TBy6z4I(HMH)l{Qy%4khCC05h~C-tFzknFspp!-6I+_EyB7iVfN51a zAY^w52`Uw|7^O7gDknM${zLNpO@r_~5>%B?o;UACcl;&M7c}D;8ijZiuIpp2a6h9f z-zriRfy0tqrDTqb3Vtth%l&>z0Uuzrau+_`VL8X!Cz;^hcgn!dD0><3{-8wqH`nB6 z!P8rG7DM1mh4P=Y(8;geHdakM7ch6(E`+;2WQ>I0KDc0Al#e>oZ~{%3K7}rCXP36E zu~Aa%+rd2AanH#L;=m!n+<0t@>DNZfeK8ucI5qK=J>nW+tLlcw)g3-9(wO~VY=LtJ zf@0gb^kr--m){+|VCZcafy&K^4G+Rp*t-(&=)J`2Uiq{htScGhjyT$4d6rXvPf{!m z=o+dZK_ zP(Z`su4ta(EX1b(v*|V&s3P^PF{tj2ojn+JUEIJ<5|A2}uLu>4?gDQFkTbGODstz@ zwcxR|llZfjLX;NlLfAD{rJRhwaF~!m71DOLdXpr?qEBjEFZb^?bYG}INc3VuXajIR zlyVVlS^(fdPmM?QOm=CKes2pXI#e`@j_|elJ1kMa5zkwpcJg< z<|e$5QX@=lFcReyckJHgRWDqx4W}urNW=*~v@GekYMFgFB!FsnVp}$va9c0GkwlD@ z=SB9g8u8%+J9G-cmKEgwRvh1btD9uyKar`*R5-I3pkO&zE3;}DRf#6V=Jvb3>|p?= z(~-_W={do(Y*ZQm{pn*TYd~i}IUO42ThM+tZRMbzas?Mpb!MMnEg3&>Gu{l^U7Uq| zbeY)BQIp0wRK=y&e89)8qx52|BX@sOu)EGy(Q5o&wIf8dpH>JBBW+{HBqvFpNYBfH zKw{LjOzer@7dIS@jS9(F&KeJZB!l5MmoM=lXV_-%cGQixheYTQyUm<)wZ$VM%mMy0 zM4{;$_(B~<`)KxgstOf@b;bD;$+%I7EJbgKQ--4F zIT;^4RbTpqPyoS?ba;7iR`R5V_201+QFecDNwcwYG8GLTu89 z5cIp`igK7K#nr4-t#t{)br?_gf(=xPZP$XOZFr#pKJgSoO052~=xd3`kk9CGez}E3 zt9c@-ETi{=%yjk$Ny`*fR7ptMSTtzAYh>vtGVJ&_<&Eek9)g*7OZXT1x&p(CPqUS~(SWLZWd9&Vuxg(LO zHJlnD^@^#2`UdC)*`9uh&Q}Yu;iYM(r9D4`|64e$7h(kvhYGyaoy_y%IwH?~%JdN$ z$7TC1Zb`^>jw$=nDhu?ZeLJObFWA;M%I?^Ng{&2k8q3<=n1AgI-J?48-Pcr2m^UT= zO$Vy3Tr0}ZmbMR~>OmoyTZBDydslbk@s$=?Ow+uh~UE!kVK)4kk(w`#w+0(Kw!!_fyjpm4;RPgUF1sIl-eKsO$3bIGrSr* z*J}JnHZN9%IH z!p~4cC4gOr1u*c3eoE`^kueLQ=T}{vcSv1YoqegcN`Q7IpkSV2SR$>7r!xW=TNl-P zk_^-wR+OK4pCs?z!-y_ev-NtiJNTQk8}@8Wi~ly|s|jfK>`_|Wn^)cCq<^>t?{#VO zxA3I|P$%UQORbOEwiRu&T29`BNB76z;5Y32rrvEt^fbfP=vDRT8@hQdaIjV85|I|T zLHEJ$0RsIWbYzswKuziPZBk!Ig*5V6N?eamzbuosuR7Lei?!Q2V3)gV;+J5`x1Dex zRdorB-Z1;qZ7<$|4~n=A)`vk19=p@P@-n8zAWshAePuUzby0th86@pYEvIoUwa+@0 zyxYJrFI-j+scsGIdmRaDF2id|?KICR zvQf4!9H>)y&?YZPp0MeeSU|PPAs~QvQ;BPLU+Z7BLPoh?Afds`l`;!{Xk18|8*RBn zdxjp8KA#?`Z9Ri9hOsuQLz{h92Uqc&Ssg#~W3`$>w^YR;gJTCj(;hXMww_V2_Xs5! zgi+t*wO5s67)-b~#(SMks39d7O-r`8j2o zWpmXh)Xko$(wld54a|I=Nw)|}1Js6ELQS9D(p7O%K8IVNTNbVNwj6)t(z|p2L zySk$vBZnssZH!NUXeJOzU34Gc0|l`2>XN_?gn3Md*4v*Xo(p!b^ zgy+5aPO<-#j15^c@Jx%|y#XJ&nxSjeTDd!OMbc+~svMGN?rKU+{89)R!Vrd;jv-c1 zgAS9r6ZXzRL-v2n_YTENLc^9brLg*rHbVGY>~^D-jExf_t!!naNF2!x0!kDtKWU=M zZP?J?wD_LT@`DtHyFDau{?(v6f8(?!48`h)t?36-o-o-Qwv z`xzkD?*3EiCjl3Iz^EnvbHaWtLi!xy!Jv75IPp9As6`Z}CBXc8qD?z2t-p830 z7+kU8RxDEsgN1qNAQf3MzPH=mE?W|Kh7o^_aD-oXS-%5Iu#gN@vT4#tG1=YcmK?EP z+-@=;Sj_dN2~VT#8xoch< zb3QAUZ;b_B1cgYM?)D0-k*`IzkL@Bse5?{{+!e>@tgfA9K?UVbpQGS`NBy*TK0_+U zEewV&*QPSj79bBs5( zZTB`M{#m1%s8R6%FxC1r59V{rsA}PqKW}Brh#?2&_{6s}1Fp^bha1JK)PyEr2KFNc zwZGx$4TJW}zh)B?iGk9E@)Fl5ZlRRmBR04BMpp%P>oOcQ*xm~->p_nUl2Cv^DIaBC znDaFmn&TpdjsfN>pP<0We@QzOCn)LlR@pN-C^v`7cVu|xOPYL@rh7$#1@{oSi@HbP zh9JAn;z_P%bo$**MmQ4Vb!fv`4ZAEz=3|Z4{RydvG6X9l+}v$z`qp6)fIm8l^o2_- zVuCF_Q`pg+tSq}~vgjuC1{+6gI|5I38=WgW^euMy%h5g59wnjJYPZrvJk0>y&zuu> zZxz;aHY)p#n_xFxHqgE;6w}xUuD;d;Lgw0r(bH6SJ7vml)Sr|HO+W-XBy9z*1(HQsaL~*zKRpy`Dj)RwLu)A=#P3q}EC{BA&;4}$vnWZVZ zDx035sUnzq5Kg+x+PBMMwIH@3@kSlihrD!DzCjDnm!K)F7Ef)1*mz%3@GIH^g#i_K|wnEHUFN>*a_7_Si0y9 zbeDleZsC;Q5Z6iuW4HGl+vpJP|H*;!eJSyTB41_t8*yZG7GqgJtD61-zZ->r8y;@i z&;rG3Vb)kzMysMTIZxW!!*C>Mj#nLTHdl~n%<2M2C0y*08Ahv*=XR{!yC94lQek>C zq!rgr`FG4T1X5fMUQ#orCJ*nvXX?s|L`m=kM@90=r2QqAIkuw}f4GDlj6ZaeF%EmD zhP_KCx1Nx?fBH<0(a@2Uj2?{(Vk()bv;g~UtF08jYVcvK*F}gOex$Bjrc(n0cM2Y1 z%R;L&r<&|V4fDF+gj@E^NMsR4P#t#9@ht5G&4GvJ^Zg&288DO5{xWRL_eIcU1sZic z95$AaQh;s#dn0U12PAX4kkQW^I0Yh-!(90mA6bnJv(`yFc|A3|E%dYW0R+=rP+Uo- zspmb;k$L)I-Ub(pgl9rb^XN5Z<$5uKldB6l}jni8@+h9dZvY30goK{NA^`0{ZJi5-Z`r3&= zlU*0?zj<+@M$=FvNsS4>++UIfvn?+W+H2t&vc7EgT`d9-lT8*8X@BKw8lWwi4x_@G zfPRC+Af9zrc?n3jRA@gFl&+m3%PI&!<%usal0E(w{dMl z423dyg%j_TyO_iW;feQud+S-o0radJGdK>5%jGJ0ryxH?eTgyJ=J! zwAhOg7$a&+7khCbQxaf6pi8Njl_%%xCqsEi7P_~*%D>PtSkRsre9#eR z$iJtX3c*h)^z$J^160Atqwb~t%85MLO}I3eQ3!|iIpd*U&PmrsT70VN7l4# zxO!n+ZbWqt8u{!qh(ut?)`a{_c8m?CVcL}&X!LTdK^_&up{%&H#NgoJHbZneVq=!L z&xSi0s?(cu_SXQe{y)S~9brNy#_9&ti|z_|vVqKvSO{j%aE@_S_EL~G^$+`!HT*Pg zBWmT0-`ib?w=Ut6i{t*>6ujg(kJ!Qn=cjnDilXSXU$o;)qLBCJ}0BGGYiRO3& zclW)V3@^T$K7Jj{go0ev)p}g5|C`9&R{F-^pI$4P;z?b*UDavtn@goXJ>o9HIMtJw z`aIfmpO4MEJHf`6z#eYaIQf>m?eOj*2|br^b4MX+dyrL_PKwH7h?(6#fih&IT3pj9 z1-fSz*nB^*_SB}vY)^>FW3BrUPd}0$U~uKI(NOsc*HN(|mF_ilH6Q!hG&exJHj#2( zaJA*iL8MA9YA18KnU+O4uyf#U+%rkw=okRT>o}6aydepC0|XugcD;wuoF#BbVrCdU26*z5vZ#N4pI-S+A2+%bp1BT zW!@>TkZ@fQL4(d&6RWY*KRU~4JvVIB=p`V)8ZIM z9?t@ebf#>DOoia8EXT4P( z-$;;At*>yMK>bMwr<&(aZKOOnJ*k+=pWm9JIbqy|$8(N1Gh=cK@MnThwOexU-rjE> zI#wF{28+DCA`t;#he&FuLr$l+M4Wc_Eprjo_4VKkG_&+u&qxB?JEjRu_z+XwRQcyT z?ljj$HotkkZ0v@S90z1@@IPCVy8D$6;##o4B%{}oP^$@SCXZAZ9k>~WZsJ9f_tb&K zS`Qe=nGrEl1Xj-f`;RCx7BOTHjKd!B_?kP|%T0TiVp&h?3F5Ix(xRK$IW8FO34R88 zR?!bOmg%Fex3V?cX@=us%KYyvbkOj8dVU~P(Cou26~`1&TWfJFzbHaf_qw4Xo6hXb zL^W{BDI{L;gSvit4fVcA)*S%%s7Q{s<7JlKu3*A+@SU!7jf+06fl0SLN|;ZqVpg8W z@+w4_{glu@FjceHp=gR88it5`3Cl=kK*pb3gd$wki6Tl?pm3JG`EupG`>wh~BZ^Ce z>Hkn(zmy`8Xpc{_28I@$Y{BZO*(mqr_89Yxkn%R}5mGj?Tfp>=wvQL}x@UK&+>PVs z-@_X)OVdvEgI@gs>9j-Q<20}~3R-FYq~^AaUJg9kHgI&W>bwIyqQj&{ZFa@q6aBuN zJx6J|x<@GFZh*`wh^OAoDuZ7E{)f=TwF_Y|6gnx#itoNmNMBAeM0+S(GrS&zv7C?& zCR1XCi0>d=T0N44F+pRQtd3Wb1N1>DR#YoGSi?)pVMzvTc{XS zXToQ^J-t@c9fk`fWDNWL0G#xs+JlhdqocMj1lUFe+0#8;BS*3I%6WYp*NL`1E`O;( zHO@9Cy=EA}>_MCqY>T|fseypW91_;0Gi{a3YC#1Ahl67#vU{W)t&>{RqA*qTXH7 zJQghbMERqx$I-eb@JlF(EgRH;#;|B-Mc6DbaiCBR9L%unE9aXMl-_4TT2xrY%M#}O zEGeBz*280nn7VE9!B-dQ1E+Hq0AL$3}^1e}wQXLc+wbc_e5%^Bx5g94mNly6gU zkZO8}uax6dyC%!Hz;zO$Ih+jnC}ogH!|hnMzulSg=662}e?B7d%KR3mjo*a>b`F)$ z;Haa0e9gENx(9I2V2xDvz{ccw`#*e+Mx`Cn?xDoQGHFR4&`mAqKx1p3_%qwe zO+p;xf{8S+|< zQ;rKLIWaZwy&cc@_2=cD`bs z!bwk03^XM-`!=wKQGFD;59`B}PKh^#YM!<-^=Qe0J@~c08D-1z3o#ni?~WmxP?d%% zu1XGmUpmJAcVJK0{Fl(pRy?fQB3)WTMv{U+vF-vX)_Mhuj6ws`5d(raJjxf43=hlC zHHFmf(TW=%Olf}jT0t}+uMWCIb|;c@KdfIVqu3&;j&ZdbMfdDWObXc3ry3b1AV0%j z-8#8TC_fxm@)Rug5Sb7{NP(YHO*G>J7p)nTZ<&F$_P7B);^T~2hL}Q{-~mVX_~z*D z9#;l~f9U}`1MA^DIwML1sMG=%)r{@@Z#*c&FlmpXMOA%FmFvnZQ>6uSO*S!8tPzz9 zmm1Jj?E=Yiv?1RA3h|8zZWu3&5sD}ha)i$3iDV@xO6I54@%nw7$5Q1*AzWr3+zMn-5eZ;fC z3nRn!0$lH|P;)7nEwLtk*5LJfm@wM60~QKiwV(B*_&!nmY3TUj%&D2DIFgA5MhIvj z2sIwc{#=(ZeYnh;QuboI$w8giT=fPHdSg%UjD__m$4kP;o~)dPw>zwo*i6LGat+YWxF{of{6=&d}A^;3ifCro= zm`Av{CDm3snh`j?QoZSO314vMD1sffh=Nsumv%%+tFu*QRPrn*=YR`L&d>WI6e+oB z7tI_w(2}AJ+JeIK!9z3K1G*gi;{lb8XgX^u>GqX)FGgok zB#;x6Y(pMS@6}K0bmQ0IoqIx6dR3NIsR=LZcn8=CvaIoA3sh~7Gs+jD+*l6 zX15G=a#hq#Khhy7|N4})QawGxlbqCTKRL*_j&>1_5p!=+Ozw08}{J)F=o z_}(~z^Lr!hb&Qw*OrnpLO_fH@1o~M9jY-2;@UC7J)$xVUi+S3#I7(6eSB;m#4`#?i z9#N;p+;Az)UkAz~+6usXmz85u31K<|#z~zDJwWU9 zf~nce*lS{o!fD_SJjPKT=+^p4XZEyN8!?u@B`x9r7G^AM0NfWAmt z?T9H)#xQ^}M7SV55*nA4mV(qjD4DNO*=DggYrc~e05rD}2MnKja^2nt7zRzIcjXd7 z^IMzRiIynbUEc)Y`j9T&zHcXi%b2{FPw5i$cv^qA{LOlP)lG9r?R#XnvqJl6F}66n zLnEZwST&AM9FXQr(KjWNfEu?PXL_CMepU`0Ve#gj=JZB_WYcEn)3QmE!-`~v6O|d@ z|6}@>Ab0x3NYm>0d$PXyXg!s~MqgudNoYg7QxClVlE*H$JqrgrawH2%ogg_PA)Gi^ z9-au2031KwaqLv1ym#!T2)7982CQq2n2R+ndS^4jS94`#iJ))x^HYR~BVd5E_o1Z0 zAYHiKJlNCB+a?dJaQosJUb@_Np{B%lQq=}Bx(`{HUY-&Gu_dfJpl{eDs({hk6a%S* zVm1gJUL1_CYiCvi@tMadKFXIdm4@nOmJfoB7B=N{GKRU`@zRHuFc*D}YyI~+~mjHREnjQ8N z4x#fXWU8JtEAljt*!)JRZT(N%z$=`#&5XU!EF!(!x370w>OHwF(Mi2eMzqxMQ~BON zAc(l;tghIE^5+A<(mGNRsGESrYs4X&HI=$e?WT4n52o^ean)*gF<5EE;ee9@ahSCCEJ02- zS8c~!HkBdsuUxmG8_tGe-QL0A`g-=>+fz8M& zD@%Z@RlG|zlqMf2rf$2yI)rj}MrGL~BYGYs8wS(%kr>v>H)mVHFAcA3(IS%8`+I*i z3;M62{N6~!Ag&p=f+Ja7nPNT{pVg~dimMhS7n{F-`?7mh$+`K>@`^N7RjsL{?5MKE ziL`5#(mtJ~{fF+dtWpgF*g4^185U9)EZD-*i@H^9V6so*H-?P-9&y@CLU*fw|6u&N zfcO{K_y;-VfrD3cv!z#tWudFHh)oRoM34QNlT+}Bc+_@UvmSRQO6dJey8Yp1*WcNa z8rTNa{^#QWQ0eBkauI6V#WW)nYKJ|Ox|rb8n8;1+`CsN)doTYT=TL07mM-~nq|_Wf zrg=uQ9c7Q0A?z$d0G<`GECqV_>+U3o;-`chahzCdFS~b5^@64AWo&eiW!`eziT}SW zOO| zqoH9OaG%CRHIO$j-IyLaCfZGM+^-(%SjJig|1~)hYS^YkqVRH{+~TAQ5e=bWXEz@C z2XV7GP}Wp!T z;p{s`BU-7C_caIY7v~2DI`znM*j&dNp++g`4?Nv3I!6U_IoJN_HWWO%9FBqt1K(y=^K$I65;F-G@qIU3R{_YQ=FKPKPIy?U23&ZcEiN)_qw3 z<%IXs*~j$^Fri;Ei%&8@VHsKJ@mal?{UMewUG)jwG5dAjdJ$4%1nY{5#49r2qH^v6 z3pgbwM$&;KS%!?Si5pCWjhGe4e2WpmPfTc%?rDd6lFHCikM=PNP^@S0U<|P>%RmHc z_sv@`5cT8PxPRKIGtrAB_MMk~c~n0R!Z(mw)4M#0;sp9k4FfMq=dO~N#}%DJ_FZ@` zs)Y@jees^0tZ}V?-`C^RC5st={kJ=xMEA4brFAQ%L>(v~8lTztoa+F9kVnZx50 z+3A;*bXw&dK&4#TmJKwowcwU?v?NKx4CBwnw1hD(wLKE-awEjtQ5qCXxp1!Gdd!AQ z52v%(SV;XWc}uQ&K^IJ5PQdF&``mc{QWATfDZm#EFRE#RxYxB8o)(o%j#tsEjtEnB zI^VBxa;Admvvsjh`LnUiLv|gOa!BVj_(>xw;(#+t#b2N5r>!}t@p>1gw(G~n|Nlzp zk~ekG`Lj?cw*iv3?AvL7Avi@MXbOUDLPRo{_Ka6?#1;L#EiY&;kBGpmmGTC+-lD&g z%|RN?(Smt75>|X2tTUy1HFvm!w=JSY@VopZRc0)gq887Ybhn)eTIm7sigutY9`b_Z zW@S>M*y0-RAj?kjo(HRLXf|LKnz05_$bG(^@yk<%?qJLUqsP94hkLN>JJf8l1wKKJ z8Fvj;rYcQyh?ACnT}BX=m9RKdz|+9PbWOpIT*qBwL&7i8+7kx8loJ5|^Rc7Th4MNsX7kT{+QWXFB=#wJYeKU50)vdvqS7QkkfvsGwtZS5I$H+#8O+ve({~+; zl@T$X9r;d0oIQHwpa%V@`3mS}E<53@;3x*B zSB9PA+VIa=12u_{6Su00Ib@jDPFnA|v*@0e>jl8T$3$^8>6iFg%8BS32aN5?G#;7X zIw7u{ejXJC4Sq@)b9Rg@OND-j7TtWLNM{-9_kaVqz0)Ab^*fTKb(SY*pi51CH~3@-qN7uqyOul1SY&k0%YO zTbDPlz3IJ$I6=3o-$+B^Rs5cABqGQRg`&%q>S2#*+B{!3y&T6Ku^b|_~y()Gmz z2O#nY8!1BAm-!`6Qx5IfzA92elmwUuj*n=Az@O0Y!BkwAco2V@FSa6&SahOCnSCEx zm4SRbHp*1Jw&*jY)}9T-L7H+k^F+J*A*&_vp>8y+9@{D?#fkZ$;fn?vQkR4b>o_K_ z_b74N*L$uf@NA^Ra}6~cK-AySRy6h`&y#~Kv0At7n zfe+R_6r)Lf$FOHG@6bZ|#C(0jk+bq}MkmOv7<>H-;UjVgF6z@D@Qu>V&MC`Vei&SF z-d*dIcaFY)q$506%IY_rK<`jh&t@C5?*>Z}#U^3H-T#ObmZu>R$Ncva_7v8?^ItHx zv2z6sD2lk@pl#YTV;gZ|%?smRMNwwro$X=cQK5*Z02Se%OgwILKOOK9!yQ0W1A!K$ zW7K|-VeRi%b}=i|nQnpRk;3p=CcRLq58-SEt%mxdK#zOK1q&BG0a)O*ui+I`(^)-k zLywKl-}(Aty7{(}y%vaN4L!1QSS`b6zgCC%E57#BUdygqMCCr;dCdXo-(dAU>d8*N zE}FeZyLJZQtZDKDk8$I-hS#(E=ZgDB807TbV0Ufz7Skak;&B%9&M-1iZNnNGAI#tU zyt=420QO{{S$HQ*xF`lMKSS9*+WVj9bZL3T!M`nwT4UtnuI+^{u!ih1{3lH9ohR0Q z(H9LFE)a}i1ZDH$*9E0D1u2;C$Y(a6%2duuL&}|?)@Mssd=^T5$MY0!+G!~^aSsVV zo#`-LcPN&n93w;C-s4M#W76hA0&(K=)`0ER`N&4v^`~nnh+0v}vT}w!?EHJZ9wF&E zo9TSB1+7Ji>FI0D#JHvy9nY8Y&_qbBwuZ{%qPy)|;y<*7Cbvr?q9K(%Y#{d_!ow=O zD0%u-krRNup9+Y}ubXsRgIN`pxXD#gm4-r;t~{_l9L+IzZb_-|6}5g?{Y*Wh?BeHj5# z78eoafTva5>_jle&wCl{hxxe3I7a$h6&FQdumLyawZQ*hp7Ix8&E%H_7%q6_yy;|b zHn~e+j|U8iKItf_vpL^LrQ*hpFy~Vhe?vg$88urvbIN*|uPQa;=a}Ug@+O3xx{)w+)tfvhn@|9=#y~m8;!I#h! z_$o5!*A%kzdd|!)3i^+k#G;tj2S!*MiX+23gzhJi*_EQP-xuD5ApM~0=d}^~_ueFq zcPv~H1H&f$$d6{rG?lrq4P@Ll5)J)iN_`@C%GIC^;A)U)h#}f_()hW$DCXc=1JG1j z0zLHhF+)Hf;F1^lNO5+o1bD4>8+XS`)nVU(iXI1Ck`jfD1{rJ1g29)RaU42{p=26M zbT{Z2?S6If4c5-xk8l>%hJYG<~wHYOnc7ppq(`?hIzn9&+#@ccJQ@6MSk@?%k9>fZTDJY zO@3m?M>1HErE-{fM;BLUIRA9&1jTg(bl)FbGEQ~Oku9K@$`m$*_cXZW1npJZ!$*GQI})l zkjNpj@hFwMHON^(fPR*^W|a&_wIQw5Vi39!F}mt>-6BUw2OcN165}C^ntz_r39m7- z0}+?)5r-SrqBiRl547yn;T}QERLqa1VzA}6TUKf;WsQ^+HlgMiCma^vy^-vup5}fc zpn*XSAIlrk3usFz>FJ@P{#KL=J=trclcC;?nj)sk>!g?4{G<*{2sD9OP#OXt1_!G3Dat89Axil26E>*aQy~Eu zhM0P3-C=c}vV*W$!JXF}bR>{Fz=4$F6L)79DHtqJohjXbcNQP?1!))RZ7 zv@dOwAak(nI6D~KI6Z5O-{}xRn@CX>VWlM{$4%>*x*F=50V|wxguV$n;9puUcWgur z3iiD7Acc~cUWc6g2< z4mE8)fY1IXMPfjJMgaTzZbP_Bye{1^_bKJx>Lt0;B<5wtf%V}MLk(*t2iO|`*3HkF zl7mB?Ixc!RIJ-9z^%Ky(>ytG}bApbepd}^W@i{;FG6Hm6H0vO;eH{8?on(~ZYl0U=we_p&gyp18gwI+-6o~T6Er3k4gn?zJjH6~s`JN+Rg8dEBbxAS4D>Y~wO`-4k3GIveE)0mE zT*R_itt`=7baTo*f;W%x(%seAA7>ID?35k*KX-7a7d`*3s{hawrwhaDq#x(h0S1r*0=vSiM#2N<|E&I+mq)y#W%SA$EOi$O(++Z=AJr=;5` z^ZO|W>jHe2GPf+Y& z&%3B6T(OP6BNBL@U(0$KI5(5y+3()p+Oe zM9MUa8s>kdaW`T6>d@fu6+?!S1B?J7D$`!#rBDc7o2a0bp%kwtq*nKPSuYZ)q)uRb z3>)=`d^@!Nh|M`vyz)Q>!1s`cwlADqq4a%S%_v-g5||+B{n{q-+{HgrMA! zKS9sCdPE`A86t{m=vj4GC(vcyd*^HWXzu2O8w@=HvW3dbS-zoIPpDHlv6(MWu3tb* zF9}{*{4e2=R9kxc6AXLn`6MoGQi#JQ!xq$ts*Ah@Jnv_2A2hOQ^S_F~F=asDSTc(c?|Ld(hN3M;KZPs*CVJm^}D|l)x_y zj*nbe?vAa`+yDhI6s5TZCwXL-@suaXG3+kzZ82I8!WZ%&CRb5fE0pg^E-CcIgtiIc zFv#T&rKak1+ah-W-ne>hs5KL3#qQDvZmT)eZfo@``Co$+5{gza*d8P+Fl<^(=2LKq z>T?>z<>{ngYJ5bV*RU&}|Lc%4Q1I{w7xiFqan6*en?ROH!HJ~??%9A~aeU#zO`>Jx zAJ(d)WN?AxvGTSRQxHix)xM4)tp5t2B|-+Va4OskJqKH@GYR562;AuHS?!D+%9kk2 zRGffSP~ok>;Sm5qxKsxM?_y4T{`P#5&P7b2Jv#p1U8C)C)mNIRnmiHfH>X`Y>1l5V z2a6a-yLQAyRwMAEq?UAK6x|Q|ZA$E5a)uap!`#alfUshW>c?j*6@y`{zyZ(7Xl;cE*ggEH8dy7t)Oo#_9=|5^V>h~vA)y$C50Yn@$kpSd-r3Fp2 z`OBNw?rRksi3?1=p=1n>6#=OZ&1A)%ays@8D#4jRq4Fy7_ThVYYM*|4`FQXK+nn== z$Izg9GADj1#M&(#VZ7zv?hq&j*yd~Vtq=8bWvWM;+{ZGWR80I)TNCA$Llj6K%ZF8Y z)Bg0_oagg(Pp~Afw|ex3U=5H5*O=+ZVIzj)(Y-_OX}L)MucfG^jWD4!r@9B5*$H5yHX zG&laNs6;L;f-h{4$y?}148Z^w7wB;N6kpBOs=~f8zif{`5|LgOr)rl)BD-5O|BFdK z!*uTGb;hZ0{l^Zb5Zk4iIQ&-)01vAan}Q-N3>Rr^7<{ar%v#4PFl-tS-n%-yn1YTc zjX>8c$iW|LUjfk#qf*(24imTkXYGcLl@>A-qnn~!6gLS>G^+O2e`bL|zMd|>F2!cU zPf?=W5tOx1$w5GycJ^?^2xwQmTv5Ok{E_yLqqh?Sh3hBe zrx2^K1xYS|jPKeA#^3BkLMIFzpt1lU`GMZt?`_xs0LKwwy`A?Wlv-;pi)+g_76_t` z%G4E;mrC_MKz{X2_mWk-;m*4RA85C*!lYvP$&hd0JZzVRWHrlhjTF>v$-ZsnzWmF! z$_mLqsT-}tG|06!7TIKMHA4C=$;=k>Bp+IcLUE&YPDC1I&n0-k$|37 ztjT)#dd9yFFR_67+l*RpAqS3xIyvRR7S(>)Q64echj&S1FtO28tGX5K-z({)Kr%*N z*}+SgNVrd$YYNr0p|1K0PnLRd5e!^#m3Gj|nIWwsbzKQ1k0p>TGYe_CM=1+2&j23& z0DC%kl2`p)7BZ~0_R;1&WMJE)=WI4=tG)%Z0Ui(S0{!&RtN#p3JFbjeEN&iu8-grq z{fvJo-tz}(N>eLBGuv_MF8oPqsI?<>eqDp|wZoJi)~N;Al}SYa3kb;5NEQI4iKpS| z(=Qj;>^gj0BXcG8)%_WQB31^>yiUwQzajZA8KfVG?fBaw2CCIqA}1?fSLyVIJ0I8( z#R@S3E1!hL3dbSeBICj8T6@;b!xtZa%q(xGiwW#f*`Cz#pk{KC-yzKksg+Nc-eodf z*TZ>BXrfS4!{Qs%OBddY0(!`cxf8W!X8Qpt!2NjWSy3)K;4nQ|4SnLFuJ`s$bjJBs z;)g_k)JG#eHrhHi$JT|xD`&HprD;i^3$9g%R1Pics`G|Vdr`- z5#x?4=%DQ%e(s_+Xce`!S%)nb+XQ zx>SI2=oHApNerM{W;!&85i2gP*YrZUJLVa)jw!9jgSJ5Ov`GJkcFH^0>II+m$!6i@nuEz=WnZm1%DI z6Iw2N)_Af}r|xW)xSS3>$Y0&eR{Se3p}Q%2REqr*r=6Uj@3ro{HHZ55*y%i^$JsZC zes~wC2BbYjS=Y5^`nPdVPlZ#ds@FGvus<(_zmdV^*C>Jah<(Lwr>5OKlfeK8n43|z zy@fQdNrn|4Jc#Ky+!;TV;9fLHrW0jY+GLM#`{+&YHD$~nOnf=eM61-LU00;FF-fnM z=k!f4t@j%-9(Kt;9r(9I-85hb0x%C4@Lph#h$abX$@!xLJ6ZTyOMG|Hzv-a37EftT zCCs?Cy^n&6$Z4AY-3*6e%W??^iEIsf(IS7?=zbi3N+r|Y=|Q`b1_?Q6VLG!sy(xXF)BRm4=yw^h7sSx1Q> zck=~v;k{p4De@91@D*7iZ=xT(4}6aSfq_;9z7x|LJ~X+SJC#KbIW z#C$jp<;-=o-eDSRiG7|<18AIM9l96iUAdVH5I&T(c^>cS&@jl*9h`*XK3{ zmCU@U1PH$a18!GeUdqt9*zLRrkbYR< zAHG%VPoU&QOU!{*oidX)A@u-~Ju=X?%p?!(v2xnM|C1~RPr@#!<{ZhzlYlw-s=_2t zk=%%GqZc%|nn{hz319M;W?P#onjZ@%_os8eGB^xDdEfuuCQf;nNzSKdh5aN-T^>gM zs-DOWe5k9v2szpzL3X-$g}u9xttUzxyivxCfk5u)DUI6ZLv;Q7W>e44Nf@#(N&N@z z1DfvOUt;YdBNPoQP49k00@{BkT1+R`he#hg<%g)TG+I-;^>2MtuO4LsH#VWDPl^zv z3nooeKfcONaZ5q&f#N~@Vt;lFa~2OlvC2sB(V z%(#0Z!#-&XUV13(_yoZGlCrQdew_+`9?S{eM$=v;Hj^XE2u1}VP5IczF8mMB)* zM0&k)k=r#8Yx3c*x-D9J6&GJoMMt7p*wY2qkMEEL zcoiVCU%aK1zajyoDekKM#3q3sv0;U!&=lV|78SgqwiL50-I7W)~}ahMx?*F0GI zw)R5t&F~fS>-tk^9kfG8{`95ZAZQ6aGJb_ipG_Qz+A#7?AvRBU)D4OgkB`KY0a>83 z*HLiwwe5b9n1JCM50WmYpXbc`EH)0BbrKvbM#HDJ-vC>R%WbjUC=Agt0TdyldJz`i zMD`dwl5*1u4Vn*-}h8Zc6t^l6^~Uyv-}W2^F(cL z>k4vc?dDTJWp?~hiacqBP1*KCW%m|sj|qEp*dOs9rAEf*_g9o9smV9fBsL=&IOIn% zsihFWPnpT%sDP2NZiBavzVwZIkgO`2JVo|@5T8_Y}T=}(VYZ)b5JmL~3% zpjaLkFw=-Y26NvFf?B?=nLaWqQB{^4r!;O z-i3`b^8fyI|AmjvVEJR{%leA7eCXpQ$m6KATxd$EzwPYA7PCq>Y;Q`Ndgrm#R9SD@ z$cl5lGE>#j9N6+xdNi9@RCRxRhf=`cOaAV3Q^W?e&$%d>?^Kf(x+o^sTvyA&R3GWyRuiZLB0c`gy;iOt^}94jALbsKrJjUh};qj=`y)y zER&0?iFxRAb_Rkq-BpyD#TKQmht}>l5$~(L3lcpayz?G^xj_-!h5j4yk{hQtH1WkR zR+&0E>i#}E-E9C1H{P;XVoThRZYx+ou95XtPvHR# zNRHX#tsBK-B;Fe8&CWbdDrq@52$6?Ee7h@bF?nUls2uV@EfG-k7fsAldK)tm5>?>z zenk&}z>Db@R8~>X>!TSh>`8xGGcBeIpuolJlg{^>8r=aWqg2&uyey7(+Jb3X?{(1# zvr>uCsJFWVFw8bw5LX?PWt!K^#9unO5X%c@L1f*#EBDp|W>AWi<8SZIap)4hzOR2B zzzEJ0L|XLCS4hF7^1}SQB#$7rhRRDpyFqQT6S$45Wz}T_LC@~%@$K^m2-yIdNI+MR z1ADK2pXC-69+-THxQ4;2r8_1WGEtD#nP(r_5G3h}SSJ~<21i2l?$_6z(93F;p$4X- zG3q4{0BkM=2PWDr2&Pv~gs3lt;Qk9U$%UsY$Sru5`MH~)m3m!i9(>GnA!%3uGeFG0 ziaS&-b(?21X%QcrEA{&Y_Z5A-P|5Cam$Oy15TyHJ;U@bS>DXaddzq_FtHeh=H=(5k zrON*5)nVOp44#>wF5$&1NLg?8TG{;+Cp0?sG>wH$<46=fd=r2La3oostqK(`{;HZO zKW%oY7jotN?G3xD&z28SYKhFi9F9qS6bDyW6ei zwZn3wJCoxg9hiohFCX-gcvCe0fy_HS;^JPq@+@v;GDN$D((1d?MrtTKr9PNIAbpBs z2up;@7W2m`-;TT0fWT0=lok$Z?mv0Fq51_kR{#Avr<-H`2A{Y3e4YIrc;2?q#V&*X z4#nta9jtn=CJ3W!ex|k|IN)+ggt71YfP{Luk~eaH_#q4yX2A=NGHJa$M+sv1eWh(0 zCm7_dgtKB0K3TCmaCKQ7m{CyKdUc!;eU=GwGaiG~c3Q0Typ0uW$aCjg-75tMOEZ}X znT|49hnG*FVx23orD#?Rmm1xqig{2f-Pa-( zL=ZR+9><5V_^4#~4xl58G;JtYx;BxbHd_fZ&cb+ z@yR5A;r)9Dy1WtJOOYGXjmp@`={_Ekbl5Z%jr z?07DEN5i{MZ^;uf>yOE5Yjxn$3MdZSah$?;@SgugPn2*#7-AdOr{(FBIe+S*r$lv9 z6Bj*r^f-{;l@XU~0t7+Pm>y4ua65B6(Kfr{`A! zhviCF(u#0d01ONpgm_rIt5HO|#;t1FCVJ zlow?D)et5gJFR>YraeOGqfL9I?LS!S<}C#ihHXkwo5L*5pKPA zF|}aW5Mqc=O7_%Ev+DG`Yua)f`@FtW3(|wFy#B>`*0O6^#pV_ZDr5vX5cT8X|*o;d(@q8;`$4!l#KJyN9iqG$8DH>`>ELL3SI7gmFLz zzoeTHFYD`~ayi$YZXk9magfbrc%uE678e)K7O8VD2&Rc6ANRS-A_yCfHBSWw=Cq39eRbPBsu{uBAEvPwPBs`2bc~?@ zr%utd-|?jBMz6mw@2;~pZ<6OfcaA{8)gTE>->}5Q0R{qFZqnj`gO@OQXTHe@DIu|D zcE?{&_XyDC!t>o7^W$=Yy@Z>->1km@i0t+v&Q08KjilapLxGcl9 z)v33SPit0&JqU}a;f?faEQI*d$z4Z8jr~9fJgK`J6hotven?`jJWrkXhf_1DaS(8T zRcYan^169DOb;qU+y9eFolvxiZ&damik21aFHbl4mtCimtkbR3If8y3QiyoJ>JRn#tgttdTIZz6uRA`j?#4L}y@i zKvU?h#~;bRkbAN%^n-DLlGFsXLIRaFc^9&VwoccJmYk-o!L<&*@B3}=1KTZ7C`PyF@xob(t(-}H#nz|>U5g7 z!h1?P*Ri%|AvSqilx>>I>YU8>avi~LIl^|&_K2840!xa>shIB!wK!&G;HSZ6Qyk!? zxqfPtEwd|dfZC|pHMiprth(^u21s$Swh5K=K3@o#ZXiqAD11ZK?%`>F^hpRTVjzt- zrD>|5NnB{ycB9D39br|!i6p}(jm{jsNFW69Fx0fAGbO^1Db$$K6jmJVz-Y0E~{#QG<0M#7XwvzX>+U9XB|nQSX9GGO~*R}iNhTofQtFxR%Q93 znNv{dbr(h!rSDFKu#sN^e{{4N+$RkxFfgRJkr!7Z_P5I=k|+HR)O{VXqBy-W z$vDnzO`(r-`DhR9y^lI>RqBJRro{q_b~^`m7cLU=gi}d&Iqh}a!}!}*2`i7W?qIL% zd*3#H+ibM42%wwwQ){Wu3tx2MrZwr>_5-^=g<5ZL^KV%o2 zmjpkQo;cqdTmyK>?tn+9M+r8!k#Wz1*TRI3wb4Xq@{;~Mp)JA^eIKwk*u}{m?b@z> z{9@{R@EK8^t)>5h%i88}t5t2tajrPYS{GouyHJ~D8Zk+V%vMeiB+>>qVF6eLrdW~DM$J5h@tmq(b6)~W=X zFCa@YmasXgPR+dRsd@nmOl%z2RYBd5pm%;24yMeoe>9tpiDY0k8VD>_T*pBczGb6o zL$1=_W7xqGbI()IEE11cH&|>49`HU4-kR8sGPG1meY##Ug+vrBAF-RYIE0{|vn};Z z%}ZC30FC{Il}U|!)P!?X%X$9JU|j2Q_b}hP@{lL*!_RSNVGuxYbGce35MZi%5;#-R zb%Pw#6$uXTl6hyDgF3GhG1&6ugrEp1IM&voIQ5v6@?)Qa<8Je==>95VT~^3lJpz*C zJKyX^DIB12^G$(`#9~`LcyY&6iWeHo0rewYPAS{zkA*G%d_pHuL@>9ZjZ1bA5|{$S zUU}JHPXW;>Gz%CvKrg4o&Mou7*xL|YE0eI0$%kTai|M%eOss{&1i~s8Cc?4H z(naEW&VXODyx4KbmQV{u+nI>PmJ^iW>Y@bk8Bes4%e^*`-!AJRjE`}06l^i}h4fM~upXowmho6dZgU*d-5$K&8Xu><^ItBCEh)7rb_4{u?~}CGA^kZ>@t$B! z8}&vHhu~iTlK>7++JE<-)mIH#PWu`jIRnF!vnv`8X8rk-Kj%^Gsir^GZDSFxrMTZh z{eg_VmGM@J)w_n}1pv&|lP&d@coKaf!c_qZ58==KYv3tyC_+T&SAZ3*Jr5py8fXf} zaj-l(v!WxHj6ycdIUt?;)?uB44|(HNwK4{B*C|5lAhkEHM9#Lb+}rofAC9=++t50V z{xWkA|L)$cEHRkg-7uA(St?+Orplb!j)fBIp;Aqs`YPi7p_r+In(u5JT0+jQZaqaIeot4 z*}qUgrWe~!f`UBq-CX63nW)2`K2CRGpI`aY3$2>He)^Q*c8AM(=ybT1aBePF*xFN@ z_t0sj=QB}RlxRd*L1P~feG*aFU$C7zbNBIwAKm266OXEnn>v*{#tMCu8-14Ppy9)w3MRp z_;i^aI)O-)0MtP-dNID86O;U4mMFHp>-f|0oR`g^_&H;;H!8% zbeRnEn*e+$jiPO)oX_!{I1bjIvJ?;(J5GhVzogpLO7W`Q9zg#sw=e<4Kp4)Jz>Ve9 zClh;#uewN@O+Yi@0c2XLT2X-1o~YIG?KEq0&fx3n>m?$~z+2ZV29R%ASycoxzE_OM zgqMeI#k_Btj4+jzrFOWt-t_d+++AIihy_Gwbw>lKN92M}AJ_Hq(D=jNiWne<7Lj?O5Xe3puKeTEA)!;p|cigIzkufmp&c!J!HppX!N(C%~66uk2$z}Fj z*SMBkG33``5(rdR?;@6?)dH{@jS`x@&|cP^38HbK8R)ekhh|c-^7biz$#}KgF9Ucq zaL;}pRvN3Xb}Jz=5;CAjSOXhb(=E#t6(GnsT28wEfX4{^Fm#6dyV~!lFn6;V-q#A9 zIQzl0n2WIo7N9E__eBGCBp#CaPHvH`>xL&tAN?DYNp-En!j8*SlnbM8JD9DrT5~oy zkiL$m&wNcIPu#7-oti|njasKb&?>s=1F>On9DyQ0p$)MP@q_laq7TTBkwC--Ss6sm`J?`>rtNsjXj-K5fkDi>{F{(5{`GkTLe&Ici~<_Nj3lx?FN zt*ZGNlQCTxntLo)7%3aGs)fQcW-#~YhT0FX48}<4OseH(1PvzN@!D4l&*Ln4o$uhY z%hr6VX$bIBjiAv*sT#h#`xEnGX`%XPll}pKbt`Ae%VuP~D+3`^I0o{zqMYK#V?4_(b2hp>9c|XR*o{lv#~HyV9WnK{^MW zoBC!5{5kp*-IuDiv+@wrb}@&mtH`{QR2b)RM}Hw!acJ5i7XMmu!>6m-<+H;?K?N-k833;M952)Y*tq;4@xS3c-Zhd5rgH&e!B$(Oy)|s2gbu-HE8Wr zqVJ(hfj03G6;n4F0K*|U>=`nkuO}Ran&jlQQq#XdrwbY z!>rTQRJ#D5OHOtWUD~aC^n8Z!RSx+fJ*r2w*G%Qjd&U7fwWEhryM5mCv24z(lQ5qz z5k&rR`nZ%La@B(Q4QLWSB2B`g@|qF1>JNx2|8qgzhJCL;Cn?P0NgU!gc0+BREDH1o zfXPv4lmB^18UdE+ZA&yAy*YI#H}MgUl!%G_W0k)e-D4*el)---8k!x{4@zCNPI*Vy z#?#Q&j@8+8Im^`hJ;vtk9^COJa>mz`yKiC$nHTNqVHlt|djNJ?zlMMxCAu#*qMP*c z@XEI_*oD2m6{l%f$)~&Av?j(K3GA5GwJ<( z0d~hQB`%;=OJol`p!WSpBlrLE)o13+`{li0*XRjw16)RDU1DdBAl`ux{wj&p3yR7O zYSF##ld8owP(gqt#D~Lx>-2}0>SS={yqjf3@Izg_P{)4wyyYr}0A4`W9EhwdLiw}P zfSN3Weg3V3VPNUIdyX~EL^%9&Wuv; zCwtQHx<2Y@j|B6CL3Rev#K?5!0y{ICrS%C_q4+taHe+M$08ngIK|VYsJ&0>Ig3vm% zjDnm3@`vhMpcO}l#eopH4LjXM6V_80j?i+s|CBh33bk-Nk58s8FtLC$4)ZrR${``|PffMq>__y__| zHMgMU{wdmi6+&C(Z0WvjOeDayTI&TrrVq0fZLljG9Cc6cecT5uQOG~x#WwTi2bN8$Nz zF@3SFf&oo$>Gz)*Jk z;E|=8mQD-Tk?#25jqdY^QQV$5BDsfXgFnwdyqc-KA>K4q$@LsKB~G5IiG5~{?x<2lCs>E$j?r)$Y@y6r>|5$uEdD}uAyi~jR?=k9jEP_h4{- zww_Df!CPVsFOj1gFddE&g2jP01%szs#v~Z+C_TJI8rZAzGM4`2Hfn>5Kw;X&qA3NN z3M$-8kD#rxYy#1fLhmXy&tN`H<8NU5^ECZLmq0t~-g7+cyJ zA6%cvYG54r-AttkSJ(PD&j?2Fc<3+2yUH`4yAHFX`blgR53hjyODQZtYZLT6V_!O!$>ka%S2e^pU&A1E9nu(1Sg-2SwRHLe= z@8#?4mLHcQw47Az#>z}UoESjAPH+gGzX7kQ2a)vrY8=Ddg1*t31SOM!02$%_+a7B7 zD<L~`!F~HwN#L3BCtqL01WiB)Y?2^uZ&HqkYhM(P$-*-TyqK$AiIT!| zYm_A>yV_4ueQHtO=XPPHN6RIUU*S93<+}YsYZ^h-XlEOhEF-==0_^cTX@n44JKJ~`=;Vffv0IH3p z6|L9dY|24q=>U9=6;gXCJdIh(%;Q(ih{TK2`hK|U#ngbI_Y_u~uxa4(BG*{fOEW*u1_fMga%c(D{|nKUa`8 zTU<6QFtRtL`=~;OLz9c+vq@eX84q0LJs1leebj+?_HR8N_{eu-W+uGf5s7Jrak^wE z=3>v^`<^D+MUPmImE+q#$859jN}FdL1AsMb)g?w1tB{1!!;Ve?Ei6iEqa5hgA8y@W z$yl#t;LDG+WMffp4!aS)HG!L}4L<^n7nbgohgDe@IrFvUeOqA~-^Fo_4pvK7vZVfq zUiQzeLtSxIQ-KsZHSDP#=Ntb11w~ggSMC#VikVxK-gASK8(1-GE=R|#PTnUj@94rxV3_df5HSz zqIBJ7c&|Zq8J1nuv0XmsN(>4n@VNY8?GFyqyQ$murYav+q2sP%?`r}AwTcAVFAj9@ zAlWc-s9z4MXRcF40U>oesb+R3v16dJxd zzZjn(gXzHaLnm7wyC9)`Ge(BiW%$nKB^P@R%njZPS+Y=r1k#e$vNeYLjVbPibL_?B z@S*mvJ}%3hM3vaMdc4sIOSDQ5G$EK1CqB=S9jORZ1_Zf-!6R9Iq{KCx#BDEH{JC|q z_Ll2^IvY|6ZKZ-KV;q__kae>34)h|N&%EHXXzjrmiYeRAZn2^`FN5N^YeF4XupiKR ztrmsj&Yiy6a7OY3V<;~u3dqmw(|TNL2{2Het)ZnqO#l}$usxFM0L*1;qV~BLbi%PY zcLn)gT(_Uxc{W_MiqsuxQ=TcrmVOeFmIra>Dsb*P(v6BW#W<-hL|>&B2xdXHS%$uK zJ9pf=HP!S5&qy_*{j#$TCx^AB+Ny%1E$ue0oF&E3R7otN*gUgwPNs+A?bNt+!fLlJ zl3FvesxSYed9VD6Ts&R$tLw#vaw`R#NO|_pnZ`{fevJ8s8i0xZW-15ptjU=ch;l8SBExYXL-<5XMX+pw#kK;IyLJLsNN55TkagUlbv^{es$3- zr*IO@Nd3~Bey{&GMzi$`X8NC93pvg4UWu_xzHWg>E&78y(dEGTO(1?>f1s+Wj#qV7 z**UdS$1(yXGOT7pGlVq6eCr~1hBRfYk2cUNjg4T0k)do$##rtrZwNOM98EJU8BAd{ z6e}AJB~WkG>JVlPyd_BPL|~{!3{*+sQWRZm-^yiXwDpMPCv(qXp)aDVKpyAhBRnGm zlTm{SKQ(q72=VfzbCF|~Nf(D{#9F8-+ODyHOWrMWFF$sG z>maX4>mqfbV-_ZtFWJvn>Qn?AXQ79I62lmg&BO%;X!O}sdbGwwQ%Td`v^bSmDm+Ir zT6C(sLNp>VNhm(T9F^0ifsPwDQLIQ)E!bgPPKmSEGCQbfNmethKv>BJwz(j zGFq@~`xa1H>~6_H&C=u`)fXd9&hqi^lnF7J#Xe{B2MEZ`BLsWwmgaWaCQ_XkAxHEWHd3Xa>xXowbRF{i-G=Kh?|Itc24ck z1+wc9gQBi@nfaPk!DZ*YZ&(4)hE$5q9tVryVOt+XXD5*yNG|?P zZMs%^=7>+M9oREF>cBQ%bSFstg3>}{yOCUcSVo9cl?>BX4Nq;g@E!KlsqFSRpslHS ze9*`JjI-)VALryD@aNOSXTFYra#8Z~sLmP_*r|pn0Y>KWqQyh*mb(eRl{&R@gaqEl z*x7?Qk#V|tu#}eqZfS6cp1H#l?oOD6s?h7YP=A*Qy+g~qHPQ0(LEG&!#ysaq(ve8N zl_I=ZaMfwTt#X6hTQsKKt89-9mCr?r)G%z<6?qe2+~6Gff}kM#b_;J`g=uQ+@k$wu zWfZhA8jD_NC+J8T!5VrPl7z1^(%6F}mo}Scq@`rX^kOR#F=~o_N+R$m8s9`Kk3#eV zs^l9x(X7FtgKyA74T9pFN+bKFt`-wDVt90ASg6bBR+{&K`#Agy;hQkqT%JuBv}Eu; z0S%m5vkcAl`ZTd~t0@fiYL;^mv26hOsKq0|Q}B}BAfi)^VPTS6e0#q1*D``~802?M zMdC1o9_VT^mig{i(XG7du#jw%fv;}PxHR?=Ew$NjL>1N z@?AvLQhu&rFk0=%G$N0*!-|3CL&Jarv6he38C}M!W@N!XObRx6&y4c=H11?V{*aO> z_vS`++oP*KZ=2m6i_3Mt@z`xl-RetpD#+eQjt|sG)EJK+3ooxNJ>H=oT=SBsj?0jmWQHd0Ar4jG@QQ ztKbKjsnj{~Q%L0X$3wGPu1wBHSJrfH1<+CQPvU zZk9dJs=;V_V|e0>;_i*7FEKv&0ef_HK3@iW9YlT!`?fgZ62G7Nvgw%8{g^b z`{%}h!(tO1c6>*aDRF44awc$KcTn3L`;z|`ygUa4YB4Ic-?SVw%v2D0rXnX(=fXNS zDM0V*JcHvnT<+N1h5{(=qCEspkD0xJ*9{dQ8K}Ow9#Xu7Z~osxzr?_dHvK(!Yp0dr zy*wYvK7R_R?m8aCAUa&r&cLzoX?eKYI~8oo6q)^`F6M&Eb}<1yvvWt`pK6g)>CrFk znB1T}!4=$(7SwFS=E;wBG6$Uh7il`~56PZOpkwJJp}#D)_wi06+b8q!yKRVpY$YLf zP{~X!qjrW5>PS#@T|3C5+`|QEt7+VDc`9yvn)`_r2oyHC3Y?mIZ-ak2vmq5L$xEMW z!!9wrrF6vM+CJc{oPaue=|l0?WP-f)BlS{YOq$0285v9-_Qs{5EAGg0Axf$;c_q z(TYz8-|@v>3y{{ZGB+pPynI5cl&xee<#Q!F?zD1&h1mSvUj*WNSY?^+ELClV$dCYOH?r^OU!<)-*r9+<5_CX9b7QJ#x9$JV zlLRQRd(>2hDhO_?+`rvQ-CpRdJ7IVVAsV)b;zhbHf0-t~3XqzAUQI+6aH&-FfSz$4 z)W>;5li6rsbNQw6e7xsN#SZ|AnY{fmg{EE;j=0?1>u2E^vbc`QtN^*`%&|2YHQ<~K zq1PWOB#|GQdSdK?wuPResF;INpijb}YSWKfqjRRpru9h~1y~prV+doXsJJAo=E*R6 zIc8P z92j<3qzy`bm=w=f`q6ZQGaq9eS51tXBIYNOMtCxbbyz-{?_J<)xpf&gH<1t2ZW;k& zJ=IsxwMw2WU%T5(MU=px_SqXa|DFY~#54A8L(f-w3*g6sleX)m#vhPQIo^wXdNal} zSJnzskikxI$R3yF9|s`y`In!mWMcv z7sDEwS+r)@s&(t^E6EDNOW<+HXe{Bj&+)WUW8i#4PKK#4L+n52qWYSYC0&sd{dc1C zNDb^&6F#vOVX3(GPhHdP?*EaF*mQ2bs4QQc>h^EM8RQ|h3?>}yy%KUXm*K^wCYJoa z6?j|gEI`uMmoB-jT&&qWFUFwO5&Nxe37fgSV5XHpwUfpia_71gO!^(pT$+auJ)zp(AqmI{V8U;36K<9b7;c5hEQS zMxj;9aR+qDXJVlqeZ=7@S@x+I$a}9j8|-%ie4Iwam9RZ`%7nAHm8w2MBdDx#sd>0~ z4tFM{()eCg!P$30@-^nNm=y3eubyv;8qTuj7InA-gri;Ft!a=ad>xrFkZO4|Ol3=YphTnQxzJ=H4Xwy#Z%$>p;75Vi;?fpE z7aDafh)v;CAT-+1mmHtRQsX;4fwyz`xWOv}`Ze|xEX$O*Dd@i#H+Wg_jx=A1k{F&@26M?S{38-i7-2<%~9vTjinwB-F&21JPhrX65Pz z8TlE3U))=J@c!={Uow9vWQ8pj4!PBgal@Uvh)&up(0!CQJSHiY`NpZV#k4j*Au6dXx8N3vOMURGUpl)ITJ?~ ztqMpX!mpH(9yR;=H^(`E$?gWKmlMGmS8ER%r1;}LzphbF`_6w+08iWSu|Gb740W7e>(3^MdJL#-wGUH z5E$t6rc9u9S+T$Gz17Ga7i^vrX55|23hNGJ|1yzI2bqiye_#!rdd46I(Kfgm*i^gQ zt?UfcA}((uEwS&Wo&HJgTN2AAg6+15lEDmA%t#jvM|AKN)kLm$z1jbPX-ux#F+iDq z&Y&Ehgr^8o9hbywc5yR~K~s@ZTCuD3qzBK0r^Vi)!zWVA;Qe%w zCbKIECh~=nX5WwBC*E%0LeLfI_v~bqD$eEiD9IF4z&2I&t|jQ!7*WCh-$@#*jN8@9 z)^XN6#I(;boXQUQImRM$SLh(~#{5mDqo)f_j!zLHFoczDMVYPO- zt)*mP>b-#d9IPQ~aZLt->GDrTr}Plh=ncNB0l5bL1|9?zhNX!+PwW#Zo8*@XBc3D@ zxW6be)eS4n({cOI^&8FG&)$st7iM6cgrTSVnSv>0g8i4iX)WJb=~Qd{6>l6k;`z${ zoawJ+T%k-_PL$~{h9Eb1bQ)H$-`?^Hq|(W#8#=CYCxq|Wz=U7y_(w8df|7B)b#+5J zh*nN&HnW*+#!PwsS5GM=ZD)M}5`OVR;0KhLM{9#!{t}_kQ1a}OG~Ey2JzU{h4Y!q^VYH9x4&Y;bhv-s7wr35$bXDy$f0~CG!zjry+XZbZ=r~knrCnKC#V3@mvA==1wHLuDhy4{7&8?byW+( zj9^S=6Ea!P%FqSdY z4&Gr_#RQsyHiFZ>RLkyH3@Wsr5=(U+X4c>S;;AwJw&bu`&O0LZTz)M9EE|gC`ZCoh ziWPr=vS*iEfCw#iTQOt+qL3!}9>eMuut@wT7haCPZu$$qB|h_-l$j0UeRnQ>Wj}X0 zd4qq?7A3^V_T_X=q1c8aa}WWJnTKPv@VWy)f`deqTj4yCE@^vQO6m6$v@cahn_ zOqo6LkaS!JTS%4D#j8D&un?y50#46y@r752Y#wy^WJ?JxnJ~mQeaC>y>C*`^)jg)I z^(2Kplu=dq5U5lJJ~Pi`Huc+EQ?nF{iK$d1wq}k_?uRPdx!j zY|4_?GQ;h4X`ESv2Eq$z+sh#CnF%E4D{+OE4byK%alo`SdmqTZNj$S>R{Uhi2cDTh zB>|}x5)&As3nR@W=}CF`8MyrI#0)@9xnH_7RyBCtHak-Ai8*Y@3z$|)Ml5_*!R_(@ z?3j15>*cJV7<_|Qcn8UCWvxV*m5RSWCBSZx$uxTl#xsPO>a@N_3|U`>&r+*YXzw4 zZCsLAW6)ory@lA@%K4R7k>riGBk5S_hO%U>W|l-jpaz6-M55*8^}zQX(_%&hXA!C% z0ad8SRKyg`*9WD+H42D-N!7&I4V@G-D|;6|p(`>~?>7a$EK^$XoN#fz#tbZ;MI3SZ zY!i&;;}H%&s@T}XP3P7FIlh^(}W<}i7IzHY)e?5YkQ~S!;P#~6dXwLWDGpowU zmLbGbWcb*K`&n07`NBugb@F8-kl;+v;~tVC#2lfH1NW*)0al*|G;cgk$=rq56Pe4l=}O8bXo&8&dtAG zCFhhIq0<^V)#Ubd#a|1R_8h(k6zh1Q1oio)MJ8K%QK8%c_~x7U zIbcTzYZBPd;i6S)R0#u6mUtmCWn{!a)k5;(gcdyhdC>Y9Fv9~!EOo_N=l<2%8=wFi zq9p;l`N`*f!P9*~mbQ&mOQF4*=#u=#rNILlsnc1{^dmibD&$^rUyxB)pH zNpk=+&V;cp|BE6$|ca+ z%Y{8OOZ#^U7Bdt78_wN$tgNL@VQC@V+s!<}<6#qQ(Zti1WW&FM^S1UctHeXqV@S9v z)k_OtCS_4bDc;@TrB* zOcQU%yu{nXzm(vEWw6X{YH*o_oE{=egN*BF?@Ym>u|wls3OyNzQa?|-C5+XwEkD_6 zQi`)Gh%SvOuyTQd)ZBTfli_Nq}XF8H;HDp{d}v1XaShU}Be7(;lztqC+uY z2+r{W{S@`99akrBBgEC!{tt0}8d&J$joB*L&R#2ot!g=!kJ-(`h z>Iqej{#0XN*+Z?_VA^Z>`3^sS_JSlnxBJ$05a<)Xg06bOx!=H<6zV|G($>S{)`w&l zhaKl%!D?S^VPse{!1oh7@@Atw?D7a^ECNoA?hU1)k z!{Z8Q*}L8Mg{2~B>NQJ;VU*MaTewQ*!39f4AtOc?%D>RGR7+O5&U?t#o`q+*FBvBM zc|DEOkzLFNWeXNe-3Sq=`CPCvn;uy-Usa z>GfzwlX|T{$ePU7B5J; z5#oU@KSy|Wjy;gwxz0q8c6TwMi5oZ(i80*Q=4?-_i{n5B-TSX$iK1R_q@K>7#Qfn) z2E_ZB3wy>j4&1k(sZ()Y+Eo+M__zJvPfLea7))=RSw8%FvB;e5;7sN@#XnU z&ln?dl?a@S+?2q`E+5qx)l&p+p=d^;s9_{Ggf#`fATLe3Jj*$OrA{Pj7dMQyPMAldM+7$z zsw9Si`6zp+=wF1Di7QD!Eb7f8px(Aez`-`W*<4sv)RKUM(>R}}{&42j4V;!IisdHr z^*UcYXUy@$F=`yG0-%)G0A)I(bA0EsjlE#?{LNE=@&4-6A`#sZAOZxB!tGp1Gh^&q zM>ssgXQYDcX&dftQ__f8OC?Lq@pM8H+lqOnlJQx$+y&%h>BFTL1!9RJJXcuAZ+B@Q z1h4$qEN|yG9~F6Tt=up0|MQAc8!4z#-b}GMv7R}WusQ9jZ@f8WcZ_S3mH=EspdmMy zVhz3oc-pN>zLpS#-4QY2AMXDehKM9~i;_gCD;^2_c||C9Z$H;1LD-!gw%>>n`BH}4 zowg1et5e{h39&0JR|L?9LicKrLh(B3;4(3WaZXB;O`U%~P0IiuEB#9nziCsYq#s=ISd%Yy)71wf)tNM=;S|HOYn^>Z`{uPvdb z>>I9T$`tfJ8-OP`wVZy=7NlKX4P~W4y^4&oDOV)64#_z4B3kf0-y`M}+Q>tJ=pQ2a zqw#7F_3~xpht zoCU6^6BK;4k8k0lnakM!JBNG+fIZHW7zQ=1s(u~+he$%7m{{r=s_R1W7gg)_>uQp^ zFyU^15AIbV;%7Zh5q?__l_??DugXuC)1sNJbP|zUq!W+fAA=aLN30TuA1|(?Rt441 zMtnn&alEB|Idu~W)_g*kb(Tk+6j&{5)>SZ}oS!W(Hnk>h1%Qg-7GrdN8StWT4UfoR zbzV#WML@d0=)JhAsLQ*++dD*3_(+*}AfH)EcD<-#emF}YmhfV01}I+6#Zr|Qo*t4< zrEM$~uehI4lobV~yTdJv8@5zuyNaU(7weglf+($;zK)dq$h^p4UOw1BDI_LJMbS)~ z7X)%)oa)5-yqRB!(r&LNGuLF6jg{ICEiYBM^c| z)W{+!Mu*l!5%$zvP4o;?m1=Z9s_(5DhRQ?OcykC40nw3*4T%gFJ$BjC4(&daq6XaW zi8N{l!!9{nAZF~6?Eb`AU%m|DSYf*DNfl(y+3TXnnk5B$%L8c{H9>zZ?62uSrmHsy z<{16J^L4O6Irx~sDmHpH6equ6n!f(M3*+AKy_B6JGiYJ&Zs`XPr2Xx}F?{<`CoZE> z!*S0#fGAGgVmlAP@$9GCILGb4A2&3P8c-kT`RI;GRj?v{*T4tMl|fV4Cu4dWquz5@ zdq(pL!=vN|zxeQv&|*^Qi9Dcx1*f@Vv#;mHBB#(O_VHoQMN6La3u#Y^x0zvBygAuA zC0bIIlNI=09nV+Cf?lg!0^^mgvcWXoxmTbB+q|bjR+ZPbz`8+#0tF<9#5GZ0UwLg* zuAYR?I|C6c(DMzlgl^RHFQkdatj`&T|AL0%xC%4@m@1d@XDvA_Td`nk-+heDj>kPk z_mk(mb_#OarN6ic-^FmbuIO2l9Nk2!<$HY6^jrBz%n@aFN!07m=h@ zk?Fr--Gn7d#puy6Ktq0=*I)`C2OxgKaoQ8@uR}aR8Hd%r0C#T{{ejN7I3Z4Jel}7C z<=*$vFFzhFRYKu{#5(;R@@}$+#6`;jm!{~R(W+XhaO*ZdzxX2b^0F0A<8)}C&{~e{ z;J6Lwmf&X2seTq#&5)takg{j>NX^w4Dxm_sb-(+2I%+0EzwBSLQ-6|Nr+z@HWJ8R- zmuELtDJ^*nsPfIL+z6B${ht|otKRJb0|6IVBx;Xn!_kY1Kik{*)#Nqy>&1_>Hcs_S zUt0B5(;@Zi{0;LsAq({i_(CsaYyCq_y*w>nPVB8{n$}(*DuDW9uD75{wNx#j>TKhN z4So9!wr3*=uKm-fOQJ`L!yNCt(7%FhW6wYgGP>O|=xp-ve@^`Cr7-SjdS9SYMPiuz z*?W3utY!pot4a5Hx?=c0i;r+_(hL{Z-nZntHhu zweR+p=qe~-(fn-X;82)_mnb!o2D*Zd6nR;f-It;UUjsGsNwrl*tZ1Qz2JuEuFC%9F z>V7nIvjX$VHnKC*?NAX@0u~6xP2C&Mo+?M3QVujngv#v{I~ zGjkdNm=JCDda?VZ>ALi!t^C@VOcc)6oZBK)Q_nUG=zZnCY!T4bf&MuFFbF{Kp@PZ2 zCl!8!HQsA2q(R77vbb6EFlj{KwXF!#b59qm+2Y5&uDyurbvBvwyyVP#1PlfhsVuvi z$mVgjs+2LHfAlP)e{7`Nw^cKONijbH0u3u=6dH%oU6JQ^e|@$9brWZgt!KuGk=`mX z#Y|H5!nA6WkLmL5VYb50k3k=b2`>MWTkn3oyRBX1Jr>ffzw|_GbO0VTq%#Scc029J zx+jA?V5gtkW^M(k6h6>2fr0SdPIwf?q=NHt z?K<^V$xgnNU1~YuD#P{%(MO(+2rraOrTT^rR_E=ltcLB!@qFDa^q0%&_?*H=@@j%@ zRgSDcZE$ALidh&c<@roab9m<7X(YU*kZuIgYsne9NcGQmf(9j~)7C6rUu|4a4(Sg7 zO|O?2Tac(Q(^#l_C=5`AJfJZ(+R5=2RuyJ@G*TC-NF)?s*Z=xB8j1IM7Am|-8 z9sPZ~CLGyT4t_ltf$QEw0tjJB-4m==2pG)%9hZ`My!24c6PKW)-wmx!`1$nEtTb5& z_5NS>y9IHw1F3@Wjs>cy!5u|m=Yabc0g(n{2X3v71k}cJqB&1RukbATPD5&>ig_1k zIwK$e*GCKin{hKO7T21cEW-Bvt@qm>pHc!dS`ANe8NN_c6w%Oomj$pp&E`95nTQS7 z;lV?vREpcWX1aU2z7w7F;9`VgRa79lIK)!9CYdvrqO&}FEv?5w#!yWWi)4`56xP0P z044D_jGbB%wB>EL1*z7u5L!L_3SH{uFJgK;I^JDi{Iy}%L<}A zY~8-*St2;rATPAjgfGra&qj@NtbmJz`ZrHPgyjuVT^tOS4RCOl&!#tqbk)4>*w6b+U zbd6j7t*Z{NUF26c`cDa@A*u8idNHm9S6v2Gz}PGvuSs zV1Ha=yvUdvV@hob1c;H`|Dpm`N)9y~gp@-iaF!52k^b(M(i%6F4Z0`jeL4nH^5t36JamLN z@1w{-FEA)M{^u*zY9lI~{d@TR@2-Go_~sxy?)R`}p9kN?n8~bIO?ErLfj3+JHkqet*^i3p8y}$C^CMLBT0R}`Z}=^A#SqJ!Wd=}yU+D@{t6$!1jR?s!q6~e4_NV2#cK;^ zfuYd=IN~jL5OCF$A+HOGcGocjaEyj?Ls+iiIwY>xkrW%wy5aK-%@l*P9Wn<^WKBeZ z3eHw|T%GqR|7q(`jX4I-%N;+a?Uqhor>A#_{>&&Q2|l4#sft*vb0s+m5cBB!V8|xZ zB}}hY6ZlV2lJ91nS7o{3rQdacoiS^dbXGQ_39Wqk;&3VxHOCe@jQW?q6=53Bgxb4Y zCC{s4L$R-y^wnaeFfW7mqy=q2Q|&aH4YL?M^S5x<1v0dZ0*$@fjMB{)IvBWh`!ZBs zSg0tL^1o!af|zcI0&GR}FW19;lE%ze__u0{MH6-utgllzpV;XPPfWtsK$OVIjZw_QE z4V&T~V9qhnhPtVwkH5>bcDhT(-a9pBrqMOsX`0u{ zAxzor7WL0?BZj&eA*Z=?w~f!ZQaosco^Qn2d4m*5L7+VM|{ z+w!(aADELc*`Vf@g|9x5o7j$T*UCZu#95T5(x(pNzH@jdic_939Y$q8$DF#)IAIj> z*;Wl|@hlx-iobJdqPLjg31!k;pGnQucn$V^E5{SBfca#$x^{5rV-(+xEw_PsYg+y~2 zCj^N9gx(B#1hpw1jboSWu4%pn+Z{uIy&x%x85OMNxk1_!lnDVB{-arEcvnJQJ~(=G zNi#w{W{u1GaJmAsUn)~)Cyl1m;mtcpiBC{AvMl^&7UQPrrx{lSwd1QMet1%qxE17~ z!^klfWU7@&y=O^NEG<)D0^avEjV6MK^aUXlU4@LG z+14A^xqd(MQtOS?ovi7Vxb+)aK3Cc=quxJGlQbwNiq7k1M?>gPIq>G(jK`b@V!b3W zqwpxf5u?7S%`vIoI|R7FXsqzyaV)VBs5m-2Cks@)vT==DnLWerPtl-qNwWdG4~~i? zjpzy`j6D*1;~ZxxEjnhT6Xo>hVa3OCprJ0yK^My6Nv|?;p5LM#7+LAhnCqVQ<-n1t zLqV##zwM~CljT?9Tt=uF<21G-bM-|yg+X(}{LY&}W^n*u$qsHqgX8qvoI$A6{!LIytO-Uyf51s__SPkIsh-cbw z{<6yX9M@@a&5Y2L`W5ogQ{}S-*o|kJ7t4&Z^CGJ!yvoMrRS-`p_5J38YsQ`j81*)@ zZ}E3pY#v|yUIVB%0n=WHdxiYKUST~4_}sjY|C#;>4K7|y*E>;{X~R4LSc0R4)Tzq^ z^N99g`L%(Bv|Qh-m7@p4g_8e;9rkDSy_txY{z7fUiFMt3ZH=b)+ZwDtYE0^w3ZjUy z7}_81bvfQ=T~=+z48lqkw&9}ow}3D&Jy87TM2P;2f17X+<;g$`u2r3OPvIS~7}>TC z#@N@ycvjYo$_jfEU@0wv5oxqQuX{7eJCe|mwxU5o9*81PtMC!m-@KC~ycck2BqG&N zeUJ6mXn>!PiwVM;CJj$mhi?Y!sP+h58G?HcBgd*Nh8}hYb$A$H&)*gX;h{bsSTL#8q7+b#pkV!@4XqZ ziVv`VChTJ_=;RLh7U)${ws53M5$>tlV5g5U>w?fXE~Q*mU#P6YhNm5)U4ZUmHk>|A zd_IE}U1?U(!Qf6N+vtd3=`kpmk9l#57WIrf$#ZxW%1w^ze3T2DdRK{ z9BT|sm{)rNtYiPqw6y^O2W_vYP8xolpn9n!VZv}s7LQ1#`8&ZRHcOz**MG!CuF5Nu zy@Vo?REMNySMlbG@5@(uvlhIhQ{$1eXvLXeI?FcweC`;a-$Vz7c_Y0TQ-U2$7POT$ zfv$6MS^J__rYKWuecgdCUJ&X|@f>I^`Be;;ISW-RmrVG+ek}$Gt_vQQC|{?!B_(WV z%8b!v9Vmz|d2UwuXc0@8r zN;n`kG$|Y(BQgr;gAf9UD5mFNamcbKr4s1$YSvv;-Y&?JVyjiu@(lsiZ6cSi3Z=Q2 z@#C^fS%xZOAiGTTalUY(bIcq&qUs)tShjLE${$6i%_FfsYC%rAw6_%hleF(M{pTBekqXIRaRo*BEb~fHh?nyCnsKoAG=N4TFJkda z&Yz8{7aFI(5T4a9s9xTicB{smV@P77*Ho(w%K?=RO5inPg;`TUI;uz-vG{gmb+dHT->Xh-FP$!4VZr8Tw&oLy|oP)F^RARarmR3rL-a2u=n zHE2eN=a6B0V+ut_n#>O2ee~{c`2L6%*p270*pN)&dZFSZ?N9)M{7p^>W{=a4sdPTPL*p{(l$TE(c&Fi!c((8vllT}_+>O>?A z>w^YPT$~#FkFLL}K&J`~{eL+&y(^nvwn2NB4LS>TC7F>wuE=HR7-Kq?R|dwm1QejL z*T4R3nT*^aEqDX#;J-87j?dh>#g3a3zheuXp!+OPe5^g^b^GA-nv55+;Ffms#l3vO zRCe&G2-GAmVqrXmC5Bre(=u(ohBkLgvaFUSK!_Q{{H>OSC0S|>_Y_LKT<@KUd=7>< zxUp<|g>~*l5b0H4rmQPbOhc%s?w^gu)OEFeL>bA@5x4D|fddIXMk#o~6iG`}IPNiq z-FC#d-0GYUFcDHDUk})K1FY=IZ^+FbdzxDBh)zu<$kIoveI1|I@l!na5sJ~PV1#lT zooR_l4b{o7erF|g?R16h^s}b0v*FG1k8+LQ&zc*~Of4+^1#&-MU;`a1NTkI23d>H& z89e`o*6K`e#t$EQo~22X9=iI(Boe|-)EP8Wxgfye9^nzj2!0zh*~4Q@v_Pa^CX=p! zgZ1AdV@`_^yFD;uT@M!EQJrwCe=S}2OaEDAg z-2K#@pBF*hu;vVf=9F+^<_u}j0liVR;i!#sUedQweBy}aoTG5kqGXI zxi=ntZ9ugSyA>S~35{a7>&fu+dxq&<)HQ$TZ8UuHp z{-nZ4)SCJjH%k0S_!5lg!ywC8F~mes3}<-XH2F-4qvV@zL>zjGQxN-#U^?KQ28Bb{bdX*Gbf;!V zuH!%(MHq-fh?-^#O~VAvdq5_Q82!*mH?`yQo_v~90jYYEX)q$}!9|jH^yvS6#M2KH z>p+u~gxYReh3^}+CkfZ{GtMi1sRs25JuQb~gz$La zMabB&2;A9VwvAw}hmiGBpK~5dE|FByQL~Amqb-;A2qvsLa2bJNtw}53gnv1VHN)YO zk=RKEc%s){_A-;e3{{dc06|0}pW|*LM|-nb4#PkgQN7X=i$5~r3j0}PGD5?->-^?2yd_-0|YP zV$H*=K~sxr)jFgVZgLA;_1?~xuoV!wGAe$Zy0oJEFeq;*%P|eboP*d&)+sq288*!K z+TK1^A8VuE)9(CCqK563|B+?3Xj+X>BHnh(3fiuDykq_R#90`UPvpo-%Zp%hc1hL! z&Q^^^N>^&vxydB>UKEy4hY4g8iQs;JCN8nM-Vxn_6C`sPUi7zO$Me0Oses|>j-RUR zBV`r>*6SOE?f<)nihpAC?hqaiT8mYB| z9??;8U2@vSy)*8kh0Ergf7EZdG&>CG)ChCJZQFe06)}uS@X>+NLkfva+WFp3U>H2Fo6sm|mNo^eZEK+=Qnz3FC1wHZ#UwO-Cf<&Xo>4tgNB z{OME9VMzF4JD7HQR+D)pM;{uTF;2^!vy+!rGl=IuV9>o7Ozx*gGyxIvhCqGFw=QNc z-W+d~YU!){8nOX(HZ%_l@T^=7q_`Z(!yN=dB&4D0BFAF+1(9D_iC&?sLHS#~0;9q#>A zhZ-kMGJOP(@$X}FW>@(>_WJu&3Y#H|~XW}@jL=Qgf$`CMv9)%lUWdnRe91iO2)wDIH_ z?}eMJAba8-L-2q5oC&mj>F;0+lK9i-gyBssSJq7Vr}XgO2ed(Ef~{wq-lluO#v6x1 zd|1RHs`3IM3^wHm#fkXl*R5nU90NByJcIYQWt^pWL^T!^>0L1fx=jUNh7HiBx((M= zjUmJd0aJ4hc3X5W{!`I2Q#>E12ltk!AF-bp7R0`#07EH<4{6j)7Jq=ODr6ZvX1CG6 zNWPQtI7w{Y!rIL0Mm4+L&^t6D`l^{M^cnV3;+PQ^tJ`cANu1=naA0avRZA)z93$M= zhc+@qea8gCA-jqQqGglx=AH>>n@;Bcr*9LK{_fgsAt4m;$I=(Ap|DKFToKCpbk3a^Sa|Is^z0%S zpv`Q%eUpy)5#!wi8u1XQg2q9*(@OZ{s6M#rTj-N+Y$hedJK?)Z*_xkpvziwlxP4&=jkhC$EiG-A^xS17HL>BKNkCj2O zRIA7dEk>XOIGN)JP3iZFrYtrufw%OUU|2dOSrGJs>UM}uYvkQ;yma%0p{)^1naD-} zF6&50(=4Jz#F+i$LPq6MC!1Uii-f}ZMm77sD)(iG+2NS-19cL6_FneITQ2^k%pBkh zIGL%O%zEQRb+WK^o4d)x5O{f9u|Ex&277i8qgbj!po0|+8)j_w2xT;gE}Hg=yK=-k)Dqc~!D>C)!}8STYh*xV42YfN+TeWYvhT*7rdA zgno@`iV}l_JVvCVO5cY^!;(=c3Ik@^Krb9<90U6eZuNH%T5tpA*Mr1`xqUsXFnJsl zK20$aIhz>J?#t0kVG9nU|BanM)U2g8jpHv=Ucb0W)o5w1Vos5DQqY83R$X2M(jOS6 z@Nm2oG{nm;sjG(Q2IaMFGWtX;7I5ZvB7_ow5L!&(6gPw>nXHk z$`V)H4f4r}>LIKV{;UZ#?!uadt^_UauN1N6(sH6FGpX(xz5n_vrsXpa=;!`~&s|vO z-s~AVs%G`Al#GBkOTp&dg=vpn>+Nq+j?*GQSh<3M>!=j^dR{!ELl2ONQmf5<>fp*Q zCxP0IhB8PK$snjO02dISQ^YNpaweH$S(X~gWm)tW(<)gn-8eJCxnm8uLdRZ1Ga!{v zL&?Izo5i4{f&@Z4L=W#5gU`Th83Gp^?stHC|Hz$ML*%gxPb}(ht+?RIOt?>iCNaSs z;cu4*-HhoCZBCNb-GxA|CUyqFCrc(wmmLro`^Md+sM`r!w15|0k z!0lJowm%w^fpHRZ4-xfmoI(d2=*Sx%ev^+-(Mzpid)~K?3=bAx9}B#<@Eh#=dgmJ4 zXs^)UMOS=vT<_*chqp+>E9@9;xo_5$a4tqR7@CXgO7(j&0y`}=vf!f)su&G-sB}-^ zj7Bl1UN6Uk96_fif5ihTVKQGdj#7aN4=$*cGa&H^>YI@Ydet9r6i)AxPNl&TGG=v@ ze?Da0d&Y&rPpX^e8kjzr4nxT}m<}wMyq0?CCMh#p8e^;7;^E(Lgk#zhO&Cy5!v+a7 zln75%Ua~nS^__5Z(71AXK(rYd&VgTCCaI+$wNTQ#`gtrQayx`fRfl`Sftzb~Xc4_M zzvMbw9+aVxlxnY)c&fyv=}{QQCOgTx-VS5}7ACCI8qs-NF03Qsub_|pDo`faPIE6# zJV(~=5AMsLJ$^%;C_2$DaUu2@JAnp@ss~ZLA&Gk?QNdX_+|7xYK1t3jVh{QKpHT?L zD+U!iw)&qF=z({xBgbu;h3qrri0`bfFQ5tdZimYH%0lmmB4PYhg+rl;3U1mU#Qpc+ z%V%aq7|}bIqkC8h(K(kx9HOVY9HZ82GE2f%EAB?T`=w!;K-Wf>CLRyBpsJP_?aH}K;Z;j2V3KaWm)VdIl1uq5eqVXr`v1B~ zz3LkXdLo!W0dbD&`@D$x>Jeev4Vg+4fkT6SSJjVTsbbcT+1>{;xg3c~E#GJJ1$zVBzwXTWwvQ0+b zxGMjk&xFzgQvKL@rPsmbViEOHL=>+_85v1ewm=@?QUBzxcPMwBNnag#K!0tobNu#_ zTuA=W_aDA$PvfSS@mxXq=DA_`ZTHP7i|IYbB!_Hf)kZIESB+XJ&jb}LiG`B}YP4u_ zAeLqM{405XmKU%YaA`)IsF*`$JHM|2a0pGTK1b5MQvy!WgIhgft0jHGM6 zF8<2J-eYnBG7#h1>MIrdbBCZ{L>jW+7xbJ8;6YWVKEW$J%EE`8V|3XxzR&6QEaA)Z1Sy1_X! zDYLj2B%zxf+HJ1!FX;Y;eTDFxl7^jHi8;(=JBAUkem|K@93Hb{{xrUxNDkM#+vgUc zweGQpCu&MSBZQ3x-PKe#zl!LVP(YVsLKddBP5h#Qm%b+5kx@Z;Z)KEYh>`Mfj!pbr1iq?A~S%T^2M<4duu6&_514@=eu?jg(25#*E{(x)L`o-fCAK@11 z&xKRRX1QOYgxJ|&oVo_k!}2U1sbpD}lLz+Ga5ttLw`sQU>-URR@z#ZK+EEOQ_eB|S z!J`F9vLX_tbdv@lnF%)a4%?(y@qwjM2~2ci)cP8mi+;?@fG7R5mZnJLy#qHeyw!+q zGA#awP08Y9VGm)P@Jasl9Z5EkTJCi$g~-jrs}#{GU!k8n;N(mB5)JA;z^H5hx!E{% zqIpR#A;l@`Nnr9@9j`{g3fIOW0N}3$XV#KiGdL{I&hdzqu|$wsMurt*lvaxvtN2m z_Whj?C%MLALNG`74IbJ5+f&Qq`q^`V@(n`9j3&N*W)mkp8x+WbNMt$U6qb=n00K!cslgcPQV69Iy+I{Zxzgdayzl<7crOnR7#|AtrnYwL zgi|>cVPyU}x)tsQ!u(AdMNw$%hA(dp{j>7?NT zOZ|9q%Gw;rD0_t-WorgdPAY4|;45YVf^!gam$Qxvq-gT;m)Tk6iurcWn1z@0mkQ4O z{9^6Q_2cr3u@oAkl)Ve9w8&ES@&oKM&aAaOv0hrT16dHiO~)WwQs%D&o1ybJib^Ml zF!C*ZH5t3Jjp~V+4uLcZdtMXCHA%5AvkCN7vhSgFqmAJov=G>A*mmpL4%d1GGJA!Z z;QORRE(5w)M#r#|xNYjJ6|7Mes!&-p=0U!8&ds}Y)}plV1L@|gXEloZNu@t&^WGx` zRB^|g!0oYqhte52W$Os&x{a6h6^`kPo6S8Lz4qFU7~T^Fd@D1Ch7OLo`W9hD+lhdg zW$=q@xZzYJ!K84-;uc)JdnY7UY$QIV%5}gEMxUWb({jPyuM62FZZefQ=qJ7KAi5Vb zBeb}GZaI;O=r=Pxu>T_o2Yba;=K(U-Slc-+G2vE=hnfvb82bl47;V9obQp3&n3q){ z-lXkElToXqF$jutAhSjk=^WfZ0EyR_Vq!CjySbbHYvb^aERrT0c<#m2e9et3;zP+g ze*`}`kptNV2;NWCz~&{WE3aP9jp*3j?)5Hrx_``Mx_)6JdJd|-ysIB=D)`7+fneV( zekMd-CjL4|;&SA7dHI|h_aCV32Q=IV4xS*eCa)e~^iSPU#05zCu{EZz7Mg6@j!Jz@ zskV1g_Z5c~hsW|Of{K8_vKgu zFF4v6q6$(Lvt^+Dj`5Pod*hxLU$t-kZ)+QVr^;8`SV`}ah)@Fo%dJhleOm!B6x=}2plc&{wc=1_X;Kc z*4@gn9m&!eR@mf19)e8IF}xIM$uzhWm^k&c_j0i1Jdo%?%|L214nvxC@H zg5TI#k@8L@O~EiTufE~)^x(80c%lspu=<~%|L8<-KTQ?I{-2j7`Y6C*FAk~BqfsrF zkFQ?>wz+=Me`%EudzqaYg_k9=rw{9ekZF>Vz*_t!k|&-l^Q)Rd zNzP2>wJS-~s<4=5qJVs+0#~_FpmhpARht3(+wLwuCKR1T4CyHMz|F31d@ewTQrVvP zL>tFGQ)qA9v&TTnD@Z)_h7iH4cRzG2kA^INU%M=#D2TK}H^p+bmP>*)DzbN$d@I;8 zrdGhd{d7Xz?IYZL;*RfA4iJzSe9IRMTQJF`QntJ@3JP)V^1ibct&`=5)C>K=}{|*Zz{cFdA>MQ|4jDB|7fAq$747 zIS*^F-^ZvJObtE}Q~bcoJOOC%=~N~2OWcAeZLLE0H#sS0OU1YA9$>2bbEI2wqG6jP zQ!eZ&**EYRaP3Qn>71>J^i2%T?Nua?S6=GQhXBv%y)2K|k|K1+lLI-;na#ALL{>I-Tl6oIe-?UTL8z#Y!ZpY?9SdDS&S_5(Fcz*0F5JGSNcfTsk zR=q7ln6el~epm?X04+NH;1AQpXf{r+jvpFdIUvhhOE`Q0mSxBw2I+!=v_=89*9%4( z^X9^=u}^2qOqXK6Xm;~$_Fa%0u}3h?w^ z0I%wx(=^_C0Io9bLC_T+U^GZYdnirVr^RLdxtX59^}A!>KnR`<&W~0!5EeV}KD~6@ zm2_-W|9>e^97AzGpn2WzNb1Hu$nv*gaR>&Zf)cKyp-rxxeVcdHBbK`Q&Mi$ODR*I% znKt3ZUj#1|eft2Yk-{U;#*o;&e7xUQxs6LB^>i49?aW*QGqKS_=0Ypjh86(2MtcDE z7A@?Jrh$SF-p{1Za7J>eV=dUClES!vU~C))bu}VhYcwL_o0k-@4Mfxu5RfkAAZPqu z5hV9{BxTN)Vq7o*b2PhValxy-6`i{@bFP?Z`w&c_UKAXar}xNEiwRf1F6N2i-xUyJ z_hzK&W(Hu+F_;Y6O@H;8oUO!^vMt$kp;b8e-X;Qs2?rvkQi7h4Sr{E?U1|)hbX!d0 zN?eB&so^q&6>P1P-P~Ck4LmYiX^%^N1AZnMh)e+RB_2FZW8X-nA^z7O(U#Z%jy2bvS%5+_Z#!UZSsO7i!&~ref?8`($N-7av ztvOslHU{yUBm3h?wE#Jj_hEBNyJ!MCYlq4;=5KxZAFlDMcuKvhS6N=izSDbS0Rhv- z1Yai@`t#W3ji($$^hr(a0gsV;e&pqn#OD$vOBpZT)jx}i6Zru1&17!cUf<{MHyb-N z#FR%9l+H<7hO_p-ogrtuSNC$^&@%|4Y^O?u_LhmXp~GO9!EPWSMPw0B(nLRS$rpEi zvlJvy=~3!Ke@G*g=3W|LNb(GtDcI(AQA!x?_qLGUoZy*!ZyE6K0>B3|`FSNKS$8~e zRamso1oLbZKr;VF>fB`b!VxOEBe-DmxcAKL$!P|rT6$rnb}*&ff=-S%??dGaFipRu zxdMHpL;XX$oN{_ZF92^p|WL=1(07l5XDTg?LI2YLlFMA zHClw?X7&;S1E6;*@?2-Mq52zdXj9QgMJke5{WaRO(lnoS|FCJwj42u5kApyBte@|Q zO~nD7IE}J-fQYBy&^~WDt3ScZtwg&%R=J}rKtaR)3#^!+apD{a@Lh_DpIhrm(A0 zYmcHIo#?oMEwUa9WlT*ux8*8akTd0A!1(17SM;o*JkH}B_EY>jIM5YaWDO!5^!aE~ zl`eV4Wd)BfWSqs!@qS9kZy8hyj%6a_3ZMwFD=1AWXgNR> zV(9w$fa{N!hL*^3T+2l5iG~c3o*WiUf`b8fZJ6`O6IL0`K`$g4kk0%^4@jRj*zx3? z$erPZ6^9Osoy7dED#qH!f5QS@%o_+(Gc?u7>K=CS_Fh2iJ$`wIcp-SCX=Rrc_Yfeg zI71VTytgPLlZcTNT)m9#NzQZoO4QeFBx+=feyP5nBh3nvcX`a*Okz;v))D3(B}xhf z2~K*en!bcRK-KYN+5@c0=_kNrKpfGwRTr;dN8f!Uq!t^b z>ZNABM(o5bYjyxz8xO;Xe8J}aheo8H0RvB+m)U{t*}y52`oxzJY1pBN#Rd~rHG=Ux zccIl@{2@#FNH;SS=)E@;$X{iUojT!(7&Q)*=kK?-m3?%-=wXKO1k2~Q&-Eq)Zxz&F(-%Al=(t?X@KsNLB5ga^exCyhl2mSzxFcST&cz7A! z?xyx$GmtfGT1n*>v^<< zpsW3d7J1{rD!R~$$@Y(14tQ@(q&&?hhzGoM&ILg6<-Q=!81nOxrVzg7E|SC+UsMnF zx$&9DRce6(s36gG)|H_k`364Jum8nHMi+#!r1$bGostSKL{O;kl;{CG7e?_cfg1#9 z{tiInH_&f%GF*4{l!V&PHN&^ynCNqIlVCXZlp{N)=$^;abZ&)}>_8gGnF%h$UH8$T zY(OGMnuMrdpdk58vX|t5Rq?n0XY{m#fLUwvyq4L6Vj$laD=oSXBDVO;m!WEWK*Dfd zto}cOGipB@J==Fvw|3vY8X;Mj`Ol6hP+_1aN~@Mw+(dxxS%02KdZbyY1@UYcsCKO z1s0Z>5huw&rmL5JlY7TKwQr4?S>y0bHRO=$GpJdAi{z|;m48nCy!ey#g?L6{ZmPTm zyy^2MP}K-(qMg3Z(@S64j?4wj$tt0SVf909ABF08XG~*xiKTy+dNTQ*6$< zBaJwAgzkQaFZ!&EZU)cLX+Br%(0?@k8G$PE1ua4rCDbh1?tz*t%wp0f5RU!W3JlfO zxnZ-%H;lc*cuVBM4 zgbp{wi-r^7g!;H@Iq5a^4_SAzkyTOw2SPt@B6_a<*W)WJHF$P(o)>&<6QY=1AubjP znB^&cAvso|&O<2zJ@+6iQv2AVVVmBPm1K0qC~y7ux691p;N%J)eYZH2mNk@4f2v z*f(bRD3}j`R&}H7){d07kUk^si~1p+R-4!+fW|=h@I-nH4?V)e|j|5W_#Ukkl}>!90hIcbWbujBo;q&+La_hh#Tt z=*8_KR0q7_9IV;UAOMa%vxL1OpM#;oBCC#>I2F1mc{mymUY}zdUobRqqLi`7Y1u|- zy&gA$D_}Jfr|TeldnMHH^54~{=-kDjL{=G70|eRBs(*7%fK)KS?5KoMJJs~0Ad%eU z>E(icK(gz~;Fu!!=W600b5rIf3UU>v8q-ts*!P)+)4)cp&NW#(ErL1Pk*cf!5r*IT zNe23JtCK!R$`=-$Vw|t_Y&Ihx1h46_SDofk+-WqNpC&%I*%KLZ*EC&d`eZ(_5L*Bx%pP=bbkjpU-p^J^+ zFgzp0s*=5zBly8`d5|jl=h@%>DAv;;W*@w8tfi}|tV&_nW_e&njvYIY6pPWQGn{E7 zX!=*Vnm%BK#Q*!jcpyvpo0rtcvvwmqQ4TB@Tz~0VG#t1ztFyqoDc`2vpuighw^^mx zu$P5|kE0JM1dUOM$c_@=0dWe%Xlw=m1`|U*EUKzh&P}Dk3;v~WI|hPbR- zp$$~|5W6`P@gER!7sRV730;zIv@zNe5sTcZ^M%wx;sz< zPhygoXVMyLkHJawgMw$_skU+LRZ*z6yeUtcLf`#LE)MLSfz=GjGNld~a#r zRf+YFUPP66#Rsp_oXLJ!cYYkQ?K5}9ZVCZld(+**M?lx%D&ztBrI=G|VlJ;%=D+q}HOg#4Qv9xu8M! zY%O3!N13j*0)fZ!bkc-TsKp07FJZrCO2VI42=)mFR2RYimqf#lPSt_9F6sdWsmumx zQZ3&_3oK(sookdn#l1SNfxT9bT%!u%jihSqwt#c)YMNKkQu??s5MBbp6-Gm*MS23F?W1?XvgJ-N!-Lgq zzvbQLQrKrYk*CDr{Qaj*28Ws@RLgnnMLa9#|4n=n{0H!_UP9a4(vAT*n z0QP-^;9tbMNFjM;S-9am0j>@(^(priW;1a~brefkjl;4%328pn0Iw8+Q>$}o=eAu- z49_saOv?@=hY#io>}aqSvoTIJ=kIWcBX4oI3SdZ`DTo`dZRnU~ zFuSD3LA8(7@iOe4QuF6eyNkJki~$GEMa?tV0T)j`*H=Hn_7i<05xv8|=$<|DMay;n z2&ZN!nk=}oy|I+u4ygv1-fc8R^W-h_Mbo1N3dSt^=g)B`tas|})zTaj^MvZ(6+)w>SuEK>LZ zZ*+DJZVl}`;3^r^FGNdbvZ)tWAiD(5qg0iJzhQAb8qUm=G{*Uh*RigjJ#nM`s4ne= zztrs71v`g1cQvFG*&A`ivUbtMy(ir-YX!=267jGff2XP4%{_eKZ(@J1`WY&8DOclN z%CvIzp|OADTAJ#f&)W4zF-1+(5E6If0wmvi=py0v>bs86?S1h$7IzB;5g&aWBTV)}0TUr0S&{@7%7bc@k3 z7rW?+RB+ksijODOr+*H4UC{4X#*)MNOX|3+a31-Wg%J!en%TMu?7GR}hbfn1X_}JI zgLkybs(Y?#L)3sxuI^||j@e$g@MCihi_urQ5S^RSwY6-|y`P}K^Y$k{6GC!$&P`CNoK)Mp?ji-VC z-a+{@gE0$;U&00L$p~z!63_<*dY9%fn3~k07mL49T(%Eaf)R@r8aN*?hiSf*T3Y zRHj!d4-=ZECS<`2=>j$^l2xcfkE~fL#<_68eJ{~ipc{@TC6}gxnhpYEid{kj(6r1b zH z%qL}VmX}Zlp_Zh;;=So`A5{r7Yn5AG8m(@|J#!w=(RZl~S&zHa1hlIQ)a*28Xk=BxZ!kV$Q=`um?W#{5UkSuKWQk2P>&?v8$ zPS$bwXK@yCKfB_GuN!qn?7ECViBb>zg{?e_t@;D@s3{NfdnW9wjhqQ6TH&pwfY$}y zTHC5Le`W37?icupc2j`TyzB`Yl<9kEKfe`YP+oyTP~2!!8O9(4yZwh3vU5{tVCEh! z0wI94I4e;4qoZq&MZiMiN}x9WFyp>>f1H;GHDjD3q(3U~+9>stK-!5w&9?z_07EYc zualFpVrbIW1K*U7G9Wi=16qYdl^jeds`DBF1|_X&0CC_8^abo#hm}PM7hrm#=?f5x zbneLY{AErem5rw+j-M4E+bR-H?nBC#H26og#eLw)Onuc=X#HQYQfTODM$F2MsbwzP zL!&#S{dwchPjU?U? zVDKrCj0TNdnq6drs^|qVusH^%)M}>`k|fuXY4^UiIjOU~9}p1J(g+c){0}Grq~k~t zjO$pT4t~lpoeluEm&1EG%z8STA&*ZwmSPE@T2kj~97#f15A7Rid=(5S!o262lWHHo zjHdNU@`gC(fiEmA+oc|OG43GIS|YzCQ&rzgC6o`3=Z@i=g2K4FRsako9_Wc5SSh4o zD~ZFH!q8~+xw`l7Xd@m8qwN?-SdsvOc4?C`m0cyS2z-n<)IuKd!Jvv}0)UGux#+Xa zw>MUw>;ofn{Z`jxR<4+jP#xQZf1uOktmU2@1|4D`unbyBUGi7*C^>^2x7nAJz05gI z`5YbUUVJA@9$C9>f5*cPd%}idl>X8rm*$zJ+6Me&N2zKVSooE=qjjcFVQ$E&rtT<2 z=2e0JP;;O(11Q5KIZ_jlWM_|*Jn!Px&9yZgS`UP%V2rzAlYU?{(sabm!d%RXT=W0G zFLbeuE;-b8nK^G|``+i;kn7u(E1S{sEx#T3tz9y!L7HUHkM`+$)aI z9YmH2X2vAqU#;F1uf|<3@kM;CTx~ndbuezWUTtc`WXrN#LEZ&J2HEg{s+#z2ts?*J z*>+^O)rh|xV)>XMY+65*%6XJXY?YDN7z$epDA2wuLZ9{+!Y*x=qH4tfoRbdKx2xvj z4o1Nycam@|ZP)?i+}uN)mE)5|QwDPQn!x!+Fw;37SO-z@OtL3uKM7XnO2&&_!=?M2 zpW@pN0owJC#Z!3`VMdeuUCu4het{bG$Ei9HCi5{F(+L7TP(&h;(Y^%0!1Pq7RS7py z$Pt$Pv3=}4Y6DZUpmmEvXcNZi@j(&}MDL6b7WE#~pC9fztBV!4+c*VqDRn|SHNEG_SuCpnswrQ>N= z)V+~So``q8-l=NAen_MfqkRG2brZBO1N_hp%8j-oDsQV@m79J_bd9l1Z0qtX7Xv;-}jdTWTI> zM)MT$ym7K^W>=B;6syb9JM*tK0P6y4BBZCh;6w0IQ2xE%Swf-7=y%0k#z8TH+@s0+ zL{=@aZS?_NUXBq%5U-8z4?B#T)I}kw=|ro`^pUqC29gyELH99gS^}exn9tpUVQ^6w zj*-Tp+JCWRUi(~?iy7jsrIKQ8aW|pAi+@$*po7XaN9X0*^<5+fdzP|)G|ya-aAfU% z{h~VthVbN!NlH(sde}RZHtYNFJz-QCp%v-zs-IX{{aJp`2z`soi9>;Anl;eg*mOK^ zLiWfe$5=HLKV;S#sV~bbnFL1dKBYP;Q8_@#4CpndQ}GFRb|s7{aAwTsrFRU8N1Kez zm}CZDEn!f=9hLVm!EAL~vnCb(*2K;Pb;w0|;;WqJig6_R-gzao-8Vr6^2Le6LE$WXQAUlXf5wA3|04jCF_4e`8e6~yi5!4-oA`vZ-qonncnB9#v~Mf#uLoQdtP3kH!(;SAl_Hp~Mlx%g)Aw z$Z%tL#TT3XbURzEaCe-fA;I{eQ3%uJci>8GN?KUz_i)le82eV$@NiKWmAUm{b{2Ac z&fzH0QL#zi$B(e1Xf98f4RxHNp2M5##th|psx_*|bwmGFHO6?0ZIh)~R#dp1it*N> zaqWS-NW2WfbA|1lxm$bi&T;A(+N!(o)rP@w)J*WJfR|J6BoE5uxzFPoX4cyrVuTM4 z|5DfFXM!I2=gdhwHDGNL=;%uCzVr?)Wh zbPF3u8zLhq=jQzJ{?=0r8nVM$?QsmJEATtg>AYsPSaYmp~IBrl)7lV)1 zX_vo#QVL(Q`a{T@hGy!jJfoBusR77);Y9YwrC_tIqca)%X%&5pQCkZ{7}&U53Esdi zz2w=Uj;Y`Ti3%nV=in8w1K~YSW@H1J#fErindF?%wtmg`k4DJy?&6&fP2xA#^mE_7 zMZC?HyifV%5lvqzF#iKKakV^aOy7KB@*ncBQMq-&>vgk~cY~qx)rLm@txv=3E8*dF zPNlCP^hf?p=FtX_)-eFT3`ZKqET$A8MNG6HrHg zN0d44DM}44^|5|?PJXBS4)VizkCsFRl69BQCRi-pkMZ#LLy86FuxDP+YI3?&u|vz6 zswdGd!W*Y?oZRRUHvAz-nBLxt^2LGK(F~7?V8nh^?!_pZgewXu{@4e6<=|%dN>#5D zJ4SuhvuUJ##~rVtP^FOTXd&>pU-1SBfRgA-Mk&c?AxwZ z$hP|heI5eVv+P!r6lLRIpUCfK@^(OgCuha)%MBm8_g0LFy|Vr>!0R*Cns9~Pr=Z|gre~K2 z*)}10a%&k!IJpnyWO=2j68_ewer4j9SJx)5zc4G=FF!5%V9G@x*r^&#{LD(FWd%lx zS2=RBdj8$4zJ1|INK!M3n587V95f8zk2*5=SM4N@1qiJ>BZat=p67W&U;!n1J+PYJ zrj1lXwin$!k!S~5Vt|qRjb&WZ1u$krE!Mhrx>0y#mE{UOr{BY@aB&(@WRfCL+%rqL z-VrEpXFg>-pG0p^DZrH+mhgHZ=3R8&3V;BMEeFl2HPf-me-yysB}uI1gjuWM{smda z1>ABgQ}2B=-K^Ax8iL->GN)9Wj$WOpkIoNY4Ixz;=@Ip$)wvf(fj;Gm$rZqhQp z*({&<%*-o0EjZt%XS%sqlrVct4|&vm;amFIcnL>kvsr!xmA+i;!T>-JcwKF`@%vo0IXz(Sq@U)+ldi{J`Pd?k(>B9;PdL!XJjhn|OmXUzWCu zNKn$}a{V!+PFl=W_zq=KS+cr(GaiEZ7PVd6(K4AjcG+5xxZO_KrpzSo0c>ScCuw&& zL;jNWRki)?0(iKH8L)J+gd6l-$O?jyw2gbq8x7$JB+e?{PWD6T`LA+CZo=>XDir%M>OlY4R_lFTzHPU)G3IiRo3brkoJi8W=B z+rJ|E7N8?xuW5UL$*+hk70(}Irb2@x3B9tO-DGkMm>+U5EFx_KNsY$H-7+Z3@ry{m zK;R8!t)-6f746M9uPAaHEcpVtlV|=L!G^KXJu)S6+A;WfIGO6ad&o|C(}gyUSOH%q z&joGenw0MHSDEa~9Ty0`F$}W0k&c}e`U{MCS|!YmQvZvGyi(nr64nkDKJ%m%l41`p z`MvjT)7v~TiH7hRfn{9_;`kvR@49RQqIj9aYP^XEcc7PLs*ZQwxf!&3-`mNlcY-0Q zsk_mcAD(i^;C7g3D#4h7-717MugLeAiPguqm!WyEnPw<>T@gbUWrqSW0A(b>W3>I_ z^9r4_fQ}~j%coCZgDts?l=aR)W2Pgug4P=i9r6=ph7#VMOHG@|! zKT~Q*%4;fKV=c^oSL*gw4dqnNlwC~QkBed~@h5bOO}ZvBa*ZW~f}DvzCOp#HI!J95 zS6;ecPY5;?JBAR>@_&|Tbja&5$N2@pHDv^Y8gP#Y1#brup&XAewC6QRm~lTp+J% zHN+~?vLy&CIXs{X0BG1fo8)$uSI9N`@lXm~-33b&)%jq7)z$en z`@_vf-ZvNh0mqGT?^RZ0OA%lfB8Q3Y{5&4~OATfgAJ{QzxV``Pxa|j_-YK*gTesMN zMpP(eq)-k}>WK<+tu1(Y2`n;qwqFBX$TnRO{g~E;e-O+}b|f?i+I~i5V`N!UCJJ}JeF#gO` zt6DFhBGuT9Jo=7AF#x4drdPDbE#MT2zv-t6lO6W`E45-&q|q{{!u)<>Lh=%>ThM%i z9uc{oNtzoLny%W1TRMWvyBoqr>J9rSyx45t=_I(6b*;poh$V+l6LKk%opXcOt__rg z?tf zpEzT>AM4J$cJ~25KoaT_B|&81OIS6qo?H-I4elbWxM++Ey#xv{jA5R zx^*_f_DJ-O-lYJREHs70M(TYLJeZ;1zm+a7C%oHSy3+^KR6&!^tXIH&3w!|!En#c; zTZV9!jP(X_Syg;k`OnT;S%Iz!aA~WZ)sKv9FVI@>CRV`lnSQWn1rq7*vjIV2u~qrX za2@p;TDtEl>C?ZrrkBRWx6;I^l2s&75uZ_j-bsF{zs6d?P`6%2ciq(Agd*Q9oq!ob5ZFqG{Y|u z(KF58JG}8})<@E4aV^CH#t7r+hzRS{0@LDOk_aOC&{y)@eMz0aFsbMUwswZSc|ZuU z9$52)p+>Z>gn+77mtvgRLsYkv&0jgT9_La^IGj#>b0WKkuv!(h0|71Tven8m3s+YsHF zEzVC@8EQ;B;NT(iYpk@R8h&A>684!FhLjb6jOzURqskCMRlgVF@y(SFZS1JvF$l+8 zM#tVlpm|1YqqL?Z-{{AH9BRlKMxBy28&0;?Qtd5Dh_b_;2NgL2lcfPvtijz3On)VXcfQ6_|MAD zGAe@dE}1FheNOFrh2wOl_zF4)1G_yf7KEu!*qe`QA$-rcw`i+G_Tl9eJ6mMj3uq(o zuEu6k`epLkVbs{m;t^)zL-`5!C+fv;m;1l?)Cd0{X@R{i+O75QyIWJfT9PIRheKr4 zyzaO}Xe=ykdliYeg`q{juq32rp7}ZMONVfBMkwEoMr?lyJ8<8@-U z=_Ro_^P2Kp=d6n!{e%DCo%M^+8XkD42WZR*bg`2rDs*0&lODm4*;W%07-!q&B?8h= zAtYB*8zgaLmoyjWj%4rHv_(VecVDmx#iHD?pX3X+#1=*1bT@w*!0h(;gZez_NFlf7 zmAIhkYv^xkGDNEg{EN4cuhZGgyCVm8a$E8nxG?-XTSEHBo4MdgY*wni4t!MjRk!n={WNY9cS^yM;fQW=du^0Z{oPn}(!g#GA(Xw!%7@MoLx`nTx zNU}Gq48@XJM-U3kQ@7l-DXd%gvMA*w6x zb^SH<51xeF@=E}8H=?aEZwN(rb}8Y3F%v0BezCvPglaeQDMguMc}TUNpHF|Q2+JR6 zf6}0Ulfb)^jsUdb>=_{}7AF_*&2M2*A?(ovMf1)qCJd%)a2Q%?y_Tay)izEI2Szgy z&H!9H5dw643NzkH@LGBN-(12ZT~^>QSpKRZ4naS0ev$)FB5LiaNpey4Vll!^H`P&+ z-LhR@HiETG0$#;K$^`a0`kJ(#QfzV!T3=!#ZS5riAXZ$6CAF%pyRX{fX?N#T-SYTJ ztnR0&47ijaQdi@tvkal!*48;repM{RD1rR7N>#upG*(XP`$i_=Kh%59(Jlw}G{4BH zpz1|TzO?M3?bD3P(J-W6QCsW*)-*O1QhguJDTGFIXvY%~pv#MOaQF!7TYWSdLuzRk z8zZeQ?0D;di-^Ao67fz|i*R|`-u2-(xDIu)Ai-IdaSY`abDv$5!J7&&d9APgbE>84 zU)IvCD}gqzvc0-(oq8r7vn$wtq&vlUAHL#rr)|+_3fzFq5vsQBy{=66)DD zWat)#`g&;@GBMX&75*bMU=w+z<%{lyOj7o8J}wxxB-fQK?y=o+JRs1g#=#(C|Ii#@ z@5I<5|8@R3E3aRz3}7d`Uh8|9zf-Hk^1beAaH$H&=;*ygp4bF6(?Fh(SS(BVe&(4` zVhF-e&mc8;gp(EPoxW;WWlK$-dzr74G6WBgLu=DKkv@;fLC zv~(J>J^OgbcxM8Zu^=X-l@jCc!K_;BWsC5=o$+vyM^BRx`jP13{n|>AlJMg4AZ1ze zWdn3WXV;WHjH!@zkYJ2Rz*Jz2595B2EIWFNpB+Zli`I7jwv2ICaW~Lj2l}#x5}Hm!K_RRyeC}3GM;II!;v{M0)#Z9jC>=2b0bz= zTY2LZPnu#^-xP@^>Mp3fZQ%4l$YlJ!vedzrxHyEYx|i*E3Kuq}ongd!K3bP@cuW$T z@Ah?BI*bHUeSGEAz{9X>B%2`yQ&}SPYlysf4JQU9W|b)T&i&al` zOUu-b8gGSqh6keBb0)y~4GdbSIcbxxoS-U9KPJ6szk|WKLS4VfLmI%@$dG0ZUeEe^uL=#KrY$L_F~b>3_86X zJAfeJcTWvL^0p@vj(^MU98~|i8Ws;F$b*YtHte95jpaSeW20tS^RD#`OFEEY->1sC znrP}wz}*25z6IIRozK0#Psg=QIv<9UgljYWK+QJGh^pJQoik(@cgs2hwmjqcw~m=+ zKUvXFZM@wQ#HLxeuS={L(@R9?K77HJxCeiri>^o1Ax81m8r2WM`|CI7oBUQ2tHWQo zOE;*OjQy91fw1xEymz-r3KRUDrPz0eR8T3#F-X;p8zJxVAb&Aklo5ln~DlwUihkHpW-pAGxyy_wd z4~$kbX`5>6?e+9UBZS1h-^!q??c5x~+_`&Axr5>>D&8)`oduBh!uXxn4^Jb3!Pjr^y*P!2 zz68;a*l_(#Z#z^3S>l8g$ZgeCC!|%j=cz0*UDq?10&=S|I(W2$C`39i=85+jaaxb1 zyDyX0gb7xEO3*_Dn8LLihhE_n5u}7Iam%ZzU#*8bCu7P0EA~Kxwz1a`y}&u`Gr~%l zuyBv)mJ&{{otK%l?z=DS>k}8)mHbm^Z z;Qf!FTXv*Th3>8AI|(3T{e7B*0)!NqNoyzV4g#~s7>U?~3P`L8s(DBMm7l8k4betx z0$P(HpGEsHCUIzBYJ{cv?cAf>AvGbRn4^@7GFfY%t&xS+%1WW%TNc@HyYVXSVK01s z#O->8Ki*Umhzd@)n_S!l&f zCJUwYt80YlMp*MpRWG}y5g5H&63PbpZ%g-LpJHkk)n)MuZo3ChJ?ez++L^k}He-=@Nr3%}Bgkze*5yXNX(@jXZx6yE&*k6T!Ohl-fbsndfoNB9N zCyiw<9#FI>GP;=X_12WGOSpR5Y`~NYo;AOeUEL(|_LUMZ%BmK4pn`!hhCGu9Uw+%A z=hHbmz#uzt*7A11-{#bhNi9028lw#{UXj#l2QfeN_IKA~mRW%UA{1wvw36)M+;NuBQbbwHT{8R&ES8}P zA2u%P@C(1LnelbD$tp@B&b-gl0@im1ATQP1nE}qzEJ>h<*wCAV=b*k_kZdiPLpt5QaB+{xn=xJ9mAUv8`PnQ#8eK0I z;V2`(%@)9W#7(_4lMv`P_Km`4qG~HDL9L=0uge3$?7H6PB5F$rFd8Z1Dn?%zP{F*z4PzFKMR;t+390uE;fme*!5 zPTDqBO6v{>)5S?r#j&o`6MTGQ+ka=r<{F!42`uh{@S#W$Wp>M!zq(TD31X<1#7D1fb!p*$)#ee&Xvf>1|C5C z=^j+q^yB+klP@Pq)eCR4LKQKpuyAgHQlnWfGLA)j1HrUT9x#w9)fgeZ(zbye{l~`iq3K z1m{LsM1=(-n3aCHz26%%DpYlA;?vKX`1Izya#98waFNk0%U{Qiqw|oe@d+qnTC*mj zYxvMFMDqCUXvc445RTdcC(62Ok7;+r)8f*>(y7pCKmE|zmj|i=@HMkCHW7GR!70e* zxzTRX`_cbyTKx6(Y`3!$i5&vQ*>U3G0}XeW#pT1q4-^U_z$a$&nc=$-`DowenkDN4 zmhfW8*UZH!3#$)83m6XuVySakTUcBSW%wxJY6`LhJW-)(foY_ls&gQrx;7n~+>2v; zKqD7tUJJfQy^jq1ybGV6PTv%jjEA$zDht#CcQ-1Y33|n+YcL`SzZp_C zn|stZckAo63GT`&wMM|{+J!$Sri#osQe@|MK?9BC=UqUD#l|i!8eAPmyD*MKi!(B+ zRs;f`cP_vMueLn$b6VL{DJH<0L4Ga}p zco$Oo4(oT1>CRULOtvFuE!Z_CE=)`o*PJAJeH3Glv8t#_iQlqTe*wlB_~1~!E-RK* zDN5TzTs|)8+mXN-c=$v6^61YIF(<-a@dmB1UW|iTw!#W*TXJqaDW*EW5lvuH2Ki{W zb$I2~=26*3a_IC6bd}AshpoCshI;euq1=lqb)5s3$%Kao4)N6A zZ_34ZG>d9bM&eITkse2}QiQjgReYi{f zAa#PY51my;n2*;^_~mLa%mmCE>d9MCu!FX=C@FxRL!# zfvAQxs)Gv`+zh2J((b_i>tmv0ufbLhCJ+a*7FP+DfI@Fj$fK|a$h*;jSOA9z^|uUY zSrCR{o;I`e>``YaWh_FVYftf)7n^KO)*pOHGaTM;X^>&0{TROWT08K#0>%S=x*~YH zc{=e=OKTIl1zSX)6s>@F@p6{IDiFW>O-A*35%`heDkyX~Z@Qfi(R8B-Wipf-Y37iGNB`Rx5HiH+y=T=pxtfZt7}! zp6pegw$uq?(M|GS96w<*K_{|o?-%E`$K9JqPkAH#St>hQ8LLB1tZtI&-DG4~TIfX-MCT}0E7SL4G;NeEABdG5+TG)L?41r?y zoLm!sL=_sjBQHnA^C1SDIWA<^Q=$c``on8QnjH9uBbWB!l#Dn7d`F!W9g=tA=FX15 z>++sa{+*qybTnu0<4-Kj0o%RM{UDAW+fbCJ+s`>>##Ep+5GSp%a#vE`e&c#TM`DtZ zH@z;wTeo8R^5|zDad&}p@W)U+5q9@ckTB->OIed5W1n86H5a9z3@N89Cc9?YtsFEZ z*jVTu>%XRU<-g~CW7i@+fQEQqTa|u^NZ@gFxI+BrSQgV?)r!pZ0W|L1i@6%HL#-46 zikrxsM+CT9UAelrmZlumG0s9AT;)pU&iIf6DQT;rihM2d>uTNl$pxdpDq1nV@+es( zW0?|gFf9l{aF^b6m-Ln5WV+CSQ7#t0TDGSYq5fN}IJoUeWi(2~1ko z+@BB2$y1oK5spEy@$9JJ=-4R4wC=n+17=~cRER%@NGTaiYj}ryQsrh({4b~(oA4eH zTwp7`W^ONEiL@L{QU?>B?%C`ql_Lb8*y}^8_%U|Nawuz2x>Dr=)L8FA4)EZ@iqLm- zGZFatC2|t@@t0MM_0`il3t&4L#$qsle{N5(aSbAt1+Eo7D>s#%1Y?7-ugQ~t?BsHm zeuXax{Q5u<2TGR^_s~C6U%BVyj4uF5j}*bL*wC7Mk#}UMBp*dBVX8PTrvq+n^gv+s zjD9|6Jv3K7DpRBf#O@1hjK5F;PD})2N-D5u!Xr4=d z<5?HwKzTQ`y0_kF+-R>>_J6OA=@byOiP0%D`h0{^6E%YT-Vu;G22(1O-x?E^a;(I1 z6T1ICN(C%fjbf5@@tSp?J=VrRAym=*)48W{98Yz2(QXp}GhU#=&8AD4Wk-NIDsTsX zY5F?n=1!|n=`rTd_MHj5QMcKs3ur6>Iub(7pSUy!$4Q-|73fA>3+NTTRuKMhT$_hc z;JDEp_O|}oWR@pSV5zeBA#56{V=VIPFAx?Yq>0KbAraWwIkQ0u3s6Yb-bbPy_vh@8 zED%5zq{U7!ad~+4wfOLMqQ>h(K3Q>N$F%gmnw;s_lf2*w@Ms~|ew*t(?Y&M=Qc_5y z*{=7ShMweX$xBB^E?BI?J@*I;LMASfWO1IM8l@_S3|c}WJ90bYs}Ncimml^g8Fjxr z5hH>RN4WQH3;-tOW-dbxA^40FRC-{Q4In8b*Iw&d+*0ZHu_0;Rf#Zm}{BE6vV;*S? zJcO&zzo5L1MEj3AqjWA$BMtbp0H+8l0;Fd|8qL$;wb6!WRyHU)Hsq^&y@tDg{}&vOrVsFY>h&l?P>>}U~!%=L*&z& z8>oaw5Rfy@{+y(s&2+AHF=IDg_IRD|>#8^ODGXLKjaz%hq>HclqZ^UIH3bCbmSVl6 zf-bqYn|MJM+dP~~&~Fee0x%J({5b-jFy!Y+T42J9HU_S&@s}DM!0{2dIp7bg5&EuMhwRES`hkD|qKZc<>ie|ZC3&H$M;d?0 ziU#wDQ^qFthrA}_2O0gpiW@#2R4f#QeDhMS1 z;rSi&Ff|R36W9hcTj1cnoDa7AM^L4E%LXniv;p1dDhcj( zHwfKPIaPaG4RZ&o5v(}uT>jxTTZDKkB&Ak<9oHdY1yQrYpb0kF=0l!p_s>DHVl-+RmE@rLw-3_1tB@dY)ymBtsQmao1bma3ZfGbnJ zt#z!qA-Ju`^qKt*S_`;94#?j;J(2@JB!r){W1vQ8CCpuNN=)^>ylWf?HV>z)u;Qt^ zV01M#)a(|$?{V8SB+>aN%=}_sX+PWhDYo?6{2RCDRM$pDZN7fyBhg0=;Bn|Q?K?LI zp^jkbki&dZPAj&@=^;xtpp2?Yuo(d<5DLL`J1j(_v=Og_(4Z>fQ>Ey=sjx{Bler)* z(jSM=Qv~g=cG9~?O&MEL&W;bH5&NX(Xk1v7taHK{!}zH8cGiPREUD1L`qfJXq@wAc za_uNc-zQAKHj zDsmaruz&#-KmAJv%rR*+Dt~=8{|SM@f`w#7LvCrFPpvDwbo7PR>F=(mc-R~fTzxvu zG9^yoSG|I1!Dn}`)^zo9g+JdixW;`@C?BD&TChSb;KXO$_Z7yb{0GMJvU}?SvD1~c zF!7>)pUxV8X$B;=pm$oR5JY%5f@AYq3An-hd(Vby!%k&7>$VFuobSglxZKLDf;S!e zS)}>b)wF93xJ|RK;jd*oE~nek+tRs>rF1&iZ}3O>Tr41}u!uz`%A3<#B0NGop6niS zHOC~D@r8?MCbZ>@Y}{6vx)X&ZLf@k91;qY|cC)wOb}2^vzZ4F^{7`dv#nYKlsnZya zuu2QZJLxWp38in?=!j?Hwz8hvH7I#3SBz#`?kK?Ntv-sJ@0avwVZtnxJ9TH-=eA>{bGXL(FNIi*^92? zm007=J~xRi4QBp=rMq6+&ve=NmIFjoKO0AiAY_O z-9P}}q-?En0Q!aN9Vn8VRWNj!HBC;UcBNSJV7$COY-&Q!8;uMj5*&-F#$&S69$(1Q z*VBpke&KYY6-xQmN4eh`i|&JTueI%*;d!51rP=WT+u=*mJLHsOw3Pi(D zJ4u!KqjQ3phS|)H4`|G^+J|sIrdvYQYo*)r)v(TYM}lOWvyNWlZJ)nw2#{TV4*593 zIR$aj>uekv@K%2-Cj8CL4xtuw*2HxVRohtUVY(1Z)Rgh=DsaHq0uTJqF!U|C|7MVF z`G-cS#__JxH_!-z$KM$p!az+ueMIGB44`XB&=~+q3Ar=OSJ|K&D5;HIgJ99T&>*N0 zhRc0b0U>B>Y7=_6PNbTb89g7v zJ(R_Qf`VmAOv$OJA~^P$HADCyDe*oNBs-&Tj_ZW+p~-$kF$Q{U*t#GmfO>Am#m_&P zx(x1J?P6x#QI8i0NSV=R&t6dfLlO z>gGHrylDiQe9fI**w#&9u$qSuxKl>2@MweMNH^(dE-Rfa1HsaOi-o zk1~xjfs?$z#x_R8wzovG>*6jc%O55B{ar*tGulL`RR{`?#}G_3&1m(YlrHxD(h6^R_sL#>qa7m=29W@gCXRdE6&pkHdf2V@hBl8qS%gmWjF%Es`kb)1_6TgMMD z!BViahf{I4W|kw`krBJ_+9kiqbWD#3h+kP?dAmPlf|Cl!EM&HO#XVqRorraAz8B&XZ=_}e^(@x z8(KOhPYxCY(fOIa$4&@0n&QmOis4$e4DwD&=*^(n;aEKsm%Ij69blge_#dHjk1~V> zsAo+VU5=dFKxxD*sXLg44CyS;gCa?ntDcvZIAq}o5IHQAOv-knTKgjkFJu@5m;8}$38Z1rhGZ^Sdj=VmszIMk#?LgN7_)+c!u zq>@v=Nh6s8g3mwZD0Lx}b)mh(^caR5PafYJ1632rx%wBWs-1aW@5@Jz@32roXpGXi zLQkId{2Yx&NKE>#!>qUpIT)>Ze8yIuKj9Ygn@))E!q2|nh=`aQV8EXN_K49O<^%o%k*KAcj5D@8zQa@vu=Mq`vN)Qe zD(g=nukIv~l1X-Zy*mgGP9W~~w)r;+N3*RTgji&HoKz>QCdi-W|C5Mb;jt<#D#(al z%9a(%7d*{O!7}pj-e+xN+>*D7cj%NPQfkU$3M%Elew)v$%Oh7)mVX6JSeEXZE$!S~ zNnt>g2K-FC=Es7B=QzkZOs?@=wUi3Xr!a+86rBe0-PWPBw%Fl(iQWhaT5#rOX*8qU z(MOcIZ%>%0)HD?r&w-YGyV*?L{1;fO5Kmp@o7;gKEE$p~n56Rr=J3tBczBB0UEeMG zfRYbN=)s@~t3mmDc~6A!pCkn((|1P@d=trQ4hm-Vm(&(MfvV7&%q&FqkS+XKi7OAW ztVI}t>jLCCsnKOuH??fq2-QwgYfxdE01$i^_@T{Ac#&1-LLD$SvaE^HGw8kpObrzf zD+7Oa7LmebQ7D_akiHP0iT3^>I90JqKS$<7<}t(oK|sF0VKtj0lN)|p6=ul36o+Bt z@#)VA>!D?%F^SY0skg+?*!x3}uHy2YW$gd!*d!45V{wYiZGj++?>|4@FK3?eb~uf8 z%4RP&=B!QI7GG4+17?T&^sdJ8+GE~UiCGDb(L6uu!Ks%cKnbv=!~pjmLV9+JJzGP0 z;DWv3^uXJ6ZkU=q^_xG{3;-G)22Xj8LG-5lRa3>(FiA}s?~v4sRMD9>e^+>l@BZfW zUIk77&dbpfb^s<|yG3vDfYmLMd9@l=ucdR`bGy(|s*LPrrvW$y<<-RuZB*7_7f8#G zm{M51y16NtZq>wmAzAbHT{*h!5!&w7PVi7`##sv%9Y26joT%XHG9De#R_mo0`gde=KGU*}{)>qQSt&Oc z7p01`w5%PGAevt?nljf=z`}_UENag>HSq)Pr1a?&%|#x>G1Snvhkp<3Br?ZmfNLHM z1J&N(_&qArN;5xZCCs2;Lp${u?bCY{nxy$qFq8Mo7OFfn&c9j!Xl67Sc~7bneEx?r z2AT9>V23TSBJsfjh`cD@V$Bd__ zB6lF1EiG=X5-u}o-;VVne2snErRr<#o$gxxe8%FndZMtnyh6P2#{z3PmP)$R&%pd}aqjV|r` zst__?rY`2y8!(;!z8m55&f`9PX+J1`@q$o{ve*6sXmMal4^&{48Y~z4G2K{7tsD!~ ziU_uF{?v5Fdwk1^QxouU2`;f0W>63b41#VzUpLJ{2CS*Xvw`Pt5Vs8H`!g_pf=lNC zIyy^@Xa-)doNrwcj)|>Kj9VCB){1j2M*aR+_KQoYPIWC;a3M}0kdRD!Mu-@!9X+Xx zO)g~u;tTKSB~RF^F7xnJHYpMdqQB65no8#aC!sJr6C&xel2oqX(a7022!3OO)!}zH zVPi-`G2jABDugjmagw#j3LVB;$?YyT{}!Y1=1RAh(e6l{e zdFbn$J+DR0CdsJ0;Q7`AkFN~fvRI5?#nDc{@TZ-3;F zN7Rj~V{0@eC*p23-kBttzeu%}Ke>SftjCLncy2K?M&EoNP@ zoWvcQL}Y{iD*=n^Ew1Hvp1U`%xY@Ua8P_hwHSjGFz#}olBunDP4^Y;UFF^By;HQtz z>6a98ET#2JSB|`?F`XgSe*e-aU@PsnTwaOvh}Y>R?3^oS<)!ZvRX0%_U+ zIj5+?n-R#`MOcN$@HURNQ1E2qJ|a=2s#t`OEL!xjUFTzi4^F#8APb@qg9CmP*-5Nx z=z!oU6cuz6spv@2mSnMvl=S<6HM0;rE~o7Pknlg65@vCj04xwkod$OxvDHMBm|M=^=R- zrZAt=#!rem$h-veAYSo=!x_egTwL#w<;wSYeJ~O-bP3zZ6>qWnU=xqaRu*6aA48V@ z$ov#=hoVXgSe^4Qo`lj)4QG6dm-RP( zmN=4BN;oyKir_*nC+*8#*jAmicG~Ewdd)K8u6HgC25}re$t-<@PzTQqq@jouNWLs= z;aGPrFSf3iYk8}+&t0+}_k~IU4*>gPP_&d4Yz{@em7>26>a!ZUxq0uw_haI+FN7`VEO>+KIpJ98tbt#wO<+sV3rDezo#66{U$yLN~Rlwn`DjNM7_TBa-)Jv!uh?BahM{AnOlD%L+c z>DtMf)!ziIn_s*{VPD&69fQJeIV~T7?0`IuBO$O>j&j!oy1dMkXlYZHvmX;d-V+>! z$oz-}7i(t!XYYZTK%7&R6#FC|*0b4sk+)k`TV41y7jmw0QJCqFrsicYj&JcLj10!< zT244Apy&~HRSZLHblp8)gq<@dAVv3ZbW!6LPS!o4 zUOzxOpFkfQHJKFrqW+RoOP2wh6(?pv{zXFM zA*6&Luhjb}f|9{Pda4<8!@(Yjcnl^E{f^BDQzKnR&SIF^sW1UYa;{7{Jmgy75pa6< z6s)pye1EdnfInt#rOnb+cG#{_=mzv2O4`5KUhS1Y4U&e}#Z+1}4IC}&su_Vd=pD~a z7P|{8Q(tlocp7P4x3Zm}Cby`%5B*+#^#a=WyAMO~@dBm4f_yV2Bx9kkX7VmE%iqC= zR3{n<)b8-zwDWXKLDR%x1ZuSEn1NmH=Q0IpxWj1L=_=tvuvw-AjM%QgSx;D8CiBc<@T1jMU{>!wh6zf^-Ox<%MFL?!KPrQmg| z_VN9W7Kr>?qn6PmOGNwyowSL&)=mljQj+11tSM`%r2aWNrtsq2A1ON=#%?U@p=2^< zB__lxxv8fO(HS-6v(JbZMt0)XHrc>fY=Rf7;}7tB-+go|0pgesi!as+{S4DWXhzD? zIGHoh{@+~%;{VNa7a8{2Aek1ocY*`LYtav9bhJ853uSWO?Aw?sOZhFK^Jt0*m%1<23j7X7 z+3JE7HA~oLyCUu#^k<#N3kLopq6Y+?Xsf`?uR{L)EIj9K*Z~bI#j4kA<+WxX#OE+w zv-}>`CJ6)|D0A}|M3lT2TXYQMB$bYrQhP-O-s79BR12f({*BF!n07{C{eu)A?IC#d zL9A}%>zDwi8E7r=139Bh{zedxmv>+Xp&E=654J4jJuN|8`*0%j~*c+*f z0zsyPfbwtg1MtkpkBeGR%#LDdNtucXDwurKh=$Q2L!(;uMo1h&1kZ%KMp@;P{g-oz zz#>sV)}0!Vt#_vIv*t?b(sB?hYlYm%jcRLkYX}1C2E!P~;p_WRl$|B0Zll&CWve!N zDGcS!ydL3N9cQeJUI(hn%iCLK!XVlSulr6sL|-<5sFu(tVyQX)o0uz-MXH71Ol}G& zCBE#;4joj?QJo@k{Gh*$<+k$Mp3Kg#6C0ZF~u>Q9BC<_WRFhb4c_wlNvPhYzBVvLx7F9s1~PR5I1+(HrqbZL7zQk1buv zM?04Kir_Ge>ah3#0wBi%@h?S*&UR+7(7SIm6~%KuD}DrPT}TxdUFqB#Nno9exzRRd z$VBQE9o2LB^$9|0`LK~{EY`Zo=tV3rgASWz=|Zffri;qI zdQ|P=Bq}mgbK7du%eui`6mV~h(cUlTB-;$OAhm=za^;Uc4_I*kz^P&#UbtwilF)JK zF746n5ma?3d%znGK);j2zB)))IB^;uo6X@54kfi8>6ilnaj`xJdSlm)=>a#k*dSW0 zV1f`Kr8oHU5T3>P;dK7gaMS)R>s)@fS=F*LL5!0l&5Az3jd*13!EGigwl`@GvJRBE zX!>f0Q0QE&RV0Gf2d?UOxeZ@K)!rzy!3)lo?);xE~b@d5|C}^%FaoiAeGl z-g%#$i__F5xB&cv0#dqtZav71jyGmN&sdnOGyVD*Vns8~VaLyMt%{f9@$6XW=r^n; z;rg48qCDg1*3_r;NVh=KWfe8kT@^S3=S}!QhYOz9_?fzU z(B>x+A{)OB07te@LaPp%m@g)V0fT02OuJc=TTgqamo2u7+^C%kRc5#>J2Lto^Ou_? ztE;c}L9oz5W@~Dd5VyH?r0OczZd4*lExyf~2%oDMZzC<1;BTInb}#;-$!xJn+zZ~J z%%ar4Ao6h5@Nv~>C4m|&N} z$>I|D4Sb|qUx-#;Kk1I3ejhH1=qWEBi*jC+mc^#}e8k9&jPn(uU$wz?jb7B}aPQ@5 z4}zzE;{Hn;e)tolT~#XO5L>j)l?-{@n8SJpM;E(CFuLSnKWSh=j2fR^W8TjR70U@&$KB3ELk zDOFulp;mv~4}Z^%VXWVq>C;5hw(2DeuirSAK*OsULGe_)til^kR?q~@=B71{$N57} zS#jZpbi#M#Gr*-s!R$pZPkv=caVNWKsO~X8m&gG~8wBe*1wtuxm$d|`QkxmOPCTib zKE%r~*T+I=StKW@rEbkaafCARBW85ScSQ-??ok!~n2_tZ2Zos+9~t=TETfK2Ii*^C zZ^xC8-{C52kTE;~(g&6n`gwCj*3_3tg*aKQM{EE|OQxE;e}129|WTTcrUvq0mN8y)C3sGnz7` zn4^lB3qL*83vDIqVU2K72+Y?H4!|1ChFpG5Yx^_~r1Ds}NXxD+;VcOCuo;(xD9Za^#*J@CDi*(&EFGV&^ffT?1eIcS{^P%*g^x-(2T zy&}b`W-A1328{^kcqz6&>)qAN%3%BXYN_$inXvdH8<~tye%cWE(pcbwRzA9qY6)Tv zz0-{rZ?vB#TAXsgSsFf|bz>dgxaDU&qQqeCJf5(WLYC=4i#xq<353{ZYoK12$_s3L zX+YDDFtlITi`)AcUS!UlQM!8@;pc_>NDGpf!#!ot*1`=^`Tr7*6jkpM;VA8pRk)Y{ z3rL34W>4hY;YV|kkd*EM5Dyv|?^~V-|``mlqn$*)< zPqNm$LBW^JPkxQMaV@2=8CusSpa`JU-sr11Q)&H@OZmC*TuoC+1Pjy(2ikWVA+L+4 zl;9=beY3Ms!3c;QQ{6q~p-q~5NL0Pj+p2zK$_s&nF->OC;E4lC@JAn9P^$=1Mwi& zu$lo9r)FB~;PN$a#fOw4D_o;U%XN@bc96wSHFxxXDX4E@Nj;=m(ngJO)+^>F8+B6MFI<=Hf_=QNc;*Wwin>izjdpjErpi@QSpC@h75U`V zXT!J%M!woB154n4`Lttrl5%}IH*e*(^aTxS z(GgDWv;7;QNCNDH2w>V%{9!AFRH1GnE{?6PcF;FN3nGz>n|ZIXxT^9eD;1w>yz?Hh z84*}YrTMKrzL&C-QSAP{uN)x2@AbEZjqId(JI34wNmAM5;a~Wkvb8O;N6ZRy<&>+z zVUUk^zcp?JQ@KR}Vw!U;81va$gf zMannOVO{_(Mm^}Ho8~UQv36=L>H-~D6=jdF1gK0krv}u}r8=CPrI-mZ3p>%f-jYq_h8g$XxnE2t}$q#7bSa%d>eG(wrw?yVFZsg@0o;6|LM z)xmOM%t&b=ua@Vgz=6bRAK00#mup|VMi-U`ZPAh9`(A(*Pu^xI^ihbzvPv@RFW872 zDi8B0N?8usw(T5v{d1;%UXS(_b|Tw}v*u2ER|`AIM#DC9SS^@zM}#l;Ze+z2oE?I+ zHz4nVq~vsS#aL=pQZ}BNiE9a4!`EW~NuuG(E4n0lr{lrOFxO1*+0AFFL*n&JRF26= z4L3dk7U+q$B0hO=1(_c|<;tr74iTjLE+RE78&LRAq_wdCTD3Hln#f!*@#g44iY%1y z4G>3(*T}b>BsSQoa79396cYXO>wqxJ^1*u8p1wK~y&fVP-I^-H>tm-LW4p=yUu}#V zhDR{$EbVF;yo}MwXJgvuf&pYIcrXa(jzlxmKx&+0aj1@?^puU4){PR#+K1)1`Uwmaow!|NkW*_UC$%~4Scgv;-#R5~G3QAi zI~uO3$0!>;ih|%q%O#@cu z?SVzzeO^$nbd~idefNS|iXEYF&>v*A7O zHXi^2kTv%ko&G>RZ%y@(5?VgdKoVF73g5TLn46=dI!sS$%1)6%fl@sLrI62ALe!|* z;2mBVsPLulIkj?ukGuj}b8J*dM}%ys7#UVh9Qu1ncg)z!!?RYS>^2DilQ&$*0x6|& zg91@T2&~*$?*;C%=?qu?2rG7_>k7%~1QhdA>Nj|px|kkbRfS9V>>DfJJ{pH88aP2f z#8JPoMfO&Utf*yhfjVaBwE`+ewm5^*&IeMjoeBiy=PQ+ z!5#&R7J}Z#gBd;u}5Bg$wh~kC1HS<{s(a~oL=7l`Ysdf_Z$p>Gg^!nXfx`&mN9jA0Yh_S ziMISG(S-F2tgO8(Su#(_RF$-{YO9R;(_x@ zcpp?C+%5WIoB0|bwJ$Z~>)Bu-cX~j*`-sX}%>QH7SYFpYAnv?W33AEkA=DdT=2hP- zpRYw?&hXrIWHNQ=5GGwa(M_12yJ#Vv#-z4N`S%TDBpt0MB1%@o3Vuu1{9CDMUx&xk z>mbASvu8NXKoS#3A?=B2GZ&GJ>ipSHOxUd^+uFr0(>rM^jdfr|-h88^8+|#zy&P3a z2zXxgrgb~1YnLJ^wn$ku#>d0Mv1z%ckVH+$=vyStWsfcR9x7vdgcs$AADM^)j$4R= zYtQ0ZOMKo2dz51C$A=-R_jrdL`ysHJry8KL(*aP+w!`}6L-+-?Efs8>UH=BR^*?1+ z=!zrd?%aa&dJprK95VDTtm(p~@L^RY7c6fzm6PDBDno3ClhSNQtMl)CTR)66K{P3=PnJN{7?xE4RNp__)H*1w6}Io%!NIZmLn* zUV3)90)Bl;pNR*c0m0)I6ees~apY2%@3hcDcl>;kE>N{X60?Dv zenCuDONhgbwvkm(V7%4zHGVrD_6jPzTTGLDW@;E;KiRXpBZzZ(L4kk@px4y->#_^N z$`MH=Y@SjV)FS-V4Gdty-V$;)z=?#p(SZrAR;E}(5D5mr!hC* zPKv8fDf zU=kKt%}}xkNy5lQS}2 z;||j&y6p0xTRY%EcNYr0T3B!>K32;UUEu5Nn#i~RdIY#^Cy0ELn6d$%@mJ^v{L*CL zk`Y$}?p1uXbhj%HK6wA%AyT{?+UU9uy(9W%9^+pqs_l&52YI9VuV9!`VOK9xB6S~6 z_0Ol?`QM2Y^Sx=Wrgg==0W0l*y&Bqw8OXoonX&=6>D;hmaT z@%5a7noPIpzSbnmTT86mI3MTYruZbPE22dPgUTz^P#vKmW+*{cag zK;YKQD>*hJDjH<+c!(qf?Di8J6fa(gal3cq$RywH&$+-H0-E2U!lZO5OB{UzA51`Y z`mWltyZpT1!6$2mcboS-`s<$+X~2*BPZ##939_mGx;U2hfrnj+Zwe9t21W%$K~&E= z`GKy?SwO`c4hln2ot?@$hlZ06BiwIpz8LuwEPog0(!ZTJi=w0#LbrkI3PzT68e~ly zbPhtQEzkD0=?1BJtm>)5XYqaI1I;v`7{AK<^##$nJ2j2`_uB3z0q}1pXt(tSjjJ`- zC;q14bL8z7cW5sHEm~cBPm^{uICvjljA9Cb%8(Kj6cXz*ePxms$H}TC3W_FeK|jrECTt$3;|<3KGEe8k$P~vZA$uz4LmPgD za8|+X%>We@1N{mvZvE?CNrGqfbr0!lh=1622XrWRy!B7;+fPvHCMguWtU1czN)^?6 zqe3Od^g|xJ@wQ(PGhunqjR$l+fHJRxc-XF+vo?EZr(jz9eeX?XR(|6AeKHrAl8lfw z02*E<4F(kjF{L(Y(UL1F#RfeD;u^%k_>nJG?+ehnGa9DNMu$oO9vpTa5r1VDe$6r| zr70yhB_HTW9p{BFk{+l7#C_Y15s9LMx$$NOsl0DdGlOX)@gWM-81PdZHm`U!yeH!Y zh{;(gNS?aIA=27_sW`NXRRaOrayyD~(`(~u%DWB^RBX3+U&a8ci`5o77~^-({aY|! zfjyCT2{e{LCjU|(mR#0A>N$%MBa);k$+->#c(BUaYX**u=yZlSQjKM2_N54D&O%P6 z*Y>&k<7h8ScvVz4@<;f;wEJudTF>J@lsj?eEfIi6$cYEpJ@Gy4Qj?^f zE2-M8D|!FjbY|)wSCot)^T7eG?0v+~jLtMtMOYa&x7hj3yI}kT5y&R_+i?O)2Oc$| zIU^}<3n|zAvCeR!I@2!l+JBiFeh0r(zneVIUicw%dowJxzZf8LcGWklyJGAzDsKIf z{as0-hN!4=CWdzG7ml^6}}5% z3~wPrwf@S15x}&eWqS1mpwAPxo6lNZCEAu#o6Q@wV98f4Md<~df(T`dw+@v3J`Zkf0)o*s+ma=A~ZjUM@CY&Sdfdv8grrl&jKeJcWS$UW!lfbM20_^xBf0Hk2 zXFYTKNzmr2obT+mu zp0`6WV0nG-f9v8#o@k_Q$m3)RVM0=GLt^X%!+#r$#1Ym6-Uym z^J{96asZcP&-~^|ih`XL2(n;F@_X**j6}3JiOj1}pgAPpyavPOyy!P%|*K*gY6bujms zST+Avt&Y&E%ZnGFz)vVkfoSCVl0FWmxYjgsyWnadTcQ13(_EFn-+OvuXWE{B^y$M?s&i1r+X&&ah=Dx0wzfR;7NB8GE-vZPLF&Fd%q#6t3d%(J02(86nyj*Gk;L7x z-nQ9gBdBigJ)~s%5Tk;U09WDyhZ=a34y{EdwVcmV(!&DLb(mLvC=!%ML-76uJyOMZb!p18Z+j}c4)MX zS$@|17uY&yov#6Q#x8Zp+UY|zD-9wGp78^CsiYas=FDS7VBx~_WKR?2^e1JUw{{zQ zq7=fPI=N|L++|Pa((3YCOta?IfXf``=?%W-&vcPaCC|E5eI4r&VFS;X4 z5v#Oi>}t6WeV{LZaK0YwJ;Yo;QeqA;{F(0 zkgB5>2qt26%``R&P7-kwg0#e$#QPQP76;No3^ga(vQYr~d^LB7d4j=6siUby_y>vL z>2bRN{2u~%K$Oy3Bfa;u-(~~c^v`DhF z=Dj^2hHjwO)+xfAgT6&1@chuu>!S(YR#mo9p-AmFg021?$YKCTbWAE| zGX01@ybn=sk8;*{@In5Mdgc=dmYeB;%#XW6&N5>5z84NOPz+PqK0<${wu%+(Sl(F5u#F&rf< ze;M`OV^Led4rI&hN9(GCvs{N#h4u?tvJs_CBCmuZ*pbz^W&{9%+6QRzYt`hhtgpRsOeD~%+fVKR{a1$^j3j+! zQi2yU%k{)y6d%P7jvez!Lzm?1$nbC?{G3;aUB}6PkwQe)k3Bfz7V-n3yI=SOLh(8= z&g!Im`$dh=v{-c{_rBJtfcnKG+W|=p6i6)R9mv?=ryxz7M5Pw zjO?XZhjB>^ztvSLq<-^ph5#S^n|T^)1eIA3Bs^eIeOz0A{p#neUWKk!5}2;|U4T*otdfR17;7{52q5*J&mKQJbowC|sn*D)gGfGe| zW*}#hV(Nut%-i(I5K;rCBpt;!mA2rlsOJz-`PFKx4dMt{tB|t(@Tcq-PIo0Gg7$v| z(-@W)Ckw!SVo;Fdr~TF$To715U7}*u&6k->4@hrTBS4_rIcNI9af|s>^`*2+RBnRf z>*{T);-gBvU0j*rDTwC6E!Kyk$OU?r71?e61J z#ycu~q}m<+Brw!IIdOcd6c4-_yVg^_<0%nN4f2*!~G zutJH|;oV*F&FHW_izK|kE!>eG^p$`3_D^qJu*;0LJ}75P%?1$5|I}R>%n?1^Gcp=2 z_PJL%tITiI*ajNSlofpJT$vQo=G}XkPpBztM=J;HA;H1zYj$5QLGot9!iFfOa@Xwi z@$+S2Y9N+o?k|z2y=?Row2_Z;30%XrzQ4q7XAm%B0=2ah$5(3$C)jr;$~}8FZuWv* zhy6)aEaNt#w_Lw{166ck_l!Dc(XFf-EZpi5zPDdr!+1rLfcaL*%1R7l*pnRJX-U`z zloA{=FVcD2c(_yVzj8%_NIpcOsLF4)Y`TO6DJ}o{c{{nGW*DG?p5c%#dt{6WMAE)e zXGwfm!FaAjf#e>c76mE;OvF}}(G2(`F*PD9C*RcN0V0yxbD^+<3?d974a=QFjRgPf zNC*z~r|C#pS$$G-l5m~Bmt^7>lFOoef>>4~baL>Q7UPtn%4qp(Vw2meD({N`6*HEw z4_{?$|K^9XQr>{x3RmF=mSHJ}rrYi<7vr1on``3^zo6x84?u976R&ibzd#B||m=f8IjgvGf)(8o_cHEJ~e z^c8V2#P@rSNXU{x=#a_H9Z4ype8z}Sr;7GC>cY=R31*0O`Cm%gm2H19(}DwtH{lZr zOuv*RcG}0xY;F8Y4=wUV4e{+e)Wk>;H5!E+ zw~=^j=Ft7h->f&fX*l-r~+ z#`>?Yg{UbD!?M*I>CF))0w}F1ZTcdOA@Qm4)se_K-%O=$F1bDRispwl8;#7pob(^P zpb%W{fkiyH4q`nxToJXSkr$CwoZF2&*wOG#<=#GGJOktX&hQK6ickC+2_+)o` zYvJn=r7;kQVQCt-@oo^(_8?0HJ-NFnqQvJYh?sGL_skr4#5g&rdVwQY`OSMgk`O__ zAGZVW>?ORMR9CO%)Op@ABXPY?eG_uRYySNdTiwBGjZ_!S zcHMhG*Ks(&cLU0NE+Px!x-i_tZn)2OdmdEBWPUF#zrdkRG|T*@Z{o)-9e{E){XCr@ zwy52fg4evPJ&B$Vn0xR*##v;2AIZ1}wd2A*P89}zh@fNmRQXF-U)in}&D2F*_6rPR zMYrQ#Jg)T)zWkg&3&%UNF&wT8-~}lw#%~@uaYw;h|ROC>pd(eY7ln+BoxTDcmiqb!AE1pRs4b|2S&5WOLP3n zQ_dl8sJv-jb%;v$Ko*=RtA(ccagA?R!x`t|a>)~c=o?>;z_%_ZQ3ZdGKxUz58}~}G zi{J-HCf*QSVFl9Yt1M?(S%r5qhV8OSLx7kz0d?g6%%!;^a15}7P^5!b6I#ZlO;VTEi(``wPEwoqDikjs&aBxUMTbz(JCGn?g0B?2PIbj z^L(%^Q`*w)g9{EsC4A)c;ju;ES7b?s$(ea<^g7j+J|R96$6711(BpKaUcR2sd1cDN zB22zkjdlAu4jTc*#p??0Z2Gwm2Fz4V(&&^8k6tC+Xd041(59euUOa-`ED!tA3;kO?M>&njzsnygsZl z{=b`t5I-_yN0-GTro%x*+}3>xjfPxehQQ4Y3&M-*F5SS*XqbNLJq-2?+6#gD2!mikJXcX)O--HjUVPk-kScOY1tV^t=_U|q zqs|Z$^V*pvUOb4P`1gRjPUStq!)BK9QA1sob>U zb2g=*q#$;@3uCP5*5zP# z@;wSNn#BKqh9>qQ9I~sn!7+xm2D7YVJfo0h;`kcKQuVF}q|+atCv% zlBv#_kG#=-86uVnJ#3DQ%+0S>_#{PI$O{dfAISs-=SJ3edqEha@oJk0N0ko=Zp~&1 z_S)A}+MU#d&Z1vt#L51gveJ%}PkQ=dEiKJdBtj}DMGoX?B|i=u;-vnpjgcC_{L0xz z&dnCb%YuT1il)QQiYQo5so_;cyQ5wI4N!d5YHP6OZUNh>P_+WfwN=0kd%)YRORe_2 zIBE-_CM}2Jho44vU|4Q?FKXqZR?fZLwBpvPMKyjnYdepY{rkk*f;*O4bj={rA(IE! zKD?SuDA{Qu5#FH59pJq#5G2WO#ynQD9IMI++<40MkA7qqI-0ILNttLC0$+MGA8E%} ziIjp3DjY{@U7_m7S&CKp*XbvTue-zUV~rD@#KaBk&`UqB?D*gP6nm?_jd+vk&_-_Dw@FU;VB~aqz-&QtQZ9A(kHPJ>Utkm z5#VP3fS0UWp$==&V4GQ>MiC)@RoL@;5o{TUd$o4FMp*eX;>F#9#Ie5wdx8?OEx;e! z#1B#p96oh*w_);?<+ zN?|_YKyBsP0Ps?C0cVIz7qXy_7wi&Bq2%`phr2E$n_D(Ok+gfYJii>XvAXHSD_{Qq zrIWOhBz(1rCOIFS5Fg4iJqTDb8@DtxF-0fUbkIi)#R#4PuBV3jxhpFrJfM&kf828& z879L*%D%C>3H$TqZJdb>R-uIQ3CRSIusN4VTU;T|a0v-sTLi=|EE6AW{GsUs6fTKW zpAFa>_6Cp41Qb56B6TmNnO2Uy>(os?xrn>M^posX^Lm^v7D-+1Gr!f?kB4Czoi1I4 z#=H$`8zw>H-n2$`s)3Fxn#yw|P94&xtE^S9>W}lF4mX!(^mu2F#nX!NNjQ+is4;Do z;vDy9m42lqsH>7f$F?UF?Yn7oUuP{6Y!88{N>V~@;2PZCMZNkwa6#Az(3uv-#E&22 zeY80D093t#X34&GELGr)#O~zOyTu&n{pLm~vHO}bG5JXkV4IpahpBH5@Bm(+hrf7x zt66EyFeYQ46(c#o|D*9%)U(nD;xvB=iJKsjMHbUD#YEu40t4k4Zn{{1xAf} zJj10c6FaKNNtW0ay=byfqE`viZTLJBJyfS}-{_f#b)7nEr6vV#>HRNj#mbu1_H$e5 zgsP^-0qaoS@-&vjQYhpQ!D4d; z<=V?9Q+dQ0Af>#dtENX$t3SmQrtjujVAS$s8@E_jcVv{V*Ahqy>^oG%nXD|oWW`Y# zg#K=@VOVKe8@yR2R`Kd%nj6~zd-a&ql$K2~n5{l}064{+Lx%7R{$V+rHESAAz=Tr$ z@~Hv3R@F)OU-d2k_otR%z0HeK3H($-6qti`bF=dP1sWB2+EYp|D-)0O zqe>?*Cu-pgL?}%70Qq>+|EhfUwcT zi_#>ptV`RNirt7Wc01nk~rSk*hM0Svur zcKCRgmJE}-{-(|ZD-#L4{9udlr@Tu;BWz*l$hGDR=)YDXnoJfkajzDDM*T0Q@hUPRYbQoz=?1 zWZ;_gzKh9~e=^4_VK^5nfBiDjAbi%y=t8#sd%L0Rv`~o?+Xh`W)i?PrX%=Y8ODZv> zS7kD~l?ujbfVCjm&SYra&2Xze?xVu!+Vii$d<18L6* z8Pg>*lct-zbQwUml_1-{8=AEGtlu8?L8c?v6i3l2e=gVvzp;h3NkNJ2fH~ybf{xxC zLNDxXD_YCwN-X6DP2kZO__;rJ9ml_Q?-044^4^s+FQxyYdky`L^lpXPfz^`pq9$&D zXkz{!nCsCHH{8=eXD%)G;GTSSEE8?VXHe&QsQGPfNCITp5;uS_K?@zRZ zD|FU0_-Y|MzRz=)mWkJgtESLD*nf2Mv5r?CJ1|VWlYPT;1T@h^X372w-X5Wb$EbKT zM<4mPv&I6`wQ+dm(gECqCZg<~utytA$%xn1fF9^uHb};x9|0I}51fuF!HbwgIL+~V zhyX`GxW8!$9BUOIHLa*w8YlRvy`=2fJ=I|!4oPqM*lJT`eO7}*-iZ=OEN5sK2x;{} z3}fL;kofki3O-!Z{Bmv-e9ly~Sb=i{adXfVrXG%EMG9%a~Qrdyv0KEApYCcTnRVR)+Qv&e4dDUk+<x39AdpK|?xQ+-h~0^lBl0<<8}K*<+sZNth4tZXv^ zrUl?G1ou#F8cfgh-y<_Wvk8^_i`cIJ>-wQd7Am+G&v4S%NVQ)QCg6xP2aJ{Kpnfeo z-2TnD8h)qZm4-$nu ziXz=lV)+f3m}2e7y0^3&mVCchq&^j=XD}z}!9}0#rL1jQOXaGSydEOh8CwO&LcOq@54T*|?E0&e4Y620*te z6b{k2$yo}1~(c#u}=YM^V4G7VeR&< zSVuXRTYn{YC>mjybY&feNaeTJ9;)w}t9dJr za)Pmojos_mcm$7*eAd2*w+Q?ddRSi3t(ME%zIjqVX{nK)NQ=&^~5Ca>q#kE!_nZ zom*Zj!fk!*`GZNn&~N**Szd(3qz%a1WB4jA0=N&(ea$ENmY~PQS_m9|{u@pS^oTH$ zk?-JX9{%f*9fDDu!AE5eh+ByJQV^u)Dv!gEbv=+HZ6n&q`8lX0eGAUse7Xpm-9`-q zl^T(b^O%&I=tm=-$?{ww4N8s+fia&!{}}e+scbcjTUY7QL$`W~77~4?g?mal#U#ko zBK5i%tgZu~go8oW7m`*g4V1N!+hK;}ih%2j(ebj?hKOUnj3~*sV$3lg`y)RtZ=ziWTxev3 zbKT)-^LAOK#;Rw>NYDov8)Q?`VWj2=Mni|)qu@w45m+t1fX#6>2|;GnifSxypZz(N zPw|dc1ZsI1OVR__{IYVc%;8@T2x5RB(08OkyHy+kzl3wyIg8{#Jk<(HgU_%Ld%r+E zTblbZ9tC{pjECSqqO$}=le*fHErY?s{nm=P)AH~3Q7TZ*HKq$3rcWu&BSFox}932IjOVpcXG%Yc;cL|f~YR|FzH zmx9+W;AhPT*5=XXb){Zba@ChQfzB_{qj_H-Osd&%ujjSKY{94i_=ZfKz0;aZcJh(f zwu;}ZtNpORmwun_tkhq@+L0ek3pIb>+OG3XZ=xF-4Tj{gB3kBz=_Q1ZtVIdA#Gm98 zltg5VM`fH#16+K$73{Pz+Z zxG&Uimv}!o&4HSm1glgY(@s-mZ9d(_T&XXN+4yu^#c@vQM1uiEzW6Y_Pno+UU6#(M z6njPJe}35=;Er7T)T}aW0nP5Ya2nebNN!|64#GEIWFXGr_?yLCDI;hL%Z(Q4ZOOZk z1nG3|O+lwS^Q%11G39=dO&jRzj49&DOz5-AGL^r>Ur`7ce%v9cN;epeko9JSh68-N ztwt<=et_f5$#Z89i@04(uwO#(FW0)SzlSSSFhF)WVjoUMfT_eB=Nnq8nI_4GnR=A( zuimJ#kNHWhM@n^cyb^nLP`CDwBM|hq~_RK0w#}z)OY|+RwwYab_a} z(mXr9={!q^!C&;LxC`s9`EN1j{O*`abnp}Xq(X9e3|mF!TI!GqN-SZ2v_`0JGqkxd zQ&&`dI>c&cwUo?>?jdpH9w3#)f)UCgD`Xf!#0Bg<)+bgL^YSv;#$gwasL^3b{=7hd z@EI*R!1;>0s^?9R0eG=W({UKoUVV#pI^r$W!!zi+j2F1!H|c}%o`fJ@Xp~VBDnt;X zE&zfH!vpb9Bb8KVlnkp~$!KwOtvf2;kBX5tGwGWb>5!5_BFk8QkTy7?Ar;=C{=EE- zPu6FNoUN~XpsHQm`JF|ODg)9^bN4F;qc)F#E%Metv9~>wPUyu?^CyO2MFQvv4BM;~ zq`|sjWFBAENK-}`WZoOAGf8)Cyz+>iAd%fwWsGTY6UBWCXWQ@W_PuKY&7ais^=RII zeEOF6nHRe=+G%eKm4uN$TDPOvfpclBfTS73K%E!46CNN)yv1`}=;))k}e_ zuF%_|38%or0d)y@+DOA6+CPU*Cxv+}a3(uD;#6o`wi-xUUm2wN7*xY^WCR20)gZriEbFe2V}Hah}-rGJK1HZkdv+ z!T-m}JoENaRnQ2(4QTICWW=}5*ekI3zB#1j(2w;H2XqCd(ARrHGAl?>DWw9tU3o$E+OrmtBHr+2cBD~Frt!*d(7G%if-ux$g%-TQbU3=G6L2*Y zszY|Nmd7PD;WW1BvS-p1p^F1};ZOVO!uo8pIwEb@!&2Epc7BiNC^fD6R6a4@TAG4h zN@~b;nDx#|QWm&Q!dq9!ne!kx7=>1~de92SKEoRTuB-amvE7+L`buOx1x~#_;SZtN z{yhSobzWiqM5<`?+q4!_6op;WAk0=))iTYsy;elimG2glNaU({J?b}%QX<<-m_-BZ zKC43K4^CSD_e#p-IiShN^5mYJ@)0-Fu3is-EVl_&ss?v&3TQMKlLc+pFPQT5 zT&`fS;lmh1TD0I$N2Qcx@^JyR&4v+M`%qVY*z|2;oF}gNT!D{LAABZgW5^ogtDl4= zJXA@X=%>%i_H5DC#fNmqB?(uKDhWAl>Gx}63_%pUry<*M+#{H!=^Xrm1U0jNfyA9| z*%7ZMtbM_KlfIG#y5)B#`Q#F|F3}H~&Uq6QQ;r`>0}1eOzQ`wP83--iX-=@E$glg( z>8Fxn$Zs2&;9e15u$b+0BRyETZEpfNLr&vFI&7Ru)lXt$Jm?$9Yf~Y_^w4qs<+!UC z)Z(&B^fe=J%3U|z=WJ*N{OOvtigSmbV{+5 z<@0=t_L$)ns{Uz+6K%r!RdF|6oJ z;R`xTi#R5JA>rIBtCX?Irc@^|5w(QWPYVRmSEC}fLLV#!@tPjz;bFFHHDud0#-PJ( zyWCpaI3MS%PIyK`^wQrWb3Y_~s?z)1Fz)cFCiv)1ScnnwI=i=gz=iXLbLS@z+l*Zd zV>Z1uT@~%tGp&Z2%MvnovaP^Tr+yE<)~ci2GP4fShnMY!epHIH(B)lA4OYQG1wXOE z&495tCT>q9S4kQLp)(=b9}cxgvAy4hy8$48DxA z@S8M)vRfhm5KUp6n|1E6Nf;Qu=56_Jn9C=F6>!lSB}nPqcZLx|(LI+0ib##>q;c1f|Y2ET{Pm9T8a9T;QhO$`0IT!-Fz#E#<2mcT# z4o_ulSz@|g`e4X?iID)fa3$alfz{Dm4EXk7{h2MlDN7$)HW6lao8R3}@uquLOrxcH z4l~4g7Op0mkBg2x9Uz4!<;*dCG=<3pd60JVPB`OH=pfz+GoayV_94eDk4hh*$EDZE zQjhbT-qJAhNVvy--kLDSm10$K=`7X-f1_56ze`qX`Hk5uGXHyAQ%g*WCHYr2iYIpV zsKzVcYpkhUjEFn<4AK{3CdsdHl!XfiS2ZK>7GcEQnqxi)i_s%I5~LlclH9#=SaxuR zC5l?1W)%Hsw4WQ5>%bPB4>v^b&@;A{hrEQEvZm8r%t-;5CjXz=OwPqxR^Q zj;p>tZvbW_t49YR?oB8+}uGLc|uE=DA<}y@D=(U7ucsPT0#Emx~o2bW$>4$bgNoy@dvWA|~oM zh0@fM%I~=ArPjtZ8XQD(xD)H>GCgQXW?AB}&IdQwvoHHjD(kpz_ z_CWL1(du3MhadQC0h53J8hW^qd85+1!%74hw#F!hLu^714sljcITFJ{%%b0g;y&Tb zloN_nV6jb}6KTHkqEMkBbNjl9_P{|@z7m-Ksy*w4YUvm{~Z z1#B$=A{Gm@D4MC{R>|PDS5j6-#~zolw`+B__xM&(!|6v`MpGSNjY1+M z@Qwopju7K~7YJ%QgxS9zb~eGkZv=y7Ol+k-3-s3C!>bppyOm1r_iXTljg<+4~SgNR0X8!N%4lUj4|D?Bzf z9;x#HJz+SFVF>vrvEg7q%CBx0u#N@`b+g83po&!k$Xf#Bh}y%XPAgZ7#(CGVLIa-Y zH0;OpBDOaMiIsM_1W(n8GGQ(xdNkO%u*`-;=@`9@XkUau`m_HM6J~ak`1w++BMfVb zK#Rs_^xN;+bObocKoq27)|PikN(pw*C+&)dQ%4*Yfgz4TP5mr3VL8&|=?lL+{LgFe zZ?mi*AoNTLqYg)Qmv!89va%jHgl8(G--Cqk;pItfd`Xz_1NM z(*3AChT$Q}q+^UWBO)oEFdkD7K6sCpX%9MSSNp%bitNyykS9-OkFhzb4bP=rU`1b; z4}L(8u;i&X2H(9=7)kd=g*56|763$11WIn*byn5WeuK*JD);wK5(?f-=1cm4rACof zJJ{&i7X!iz3lq&kyMmCDnYT&8e5mea;g(@|v3)LyWnWue`t%58B!!9BtfcLRSx+@7 zqUSOE&lLVA$7vEAXWSnwrdA!1vTbhR0L5f*F(}F%2Q>5huFH2==D?*3wOjVn5fn@; z6TrJ-EE75abj8Sc5&0M0{P69toDu4wZRPs8llV&}tsc=bHM@HWys+N5FP?bO95V$D zPC>Vq6<`BkfG!sz(VaRxL7jAEzr>=Kvo(r;lJ4@}ws_R$bYx?95KKCLbxx?9+(;u# zg97_foR}d_^Lh-t9UJ7reZ*Ywt?EB)$@k4WNHmhy=E{nKo}pACsNn=7NXvf?0rMp< z3TzZ8hCYCT964_Qt+nMnT# zKoI;shBK@IY+1Rlsq6>wt;QPR=<+>K6iUMp;72+Qjc`vZR17+wVzGjJqP@P$*zfk0 zp?!<2yR|#42yGSGy)IZ(c+_Hf19~L&#ZW9us6I$-bHG*W`CtK&d5Xmj^-ZbEOv>GY z$k~v5#Ixr(4I~{~Ztg7G1#LrhaIz}47%tUx-3OezTZ6@`10K*?d?L`3c+_@XR?~CA z!|4da%J@}*sl4o~I%L4ls@=6pk@?|E7n;TUpQyFZYrm;+^&k=2stR z8$>2ff-5Ah(UIwtVfsiT?eJScf>YSeW{#K{1f=1&Y{vd?G`$v`%WcY+q_B%KNcpgD z$rSp6ztu?);M^gN$7@?XwO(K~j!dt{h!&m5m5rA=iUsZ}UibB;W(C@P~A zkCR5X>F;;mW@_r5Rv#2&`dSPUmB(#ZAjw{07VZ9yv~nI^NDkt*)<4t@+b|{AC6`pi z-l028DsX%)(&iJr$vGTHcQgX8eb(@9arkN*!&xo-l2&Yot10RMXC9Yo(@6222aB%yT z-$j@bmAi`cjrD&*=jmoVI{kFTx8)Q}s5Z8#Jp~D5aSOSSRjo(zA$8B<& zf>Hc4#j%qZ5OVf)&(=g4Nj0ciNkUmQZlj{LwE?$RAJm9bu@THHoMI0#y7X+;KHXeUYo)hLxcZk^Q5 zgIq7CO9kkqLeNl$17)#j7%CytI}c;A%CVOqK-hyF8wS7k4oymqM^$yk8G%%8*dU=o zo5*59^QSO!b>x<-LGy1=?`GBVJHs5~i#y}EFOu2(@V;l6M7yMH@& z95(%@^ZB!>NbzE~lYM*CFuq52U@+7HZ<9Q0M7aZ~p z%468CHqqQdnkUNj#t?7CYBz#KgjLjGxnX)dmzC<0q?&_R8`yD9Vn}*^oB;DDXsXKQDcR-l^nqV9x${mZ)KkMK7aQhloqj zPI1E<2}O1!nfRgAJ0jDtA)0+F8toBQe0SvA>GOFj&K4VlU!RUparBZX8^DY>EVm{H z+APbK=k{>pQMk_csy6JKRhEds=Qe4%Rz;cVm6H7rP5NWhNs>U<^n4GCWPKvg!p>-$ zDtOo3XkC@8ERNy4+ZgSj36IW z_WZU8na%0h;H2Q!&DzDo%6aw zkq}OY%F;~0g^!S9lQFM<7&UxLO_)l|o@4i3XGM!j*(imnFh-zKqk)bO-#LqXGRk9+ z0Gaz=mS}?83Dfj5^J4OtHWQlu_K8_#WY9vk-1iJ*0i@pE7z&gfg>R=xdN}g)dLKXn zxH2S14DgA0s){ycasS!C%rc$M_l(P=gab*wA3-onq322(>r*;lgCc_(#@4|3d4Ef{ zakj1e&ZI)_T<&Wn3b5m+a(uZPRz0y^e_**{3R%$#LcnTBZ62`o+jmK?;#{i|X1Hxr zsgjl-hqagOHMB_-l965B0SbYc6BMjPcw+VtUW5pOF4MRb|FJK&GFZGty z4<2PPyU?pU69+u_Hv)i%S51FZ`U?HKP2q}>p|JbfrOnwo{xQs$_*M-U(v_Nak;RbT zu1h|-$i_q(y0|z5$?k(2(dB_06psi6c{xp9fy_bFru|^LPWy7l4J0U4NFoVKU?Np? z-fCHX9|`5gu;zEe51b`7UQajOr6Nt%rz_IcPOxv5)in}hafkgj#ZBpfO6WA=fAvU? z7I_&iR1TD9CXCX_pz{-sV(c&utW_o8kXg+xSkde;K93*U(R6#_M`6VVb`d! zzuJaSDGI1NR?6d7HUMv^ND3o zrbRy(a5`O~Owcjpdi;Nd6|g+#cmg9lT%N^31#{_?S^KaHT%h7C+itef>?RB^uW$gt z#OH*V$aCJH?C@z9oW6o!IcAT0Ehql3R)t|MhjQ}1euH#e`!7ABa6hpTk-yt4XU44> zXTH4S4-1dgm|N{^ErA>-;s*E98=PL!mL3b z9#_SXTOe}`jZsSTLVC}{)xMtR5sNO!vq+i7AZuvGQxMAv5v*-Jhii~LBQdWyzqL&m7Qfjp3t>X=DLG$|cENr- zbV61T20kfKnWFk;~~Z5tG@wEDGVLlWmeCgennH1PLc3ZvAfM?Q+xaSe`2GM?66E#*sEH=JOl@7OuBkRVtqzX^5FoVpB6(_r_aeHa+x zVW8M1>di;Y4|WYa?{1xH%i(a?U1}FH|4>OB2FodHnp@7?cQFn$9 zJ@=q4A-xtCUPi*jZ$8|5j4-fBvZnM^Ui&|ZbgL#rM5q$QmWB2L=XbY1OB(OR)%HM; zq?1|-7w41t1zV&vs?7IJDvf&)JwRRqac@A(37Os-FO8vkSQLs}YJ7=WrP`5vlKe5! z$HO?3kIfSUcv9tr&L^_>dkhX#cGl5P*i^gg`@d&g*7t0=nY^)q`5*PrxiPL5*0D7( zroYvGc=C0%8~d>b1GBH>fCow4=3Pb@5f>Sc9`zOHb%mxFQ3nZx^L0imC--SD+MxzG z4pkSc`K6L~hxvF)>`xoMo%5#B&^{;WM1bh_uzHJOp`wx_weCDn37W78?WZRg+cq-T zOYfvTd<~(cc&3PbLVipZX9#;uveIL4GotR^$a6eN#f!FSc<%spcbRtz&LoZF&104I zP}$-hRjCrlWtg4tuLM&6(o-NtzKyv1n)L^1q+0y;DQvaX#YH>k3-C1Pmq4t<2WWYo zfqnb#%9C}+ON6K0;y4rr8-{KAdV%nn4 zw`VKj;q@o^h+xoLg*=h9dP?+_Fd1zf3{_JtETvQ2EWQ1W?X(&20qFboT`i-JhXlVbC60ineiZ z_m2hIgjF!-WbX|xOyi$!PK6BBSd7#Q*WfDN<9L5`%gruzDa=6*~-_p~2pTgaL z?~fsCz>SFHMP+7Dt(03Iom8$(`h<^dxn*gAg?^OGgrfzhc;Jhq=*73#jqiY5L-*{~ z!7VGOVS-Luyx2-w>HAuY*i0DD4${!(ZriRfGPaTeUSV=R_={PD)L(rD_!xF|#_xnARgA z6=y&0EHT6%D)TwC8!g5N*B($*e z?Nw39*dhi0CFj~_ff(&h)bS&iFZQe|g@%hwrA*Zx!(UsL^4OCZA7@@Mz6cQZ71T+HK=brMwnrh`Wxfj0i zTQ3SxYQ3%9!~12!Xl0L?XJmF^?K;m>^C9#kl70vK-@laFR;Nj9pM)txtFT6IZe|(~ zzg+(-J`iQSuQbO7mufG_5cVW!g*006*f#rtoZs0^Fi0vGA&jL!WN&fkXAGr)oIlSQ zaYV>t==`FR3med5zW1UVsQ%7+FrQ??%}4ELa`d0)f3puWJT^FpV8~-Tnm(*(IGPDC zl>>!;Z{^~KjO8o^iZzqrt|M#HS$!C%)4vq|{b>UKf(n^!$aen>K|H3)m(*5g+>VCd z+}-B!#g9X-+?W*ZLC4>>^rolyDNZszvmdY3;h=2mT?0hY=uS4T!e@#K!>+&>G-A3e zS1{W26&6Sav9t8aq*g0C+Ydk@Pyf05lo{utVPgfP^M1_7?diYP<;PDxkL7(gt6I7{ zDe+-SJfDyTZ;efD%2jZU0oPtGHQpSz6dw2+pMjm*!LN&vySDDAJkbNlWmrAaWj_Rz z>E9!vZ~2{|Bku3w?`Pwe_#+b1D#BPHeIY_9R?{9H$awg^*rX1n0SeZ3>d=C_bky|j zAI*=A2*>425<@u_9rb7AHJEIIJ9hSob5{p~v-QC|U^ut=i<2WZEj*BoX(S^6Ef?Xj{I>-?b?~$L~Z^_W>)KN}E&pJ(>$~A;HZfPr__^xT=9d59Y`j5?O7GhjCPPHE1D39>(5zxWSoXdnq7CMn`Lc1O1E2E zx|jOc%uvuPzQM@UK?FAg*5-wyQ=@9Vwe-&nsW{`Fw)uqQ9^wm4Q)fbmIf>bZWeEFT zA&lRuulP^IzB7lq;HL8v*;S{`04Sz@=%^;FCN1^=yP13TbSmN!KTO>N0cOa}o>k_E zr4Rfk3{!@{y)yui!ICj1(CUlhFmPMCLTL#RYstT`5#_2ci#vB0&89%Q?I8GoTF%tXJ*5iuGU|w7LMDou zQVvjj8=wBMUMSv5@0B5oe?y#=!Fpj`KQHY))aX;ycCv5yK1Fb8GX9wnOD!&>9a8@% zIH}_sCT5kt_rhIUO*;DLD#UxYlXyLL?b70e`Yyu1PKWHUEwV2*R5VIUpD(HcQto+^-Q?mcing zdDsc7E$Y2PnXV{ru2Z@vyz|ca|7$#y-96UCaCOysy9~q2Mh`=f?<;oMoOirziM4ub z)N6cir^b%<(mowgf8Ghj+Te?Pp77-4?p)I+|J2%EcXM7Oa!K~7UF6}t79VIYIIy{= z!g^IDp0$c+txb6Z&JySvxQ0q2CSR5O1rQ{*?M#}HTCFo|TCr-t;+^klzlk2_-jVg5 zzF_Y`qGtRrD04qnR*(U{aLTe_OZLErn0;e^+@V@P2_Wf0@7d7jU1FKS8J4Gen|JwZ ztyLzHnl$TCC7j`7@TD~RQT^z-urxIte;Xf3(p-ui_JQPg%UE6-m!iMH@)S#B=bEU( ztTVkp-*6~WiZOIj1e>_)qrQwb5W^aNnxfz^lOW^OiI}NT{?L;44j2Hcy7{KiD}^2B zfS39T3*hsD{%jvdnyJj~atw?(XC-jp2c=0d=RnqhDkZIYTxh_-V`UMB>)+X@*B)U& z6g^Pw1qS1W0~N69`%Lz2UU|X#(wa$aH}q6Jj=h<(a^U)T6Jn;s|2Z6}K2@?Wh!iNg zqZ6=x=mi+sVy?W5{cy!};QdD|ZAO2~Nq8<$k+eL4rz3i_%ma5ehH{g6hq)h+9n8$f z8UH$0v>WsgmC&FDt2J-OiX!jV@;w7)+Rxk@C&k7>LPI*lXh!ZwCPekUNI-n-5-2$b z@hIxJR-)n9c)%7~b5B^q{r@JXhWB;ckaWIyJVdgk)lD1S9bvq6q#tpU=<6g?{0KQtMX7C>#g+NrZLagHj~-tY zd#Ud|QK%h>zM*zmEX_orPAPo`Q&4u>*4r;E4+MZ=mzks|>RZLk-Zi;WSlEPanDze7 zU70=5JU!3c(s;qJ9?urc@^XDNxB9GYuNm`m;hK;{T}L#XR9l82CNhulxj?adk#`mQ z*XzygFiD9W$=`pBSq4AX)S^LhV`{OFwkJZ%YeFHm_}OW^^B449sJ00&zwIkY$QEMF zMCcOg9{v$EUofW$;%MEz?;M={MJc@X#_+a{=&tdnDb$1_+HIV>q4tIC=te^No7hj< zD}sPEuj2y%B^+H=!=>AgQ3W9RP&vO#nxolo{tx>&PACS-`Jji)A-ucEN!xHJC=QYt zlnpKGY*hIZ{x^8E_QzGFk}(m;n|eD50icxNK|ww@QnQfN1j9;P7WXI7Ow&@>^2t~G z?b=MLPd9Mw8oo{q#T+%0x~F_%a_4lyfagN!E3Brnb;_lyBdEFtsG~n2veb;`xxAP1 zvPM~D>)@`DptLH==0CE|sHb3#X?;an5Goau$gJ-=^3M;2!yvBR$gvm)Y?(UJ8j;>A zh!jHL4+17hQn&G{df`Rb>f3=d-q=4bUr9Z@J2}ag3lnuVAaiPzuxsPWK@_7BmIM44 ziJ^!_N-3LnkWxP0fZRkQYUr6WhF1jV`#ouP<#>-XXFSY9X)2m9LNUPr!dWaqP2 zbi77XStm~tM_IfXeXk&+jTG$~uPq1hLwLfBqP23Lo6+OQKf5-1n=E)F_w)@kp|5A13 z;S%aUQDV0V&SqxbzZr+sbxLL}jfxEG-9qdn5V~EGG~4=aa8L|VV~QZCu(D9Z;&YPN zGL4xIQilKDv3|iAb-~~_P11Kv1i57lt79}eCc=Vc-uPMBx)enDTYKK;Z^Y;Y@Av=~ zJs$;jY55eXfrn1rO753A!&-g8Nx=`9od^cJ=1WfRugG*Ur^hz~CE0fBjEJC1&M;sm z`p07msr0dJz%)P|ar@QJSl-3auy90ph2?^ichJTHBWg5BHxi|d{=E(SMua2{g=x0DU>CXDdRDs*qY zV__-`v09E^b^YbxYtc813ko={WVS8MrA-AH%PfwHoHTZoh1fR^FjP3e%i^~DS+G(l zJ^??KzP^UW;VN|7TxI&)JEz8(Zy5em7~&()`4s_5y+UsfGAxS`nc*$FGLp+s2Y*EA zw#@_vBJ3i}iFUt>-_}Rb+dETPv4%&2Kh&I&7UiLTjY<&qiR61-t0O9Xu@j`y;l6o_ z#s+hY2po*vCJIe!l%m?$2FcwTaET+7)@c+)V`kxET3ujhcTP#Iz^7T7O9#nOo-BHP z?ie4%XfxO0g2_E^Onbp_J7}v-ByJeDnQ58xoH!&IWEMbqimtx~Z>^J;9;HhTRA&lVt`l}S7k8lN`ib@V8>qeqr zY2vP|_o_-Qm;p^1d(!s@<=Y?$Q{gZm>QTWZNX)xDIWt^_AO`<8nEic4d;PXuL{d1Q zl!7%%QLvnS3&(@y(OM$$j(z7q7s24eD{n-;mbbeD z0%w@F&3jSAi1Pa(AgMcWlU9z*S2C4nhdSM``Vk%`5^~3&Ka|71eyL?Vn-x8pk&R*3R(ZVj88PE zQy8B4NE>;@O*e7_3EwpW_5b*Hg)Fs1R}VApWj)2cqBkIJbI;Af=RZ_hBej4-Zx(GW z&@O3aRaKtB=cd;d8Qc=*QL#9o`jM_!CYs{Z)+X7ll&P1i`3FKrNYrs;^r{{di|vX6 zIPIAR2ob2enSqa?7T$Q-J4m|^t^M)Gxp;XLLt1v|?B*quXdCmuT|hYk^;w4qYUN4y zo+O?)h=3vi*@c$@_6%s{+n-^H38|XqkV&CJm%gq8JhN89c$A*;1`rGcc1)DeVX?bc zum*sw&*F(Uy{}YGh~}t1NevlydEXz}R+eTZF9K4adZ;nh5;y>6;I{AD`ksWN#O}n- zDU_BZDE=i;D|S{Xat>%a67iX_T>dXN8Geeq*d$Iww|Swqqey`FPaU9+=Uo&NcA zbgLo>3wD|f#+ys7lx{HIer9&}@es;CI-!S3EQ|eN92ZCN-VkazxMSnyOOBNRVl>gj zV)ju;!>F<}RQ$fMr%l1=i}>$-Lcv6f9plA#GUw3J5AfmQXMoR1cDp^7vFARk8*R4$ z>bCjyMOI*8jU- z4NQN&C#_wc{iM9s`@puWA|x*-d9o68;jO|{`ID!PFuM>fQCZR=&tge6PzrWOZ!u7CYY(c?? zf$vd>5_}8XbyCM^>eDl9lXGD#NwQmrSky%}?WZKn7y!SpCsSxZ5VwN6zdoiDX$s3|hvoWqO$VQujOY@=l}c z&QYNr!P{53(KVHkHF>@N>g8!(G(%N2T|oBOG%K@G52hsE?FEVL7LIjZZd~~nq-adW zxOWUddcIG%VWza0*v=Kr*nlpOvd_A2iTmQN4X{i=r|@Q*ES4;Cb)R7^n&om|xUA!x z4%8%Nq&9Fm+-IC_dn~k(uV$r2hYLqcSx9GXJg|Fp*U{TPNoORlcK~Vd_WT4lRDA23 zLSCSU44&fXIV>q4EO*bIya6e+6sRJAAa7@%%=3QKlY0~Q=FU(dsan@VjGk-#>0u05`24X!26J~cy#)ue)YsgI-p$`_f zmC|lIxs*UrDs;`5_pB&t^VW;ypikrY4){&*1bK*QAqP3cJgzr1z6&F

diff --git a/control-plane/api-gateway/src/auth/mod.rs b/control-plane/api-gateway/src/auth/mod.rs index 95cde4b9..29a8be56 100644 --- a/control-plane/api-gateway/src/auth/mod.rs +++ b/control-plane/api-gateway/src/auth/mod.rs @@ -2,4 +2,5 @@ pub mod agent; pub mod crypto; pub mod jwt; pub mod middleware; +pub mod rate_limit; pub mod rbac; diff --git a/control-plane/api-gateway/src/auth/rate_limit.rs b/control-plane/api-gateway/src/auth/rate_limit.rs new file mode 100644 index 00000000..3edab764 --- /dev/null +++ b/control-plane/api-gateway/src/auth/rate_limit.rs @@ -0,0 +1,45 @@ +use axum::http::Request; +use tower_governor::key_extractor::{KeyExtractor, PeerIpKeyExtractor}; +use tower_governor::GovernorError; +use uuid::Uuid; + +use super::jwt::verify_jwt; + +#[derive(Debug, Clone, Hash, PartialEq, Eq)] +pub enum RateLimitKey { + User(Uuid), + Ip(std::net::IpAddr), +} + +#[derive(Clone)] +pub struct JwtOrIpKeyExtractor { + fallback: PeerIpKeyExtractor, +} + +impl JwtOrIpKeyExtractor { + pub fn new() -> Self { + Self { + fallback: PeerIpKeyExtractor, + } + } +} + +impl KeyExtractor for JwtOrIpKeyExtractor { + type Key = RateLimitKey; + + fn extract(&self, req: &Request) -> Result { + if let Some(user_id) = extract_user_id(req) { + return Ok(RateLimitKey::User(user_id)); + } + + self.fallback.extract(req).map(RateLimitKey::Ip) + } +} + +fn extract_user_id(req: &Request) -> Option { + let header = req.headers().get(axum::http::header::AUTHORIZATION)?; + let value = header.to_str().ok()?; + let token = value.strip_prefix("Bearer ")?; + let claims = verify_jwt(token).ok()?; + Some(claims.claims.user_id) +} diff --git a/control-plane/api-gateway/src/routes/mod.rs b/control-plane/api-gateway/src/routes/mod.rs index 27348e74..e9229fd5 100644 --- a/control-plane/api-gateway/src/routes/mod.rs +++ b/control-plane/api-gateway/src/routes/mod.rs @@ -1,4 +1,5 @@ use super::AppState; +use crate::auth::rate_limit::JwtOrIpKeyExtractor; use crate::metrics; use crate::utils::router_ext::RouterExt; use axum::body::Body; @@ -8,7 +9,9 @@ use axum::http::{HeaderValue, Request, Response}; use axum::routing::get; use axum::Router; use std::sync::Arc; -use tower_governor::{governor::GovernorConfigBuilder, GovernorLayer}; +use tower_governor::{ + governor::GovernorConfigBuilder, key_extractor::PeerIpKeyExtractor, GovernorLayer, +}; use tower_http::cors::CorsLayer; use tower_http::services::{ServeDir, ServeFile}; use tower_http::trace::TraceLayer; @@ -35,21 +38,41 @@ pub fn create_router() -> Router { let rate_limit_per_second: u64 = std::env::var("RATE_LIMIT_PER_SECOND") .ok() .and_then(|v| v.parse().ok()) - .unwrap_or(100); + .unwrap_or(500); let burst_size: u32 = std::env::var("RATE_LIMIT_BURST") .ok() .and_then(|v| v.parse().ok()) - .unwrap_or(200); + .unwrap_or(1000); let governor_config = Arc::new( GovernorConfigBuilder::default() + .key_extractor(JwtOrIpKeyExtractor::new()) .per_second(rate_limit_per_second) .burst_size(burst_size) .finish() .expect("invalid rate limit configuration"), ); + let login_rate_limit_per_second: u64 = std::env::var("LOGIN_RATE_LIMIT_PER_SECOND") + .ok() + .and_then(|v| v.parse().ok()) + .unwrap_or(1); + + let login_burst_size: u32 = std::env::var("LOGIN_RATE_LIMIT_BURST") + .ok() + .and_then(|v| v.parse().ok()) + .unwrap_or(10); + + let login_governor_config = Arc::new( + GovernorConfigBuilder::default() + .key_extractor(PeerIpKeyExtractor) + .per_second(login_rate_limit_per_second) + .burst_size(login_burst_size) + .finish() + .expect("invalid login rate limit configuration"), + ); + let frontend_url = std::env::var("FRONTEND_URL").unwrap_or_else(|_| "http://localhost:3000".to_string()); @@ -101,8 +124,13 @@ pub fn create_router() -> Router { .merge(settings::settings_routes()) .layer(GovernorLayer::new(governor_config)); + let login_rate_limited_router = Router::new() + .merge(users::public_users_routes()) + .layer(GovernorLayer::new(login_governor_config)); + let api_router = Router::new() .merge(rate_limited_router) + .merge(login_rate_limited_router) .merge(update::routes()) .merge(releases::routes()); diff --git a/control-plane/api-gateway/src/routes/users.rs b/control-plane/api-gateway/src/routes/users.rs index d65bea6a..6f86bce6 100644 --- a/control-plane/api-gateway/src/routes/users.rs +++ b/control-plane/api-gateway/src/routes/users.rs @@ -65,9 +65,9 @@ pub struct UserProfileResponse { pub force_password_change: bool, } -// Define the routes for the users module +// Define the authenticated routes for the users module pub fn users_routes() -> Router { - let auth_routes = Router::new() + Router::new() .route("/profile", get(get_user_profile)) .route("/validate-session", get(validate_session)) .route("/logout", post(logout_user)) @@ -75,13 +75,15 @@ pub fn users_routes() -> Router { .route("/2fa/enable", post(enable_2fa)) .route("/2fa/disable", post(disable_2fa)) .route("/change-password", post(change_password)) - .route("/change-email", post(change_email)); + .route("/change-email", post(change_email)) +} +// Define the public, unauthenticated routes for the users module +pub fn public_users_routes() -> Router { Router::new() .route("/register", post(register_user)) .route("/login", post(login_user)) .route("/public-key", get(get_public_key)) - .merge(auth_routes) } /// Register a new user From 3de5fabff2873017c854f11abe8dfa73a4fa9e6e Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Thu, 2 Jul 2026 22:24:52 +0200 Subject: [PATCH 15/30] feat: add container status detail, log streaming, and exec shell for workloads --- Cargo.lock | 176 +++++++---- Cargo.toml | 1 + agent/Cargo.toml | 2 + agent/src/client.rs | 11 +- agent/src/docker.rs | 85 +++++- agent/src/main.rs | 95 +++++- agent/src/server.rs | 276 +++++++++++++++++ app/package-lock.json | 17 ++ app/package.json | 2 + app/src/lib/api/resource-groups.ts | 32 ++ .../(app)/resource-groups/[id]/+page.svelte | 192 +++++++++++- control-plane/api-gateway/Cargo.toml | 6 +- control-plane/api-gateway/src/auth/jwt.rs | 53 ++++ .../api-gateway/src/routes/agent_proxy.rs | 288 ++++++++++++++++++ .../api-gateway/src/routes/agents.rs | 1 + control-plane/api-gateway/src/routes/mod.rs | 2 + control-plane/api-gateway/src/self_monitor.rs | 1 + control-plane/registry/Cargo.toml | 1 + control-plane/registry/src/db/agents.rs | 5 + control-plane/registry/src/handlers/agent.rs | 7 +- control-plane/registry/src/handlers/pki.rs | 60 +++- control-plane/registry/src/main.rs | 7 +- control-plane/registry/src/models/agent.rs | 1 + control-plane/registry/src/server.rs | 1 + control-plane/registry/src/services/pki.rs | 27 +- .../registry/src/services/registry.rs | 2 + control-plane/scheduler/src/db/workloads.rs | 4 +- .../scheduler/src/models/workload.rs | 9 + .../shared/entity/src/entities/agents.rs | 1 + control-plane/shared/migration/src/lib.rs | 2 + ...m20260702_000000_add_agent_wg_tunnel_ip.rs | 31 ++ 31 files changed, 1312 insertions(+), 86 deletions(-) create mode 100644 agent/src/server.rs create mode 100644 control-plane/api-gateway/src/routes/agent_proxy.rs create mode 100644 control-plane/shared/migration/src/m20260702_000000_add_agent_wg_tunnel_ip.rs diff --git a/Cargo.lock b/Cargo.lock index be7c5be4..795c5026 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -154,9 +154,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" [[package]] name = "api-gateway" @@ -174,6 +174,7 @@ dependencies = [ "dotenvy", "entity", "etcd-client", + "futures-util", "http", "hyper", "hyper-util", @@ -186,7 +187,7 @@ dependencies = [ "opentelemetry_sdk", "prometheus", "qrcode", - "rand 0.10.1", + "rand 0.10.2", "rcgen", "reqwest", "ring", @@ -201,6 +202,7 @@ dependencies = [ "sysinfo", "thiserror 2.0.18", "tokio", + "tokio-tungstenite", "totp-rs", "tower-http 0.7.0", "tower_governor", @@ -223,9 +225,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" dependencies = [ "rustversion", ] @@ -243,9 +245,9 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "as-slice" @@ -548,6 +550,7 @@ checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" dependencies = [ "axum-core", "axum-macros", + "base64", "bytes", "form_urlencoded", "futures-util", @@ -566,8 +569,10 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", + "sha1 0.10.6", "sync_wrapper", "tokio", + "tokio-tungstenite", "tower", "tower-layer", "tower-service", @@ -712,9 +717,9 @@ dependencies = [ [[package]] name = "bitvec" -version = "1.0.1" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837" dependencies = [ "funty", "radium", @@ -808,9 +813,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" +checksum = "2f3f6da4992df95bbcd9af42a6c7dcb994498fc9048230405f3b36ff7cd3f145" dependencies = [ "borsh-derive", "bytes", @@ -819,9 +824,9 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfcfdc083699101d5a7965e49925975f2f55060f94f9a05e7187be95d530ca59" +checksum = "3ae8fb4fb5740e4b2c4884ff95f5f32f5e8479db1e8fd8eb49ddbe09eb09bb7c" dependencies = [ "once_cell", "proc-macro-crate", @@ -884,15 +889,15 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" [[package]] name = "cc" -version = "1.2.64" +version = "1.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f" +checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" dependencies = [ "find-msvc-tools", "jobserver", @@ -920,9 +925,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chacha20" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" dependencies = [ "cfg-if", "cpufeatures 0.3.0", @@ -1198,6 +1203,7 @@ name = "csfx-agent" version = "0.2.2" dependencies = [ "anyhow", + "axum", "base64", "bollard", "chrono", @@ -1214,6 +1220,7 @@ dependencies = [ "tracing-subscriber", "uuid", "x25519-dalek", + "x509-parser", "zbus", ] @@ -2233,9 +2240,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hybrid-array" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" dependencies = [ "typenum", ] @@ -2651,9 +2658,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.102" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ "cfg-if", "futures-util", @@ -2732,14 +2739,14 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" +checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" dependencies = [ "bitflags", "libc", "plain", - "redox_syscall 0.8.1", + "redox_syscall 0.9.0", ] [[package]] @@ -2781,9 +2788,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.32" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" dependencies = [ "value-bag", ] @@ -3171,9 +3178,9 @@ dependencies = [ [[package]] name = "opentelemetry-semantic-conventions" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ca2f98a0437b427b4b08f19f1caa3c44db885a202bc12cfea13d6c702243d68" +checksum = "c913ac17a6c451661ee255f4625d143e51647ae78ebd969b75e41c4442f4fe47" [[package]] name = "opentelemetry_sdk" @@ -3798,9 +3805,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -3846,9 +3853,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ "chacha20", "getrandom 0.4.3", @@ -4003,9 +4010,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7" +checksum = "c5102a6aaa05aa011a238e178e6bca86d2cb56fc9f586d37cb80f5bca6e07759" dependencies = [ "bitflags", ] @@ -4045,6 +4052,7 @@ version = "0.2.2" dependencies = [ "anyhow", "axum", + "base64", "chrono", "dotenvy", "entity", @@ -4090,6 +4098,7 @@ dependencies = [ "base64", "bytes", "futures-core", + "futures-util", "http", "http-body", "http-body-util", @@ -4108,12 +4117,14 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-rustls", + "tokio-util", "tower", "tower-http 0.6.11", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", "webpki-roots 1.0.8", ] @@ -4295,9 +4306,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.40" +version = "0.23.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" dependencies = [ "log", "once_cell", @@ -4331,9 +4342,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" dependencies = [ "zeroize", ] @@ -5331,9 +5342,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.49" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711a53c2d47bbd818258c498c8dbfe186a2526c631495cfe7e078567f86b8469" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" dependencies = [ "deranged", "num-conv", @@ -5351,9 +5362,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.29" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c652a3727a9cbb9a02f707f530b618ce00d0ccd762009c8c23bd191df3c17d" +checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" dependencies = [ "num-conv", "time-core", @@ -5434,6 +5445,18 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-tungstenite" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite", +] + [[package]] name = "tokio-util" version = "0.7.18" @@ -5560,9 +5583,9 @@ dependencies = [ [[package]] name = "totp-rs" -version = "5.7.1" +version = "5.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2b36a9dd327e9f401320a2cb4572cc76ff43742bcfc3291f871691050f140ba" +checksum = "50e69a15e21b2ff22c415446983978bded3244195f17d59cb113551c1e806f91" dependencies = [ "base32", "constant_time_eq", @@ -5750,6 +5773,22 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tungstenite" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8" +dependencies = [ + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.9.4", + "sha1 0.10.6", + "thiserror 2.0.18", +] + [[package]] name = "typenum" version = "1.20.1" @@ -5897,9 +5936,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.23.3" +version = "1.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7" +checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -6015,9 +6054,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -6029,9 +6068,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.75" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503b14d284f2c8dac03b819967e155ea753f573586193b2b2c95990cb5d69280" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ "js-sys", "wasm-bindgen", @@ -6039,9 +6078,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6049,9 +6088,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", @@ -6062,18 +6101,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.125" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" -version = "0.3.102" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6430a72df5eb332242960fe84b3002a241163998241eb596d4f739b9757061d" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" dependencies = [ "js-sys", "wasm-bindgen", @@ -6769,9 +6821,9 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" +checksum = "5431d5661c32445236631278f27946e444ddafe4684cac70b185272d4f9c52d5" [[package]] name = "zmij" diff --git a/Cargo.toml b/Cargo.toml index a96b7b0e..27858853 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,6 +38,7 @@ tower-http = { version = "0.7.0", features = ["cors", "trace", "fs"] } hyper = "1.5" hyper-util = { version = "0.1", features = ["client", "client-legacy", "http1", "http2", "tokio"] } http = "1.1" +tokio-tungstenite = "0.29" # Serialization serde = { version = "1.0", features = ["derive"] } diff --git a/agent/Cargo.toml b/agent/Cargo.toml index f4321e38..85ecbafc 100644 --- a/agent/Cargo.toml +++ b/agent/Cargo.toml @@ -27,3 +27,5 @@ futures-util = { workspace = true } zbus = { workspace = true } x25519-dalek = { workspace = true } base64 = { workspace = true } +axum = { workspace = true, features = ["ws"] } +x509-parser = { workspace = true } diff --git a/agent/src/client.rs b/agent/src/client.rs index d9b79271..ad5c67b1 100644 --- a/agent/src/client.rs +++ b/agent/src/client.rs @@ -52,6 +52,7 @@ struct HeartbeatRequest { uptime_seconds: Option, wg_public_key: Option, wg_endpoint: Option, + wg_tunnel_ip: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] @@ -94,6 +95,7 @@ pub struct ApiClient { cert_pem: Option, wg_public_key: String, wg_endpoint: Option, + wg_tunnel_ip: Option, } pub fn generate_wg_keypair() -> (String, String) { @@ -109,7 +111,12 @@ pub fn generate_wg_keypair() -> (String, String) { } impl ApiClient { - pub fn new(gateway_url: String, wg_public_key: String, wg_endpoint: Option) -> Result { + pub fn new( + gateway_url: String, + wg_public_key: String, + wg_endpoint: Option, + wg_tunnel_ip: Option, + ) -> Result { let client = Client::builder() .timeout(std::time::Duration::from_secs(30)) .danger_accept_invalid_certs(true) @@ -122,6 +129,7 @@ impl ApiClient { cert_pem: None, wg_public_key, wg_endpoint, + wg_tunnel_ip, }) } @@ -243,6 +251,7 @@ impl ApiClient { uptime_seconds, wg_public_key: Some(self.wg_public_key.clone()), wg_endpoint: self.wg_endpoint.clone(), + wg_tunnel_ip: self.wg_tunnel_ip.clone(), }); if let Some(ref cert_pem) = self.cert_pem { diff --git a/agent/src/docker.rs b/agent/src/docker.rs index 5d883000..8057960c 100644 --- a/agent/src/docker.rs +++ b/agent/src/docker.rs @@ -1,10 +1,13 @@ use anyhow::{Context, Result}; -use bollard::models::{ContainerCreateBody, HostConfig}; +use axum::body::Bytes; +use bollard::exec::{CreateExecOptions, StartExecOptions, StartExecResults}; +use bollard::models::{ContainerCreateBody, ContainerStateStatusEnum, HostConfig}; use bollard::query_parameters::{ - CreateContainerOptionsBuilder, CreateImageOptionsBuilder, StartContainerOptionsBuilder, + CreateContainerOptionsBuilder, CreateImageOptionsBuilder, InspectContainerOptionsBuilder, + LogsOptionsBuilder, StartContainerOptionsBuilder, }; use bollard::Docker; -use futures_util::StreamExt; +use futures_util::{Stream, StreamExt}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::path::Path; @@ -164,6 +167,82 @@ impl DockerManager { Ok(container.id) } + pub async fn inspect_status(&self, container_id: &str) -> Result { + let options = InspectContainerOptionsBuilder::default().build(); + + let inspect = self + .docker + .inspect_container(container_id, Some(options)) + .await + .context("Failed to inspect container")?; + + let state = inspect.state.unwrap_or_default(); + let status = state.status.unwrap_or(ContainerStateStatusEnum::EMPTY); + let exit_code = state.exit_code.unwrap_or(0); + + Ok(match status { + ContainerStateStatusEnum::CREATED => "creating".to_string(), + ContainerStateStatusEnum::RUNNING => "running".to_string(), + ContainerStateStatusEnum::RESTARTING | ContainerStateStatusEnum::PAUSED => { + "running".to_string() + } + ContainerStateStatusEnum::EXITED if exit_code == 0 => "stopped".to_string(), + ContainerStateStatusEnum::EXITED | ContainerStateStatusEnum::DEAD => { + "failed".to_string() + } + ContainerStateStatusEnum::REMOVING | ContainerStateStatusEnum::STOPPING => { + "stopped".to_string() + } + ContainerStateStatusEnum::EMPTY => "failed".to_string(), + }) + } + + pub fn logs( + &self, + container_id: &str, + ) -> impl Stream> + Send + 'static { + let options = LogsOptionsBuilder::default() + .stdout(true) + .stderr(true) + .follow(true) + .tail("200") + .build(); + + self.docker + .logs(container_id, Some(options)) + .map(|item| match item { + Ok(log_output) => Ok(Bytes::from(log_output.into_bytes())), + Err(e) => Err(std::io::Error::other(e.to_string())), + }) + } + + pub async fn exec(&self, container_id: &str) -> Result { + let create_options = CreateExecOptions { + attach_stdin: Some(true), + attach_stdout: Some(true), + attach_stderr: Some(true), + tty: Some(true), + cmd: Some(vec!["/bin/sh".to_string()]), + ..Default::default() + }; + + let created = self + .docker + .create_exec(container_id, create_options) + .await + .context("Failed to create exec session")?; + + let start_options = StartExecOptions { + tty: true, + ..Default::default() + }; + + self.docker + .start_exec(&created.id, Some(start_options)) + .await + .context("Failed to start exec session") + } + pub async fn stop_container(&self, container_id: &str) -> Result<()> { self.docker .stop_container(container_id, None) diff --git a/agent/src/main.rs b/agent/src/main.rs index 003bfea1..3e59e87b 100644 --- a/agent/src/main.rs +++ b/agent/src/main.rs @@ -3,6 +3,7 @@ mod config; mod docker; mod pki; mod rbd; +mod server; mod ssh_keys; mod system; mod update_watch; @@ -52,9 +53,10 @@ async fn main() -> Result<()> { .unwrap_or(60); let wg_endpoint = std::env::var("CSFX_WG_ENDPOINT").ok(); + let wg_tunnel_ip = std::env::var("CSFX_WG_TUNNEL_IP").ok(); let (_wg_private_key, wg_public_key) = client::generate_wg_keypair(); - let api_client = client::ApiClient::new(gateway_url.clone(), wg_public_key, wg_endpoint) + let api_client = client::ApiClient::new(gateway_url.clone(), wg_public_key, wg_endpoint, wg_tunnel_ip) .context("Failed to initialize API client")?; let agent_pki = pki::AgentPki::load_or_generate().context("Failed to initialize PKI")?; @@ -97,8 +99,28 @@ async fn main() -> Result<()> { let running_containers: Arc>> = Arc::new(Mutex::new(HashMap::new())); + let workload_phases: Arc>> = Arc::new(Mutex::new(HashMap::new())); + let mounted_volumes: Arc>> = Arc::new(Mutex::new(HashMap::new())); + if let Some(port) = std::env::var("CSFX_AGENT_PORT") + .ok() + .and_then(|v| v.parse::().ok()) + { + let server_state = server::ServerState { + docker: docker_manager.clone(), + running_containers: running_containers.clone(), + agent_id, + }; + tokio::spawn(async move { + if let Err(e) = server::run(server_state, port).await { + error!(error = %e, "agent inbound server stopped"); + } + }); + } else { + info!("CSFX_AGENT_PORT not set, agent inbound server disabled"); + } + run_heartbeat_loop( &api_client, agent_id, @@ -106,6 +128,7 @@ async fn main() -> Result<()> { heartbeat_interval_secs, docker_manager, running_containers, + workload_phases, mounted_volumes, ) .await; @@ -183,6 +206,7 @@ async fn run_heartbeat_loop( interval_secs: u64, docker: Arc>>, running_containers: Arc>>, + workload_phases: Arc>>, mounted_volumes: Arc>>, ) { let mut interval = tokio::time::interval(Duration::from_secs(interval_secs)); @@ -193,9 +217,9 @@ async fn run_heartbeat_loop( tokio::select! { _ = interval.tick() => { process_volumes(client, agent_id, api_key, &mounted_volumes).await; - process_workloads(client, api_key, &docker, &running_containers, &mounted_volumes).await; + process_workloads(client, api_key, &docker, &running_containers, &workload_phases, &mounted_volumes).await; - let statuses = build_container_statuses(&running_containers).await; + let statuses = build_container_statuses(&docker, &running_containers, &workload_phases).await; let metrics = system::collect_metrics(); match client.heartbeat(agent_id, api_key, Some(statuses), Some(metrics)).await { @@ -315,6 +339,7 @@ async fn process_workloads( api_key: &str, docker: &Arc>>, running_containers: &Arc>>, + workload_phases: &Arc>>, mounted_volumes: &Arc>>, ) { let workloads = match client.fetch_assigned_workloads(api_key).await { @@ -353,8 +378,14 @@ async fn process_workloads( info!(workload_id = %workload.id, image = %workload.image, "Starting workload"); + workload_phases + .lock() + .await + .insert(workload.id.clone(), "pulling".to_string()); + if let Err(e) = docker.pull_image(&workload.image).await { warn!(workload_id = %workload.id, error = %e, "Failed to pull image"); + workload_phases.lock().await.remove(&workload.id); continue; } @@ -368,6 +399,11 @@ async fn process_workloads( } } + workload_phases + .lock() + .await + .insert(workload.id.clone(), "creating".to_string()); + let spec = docker::WorkloadSpec { workload_id: workload.id.clone(), name: workload.name.clone(), @@ -387,6 +423,10 @@ async fn process_workloads( match docker.start_container(&spec).await { Ok(container_id) => { + workload_phases + .lock() + .await + .insert(workload.id.clone(), "starting".to_string()); running_containers .lock() .await @@ -398,6 +438,7 @@ async fn process_workloads( ); } Err(e) => { + workload_phases.lock().await.remove(&workload.id); warn!(workload_id = %workload.id, error = %e, "Failed to start container"); } } @@ -405,16 +446,48 @@ async fn process_workloads( } async fn build_container_statuses( + docker: &Arc>>, running_containers: &Arc>>, + workload_phases: &Arc>>, ) -> Vec { - running_containers - .lock() - .await - .iter() - .map(|(workload_id, container_id)| client::ContainerStatus { + let containers = running_containers.lock().await.clone(); + let mut statuses = Vec::with_capacity(containers.len()); + + let docker_guard = docker.lock().await; + for (workload_id, container_id) in containers.iter() { + let status = match docker_guard.as_ref() { + Some(dm) => match dm.inspect_status(container_id).await { + Ok(s) => s, + Err(e) => { + warn!(workload_id = %workload_id, container_id = %container_id, error = %e, "Failed to inspect container"); + "failed".to_string() + } + }, + None => "failed".to_string(), + }; + + if status != "creating" { + workload_phases.lock().await.remove(workload_id); + } + + statuses.push(client::ContainerStatus { workload_id: workload_id.clone(), container_id: container_id.clone(), - status: "running".to_string(), - }) - .collect() + status, + }); + } + drop(docker_guard); + + let phases = workload_phases.lock().await; + for (workload_id, phase) in phases.iter() { + if !containers.contains_key(workload_id) { + statuses.push(client::ContainerStatus { + workload_id: workload_id.clone(), + container_id: String::new(), + status: phase.clone(), + }); + } + } + + statuses } diff --git a/agent/src/server.rs b/agent/src/server.rs new file mode 100644 index 00000000..ad5e55d4 --- /dev/null +++ b/agent/src/server.rs @@ -0,0 +1,276 @@ +use anyhow::{anyhow, Context, Result}; +use axum::{ + extract::ws::{Message, WebSocket, WebSocketUpgrade}, + extract::{ConnectInfo, Path, State}, + http::{HeaderMap, StatusCode}, + routing::get, + Router, +}; +use base64::{engine::general_purpose::URL_SAFE_NO_PAD, Engine}; +use bollard::exec::StartExecResults; +use futures_util::{SinkExt, StreamExt}; +use ring::signature::{UnparsedPublicKey, ECDSA_P256_SHA256_ASN1}; +use std::collections::HashMap; +use std::net::{IpAddr, Ipv4Addr, SocketAddr}; +use std::sync::Arc; +use tokio::io::AsyncWriteExt; +use tokio::sync::Mutex; +use tracing::{info, warn}; + +use crate::docker::DockerManager; +use crate::pki::AgentPki; + +const TICKET_HEADER: &str = "X-Csfx-Proxy-Ticket"; + +#[derive(Clone)] +pub struct ServerState { + pub docker: Arc>>, + pub running_containers: Arc>>, + pub agent_id: uuid::Uuid, +} + +pub async fn run(state: ServerState, port: u16) -> Result<()> { + let app = Router::new() + .route("/logs/{workload_id}", get(logs_handler)) + .route("/exec/{workload_id}", get(exec_handler)) + .with_state(state); + + let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), port); + let listener = tokio::net::TcpListener::bind(addr) + .await + .context("Failed to bind agent inbound server")?; + + info!(port = port, "csfx-agent inbound server listening"); + + axum::serve( + listener, + app.into_make_service_with_connect_info::(), + ) + .await + .context("Agent inbound server stopped unexpectedly") +} + +fn is_internal_source(addr: &SocketAddr) -> bool { + let ip = addr.ip(); + ip.is_loopback() + || match ip { + IpAddr::V4(v4) => { + let octets = v4.octets(); + octets[0] == 10 + || (octets[0] == 172 && octets[1] >= 16 && octets[1] <= 31) + || (octets[0] == 192 && octets[1] == 168) + } + IpAddr::V6(_) => false, + } +} + +struct TicketClaims { + agent_id: String, + workload_id: String, + expires_at: i64, +} + +fn verify_ticket(headers: &HeaderMap, workload_id: &str, expected_agent_id: &str) -> Result<()> { + let raw = headers + .get(TICKET_HEADER) + .and_then(|v| v.to_str().ok()) + .ok_or_else(|| anyhow!("missing {} header", TICKET_HEADER))?; + + let (payload_b64, signature_b64) = raw + .split_once('.') + .ok_or_else(|| anyhow!("malformed proxy ticket"))?; + + let payload_bytes = URL_SAFE_NO_PAD + .decode(payload_b64) + .context("invalid ticket payload encoding")?; + let signature = URL_SAFE_NO_PAD + .decode(signature_b64) + .context("invalid ticket signature encoding")?; + + let ca_pem = AgentPki::load_ca_pem().context("failed to load trusted CA certificate")?; + let public_key_bytes = extract_ca_public_key(&ca_pem)?; + + let verifier = UnparsedPublicKey::new(&ECDSA_P256_SHA256_ASN1, &public_key_bytes); + verifier + .verify(&payload_bytes, &signature) + .map_err(|_| anyhow!("proxy ticket signature verification failed"))?; + + let claims = parse_claims(&payload_bytes)?; + + if claims.workload_id != workload_id { + return Err(anyhow!("proxy ticket workload_id mismatch")); + } + if claims.agent_id != expected_agent_id { + return Err(anyhow!("proxy ticket agent_id mismatch")); + } + if claims.expires_at < chrono::Utc::now().timestamp() { + return Err(anyhow!("proxy ticket expired")); + } + + Ok(()) +} + +fn parse_claims(payload_bytes: &[u8]) -> Result { + let payload = std::str::from_utf8(payload_bytes).context("proxy ticket payload not utf8")?; + let mut parts = payload.splitn(3, '.'); + + let agent_id = parts + .next() + .ok_or_else(|| anyhow!("proxy ticket missing agent_id"))? + .to_string(); + let workload_id = parts + .next() + .ok_or_else(|| anyhow!("proxy ticket missing workload_id"))? + .to_string(); + let expires_at = parts + .next() + .ok_or_else(|| anyhow!("proxy ticket missing expiry"))? + .parse::() + .context("proxy ticket expiry not a valid timestamp")?; + + Ok(TicketClaims { + agent_id, + workload_id, + expires_at, + }) +} + +fn extract_ca_public_key(ca_pem: &str) -> Result> { + let (_, pem) = + x509_parser::pem::parse_x509_pem(ca_pem.as_bytes()).context("failed to parse CA PEM")?; + let cert = pem.parse_x509().context("failed to parse CA certificate")?; + Ok(cert + .tbs_certificate + .subject_pki + .subject_public_key + .data + .to_vec()) +} + +async fn logs_handler( + State(state): State, + Path(workload_id): Path, + ConnectInfo(addr): ConnectInfo, + headers: HeaderMap, +) -> Result { + if !is_internal_source(&addr) { + warn!(source = %addr, "rejected agent inbound request from non-internal source"); + return Err((StatusCode::FORBIDDEN, "source not allowed".to_string())); + } + + verify_ticket(&headers, &workload_id, &state.agent_id.to_string()) + .map_err(|e| (StatusCode::UNAUTHORIZED, e.to_string()))?; + + let container_id = state + .running_containers + .lock() + .await + .get(&workload_id) + .cloned() + .ok_or((StatusCode::NOT_FOUND, "workload not running here".to_string()))?; + + let docker_guard = state.docker.lock().await; + let docker = docker_guard + .as_ref() + .ok_or((StatusCode::SERVICE_UNAVAILABLE, "docker unavailable".to_string()))?; + + let stream = docker.logs(&container_id); + Ok(axum::body::Body::from_stream(stream)) +} + +async fn exec_handler( + State(state): State, + Path(workload_id): Path, + ConnectInfo(addr): ConnectInfo, + headers: HeaderMap, + ws: WebSocketUpgrade, +) -> Result { + if !is_internal_source(&addr) { + warn!(source = %addr, "rejected agent inbound request from non-internal source"); + return Err((StatusCode::FORBIDDEN, "source not allowed".to_string())); + } + + verify_ticket(&headers, &workload_id, &state.agent_id.to_string()) + .map_err(|e| (StatusCode::UNAUTHORIZED, e.to_string()))?; + + let container_id = state + .running_containers + .lock() + .await + .get(&workload_id) + .cloned() + .ok_or((StatusCode::NOT_FOUND, "workload not running here".to_string()))?; + + Ok(ws.on_upgrade(move |socket| handle_exec_socket(socket, state, container_id))) +} + +async fn handle_exec_socket(socket: WebSocket, state: ServerState, container_id: String) { + let docker_guard = state.docker.lock().await; + let docker = match docker_guard.as_ref() { + Some(d) => d, + None => { + warn!("docker unavailable for exec session"); + return; + } + }; + + let exec_result = match docker.exec(&container_id).await { + Ok(r) => r, + Err(e) => { + warn!(container_id = %container_id, error = %e, "failed to start exec session"); + return; + } + }; + drop(docker_guard); + + let StartExecResults::Attached { + mut output, + mut input, + } = exec_result + else { + warn!(container_id = %container_id, "exec session detached unexpectedly"); + return; + }; + + let (mut ws_sink, mut ws_stream) = socket.split(); + + let output_task = tokio::spawn(async move { + while let Some(item) = output.next().await { + match item { + Ok(log_output) => { + let bytes = log_output.into_bytes(); + if ws_sink.send(Message::Binary(bytes)).await.is_err() { + break; + } + } + Err(_) => break, + } + } + }); + + let input_task = tokio::spawn(async move { + while let Some(Ok(msg)) = ws_stream.next().await { + match msg { + Message::Binary(data) => { + if input.write_all(&data).await.is_err() { + break; + } + } + Message::Text(text) => { + if input.write_all(text.as_bytes()).await.is_err() { + break; + } + } + Message::Close(_) => break, + _ => {} + } + } + }); + + tokio::select! { + _ = output_task => {} + _ = input_task => {} + } + + info!(container_id = %container_id, "exec session closed"); +} diff --git a/app/package-lock.json b/app/package-lock.json index 9a5881d8..0dba6c85 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -10,6 +10,8 @@ "dependencies": { "@iconify/svelte": "^5.2.1", "@jis3r/icons": "^2.7.0", + "@xterm/addon-fit": "^0.11.0", + "@xterm/xterm": "^6.0.0", "geist": "^1.7.0" }, "devDependencies": { @@ -1546,6 +1548,21 @@ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "license": "MIT" }, + "node_modules/@xterm/addon-fit": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-fit/-/addon-fit-0.11.0.tgz", + "integrity": "sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g==", + "license": "MIT" + }, + "node_modules/@xterm/xterm": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-6.0.0.tgz", + "integrity": "sha512-TQwDdQGtwwDt+2cgKDLn0IRaSxYu1tSUjgKarSDkUM0ZNiSRXFpjxEsvc/Zgc5kq5omJ+V0a8/kIM2WD3sMOYg==", + "license": "MIT", + "workspaces": [ + "addons/*" + ] + }, "node_modules/acorn": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", diff --git a/app/package.json b/app/package.json index ea80f909..330b4695 100644 --- a/app/package.json +++ b/app/package.json @@ -37,6 +37,8 @@ "dependencies": { "@iconify/svelte": "^5.2.1", "@jis3r/icons": "^2.7.0", + "@xterm/addon-fit": "^0.11.0", + "@xterm/xterm": "^6.0.0", "geist": "^1.7.0" } } diff --git a/app/src/lib/api/resource-groups.ts b/app/src/lib/api/resource-groups.ts index 9ef94e8a..87b4dc2e 100644 --- a/app/src/lib/api/resource-groups.ts +++ b/app/src/lib/api/resource-groups.ts @@ -145,6 +145,38 @@ export async function deleteWorkload(token: string, id: string): Promise { if (!res.ok) throw new Error(`Failed to delete workload: ${res.status}`); } +export async function streamWorkloadLogs( + token: string, + id: string, + signal: AbortSignal, +): Promise> { + const res = await fetch(`${API_BASE}/workloads/${id}/logs`, { + headers: { Authorization: `Bearer ${token}` }, + signal, + }); + if (!res.ok || !res.body) { + const err = await res.json().catch(() => ({ error: res.status })); + throw new Error(err.error ?? `Failed to stream logs: ${res.status}`); + } + return res.body; +} + +export async function openWorkloadExecSocket(token: string, id: string): Promise { + const res = await fetch(`${API_BASE}/workloads/${id}/exec/ticket`, { + method: 'POST', + headers: { Authorization: `Bearer ${token}` }, + }); + if (!res.ok) { + const err = await res.json().catch(() => ({ error: res.status })); + throw new Error(err.error ?? `Failed to issue exec ticket: ${res.status}`); + } + const { ticket } = await res.json(); + + const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; + const url = `${wsProtocol}//${window.location.host}${API_BASE}/workloads/${id}/exec?ticket=${encodeURIComponent(ticket)}`; + return new WebSocket(url); +} + export async function listResourceGroupVolumes(token: string, rgId: string): Promise { const res = await fetch(`${API_BASE}/resource-groups/${rgId}/volumes`, { headers: { Authorization: `Bearer ${token}` }, diff --git a/app/src/routes/(app)/resource-groups/[id]/+page.svelte b/app/src/routes/(app)/resource-groups/[id]/+page.svelte index 51da30d1..cfae95c8 100644 --- a/app/src/routes/(app)/resource-groups/[id]/+page.svelte +++ b/app/src/routes/(app)/resource-groups/[id]/+page.svelte @@ -1,5 +1,5 @@ Date: Sat, 4 Jul 2026 13:25:45 +0200 Subject: [PATCH 18/30] fix: sync missing permissions to existing Admin role on startup --- control-plane/api-gateway/src/init.rs | 40 ++++++++++++++++++--------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/control-plane/api-gateway/src/init.rs b/control-plane/api-gateway/src/init.rs index 4a70a724..dd6a1577 100644 --- a/control-plane/api-gateway/src/init.rs +++ b/control-plane/api-gateway/src/init.rs @@ -220,22 +220,36 @@ pub async fn initialize_database( created_at: ActiveValue::Set(now), }; Role::insert(new_role).exec_without_returning(db).await?; - - // Assign all permissions to Admin role - for perm_id in permission_map.values() { - let role_perm = role_permission::ActiveModel { - role_id: ActiveValue::Set(role_id), - permission_id: ActiveValue::Set(*perm_id), - }; - RolePermission::insert(role_perm) - .exec_without_returning(db) - .await?; - } - - tracing::info!("Admin role created with all permissions"); + tracing::info!("Admin role created"); role_id }; + let admin_existing_perm_ids: std::collections::HashSet = RolePermission::find() + .filter(role_permission::Column::RoleId.eq(admin_role_id)) + .all(db) + .await? + .into_iter() + .map(|rp| rp.permission_id) + .collect(); + + let mut admin_granted = 0; + for perm_id in permission_map.values() { + if admin_existing_perm_ids.contains(perm_id) { + continue; + } + let role_perm = role_permission::ActiveModel { + role_id: ActiveValue::Set(admin_role_id), + permission_id: ActiveValue::Set(*perm_id), + }; + RolePermission::insert(role_perm) + .exec_without_returning(db) + .await?; + admin_granted += 1; + } + if admin_granted > 0 { + tracing::info!(count = admin_granted, "granted missing permissions to Admin role"); + } + // 4b. Create Operator role let operator_role_exists = Role::find() .filter(role::Column::Name.eq("Operator")) From 9ff3735b34d241669772152ae034715a7fabcc27 Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Sat, 4 Jul 2026 13:28:22 +0200 Subject: [PATCH 19/30] fix: wait for auth token before loading data on nodes, resource-groups and logs pages --- app/src/routes/(app)/logs/+page.svelte | 2 +- app/src/routes/(app)/nodes/+page.svelte | 17 ++++++++++++++--- .../routes/(app)/resource-groups/+page.svelte | 10 ++++++++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/app/src/routes/(app)/logs/+page.svelte b/app/src/routes/(app)/logs/+page.svelte index c6c9b56e..07d86c91 100644 --- a/app/src/routes/(app)/logs/+page.svelte +++ b/app/src/routes/(app)/logs/+page.svelte @@ -124,7 +124,6 @@ } onMount(() => { - load(); refreshTimer = setInterval(load, REFRESH_INTERVAL_MS); }); @@ -133,6 +132,7 @@ }); $effect(() => { + auth.token; selectedService; selectedLevel; selectedClassification; diff --git a/app/src/routes/(app)/nodes/+page.svelte b/app/src/routes/(app)/nodes/+page.svelte index 2f429736..ab6a4794 100644 --- a/app/src/routes/(app)/nodes/+page.svelte +++ b/app/src/routes/(app)/nodes/+page.svelte @@ -81,11 +81,12 @@ } } - onMount(async () => { - if (!auth.token) return; + let loadStarted = false; + + async function loadInitial() { try { [nodes] = await Promise.all([ - listNodes(auth.token), + listNodes(auth.token!), fetchStats(), ]); } catch (e) { @@ -93,6 +94,16 @@ } finally { loading = false; } + } + + $effect(() => { + if (auth.token && !loadStarted) { + loadStarted = true; + loadInitial(); + } + }); + + onMount(() => { pollInterval = setInterval(fetchStats, 10_000); }); diff --git a/app/src/routes/(app)/resource-groups/+page.svelte b/app/src/routes/(app)/resource-groups/+page.svelte index 21a6c3bf..42d37fcc 100644 --- a/app/src/routes/(app)/resource-groups/+page.svelte +++ b/app/src/routes/(app)/resource-groups/+page.svelte @@ -1,5 +1,4 @@ Date: Sat, 4 Jul 2026 14:13:18 +0200 Subject: [PATCH 20/30] feat: add docker compose stack deployment with service discovery and smart workload icons --- Cargo.lock | 21 ++ Cargo.toml | 1 + agent/src/client.rs | 2 + agent/src/docker.rs | 62 +++- agent/src/main.rs | 2 + app/src/lib/api/resource-groups.ts | 39 ++ app/src/lib/utils/image-icon.ts | 27 ++ .../(app)/resource-groups/[id]/+page.svelte | 339 +++++++++++++++--- .../api-gateway/src/routes/workloads.rs | 19 + control-plane/scheduler/Cargo.toml | 2 + control-plane/scheduler/src/db/mod.rs | 1 + .../scheduler/src/db/workload_stacks.rs | 41 +++ control-plane/scheduler/src/db/workloads.rs | 4 + control-plane/scheduler/src/handlers/mod.rs | 1 + .../scheduler/src/handlers/stacks.rs | 17 + control-plane/scheduler/src/models/compose.rs | 28 ++ control-plane/scheduler/src/models/mod.rs | 1 + .../scheduler/src/models/workload.rs | 6 + control-plane/scheduler/src/server.rs | 6 +- .../scheduler/src/services/compose_parser.rs | 107 ++++++ control-plane/scheduler/src/services/etcd.rs | 4 + control-plane/scheduler/src/services/mod.rs | 1 + .../scheduler/src/services/scheduler.rs | 172 ++++++++- .../shared/entity/src/entities/mod.rs | 2 + .../entity/src/entities/resource_groups.rs | 8 + .../entity/src/entities/workload_stacks.rs | 42 +++ .../shared/entity/src/entities/workloads.rs | 16 + control-plane/shared/migration/src/lib.rs | 2 + .../m20260704_000000_add_workload_stacks.rs | 137 +++++++ 29 files changed, 1054 insertions(+), 56 deletions(-) create mode 100644 app/src/lib/utils/image-icon.ts create mode 100644 control-plane/scheduler/src/db/workload_stacks.rs create mode 100644 control-plane/scheduler/src/handlers/stacks.rs create mode 100644 control-plane/scheduler/src/models/compose.rs create mode 100644 control-plane/scheduler/src/services/compose_parser.rs create mode 100644 control-plane/shared/entity/src/entities/workload_stacks.rs create mode 100644 control-plane/shared/migration/src/m20260704_000000_add_workload_stacks.rs diff --git a/Cargo.lock b/Cargo.lock index 795c5026..6ecc057e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4435,7 +4435,9 @@ dependencies = [ "sea-orm", "serde", "serde_json", + "serde_yaml", "shared", + "thiserror 2.0.18", "tokio", "tracing", "tracing-opentelemetry", @@ -4769,6 +4771,19 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "sha1" version = "0.10.6" @@ -5855,6 +5870,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + [[package]] name = "untrusted" version = "0.9.0" diff --git a/Cargo.toml b/Cargo.toml index 27858853..8c1be5b9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,7 @@ tokio-tungstenite = "0.29" # Serialization serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.145" +serde_yaml = "0.9" # Logging & Tracing tracing = "0.1" diff --git a/agent/src/client.rs b/agent/src/client.rs index ad5c67b1..ab0f1897 100644 --- a/agent/src/client.rs +++ b/agent/src/client.rs @@ -87,6 +87,8 @@ pub struct AssignedWorkload { pub volume_mounts: Option>, pub status: String, pub container_id: Option, + pub stack_id: Option, + pub service_name: Option, } pub struct ApiClient { diff --git a/agent/src/docker.rs b/agent/src/docker.rs index 8057960c..dda0432e 100644 --- a/agent/src/docker.rs +++ b/agent/src/docker.rs @@ -1,10 +1,13 @@ use anyhow::{Context, Result}; use axum::body::Bytes; use bollard::exec::{CreateExecOptions, StartExecOptions, StartExecResults}; -use bollard::models::{ContainerCreateBody, ContainerStateStatusEnum, HostConfig}; +use bollard::models::{ + ContainerCreateBody, ContainerStateStatusEnum, EndpointSettings, HostConfig, + NetworkCreateRequest, NetworkingConfig, +}; use bollard::query_parameters::{ CreateContainerOptionsBuilder, CreateImageOptionsBuilder, InspectContainerOptionsBuilder, - LogsOptionsBuilder, StartContainerOptionsBuilder, + ListNetworksOptionsBuilder, LogsOptionsBuilder, StartContainerOptionsBuilder, }; use bollard::Docker; use futures_util::{Stream, StreamExt}; @@ -41,6 +44,8 @@ pub struct WorkloadSpec { pub env_vars: Option>, pub ports: Option>, pub volume_mounts: Option>, + pub stack_id: Option, + pub service_name: Option, } pub struct DockerManager { @@ -92,6 +97,41 @@ impl DockerManager { Ok(()) } + pub async fn ensure_stack_network(&self, stack_id: &str) -> Result { + let network_name = format!("csfx-stack-{}", stack_id); + + let filters = HashMap::from([("name".to_string(), vec![network_name.clone()])]); + let list_options = ListNetworksOptionsBuilder::default() + .filters(&filters) + .build(); + + let existing = self + .docker + .list_networks(Some(list_options)) + .await + .context("Failed to list networks")?; + + if let Some(network) = existing.into_iter().find(|n| n.name.as_deref() == Some(&network_name)) { + return Ok(network.id.unwrap_or(network_name)); + } + + let config = NetworkCreateRequest { + name: network_name.clone(), + driver: Some("bridge".to_string()), + ..Default::default() + }; + + let response = self + .docker + .create_network(config) + .await + .context("Failed to create stack network")?; + + info!(stack_id = %stack_id, network = %network_name, "Stack network ready"); + + Ok(response.id) + } + pub async fn start_container(&self, spec: &WorkloadSpec) -> Result { let container_name = format!("csfx-{}", spec.workload_id); @@ -125,6 +165,23 @@ impl DockerManager { ..Default::default() }; + let networking_config = match &spec.stack_id { + Some(stack_id) => { + let network_name = self.ensure_stack_network(stack_id).await?; + let aliases = spec.service_name.clone().map(|name| vec![name]); + Some(NetworkingConfig { + endpoints_config: Some(HashMap::from([( + network_name, + EndpointSettings { + aliases, + ..Default::default() + }, + )])), + }) + } + None => None, + }; + let config = ContainerCreateBody { image: Some(spec.image.clone()), env, @@ -134,6 +191,7 @@ impl DockerManager { Some(exposed_ports) }, host_config: Some(host_config), + networking_config, labels: Some(HashMap::from([ ("csfx.workload_id".to_string(), spec.workload_id.clone()), ("csfx.managed".to_string(), "true".to_string()), diff --git a/agent/src/main.rs b/agent/src/main.rs index 3e59e87b..7f672cb0 100644 --- a/agent/src/main.rs +++ b/agent/src/main.rs @@ -419,6 +419,8 @@ async fn process_workloads( }) .collect() }), + stack_id: workload.stack_id, + service_name: workload.service_name, }; match docker.start_container(&spec).await { diff --git a/app/src/lib/api/resource-groups.ts b/app/src/lib/api/resource-groups.ts index 87b4dc2e..8d79a55f 100644 --- a/app/src/lib/api/resource-groups.ts +++ b/app/src/lib/api/resource-groups.ts @@ -51,6 +51,8 @@ export interface Workload { container_id: string | null; volume_mounts: VolumeMount[] | null; resource_group_id: string | null; + stack_id: string | null; + service_name: string | null; created_at: string; updated_at: string | null; } @@ -73,6 +75,24 @@ export interface CreateVolumeRequest { resource_group_id: string; } +export interface CreateStackRequest { + name: string; + resource_group_id: string; + compose_yaml: string; +} + +export interface CreateStackWorkloadResult { + workload_id: string; + status: string; + assigned_agent_id: string | null; + message: string; +} + +export interface CreateStackResponse { + stack_id: string; + workloads: CreateStackWorkloadResult[]; +} + export async function listResourceGroups(token: string): Promise { const res = await fetch(`${API_BASE}/resource-groups`, { headers: { Authorization: `Bearer ${token}` }, @@ -137,6 +157,25 @@ export async function createWorkload(token: string, req: CreateWorkloadRequest): return res.json(); } +export async function createWorkloadStack( + token: string, + req: CreateStackRequest, +): Promise { + const res = await fetch(`${API_BASE}/workload-stacks`, { + method: 'POST', + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify(req), + }); + if (!res.ok) { + const err = await res.json().catch(() => ({ error: res.status })); + throw new Error(err.error ?? `Failed to create stack: ${res.status}`); + } + return res.json(); +} + export async function deleteWorkload(token: string, id: string): Promise { const res = await fetch(`${API_BASE}/workloads/${id}`, { method: 'DELETE', diff --git a/app/src/lib/utils/image-icon.ts b/app/src/lib/utils/image-icon.ts new file mode 100644 index 00000000..6a3e95b3 --- /dev/null +++ b/app/src/lib/utils/image-icon.ts @@ -0,0 +1,27 @@ +const KNOWN_IMAGE_ICONS: Record = { + redis: 'logos:redis', + postgres: 'logos:postgresql', + postgresql: 'logos:postgresql', + nginx: 'logos:nginx', + mysql: 'logos:mysql', + mariadb: 'logos:mariadb', + mongo: 'logos:mongodb', + mongodb: 'logos:mongodb', + rabbitmq: 'logos:rabbitmq-icon', + memcached: 'logos:memcached', + traefik: 'logos:traefikproxy-icon', + caddy: 'logos:caddy-icon', + elasticsearch: 'logos:elasticsearch', + grafana: 'logos:grafana', + prometheus: 'logos:prometheus', +}; + +const DOCKER_FALLBACK_ICON = 'logos:docker-icon'; + +export function resolveImageIcon(image: string): string { + const withoutTag = image.split('@')[0].split(':')[0]; + const segments = withoutTag.split('/'); + const bareName = segments[segments.length - 1].toLowerCase(); + + return KNOWN_IMAGE_ICONS[bareName] ?? DOCKER_FALLBACK_ICON; +} diff --git a/app/src/routes/(app)/resource-groups/[id]/+page.svelte b/app/src/routes/(app)/resource-groups/[id]/+page.svelte index 983316ef..501bedfe 100644 --- a/app/src/routes/(app)/resource-groups/[id]/+page.svelte +++ b/app/src/routes/(app)/resource-groups/[id]/+page.svelte @@ -8,6 +8,7 @@ listResourceGroupWorkloads, listResourceGroupVolumes, createWorkload, + createWorkloadStack, deleteWorkload, createVolume, deleteVolume, @@ -19,9 +20,11 @@ type PortMapping, type VolumeMount, } from "$lib/api/resource-groups"; + import { resolveImageIcon } from "$lib/utils/image-icon"; import type { Terminal } from "@xterm/xterm"; import type { FitAddon } from "@xterm/addon-fit"; import "@xterm/xterm/css/xterm.css"; + import Icon from "@iconify/svelte"; import * as Sidebar from "$lib/components/ui/sidebar/index.js"; import { Button } from "$lib/components/ui/button/index.js"; @@ -38,11 +41,21 @@ let deployDialog = $state(null); let volumeDialog = $state(null); + let resourcePickerDialog = $state(null); + let composeDialog = $state(null); let deploying = $state(false); let creatingVolume = $state(false); + let deployingStack = $state(false); let deployError = $state(null); let volumeError = $state(null); + let composeError = $state(null); let downloadingVpn = $state(false); + let expandedStacks = $state>(new Set()); + + const RESOURCE_TYPES = [ + { key: "docker-container", label: "Docker Container", description: "Deploy a single container", icon: "mdi:docker" }, + { key: "docker-compose", label: "Docker Compose", description: "Deploy multiple related containers as one stack", icon: "mdi:file-code-outline" }, + ] as const; let formImage = $state(""); let formName = $state(""); @@ -53,6 +66,9 @@ let formPorts = $state(""); let formVolumeMounts = $state(""); + let composeStackName = $state(""); + let composeYaml = $state(""); + let volFormName = $state(""); let volFormSize = $state("10"); @@ -163,6 +179,60 @@ } } + async function handleDeployStack() { + if (!auth.token || !composeYaml.trim() || !composeStackName) return; + deployingStack = true; + composeError = null; + try { + await createWorkloadStack(auth.token, { + name: composeStackName, + resource_group_id: rgId, + compose_yaml: composeYaml, + }); + composeDialog?.close(); + resetComposeForm(); + workloads = await listResourceGroupWorkloads(auth.token, rgId); + } catch (e) { + composeError = e instanceof Error ? e.message : "Failed to deploy stack"; + } finally { + deployingStack = false; + } + } + + function resetComposeForm() { + composeStackName = ""; + composeYaml = ""; + composeError = null; + } + + function handleComposeFileUpload(event: Event) { + const input = event.target as HTMLInputElement; + const file = input.files?.[0]; + if (!file) return; + file.text().then((text) => { + composeYaml = text; + }); + } + + function openResourceType(key: (typeof RESOURCE_TYPES)[number]["key"]) { + resourcePickerDialog?.close(); + if (key === "docker-container") { + deployDialog?.showModal(); + } else { + composeDialog?.showModal(); + } + } + + function toggleStack(stackId: string) { + const next = new Set(expandedStacks); + if (next.has(stackId)) { + next.delete(stackId); + } else { + next.add(stackId); + } + expandedStacks = next; + } + async function handleCreateVolume() { if (!auth.token || !volFormName) return; creatingVolume = true; @@ -336,24 +406,68 @@ deployError = null; } + type WorkloadStack = { + stack_id: string; + stack_name: string; + children: Workload[]; + }; + type ResourceItem = | { kind: "container"; data: Workload } + | { kind: "stack"; data: WorkloadStack } | { kind: "volume"; data: Volume }; + function groupWorkloadsByStack(items: Workload[]): ResourceItem[] { + const standalone: Workload[] = []; + const stacks = new Map(); + + for (const w of items) { + if (!w.stack_id) { + standalone.push(w); + continue; + } + const group = stacks.get(w.stack_id) ?? []; + group.push(w); + stacks.set(w.stack_id, group); + } + + const stackItems: ResourceItem[] = Array.from(stacks.entries()).map( + ([stackId, children]): ResourceItem => ({ + kind: "stack", + data: { + stack_id: stackId, + stack_name: `Stack ${stackId.slice(0, 8)}`, + children, + }, + }), + ); + + return [ + ...standalone.map((w): ResourceItem => ({ kind: "container", data: w })), + ...stackItems, + ]; + } + let allResources = $derived([ - ...workloads.map((w): ResourceItem => ({ kind: "container", data: w })), + ...groupWorkloadsByStack(workloads), ...volumes.map((v): ResourceItem => ({ kind: "volume", data: v })), ]); let filteredResources = $derived( allResources.filter((r) => { - if (activeTab === "container" && r.kind !== "container") return false; + if (activeTab === "container" && r.kind === "volume") return false; if (activeTab === "volume" && r.kind !== "volume") return false; if (!filterText) return true; const q = filterText.toLowerCase(); if (r.kind === "container") { return r.data.name.toLowerCase().includes(q) || r.data.image.toLowerCase().includes(q); } + if (r.kind === "stack") { + return ( + r.data.stack_name.toLowerCase().includes(q) || + r.data.children.some((c) => c.name.toLowerCase().includes(q) || c.image.toLowerCase().includes(q)) + ); + } return r.data.name.toLowerCase().includes(q); }) ); @@ -485,6 +599,88 @@
+ +
+
+

Add Resource

+ +
+
+ {#each RESOURCE_TYPES as type} + + {/each} +
+
+
+ + resetComposeForm()} +> +
+
+

Deploy Docker Compose Stack

+ +
+
+ + +
+
+
+ + +
+ +
+ {#if composeError} +

{composeError}

+ {/if} +
+ + +
+
+
+ volumeDialog?.showModal()}> Add Volume - @@ -685,68 +881,111 @@ {:else} - {#each filteredResources as item (item.kind + item.data.id)} + {#snippet workloadActions(w: Workload)} + + + + {/snippet} + {#snippet workloadRow(w: Workload, indented: boolean)} + + +
+
+ +
+
+

{w.service_name ?? w.name}

+

{w.image}

+
+
+ + + Container + + + {w.assigned_agent_id ? w.assigned_agent_id.slice(0, 8) : "-"} + + +
+ {w.cpu_millicores}m +
+
+
+
+ + + + {statusLabel(w.status)} + + + + {@render workloadActions(w)} + + + {/snippet} + {#each filteredResources as item (item.kind + (item.kind === "stack" ? item.data.stack_id : item.data.id))} {#if item.kind === "container"} - {@const w = item.data} + {@render workloadRow(item.data, false)} + {:else if item.kind === "stack"} + {@const stack = item.data} + {@const expanded = expandedStacks.has(stack.stack_id)} -
+
+ + - Container + Compose Stack - {w.assigned_agent_id ? w.assigned_agent_id.slice(0, 8) : "-"} - - -
- {w.cpu_millicores}m -
-
-
-
+ {stack.children[0]?.assigned_agent_id ? stack.children[0].assigned_agent_id!.slice(0, 8) : "-"} + - - - {statusLabel(w.status)} + + {stack.children.filter((c) => c.status === 'running').length}/{stack.children.length} running - - - - - + + {#if expanded} + {#each stack.children as child (child.id)} + {@render workloadRow(child, true)} + {/each} + {/if} {:else} {@const v = item.data} diff --git a/control-plane/api-gateway/src/routes/workloads.rs b/control-plane/api-gateway/src/routes/workloads.rs index df1e0a81..80d61e73 100644 --- a/control-plane/api-gateway/src/routes/workloads.rs +++ b/control-plane/api-gateway/src/routes/workloads.rs @@ -96,6 +96,24 @@ pub async fn delete_workload( .await } +pub async fn create_stack( + CanManageWorkloads(_claims): CanManageWorkloads, + State(state): State, + headers: HeaderMap, + body: String, +) -> Result)> { + let body_json: Option = serde_json::from_str(&body).ok(); + let header_map = header_vec(&headers); + proxy_to_scheduler( + &state, + reqwest::Method::POST, + "/workload-stacks", + body_json, + Some(header_map), + ) + .await +} + fn header_vec(headers: &HeaderMap) -> Vec<(String, String)> { headers .iter() @@ -108,4 +126,5 @@ pub fn workloads_routes() -> Router { .route("/workloads", post(create_workload)) .route("/workloads", get(list_workloads)) .route("/workloads/{id}", delete(delete_workload)) + .route("/workload-stacks", post(create_stack)) } diff --git a/control-plane/scheduler/Cargo.toml b/control-plane/scheduler/Cargo.toml index 1a8ef34d..e867f558 100644 --- a/control-plane/scheduler/Cargo.toml +++ b/control-plane/scheduler/Cargo.toml @@ -20,8 +20,10 @@ tracing = { workspace = true } tracing-subscriber = { workspace = true, features = ["env-filter"] } serde = { workspace = true } serde_json = { workspace = true } +serde_yaml = { workspace = true } dotenvy = { workspace = true } anyhow = { workspace = true } +thiserror = { workspace = true } uuid = { workspace = true, features = ["v4", "serde"] } chrono = { workspace = true, features = ["serde"] } sea-orm = { workspace = true } diff --git a/control-plane/scheduler/src/db/mod.rs b/control-plane/scheduler/src/db/mod.rs index c94899ea..1e7c9165 100644 --- a/control-plane/scheduler/src/db/mod.rs +++ b/control-plane/scheduler/src/db/mod.rs @@ -1,2 +1,3 @@ pub mod agents; +pub mod workload_stacks; pub mod workloads; diff --git a/control-plane/scheduler/src/db/workload_stacks.rs b/control-plane/scheduler/src/db/workload_stacks.rs new file mode 100644 index 00000000..1fade151 --- /dev/null +++ b/control-plane/scheduler/src/db/workload_stacks.rs @@ -0,0 +1,41 @@ +use chrono::Utc; +use entity::entities::workload_stacks; +use sea_orm::{ActiveModelTrait, ActiveValue::Set, DatabaseConnection, EntityTrait, ModelTrait}; +use uuid::Uuid; + +pub async fn create( + db: &DatabaseConnection, + resource_group_id: Uuid, + name: &str, + compose_source: &str, +) -> Result { + let model = workload_stacks::ActiveModel { + id: Set(Uuid::new_v4()), + resource_group_id: Set(resource_group_id), + name: Set(name.to_string()), + compose_source: Set(Some(compose_source.to_string())), + status: Set("pending".to_string()), + created_at: Set(Utc::now().naive_utc()), + updated_at: Set(None), + }; + + model.insert(db).await +} + +pub async fn update_status( + db: &DatabaseConnection, + stack_id: Uuid, + status: &str, +) -> Result<(), sea_orm::DbErr> { + let stack = workload_stacks::Entity::find_by_id(stack_id) + .one(db) + .await? + .ok_or(sea_orm::DbErr::RecordNotFound(stack_id.to_string()))?; + + let mut active: workload_stacks::ActiveModel = stack.into(); + active.status = Set(status.to_string()); + active.updated_at = Set(Some(Utc::now().naive_utc())); + + active.update(db).await?; + Ok(()) +} diff --git a/control-plane/scheduler/src/db/workloads.rs b/control-plane/scheduler/src/db/workloads.rs index df90fb3a..91141337 100644 --- a/control-plane/scheduler/src/db/workloads.rs +++ b/control-plane/scheduler/src/db/workloads.rs @@ -38,6 +38,8 @@ pub async fn create( created_by: Set(None), organization_id: Set(None), resource_group_id: Set(req.resource_group_id), + stack_id: Set(req.stack_id), + service_name: Set(req.service_name.clone()), created_at: Set(Utc::now().naive_utc()), updated_at: Set(None), }; @@ -118,6 +120,8 @@ fn into_response(m: workloads::Model) -> WorkloadResponse { container_id: m.container_id, volume_mounts, resource_group_id: m.resource_group_id, + stack_id: m.stack_id, + service_name: m.service_name, created_at: m.created_at.and_utc(), updated_at: m.updated_at.map(|dt| dt.and_utc()), } diff --git a/control-plane/scheduler/src/handlers/mod.rs b/control-plane/scheduler/src/handlers/mod.rs index 474d2676..3f038ecf 100644 --- a/control-plane/scheduler/src/handlers/mod.rs +++ b/control-plane/scheduler/src/handlers/mod.rs @@ -1,2 +1,3 @@ pub mod internal; +pub mod stacks; pub mod workloads; diff --git a/control-plane/scheduler/src/handlers/stacks.rs b/control-plane/scheduler/src/handlers/stacks.rs new file mode 100644 index 00000000..7fefacfe --- /dev/null +++ b/control-plane/scheduler/src/handlers/stacks.rs @@ -0,0 +1,17 @@ +use axum::{extract::State, http::StatusCode, response::IntoResponse, Json}; + +use crate::{models::compose::CreateStackRequest, server::AppState}; + +pub async fn create_stack( + State(state): State, + Json(req): Json, +) -> impl IntoResponse { + match state.scheduler.schedule_stack(req).await { + Ok(resp) => (StatusCode::CREATED, Json(serde_json::json!(resp))).into_response(), + Err(e) => ( + StatusCode::INTERNAL_SERVER_ERROR, + Json(serde_json::json!({ "error": e })), + ) + .into_response(), + } +} diff --git a/control-plane/scheduler/src/models/compose.rs b/control-plane/scheduler/src/models/compose.rs new file mode 100644 index 00000000..abd47fe3 --- /dev/null +++ b/control-plane/scheduler/src/models/compose.rs @@ -0,0 +1,28 @@ +use std::collections::HashMap; +use uuid::Uuid; + +use crate::models::workload::PortMapping; + +#[derive(Debug, Clone)] +pub struct ComposeServiceSpec { + pub service_name: String, + pub image: String, + pub env_vars: Option>, + pub ports: Option>, + pub cpu_millicores: i32, + pub memory_bytes: i64, + pub disk_bytes: i64, +} + +#[derive(Debug, Clone, serde::Deserialize)] +pub struct CreateStackRequest { + pub name: String, + pub resource_group_id: Uuid, + pub compose_yaml: String, +} + +#[derive(Debug, Clone, serde::Serialize)] +pub struct CreateStackResponse { + pub stack_id: Uuid, + pub workloads: Vec, +} diff --git a/control-plane/scheduler/src/models/mod.rs b/control-plane/scheduler/src/models/mod.rs index 8580f7df..748da2a6 100644 --- a/control-plane/scheduler/src/models/mod.rs +++ b/control-plane/scheduler/src/models/mod.rs @@ -1 +1,2 @@ +pub mod compose; pub mod workload; diff --git a/control-plane/scheduler/src/models/workload.rs b/control-plane/scheduler/src/models/workload.rs index 8b6a4340..fdc5888b 100644 --- a/control-plane/scheduler/src/models/workload.rs +++ b/control-plane/scheduler/src/models/workload.rs @@ -61,6 +61,10 @@ pub struct CreateWorkloadRequest { pub ports: Option>, pub volume_mounts: Option>, pub resource_group_id: Option, + #[serde(default)] + pub stack_id: Option, + #[serde(default)] + pub service_name: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -91,6 +95,8 @@ pub struct WorkloadResponse { pub container_id: Option, pub volume_mounts: Option>, pub resource_group_id: Option, + pub stack_id: Option, + pub service_name: Option, pub created_at: DateTime, pub updated_at: Option>, } diff --git a/control-plane/scheduler/src/server.rs b/control-plane/scheduler/src/server.rs index 0b85206e..b03e0795 100644 --- a/control-plane/scheduler/src/server.rs +++ b/control-plane/scheduler/src/server.rs @@ -5,7 +5,7 @@ use std::sync::Arc; use tokio::sync::Mutex; use crate::{ - handlers::{internal, workloads}, + handlers::{internal, stacks, workloads}, metrics, services::scheduler::SchedulerService, }; @@ -34,6 +34,10 @@ pub fn create_router(state: AppState) -> Router { "/workloads/{id}", axum::routing::delete(workloads::delete_workload), ) + .route( + "/workload-stacks", + axum::routing::post(stacks::create_stack), + ) .route( "/internal/workloads/status", axum::routing::post(internal::update_container_statuses), diff --git a/control-plane/scheduler/src/services/compose_parser.rs b/control-plane/scheduler/src/services/compose_parser.rs new file mode 100644 index 00000000..0bb70f7b --- /dev/null +++ b/control-plane/scheduler/src/services/compose_parser.rs @@ -0,0 +1,107 @@ +use std::collections::HashMap; + +use crate::models::compose::ComposeServiceSpec; +use crate::models::workload::PortMapping; + +const DEFAULT_CPU_MILLICORES: i32 = 500; +const DEFAULT_MEMORY_BYTES: i64 = 512 * 1024 * 1024; +const DEFAULT_DISK_BYTES: i64 = 1024 * 1024 * 1024; + +#[derive(Debug, thiserror::Error)] +pub enum ComposeParseError { + #[error("invalid compose yaml: {0}")] + InvalidYaml(String), + #[error("compose file defines no services")] + NoServicesDefined, + #[error("service '{0}' uses build, only image is supported")] + UnsupportedBuildDirective(String), + #[error("service '{0}' has no image")] + MissingImage(String), +} + +#[derive(Debug, serde::Deserialize)] +struct RawCompose { + services: HashMap, +} + +#[derive(Debug, serde::Deserialize)] +struct RawService { + image: Option, + build: Option, + ports: Option>, + environment: Option, +} + +#[derive(Debug, serde::Deserialize)] +#[serde(untagged)] +enum RawEnvironment { + List(Vec), + Map(HashMap), +} + +pub fn parse_compose(yaml: &str) -> Result, ComposeParseError> { + let raw: RawCompose = + serde_yaml::from_str(yaml).map_err(|e| ComposeParseError::InvalidYaml(e.to_string()))?; + + if raw.services.is_empty() { + return Err(ComposeParseError::NoServicesDefined); + } + + raw.services + .into_iter() + .map(|(service_name, service)| build_service_spec(service_name, service)) + .collect() +} + +fn build_service_spec( + service_name: String, + service: RawService, +) -> Result { + if service.build.is_some() { + return Err(ComposeParseError::UnsupportedBuildDirective(service_name)); + } + let image = service + .image + .ok_or_else(|| ComposeParseError::MissingImage(service_name.clone()))?; + + Ok(ComposeServiceSpec { + service_name, + image, + env_vars: normalize_environment(service.environment), + ports: service.ports.map(|raw| parse_compose_ports(&raw)), + cpu_millicores: DEFAULT_CPU_MILLICORES, + memory_bytes: DEFAULT_MEMORY_BYTES, + disk_bytes: DEFAULT_DISK_BYTES, + }) +} + +fn normalize_environment(raw: Option) -> Option> { + match raw? { + RawEnvironment::Map(map) => Some(map), + RawEnvironment::List(list) => Some( + list.into_iter() + .filter_map(|entry| { + let (key, value) = entry.split_once('=')?; + Some((key.to_string(), value.to_string())) + }) + .collect(), + ), + } +} + +fn parse_compose_ports(raw: &[String]) -> Vec { + raw.iter().filter_map(|entry| parse_compose_port(entry)).collect() +} + +fn parse_compose_port(entry: &str) -> Option { + let (node_port, container_port) = match entry.split_once(':') { + Some((host, container)) => (host.parse().ok(), container), + None => (None, entry), + }; + + Some(PortMapping { + container_port: container_port.parse().ok()?, + protocol: None, + node_port, + }) +} diff --git a/control-plane/scheduler/src/services/etcd.rs b/control-plane/scheduler/src/services/etcd.rs index ec826a65..1eefdeaa 100644 --- a/control-plane/scheduler/src/services/etcd.rs +++ b/control-plane/scheduler/src/services/etcd.rs @@ -13,6 +13,10 @@ pub struct PlacementRecord { pub memory_bytes: i64, pub disk_bytes: i64, pub scheduled_at: String, + #[serde(default)] + pub stack_id: Option, + #[serde(default)] + pub service_name: Option, } pub async fn put_placement( diff --git a/control-plane/scheduler/src/services/mod.rs b/control-plane/scheduler/src/services/mod.rs index d5016dca..9655cca1 100644 --- a/control-plane/scheduler/src/services/mod.rs +++ b/control-plane/scheduler/src/services/mod.rs @@ -1,2 +1,3 @@ +pub mod compose_parser; pub mod etcd; pub mod scheduler; diff --git a/control-plane/scheduler/src/services/scheduler.rs b/control-plane/scheduler/src/services/scheduler.rs index 8ae77ebc..b6bc2dd3 100644 --- a/control-plane/scheduler/src/services/scheduler.rs +++ b/control-plane/scheduler/src/services/scheduler.rs @@ -5,9 +5,11 @@ use std::sync::Arc; use tokio::sync::Mutex; use uuid::Uuid; +use crate::models::compose::{ComposeServiceSpec, CreateStackRequest, CreateStackResponse}; use crate::models::workload::{ AgentResources, CreateWorkloadRequest, CreateWorkloadResponse, WorkloadStatus, }; +use crate::services::compose_parser::{self, ComposeParseError}; use crate::services::etcd::{delete_placement, put_placement, PlacementRecord}; pub struct SchedulerService { @@ -63,6 +65,8 @@ impl SchedulerService { memory_bytes: req.memory_bytes, disk_bytes: req.disk_bytes, scheduled_at: Utc::now().to_rfc3339(), + stack_id: req.stack_id, + service_name: req.service_name.clone(), }; put_placement(&self.etcd, &record).await?; @@ -98,6 +102,139 @@ impl SchedulerService { } } + pub async fn schedule_stack( + &self, + req: CreateStackRequest, + ) -> Result { + let services = compose_parser::parse_compose(&req.compose_yaml) + .map_err(|e| format_compose_error(&e))?; + + let stack = crate::db::workload_stacks::create( + &self.db, + req.resource_group_id, + &req.name, + &req.compose_yaml, + ) + .await + .map_err(|e| format!("Failed to persist stack: {}", e))?; + + let workloads = self + .place_stack_workloads(stack.id, req.resource_group_id, &services) + .await?; + + crate::db::workload_stacks::update_status( + &self.db, + stack.id, + if workloads.iter().all(|w| w.assigned_agent_id.is_some()) { + "active" + } else { + "pending" + }, + ) + .await + .map_err(|e| format!("Failed to update stack status: {}", e))?; + + Ok(CreateStackResponse { + stack_id: stack.id, + workloads, + }) + } + + async fn place_stack_workloads( + &self, + stack_id: Uuid, + resource_group_id: Uuid, + services: &[ComposeServiceSpec], + ) -> Result, String> { + let mut agents = crate::db::agents::get_online_agents_with_resources(&self.db) + .await + .map_err(|e| format!("Failed to fetch agent resources: {}", e))?; + + for agent in agents.iter_mut() { + let (reserved_cpu, reserved_mem, reserved_disk) = + crate::db::agents::get_assigned_workload_resources(&self.db, agent.agent_id) + .await + .map_err(|e| format!("Failed to fetch reserved resources: {}", e))?; + + agent.free_cpu_millicores -= reserved_cpu; + agent.free_memory_bytes -= reserved_mem; + agent.free_disk_bytes -= reserved_disk; + } + + let total_cpu: i32 = services.iter().map(|s| s.cpu_millicores).sum(); + let total_memory: i64 = services.iter().map(|s| s.memory_bytes).sum(); + let total_disk: i64 = services.iter().map(|s| s.disk_bytes).sum(); + + let agent_id = self.first_fit_resources(total_cpu, total_memory, total_disk, &agents); + + let mut responses = Vec::with_capacity(services.len()); + for service in services { + let req = CreateWorkloadRequest { + name: format!("{}-{}", stack_id, service.service_name), + image: service.image.clone(), + cpu_millicores: service.cpu_millicores, + memory_bytes: service.memory_bytes, + disk_bytes: service.disk_bytes, + env_vars: service.env_vars.clone(), + ports: service.ports.clone(), + volume_mounts: None, + resource_group_id: Some(resource_group_id), + stack_id: Some(stack_id), + service_name: Some(service.service_name.clone()), + }; + + let workload = crate::db::workloads::create(&self.db, &req) + .await + .map_err(|e| format!("Failed to persist workload: {}", e))?; + + responses.push(match agent_id { + Some(agent_id) => { + crate::db::workloads::assign(&self.db, workload.id, agent_id) + .await + .map_err(|e| format!("Failed to assign workload: {}", e))?; + + let record = PlacementRecord { + workload_id: workload.id, + agent_id, + image: req.image.clone(), + cpu_millicores: req.cpu_millicores, + memory_bytes: req.memory_bytes, + disk_bytes: req.disk_bytes, + scheduled_at: Utc::now().to_rfc3339(), + stack_id: Some(stack_id), + service_name: Some(service.service_name.clone()), + }; + put_placement(&self.etcd, &record).await?; + + CreateWorkloadResponse { + workload_id: workload.id, + status: WorkloadStatus::Scheduled, + assigned_agent_id: Some(agent_id), + message: format!("Workload assigned to agent {}", agent_id), + } + } + None => CreateWorkloadResponse { + workload_id: workload.id, + status: WorkloadStatus::Pending, + assigned_agent_id: None, + message: "No agent with sufficient resources available".to_string(), + }, + }); + } + + crate::log_info!( + "scheduler", + &format!( + "Stack scheduled stack_id={} agent_id={:?} services={}", + stack_id, + agent_id, + services.len() + ) + ); + + Ok(responses) + } + async fn resolve_volume_affinity( &self, req: &CreateWorkloadRequest, @@ -133,6 +270,21 @@ impl SchedulerService { } fn first_fit(&self, req: &CreateWorkloadRequest, agents: &[AgentResources]) -> Option { + self.first_fit_resources( + req.cpu_millicores, + req.memory_bytes, + req.disk_bytes, + agents, + ) + } + + fn first_fit_resources( + &self, + cpu_millicores: i32, + memory_bytes: i64, + disk_bytes: i64, + agents: &[AgentResources], + ) -> Option { let mut sorted: Vec<&AgentResources> = agents.iter().collect(); sorted.sort_by(|a, b| { let score_a = a.free_cpu_millicores as i64 + a.free_memory_bytes / (1024 * 1024); @@ -143,9 +295,9 @@ impl SchedulerService { sorted .into_iter() .find(|a| { - a.free_cpu_millicores >= req.cpu_millicores - && a.free_memory_bytes >= req.memory_bytes - && a.free_disk_bytes >= req.disk_bytes + a.free_cpu_millicores >= cpu_millicores + && a.free_memory_bytes >= memory_bytes + && a.free_disk_bytes >= disk_bytes }) .map(|a| a.agent_id) } @@ -173,3 +325,17 @@ impl SchedulerService { Ok(()) } } + +fn format_compose_error(error: &ComposeParseError) -> String { + match error { + ComposeParseError::InvalidYaml(detail) => format!("invalid compose yaml: {}", detail), + ComposeParseError::NoServicesDefined => "compose file defines no services".to_string(), + ComposeParseError::UnsupportedBuildDirective(service) => format!( + "service '{}' uses build, only image is supported", + service + ), + ComposeParseError::MissingImage(service) => { + format!("service '{}' has no image", service) + } + } +} diff --git a/control-plane/shared/entity/src/entities/mod.rs b/control-plane/shared/entity/src/entities/mod.rs index 31e24b11..8b1b761b 100644 --- a/control-plane/shared/entity/src/entities/mod.rs +++ b/control-plane/shared/entity/src/entities/mod.rs @@ -23,6 +23,7 @@ pub mod user_organization; pub mod user_ssh_keys; pub mod volume_snapshots; pub mod volumes; +pub mod workload_stacks; pub mod workloads; pub use agent_api_keys::Entity as AgentApiKeys; @@ -50,4 +51,5 @@ pub use user_organization::Entity as UserOrganization; pub use user_ssh_keys::Entity as UserSshKeys; pub use volume_snapshots::Entity as VolumeSnapshots; pub use volumes::Entity as Volumes; +pub use workload_stacks::Entity as WorkloadStacks; pub use workloads::Entity as Workloads; diff --git a/control-plane/shared/entity/src/entities/resource_groups.rs b/control-plane/shared/entity/src/entities/resource_groups.rs index cc63a440..1b8febac 100644 --- a/control-plane/shared/entity/src/entities/resource_groups.rs +++ b/control-plane/shared/entity/src/entities/resource_groups.rs @@ -30,6 +30,8 @@ pub enum Relation { Volumes, #[sea_orm(has_many = "super::networks::Entity")] Networks, + #[sea_orm(has_many = "super::workload_stacks::Entity")] + WorkloadStacks, } impl Related for Entity { @@ -56,4 +58,10 @@ impl Related for Entity { } } +impl Related for Entity { + fn to() -> RelationDef { + Relation::WorkloadStacks.def() + } +} + impl ActiveModelBehavior for ActiveModel {} diff --git a/control-plane/shared/entity/src/entities/workload_stacks.rs b/control-plane/shared/entity/src/entities/workload_stacks.rs new file mode 100644 index 00000000..74b87305 --- /dev/null +++ b/control-plane/shared/entity/src/entities/workload_stacks.rs @@ -0,0 +1,42 @@ +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize, Deserialize)] +#[sea_orm(table_name = "workload_stacks")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: Uuid, + pub resource_group_id: Uuid, + pub name: String, + pub compose_source: Option, + pub status: String, + pub created_at: chrono::NaiveDateTime, + pub updated_at: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation { + #[sea_orm( + belongs_to = "super::resource_groups::Entity", + from = "Column::ResourceGroupId", + to = "super::resource_groups::Column::Id", + on_delete = "Cascade" + )] + ResourceGroup, + #[sea_orm(has_many = "super::workloads::Entity")] + Workloads, +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::ResourceGroup.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Workloads.def() + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/control-plane/shared/entity/src/entities/workloads.rs b/control-plane/shared/entity/src/entities/workloads.rs index b4c662d9..ee82536f 100644 --- a/control-plane/shared/entity/src/entities/workloads.rs +++ b/control-plane/shared/entity/src/entities/workloads.rs @@ -20,6 +20,8 @@ pub struct Model { pub created_by: Option, pub organization_id: Option, pub resource_group_id: Option, + pub stack_id: Option, + pub service_name: Option, pub created_at: DateTime, pub updated_at: Option, } @@ -42,6 +44,14 @@ pub enum Relation { on_delete = "SetNull" )] ResourceGroup, + #[sea_orm( + belongs_to = "super::workload_stacks::Entity", + from = "Column::StackId", + to = "super::workload_stacks::Column::Id", + on_update = "NoAction", + on_delete = "Cascade" + )] + Stack, } impl Related for Entity { @@ -56,4 +66,10 @@ impl Related for Entity { } } +impl Related for Entity { + fn to() -> RelationDef { + Relation::Stack.def() + } +} + impl ActiveModelBehavior for ActiveModel {} diff --git a/control-plane/shared/migration/src/lib.rs b/control-plane/shared/migration/src/lib.rs index 98df39ee..111dbc3a 100644 --- a/control-plane/shared/migration/src/lib.rs +++ b/control-plane/shared/migration/src/lib.rs @@ -23,6 +23,7 @@ mod m20260628_000000_add_volume_mounts; mod m20260628_100000_rg_cidr_unique_agent_wg; mod m20260701_000000_add_logs_and_settings; mod m20260702_000000_add_agent_wg_tunnel_ip; +mod m20260704_000000_add_workload_stacks; pub struct Migrator; @@ -53,6 +54,7 @@ impl MigratorTrait for Migrator { Box::new(m20260628_100000_rg_cidr_unique_agent_wg::Migration), Box::new(m20260701_000000_add_logs_and_settings::Migration), Box::new(m20260702_000000_add_agent_wg_tunnel_ip::Migration), + Box::new(m20260704_000000_add_workload_stacks::Migration), ] } } diff --git a/control-plane/shared/migration/src/m20260704_000000_add_workload_stacks.rs b/control-plane/shared/migration/src/m20260704_000000_add_workload_stacks.rs new file mode 100644 index 00000000..1d28afe4 --- /dev/null +++ b/control-plane/shared/migration/src/m20260704_000000_add_workload_stacks.rs @@ -0,0 +1,137 @@ +use sea_orm_migration::prelude::*; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .table(WorkloadStacks::Table) + .if_not_exists() + .col(ColumnDef::new(WorkloadStacks::Id).uuid().not_null().primary_key()) + .col(ColumnDef::new(WorkloadStacks::ResourceGroupId).uuid().not_null()) + .col(ColumnDef::new(WorkloadStacks::Name).string().not_null()) + .col(ColumnDef::new(WorkloadStacks::ComposeSource).text().null()) + .col(ColumnDef::new(WorkloadStacks::Status).string().not_null().default("pending")) + .col(ColumnDef::new(WorkloadStacks::CreatedAt).date_time().not_null()) + .col(ColumnDef::new(WorkloadStacks::UpdatedAt).date_time().null()) + .foreign_key( + ForeignKey::create() + .from(WorkloadStacks::Table, WorkloadStacks::ResourceGroupId) + .to(ResourceGroups::Table, ResourceGroups::Id) + .on_delete(ForeignKeyAction::Cascade), + ) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Workloads::Table) + .add_column(ColumnDef::new(Workloads::StackId).uuid().null()) + .add_column(ColumnDef::new(Workloads::ServiceName).string().null()) + .to_owned(), + ) + .await?; + + manager + .create_foreign_key( + ForeignKey::create() + .name("fk_workloads_stack_id") + .from(Workloads::Table, Workloads::StackId) + .to(WorkloadStacks::Table, WorkloadStacks::Id) + .on_delete(ForeignKeyAction::Cascade) + .to_owned(), + ) + .await?; + + manager + .create_index( + Index::create() + .table(WorkloadStacks::Table) + .col(WorkloadStacks::ResourceGroupId) + .name("idx_workload_stacks_resource_group_id") + .to_owned(), + ) + .await?; + + manager + .create_index( + Index::create() + .table(Workloads::Table) + .col(Workloads::StackId) + .name("idx_workloads_stack_id") + .to_owned(), + ) + .await?; + + Ok(()) + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_index(Index::drop().name("idx_workloads_stack_id").to_owned()) + .await?; + manager + .drop_index( + Index::drop() + .name("idx_workload_stacks_resource_group_id") + .to_owned(), + ) + .await?; + + manager + .drop_foreign_key( + ForeignKey::drop() + .name("fk_workloads_stack_id") + .table(Workloads::Table) + .to_owned(), + ) + .await?; + + manager + .alter_table( + Table::alter() + .table(Workloads::Table) + .drop_column(Workloads::ServiceName) + .drop_column(Workloads::StackId) + .to_owned(), + ) + .await?; + + manager + .drop_table(Table::drop().table(WorkloadStacks::Table).to_owned()) + .await?; + + Ok(()) + } +} + +#[derive(DeriveIden)] +enum WorkloadStacks { + Table, + Id, + ResourceGroupId, + Name, + ComposeSource, + Status, + CreatedAt, + UpdatedAt, +} + +#[derive(DeriveIden)] +enum ResourceGroups { + Table, + Id, +} + +#[derive(DeriveIden)] +enum Workloads { + Table, + StackId, + ServiceName, +} From caf3acb92b7f6e48fe6fa6f0498db6f6f0dfd39b Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Sat, 4 Jul 2026 14:34:40 +0200 Subject: [PATCH 21/30] feat: add resource picker with docker compose stacks and dynamic service icons --- .../routes/(app)/resource-groups/[id]/+page.svelte | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/routes/(app)/resource-groups/[id]/+page.svelte b/app/src/routes/(app)/resource-groups/[id]/+page.svelte index 501bedfe..3985de64 100644 --- a/app/src/routes/(app)/resource-groups/[id]/+page.svelte +++ b/app/src/routes/(app)/resource-groups/[id]/+page.svelte @@ -620,8 +620,8 @@ class="flex items-center gap-3 rounded-lg border p-3 text-left hover:bg-muted/40 transition-colors" onclick={() => openResourceType(type.key)} > -
- +
+

{type.label}

@@ -912,8 +912,8 @@
-
- +
+

{w.service_name ?? w.name}

@@ -957,8 +957,8 @@ class="flex items-center gap-2.5 text-left" onclick={() => toggleStack(stack.stack_id)} > -
- +
+

{stack.stack_name}

From 46266c7801cebac8a26931f3834276c3be402049 Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Sat, 4 Jul 2026 14:59:34 +0200 Subject: [PATCH 22/30] fix: correct pre-release version comparison and let forced updates bypass pause --- app/src/lib/utils/compose-preview.ts | 80 ++++++++++++++ app/src/lib/utils/yaml-highlight.ts | 55 ++++++++++ .../(app)/resource-groups/[id]/+page.svelte | 101 ++++++++++++++---- .../api-gateway/src/routes/releases.rs | 14 ++- .../api-gateway/src/routes/update.rs | 9 ++ control-plane/csfx-updater/src/etcd.rs | 6 ++ control-plane/csfx-updater/src/main.rs | 11 +- 7 files changed, 254 insertions(+), 22 deletions(-) create mode 100644 app/src/lib/utils/compose-preview.ts create mode 100644 app/src/lib/utils/yaml-highlight.ts diff --git a/app/src/lib/utils/compose-preview.ts b/app/src/lib/utils/compose-preview.ts new file mode 100644 index 00000000..a44328d1 --- /dev/null +++ b/app/src/lib/utils/compose-preview.ts @@ -0,0 +1,80 @@ +export interface ComposePreviewService { + serviceName: string; + image: string | null; + ports: string[]; +} + +export interface ComposePreviewResult { + services: ComposePreviewService[]; + volumes: string[]; + error: string | null; +} + +function stripInlineComment(line: string): string { + const hashIndex = line.indexOf('#'); + return hashIndex === -1 ? line : line.slice(0, hashIndex); +} + +function indentOf(line: string): number { + return line.length - line.trimStart().length; +} + +function parseTopLevelBlockKeys(lines: string[], blockName: string): string[] { + const blockLineIndex = lines.findIndex((line) => line.trim() === `${blockName}:`); + if (blockLineIndex === -1) return []; + + const keys: string[] = []; + for (let i = blockLineIndex + 1; i < lines.length; i++) { + const line = lines[i]; + if (!line.trim()) continue; + const indent = indentOf(line); + if (indent === 0) break; + if (indent === 2 && line.trim().endsWith(':')) { + keys.push(line.trim().slice(0, -1)); + } + } + return keys; +} + +export function parseComposePreview(yaml: string): ComposePreviewResult { + const lines = yaml.split('\n').map(stripInlineComment); + const volumes = parseTopLevelBlockKeys(lines, 'volumes'); + const servicesLineIndex = lines.findIndex((line) => line.trim() === 'services:'); + if (servicesLineIndex === -1) { + return { services: [], volumes, error: null }; + } + + const services: ComposePreviewService[] = []; + let current: ComposePreviewService | null = null; + let inPorts = false; + + for (let i = servicesLineIndex + 1; i < lines.length; i++) { + const line = lines[i]; + if (!line.trim()) continue; + const indent = indentOf(line); + const trimmed = line.trim(); + + if (indent === 0) break; + + if (indent === 2 && trimmed.endsWith(':')) { + current = { serviceName: trimmed.slice(0, -1), image: null, ports: [] }; + services.push(current); + inPorts = false; + continue; + } + if (indent <= 0 || !current) continue; + + if (trimmed.startsWith('image:')) { + current.image = trimmed.slice('image:'.length).trim().replace(/^["']|["']$/g, ''); + inPorts = false; + } else if (trimmed === 'ports:') { + inPorts = true; + } else if (inPorts && trimmed.startsWith('-')) { + current.ports.push(trimmed.slice(1).trim().replace(/^["']|["']$/g, '')); + } else if (trimmed.endsWith(':')) { + inPorts = false; + } + } + + return { services, volumes, error: null }; +} diff --git a/app/src/lib/utils/yaml-highlight.ts b/app/src/lib/utils/yaml-highlight.ts new file mode 100644 index 00000000..62a315e6 --- /dev/null +++ b/app/src/lib/utils/yaml-highlight.ts @@ -0,0 +1,55 @@ +function escapeHtml(text: string): string { + return text + .replace(/&/g, '&') + .replace(//g, '>'); +} + +function highlightLine(line: string): string { + const commentIndex = line.indexOf('#'); + const code = commentIndex === -1 ? line : line.slice(0, commentIndex); + const comment = commentIndex === -1 ? '' : line.slice(commentIndex); + + const leadingSpaces = code.match(/^\s*/)?.[0] ?? ''; + const rest = code.slice(leadingSpaces.length); + + const dashMatch = rest.match(/^-\s*/); + const dashPrefix = dashMatch ? dashMatch[0] : ''; + const afterDash = rest.slice(dashPrefix.length); + + const keyMatch = afterDash.match(/^([A-Za-z0-9_.-]+)(:)(\s|$)/); + let highlighted: string; + + if (keyMatch) { + const key = keyMatch[1]; + const colon = keyMatch[2]; + const separator = keyMatch[3]; + const value = afterDash.slice(keyMatch[0].length); + highlighted = `${escapeHtml(key)}${colon}${separator}${highlightValue(value)}`; + } else { + highlighted = highlightValue(afterDash); + } + + const dashHtml = dashPrefix ? `${escapeHtml(dashPrefix)}` : ''; + const commentHtml = comment ? `${escapeHtml(comment)}` : ''; + + return `${escapeHtml(leadingSpaces)}${dashHtml}${highlighted}${commentHtml}`; +} + +function highlightValue(value: string): string { + if (!value) return ''; + if (/^["'].*["']$/.test(value)) { + return `${escapeHtml(value)}`; + } + if (/^-?\d+(\.\d+)?$/.test(value)) { + return `${escapeHtml(value)}`; + } + if (value === 'true' || value === 'false' || value === 'null') { + return `${escapeHtml(value)}`; + } + return `${escapeHtml(value)}`; +} + +export function highlightYaml(yaml: string): string { + return yaml.split('\n').map(highlightLine).join('\n'); +} diff --git a/app/src/routes/(app)/resource-groups/[id]/+page.svelte b/app/src/routes/(app)/resource-groups/[id]/+page.svelte index 3985de64..708e5c3b 100644 --- a/app/src/routes/(app)/resource-groups/[id]/+page.svelte +++ b/app/src/routes/(app)/resource-groups/[id]/+page.svelte @@ -21,6 +21,8 @@ type VolumeMount, } from "$lib/api/resource-groups"; import { resolveImageIcon } from "$lib/utils/image-icon"; + import { parseComposePreview } from "$lib/utils/compose-preview"; + import { highlightYaml } from "$lib/utils/yaml-highlight"; import type { Terminal } from "@xterm/xterm"; import type { FitAddon } from "@xterm/addon-fit"; import "@xterm/xterm/css/xterm.css"; @@ -53,8 +55,8 @@ let expandedStacks = $state>(new Set()); const RESOURCE_TYPES = [ - { key: "docker-container", label: "Docker Container", description: "Deploy a single container", icon: "mdi:docker" }, - { key: "docker-compose", label: "Docker Compose", description: "Deploy multiple related containers as one stack", icon: "mdi:file-code-outline" }, + { key: "docker-container", label: "Docker Container", description: "Deploy a single container", icon: "logos:docker-icon" }, + { key: "docker-compose", label: "Docker Compose", description: "Deploy multiple related containers as one stack", icon: "logos:docker-icon" }, ] as const; let formImage = $state(""); @@ -68,6 +70,21 @@ let composeStackName = $state(""); let composeYaml = $state(""); + let composePreview = $derived(parseComposePreview(composeYaml)); + let composeLineCount = $derived(Math.max(composeYaml.split("\n").length, 1)); + let composeGutter = $state(null); + let composeTextarea = $state(null); + let composeHighlightLayer = $state(null); + let composeHighlighted = $derived(highlightYaml(composeYaml)); + function syncComposeScroll() { + if (composeGutter && composeTextarea) { + composeGutter.scrollTop = composeTextarea.scrollTop; + } + if (composeHighlightLayer && composeTextarea) { + composeHighlightLayer.scrollTop = composeTextarea.scrollTop; + composeHighlightLayer.scrollLeft = composeTextarea.scrollLeft; + } + } let volFormName = $state(""); let volFormSize = $state("10"); @@ -635,10 +652,10 @@ resetComposeForm()} > -
+

Deploy Docker Compose Stack

-
-
- - +
+
+ +
+ {#if composePreview.services.length === 0 && composePreview.volumes.length === 0} +

No services detected yet.

+ {:else} + {#each composePreview.services as service (service.serviceName)} +
+ +
+

{service.serviceName}

+

{service.image ?? "no image"}

+ {#if service.ports.length > 0} +

{service.ports.join(", ")}

+ {/if} +
+
+ {/each} + {#if composePreview.volumes.length > 0} +

Volumes

+ {#each composePreview.volumes as volumeName (volumeName)} +
+ +

{volumeName}

+
+ {/each} + {/if} + {/if} +
+
+
+
+ + +
+
+
+ {#each Array(composeLineCount) as _, i} +
{i + 1}
+ {/each} +
+
{@html composeHighlighted}
+ +
-
{#if composeError}

{composeError}

diff --git a/control-plane/api-gateway/src/routes/releases.rs b/control-plane/api-gateway/src/routes/releases.rs index 1f6e2dc1..c0453ae6 100644 --- a/control-plane/api-gateway/src/routes/releases.rs +++ b/control-plane/api-gateway/src/routes/releases.rs @@ -116,16 +116,26 @@ fn semver_is_newer(candidate: &str, current: &str) -> bool { .unwrap_or(false) } -fn parse_semver(v: &str) -> Option<(u32, u32, u32)> { +fn parse_semver(v: &str) -> Option<(u32, u32, u32, u32)> { let v = v.trim_start_matches('v'); - let base = v.split('-').next().unwrap_or(v); + let mut segments = v.splitn(2, '-'); + let base = segments.next().unwrap_or(v); + let pre_release = segments.next(); + let parts: Vec<&str> = base.split('.').collect(); if parts.len() != 3 { return None; } + + let pre_release_number = pre_release + .and_then(|p| p.rsplit('.').next()) + .and_then(|n| n.parse().ok()) + .unwrap_or(u32::MAX); + Some(( parts[0].parse().ok()?, parts[1].parse().ok()?, parts[2].parse().ok()?, + pre_release_number, )) } diff --git a/control-plane/api-gateway/src/routes/update.rs b/control-plane/api-gateway/src/routes/update.rs index 124928b1..9cf6a899 100644 --- a/control-plane/api-gateway/src/routes/update.rs +++ b/control-plane/api-gateway/src/routes/update.rs @@ -18,6 +18,7 @@ const ETCD_DESIRED_FLAKE_REV_KEY: &str = "/csfx/config/desired_flake_rev"; const ETCD_BUILD_STATUS_KEY: &str = "/csfx/config/cp_build_status"; const ETCD_RESULT_KEY: &str = "/csfx/config/last_build_result"; const ETCD_PAUSED_KEY: &str = "/csfx/config/update_paused"; +const ETCD_FORCE_UPDATE_KEY: &str = "/csfx/config/update_force"; #[derive(Debug, Deserialize)] pub struct UpdateRequest { @@ -79,6 +80,14 @@ async fn trigger_update( StatusCode::INTERNAL_SERVER_ERROR })?; + client + .put(ETCD_FORCE_UPDATE_KEY, b"true", None) + .await + .map_err(|e| { + tracing::error!(error = %e, "failed to write force update flag to etcd"); + StatusCode::INTERNAL_SERVER_ERROR + })?; + tracing::info!(version = %req.version, "update requested"); Ok(Json(UpdateResponse { diff --git a/control-plane/csfx-updater/src/etcd.rs b/control-plane/csfx-updater/src/etcd.rs index 7052752e..0cf40f64 100644 --- a/control-plane/csfx-updater/src/etcd.rs +++ b/control-plane/csfx-updater/src/etcd.rs @@ -8,6 +8,7 @@ pub const DESIRED_FLAKE_REV_KEY: &str = "/csfx/config/desired_flake_rev"; pub const BUILD_STATUS_KEY: &str = "/csfx/config/cp_build_status"; pub const RESULT_KEY: &str = "/csfx/config/last_build_result"; pub const PAUSED_KEY: &str = "/csfx/config/update_paused"; +pub const FORCE_UPDATE_KEY: &str = "/csfx/config/update_force"; pub const NODE_HEARTBEAT_PREFIX: &str = "/csfx/nodes/"; pub struct Client { @@ -35,6 +36,11 @@ impl Client { Ok(()) } + pub async fn delete(&mut self, key: &str) -> Result<()> { + self.inner.delete(key, None).await?; + Ok(()) + } + pub async fn delete_prefix(&mut self, prefix: &str) -> Result<()> { use etcd_client::DeleteOptions; self.inner diff --git a/control-plane/csfx-updater/src/main.rs b/control-plane/csfx-updater/src/main.rs index 8f57875d..224cc40d 100644 --- a/control-plane/csfx-updater/src/main.rs +++ b/control-plane/csfx-updater/src/main.rs @@ -102,8 +102,10 @@ async fn run_executor_loop(cfg: &config::Config) { async fn execute_once(cfg: &config::Config, last_applied: &str) -> anyhow::Result> { let mut etcd = etcd::Client::connect(cfg).await?; - if etcd.get(etcd::PAUSED_KEY).await?.as_deref() == Some("true") { - tracing::debug!("updater paused, skipping cycle"); + let forced = etcd.get(etcd::FORCE_UPDATE_KEY).await?.as_deref() == Some("true"); + + if !forced && etcd.get(etcd::PAUSED_KEY).await?.as_deref() == Some("true") { + tracing::warn!("updater paused, skipping cycle"); return Ok(None); } @@ -125,6 +127,11 @@ async fn execute_once(cfg: &config::Config, last_applied: &str) -> anyhow::Resul return Ok(None); } + if forced { + etcd.delete(etcd::FORCE_UPDATE_KEY).await?; + info!(flake_rev = %desired, "forced update requested, bypassing pause"); + } + if !is_valid_sha(&desired) { tracing::warn!(flake_rev = %desired, "rejected invalid flake rev"); etcd.put(etcd::RESULT_KEY, "failed").await?; From 72c46e3ad47056116611a9c7140442e17223f86b Mon Sep 17 00:00:00 2001 From: CodeMaster4711 Date: Sat, 4 Jul 2026 15:13:08 +0200 Subject: [PATCH 23/30] feat: propagate agent version on every heartbeat and add live node metrics tunnel --- agent/src/client.rs | 2 + agent/src/server.rs | 51 +++++++ agent/src/system.rs | 51 +++++++ app/src/lib/api/nodes.ts | 28 ++++ .../components/nodes/NodeDetailSheet.svelte | 71 +++++++++- control-plane/api-gateway/src/auth/jwt.rs | 53 +++++++ .../api-gateway/src/routes/agent_proxy.rs | 133 +++++++++++++++++- control-plane/registry/src/db/agents.rs | 4 + control-plane/registry/src/handlers/agent.rs | 1 + control-plane/registry/src/handlers/pki.rs | 4 +- control-plane/registry/src/models/agent.rs | 1 + control-plane/registry/src/services/pki.rs | 2 +- .../registry/src/services/registry.rs | 2 + 13 files changed, 393 insertions(+), 10 deletions(-) diff --git a/agent/src/client.rs b/agent/src/client.rs index ab0f1897..6a26473c 100644 --- a/agent/src/client.rs +++ b/agent/src/client.rs @@ -53,6 +53,7 @@ struct HeartbeatRequest { wg_public_key: Option, wg_endpoint: Option, wg_tunnel_ip: Option, + agent_version: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] @@ -254,6 +255,7 @@ impl ApiClient { wg_public_key: Some(self.wg_public_key.clone()), wg_endpoint: self.wg_endpoint.clone(), wg_tunnel_ip: self.wg_tunnel_ip.clone(), + agent_version: Some(env!("CARGO_PKG_VERSION").to_string()), }); if let Some(ref cert_pem) = self.cert_pem { diff --git a/agent/src/server.rs b/agent/src/server.rs index ad5e55d4..02d7dc83 100644 --- a/agent/src/server.rs +++ b/agent/src/server.rs @@ -19,8 +19,10 @@ use tracing::{info, warn}; use crate::docker::DockerManager; use crate::pki::AgentPki; +use crate::system::LiveMetricsCollector; const TICKET_HEADER: &str = "X-Csfx-Proxy-Ticket"; +pub const METRICS_TICKET_SCOPE: &str = "__node_metrics__"; #[derive(Clone)] pub struct ServerState { @@ -33,6 +35,7 @@ pub async fn run(state: ServerState, port: u16) -> Result<()> { let app = Router::new() .route("/logs/{workload_id}", get(logs_handler)) .route("/exec/{workload_id}", get(exec_handler)) + .route("/metrics/stream", get(metrics_stream_handler)) .with_state(state); let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), port); @@ -274,3 +277,51 @@ async fn handle_exec_socket(socket: WebSocket, state: ServerState, container_id: info!(container_id = %container_id, "exec session closed"); } + +async fn metrics_stream_handler( + State(state): State, + ConnectInfo(addr): ConnectInfo, + headers: HeaderMap, + ws: WebSocketUpgrade, +) -> Result { + if !is_internal_source(&addr) { + warn!(source = %addr, "rejected agent inbound request from non-internal source"); + return Err((StatusCode::FORBIDDEN, "source not allowed".to_string())); + } + + verify_ticket(&headers, METRICS_TICKET_SCOPE, &state.agent_id.to_string()) + .map_err(|e| (StatusCode::UNAUTHORIZED, e.to_string()))?; + + Ok(ws.on_upgrade(handle_metrics_socket)) +} + +async fn handle_metrics_socket(socket: WebSocket) { + let (mut sink, mut stream) = socket.split(); + let mut collector = LiveMetricsCollector::new(); + let mut interval = tokio::time::interval(std::time::Duration::from_secs(1)); + + loop { + tokio::select! { + _ = interval.tick() => { + let metrics = collector.sample(); + let payload = match serde_json::to_string(&metrics) { + Ok(p) => p, + Err(e) => { + warn!(error = %e, "failed to serialize live metrics"); + continue; + } + }; + if sink.send(Message::Text(payload.into())).await.is_err() { + break; + } + } + msg = stream.next() => match msg { + Some(Ok(Message::Close(_))) | None => break, + Some(Err(_)) => break, + _ => {} + } + } + } + + info!("live metrics session closed"); +} diff --git a/agent/src/system.rs b/agent/src/system.rs index 2ae27cae..b3d188ef 100644 --- a/agent/src/system.rs +++ b/agent/src/system.rs @@ -1,3 +1,4 @@ +use serde::Serialize; use sysinfo::{Disks, Networks, System}; pub struct SystemInfo { @@ -7,6 +8,7 @@ pub struct SystemInfo { pub architecture: String, } +#[derive(Serialize)] pub struct SystemMetrics { pub cpu_usage_percent: f32, pub cpu_cores: u32, @@ -19,6 +21,55 @@ pub struct SystemMetrics { pub uptime_seconds: u64, } +pub struct LiveMetricsCollector { + sys: System, +} + +impl LiveMetricsCollector { + pub fn new() -> Self { + let mut sys = System::new_all(); + sys.refresh_cpu_usage(); + Self { sys } + } + + pub fn sample(&mut self) -> SystemMetrics { + self.sys.refresh_cpu_usage(); + self.sys.refresh_memory(); + + let cpu_usage_percent = self.sys.global_cpu_usage(); + let cpu_cores = self.sys.cpus().len() as u32; + let memory_total_bytes = self.sys.total_memory(); + let memory_used_bytes = self.sys.used_memory(); + + let disks = Disks::new_with_refreshed_list(); + let (disk_total_bytes, disk_used_bytes) = + disks.iter().fold((0u64, 0u64), |(total, used), d| { + ( + total + d.total_space(), + used + (d.total_space() - d.available_space()), + ) + }); + + let networks = Networks::new_with_refreshed_list(); + let (network_rx_bytes, network_tx_bytes) = + networks.iter().fold((0u64, 0u64), |(rx, tx), (_, data)| { + (rx + data.total_received(), tx + data.total_transmitted()) + }); + + SystemMetrics { + cpu_usage_percent, + cpu_cores, + memory_total_bytes, + memory_used_bytes, + disk_total_bytes, + disk_used_bytes, + network_rx_bytes, + network_tx_bytes, + uptime_seconds: System::uptime(), + } + } +} + fn parse_os_release_field(content: &str, field: &str) -> Option { content .lines() diff --git a/app/src/lib/api/nodes.ts b/app/src/lib/api/nodes.ts index d8073408..131174ef 100644 --- a/app/src/lib/api/nodes.ts +++ b/app/src/lib/api/nodes.ts @@ -92,6 +92,34 @@ export async function getNodeMetricsLatest(token: string, id: string): Promise { + const res = await fetch(`${API_BASE}/agents/${agentId}/metrics/ticket`, { + method: 'POST', + headers: { Authorization: `Bearer ${token}` }, + }); + if (!res.ok) { + const err = await res.json().catch(() => ({ error: res.status })); + throw new Error(err.error ?? `Failed to issue metrics ticket: ${res.status}`); + } + const { ticket } = await res.json(); + + const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; + const url = `${wsProtocol}//${window.location.host}${API_BASE}/agents/${agentId}/metrics/stream?ticket=${encodeURIComponent(ticket)}`; + return new WebSocket(url); +} + export interface HealthHistoryPoint { bucket: string; online_count: number; diff --git a/app/src/lib/components/nodes/NodeDetailSheet.svelte b/app/src/lib/components/nodes/NodeDetailSheet.svelte index 85f6d9ee..9d72aed9 100644 --- a/app/src/lib/components/nodes/NodeDetailSheet.svelte +++ b/app/src/lib/components/nodes/NodeDetailSheet.svelte @@ -1,6 +1,6 @@