From fcbec8474d74b8741417a35de48b0428eca05a52 Mon Sep 17 00:00:00 2001 From: Niko Date: Thu, 8 Jun 2023 23:32:27 +0300 Subject: [PATCH] working demo of blocks pushed from broker to app --- .gitignore | 2 + Cargo.lock | 20 + ng-app/package.json | 2 + ng-app/src-tauri/Cargo.toml | 4 + ng-app/src-tauri/src/lib.rs | 100 ++- ng-app/src/App.svelte | 26 +- ng-app/src/api.ts | 64 ++ ng-app/src/lib/Greet.svelte | 76 +- ng-app/src/routes/Test.svelte | 2 +- ng-app/src/routes/URI.svelte | 8 + ng-app/src/store.ts | 33 + ng-sdk-js/Cargo.toml | 5 +- ng-sdk-js/src/lib.rs | 98 ++- p2p-net/src/broker.rs | 117 ++- p2p-net/src/lib.rs | 2 + p2p-net/src/tests/file.rs | 1435 +++++++++++++++++++++++++++++++++ p2p-net/src/tests/mod.rs | 1 + p2p-repo/Cargo.toml | 4 +- p2p-repo/src/block.rs | 9 +- p2p-repo/src/object.rs | 63 +- p2p-repo/src/store.rs | 11 + p2p-repo/src/types.rs | 13 +- p2p-repo/src/utils.rs | 3 + p2p-repo/tests/test.jpg | Bin 0 -> 29454 bytes pnpm-lock.yaml | 12 + 25 files changed, 2056 insertions(+), 54 deletions(-) create mode 100644 ng-app/src/api.ts create mode 100644 ng-app/src/routes/URI.svelte create mode 100644 ng-app/src/store.ts create mode 100644 p2p-net/src/tests/file.rs create mode 100644 p2p-net/src/tests/mod.rs create mode 100644 p2p-repo/tests/test.jpg diff --git a/.gitignore b/.gitignore index 7761dde..7184441 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ /result* .DS_Store node_modules +/p2p-repo/tests/*.ng +.vscode/settings.json diff --git a/Cargo.lock b/Cargo.lock index 245a613..0d4a317 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2480,6 +2480,10 @@ checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" name = "ng-app" version = "0.1.0" dependencies = [ + "async-std", + "debug_print", + "p2p-net", + "p2p-repo", "serde", "serde_json", "tauri", @@ -2495,13 +2499,16 @@ dependencies = [ "futures", "getrandom 0.1.16", "gloo-timers", + "js-sys", "p2p-client-ws", "p2p-net", "p2p-repo", "pharos", "serde", + "serde-wasm-bindgen", "serde_bare", "serde_bytes", + "serde_json", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test", @@ -2817,11 +2824,13 @@ dependencies = [ name = "p2p-repo" version = "0.1.0" dependencies = [ + "base64-url", "blake3", "chacha20", "debug_print", "ed25519-dalek", "fastbloom-rs", + "futures", "hex", "rand 0.7.3", "serde", @@ -3675,6 +3684,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_bare" version = "0.5.0" diff --git a/ng-app/package.json b/ng-app/package.json index a1a25b5..01ed8f7 100644 --- a/ng-app/package.json +++ b/ng-app/package.json @@ -8,6 +8,7 @@ "webdev": "cross-env NG_APP_WEB=1 TAURI_DEBUG=1 vite", "webbuild": "cross-env NG_APP_WEB=1 vite build", "filebuild": "cross-env NG_APP_WEB=1 NG_APP_FILE=1 vite build", + "filebuilddebug": "cross-env NG_APP_WEB=1 NG_APP_FILE=1 TAURI_DEBUG=1 vite build -m debug", "build": "vite build", "preview": "vite preview", "check": "svelte-check --tsconfig ./tsconfig.json", @@ -16,6 +17,7 @@ "dependencies": { "@popperjs/core": "^2.11.8", "@tauri-apps/api": "2.0.0-alpha.4", + "async-proxy": "^0.4.1", "classnames": "^2.3.2", "flowbite": "^1.6.5", "flowbite-svelte": "^0.37.1", diff --git a/ng-app/src-tauri/Cargo.toml b/ng-app/src-tauri/Cargo.toml index c4b38be..b3b03b6 100644 --- a/ng-app/src-tauri/Cargo.toml +++ b/ng-app/src-tauri/Cargo.toml @@ -17,9 +17,13 @@ crate-type = ["staticlib", "cdylib", "rlib"] tauri-build = { version = "2.0.0-alpha.5", features = [] } [dependencies] +debug_print = "1.0.0" tauri = { version = "2.0.0-alpha.9", features = [] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +p2p-repo = { path = "../../p2p-repo" } +p2p-net = { path = "../../p2p-net" } +async-std = { version = "1.12.0", features = ["attributes","unstable"] } [features] # this feature is used for production builds or when `devPath` points to the filesystem diff --git a/ng-app/src-tauri/src/lib.rs b/ng-app/src-tauri/src/lib.rs index 9615273..8ffb39a 100644 --- a/ng-app/src-tauri/src/lib.rs +++ b/ng-app/src-tauri/src/lib.rs @@ -6,8 +6,12 @@ // at your option. All files in the project carrying such // notice may not be copied, modified, or distributed except // according to those terms. - -use tauri::App; +use async_std::stream::StreamExt; +use p2p_net::broker::*; +use p2p_net::log; +use p2p_net::utils::{spawn_and_log_error, Receiver, ResultSend}; +use p2p_repo::types::*; +use tauri::{App, Manager}; #[cfg(mobile)] mod mobile; @@ -17,11 +21,92 @@ pub use mobile::*; pub type SetupHook = Box Result<(), Box> + Send>; // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command -#[tauri::command] +#[tauri::command(rename_all = "snake_case")] fn greet(name: &str) -> String { format!("Hello, {}! You've been greeted from Rust!", name) } +#[tauri::command(rename_all = "snake_case")] +async fn test() -> Result<(), ()> { + log!("test is {}", BROKER.read().await.test()); + Ok(()) +} + +#[tauri::command(rename_all = "snake_case")] +async fn create_wallet(name: &str) -> Result { + log!("create wallet from rust {}", name); + Ok(format!("create wallet from rust {}", name)) +} + +#[tauri::command(rename_all = "snake_case")] +async fn doc_sync_branch(nuri: &str, stream_id: &str, app: tauri::AppHandle) -> Result<(), ()> { + log!("doc_sync_branch {} {}", nuri, stream_id); + + let mut reader; + { + let mut sender; + let mut broker = BROKER.write().await; + (reader, sender) = broker.doc_sync_branch(nuri.to_string().clone()).await; + + broker.tauri_stream_add(stream_id.to_string(), sender); + } + + async fn inner_task( + mut reader: Receiver, + stream_id: String, + app: tauri::AppHandle, + ) -> ResultSend<()> { + while let Some(commit) = reader.next().await { + app.emit_all(&stream_id, commit).unwrap(); + } + + BROKER.write().await.tauri_stream_cancel(stream_id); + + log!("END OF LOOP"); + Ok(()) + } + + spawn_and_log_error(inner_task(reader, stream_id.to_string(), app)); + + Ok(()) +} + +#[tauri::command(rename_all = "snake_case")] +async fn cancel_doc_sync_branch(stream_id: &str) -> Result<(), ()> { + log!("cancel stream {}", stream_id); + BROKER + .write() + .await + .tauri_stream_cancel(stream_id.to_string()); + Ok(()) +} + +#[tauri::command(rename_all = "snake_case")] +async fn doc_get_file_from_store_with_object_ref( + nuri: &str, + obj_ref: ObjectRef, +) -> Result { + log!( + "doc_get_file_from_store_with_object_ref {} {:?}", + nuri, + obj_ref + ); + // let ret = ObjectContent::File(File::V0(FileV0 { + // content_type: "text/plain".to_string(), + // metadata: vec![], + // content: vec![45; 20], + // })); + // Ok(ret) + let obj_content = BROKER + .write() + .await + .get_object_from_store_with_object_ref(nuri.to_string(), obj_ref) + .await + .map_err(|e| e.to_string())?; + + Ok(obj_content) +} + #[derive(Default)] pub struct AppBuilder { setup: Option, @@ -50,7 +135,14 @@ impl AppBuilder { } Ok(()) }) - .invoke_handler(tauri::generate_handler![greet]) + .invoke_handler(tauri::generate_handler![ + test, + greet, + create_wallet, + doc_sync_branch, + cancel_doc_sync_branch, + doc_get_file_from_store_with_object_ref + ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/ng-app/src/App.svelte b/ng-app/src/App.svelte index 66c12d4..3b05775 100644 --- a/ng-app/src/App.svelte +++ b/ng-app/src/App.svelte @@ -10,28 +10,24 @@ -->
diff --git a/ng-app/src/api.ts b/ng-app/src/api.ts new file mode 100644 index 0000000..c427610 --- /dev/null +++ b/ng-app/src/api.ts @@ -0,0 +1,64 @@ +// Copyright (c) 2022-2023 Niko Bonnieure, Par le Peuple, NextGraph.org developers +// All rights reserved. +// Licensed under the Apache License, Version 2.0 +// +// or the MIT license , +// at your option. All files in the project carrying such +// notice may not be copied, modified, or distributed except +// according to those terms. +import {createAsyncProxy} from "async-proxy"; +import { writable } from "svelte/store"; + +const mapping = { + "create_wallet": [ "name" ], + "doc_get_file_from_store_with_object_ref": [ "nuri","obj_ref" ], + "test": [ ] +} + +let lastStreamId = 0; + +const handler = { + async apply(target, path, caller, args) { + + if (import.meta.env.NG_APP_WEB) { + let sdk = await import("ng-sdk-js") + return Reflect.apply(sdk[path], caller, args) + } else { + let tauri = await import("@tauri-apps/api/tauri"); + + if (path[0] === "doc_sync_branch") { + let stream_id = (lastStreamId += 1).toString(); + console.log("stream_id",stream_id); + let { listen } = await import("@tauri-apps/api/event"); + let nuri = args[0]; + let callback = args[1]; + + let unlisten = await listen(stream_id, (event) => { + callback(event.payload).then(()=> {}) + }) + await tauri.invoke("doc_sync_branch",{nuri, stream_id}); + + return () => { + unlisten(); + tauri.invoke("cancel_doc_sync_branch", {stream_id}); + } + } else if (path[0] === "doc_get_file_from_store_with_object_ref") { + let arg = {}; + args.map((el,ix) => arg[mapping[path[0]][ix]]=el) + let res = await tauri.invoke(path[0],arg); + res['File'].V0.content = Uint8Array.from(res['File'].V0.content); + res['File'].V0.metadata = Uint8Array.from(res['File'].V0.metadata); + return res + } + else { + let arg = {}; + args.map((el,ix) => arg[mapping[path[0]][ix]]=el) + return tauri.invoke(path[0],arg) + } + } + }, + }; + +const api = createAsyncProxy({}, handler); + +export default api; \ No newline at end of file diff --git a/ng-app/src/lib/Greet.svelte b/ng-app/src/lib/Greet.svelte index 4914d61..c2b1bf2 100644 --- a/ng-app/src/lib/Greet.svelte +++ b/ng-app/src/lib/Greet.svelte @@ -10,28 +10,58 @@ --> @@ -39,6 +69,20 @@
+

{greetMsg}

+ {#await commits.load()} +

Currently loading...

+ {:then} + {#each $commits as commit} +

+ {#await get_img(commit.V0.content.refs[0]) then url} + {#if url} + + {/if} + {/await} +

+ {/each} + {/await} diff --git a/ng-app/src/routes/Test.svelte b/ng-app/src/routes/Test.svelte index b307ed6..0923730 100644 --- a/ng-app/src/routes/Test.svelte +++ b/ng-app/src/routes/Test.svelte @@ -11,11 +11,11 @@

Welcome to test

-
diff --git a/ng-app/src/routes/URI.svelte b/ng-app/src/routes/URI.svelte new file mode 100644 index 0000000..a6ad998 --- /dev/null +++ b/ng-app/src/routes/URI.svelte @@ -0,0 +1,8 @@ + + +

nextgraph URI {params[1]}

diff --git a/ng-app/src/store.ts b/ng-app/src/store.ts new file mode 100644 index 0000000..75157fe --- /dev/null +++ b/ng-app/src/store.ts @@ -0,0 +1,33 @@ +import { writable } from "svelte/store"; +import ng from "./api"; + +const branch_commits = (nura, sub) => { + + const { subscribe, set, update } = writable([]); // create the underlying writable store + + let unsub = () => {}; + return { + load: async () => { + unsub = await ng.doc_sync_branch(nura, async (commit) => { + console.log(commit); + update( (old) => {old.unshift(commit); return old;} ) + }); + }, + subscribe: (run, invalid) => { + + let upper_unsub = subscribe(run, invalid); + + return () => { + upper_unsub(); + unsub(); + } + } + // set: (value) => { + // localStorage.setItem(key, toString(value)); // save also to local storage as a string + // return set(value); + // }, + // update, + }; +}; + +export default branch_commits; \ No newline at end of file diff --git a/ng-sdk-js/Cargo.toml b/ng-sdk-js/Cargo.toml index d4198ca..1db92b6 100644 --- a/ng-sdk-js/Cargo.toml +++ b/ng-sdk-js/Cargo.toml @@ -28,14 +28,15 @@ serde_bare = "0.5.0" serde_bytes = "0.11.7" # snow = "0.9.2" getrandom = { version = "0.1.1", features = ["wasm-bindgen"] } - +serde_json = "1.0" # [target.'cfg(target_arch = "wasm32")'.dependencies.getrandom] # version = "0.2.7" # features = ["js"] [target.'cfg(target_arch = "wasm32")'.dependencies] -# js-sys = "0.3.61" +js-sys = "0.3.61" +serde-wasm-bindgen = "0.5" wasm-bindgen-futures = "0.4.34" # web-sys = { version = "0.3.61", features = ["Window"] } gloo-timers = "0.2.6" diff --git a/ng-sdk-js/src/lib.rs b/ng-sdk-js/src/lib.rs index aa8b2ae..5dcf796 100644 --- a/ng-sdk-js/src/lib.rs +++ b/ng-sdk-js/src/lib.rs @@ -12,19 +12,24 @@ use async_std::task; // #[cfg(target_arch = "wasm32")] // use js_sys::Reflect; +use async_std::stream::StreamExt; +#[cfg(target_arch = "wasm32")] +use js_sys::Uint8Array; #[cfg(target_arch = "wasm32")] use p2p_client_ws::remote_ws_wasm::ConnectionWebSocket; use p2p_net::broker::*; use p2p_net::connection::{ClientConfig, StartConfig}; use p2p_net::types::{DirectPeerId, IP}; -use p2p_net::utils::{spawn_and_log_error, ResultSend}; +use p2p_net::utils::{spawn_and_log_error, Receiver, ResultSend, Sender}; use p2p_net::{log, sleep}; -use p2p_repo::types::PubKey; +use p2p_repo::types::*; use p2p_repo::utils::generate_keypair; +use serde_json::json; use std::net::IpAddr; use std::str::FromStr; use std::sync::Arc; use wasm_bindgen::prelude::*; +use wasm_bindgen_futures::{future_to_promise, JsFuture}; #[wasm_bindgen] extern "C" { @@ -43,12 +48,101 @@ extern "C" { fn random(max: usize) -> usize; } +#[cfg(target_arch = "wasm32")] +#[wasm_bindgen] +pub async fn create_wallet(s: String) -> String { + log!("create wallet {} {}", s, BROKER.read().await.test()); + format!("create wallet from js {}", s) +} + #[cfg(target_arch = "wasm32")] #[wasm_bindgen] pub async fn test() { log!("test is {}", BROKER.read().await.test()); } +#[cfg(target_arch = "wasm32")] +#[wasm_bindgen] +pub async fn doc_get_file_from_store_with_object_ref( + nuri: String, + obj_ref_js: JsValue, +) -> Result { + let obj_ref = serde_wasm_bindgen::from_value::(obj_ref_js).unwrap(); + + log!( + "doc_get_file {} {:?} {}", + nuri, + obj_ref.id, + BROKER.read().await.test() + ); + + // let vec: Vec = vec![2; 10]; + // let view = unsafe { Uint8Array::view(&vec) }; + // let x = JsValue::from(Uint8Array::new(view.as_ref())); + + // let ret = ObjectContent::File(File::V0(FileV0 { + // content_type: "text/plain".to_string(), + // metadata: vec![], + // content: vec![45; 20], + // })); + let obj_content = BROKER + .write() + .await + .get_object_from_store_with_object_ref(nuri, obj_ref) + .await + .map_err(|e| e.to_string())?; + + Ok(serde_wasm_bindgen::to_value(&obj_content).unwrap()) +} + +#[cfg(target_arch = "wasm32")] +#[wasm_bindgen] +pub async fn doc_sync_branch(anuri: String, callback: &js_sys::Function) -> JsValue { + let vec: Vec = vec![2; 10]; + let view = unsafe { Uint8Array::view(&vec) }; + let x = JsValue::from(Uint8Array::new(view.as_ref())); + + let mut reader; + let mut sender; + { + (reader, sender) = BROKER.write().await.doc_sync_branch(anuri.clone()).await; + } + + async fn inner_task( + mut reader: Receiver, + anuri: String, + callback: js_sys::Function, + ) -> ResultSend<()> { + while let Some(commit) = reader.next().await { + let xx = serde_wasm_bindgen::to_value(&commit).unwrap(); + //let xx = JsValue::from(json!(commit).to_string()); + //let _ = callback.call1(&this, &xx); + let this = JsValue::null(); + let jsval: JsValue = callback.call1(&this, &xx).unwrap(); + let promise_res: Result = jsval.dyn_into(); + match promise_res { + Ok(promise) => { + JsFuture::from(promise).await; + } + Err(_) => {} + } + } + log!("END OF LOOP"); + Ok(()) + } + + spawn_and_log_error(inner_task(reader, anuri, callback.clone())); + + let cb = Closure::once(move || { + log!("close channel"); + sender.close_channel() + }); + //Closure::wrap(Box::new(move |sender| sender.close_channel()) as Box)>); + let ret = cb.as_ref().clone(); + cb.forget(); + return ret; +} + #[cfg(target_arch = "wasm32")] #[wasm_bindgen] pub async fn start() { diff --git a/p2p-net/src/broker.rs b/p2p-net/src/broker.rs index e2c4d77..ba27fde 100644 --- a/p2p-net/src/broker.rs +++ b/p2p-net/src/broker.rs @@ -23,12 +23,18 @@ use futures::SinkExt; use noise_protocol::U8Array; use noise_rust_crypto::sensitive::Sensitive; use once_cell::sync::Lazy; -use p2p_repo::types::{PrivKey, PubKey}; +use p2p_repo::object::Object; +use p2p_repo::object::ObjectParseError; +use p2p_repo::store::HashMapRepoStore; +use p2p_repo::types::*; use p2p_repo::utils::generate_keypair; use std::collections::HashMap; use std::net::IpAddr; use std::ops::Deref; +use std::io::BufReader; +use std::io::Read; + #[derive(Debug)] pub enum PeerConnection { Core(IP), @@ -62,9 +68,117 @@ pub struct Broker { closing: bool, test: u32, + tauri_streams: HashMap>, } impl Broker { + /// helper function to store the sender of a tauri stream in order to be able to cancel it later on + /// only used in Tauri, not used in the JS SDK + pub fn tauri_stream_add(&mut self, stream_id: String, sender: Sender) { + self.tauri_streams.insert(stream_id, sender); + } + + /// helper function to cancel a tauri stream + /// /// only used in Tauri, not used in the JS SDK + pub fn tauri_stream_cancel(&mut self, stream_id: String) { + let s = self.tauri_streams.remove(&stream_id); + if let Some(sender) = s { + sender.close_channel(); + } + } + + pub async fn get_block_from_store_with_block_id( + &mut self, + nuri: String, + id: BlockId, + include_children: bool, + ) -> Result, ProtocolError> { + // TODO + let (mut tx, rx) = mpsc::unbounded::(); + + //log!("cur {}", std::env::current_dir().unwrap().display()); + + //Err(ProtocolError::AccessDenied) + // let f = std::fs::File::open( + // "../p2p-repo/tests/e4e4b57524ce29df826055c368894e912ab03af46f61f6270b4c8796bc6f4221.ng", + // ) + // .expect("open of block.ng"); + // let mut reader = BufReader::new(f); + // let mut block_buffer: Vec = Vec::new(); + // reader + // .read_to_end(&mut block_buffer) + // .expect("read of test.ng"); + + let block = serde_bare::from_slice::(&crate::tests::file::test).unwrap(); + + tx.send(block).await; + Ok(rx) + } + + pub async fn get_object_from_store_with_object_ref( + &mut self, + nuri: String, + obj_ref: ObjectRef, + ) -> Result { + let blockstream = self + .get_block_from_store_with_block_id(nuri, obj_ref.id, true) + .await?; + let store = HashMapRepoStore::from_block_stream(blockstream).await; + + Object::load(obj_ref.id, Some(obj_ref.key), &store) + .map_err(|e| match e { + ObjectParseError::MissingBlocks(_missing) => ProtocolError::MissingBlocks, + _ => ProtocolError::ObjectParseError, + })? + .content() + .map_err(|_| ProtocolError::ObjectParseError) + } + + pub async fn doc_sync_branch(&mut self, anuri: String) -> (Receiver, Sender) { + let (mut tx, rx) = mpsc::unbounded::(); + + let obj_ref = ObjectRef { + id: ObjectId::Blake3Digest32([ + 228, 228, 181, 117, 36, 206, 41, 223, 130, 96, 85, 195, 104, 137, 78, 145, 42, 176, + 58, 244, 111, 97, 246, 39, 11, 76, 135, 150, 188, 111, 66, 33, + ]), + key: SymKey::ChaCha20Key([ + 100, 243, 39, 242, 203, 131, 102, 50, 9, 54, 248, 113, 4, 160, 28, 45, 73, 56, 217, + 112, 95, 150, 144, 137, 9, 57, 106, 5, 39, 202, 146, 94, + ]), + }; + let refs = vec![obj_ref]; + let metadata = vec![5u8; 55]; + let expiry = None; + + let (member_privkey, member_pubkey) = generate_keypair(); + + let commit = Commit::new( + member_privkey, + member_pubkey, + 1, + obj_ref, + vec![], + vec![], + refs, + metadata, + obj_ref, + expiry, + ) + .unwrap(); + async fn send(mut tx: Sender, commit: Commit) -> ResultSend<()> { + while let Ok(_) = tx.send(commit.clone()).await { + log!("sending"); + sleep!(std::time::Duration::from_secs(3)); + } + log!("end of sending"); + Ok(()) + } + spawn_and_log_error(send(tx.clone(), commit)); + + (rx, tx.clone()) + } + pub fn reconnecting(&mut self, peer_id: &DirectPeerId) { let peerinfo = self.peers.get_mut(peer_id); match peerinfo { @@ -108,6 +222,7 @@ impl Broker { shutdown_sender, direct_connections: HashMap::new(), peers: HashMap::new(), + tauri_streams: HashMap::new(), closing: false, test: u32::from_be_bytes(random_buf), } diff --git a/p2p-net/src/lib.rs b/p2p-net/src/lib.rs index 44efd78..8b5b1a2 100644 --- a/p2p-net/src/lib.rs +++ b/p2p-net/src/lib.rs @@ -25,6 +25,8 @@ pub mod actors; pub mod utils; +pub mod tests; + pub static WS_PORT: u16 = 1025; #[cfg(target_arch = "wasm32")] diff --git a/p2p-net/src/tests/file.rs b/p2p-net/src/tests/file.rs new file mode 100644 index 0000000..78ca9fb --- /dev/null +++ b/p2p-net/src/tests/file.rs @@ -0,0 +1,1435 @@ +pub const test: [u8; 29487] = [ + 0, 0, 0, 0, 1, 0, 0, 0, 128, 163, 230, 1, 94, 122, 113, 30, 147, 252, 87, 146, 193, 199, 154, + 156, 116, 48, 90, 60, 132, 44, 212, 181, 100, 82, 138, 212, 5, 164, 60, 61, 164, 83, 216, 88, + 3, 20, 128, 34, 22, 228, 163, 35, 113, 184, 99, 134, 170, 154, 0, 227, 0, 173, 138, 120, 9, 50, + 94, 49, 15, 219, 167, 62, 81, 203, 172, 24, 209, 154, 79, 142, 16, 242, 181, 58, 246, 29, 140, + 143, 86, 3, 120, 181, 231, 227, 126, 24, 210, 149, 163, 254, 9, 118, 128, 232, 46, 131, 56, + 229, 128, 52, 247, 9, 158, 95, 178, 254, 67, 21, 142, 239, 11, 153, 171, 199, 137, 69, 177, + 244, 95, 108, 168, 15, 19, 67, 42, 230, 224, 28, 198, 109, 96, 254, 176, 71, 221, 139, 59, 129, + 168, 241, 194, 98, 114, 11, 33, 218, 23, 218, 191, 128, 10, 216, 177, 183, 34, 213, 230, 253, + 138, 211, 143, 85, 206, 31, 167, 157, 78, 171, 215, 64, 101, 25, 55, 157, 249, 204, 114, 116, + 184, 210, 52, 243, 219, 108, 92, 45, 110, 37, 236, 32, 55, 119, 102, 228, 105, 117, 174, 93, + 164, 156, 144, 22, 221, 40, 245, 79, 62, 120, 186, 126, 224, 31, 28, 215, 202, 146, 19, 23, 23, + 12, 175, 24, 21, 210, 148, 159, 228, 81, 188, 121, 122, 41, 164, 68, 0, 220, 240, 79, 87, 21, + 87, 148, 121, 146, 170, 129, 156, 52, 140, 6, 6, 63, 219, 55, 196, 198, 98, 11, 121, 208, 239, + 89, 86, 188, 172, 225, 78, 234, 223, 226, 101, 247, 233, 32, 156, 244, 215, 208, 248, 192, 87, + 193, 211, 226, 18, 172, 11, 34, 122, 134, 39, 55, 85, 243, 206, 123, 219, 249, 38, 52, 73, 150, + 115, 36, 0, 121, 78, 167, 165, 189, 240, 123, 188, 101, 113, 70, 177, 245, 207, 23, 227, 208, + 123, 38, 52, 150, 168, 128, 52, 6, 174, 201, 220, 76, 201, 31, 58, 55, 191, 12, 152, 126, 143, + 36, 114, 233, 188, 204, 57, 221, 215, 12, 133, 175, 212, 100, 108, 163, 62, 48, 209, 173, 50, + 255, 130, 229, 131, 196, 46, 162, 152, 64, 155, 163, 21, 247, 155, 127, 5, 32, 206, 1, 135, 8, + 194, 171, 147, 39, 168, 159, 219, 12, 202, 13, 138, 160, 9, 240, 172, 51, 21, 116, 128, 129, + 62, 88, 93, 219, 63, 66, 27, 180, 41, 15, 67, 170, 115, 7, 190, 9, 201, 248, 165, 152, 49, 48, + 141, 163, 39, 165, 203, 216, 30, 87, 235, 111, 51, 36, 166, 88, 37, 18, 188, 237, 247, 215, 33, + 66, 9, 218, 54, 72, 65, 94, 49, 146, 130, 119, 14, 32, 253, 165, 56, 135, 166, 172, 108, 65, + 185, 21, 229, 42, 222, 221, 145, 13, 43, 23, 149, 116, 2, 149, 209, 1, 11, 224, 188, 107, 71, + 145, 246, 50, 155, 181, 207, 196, 212, 110, 166, 163, 22, 33, 125, 50, 219, 229, 70, 41, 51, + 114, 72, 178, 16, 239, 117, 162, 91, 191, 9, 138, 175, 9, 12, 207, 37, 110, 163, 217, 217, 47, + 172, 149, 177, 209, 171, 126, 117, 17, 93, 37, 166, 159, 102, 224, 108, 20, 133, 31, 94, 134, + 121, 146, 214, 148, 143, 233, 63, 133, 144, 14, 154, 244, 7, 223, 8, 81, 201, 127, 12, 234, + 252, 4, 248, 102, 120, 200, 247, 55, 201, 128, 253, 194, 15, 180, 60, 34, 10, 150, 101, 92, + 204, 57, 143, 19, 165, 140, 240, 138, 251, 254, 121, 134, 113, 248, 217, 232, 168, 43, 144, + 130, 9, 6, 108, 226, 213, 70, 119, 117, 21, 196, 230, 112, 54, 160, 153, 178, 84, 153, 208, 15, + 73, 191, 236, 194, 28, 118, 179, 31, 222, 73, 37, 76, 232, 123, 77, 83, 201, 164, 161, 188, + 174, 144, 85, 39, 105, 16, 177, 26, 131, 66, 23, 94, 96, 212, 99, 251, 204, 166, 238, 129, 189, + 54, 157, 167, 174, 99, 119, 48, 14, 143, 225, 136, 72, 210, 181, 126, 4, 141, 70, 96, 133, 23, + 182, 50, 156, 0, 158, 52, 247, 3, 247, 42, 163, 93, 11, 158, 178, 109, 207, 140, 156, 210, 5, + 93, 95, 168, 50, 36, 229, 49, 5, 178, 184, 52, 27, 3, 122, 35, 185, 115, 218, 122, 173, 63, 93, + 79, 70, 44, 98, 153, 117, 249, 57, 82, 124, 33, 204, 22, 230, 236, 34, 140, 44, 31, 246, 83, + 21, 24, 195, 131, 151, 189, 40, 76, 5, 243, 178, 155, 92, 244, 22, 99, 187, 125, 156, 179, 153, + 237, 208, 155, 22, 202, 41, 143, 99, 1, 60, 182, 167, 19, 31, 84, 185, 129, 78, 15, 163, 254, + 182, 2, 100, 173, 113, 20, 163, 66, 230, 189, 173, 130, 119, 50, 78, 230, 236, 17, 36, 220, + 135, 42, 100, 193, 43, 151, 81, 7, 170, 18, 82, 116, 160, 68, 80, 136, 95, 106, 37, 166, 53, 5, + 222, 180, 61, 219, 97, 134, 146, 63, 136, 167, 12, 150, 13, 92, 148, 243, 234, 33, 45, 200, + 235, 89, 7, 159, 204, 75, 253, 53, 53, 136, 230, 101, 227, 61, 223, 46, 76, 200, 65, 155, 68, + 97, 15, 153, 88, 12, 191, 211, 8, 3, 128, 221, 253, 52, 244, 240, 36, 60, 210, 65, 16, 63, 161, + 225, 120, 184, 109, 1, 32, 124, 100, 54, 6, 182, 95, 139, 218, 108, 2, 42, 133, 66, 91, 26, + 212, 149, 104, 68, 171, 205, 150, 180, 86, 143, 167, 134, 46, 125, 54, 247, 152, 86, 71, 68, + 193, 196, 49, 74, 184, 43, 159, 165, 251, 209, 116, 51, 192, 145, 203, 14, 97, 117, 96, 78, 26, + 66, 207, 199, 140, 200, 213, 36, 234, 144, 23, 18, 80, 186, 40, 76, 180, 164, 78, 245, 203, + 233, 111, 74, 70, 57, 31, 100, 80, 186, 56, 44, 99, 156, 227, 248, 77, 9, 126, 59, 115, 153, + 222, 185, 217, 62, 31, 124, 183, 235, 100, 142, 92, 86, 38, 19, 241, 21, 188, 138, 115, 136, + 57, 237, 70, 73, 112, 5, 181, 79, 204, 90, 9, 211, 97, 57, 240, 71, 9, 244, 254, 11, 99, 196, + 93, 216, 152, 49, 72, 138, 114, 192, 204, 151, 110, 5, 12, 187, 36, 61, 128, 19, 116, 135, 217, + 24, 4, 220, 253, 43, 128, 136, 141, 202, 191, 204, 16, 58, 54, 101, 225, 200, 146, 229, 143, + 200, 210, 81, 5, 18, 58, 192, 38, 39, 181, 114, 35, 56, 6, 143, 55, 174, 25, 21, 148, 5, 102, + 87, 200, 30, 233, 152, 210, 191, 70, 248, 82, 234, 170, 171, 217, 252, 23, 202, 219, 137, 237, + 181, 93, 39, 179, 187, 12, 152, 43, 120, 8, 240, 68, 164, 89, 175, 136, 201, 102, 225, 40, 222, + 24, 207, 112, 108, 253, 249, 34, 0, 148, 188, 31, 50, 118, 169, 11, 106, 153, 218, 182, 123, + 228, 215, 224, 34, 142, 201, 31, 180, 52, 46, 103, 161, 243, 56, 117, 0, 69, 113, 208, 6, 255, + 18, 230, 166, 94, 110, 25, 91, 87, 66, 74, 116, 186, 253, 3, 224, 221, 41, 64, 212, 210, 96, + 254, 130, 137, 130, 38, 240, 210, 130, 235, 190, 140, 157, 163, 171, 134, 15, 25, 145, 214, + 154, 0, 252, 186, 5, 227, 19, 78, 124, 37, 252, 168, 101, 85, 184, 128, 240, 82, 41, 31, 130, + 56, 161, 67, 246, 208, 255, 46, 18, 136, 217, 167, 31, 4, 135, 171, 191, 109, 138, 236, 211, 1, + 1, 225, 142, 113, 83, 7, 133, 35, 28, 70, 182, 45, 99, 51, 184, 135, 218, 127, 241, 41, 139, + 200, 58, 117, 122, 49, 214, 6, 94, 121, 1, 196, 106, 124, 95, 130, 75, 65, 28, 221, 107, 155, + 39, 145, 89, 5, 241, 87, 125, 228, 246, 54, 209, 161, 41, 154, 228, 141, 16, 140, 78, 130, 95, + 219, 127, 54, 57, 168, 15, 177, 15, 181, 118, 172, 134, 193, 45, 251, 249, 5, 202, 216, 3, 60, + 35, 76, 136, 201, 28, 47, 19, 118, 246, 3, 202, 58, 120, 207, 49, 219, 159, 64, 110, 83, 66, + 101, 132, 39, 22, 69, 230, 191, 192, 186, 8, 178, 134, 116, 108, 239, 230, 61, 60, 238, 123, + 125, 245, 35, 119, 204, 224, 84, 11, 108, 247, 232, 146, 226, 53, 231, 6, 13, 51, 108, 139, 9, + 48, 5, 214, 188, 38, 219, 159, 142, 49, 112, 251, 178, 205, 116, 67, 47, 11, 17, 148, 187, 92, + 175, 65, 222, 180, 15, 28, 1, 141, 117, 26, 60, 97, 218, 71, 155, 176, 156, 120, 7, 207, 13, + 234, 89, 202, 167, 254, 141, 194, 34, 223, 186, 202, 79, 67, 197, 7, 149, 72, 247, 187, 102, + 28, 230, 92, 132, 239, 106, 133, 228, 211, 129, 124, 46, 240, 85, 148, 160, 56, 237, 232, 108, + 233, 174, 239, 161, 254, 113, 28, 169, 71, 108, 38, 152, 119, 47, 201, 190, 15, 88, 113, 2, 73, + 38, 33, 29, 135, 110, 65, 199, 20, 178, 90, 97, 24, 176, 240, 4, 220, 150, 97, 64, 176, 77, 61, + 25, 23, 49, 140, 55, 193, 202, 186, 125, 221, 191, 84, 49, 11, 120, 13, 29, 119, 199, 126, 186, + 71, 182, 67, 87, 202, 67, 154, 114, 158, 232, 89, 125, 26, 58, 237, 43, 24, 11, 44, 223, 106, + 13, 171, 191, 187, 135, 223, 175, 111, 57, 248, 247, 39, 124, 11, 211, 238, 40, 165, 97, 49, + 76, 223, 40, 167, 204, 254, 138, 28, 46, 106, 218, 3, 47, 210, 158, 10, 39, 14, 111, 239, 235, + 235, 86, 72, 215, 116, 86, 51, 51, 33, 216, 15, 226, 119, 235, 130, 117, 92, 254, 132, 230, 53, + 72, 15, 110, 143, 201, 51, 143, 39, 68, 115, 105, 146, 172, 130, 218, 109, 183, 8, 246, 217, + 178, 156, 168, 154, 37, 49, 251, 29, 0, 219, 131, 201, 185, 21, 134, 80, 152, 157, 114, 98, + 138, 197, 140, 236, 60, 132, 173, 208, 232, 233, 185, 19, 143, 254, 177, 71, 145, 187, 177, + 197, 192, 133, 161, 126, 157, 51, 88, 44, 131, 96, 8, 236, 116, 145, 143, 174, 215, 103, 78, + 103, 214, 3, 169, 17, 156, 127, 235, 52, 18, 210, 31, 179, 227, 46, 92, 106, 14, 66, 187, 86, + 239, 176, 16, 135, 25, 76, 188, 24, 108, 79, 58, 61, 139, 9, 168, 244, 219, 254, 172, 91, 199, + 156, 19, 156, 12, 172, 85, 11, 84, 242, 122, 64, 207, 121, 110, 168, 223, 248, 30, 245, 125, + 153, 125, 51, 201, 119, 228, 134, 59, 39, 156, 50, 78, 82, 96, 83, 221, 119, 57, 139, 143, 215, + 1, 209, 83, 95, 252, 235, 148, 135, 86, 91, 150, 127, 43, 187, 31, 211, 14, 43, 249, 51, 142, + 97, 110, 152, 220, 95, 21, 83, 1, 71, 192, 36, 55, 56, 198, 170, 107, 105, 57, 111, 111, 113, + 241, 129, 192, 175, 40, 7, 202, 18, 134, 96, 31, 203, 172, 110, 209, 245, 186, 240, 33, 28, 6, + 135, 89, 245, 73, 200, 24, 203, 31, 196, 159, 174, 113, 169, 59, 43, 126, 46, 174, 213, 245, + 224, 200, 186, 92, 120, 36, 177, 195, 121, 165, 195, 238, 20, 111, 19, 222, 216, 176, 94, 35, + 221, 88, 222, 19, 17, 160, 248, 128, 192, 255, 234, 190, 50, 96, 147, 233, 18, 49, 156, 185, + 38, 13, 172, 166, 116, 84, 208, 114, 142, 151, 38, 27, 104, 78, 207, 183, 243, 13, 175, 157, + 215, 63, 241, 89, 152, 25, 32, 255, 168, 8, 66, 60, 41, 42, 170, 107, 166, 185, 118, 50, 22, + 153, 124, 156, 167, 4, 142, 113, 123, 195, 54, 202, 149, 132, 163, 196, 22, 191, 79, 29, 185, + 163, 249, 212, 229, 51, 249, 116, 167, 157, 236, 80, 120, 190, 106, 129, 55, 75, 236, 137, 248, + 53, 205, 125, 129, 251, 148, 63, 255, 21, 118, 23, 66, 78, 212, 7, 147, 157, 187, 224, 197, + 230, 98, 242, 243, 124, 93, 150, 44, 167, 234, 42, 163, 9, 246, 211, 41, 154, 86, 39, 156, 67, + 58, 123, 3, 236, 16, 76, 103, 224, 68, 5, 245, 80, 129, 205, 189, 91, 254, 34, 38, 103, 243, + 112, 180, 81, 149, 181, 172, 5, 63, 211, 247, 1, 107, 239, 48, 140, 139, 230, 222, 173, 144, + 142, 246, 249, 243, 236, 152, 54, 233, 93, 166, 51, 163, 37, 36, 195, 95, 162, 169, 242, 149, + 167, 155, 38, 108, 108, 1, 8, 199, 79, 43, 238, 247, 241, 229, 31, 131, 109, 36, 60, 194, 24, + 161, 164, 231, 181, 247, 114, 100, 148, 196, 115, 80, 61, 239, 63, 237, 140, 18, 165, 242, 243, + 100, 55, 230, 68, 229, 82, 152, 238, 188, 17, 200, 175, 9, 214, 41, 172, 171, 137, 205, 165, + 249, 136, 216, 160, 171, 32, 215, 244, 116, 154, 155, 210, 247, 60, 97, 88, 26, 182, 40, 155, + 230, 254, 211, 205, 136, 185, 13, 201, 21, 81, 27, 9, 27, 181, 191, 70, 72, 234, 241, 35, 234, + 55, 29, 7, 35, 235, 45, 200, 155, 82, 52, 1, 235, 97, 179, 192, 219, 216, 76, 250, 109, 38, + 214, 104, 155, 72, 213, 167, 251, 42, 37, 176, 46, 205, 30, 254, 153, 120, 33, 135, 203, 4, 74, + 205, 72, 221, 42, 108, 143, 122, 172, 196, 37, 97, 166, 51, 132, 120, 134, 138, 14, 135, 10, + 47, 104, 89, 4, 223, 165, 59, 16, 10, 124, 240, 242, 199, 146, 234, 1, 1, 51, 243, 54, 214, 58, + 141, 177, 83, 217, 31, 132, 48, 40, 77, 23, 225, 217, 81, 83, 192, 101, 251, 38, 30, 171, 191, + 78, 151, 190, 30, 239, 110, 51, 165, 133, 130, 216, 202, 97, 39, 150, 88, 182, 28, 33, 84, 154, + 85, 195, 201, 248, 215, 232, 62, 123, 38, 34, 79, 234, 209, 28, 155, 223, 249, 152, 126, 99, 8, + 172, 78, 134, 24, 3, 159, 34, 82, 154, 43, 83, 86, 199, 178, 17, 138, 255, 116, 113, 166, 69, + 170, 126, 32, 188, 181, 47, 159, 248, 43, 255, 19, 245, 7, 196, 233, 131, 84, 242, 165, 97, + 123, 6, 122, 112, 113, 27, 46, 21, 193, 189, 236, 252, 230, 91, 177, 202, 38, 125, 20, 137, 66, + 8, 140, 225, 225, 138, 192, 161, 144, 181, 183, 217, 138, 152, 119, 92, 7, 198, 19, 240, 115, + 188, 198, 154, 232, 193, 93, 201, 142, 254, 77, 87, 159, 118, 103, 193, 139, 243, 58, 184, 195, + 141, 195, 117, 238, 122, 124, 167, 16, 74, 35, 131, 79, 177, 23, 99, 110, 140, 100, 44, 37, + 104, 174, 218, 34, 135, 63, 176, 215, 46, 13, 79, 78, 68, 230, 135, 253, 211, 178, 2, 32, 105, + 165, 14, 5, 163, 231, 74, 147, 187, 45, 1, 164, 186, 57, 4, 16, 132, 21, 60, 75, 213, 67, 214, + 74, 120, 185, 188, 254, 84, 63, 182, 169, 62, 76, 245, 203, 200, 222, 89, 121, 41, 213, 163, + 134, 133, 239, 66, 163, 149, 235, 250, 111, 42, 244, 138, 75, 220, 7, 109, 78, 85, 120, 75, 19, + 254, 125, 48, 89, 220, 2, 58, 235, 243, 126, 228, 49, 178, 122, 54, 212, 223, 105, 232, 0, 184, + 15, 176, 114, 19, 94, 168, 38, 12, 35, 214, 178, 11, 44, 186, 29, 102, 236, 30, 169, 166, 96, + 189, 37, 54, 218, 61, 88, 193, 142, 74, 39, 237, 184, 249, 41, 60, 162, 231, 186, 169, 76, 229, + 212, 146, 51, 224, 172, 121, 179, 44, 152, 90, 54, 139, 78, 164, 177, 57, 84, 192, 161, 40, 46, + 231, 23, 140, 250, 11, 51, 216, 198, 202, 89, 50, 202, 51, 28, 242, 10, 189, 208, 192, 37, 79, + 123, 10, 139, 136, 16, 235, 116, 184, 221, 187, 66, 215, 168, 95, 7, 224, 55, 251, 3, 6, 209, + 120, 196, 142, 17, 29, 64, 16, 129, 205, 46, 206, 183, 213, 241, 73, 113, 193, 136, 107, 171, + 88, 105, 229, 224, 120, 77, 112, 229, 8, 148, 96, 205, 149, 158, 70, 43, 240, 238, 37, 241, 69, + 76, 157, 114, 89, 8, 212, 241, 86, 207, 193, 146, 152, 209, 42, 71, 181, 104, 224, 132, 108, + 244, 48, 0, 40, 97, 149, 73, 82, 121, 201, 186, 96, 114, 54, 236, 200, 48, 116, 43, 35, 185, + 212, 147, 199, 179, 82, 113, 15, 19, 29, 201, 218, 59, 56, 219, 202, 139, 118, 10, 10, 38, 251, + 177, 72, 13, 228, 138, 28, 196, 212, 122, 230, 189, 72, 121, 33, 175, 4, 17, 234, 188, 84, 2, + 220, 51, 223, 19, 27, 1, 70, 41, 17, 26, 118, 228, 90, 26, 233, 39, 126, 42, 98, 91, 66, 45, + 98, 52, 24, 126, 150, 48, 43, 203, 28, 83, 173, 69, 213, 50, 179, 110, 125, 94, 78, 219, 253, + 173, 107, 233, 107, 197, 214, 195, 32, 172, 78, 107, 97, 64, 212, 106, 111, 41, 255, 240, 91, + 126, 249, 182, 96, 122, 213, 159, 59, 132, 29, 4, 10, 146, 248, 150, 224, 193, 232, 194, 105, + 205, 71, 111, 78, 8, 191, 22, 122, 230, 115, 164, 184, 237, 93, 63, 193, 73, 114, 80, 220, 109, + 43, 143, 94, 190, 165, 48, 87, 71, 236, 78, 180, 114, 232, 76, 72, 201, 92, 170, 159, 228, 112, + 36, 15, 205, 191, 47, 163, 35, 38, 175, 145, 234, 196, 7, 0, 200, 240, 128, 140, 14, 215, 123, + 72, 227, 46, 48, 82, 153, 205, 222, 13, 107, 218, 207, 82, 3, 251, 46, 143, 249, 189, 214, 151, + 107, 241, 203, 191, 44, 117, 162, 156, 182, 239, 204, 140, 253, 121, 95, 42, 48, 191, 75, 63, + 192, 136, 199, 228, 81, 144, 182, 190, 181, 52, 231, 123, 172, 224, 178, 191, 31, 60, 166, 114, + 184, 103, 117, 129, 137, 50, 41, 184, 190, 164, 160, 110, 188, 51, 139, 133, 199, 151, 240, + 214, 52, 132, 135, 235, 19, 113, 12, 39, 241, 125, 202, 63, 37, 194, 89, 254, 192, 180, 110, + 77, 166, 82, 244, 152, 60, 40, 144, 222, 75, 10, 154, 46, 252, 8, 103, 173, 10, 79, 74, 29, 62, + 226, 70, 122, 72, 151, 176, 124, 41, 169, 247, 144, 105, 75, 157, 156, 242, 148, 184, 28, 145, + 132, 81, 237, 136, 187, 82, 46, 161, 158, 230, 57, 218, 122, 70, 63, 99, 7, 7, 28, 225, 124, + 161, 147, 40, 84, 216, 49, 78, 112, 34, 171, 147, 192, 242, 149, 220, 172, 108, 36, 144, 207, + 41, 208, 59, 255, 43, 201, 165, 217, 55, 233, 71, 172, 63, 233, 88, 102, 229, 245, 97, 43, 6, + 172, 156, 254, 162, 212, 149, 105, 86, 132, 72, 55, 132, 161, 157, 177, 127, 29, 197, 229, 55, + 151, 28, 61, 170, 240, 246, 192, 60, 197, 32, 230, 25, 251, 0, 241, 84, 37, 215, 5, 60, 221, + 107, 215, 159, 155, 113, 16, 118, 1, 164, 203, 163, 247, 47, 226, 166, 92, 217, 23, 254, 212, + 114, 124, 116, 64, 3, 8, 38, 143, 71, 51, 144, 171, 79, 247, 214, 253, 206, 128, 130, 246, 7, + 42, 67, 161, 68, 155, 201, 67, 185, 121, 70, 222, 233, 59, 48, 160, 33, 193, 34, 99, 16, 224, + 45, 161, 78, 81, 138, 1, 71, 129, 97, 112, 116, 197, 187, 102, 121, 87, 250, 35, 109, 122, 147, + 15, 71, 118, 57, 49, 89, 49, 32, 60, 202, 46, 42, 80, 19, 2, 146, 50, 40, 168, 234, 160, 110, + 95, 118, 24, 82, 255, 112, 117, 206, 12, 52, 16, 216, 180, 128, 241, 192, 217, 112, 185, 35, + 142, 209, 236, 114, 7, 246, 212, 177, 252, 161, 104, 223, 101, 182, 249, 114, 232, 0, 75, 56, + 146, 216, 237, 61, 222, 58, 137, 78, 51, 248, 107, 80, 244, 93, 241, 244, 201, 121, 19, 204, + 10, 108, 221, 124, 87, 89, 38, 67, 239, 81, 174, 153, 75, 167, 125, 122, 5, 73, 75, 149, 2, 93, + 58, 139, 39, 89, 105, 106, 111, 152, 195, 83, 182, 173, 32, 152, 132, 28, 137, 2, 30, 140, 188, + 9, 240, 39, 37, 4, 62, 122, 111, 195, 199, 145, 11, 225, 58, 241, 82, 83, 108, 230, 211, 137, + 201, 127, 11, 41, 41, 136, 62, 60, 3, 86, 225, 202, 73, 4, 169, 70, 80, 29, 247, 183, 63, 149, + 242, 201, 205, 187, 234, 144, 171, 97, 221, 124, 250, 1, 194, 230, 97, 252, 146, 253, 238, 254, + 6, 211, 119, 161, 24, 195, 133, 45, 1, 137, 83, 26, 166, 149, 224, 65, 92, 151, 165, 163, 152, + 15, 91, 238, 36, 142, 6, 51, 47, 87, 3, 157, 100, 102, 17, 9, 33, 152, 233, 69, 124, 5, 27, + 104, 123, 184, 155, 230, 167, 71, 112, 82, 130, 83, 139, 4, 209, 38, 195, 170, 71, 189, 170, + 187, 79, 20, 96, 139, 121, 184, 148, 225, 129, 20, 167, 137, 32, 135, 203, 251, 139, 223, 170, + 221, 118, 189, 248, 58, 235, 34, 14, 10, 69, 29, 72, 237, 220, 118, 198, 176, 112, 74, 44, 0, + 69, 36, 113, 23, 26, 219, 205, 189, 118, 182, 183, 106, 134, 26, 246, 193, 111, 11, 123, 239, + 253, 64, 82, 113, 194, 238, 164, 18, 186, 130, 40, 8, 96, 61, 176, 226, 164, 232, 122, 248, + 211, 42, 107, 4, 130, 144, 107, 123, 152, 59, 68, 208, 10, 184, 95, 217, 153, 251, 65, 37, 0, + 79, 140, 43, 233, 235, 76, 246, 162, 192, 47, 191, 95, 60, 78, 118, 184, 205, 243, 130, 181, + 35, 60, 218, 144, 213, 78, 201, 188, 107, 127, 239, 189, 168, 67, 118, 48, 61, 244, 231, 234, + 67, 119, 121, 1, 220, 26, 160, 99, 248, 141, 246, 244, 107, 17, 43, 195, 224, 243, 90, 209, + 121, 89, 156, 158, 113, 116, 244, 78, 47, 170, 130, 126, 238, 99, 208, 113, 4, 254, 106, 14, + 48, 226, 246, 20, 114, 235, 112, 7, 189, 96, 98, 207, 247, 206, 245, 147, 225, 1, 250, 48, 65, + 79, 220, 167, 64, 109, 42, 51, 206, 152, 32, 188, 100, 41, 101, 138, 133, 174, 105, 110, 61, + 236, 10, 156, 131, 146, 86, 154, 25, 170, 234, 9, 232, 108, 56, 222, 255, 152, 80, 156, 160, + 235, 203, 16, 228, 151, 172, 147, 204, 147, 88, 111, 48, 155, 62, 37, 53, 126, 85, 206, 171, + 220, 139, 205, 123, 1, 232, 63, 166, 245, 155, 249, 225, 229, 232, 249, 45, 251, 175, 64, 141, + 163, 51, 111, 48, 1, 138, 164, 213, 101, 120, 211, 160, 48, 93, 226, 174, 214, 163, 11, 47, + 144, 65, 93, 191, 200, 90, 61, 165, 117, 16, 127, 193, 173, 62, 159, 158, 253, 119, 108, 77, + 97, 19, 246, 182, 214, 105, 253, 222, 31, 125, 150, 86, 4, 159, 39, 219, 99, 54, 204, 238, 86, + 242, 238, 80, 150, 224, 175, 231, 82, 67, 76, 32, 77, 227, 233, 31, 91, 106, 169, 203, 130, + 214, 129, 153, 2, 169, 129, 26, 238, 125, 120, 225, 231, 190, 204, 2, 132, 241, 244, 45, 5, 27, + 25, 18, 193, 185, 64, 170, 156, 78, 58, 124, 216, 27, 109, 241, 221, 42, 27, 193, 150, 98, 37, + 114, 159, 198, 45, 89, 161, 63, 38, 168, 223, 117, 65, 193, 213, 166, 246, 78, 240, 58, 200, + 114, 5, 210, 210, 210, 185, 2, 240, 5, 84, 123, 194, 183, 248, 142, 181, 4, 228, 73, 150, 15, + 182, 224, 217, 212, 142, 85, 159, 93, 2, 248, 195, 139, 223, 70, 49, 6, 130, 44, 146, 12, 78, + 138, 202, 44, 141, 55, 115, 102, 182, 33, 9, 129, 32, 64, 70, 251, 72, 11, 84, 127, 117, 253, + 197, 102, 129, 113, 24, 58, 229, 74, 128, 126, 51, 101, 84, 100, 190, 99, 79, 68, 89, 93, 239, + 18, 209, 221, 53, 148, 60, 217, 158, 214, 98, 80, 119, 39, 115, 34, 136, 74, 150, 77, 96, 14, + 35, 166, 17, 178, 96, 227, 5, 128, 155, 3, 234, 161, 115, 46, 80, 197, 241, 231, 215, 125, 36, + 255, 234, 143, 98, 70, 251, 249, 4, 150, 112, 115, 243, 92, 168, 181, 103, 145, 152, 194, 138, + 86, 179, 75, 228, 189, 139, 36, 181, 151, 90, 150, 22, 117, 113, 155, 118, 221, 39, 65, 95, + 127, 77, 35, 13, 118, 16, 224, 39, 113, 147, 225, 78, 62, 248, 237, 105, 175, 33, 245, 158, 20, + 161, 21, 167, 54, 46, 160, 130, 230, 213, 164, 124, 68, 164, 189, 33, 190, 195, 91, 191, 43, + 143, 172, 209, 25, 194, 196, 65, 133, 236, 105, 183, 3, 90, 132, 206, 145, 76, 239, 92, 242, + 81, 171, 20, 138, 195, 100, 222, 105, 159, 229, 100, 39, 202, 53, 59, 188, 83, 146, 220, 111, + 80, 227, 165, 17, 197, 146, 212, 251, 204, 77, 245, 168, 88, 215, 16, 195, 236, 13, 204, 113, + 235, 153, 206, 74, 128, 166, 17, 241, 204, 53, 210, 25, 9, 127, 225, 24, 168, 65, 85, 99, 141, + 168, 148, 74, 107, 25, 28, 18, 148, 9, 58, 207, 83, 37, 112, 125, 31, 33, 47, 38, 21, 25, 125, + 172, 194, 196, 101, 183, 216, 215, 77, 94, 189, 223, 28, 239, 115, 11, 203, 172, 113, 123, 177, + 46, 214, 73, 108, 140, 54, 171, 98, 160, 178, 217, 27, 3, 10, 57, 136, 174, 59, 11, 147, 65, + 180, 141, 30, 9, 214, 193, 93, 225, 97, 33, 233, 112, 20, 91, 231, 166, 99, 184, 21, 104, 10, + 230, 130, 57, 109, 112, 253, 98, 89, 202, 106, 220, 228, 122, 97, 33, 96, 63, 140, 79, 207, + 218, 87, 101, 117, 15, 82, 5, 144, 208, 66, 188, 189, 76, 172, 182, 145, 64, 127, 169, 254, + 250, 8, 176, 164, 221, 178, 39, 13, 91, 122, 62, 140, 94, 148, 203, 71, 174, 108, 248, 192, 70, + 44, 37, 174, 86, 23, 33, 110, 79, 82, 234, 172, 105, 236, 60, 45, 253, 186, 135, 53, 161, 255, + 191, 64, 215, 223, 116, 31, 62, 41, 212, 39, 191, 237, 181, 208, 126, 59, 132, 0, 111, 130, + 179, 28, 130, 134, 1, 33, 42, 58, 73, 203, 136, 219, 146, 165, 9, 26, 84, 8, 56, 5, 179, 154, + 216, 164, 242, 58, 57, 68, 27, 220, 212, 232, 219, 43, 227, 224, 59, 0, 70, 14, 159, 73, 72, + 235, 101, 62, 68, 192, 154, 188, 214, 109, 135, 42, 233, 116, 0, 21, 35, 24, 51, 200, 210, 130, + 213, 117, 8, 9, 182, 192, 119, 36, 7, 158, 172, 54, 53, 181, 122, 174, 133, 59, 28, 137, 97, + 11, 208, 250, 116, 254, 127, 88, 103, 163, 137, 98, 193, 159, 94, 83, 154, 191, 167, 150, 100, + 192, 183, 112, 111, 204, 123, 213, 194, 166, 78, 254, 130, 177, 56, 206, 234, 23, 146, 75, 60, + 53, 229, 118, 192, 60, 102, 52, 46, 186, 146, 152, 208, 245, 225, 107, 184, 46, 76, 88, 236, + 134, 11, 41, 249, 0, 219, 78, 69, 227, 31, 107, 94, 30, 4, 22, 88, 131, 7, 251, 120, 129, 221, + 50, 205, 147, 169, 219, 145, 156, 102, 35, 44, 152, 118, 24, 198, 38, 157, 107, 38, 67, 61, 19, + 11, 134, 231, 163, 23, 198, 94, 34, 176, 168, 13, 228, 173, 56, 197, 73, 216, 64, 112, 147, + 150, 122, 132, 130, 148, 213, 215, 95, 134, 62, 88, 141, 64, 143, 88, 132, 152, 189, 91, 168, + 107, 167, 108, 184, 156, 95, 172, 145, 237, 45, 72, 49, 127, 82, 124, 25, 236, 243, 14, 148, + 20, 86, 25, 180, 181, 181, 96, 99, 131, 192, 90, 14, 223, 24, 71, 146, 104, 160, 77, 18, 34, + 245, 175, 231, 88, 242, 32, 154, 29, 88, 58, 196, 174, 235, 173, 111, 136, 203, 226, 221, 20, + 43, 13, 190, 0, 132, 255, 15, 11, 73, 52, 249, 39, 16, 239, 214, 160, 32, 49, 4, 164, 85, 86, + 206, 92, 210, 92, 117, 126, 113, 65, 195, 101, 126, 136, 8, 252, 178, 174, 214, 118, 214, 169, + 81, 97, 197, 200, 177, 84, 47, 250, 35, 28, 54, 148, 60, 61, 91, 8, 216, 43, 217, 183, 60, 195, + 123, 89, 153, 248, 107, 166, 211, 81, 102, 227, 177, 109, 247, 132, 172, 164, 163, 44, 56, 75, + 121, 249, 114, 195, 104, 15, 33, 179, 57, 79, 186, 211, 212, 19, 158, 18, 62, 176, 206, 156, + 217, 118, 119, 151, 214, 22, 60, 67, 192, 110, 207, 247, 193, 208, 124, 238, 230, 188, 129, 44, + 131, 143, 47, 121, 193, 15, 165, 125, 121, 112, 196, 234, 206, 214, 200, 245, 103, 184, 226, + 127, 157, 180, 157, 23, 29, 21, 228, 60, 181, 119, 247, 93, 158, 116, 133, 242, 120, 11, 130, + 88, 142, 68, 77, 167, 83, 114, 87, 7, 33, 177, 177, 145, 77, 64, 229, 151, 153, 110, 108, 192, + 251, 194, 217, 51, 8, 193, 129, 118, 236, 88, 193, 166, 216, 187, 196, 83, 108, 213, 99, 82, + 152, 196, 168, 51, 95, 231, 153, 98, 233, 38, 32, 143, 132, 66, 123, 148, 24, 137, 158, 233, + 20, 112, 129, 18, 70, 212, 150, 134, 47, 232, 29, 8, 191, 23, 91, 224, 93, 30, 58, 207, 106, + 18, 43, 63, 144, 55, 11, 207, 207, 223, 233, 167, 24, 137, 82, 12, 208, 86, 107, 45, 138, 127, + 174, 45, 114, 125, 232, 41, 241, 187, 203, 47, 134, 66, 49, 169, 165, 126, 8, 89, 204, 193, + 167, 255, 237, 141, 232, 16, 36, 62, 37, 53, 254, 38, 192, 126, 208, 15, 247, 12, 33, 122, 60, + 69, 27, 93, 147, 187, 223, 9, 236, 150, 149, 193, 250, 227, 91, 57, 5, 131, 7, 154, 131, 92, + 180, 102, 62, 101, 143, 152, 113, 209, 38, 188, 219, 4, 76, 18, 243, 217, 247, 233, 218, 124, + 111, 178, 84, 193, 201, 110, 98, 87, 101, 112, 250, 213, 190, 190, 142, 26, 76, 177, 203, 21, + 225, 118, 215, 217, 0, 247, 226, 176, 74, 3, 51, 11, 204, 84, 35, 194, 89, 59, 8, 15, 94, 53, + 121, 157, 254, 49, 123, 65, 71, 233, 234, 246, 77, 212, 161, 66, 76, 83, 88, 182, 90, 243, 8, + 28, 104, 153, 153, 52, 115, 82, 76, 204, 248, 139, 186, 79, 135, 235, 95, 48, 209, 228, 20, + 239, 93, 110, 100, 131, 205, 128, 89, 11, 163, 252, 99, 49, 175, 130, 39, 43, 210, 195, 54, + 199, 230, 42, 23, 107, 131, 146, 222, 171, 50, 163, 180, 62, 50, 95, 185, 221, 122, 235, 60, + 207, 141, 98, 80, 106, 222, 8, 102, 5, 32, 174, 149, 135, 12, 54, 87, 234, 239, 184, 28, 66, + 213, 99, 53, 87, 62, 30, 241, 17, 138, 117, 73, 148, 60, 59, 226, 116, 187, 249, 161, 110, 152, + 83, 72, 53, 232, 7, 53, 128, 159, 32, 91, 105, 208, 208, 202, 67, 150, 235, 241, 201, 232, 31, + 212, 42, 74, 241, 113, 62, 164, 154, 46, 109, 242, 255, 60, 171, 158, 108, 20, 236, 202, 78, + 92, 63, 101, 139, 236, 87, 147, 122, 214, 1, 178, 77, 185, 24, 103, 113, 170, 67, 62, 199, 203, + 197, 97, 49, 233, 184, 79, 114, 21, 216, 238, 86, 99, 77, 207, 140, 137, 87, 153, 118, 118, + 188, 183, 120, 114, 202, 30, 184, 13, 67, 211, 43, 170, 198, 14, 3, 57, 102, 210, 93, 122, 168, + 58, 54, 96, 93, 158, 209, 91, 32, 125, 24, 99, 134, 110, 164, 127, 20, 112, 110, 10, 60, 161, + 222, 70, 107, 148, 132, 94, 67, 212, 92, 146, 202, 163, 254, 35, 6, 87, 226, 65, 4, 88, 77, 43, + 152, 116, 49, 57, 11, 84, 60, 83, 155, 23, 144, 237, 227, 156, 53, 210, 169, 123, 117, 113, 80, + 8, 74, 44, 87, 198, 88, 0, 179, 112, 78, 125, 224, 150, 163, 92, 141, 2, 18, 222, 227, 164, + 208, 69, 230, 36, 152, 232, 82, 168, 209, 206, 24, 0, 193, 166, 100, 244, 201, 201, 79, 232, + 102, 77, 14, 18, 64, 69, 4, 174, 138, 135, 23, 148, 82, 82, 133, 42, 236, 24, 42, 62, 67, 105, + 125, 218, 222, 1, 120, 228, 208, 178, 71, 152, 201, 133, 95, 45, 135, 56, 224, 163, 5, 213, 44, + 87, 95, 47, 195, 191, 186, 79, 51, 216, 244, 72, 200, 125, 25, 124, 122, 53, 215, 188, 3, 232, + 141, 19, 162, 160, 67, 246, 148, 34, 133, 197, 28, 10, 148, 174, 209, 98, 38, 143, 74, 194, + 100, 56, 69, 192, 96, 86, 110, 67, 189, 58, 189, 146, 94, 157, 39, 170, 25, 78, 100, 54, 71, + 146, 220, 245, 82, 199, 148, 40, 162, 206, 172, 92, 57, 143, 197, 254, 56, 119, 2, 204, 252, + 112, 23, 169, 186, 169, 46, 14, 159, 50, 137, 41, 66, 14, 240, 133, 166, 156, 154, 241, 182, + 107, 225, 107, 100, 170, 132, 77, 143, 173, 125, 15, 24, 73, 157, 136, 74, 98, 183, 139, 101, + 199, 191, 219, 123, 229, 208, 148, 238, 189, 18, 191, 91, 20, 39, 106, 51, 171, 14, 15, 9, 98, + 18, 125, 11, 206, 165, 191, 170, 39, 204, 41, 61, 52, 159, 190, 41, 243, 27, 157, 159, 243, + 102, 216, 180, 244, 66, 125, 191, 113, 158, 203, 186, 73, 193, 50, 105, 146, 59, 156, 161, 157, + 119, 171, 99, 240, 111, 67, 99, 70, 26, 196, 42, 177, 237, 16, 92, 61, 226, 216, 52, 41, 91, + 255, 140, 112, 174, 152, 94, 223, 186, 187, 23, 123, 253, 71, 107, 151, 227, 143, 44, 40, 50, + 220, 62, 199, 154, 10, 84, 5, 253, 242, 126, 183, 230, 155, 96, 203, 139, 74, 111, 63, 107, + 205, 248, 73, 160, 198, 94, 197, 43, 166, 3, 77, 79, 76, 102, 126, 209, 233, 178, 117, 213, + 246, 239, 243, 67, 27, 211, 68, 178, 44, 98, 235, 152, 69, 229, 214, 206, 120, 213, 199, 187, + 183, 127, 58, 181, 69, 21, 24, 196, 44, 32, 195, 224, 237, 113, 215, 236, 223, 7, 7, 17, 127, + 146, 67, 9, 87, 57, 153, 42, 149, 16, 30, 16, 60, 127, 29, 187, 161, 69, 43, 24, 16, 154, 170, + 93, 231, 169, 236, 125, 241, 238, 82, 208, 235, 217, 199, 7, 206, 182, 234, 62, 19, 202, 216, + 149, 203, 254, 79, 113, 81, 242, 71, 75, 90, 9, 196, 47, 21, 237, 144, 94, 61, 121, 60, 178, + 138, 19, 117, 20, 223, 193, 150, 7, 30, 196, 251, 199, 101, 23, 81, 77, 212, 221, 162, 176, + 193, 137, 1, 142, 58, 132, 189, 178, 115, 226, 108, 8, 205, 33, 150, 45, 154, 222, 245, 138, + 123, 16, 113, 102, 207, 113, 55, 82, 113, 44, 143, 93, 210, 187, 145, 61, 38, 66, 234, 68, 130, + 144, 140, 72, 238, 251, 149, 230, 36, 140, 195, 18, 63, 149, 110, 154, 205, 13, 75, 245, 57, + 159, 142, 76, 239, 129, 96, 223, 47, 138, 145, 112, 54, 32, 44, 125, 71, 166, 235, 30, 218, + 134, 53, 182, 201, 180, 112, 190, 146, 69, 100, 11, 230, 137, 159, 210, 83, 121, 176, 86, 84, + 131, 158, 192, 179, 73, 137, 145, 243, 93, 114, 53, 193, 247, 119, 182, 91, 76, 24, 169, 107, + 159, 108, 206, 117, 232, 108, 36, 3, 76, 107, 38, 37, 94, 154, 251, 132, 204, 249, 3, 180, 227, + 240, 19, 70, 133, 0, 217, 215, 99, 204, 139, 159, 31, 97, 122, 169, 101, 161, 186, 43, 61, 99, + 212, 83, 251, 154, 34, 168, 117, 167, 167, 95, 86, 74, 240, 45, 129, 79, 145, 74, 70, 214, 142, + 49, 97, 191, 35, 167, 81, 10, 5, 216, 4, 62, 62, 188, 100, 213, 248, 237, 125, 127, 106, 36, + 131, 152, 222, 158, 202, 212, 110, 146, 18, 142, 96, 252, 115, 28, 39, 81, 90, 244, 161, 56, + 255, 55, 233, 235, 247, 233, 243, 251, 19, 119, 37, 81, 119, 93, 223, 67, 182, 62, 6, 231, 116, + 228, 67, 212, 226, 101, 38, 105, 104, 110, 152, 3, 151, 56, 136, 233, 162, 244, 146, 234, 79, + 100, 140, 29, 44, 201, 26, 218, 166, 42, 184, 74, 111, 99, 206, 37, 150, 250, 58, 131, 80, 41, + 206, 192, 71, 195, 17, 111, 83, 67, 108, 132, 178, 101, 108, 32, 139, 155, 193, 77, 115, 160, + 193, 88, 233, 224, 211, 180, 69, 104, 18, 199, 1, 105, 71, 251, 174, 48, 184, 10, 4, 2, 17, + 235, 81, 184, 44, 79, 129, 190, 63, 22, 188, 178, 20, 23, 160, 53, 127, 32, 126, 12, 193, 185, + 247, 241, 202, 173, 76, 108, 58, 217, 251, 146, 57, 20, 188, 119, 157, 17, 232, 156, 137, 35, + 15, 102, 212, 73, 224, 200, 201, 84, 155, 43, 90, 224, 84, 152, 141, 153, 60, 229, 215, 148, + 58, 118, 214, 118, 53, 114, 75, 153, 119, 143, 233, 11, 89, 134, 86, 7, 141, 244, 215, 202, + 228, 147, 120, 111, 34, 89, 146, 175, 126, 153, 238, 91, 210, 251, 16, 108, 34, 78, 127, 179, + 168, 79, 10, 40, 220, 150, 111, 204, 252, 219, 140, 47, 113, 198, 28, 115, 246, 94, 186, 159, + 112, 215, 101, 170, 204, 6, 244, 4, 182, 99, 171, 52, 31, 139, 6, 56, 128, 74, 203, 20, 125, + 92, 191, 180, 213, 83, 146, 132, 97, 103, 255, 67, 190, 0, 5, 74, 230, 10, 122, 134, 38, 45, + 53, 27, 197, 185, 19, 11, 237, 206, 202, 25, 6, 186, 144, 199, 11, 202, 137, 10, 52, 52, 117, + 178, 255, 40, 125, 87, 198, 146, 101, 7, 20, 13, 8, 102, 206, 175, 145, 162, 115, 9, 134, 227, + 97, 227, 185, 94, 230, 57, 120, 253, 93, 57, 234, 70, 201, 233, 6, 155, 231, 163, 174, 180, 72, + 160, 118, 75, 156, 59, 125, 23, 126, 67, 191, 28, 131, 146, 28, 85, 181, 74, 110, 233, 23, 62, + 69, 131, 88, 163, 5, 77, 18, 227, 165, 206, 62, 241, 177, 90, 153, 29, 229, 78, 14, 111, 110, + 78, 215, 45, 12, 166, 91, 34, 198, 160, 172, 225, 255, 142, 203, 37, 227, 121, 150, 13, 35, 67, + 154, 16, 227, 30, 242, 62, 160, 12, 126, 40, 197, 25, 210, 9, 78, 185, 135, 235, 52, 63, 5, 9, + 212, 91, 194, 109, 186, 115, 222, 218, 200, 177, 32, 221, 44, 131, 34, 41, 63, 51, 30, 249, 62, + 215, 171, 210, 126, 202, 179, 229, 244, 56, 26, 14, 99, 243, 122, 141, 250, 16, 159, 72, 28, + 128, 148, 68, 118, 246, 102, 120, 186, 229, 0, 162, 195, 82, 69, 130, 225, 106, 78, 21, 87, + 163, 5, 143, 6, 28, 94, 219, 207, 35, 64, 106, 204, 3, 246, 56, 216, 83, 197, 33, 132, 237, + 125, 195, 126, 55, 26, 79, 198, 242, 30, 10, 164, 127, 9, 78, 248, 104, 211, 238, 6, 117, 118, + 94, 6, 85, 189, 212, 113, 15, 213, 117, 7, 106, 232, 147, 100, 169, 45, 141, 228, 49, 201, 87, + 143, 182, 104, 226, 219, 180, 214, 150, 73, 122, 76, 4, 165, 114, 66, 134, 122, 159, 85, 155, + 75, 37, 148, 112, 210, 227, 13, 30, 150, 106, 164, 97, 108, 109, 219, 148, 8, 111, 197, 81, + 105, 191, 89, 201, 179, 167, 169, 83, 121, 25, 113, 103, 45, 21, 158, 167, 96, 37, 248, 169, + 135, 18, 30, 147, 93, 66, 24, 212, 92, 50, 77, 83, 238, 101, 121, 88, 69, 243, 42, 154, 185, + 67, 121, 123, 122, 225, 203, 250, 177, 33, 227, 134, 213, 79, 24, 65, 237, 252, 97, 33, 91, + 109, 50, 157, 134, 239, 215, 42, 232, 248, 182, 152, 254, 156, 189, 63, 185, 252, 174, 33, 102, + 96, 186, 113, 178, 248, 235, 181, 60, 107, 131, 231, 95, 197, 17, 229, 210, 37, 246, 30, 125, + 240, 137, 243, 30, 252, 96, 90, 136, 157, 27, 177, 85, 254, 201, 58, 163, 100, 179, 91, 226, + 80, 149, 113, 137, 111, 49, 57, 196, 178, 17, 215, 48, 185, 73, 25, 41, 126, 220, 34, 37, 6, + 198, 18, 55, 58, 163, 245, 89, 152, 29, 180, 97, 148, 88, 166, 114, 246, 152, 33, 78, 131, 90, + 201, 141, 116, 184, 234, 73, 66, 234, 9, 163, 159, 60, 74, 52, 211, 228, 136, 120, 194, 172, + 230, 245, 153, 173, 6, 152, 1, 8, 166, 77, 244, 6, 40, 72, 143, 206, 123, 37, 235, 165, 189, + 214, 146, 125, 25, 228, 8, 108, 194, 27, 60, 39, 16, 32, 56, 95, 112, 88, 71, 222, 60, 250, 10, + 124, 29, 18, 94, 144, 40, 136, 239, 156, 1, 182, 133, 110, 165, 74, 105, 125, 169, 32, 48, 30, + 97, 131, 12, 9, 5, 209, 27, 67, 183, 240, 101, 72, 151, 175, 14, 218, 20, 226, 76, 35, 245, + 116, 75, 174, 112, 68, 154, 3, 65, 23, 162, 68, 253, 204, 127, 78, 152, 161, 228, 161, 99, 225, + 117, 93, 17, 238, 216, 195, 14, 49, 232, 135, 19, 195, 168, 139, 149, 118, 96, 92, 138, 230, + 212, 232, 112, 148, 251, 204, 76, 45, 129, 196, 29, 70, 182, 230, 22, 214, 203, 10, 137, 142, + 121, 187, 231, 238, 60, 121, 14, 111, 81, 40, 85, 192, 17, 46, 248, 157, 58, 82, 225, 52, 181, + 218, 126, 175, 53, 79, 134, 67, 149, 141, 111, 211, 106, 82, 232, 3, 56, 198, 182, 105, 228, + 218, 31, 247, 222, 168, 36, 167, 250, 112, 118, 98, 125, 97, 93, 235, 36, 58, 19, 52, 58, 30, + 47, 156, 165, 148, 89, 46, 116, 161, 96, 100, 163, 192, 123, 160, 18, 146, 103, 166, 18, 118, + 167, 194, 223, 138, 153, 150, 112, 9, 186, 181, 26, 36, 27, 122, 126, 90, 84, 133, 176, 148, + 200, 108, 10, 58, 208, 19, 207, 93, 162, 156, 237, 223, 176, 89, 182, 170, 121, 10, 236, 250, + 202, 31, 177, 102, 133, 137, 214, 208, 212, 140, 73, 225, 169, 174, 254, 23, 176, 218, 136, + 242, 220, 6, 150, 81, 225, 125, 251, 88, 2, 117, 232, 10, 138, 138, 162, 32, 74, 207, 220, 149, + 127, 236, 29, 135, 92, 255, 214, 86, 47, 162, 140, 200, 68, 120, 109, 140, 15, 191, 201, 253, + 98, 88, 151, 186, 45, 87, 118, 5, 234, 110, 238, 40, 252, 138, 88, 80, 195, 165, 154, 181, 226, + 173, 90, 162, 158, 31, 24, 197, 235, 140, 189, 60, 114, 44, 255, 29, 125, 228, 215, 87, 97, 69, + 188, 223, 63, 185, 165, 247, 19, 210, 22, 187, 242, 127, 45, 65, 101, 32, 210, 25, 128, 179, + 121, 249, 157, 36, 232, 172, 217, 23, 67, 124, 229, 13, 131, 183, 13, 50, 52, 0, 194, 243, 76, + 33, 88, 13, 70, 137, 9, 112, 103, 27, 96, 7, 109, 66, 84, 152, 254, 200, 3, 33, 2, 200, 18, 94, + 122, 175, 28, 149, 203, 21, 182, 60, 11, 162, 205, 201, 83, 101, 1, 77, 65, 92, 97, 71, 85, 22, + 4, 51, 18, 187, 155, 48, 199, 146, 237, 238, 26, 109, 97, 216, 168, 214, 8, 176, 114, 105, 47, + 63, 20, 169, 120, 207, 151, 234, 224, 216, 125, 115, 48, 91, 72, 122, 245, 203, 169, 139, 178, + 190, 189, 69, 36, 246, 116, 182, 32, 192, 90, 158, 49, 179, 209, 79, 145, 210, 164, 78, 135, + 112, 192, 33, 67, 58, 167, 118, 47, 252, 221, 239, 219, 155, 41, 193, 208, 61, 159, 29, 253, + 224, 86, 224, 119, 202, 0, 117, 121, 230, 93, 99, 51, 162, 34, 155, 253, 59, 89, 70, 143, 140, + 162, 124, 249, 250, 60, 119, 77, 244, 177, 143, 207, 162, 134, 48, 36, 162, 199, 175, 129, 48, + 95, 95, 67, 85, 224, 180, 47, 205, 5, 100, 173, 64, 35, 46, 198, 36, 212, 234, 238, 31, 249, + 239, 118, 79, 51, 1, 87, 141, 202, 181, 97, 7, 37, 228, 145, 72, 163, 87, 185, 215, 63, 125, + 159, 249, 180, 91, 13, 198, 62, 99, 242, 126, 186, 127, 83, 115, 136, 230, 110, 98, 240, 79, + 136, 122, 217, 18, 45, 122, 64, 75, 141, 188, 55, 123, 71, 163, 8, 9, 26, 204, 78, 38, 194, 85, + 144, 13, 252, 87, 66, 246, 80, 51, 1, 24, 37, 220, 209, 188, 213, 63, 158, 132, 109, 60, 99, + 26, 179, 43, 100, 26, 76, 30, 219, 221, 32, 112, 72, 26, 35, 20, 159, 178, 96, 76, 59, 121, 60, + 198, 172, 121, 251, 20, 145, 193, 111, 117, 133, 250, 178, 153, 165, 138, 51, 65, 247, 62, 122, + 240, 50, 214, 199, 239, 237, 221, 82, 142, 60, 157, 45, 90, 207, 104, 125, 31, 165, 181, 115, + 6, 75, 152, 183, 208, 3, 15, 166, 59, 244, 10, 144, 211, 78, 254, 230, 213, 236, 29, 248, 68, + 231, 103, 125, 113, 101, 28, 224, 201, 100, 45, 82, 62, 226, 216, 168, 77, 120, 199, 148, 99, + 17, 11, 228, 19, 48, 147, 189, 233, 10, 49, 87, 183, 208, 117, 145, 176, 36, 142, 87, 217, 90, + 245, 177, 198, 253, 186, 213, 49, 173, 6, 105, 167, 212, 104, 145, 241, 203, 75, 226, 196, 217, + 140, 22, 79, 0, 77, 66, 189, 166, 81, 50, 66, 174, 85, 202, 102, 234, 126, 99, 66, 210, 109, + 65, 31, 41, 197, 108, 226, 111, 80, 112, 226, 90, 119, 114, 50, 96, 75, 66, 54, 191, 134, 179, + 14, 121, 209, 163, 203, 255, 150, 15, 39, 52, 137, 110, 221, 246, 24, 92, 215, 195, 146, 184, + 192, 8, 107, 47, 76, 189, 215, 119, 41, 181, 244, 43, 38, 210, 21, 173, 63, 89, 50, 80, 62, 81, + 102, 54, 37, 203, 15, 48, 18, 227, 2, 110, 163, 108, 242, 248, 94, 148, 125, 249, 83, 239, 222, + 210, 88, 206, 10, 58, 193, 37, 6, 25, 173, 54, 65, 163, 6, 52, 202, 239, 22, 93, 151, 144, 179, + 245, 65, 47, 8, 248, 173, 206, 148, 91, 226, 97, 1, 49, 46, 189, 140, 20, 229, 193, 165, 196, + 38, 160, 186, 102, 167, 105, 248, 198, 97, 125, 140, 142, 7, 177, 91, 195, 14, 56, 81, 225, 83, + 97, 85, 118, 67, 42, 150, 174, 74, 189, 222, 93, 108, 229, 39, 11, 156, 205, 48, 26, 106, 195, + 77, 255, 238, 165, 191, 136, 123, 25, 17, 205, 244, 228, 253, 102, 41, 43, 28, 110, 166, 75, + 43, 223, 164, 129, 109, 180, 244, 149, 157, 57, 60, 113, 126, 8, 171, 9, 151, 93, 196, 19, 191, + 65, 116, 5, 211, 91, 69, 204, 112, 102, 82, 253, 74, 250, 105, 67, 36, 242, 122, 58, 208, 168, + 183, 208, 48, 170, 174, 72, 32, 45, 252, 232, 15, 73, 123, 14, 190, 203, 113, 41, 131, 51, 110, + 240, 69, 139, 215, 55, 170, 153, 205, 169, 186, 119, 32, 127, 15, 161, 255, 160, 227, 185, 90, + 55, 5, 88, 141, 91, 229, 87, 167, 221, 142, 220, 67, 88, 148, 171, 155, 47, 23, 160, 163, 174, + 253, 136, 14, 127, 119, 112, 45, 207, 58, 232, 27, 196, 201, 80, 113, 98, 140, 101, 248, 40, + 250, 17, 33, 81, 149, 169, 27, 100, 95, 105, 178, 13, 121, 16, 172, 233, 3, 251, 121, 47, 198, + 250, 1, 96, 180, 214, 225, 56, 230, 175, 221, 0, 168, 141, 128, 212, 98, 136, 35, 172, 160, 46, + 221, 107, 52, 30, 4, 78, 184, 248, 175, 141, 99, 223, 110, 115, 170, 13, 204, 60, 253, 133, + 101, 8, 187, 148, 148, 85, 99, 158, 152, 193, 96, 114, 12, 66, 107, 168, 100, 151, 148, 63, + 240, 247, 156, 14, 20, 238, 138, 67, 83, 104, 156, 6, 52, 224, 56, 217, 219, 119, 212, 229, + 130, 26, 125, 105, 18, 174, 201, 116, 227, 211, 236, 153, 241, 248, 86, 140, 234, 103, 24, 99, + 251, 40, 120, 252, 59, 215, 248, 68, 199, 183, 191, 174, 46, 220, 94, 116, 225, 210, 241, 210, + 144, 246, 65, 125, 123, 3, 2, 13, 186, 18, 138, 6, 123, 246, 178, 169, 15, 81, 101, 127, 87, + 184, 149, 99, 11, 214, 110, 253, 254, 149, 216, 66, 225, 92, 70, 194, 224, 176, 134, 75, 95, + 147, 185, 59, 246, 16, 163, 202, 110, 136, 26, 165, 214, 120, 172, 34, 107, 91, 233, 145, 211, + 231, 231, 129, 189, 252, 38, 44, 214, 207, 154, 82, 118, 132, 3, 216, 140, 221, 142, 8, 109, + 250, 141, 248, 98, 43, 158, 96, 61, 70, 55, 234, 91, 143, 242, 232, 95, 123, 244, 38, 87, 160, + 0, 2, 91, 97, 51, 38, 65, 244, 77, 102, 67, 232, 227, 56, 66, 22, 218, 126, 126, 188, 78, 114, + 133, 105, 74, 215, 246, 153, 63, 189, 204, 10, 114, 194, 19, 23, 167, 12, 58, 252, 41, 152, + 141, 87, 243, 68, 195, 172, 163, 255, 158, 171, 62, 16, 202, 206, 250, 240, 235, 102, 245, 42, + 227, 195, 216, 179, 1, 215, 196, 194, 246, 233, 27, 238, 167, 23, 97, 30, 0, 85, 166, 48, 42, + 153, 157, 242, 234, 37, 189, 151, 94, 176, 56, 211, 57, 70, 12, 10, 149, 110, 30, 51, 117, 214, + 57, 197, 53, 175, 191, 137, 35, 45, 151, 239, 222, 238, 172, 135, 143, 195, 151, 189, 44, 107, + 221, 188, 119, 231, 122, 116, 76, 117, 139, 69, 0, 168, 88, 2, 200, 242, 205, 150, 254, 105, + 48, 180, 57, 77, 115, 197, 175, 153, 195, 9, 248, 128, 207, 198, 124, 38, 251, 205, 246, 76, + 121, 88, 169, 255, 59, 52, 238, 72, 231, 87, 122, 73, 211, 179, 106, 241, 221, 3, 134, 20, 231, + 28, 192, 129, 177, 11, 120, 33, 172, 38, 97, 57, 160, 78, 46, 52, 181, 148, 176, 1, 111, 242, + 36, 138, 214, 153, 128, 249, 108, 139, 3, 74, 31, 251, 177, 162, 240, 233, 255, 21, 79, 249, + 237, 140, 203, 96, 53, 155, 237, 117, 164, 221, 16, 41, 212, 13, 206, 115, 165, 69, 231, 4, + 250, 104, 0, 69, 227, 197, 66, 148, 99, 210, 119, 167, 197, 188, 79, 127, 219, 55, 133, 68, 99, + 212, 193, 109, 88, 182, 105, 38, 26, 20, 236, 191, 101, 250, 132, 93, 241, 179, 121, 85, 237, + 159, 132, 210, 209, 236, 59, 96, 32, 76, 103, 62, 240, 181, 77, 6, 121, 38, 0, 106, 219, 130, + 98, 130, 75, 200, 135, 180, 178, 181, 41, 159, 139, 42, 140, 21, 35, 167, 27, 40, 219, 18, 114, + 216, 18, 55, 148, 147, 150, 75, 156, 108, 207, 169, 30, 100, 137, 166, 117, 199, 238, 105, 128, + 39, 200, 28, 86, 72, 125, 231, 252, 84, 187, 145, 165, 176, 93, 175, 142, 112, 234, 188, 77, + 128, 187, 31, 22, 108, 192, 42, 155, 238, 6, 231, 100, 5, 139, 99, 77, 78, 248, 148, 143, 207, + 2, 10, 230, 3, 158, 215, 100, 5, 226, 236, 207, 0, 191, 34, 12, 204, 154, 101, 195, 190, 121, + 77, 42, 77, 123, 104, 93, 128, 73, 202, 205, 205, 158, 20, 34, 228, 76, 159, 227, 223, 237, 3, + 249, 108, 220, 88, 9, 183, 114, 146, 123, 100, 179, 136, 228, 84, 143, 41, 234, 183, 128, 218, + 125, 135, 122, 243, 201, 241, 0, 84, 82, 168, 199, 164, 133, 183, 234, 73, 1, 76, 82, 31, 209, + 93, 207, 80, 104, 100, 211, 148, 81, 113, 78, 119, 156, 200, 102, 201, 23, 90, 206, 115, 188, + 74, 90, 75, 176, 121, 74, 64, 149, 70, 54, 118, 156, 56, 221, 89, 125, 160, 34, 65, 235, 73, + 34, 176, 169, 177, 37, 157, 136, 168, 68, 80, 115, 189, 248, 53, 83, 179, 176, 38, 198, 154, + 247, 41, 190, 138, 151, 247, 70, 26, 206, 255, 184, 64, 229, 230, 19, 72, 144, 175, 123, 142, + 163, 55, 109, 35, 163, 1, 144, 52, 185, 174, 150, 191, 28, 229, 150, 59, 108, 126, 14, 72, 243, + 135, 200, 241, 185, 187, 85, 253, 25, 228, 105, 10, 217, 74, 170, 139, 221, 65, 75, 20, 3, 75, + 151, 199, 49, 138, 17, 176, 93, 73, 19, 40, 104, 201, 143, 251, 167, 129, 220, 33, 149, 123, + 187, 217, 47, 216, 164, 116, 38, 149, 213, 127, 5, 213, 239, 8, 212, 50, 179, 255, 188, 30, 71, + 49, 193, 85, 205, 185, 115, 243, 212, 45, 224, 1, 147, 224, 18, 38, 233, 106, 67, 253, 116, 49, + 1, 45, 2, 193, 132, 163, 164, 79, 101, 90, 213, 151, 73, 168, 176, 255, 207, 250, 202, 137, 25, + 66, 204, 28, 183, 225, 139, 174, 161, 164, 183, 95, 140, 231, 85, 172, 199, 11, 193, 81, 79, + 90, 224, 196, 12, 65, 93, 108, 143, 242, 183, 226, 218, 53, 158, 236, 156, 115, 46, 48, 41, + 255, 238, 237, 34, 6, 73, 7, 27, 202, 229, 87, 161, 194, 126, 185, 60, 255, 56, 38, 27, 89, + 197, 180, 5, 172, 90, 74, 160, 129, 197, 248, 152, 44, 104, 198, 248, 167, 15, 95, 231, 105, + 169, 237, 241, 127, 91, 99, 67, 249, 177, 146, 246, 10, 157, 173, 175, 154, 187, 9, 240, 129, + 179, 71, 102, 209, 166, 185, 113, 227, 100, 198, 199, 229, 35, 186, 95, 37, 1, 47, 54, 236, + 216, 237, 107, 210, 176, 51, 132, 239, 72, 80, 8, 115, 38, 44, 241, 97, 88, 57, 25, 21, 77, 6, + 94, 165, 193, 147, 122, 61, 130, 197, 222, 58, 140, 75, 96, 61, 1, 101, 99, 252, 5, 40, 143, + 199, 143, 234, 44, 246, 12, 230, 63, 52, 243, 57, 160, 102, 136, 148, 169, 70, 248, 211, 59, + 92, 147, 76, 149, 100, 24, 221, 223, 24, 183, 23, 191, 86, 153, 135, 96, 86, 229, 31, 223, 44, + 194, 245, 217, 65, 184, 48, 151, 90, 154, 19, 225, 217, 28, 138, 225, 171, 55, 33, 30, 180, + 228, 26, 107, 252, 109, 67, 9, 40, 251, 127, 146, 115, 182, 46, 114, 17, 194, 161, 95, 117, + 147, 163, 84, 254, 173, 195, 41, 104, 205, 111, 59, 42, 250, 149, 245, 7, 71, 22, 112, 194, + 226, 22, 87, 166, 1, 30, 0, 118, 67, 208, 44, 179, 23, 45, 153, 176, 208, 220, 107, 132, 190, + 56, 211, 184, 250, 174, 67, 228, 19, 173, 106, 181, 219, 219, 207, 52, 201, 154, 127, 201, 250, + 31, 80, 240, 99, 83, 29, 81, 109, 236, 181, 76, 15, 201, 87, 107, 253, 155, 126, 23, 50, 31, + 211, 68, 209, 99, 225, 93, 245, 101, 197, 244, 246, 37, 67, 136, 197, 129, 45, 107, 29, 11, 13, + 223, 177, 119, 5, 241, 247, 55, 225, 8, 27, 50, 195, 148, 87, 247, 43, 206, 247, 228, 202, 10, + 48, 35, 47, 46, 28, 119, 85, 221, 48, 170, 95, 242, 28, 140, 104, 93, 140, 226, 194, 219, 163, + 17, 133, 31, 215, 255, 149, 205, 83, 204, 93, 82, 211, 215, 170, 200, 221, 191, 76, 0, 172, + 190, 70, 49, 245, 232, 67, 92, 37, 61, 204, 12, 58, 125, 63, 157, 206, 151, 46, 230, 196, 27, + 203, 94, 90, 130, 225, 186, 135, 176, 222, 191, 233, 236, 158, 114, 11, 11, 85, 5, 55, 108, + 211, 107, 12, 212, 201, 178, 233, 106, 1, 149, 50, 61, 10, 180, 114, 228, 23, 174, 115, 251, + 122, 31, 210, 231, 181, 158, 1, 227, 205, 68, 111, 119, 89, 18, 48, 96, 212, 165, 14, 216, 41, + 230, 65, 143, 42, 124, 81, 137, 225, 127, 36, 23, 168, 214, 28, 162, 24, 198, 213, 146, 17, + 133, 169, 212, 213, 240, 97, 20, 136, 117, 94, 140, 188, 110, 210, 93, 234, 78, 97, 105, 178, + 114, 1, 225, 122, 86, 229, 232, 229, 101, 194, 238, 82, 255, 214, 215, 93, 71, 226, 179, 136, + 116, 167, 81, 157, 146, 20, 12, 173, 145, 68, 129, 124, 103, 221, 13, 255, 234, 155, 57, 126, + 171, 98, 221, 186, 132, 171, 68, 77, 94, 101, 0, 222, 25, 211, 50, 169, 205, 42, 102, 37, 133, + 212, 46, 28, 197, 87, 237, 182, 181, 153, 7, 156, 108, 134, 75, 217, 203, 191, 124, 130, 222, + 126, 120, 11, 69, 72, 8, 45, 245, 40, 253, 213, 101, 166, 59, 251, 152, 199, 171, 142, 62, 48, + 211, 53, 227, 248, 116, 236, 171, 76, 107, 126, 94, 199, 189, 142, 248, 85, 210, 53, 71, 56, + 15, 77, 221, 93, 74, 227, 180, 12, 251, 224, 107, 201, 241, 215, 100, 18, 63, 221, 112, 242, + 54, 22, 81, 161, 249, 6, 89, 142, 52, 245, 0, 133, 250, 147, 190, 82, 145, 79, 228, 0, 232, + 234, 249, 127, 53, 81, 111, 204, 27, 222, 160, 83, 226, 127, 126, 121, 200, 2, 51, 161, 183, 8, + 132, 222, 86, 132, 148, 72, 1, 171, 80, 172, 137, 58, 166, 199, 77, 222, 193, 248, 86, 29, 211, + 95, 120, 110, 35, 54, 178, 239, 167, 147, 236, 242, 180, 143, 51, 18, 84, 57, 175, 242, 163, + 171, 114, 84, 67, 186, 210, 254, 189, 156, 85, 206, 12, 15, 54, 114, 220, 80, 34, 109, 195, 16, + 208, 77, 190, 147, 104, 80, 0, 197, 238, 121, 16, 23, 111, 190, 95, 250, 235, 214, 32, 62, 191, + 192, 236, 149, 159, 240, 55, 67, 86, 253, 28, 16, 37, 228, 148, 209, 244, 133, 211, 105, 43, + 141, 92, 110, 69, 87, 94, 229, 201, 241, 231, 5, 212, 250, 184, 196, 164, 20, 124, 167, 184, + 57, 193, 201, 253, 212, 201, 168, 134, 248, 180, 175, 1, 65, 248, 186, 250, 37, 254, 66, 113, + 51, 86, 56, 146, 97, 197, 105, 67, 243, 204, 74, 166, 127, 209, 238, 112, 174, 155, 188, 177, + 17, 208, 145, 198, 69, 224, 150, 44, 68, 86, 28, 19, 224, 149, 24, 21, 2, 72, 105, 132, 96, + 219, 64, 98, 50, 189, 94, 197, 153, 10, 103, 120, 217, 220, 49, 211, 207, 201, 126, 122, 64, + 122, 158, 14, 161, 226, 89, 175, 46, 101, 200, 149, 55, 12, 134, 214, 205, 2, 34, 5, 75, 196, + 146, 219, 255, 8, 234, 172, 141, 210, 134, 40, 128, 129, 94, 115, 248, 145, 154, 196, 232, 180, + 31, 175, 12, 144, 3, 235, 27, 87, 32, 127, 145, 27, 59, 241, 62, 228, 87, 52, 143, 143, 11, + 181, 45, 84, 110, 107, 250, 161, 238, 52, 32, 123, 12, 192, 68, 157, 156, 184, 76, 186, 141, + 113, 57, 211, 13, 122, 139, 172, 235, 17, 169, 162, 45, 72, 253, 148, 182, 200, 216, 97, 220, + 56, 176, 199, 20, 85, 106, 103, 12, 168, 24, 52, 247, 225, 195, 20, 103, 204, 41, 54, 15, 195, + 101, 219, 239, 211, 195, 176, 250, 53, 254, 188, 34, 69, 16, 205, 31, 127, 221, 41, 239, 166, + 248, 213, 163, 221, 155, 22, 204, 112, 188, 219, 254, 135, 240, 194, 168, 230, 220, 35, 76, + 197, 248, 20, 155, 208, 117, 155, 119, 201, 43, 171, 157, 125, 124, 130, 167, 112, 197, 108, + 229, 203, 60, 151, 54, 216, 27, 88, 61, 113, 186, 98, 202, 142, 140, 228, 86, 50, 248, 240, 83, + 59, 44, 60, 150, 175, 107, 42, 144, 224, 79, 97, 48, 29, 142, 64, 255, 94, 206, 159, 72, 68, + 251, 91, 158, 41, 31, 98, 208, 156, 218, 43, 191, 77, 118, 35, 230, 186, 38, 102, 49, 196, 241, + 129, 52, 189, 18, 65, 99, 121, 22, 63, 168, 10, 139, 63, 81, 212, 61, 150, 237, 158, 216, 178, + 116, 5, 208, 194, 33, 59, 184, 140, 69, 222, 89, 61, 194, 143, 113, 78, 215, 55, 56, 179, 37, + 24, 177, 141, 102, 191, 191, 14, 195, 144, 160, 166, 89, 155, 92, 74, 104, 35, 29, 239, 3, 77, + 196, 14, 169, 79, 62, 87, 94, 236, 167, 206, 218, 183, 64, 251, 187, 248, 147, 141, 20, 48, 60, + 49, 91, 170, 184, 116, 38, 96, 72, 8, 94, 194, 1, 136, 250, 20, 88, 185, 64, 56, 152, 20, 122, + 60, 154, 105, 211, 164, 196, 25, 28, 146, 11, 4, 229, 20, 27, 132, 198, 193, 142, 29, 250, 51, + 143, 107, 113, 11, 178, 133, 221, 129, 26, 44, 163, 95, 187, 13, 21, 22, 50, 44, 8, 141, 234, + 69, 13, 98, 204, 188, 227, 174, 189, 13, 247, 144, 33, 125, 83, 162, 213, 130, 73, 19, 52, 14, + 201, 118, 114, 139, 46, 178, 118, 55, 136, 78, 220, 91, 75, 205, 232, 44, 104, 51, 248, 39, 98, + 126, 147, 6, 86, 159, 120, 51, 193, 130, 7, 104, 250, 193, 92, 23, 76, 15, 70, 6, 23, 157, 123, + 111, 168, 187, 129, 103, 31, 155, 148, 249, 243, 145, 190, 11, 15, 142, 130, 203, 89, 255, 169, + 142, 75, 72, 57, 189, 225, 166, 224, 180, 171, 168, 100, 39, 248, 253, 190, 148, 79, 188, 224, + 54, 169, 184, 106, 62, 93, 21, 253, 144, 255, 226, 97, 60, 108, 150, 88, 213, 119, 247, 81, + 208, 143, 131, 166, 65, 128, 200, 69, 233, 86, 69, 132, 166, 60, 96, 116, 209, 64, 170, 152, + 253, 194, 179, 235, 203, 70, 239, 76, 50, 70, 156, 150, 176, 98, 225, 215, 251, 220, 123, 125, + 239, 193, 183, 242, 51, 247, 217, 114, 65, 228, 183, 21, 237, 142, 111, 140, 108, 72, 204, 86, + 14, 39, 217, 98, 80, 237, 127, 130, 132, 220, 160, 80, 83, 112, 243, 98, 192, 38, 59, 95, 84, + 78, 120, 218, 152, 121, 235, 58, 106, 24, 148, 196, 133, 211, 157, 77, 171, 176, 99, 43, 24, + 81, 66, 24, 196, 88, 58, 255, 214, 172, 145, 225, 140, 114, 107, 40, 119, 149, 69, 51, 148, 93, + 175, 183, 31, 55, 56, 200, 181, 127, 60, 89, 205, 42, 231, 0, 52, 154, 23, 146, 29, 63, 5, 0, + 233, 179, 78, 159, 162, 44, 7, 149, 251, 107, 254, 166, 68, 180, 24, 27, 11, 192, 193, 213, + 118, 243, 164, 27, 141, 53, 133, 80, 71, 74, 188, 13, 109, 71, 186, 200, 171, 68, 176, 167, + 208, 136, 194, 69, 118, 177, 158, 86, 63, 126, 235, 80, 184, 24, 166, 172, 96, 193, 93, 65, + 176, 97, 184, 46, 146, 220, 26, 150, 31, 173, 205, 22, 108, 36, 115, 71, 8, 181, 237, 138, 100, + 109, 231, 156, 243, 145, 70, 9, 92, 240, 178, 43, 127, 14, 91, 209, 227, 131, 57, 64, 125, 50, + 158, 90, 94, 243, 59, 165, 199, 37, 28, 216, 15, 243, 45, 97, 194, 247, 254, 219, 97, 174, 254, + 141, 60, 139, 16, 2, 8, 64, 234, 254, 60, 161, 231, 89, 132, 105, 229, 228, 244, 110, 218, 133, + 115, 19, 59, 226, 189, 111, 124, 116, 51, 102, 139, 169, 143, 79, 143, 232, 92, 144, 96, 6, + 205, 133, 105, 227, 10, 66, 166, 123, 77, 126, 234, 116, 44, 222, 143, 70, 57, 21, 20, 192, + 142, 199, 45, 28, 39, 84, 174, 49, 25, 85, 154, 37, 232, 1, 154, 134, 8, 147, 147, 111, 228, + 82, 76, 136, 137, 111, 104, 63, 179, 134, 224, 193, 208, 182, 167, 235, 100, 46, 153, 78, 72, + 208, 74, 144, 224, 124, 158, 82, 56, 111, 200, 68, 133, 60, 115, 102, 218, 186, 32, 104, 23, + 129, 168, 52, 88, 235, 247, 196, 238, 26, 79, 217, 4, 54, 233, 134, 142, 86, 87, 180, 161, 186, + 252, 161, 232, 117, 173, 10, 113, 131, 194, 85, 205, 17, 197, 90, 152, 7, 208, 140, 90, 42, 8, + 231, 139, 97, 134, 248, 70, 95, 0, 250, 181, 58, 163, 119, 46, 65, 245, 174, 178, 231, 110, + 139, 186, 92, 247, 228, 222, 204, 160, 136, 117, 215, 202, 158, 66, 235, 180, 237, 253, 131, + 95, 15, 183, 191, 66, 191, 109, 190, 94, 160, 233, 23, 163, 247, 94, 47, 253, 43, 11, 52, 205, + 187, 249, 189, 117, 67, 59, 56, 219, 204, 127, 61, 130, 72, 222, 247, 204, 64, 173, 192, 192, + 72, 207, 157, 17, 242, 42, 4, 45, 213, 76, 73, 180, 9, 34, 203, 229, 140, 97, 48, 222, 82, 69, + 206, 111, 101, 30, 30, 250, 34, 90, 158, 36, 98, 120, 198, 226, 156, 208, 180, 200, 245, 234, + 95, 130, 96, 41, 224, 142, 249, 168, 165, 230, 242, 189, 132, 127, 238, 144, 112, 85, 12, 57, + 242, 62, 149, 181, 98, 236, 251, 133, 0, 23, 163, 215, 143, 97, 202, 208, 249, 33, 90, 83, 65, + 118, 196, 76, 27, 184, 241, 203, 21, 187, 212, 57, 152, 244, 25, 7, 213, 102, 148, 94, 226, + 161, 43, 35, 210, 52, 244, 252, 213, 29, 98, 196, 99, 231, 143, 24, 39, 137, 254, 230, 187, 79, + 222, 67, 70, 189, 108, 209, 34, 17, 86, 244, 62, 54, 207, 97, 89, 162, 224, 149, 23, 131, 248, + 211, 41, 14, 81, 95, 139, 223, 29, 184, 210, 116, 38, 248, 250, 145, 5, 115, 136, 104, 149, + 241, 102, 106, 176, 116, 129, 190, 2, 216, 250, 244, 147, 140, 123, 18, 112, 154, 0, 209, 246, + 252, 75, 154, 153, 250, 2, 154, 72, 104, 167, 47, 160, 56, 255, 117, 43, 66, 115, 166, 167, + 158, 235, 137, 253, 239, 69, 217, 66, 12, 27, 117, 191, 77, 136, 192, 46, 203, 29, 48, 122, + 209, 177, 97, 145, 219, 184, 48, 146, 6, 160, 123, 154, 77, 165, 119, 207, 12, 96, 241, 244, + 84, 123, 122, 38, 66, 118, 87, 236, 103, 237, 168, 134, 46, 97, 113, 11, 219, 74, 19, 135, 50, + 149, 241, 38, 161, 187, 181, 75, 168, 225, 82, 3, 53, 92, 197, 62, 43, 41, 178, 246, 123, 153, + 255, 5, 195, 51, 232, 77, 37, 18, 163, 167, 73, 109, 35, 208, 114, 238, 71, 123, 218, 72, 240, + 78, 12, 12, 61, 127, 148, 67, 195, 145, 141, 41, 212, 101, 33, 151, 164, 46, 235, 14, 127, 43, + 210, 139, 175, 71, 131, 219, 17, 154, 152, 155, 8, 191, 57, 197, 59, 108, 105, 139, 212, 174, + 245, 173, 15, 105, 200, 3, 84, 73, 129, 150, 33, 77, 244, 242, 73, 83, 87, 222, 148, 191, 82, + 99, 53, 171, 81, 206, 59, 130, 103, 145, 54, 127, 214, 59, 217, 109, 196, 116, 162, 166, 141, + 212, 196, 145, 17, 199, 35, 62, 187, 15, 192, 62, 19, 235, 104, 46, 193, 3, 184, 196, 31, 186, + 92, 108, 119, 70, 188, 187, 221, 20, 180, 115, 187, 203, 57, 27, 168, 113, 161, 71, 21, 216, + 252, 2, 228, 96, 187, 132, 110, 196, 37, 207, 248, 126, 177, 222, 232, 103, 155, 0, 124, 104, + 254, 18, 211, 197, 255, 104, 184, 11, 157, 217, 164, 193, 225, 110, 205, 231, 66, 119, 138, + 195, 89, 104, 252, 115, 23, 38, 144, 247, 15, 247, 172, 252, 45, 129, 55, 204, 46, 181, 68, + 104, 176, 214, 80, 87, 25, 254, 4, 248, 239, 17, 109, 85, 152, 183, 212, 84, 42, 112, 50, 19, + 142, 246, 123, 253, 93, 235, 124, 58, 93, 57, 71, 173, 221, 70, 180, 180, 160, 10, 116, 13, + 247, 26, 189, 21, 165, 205, 75, 83, 165, 91, 122, 142, 230, 100, 47, 135, 238, 21, 252, 70, + 251, 168, 144, 54, 250, 121, 157, 166, 158, 86, 246, 107, 11, 161, 95, 217, 28, 43, 216, 37, + 127, 206, 150, 149, 183, 212, 168, 31, 109, 176, 49, 84, 228, 18, 11, 219, 25, 16, 86, 12, 115, + 191, 23, 239, 83, 93, 179, 53, 147, 74, 30, 150, 173, 152, 80, 78, 35, 68, 233, 74, 181, 75, + 95, 93, 232, 30, 24, 187, 139, 90, 211, 199, 73, 231, 227, 177, 232, 209, 61, 30, 215, 10, 88, + 236, 171, 253, 0, 158, 205, 228, 144, 73, 79, 139, 231, 196, 20, 104, 169, 109, 149, 250, 9, + 238, 245, 130, 196, 35, 156, 137, 203, 145, 47, 35, 9, 183, 57, 141, 47, 34, 110, 5, 252, 40, + 84, 3, 101, 201, 228, 195, 87, 156, 68, 73, 166, 252, 238, 75, 44, 15, 82, 244, 169, 192, 187, + 3, 125, 182, 56, 67, 0, 7, 100, 155, 226, 195, 25, 102, 248, 232, 214, 88, 228, 215, 98, 149, + 86, 235, 32, 108, 120, 13, 26, 115, 46, 41, 192, 244, 254, 167, 227, 58, 108, 149, 173, 74, + 179, 203, 41, 252, 28, 8, 57, 21, 87, 30, 207, 233, 31, 225, 240, 247, 242, 224, 29, 83, 241, + 229, 218, 30, 101, 111, 51, 197, 244, 91, 46, 178, 70, 106, 219, 79, 73, 197, 201, 213, 15, 46, + 2, 118, 188, 179, 40, 87, 250, 34, 241, 207, 143, 47, 175, 53, 174, 246, 62, 38, 235, 30, 234, + 25, 40, 32, 72, 78, 89, 93, 107, 234, 120, 146, 18, 224, 233, 252, 18, 52, 160, 240, 172, 164, + 115, 82, 42, 32, 67, 150, 28, 89, 239, 236, 91, 126, 18, 123, 254, 107, 252, 50, 91, 40, 195, + 125, 250, 95, 154, 241, 233, 5, 177, 163, 56, 37, 194, 215, 211, 206, 33, 160, 243, 119, 147, + 127, 250, 198, 1, 15, 167, 168, 110, 249, 32, 244, 1, 65, 85, 78, 151, 144, 244, 54, 61, 186, + 37, 58, 218, 5, 127, 70, 226, 101, 64, 229, 143, 230, 61, 177, 23, 131, 168, 25, 112, 11, 78, + 100, 134, 181, 59, 51, 239, 160, 103, 87, 11, 160, 243, 242, 121, 228, 218, 176, 70, 137, 255, + 112, 132, 235, 14, 103, 92, 65, 105, 173, 54, 29, 215, 70, 107, 126, 163, 148, 207, 82, 117, + 100, 47, 185, 135, 82, 9, 198, 103, 56, 248, 161, 40, 215, 23, 87, 140, 161, 227, 212, 104, 94, + 97, 166, 224, 62, 252, 170, 64, 93, 81, 177, 139, 253, 14, 15, 99, 180, 170, 81, 245, 68, 113, + 72, 169, 9, 73, 155, 227, 222, 121, 144, 71, 160, 248, 210, 39, 121, 83, 226, 123, 199, 114, + 202, 229, 142, 247, 107, 163, 125, 87, 72, 199, 50, 96, 96, 116, 151, 188, 181, 193, 254, 55, + 76, 203, 78, 97, 106, 19, 17, 212, 236, 113, 77, 1, 202, 238, 130, 49, 25, 77, 213, 150, 142, + 235, 56, 120, 26, 99, 213, 244, 162, 38, 204, 204, 115, 77, 235, 117, 180, 87, 240, 167, 24, + 124, 50, 20, 253, 234, 180, 214, 98, 81, 117, 218, 42, 42, 88, 190, 225, 100, 183, 168, 146, + 80, 141, 7, 211, 57, 83, 208, 238, 7, 209, 67, 117, 162, 161, 27, 202, 243, 46, 58, 253, 219, + 78, 142, 132, 180, 2, 115, 149, 211, 202, 155, 213, 242, 148, 35, 101, 4, 25, 122, 222, 14, + 155, 96, 67, 97, 99, 155, 249, 104, 32, 245, 75, 192, 85, 119, 109, 28, 122, 85, 165, 92, 213, + 188, 65, 131, 152, 128, 201, 66, 82, 246, 118, 169, 74, 62, 194, 201, 54, 156, 180, 184, 188, + 94, 59, 69, 163, 230, 16, 39, 45, 158, 207, 83, 198, 193, 50, 19, 253, 101, 76, 38, 156, 49, + 198, 182, 72, 97, 165, 24, 252, 134, 184, 30, 8, 120, 47, 97, 179, 39, 231, 250, 113, 152, 54, + 179, 38, 30, 193, 46, 167, 143, 248, 105, 223, 29, 194, 221, 136, 33, 135, 159, 45, 94, 151, + 236, 33, 151, 121, 38, 53, 132, 210, 10, 130, 111, 167, 190, 37, 226, 247, 233, 131, 33, 165, + 208, 244, 89, 215, 115, 66, 28, 77, 60, 83, 48, 67, 14, 17, 17, 81, 139, 156, 221, 87, 16, 218, + 175, 165, 156, 139, 66, 73, 127, 42, 189, 61, 37, 216, 203, 113, 109, 219, 132, 203, 17, 197, + 153, 161, 45, 70, 140, 239, 71, 30, 163, 136, 142, 36, 176, 75, 81, 177, 154, 19, 189, 11, 193, + 225, 234, 125, 176, 7, 119, 179, 16, 92, 159, 231, 60, 53, 145, 38, 179, 206, 223, 87, 201, 42, + 91, 14, 189, 246, 64, 202, 9, 123, 66, 92, 214, 102, 29, 10, 225, 248, 131, 97, 164, 53, 77, + 42, 172, 104, 54, 192, 197, 54, 194, 167, 71, 204, 144, 0, 188, 45, 78, 110, 110, 105, 238, 8, + 163, 40, 33, 99, 224, 187, 72, 146, 197, 81, 208, 88, 249, 35, 5, 79, 26, 128, 127, 13, 212, + 215, 214, 190, 58, 11, 216, 153, 153, 146, 55, 214, 203, 137, 138, 66, 173, 194, 156, 227, 64, + 186, 134, 240, 75, 65, 221, 71, 205, 167, 18, 200, 192, 162, 11, 71, 136, 189, 36, 227, 164, + 161, 125, 43, 241, 46, 61, 66, 214, 30, 247, 97, 246, 101, 6, 67, 255, 87, 76, 38, 197, 254, + 253, 91, 68, 33, 134, 66, 125, 170, 61, 170, 56, 111, 233, 159, 244, 247, 94, 67, 86, 144, 232, + 91, 236, 252, 77, 111, 185, 221, 60, 93, 42, 193, 14, 141, 130, 41, 36, 160, 220, 139, 105, 50, + 42, 46, 30, 162, 64, 83, 142, 141, 99, 69, 181, 67, 147, 244, 107, 176, 226, 29, 192, 40, 29, + 219, 147, 5, 164, 92, 24, 215, 6, 155, 254, 210, 21, 116, 129, 223, 51, 65, 57, 202, 35, 3, 66, + 161, 93, 172, 147, 165, 8, 87, 113, 218, 244, 191, 234, 115, 61, 4, 198, 84, 194, 217, 125, 63, + 181, 173, 216, 26, 182, 40, 114, 166, 141, 36, 81, 29, 225, 163, 13, 1, 160, 160, 179, 105, + 119, 147, 100, 207, 131, 231, 54, 230, 253, 93, 229, 103, 230, 182, 206, 226, 14, 150, 17, 31, + 94, 244, 158, 79, 153, 154, 249, 163, 143, 20, 189, 107, 82, 123, 231, 35, 137, 38, 36, 196, + 210, 245, 82, 16, 231, 153, 65, 192, 149, 28, 225, 174, 132, 153, 138, 46, 238, 241, 157, 25, + 10, 225, 144, 85, 2, 39, 220, 253, 190, 86, 54, 201, 59, 174, 234, 193, 8, 113, 228, 30, 250, + 59, 216, 213, 21, 45, 92, 155, 252, 148, 106, 63, 204, 172, 69, 166, 76, 75, 87, 240, 212, 29, + 214, 152, 205, 209, 183, 215, 167, 158, 71, 149, 173, 83, 211, 147, 152, 88, 155, 206, 143, 65, + 209, 33, 99, 6, 239, 2, 136, 41, 103, 144, 149, 189, 191, 46, 193, 44, 154, 49, 153, 149, 6, + 105, 61, 7, 49, 179, 145, 168, 14, 209, 75, 215, 231, 3, 118, 105, 164, 60, 104, 177, 57, 243, + 218, 66, 25, 108, 206, 139, 217, 67, 36, 117, 241, 113, 2, 173, 116, 31, 136, 146, 57, 81, 197, + 203, 109, 60, 41, 66, 38, 97, 203, 233, 83, 98, 163, 255, 119, 202, 22, 233, 95, 138, 2, 169, + 62, 174, 106, 73, 31, 174, 53, 42, 231, 164, 81, 130, 109, 6, 244, 34, 46, 108, 123, 169, 55, + 224, 239, 236, 100, 65, 51, 248, 113, 119, 255, 176, 71, 189, 212, 239, 171, 33, 34, 33, 150, + 165, 247, 40, 179, 255, 253, 78, 47, 150, 22, 138, 131, 161, 71, 133, 131, 50, 113, 82, 78, 21, + 141, 66, 122, 169, 230, 181, 201, 241, 67, 36, 76, 58, 121, 74, 192, 121, 185, 169, 219, 155, + 92, 234, 141, 37, 174, 65, 184, 126, 14, 181, 153, 149, 22, 138, 193, 143, 135, 252, 159, 7, + 51, 29, 110, 67, 246, 217, 2, 40, 81, 162, 142, 68, 240, 96, 80, 239, 222, 123, 54, 15, 230, + 27, 19, 189, 9, 65, 10, 15, 85, 166, 122, 150, 255, 53, 13, 225, 252, 220, 88, 130, 119, 124, + 240, 247, 148, 215, 223, 13, 253, 176, 223, 227, 106, 206, 251, 98, 145, 244, 183, 18, 121, + 248, 197, 161, 114, 159, 81, 82, 31, 78, 68, 74, 10, 70, 6, 70, 46, 158, 247, 170, 160, 62, 24, + 121, 33, 42, 108, 250, 205, 125, 93, 46, 254, 102, 65, 175, 125, 146, 222, 78, 235, 8, 79, 57, + 99, 150, 235, 215, 68, 233, 222, 114, 46, 246, 198, 53, 181, 63, 117, 215, 1, 192, 229, 108, + 109, 77, 38, 186, 87, 205, 80, 49, 29, 17, 27, 142, 105, 70, 175, 151, 122, 115, 170, 226, 232, + 31, 167, 23, 58, 18, 186, 231, 225, 227, 238, 200, 203, 38, 207, 8, 177, 88, 13, 210, 79, 50, + 74, 152, 75, 165, 240, 42, 199, 162, 90, 106, 163, 124, 125, 79, 18, 14, 59, 190, 21, 54, 76, + 67, 218, 15, 101, 222, 54, 173, 10, 205, 255, 106, 145, 144, 68, 103, 242, 197, 206, 151, 232, + 36, 230, 174, 75, 166, 83, 56, 134, 25, 227, 235, 245, 81, 175, 196, 113, 34, 50, 160, 167, + 236, 132, 69, 135, 16, 87, 53, 250, 181, 89, 63, 55, 199, 164, 49, 97, 41, 140, 46, 226, 191, + 227, 119, 43, 248, 98, 219, 254, 98, 116, 19, 66, 147, 252, 58, 107, 87, 69, 228, 16, 131, 202, + 61, 232, 32, 221, 253, 194, 196, 29, 75, 145, 192, 166, 63, 140, 33, 29, 52, 82, 102, 165, 125, + 106, 94, 209, 113, 200, 94, 201, 81, 163, 26, 80, 106, 135, 229, 65, 159, 179, 211, 97, 44, + 167, 120, 110, 134, 66, 243, 252, 213, 163, 9, 24, 38, 210, 31, 82, 72, 99, 57, 9, 61, 97, 213, + 13, 75, 7, 235, 253, 220, 195, 183, 95, 143, 114, 156, 219, 35, 159, 199, 76, 241, 148, 67, + 188, 180, 254, 15, 94, 218, 23, 198, 140, 9, 228, 158, 197, 220, 128, 96, 224, 179, 18, 212, + 57, 34, 117, 226, 234, 76, 230, 28, 254, 58, 155, 81, 43, 27, 87, 134, 215, 70, 139, 146, 59, + 94, 160, 224, 78, 151, 176, 86, 31, 132, 144, 59, 71, 79, 76, 26, 16, 71, 215, 36, 51, 199, + 214, 73, 78, 86, 73, 26, 28, 15, 233, 182, 171, 119, 118, 70, 44, 66, 134, 155, 191, 153, 245, + 97, 99, 49, 210, 169, 231, 107, 18, 189, 104, 241, 67, 188, 228, 237, 186, 2, 68, 151, 148, + 237, 168, 211, 101, 121, 69, 159, 108, 182, 134, 37, 89, 119, 137, 26, 226, 13, 58, 232, 242, + 230, 148, 122, 227, 210, 21, 177, 66, 21, 38, 64, 173, 76, 85, 127, 231, 153, 23, 147, 183, + 216, 118, 115, 91, 58, 251, 139, 38, 106, 169, 191, 159, 235, 168, 135, 109, 25, 123, 14, 99, + 19, 6, 29, 211, 136, 134, 144, 116, 53, 86, 92, 13, 135, 42, 221, 167, 92, 216, 141, 166, 61, + 135, 222, 190, 12, 180, 36, 22, 172, 215, 80, 100, 69, 90, 182, 148, 248, 153, 117, 144, 193, + 53, 25, 239, 111, 79, 239, 230, 17, 252, 43, 245, 158, 109, 15, 216, 250, 38, 77, 105, 151, 29, + 39, 152, 49, 248, 199, 94, 99, 180, 208, 38, 47, 23, 164, 217, 105, 106, 204, 61, 143, 206, + 212, 47, 233, 135, 28, 216, 240, 234, 88, 98, 254, 97, 91, 154, 103, 174, 66, 221, 58, 255, 11, + 76, 215, 252, 103, 29, 51, 89, 141, 166, 191, 150, 147, 163, 125, 61, 164, 30, 17, 17, 110, 37, + 186, 240, 228, 134, 34, 173, 223, 3, 125, 174, 230, 148, 223, 181, 47, 69, 84, 216, 146, 40, + 145, 217, 236, 39, 1, 101, 173, 27, 212, 65, 235, 131, 90, 218, 128, 247, 54, 166, 204, 94, 77, + 149, 99, 176, 10, 216, 201, 212, 158, 105, 1, 71, 185, 105, 213, 172, 80, 119, 195, 215, 201, + 10, 131, 191, 54, 119, 227, 115, 163, 86, 91, 139, 117, 55, 160, 237, 156, 42, 244, 215, 171, + 17, 228, 35, 173, 37, 72, 186, 218, 59, 115, 174, 121, 185, 180, 148, 122, 118, 153, 223, 242, + 145, 12, 221, 10, 8, 77, 255, 167, 14, 150, 209, 183, 38, 36, 23, 202, 194, 237, 134, 120, 249, + 162, 135, 79, 53, 240, 215, 122, 202, 216, 183, 196, 146, 156, 192, 225, 199, 141, 20, 40, 138, + 239, 1, 162, 41, 205, 41, 104, 53, 148, 255, 142, 57, 194, 71, 110, 233, 9, 55, 79, 31, 189, + 27, 150, 118, 82, 251, 47, 239, 243, 31, 252, 230, 174, 93, 121, 180, 151, 197, 188, 197, 151, + 202, 106, 245, 178, 207, 6, 160, 133, 186, 149, 15, 62, 183, 119, 170, 96, 211, 138, 44, 226, + 83, 207, 196, 108, 171, 2, 232, 175, 108, 68, 30, 106, 198, 70, 87, 233, 213, 251, 97, 239, + 235, 24, 201, 59, 39, 178, 230, 203, 221, 200, 117, 190, 70, 137, 102, 157, 201, 223, 53, 146, + 164, 118, 79, 2, 149, 162, 199, 232, 233, 195, 245, 164, 232, 32, 47, 162, 79, 161, 228, 20, + 191, 141, 179, 120, 81, 85, 16, 122, 106, 19, 16, 192, 7, 79, 70, 26, 108, 138, 23, 242, 77, + 164, 5, 17, 164, 170, 250, 177, 43, 242, 221, 189, 59, 85, 40, 85, 117, 103, 219, 23, 38, 171, + 82, 170, 190, 76, 183, 222, 230, 174, 129, 242, 174, 196, 114, 126, 14, 87, 149, 1, 177, 190, + 143, 15, 251, 162, 15, 18, 16, 37, 16, 73, 233, 211, 134, 65, 39, 141, 60, 252, 195, 214, 233, + 185, 119, 82, 70, 77, 115, 245, 18, 15, 230, 30, 141, 229, 92, 193, 133, 139, 231, 118, 44, + 128, 120, 51, 143, 130, 7, 59, 91, 173, 221, 222, 165, 75, 103, 203, 107, 43, 87, 103, 180, 30, + 248, 217, 235, 178, 144, 122, 28, 181, 216, 228, 200, 34, 72, 117, 203, 77, 125, 178, 210, 57, + 23, 60, 163, 210, 190, 29, 47, 182, 212, 223, 76, 9, 90, 199, 121, 78, 112, 228, 178, 221, 19, + 206, 231, 245, 161, 154, 45, 1, 238, 22, 12, 188, 42, 78, 238, 197, 16, 69, 193, 207, 216, 197, + 198, 3, 60, 50, 86, 55, 140, 113, 149, 34, 127, 57, 188, 170, 194, 179, 204, 146, 107, 63, 166, + 29, 22, 224, 46, 104, 6, 178, 159, 161, 2, 239, 9, 64, 221, 168, 28, 61, 164, 157, 74, 202, + 121, 187, 109, 242, 140, 157, 128, 162, 241, 114, 180, 181, 32, 213, 117, 203, 234, 55, 28, 68, + 240, 94, 95, 71, 118, 194, 92, 113, 202, 227, 11, 171, 170, 87, 139, 10, 222, 247, 82, 118, + 150, 204, 123, 223, 0, 197, 138, 47, 190, 181, 188, 32, 202, 145, 182, 142, 133, 134, 88, 23, + 113, 100, 82, 211, 179, 212, 251, 88, 151, 160, 14, 178, 44, 195, 252, 166, 203, 110, 183, 87, + 255, 227, 202, 20, 113, 252, 197, 255, 26, 136, 231, 225, 250, 89, 70, 73, 78, 243, 213, 1, + 219, 3, 90, 149, 49, 129, 155, 255, 67, 229, 100, 168, 135, 249, 96, 33, 154, 209, 205, 13, 6, + 183, 102, 162, 189, 44, 175, 92, 143, 47, 131, 227, 215, 153, 230, 125, 85, 241, 15, 166, 120, + 19, 14, 233, 35, 186, 55, 132, 72, 139, 241, 107, 245, 101, 248, 219, 120, 73, 90, 165, 4, 213, + 205, 121, 245, 93, 27, 70, 221, 116, 216, 56, 228, 237, 165, 53, 146, 15, 157, 209, 107, 209, + 37, 131, 43, 88, 141, 82, 139, 98, 141, 82, 251, 245, 174, 224, 185, 188, 115, 214, 169, 10, + 89, 112, 104, 15, 24, 190, 77, 135, 58, 145, 227, 153, 192, 81, 7, 49, 111, 16, 125, 57, 226, + 8, 133, 102, 213, 52, 226, 185, 34, 165, 207, 139, 179, 114, 39, 204, 198, 211, 34, 188, 180, + 73, 229, 194, 37, 207, 240, 102, 136, 168, 152, 107, 105, 211, 93, 189, 49, 93, 19, 181, 50, + 156, 98, 176, 242, 103, 34, 122, 59, 122, 34, 196, 40, 208, 126, 221, 162, 84, 243, 203, 96, + 227, 45, 190, 5, 232, 110, 34, 203, 89, 85, 185, 63, 183, 181, 47, 207, 18, 43, 133, 142, 144, + 204, 5, 66, 165, 22, 117, 209, 82, 163, 150, 37, 237, 88, 130, 165, 164, 51, 151, 39, 96, 220, + 137, 90, 159, 129, 0, 146, 102, 24, 48, 183, 80, 182, 170, 183, 183, 218, 112, 202, 125, 244, + 85, 32, 35, 190, 96, 48, 35, 0, 133, 38, 157, 43, 127, 111, 64, 190, 250, 239, 34, 3, 217, 86, + 184, 33, 7, 110, 88, 120, 232, 32, 174, 207, 107, 137, 149, 135, 101, 102, 193, 65, 210, 20, + 226, 37, 118, 85, 194, 218, 101, 162, 102, 91, 113, 162, 23, 77, 166, 36, 216, 170, 178, 247, + 19, 101, 99, 51, 78, 161, 144, 153, 122, 102, 161, 242, 153, 244, 171, 159, 211, 211, 233, 69, + 3, 37, 92, 131, 212, 172, 61, 150, 72, 28, 63, 88, 21, 68, 233, 24, 248, 174, 236, 97, 207, 27, + 168, 20, 61, 16, 147, 38, 194, 242, 155, 0, 144, 149, 53, 110, 17, 153, 36, 95, 250, 37, 51, + 84, 37, 35, 88, 119, 122, 229, 84, 162, 32, 143, 15, 171, 108, 203, 214, 217, 155, 121, 10, 51, + 63, 208, 122, 55, 73, 15, 186, 167, 248, 33, 122, 227, 43, 215, 7, 36, 99, 155, 214, 78, 195, + 125, 106, 9, 166, 194, 123, 182, 167, 192, 41, 91, 238, 96, 194, 32, 78, 97, 10, 219, 10, 155, + 131, 196, 191, 63, 242, 12, 227, 181, 164, 81, 11, 88, 84, 215, 163, 176, 137, 10, 181, 242, + 79, 92, 97, 211, 169, 177, 136, 249, 74, 205, 173, 54, 240, 117, 208, 162, 196, 121, 99, 109, + 12, 236, 156, 92, 178, 24, 218, 249, 181, 70, 195, 218, 84, 191, 123, 30, 78, 38, 14, 178, 81, + 208, 200, 201, 222, 116, 176, 117, 43, 93, 255, 210, 83, 211, 159, 22, 178, 55, 88, 187, 215, + 252, 219, 27, 189, 89, 74, 74, 169, 148, 236, 140, 31, 17, 37, 221, 168, 141, 74, 251, 134, + 212, 153, 108, 191, 112, 237, 201, 46, 183, 84, 96, 135, 92, 50, 224, 178, 43, 26, 125, 162, + 80, 138, 17, 67, 100, 75, 180, 190, 10, 238, 53, 239, 200, 178, 87, 90, 234, 233, 120, 143, + 238, 96, 188, 151, 183, 128, 145, 79, 151, 255, 128, 110, 172, 179, 50, 236, 6, 251, 29, 94, + 37, 172, 158, 17, 154, 32, 177, 68, 240, 105, 19, 163, 148, 143, 88, 6, 39, 58, 71, 186, 147, + 176, 75, 119, 240, 32, 9, 141, 250, 141, 242, 85, 2, 28, 68, 2, 197, 193, 17, 158, 126, 27, 71, + 179, 111, 165, 233, 218, 52, 58, 212, 30, 239, 9, 21, 215, 7, 38, 59, 139, 103, 3, 19, 242, + 208, 180, 161, 127, 193, 206, 181, 215, 120, 63, 246, 77, 36, 23, 131, 83, 4, 213, 31, 235, 99, + 115, 93, 110, 62, 71, 79, 189, 51, 7, 127, 123, 179, 5, 46, 139, 210, 215, 249, 222, 124, 161, + 54, 34, 114, 70, 147, 61, 113, 236, 125, 86, 251, 80, 77, 58, 171, 182, 62, 216, 108, 228, 98, + 147, 237, 99, 32, 107, 164, 102, 130, 85, 79, 163, 222, 132, 4, 23, 193, 163, 140, 45, 177, 77, + 84, 74, 117, 182, 186, 250, 118, 130, 75, 195, 2, 217, 96, 213, 67, 255, 28, 170, 90, 127, 213, + 167, 19, 138, 2, 194, 244, 198, 210, 238, 191, 128, 25, 113, 166, 197, 202, 103, 232, 134, 214, + 10, 191, 249, 76, 125, 55, 215, 92, 145, 228, 226, 7, 66, 234, 28, 156, 15, 115, 114, 205, 111, + 115, 222, 234, 166, 224, 48, 202, 73, 172, 180, 30, 93, 39, 185, 187, 68, 97, 56, 0, 202, 15, + 214, 229, 60, 145, 33, 104, 134, 141, 41, 90, 49, 77, 87, 126, 206, 191, 127, 148, 152, 170, + 93, 75, 44, 13, 152, 101, 48, 147, 231, 96, 232, 75, 137, 228, 118, 50, 0, 225, 5, 98, 12, 247, + 29, 53, 25, 82, 253, 32, 13, 69, 34, 139, 216, 171, 223, 26, 231, 128, 210, 165, 165, 200, 70, + 73, 193, 45, 54, 91, 193, 116, 239, 94, 238, 49, 241, 152, 168, 16, 136, 24, 18, 168, 108, 168, + 14, 134, 173, 61, 120, 214, 72, 75, 87, 157, 62, 154, 219, 192, 12, 114, 228, 85, 110, 139, + 116, 4, 204, 9, 32, 132, 146, 45, 164, 159, 179, 140, 241, 7, 188, 172, 48, 184, 189, 114, 120, + 104, 5, 237, 251, 85, 99, 52, 127, 196, 94, 116, 239, 21, 162, 54, 180, 151, 15, 75, 128, 124, + 231, 95, 175, 121, 91, 226, 17, 117, 15, 224, 41, 189, 154, 199, 139, 72, 112, 100, 10, 142, + 221, 144, 3, 89, 9, 46, 152, 170, 67, 48, 210, 8, 80, 37, 227, 81, 141, 225, 0, 80, 222, 153, + 38, 131, 194, 196, 118, 158, 68, 84, 165, 235, 46, 105, 221, 123, 127, 81, 109, 95, 35, 66, + 233, 23, 250, 30, 225, 61, 233, 238, 112, 235, 56, 124, 119, 83, 249, 135, 107, 69, 26, 247, + 226, 137, 136, 91, 19, 63, 121, 93, 228, 108, 204, 214, 30, 29, 166, 179, 103, 153, 141, 48, + 11, 65, 247, 230, 156, 144, 104, 245, 99, 157, 242, 235, 117, 233, 97, 23, 129, 233, 74, 178, + 21, 95, 20, 157, 113, 170, 182, 103, 1, 141, 14, 25, 248, 133, 16, 82, 152, 180, 238, 190, 95, + 65, 146, 32, 158, 65, 43, 41, 168, 105, 136, 181, 62, 207, 94, 210, 224, 251, 225, 212, 99, + 144, 70, 177, 247, 20, 108, 4, 134, 163, 55, 67, 58, 48, 53, 85, 10, 247, 83, 244, 134, 103, + 139, 12, 90, 232, 127, 65, 58, 214, 163, 40, 219, 71, 139, 198, 141, 119, 181, 218, 43, 219, + 77, 193, 236, 237, 179, 48, 176, 77, 20, 60, 82, 92, 21, 152, 117, 218, 142, 15, 220, 121, 119, + 98, 111, 184, 220, 235, 169, 219, 228, 152, 22, 38, 180, 192, 244, 88, 81, 57, 5, 217, 183, + 180, 219, 200, 145, 226, 246, 31, 196, 30, 254, 238, 251, 119, 45, 134, 61, 203, 102, 196, 87, + 73, 214, 76, 97, 21, 147, 170, 186, 73, 208, 22, 74, 67, 178, 82, 245, 100, 168, 177, 51, 133, + 222, 105, 119, 132, 119, 186, 81, 166, 253, 67, 60, 110, 60, 145, 236, 78, 205, 222, 151, 127, + 54, 103, 190, 18, 196, 220, 56, 71, 37, 200, 232, 33, 4, 157, 128, 91, 218, 154, 41, 182, 216, + 103, 66, 73, 239, 142, 128, 229, 62, 227, 183, 161, 66, 141, 6, 238, 184, 29, 179, 17, 126, 33, + 198, 10, 108, 230, 70, 98, 60, 69, 228, 202, 162, 46, 179, 92, 103, 112, 231, 80, 115, 247, + 194, 185, 201, 251, 157, 222, 144, 220, 166, 72, 46, 82, 28, 59, 225, 152, 209, 55, 75, 191, + 173, 168, 246, 158, 80, 213, 33, 218, 100, 82, 230, 255, 211, 27, 59, 200, 115, 4, 110, 126, + 106, 195, 248, 138, 219, 80, 133, 202, 27, 101, 17, 94, 201, 247, 13, 214, 94, 81, 184, 139, 4, + 59, 41, 132, 190, 213, 208, 210, 224, 75, 105, 24, 218, 88, 213, 151, 9, 134, 199, 193, 183, + 21, 76, 162, 84, 228, 10, 199, 67, 95, 201, 94, 241, 73, 92, 254, 218, 22, 49, 158, 136, 93, + 246, 91, 28, 206, 162, 86, 49, 180, 9, 54, 229, 130, 196, 124, 251, 161, 208, 247, 213, 53, 84, + 49, 114, 128, 37, 126, 234, 95, 215, 168, 232, 223, 105, 143, 206, 240, 204, 148, 25, 171, 101, + 123, 32, 49, 145, 57, 165, 12, 243, 252, 69, 3, 148, 94, 199, 147, 152, 193, 195, 247, 130, + 228, 218, 153, 121, 170, 117, 223, 78, 130, 167, 176, 84, 8, 227, 67, 118, 9, 172, 157, 46, + 220, 81, 140, 21, 147, 125, 78, 72, 138, 99, 182, 189, 76, 114, 129, 43, 162, 246, 15, 192, + 217, 168, 153, 14, 29, 23, 144, 21, 253, 153, 45, 129, 89, 137, 167, 11, 98, 57, 220, 108, 242, + 42, 173, 95, 212, 186, 32, 78, 158, 237, 203, 148, 32, 112, 116, 101, 165, 92, 91, 71, 207, + 204, 246, 23, 207, 5, 61, 81, 120, 218, 181, 203, 118, 101, 100, 46, 17, 132, 58, 152, 121, + 255, 251, 25, 86, 250, 152, 158, 228, 37, 37, 241, 193, 105, 168, 91, 196, 59, 247, 127, 126, + 196, 134, 165, 251, 193, 227, 189, 192, 198, 46, 55, 168, 151, 193, 219, 186, 206, 166, 79, + 173, 90, 176, 76, 89, 158, 14, 170, 52, 60, 54, 231, 112, 248, 87, 177, 113, 16, 141, 160, 245, + 160, 82, 229, 179, 20, 129, 143, 4, 134, 147, 218, 68, 74, 237, 224, 27, 82, 8, 209, 57, 41, + 52, 133, 213, 240, 114, 211, 136, 172, 97, 56, 148, 139, 28, 105, 10, 170, 66, 220, 102, 213, + 166, 50, 216, 79, 116, 139, 184, 154, 247, 176, 155, 0, 102, 234, 171, 205, 172, 9, 198, 236, + 111, 188, 122, 122, 165, 6, 96, 36, 232, 158, 199, 19, 189, 168, 122, 76, 229, 203, 96, 217, + 157, 23, 242, 108, 108, 155, 207, 204, 218, 194, 4, 71, 17, 2, 242, 15, 62, 58, 33, 208, 205, + 68, 137, 137, 191, 77, 49, 102, 175, 167, 193, 10, 135, 120, 110, 230, 31, 209, 215, 55, 179, + 237, 171, 195, 168, 149, 139, 203, 191, 137, 125, 200, 86, 25, 2, 9, 7, 199, 61, 57, 103, 227, + 19, 109, 79, 159, 221, 42, 22, 52, 126, 163, 116, 246, 215, 91, 27, 186, 63, 170, 135, 28, 209, + 189, 50, 197, 213, 71, 48, 6, 7, 30, 36, 251, 130, 79, 121, 125, 58, 26, 220, 16, 206, 117, + 132, 216, 199, 135, 123, 193, 114, 202, 212, 61, 133, 37, 238, 14, 32, 221, 73, 232, 57, 28, + 131, 243, 236, 167, 74, 32, 174, 108, 33, 54, 223, 115, 189, 37, 197, 56, 100, 16, 88, 78, 91, + 123, 205, 150, 48, 64, 53, 88, 99, 152, 202, 194, 250, 117, 210, 78, 167, 25, 77, 215, 62, 187, + 96, 254, 204, 208, 92, 106, 131, 16, 181, 138, 227, 69, 141, 13, 199, 173, 140, 204, 146, 67, + 166, 67, 8, 169, 249, 249, 94, 52, 193, 34, 40, 48, 46, 226, 129, 118, 193, 91, 110, 224, 76, + 225, 229, 95, 141, 255, 60, 208, 130, 146, 140, 89, 255, 209, 42, 98, 91, 31, 67, 178, 25, 172, + 6, 38, 239, 192, 157, 105, 82, 238, 152, 165, 216, 129, 85, 228, 135, 246, 123, 134, 167, 35, + 31, 254, 173, 176, 230, 197, 8, 123, 229, 230, 93, 3, 246, 202, 232, 224, 201, 31, 87, 230, + 118, 50, 61, 200, 213, 81, 145, 4, 69, 11, 22, 178, 171, 180, 100, 204, 91, 156, 76, 227, 231, + 195, 195, 37, 139, 152, 127, 125, 5, 49, 12, 114, 109, 86, 205, 18, 11, 244, 74, 223, 87, 186, + 251, 147, 118, 8, 36, 216, 24, 44, 117, 119, 27, 31, 208, 64, 57, 120, 189, 130, 205, 9, 213, + 184, 56, 207, 253, 106, 191, 103, 27, 219, 95, 8, 211, 176, 40, 7, 15, 117, 245, 11, 220, 229, + 255, 82, 180, 135, 34, 79, 106, 130, 80, 17, 182, 38, 89, 137, 86, 26, 23, 100, 249, 210, 220, + 225, 229, 234, 85, 216, 153, 22, 102, 59, 167, 245, 225, 110, 21, 87, 102, 146, 191, 234, 150, + 197, 135, 229, 144, 167, 90, 27, 171, 2, 68, 32, 248, 178, 168, 145, 33, 246, 193, 210, 127, + 87, 155, 241, 221, 153, 181, 11, 187, 78, 132, 71, 227, 163, 43, 228, 243, 10, 23, 161, 3, 78, + 61, 205, 33, 149, 133, 57, 164, 113, 254, 178, 115, 41, 185, 183, 237, 139, 211, 150, 13, 171, + 86, 71, 183, 71, 131, 19, 154, 195, 229, 13, 130, 156, 219, 183, 176, 183, 59, 193, 156, 47, + 211, 143, 56, 55, 27, 220, 205, 25, 32, 215, 246, 227, 87, 160, 251, 184, 164, 228, 242, 60, + 128, 10, 26, 129, 76, 95, 251, 174, 133, 34, 75, 221, 80, 43, 135, 137, 148, 49, 161, 229, 110, + 131, 243, 50, 89, 254, 27, 151, 223, 166, 37, 29, 102, 223, 122, 149, 72, 189, 124, 137, 158, + 204, 160, 169, 112, 180, 92, 30, 47, 102, 43, 36, 180, 99, 229, 160, 219, 252, 248, 198, 223, + 221, 113, 106, 16, 83, 152, 240, 79, 226, 71, 22, 98, 141, 45, 69, 21, 49, 105, 182, 59, 190, + 95, 225, 203, 176, 31, 132, 153, 113, 211, 201, 199, 85, 140, 14, 169, 103, 213, 38, 106, 104, + 67, 178, 118, 200, 44, 210, 31, 21, 182, 83, 86, 69, 252, 246, 219, 239, 154, 234, 208, 86, + 102, 123, 27, 112, 59, 74, 143, 247, 148, 80, 65, 37, 184, 204, 91, 91, 169, 86, 128, 50, 200, + 17, 252, 96, 250, 173, 52, 43, 134, 241, 46, 68, 197, 125, 14, 68, 224, 248, 223, 178, 20, 9, + 195, 28, 42, 133, 15, 14, 102, 81, 19, 221, 1, 185, 163, 110, 227, 30, 127, 242, 31, 125, 89, + 56, 229, 10, 151, 11, 23, 32, 154, 242, 25, 164, 144, 103, 248, 16, 76, 95, 250, 87, 81, 126, + 178, 33, 179, 13, 155, 63, 33, 179, 23, 243, 50, 65, 58, 143, 116, 218, 248, 83, 71, 61, 172, + 150, 207, 138, 30, 215, 200, 47, 84, 130, 232, 61, 157, 2, 12, 56, 132, 41, 32, 222, 60, 11, + 235, 94, 88, 234, 136, 218, 36, 223, 22, 160, 23, 151, 187, 129, 76, 215, 87, 40, 128, 245, + 221, 64, 15, 169, 119, 190, 223, 253, 150, 84, 133, 31, 50, 180, 71, 197, 116, 118, 92, 66, + 194, 105, 16, 9, 138, 214, 113, 214, 244, 52, 130, 221, 59, 175, 179, 130, 130, 149, 57, 26, 4, + 241, 5, 163, 144, 48, 26, 254, 249, 32, 50, 15, 246, 89, 203, 230, 151, 11, 110, 233, 44, 124, + 103, 202, 206, 248, 226, 29, 158, 222, 14, 140, 147, 117, 89, 7, 25, 46, 121, 211, 222, 22, 22, + 5, 94, 48, 199, 213, 58, 19, 210, 101, 60, 173, 101, 192, 129, 132, 252, 142, 235, 65, 183, 67, + 164, 218, 231, 173, 36, 152, 41, 53, 75, 225, 176, 244, 41, 70, 166, 68, 82, 230, 103, 126, 47, + 225, 221, 134, 101, 43, 7, 255, 65, 157, 185, 99, 43, 51, 61, 101, 131, 232, 50, 55, 77, 44, + 117, 205, 88, 1, 7, 224, 198, 17, 93, 132, 212, 198, 147, 123, 216, 202, 201, 231, 151, 240, + 214, 66, 54, 185, 76, 228, 86, 18, 22, 40, 18, 55, 135, 196, 189, 146, 158, 24, 194, 254, 72, + 182, 28, 72, 132, 0, 49, 58, 201, 239, 39, 102, 129, 164, 164, 112, 159, 124, 189, 79, 142, + 125, 167, 96, 236, 122, 87, 95, 231, 64, 148, 22, 58, 22, 60, 251, 75, 170, 250, 105, 114, 2, + 109, 0, 232, 172, 29, 219, 188, 249, 17, 254, 65, 57, 72, 186, 69, 156, 172, 12, 84, 35, 241, + 172, 152, 108, 5, 185, 125, 45, 17, 130, 202, 201, 118, 63, 191, 214, 57, 249, 35, 240, 39, 31, + 231, 56, 133, 198, 86, 191, 240, 20, 155, 241, 248, 230, 40, 85, 156, 213, 18, 110, 26, 236, + 88, 126, 3, 60, 9, 186, 4, 130, 110, 91, 67, 203, 56, 194, 120, 14, 167, 98, 37, 55, 136, 243, + 210, 52, 131, 29, 130, 210, 40, 152, 219, 176, 230, 229, 46, 71, 237, 43, 243, 79, 255, 22, + 245, 13, 46, 205, 38, 243, 224, 161, 194, 182, 212, 65, 2, 254, 220, 80, 99, 203, 79, 206, 191, + 110, 242, 7, 54, 202, 203, 135, 11, 21, 138, 202, 226, 140, 240, 242, 57, 153, 44, 114, 29, + 211, 31, 146, 157, 20, 202, 41, 254, 31, 115, 78, 171, 234, 207, 124, 230, 92, 21, 32, 6, 151, + 84, 147, 100, 139, 242, 232, 71, 206, 82, 35, 187, 115, 91, 241, 36, 221, 223, 80, 234, 5, 59, + 41, 67, 70, 208, 63, 95, 248, 132, 119, 245, 99, 219, 137, 33, 235, 152, 226, 203, 0, 114, 198, + 44, 16, 224, 58, 178, 5, 137, 89, 183, 118, 127, 45, 51, 127, 119, 201, 115, 149, 163, 138, + 196, 197, 69, 217, 50, 90, 92, 103, 162, 31, 170, 59, 112, 55, 105, 183, 156, 97, 107, 215, + 198, 230, 251, 95, 184, 94, 190, 185, 254, 190, 54, 104, 188, 48, 196, 133, 159, 169, 135, 211, + 84, 94, 153, 195, 37, 252, 41, 145, 247, 160, 22, 218, 183, 150, 150, 168, 204, 126, 44, 210, + 4, 172, 146, 202, 145, 221, 24, 232, 18, 26, 25, 217, 157, 194, 177, 96, 236, 98, 121, 161, + 244, 132, 220, 112, 249, 85, 174, 122, 49, 79, 190, 192, 230, 47, 12, 144, 24, 55, 102, 229, + 74, 63, 166, 75, 189, 250, 34, 116, 161, 161, 0, 16, 104, 66, 74, 231, 66, 109, 90, 62, 178, + 19, 120, 79, 190, 123, 174, 104, 102, 9, 80, 164, 160, 45, 60, 131, 95, 161, 170, 148, 99, 12, + 197, 81, 228, 242, 74, 89, 21, 105, 98, 238, 100, 162, 69, 182, 118, 187, 139, 143, 98, 71, + 210, 234, 149, 240, 79, 210, 103, 87, 109, 164, 162, 74, 116, 211, 4, 39, 132, 111, 212, 21, + 247, 99, 120, 164, 77, 181, 63, 94, 19, 201, 244, 120, 175, 117, 87, 207, 19, 64, 26, 177, 15, + 119, 125, 136, 113, 167, 226, 92, 121, 231, 155, 159, 199, 189, 218, 139, 150, 101, 198, 97, + 19, 28, 111, 241, 12, 237, 171, 65, 243, 183, 166, 201, 62, 0, 82, 206, 172, 34, 142, 43, 16, + 238, 34, 57, 84, 146, 61, 36, 96, 158, 247, 57, 124, 30, 127, 160, 60, 93, 215, 67, 117, 94, + 164, 69, 180, 81, 150, 173, 3, 70, 242, 89, 150, 14, 233, 81, 101, 194, 193, 105, 33, 97, 6, 7, + 186, 188, 37, 113, 33, 132, 193, 63, 63, 205, 216, 242, 246, 103, 234, 75, 247, 137, 68, 152, + 17, 213, 229, 235, 205, 199, 98, 110, 89, 36, 60, 87, 156, 225, 138, 106, 179, 87, 98, 242, + 173, 186, 245, 71, 191, 248, 145, 11, 174, 213, 218, 101, 195, 11, 248, 106, 38, 67, 68, 46, + 61, 133, 120, 135, 207, 106, 79, 34, 77, 250, 177, 207, 11, 220, 205, 216, 222, 230, 161, 176, + 93, 170, 21, 237, 183, 6, 153, 39, 224, 156, 123, 33, 191, 196, 207, 2, 78, 51, 249, 197, 57, + 195, 165, 217, 228, 66, 3, 87, 152, 248, 29, 247, 228, 175, 169, 184, 107, 212, 226, 128, 107, + 55, 8, 181, 62, 254, 76, 196, 158, 231, 138, 156, 36, 230, 112, 73, 183, 78, 152, 35, 81, 229, + 69, 243, 218, 77, 173, 64, 84, 186, 78, 3, 64, 114, 123, 0, 239, 116, 177, 59, 148, 220, 97, + 233, 184, 119, 142, 2, 107, 41, 53, 85, 177, 23, 189, 106, 72, 128, 7, 53, 91, 202, 143, 15, + 121, 228, 250, 147, 132, 4, 199, 20, 214, 88, 105, 62, 53, 22, 25, 129, 133, 127, 211, 108, + 186, 91, 58, 191, 241, 103, 73, 232, 50, 3, 171, 124, 149, 220, 162, 218, 97, 38, 157, 68, 41, + 34, 184, 185, 229, 99, 136, 208, 252, 130, 3, 204, 50, 47, 151, 47, 156, 76, 105, 221, 12, 75, + 117, 91, 139, 8, 218, 202, 182, 8, 205, 114, 185, 125, 41, 107, 18, 160, 231, 90, 226, 157, + 117, 39, 111, 182, 142, 107, 164, 169, 34, 99, 156, 88, 13, 169, 112, 175, 234, 222, 247, 68, + 34, 179, 247, 158, 248, 123, 38, 31, 77, 50, 37, 161, 74, 81, 235, 146, 86, 106, 0, 31, 193, + 203, 231, 218, 161, 190, 17, 5, 156, 25, 0, 29, 98, 68, 214, 65, 74, 69, 18, 33, 162, 137, 225, + 29, 74, 202, 187, 167, 232, 119, 17, 71, 3, 232, 50, 209, 216, 88, 208, 163, 151, 234, 218, 19, + 127, 230, 77, 217, 84, 184, 168, 60, 217, 25, 73, 145, 104, 250, 225, 189, 192, 35, 149, 88, + 222, 149, 95, 51, 200, 227, 180, 89, 246, 211, 107, 132, 36, 97, 131, 169, 114, 87, 83, 197, + 185, 141, 214, 35, 59, 202, 207, 182, 52, 147, 116, 62, 74, 73, 11, 117, 189, 184, 199, 214, + 52, 220, 109, 246, 7, 181, 191, 176, 156, 195, 132, 67, 159, 30, 233, 127, 11, 135, 196, 184, + 37, 56, 167, 195, 89, 80, 169, 155, 230, 42, 67, 224, 195, 221, 141, 96, 80, 135, 187, 91, 83, + 150, 169, 214, 115, 25, 159, 35, 72, 243, 102, 77, 238, 74, 137, 241, 31, 175, 226, 95, 69, 98, + 88, 233, 236, 25, 212, 2, 35, 194, 154, 27, 246, 3, 94, 55, 248, 23, 128, 159, 83, 132, 92, + 156, 169, 127, 165, 153, 64, 37, 143, 40, 37, 66, 128, 53, 217, 12, 81, 43, 143, 87, 96, 137, + 136, 154, 218, 120, 248, 101, 92, 197, 104, 182, 162, 33, 209, 184, 72, 186, 23, 186, 82, 201, + 225, 212, 88, 141, 193, 244, 201, 5, 177, 120, 234, 244, 68, 172, 32, 84, 219, 216, 197, 244, + 241, 21, 189, 189, 93, 55, 178, 211, 146, 227, 140, 200, 202, 20, 7, 236, 188, 21, 148, 27, + 158, 97, 222, 197, 130, 253, 219, 188, 124, 6, 164, 94, 47, 246, 55, 106, 6, 185, 116, 61, 166, + 139, 244, 81, 206, 14, 216, 96, 0, 34, 139, 195, 66, 221, 99, 11, 156, 91, 215, 64, 132, 170, + 111, 229, 28, 156, 159, 145, 136, 197, 100, 98, 109, 243, 67, 176, 232, 255, 199, 161, 110, 49, + 60, 121, 253, 146, 12, 149, 168, 178, 175, 173, 106, 153, 241, 22, 106, 167, 118, 194, 93, 191, + 32, 231, 180, 238, 189, 69, 224, 97, 213, 21, 86, 51, 155, 92, 235, 189, 218, 179, 71, 138, + 225, 124, 224, 239, 32, 44, 8, 146, 38, 171, 89, 177, 209, 79, 133, 26, 64, 115, 171, 190, 182, + 66, 1, 94, 240, 33, 14, 250, 45, 129, 154, 15, 156, 19, 32, 43, 171, 236, 19, 90, 174, 161, + 144, 196, 26, 27, 186, 136, 52, 152, 204, 115, 242, 143, 84, 35, 154, 38, 141, 145, 7, 124, + 131, 247, 79, 160, 203, 28, 11, 240, 142, 73, 103, 178, 213, 49, 74, 160, 169, 168, 71, 150, + 197, 62, 64, 182, 64, 145, 128, 34, 195, 228, 196, 7, 99, 7, 211, 167, 116, 68, 111, 245, 255, + 119, 108, 83, 112, 129, 65, 125, 37, 70, 48, 64, 170, 76, 170, 236, 14, 52, 67, 37, 29, 236, 0, + 145, 140, 20, 44, 120, 55, 62, 118, 25, 90, 252, 97, 94, 4, 69, 91, 169, 152, 24, 39, 38, 247, + 11, 63, 124, 128, 74, 31, 117, 96, 129, 93, 63, 230, 75, 202, 193, 198, 143, 134, 124, 227, + 227, 36, 118, 10, 10, 26, 46, 8, 16, 155, 153, 110, 105, 249, 97, 13, 187, 252, 86, 232, 101, + 5, 160, 203, 155, 97, 56, 55, 248, 244, 109, 160, 253, 255, 163, 91, 105, 208, 10, 228, 120, + 172, 74, 30, 205, 156, 195, 40, 74, 140, 67, 73, 229, 221, 199, 197, 236, 224, 220, 27, 0, 106, + 37, 234, 119, 198, 152, 74, 71, 78, 225, 187, 103, 114, 152, 215, 49, 177, 238, 188, 167, 211, + 56, 162, 181, 131, 153, 90, 204, 52, 245, 230, 116, 33, 78, 146, 25, 202, 94, 238, 106, 8, 58, + 76, 152, 40, 78, 165, 176, 125, 147, 144, 138, 166, 201, 101, 81, 90, 88, 136, 163, 1, 20, 6, + 13, 246, 186, 44, 243, 56, 232, 63, 12, 60, 117, 65, 146, 239, 218, 181, 205, 190, 50, 23, 109, + 169, 209, 26, 76, 250, 119, 185, 126, 219, 18, 11, 217, 69, 173, 40, 200, 121, 238, 69, 27, 32, + 197, 208, 159, 191, 211, 133, 190, 142, 124, 252, 64, 195, 109, 90, 196, 209, 211, 227, 209, + 149, 242, 209, 255, 162, 119, 177, 231, 65, 173, 219, 249, 20, 158, 165, 178, 140, 232, 2, 185, + 4, 200, 117, 73, 14, 80, 157, 110, 247, 217, 114, 185, 28, 49, 99, 212, 214, 9, 182, 221, 190, + 182, 238, 128, 169, 121, 11, 128, 153, 212, 122, 1, 65, 6, 107, 39, 220, 87, 120, 29, 206, 248, + 96, 6, 128, 90, 57, 93, 129, 194, 174, 181, 222, 238, 15, 220, 246, 252, 149, 62, 12, 43, 136, + 34, 113, 117, 209, 180, 222, 27, 138, 128, 126, 83, 189, 99, 146, 96, 152, 134, 54, 158, 76, + 187, 10, 26, 242, 142, 47, 55, 106, 124, 119, 83, 253, 167, 22, 108, 39, 105, 208, 170, 180, + 81, 174, 194, 114, 150, 251, 195, 180, 49, 223, 236, 129, 196, 10, 87, 12, 52, 91, 142, 91, 0, + 64, 166, 36, 3, 112, 25, 58, 230, 3, 187, 211, 198, 190, 246, 5, 137, 102, 64, 212, 85, 150, + 154, 192, 195, 12, 42, 66, 163, 67, 187, 191, 152, 108, 17, 5, 36, 221, 46, 119, 125, 248, 76, + 222, 61, 187, 58, 241, 245, 103, 173, 234, 117, 24, 227, 60, 37, 214, 142, 3, 139, 105, 252, + 95, 25, 65, 68, 63, 190, 190, 97, 111, 150, 100, 218, 97, 191, 113, 100, 196, 20, 10, 118, 115, + 158, 165, 80, 44, 77, 163, 139, 125, 135, 117, 12, 149, 199, 58, 10, 232, 175, 72, 102, 203, + 65, 163, 76, 115, 64, 6, 187, 150, 28, 248, 12, 216, 165, 109, 138, 153, 42, 131, 161, 199, + 205, 179, 211, 9, 209, 30, 247, 146, 16, 60, 2, 66, 195, 117, 163, 89, 145, 239, 221, 14, 146, + 122, 68, 202, 138, 21, 49, 48, 125, 57, 87, 252, 185, 149, 7, 59, 25, 15, 69, 190, 240, 207, + 228, 186, 174, 182, 10, 53, 174, 59, 21, 199, 126, 132, 156, 100, 122, 16, 119, 172, 149, 191, + 242, 98, 62, 226, 114, 171, 75, 206, 141, 140, 132, 105, 50, 31, 76, 17, 126, 74, 254, 120, 90, + 209, 72, 139, 9, 184, 91, 102, 64, 225, 66, 236, 81, 66, 31, 13, 243, 201, 30, 21, 253, 255, + 176, 112, 183, 210, 134, 239, 74, 130, 200, 84, 133, 75, 39, 40, 46, 37, 141, 142, 68, 251, + 153, 251, 78, 205, 34, 202, 157, 205, 60, 239, 20, 177, 182, 80, 199, 77, 212, 91, 249, 56, 15, + 10, 129, 133, 79, 158, 97, 218, 60, 208, 177, 67, 4, 210, 94, 222, 242, 79, 154, 44, 203, 7, + 108, 48, 243, 1, 26, 9, 68, 164, 13, 102, 51, 57, 67, 126, 12, 237, 22, 101, 210, 17, 86, 131, + 14, 150, 147, 81, 63, 167, 254, 124, 207, 163, 80, 35, 39, 168, 97, 194, 36, 217, 178, 216, + 102, 204, 125, 78, 210, 81, 8, 98, 98, 107, 67, 238, 224, 108, 153, 153, 145, 209, 21, 56, 168, + 178, 82, 75, 69, 198, 83, 203, 198, 134, 71, 166, 15, 184, 112, 15, 140, 12, 116, 186, 46, 209, + 124, 112, 9, 75, 133, 2, 251, 89, 226, 170, 36, 181, 210, 49, 26, 44, 114, 144, 195, 201, 113, + 104, 245, 186, 176, 35, 141, 10, 164, 7, 78, 35, 43, 153, 244, 227, 112, 238, 40, 150, 209, 37, + 139, 143, 25, 117, 168, 181, 22, 37, 101, 219, 174, 134, 115, 216, 76, 191, 109, 228, 246, 121, + 237, 114, 142, 36, 102, 232, 229, 171, 149, 17, 110, 248, 240, 169, 185, 21, 59, 119, 236, 29, + 182, 138, 14, 92, 174, 83, 235, 239, 57, 149, 126, 110, 98, 172, 170, 20, 212, 37, 122, 108, + 26, 248, 93, 140, 66, 101, 155, 74, 41, 40, 144, 58, 65, 40, 235, 27, 205, 182, 143, 53, 217, + 23, 203, 188, 35, 99, 111, 167, 241, 197, 127, 74, 96, 132, 12, 66, 97, 103, 103, 106, 88, 78, + 35, 26, 66, 160, 99, 37, 249, 6, 147, 203, 2, 154, 195, 98, 73, 164, 78, 60, 195, 160, 58, 92, + 54, 234, 33, 142, 97, 1, 13, 108, 151, 250, 151, 71, 233, 17, 236, 95, 56, 249, 161, 218, 89, + 141, 169, 29, 223, 228, 31, 80, 96, 203, 247, 3, 237, 5, 172, 184, 45, 232, 89, 77, 51, 188, + 62, 96, 143, 234, 204, 37, 20, 9, 7, 206, 74, 161, 134, 243, 54, 194, 51, 235, 10, 181, 40, + 101, 136, 193, 186, 32, 189, 174, 156, 108, 230, 192, 252, 131, 204, 187, 151, 179, 114, 137, + 80, 184, 174, 113, 5, 11, 72, 61, 95, 94, 131, 104, 186, 50, 139, 108, 111, 233, 98, 190, 137, + 182, 102, 249, 52, 182, 50, 226, 72, 225, 173, 89, 152, 37, 242, 95, 15, 107, 33, 238, 246, + 180, 6, 179, 25, 79, 89, 241, 136, 41, 45, 81, 22, 89, 156, 251, 27, 117, 99, 150, 179, 244, + 220, 249, 165, 40, 10, 71, 228, 5, 233, 246, 34, 190, 52, 29, 26, 147, 54, 219, 187, 99, 100, + 74, 160, 55, 248, 73, 208, 159, 38, 197, 59, 101, 98, 125, 20, 99, 136, 89, 63, 105, 2, 79, + 152, 0, 21, 175, 154, 106, 224, 155, 100, 55, 187, 160, 163, 194, 86, 44, 197, 121, 76, 5, 38, + 53, 146, 233, 88, 73, 128, 139, 95, 173, 122, 1, 27, 136, 134, 197, 106, 218, 180, 89, 74, 244, + 150, 236, 38, 129, 51, 64, 62, 18, 249, 192, 66, 70, 34, 17, 168, 87, 201, 47, 135, 117, 238, + 86, 151, 253, 202, 36, 142, 177, 146, 220, 65, 172, 119, 71, 44, 191, 240, 251, 166, 106, 134, + 237, 24, 94, 89, 68, 101, 72, 66, 191, 228, 14, 116, 85, 47, 127, 189, 148, 18, 194, 79, 86, + 173, 131, 202, 65, 74, 154, 205, 23, 188, 135, 165, 41, 96, 159, 49, 244, 22, 110, 50, 162, + 133, 126, 202, 211, 241, 62, 60, 244, 192, 83, 50, 187, 17, 176, 73, 62, 228, 137, 151, 6, 25, + 92, 129, 149, 168, 138, 175, 108, 72, 10, 194, 158, 198, 66, 70, 212, 7, 221, 102, 119, 150, + 199, 16, 133, 214, 32, 213, 77, 39, 240, 157, 231, 107, 249, 132, 151, 178, 144, 3, 64, 172, + 141, 138, 176, 81, 12, 132, 156, 220, 185, 250, 218, 54, 223, 94, 152, 109, 139, 130, 70, 44, + 102, 188, 185, 81, 187, 188, 47, 12, 98, 28, 102, 23, 115, 91, 16, 174, 250, 37, 121, 240, 85, + 119, 48, 83, 242, 139, 215, 176, 1, 206, 9, 108, 204, 115, 28, 194, 195, 250, 208, 185, 59, + 150, 81, 7, 152, 38, 54, 133, 27, 174, 87, 5, 240, 46, 197, 230, 119, 145, 59, 215, 169, 250, + 148, 93, 78, 76, 27, 180, 6, 151, 53, 118, 60, 232, 247, 123, 158, 119, 200, 229, 239, 108, + 228, 124, 34, 210, 93, 93, 96, 175, 242, 108, 133, 85, 76, 81, 188, 164, 56, 124, 9, 211, 16, + 104, 157, 119, 175, 223, 182, 249, 253, 94, 147, 183, 184, 252, 173, 20, 229, 224, 240, 64, + 163, 103, 24, 224, 77, 164, 10, 5, 106, 169, 151, 180, 182, 104, 191, 9, 243, 66, 121, 18, 126, + 136, 13, 191, 20, 170, 146, 179, 117, 114, 77, 126, 163, 220, 185, 19, 180, 98, 83, 229, 111, + 70, 18, 130, 21, 78, 56, 32, 219, 46, 130, 144, 203, 84, 67, 227, 96, 120, 114, 77, 133, 185, + 123, 246, 131, 184, 198, 40, 17, 99, 62, 21, 167, 156, 122, 238, 238, 74, 79, 112, 18, 177, 10, + 254, 133, 60, 44, 149, 196, 123, 95, 177, 199, 255, 239, 22, 67, 8, 252, 244, 69, 165, 150, 78, + 91, 125, 233, 198, 37, 37, 255, 214, 71, 206, 45, 84, 72, 26, 152, 91, 142, 182, 58, 254, 19, + 131, 191, 59, 163, 75, 54, 239, 46, 110, 226, 9, 44, 67, 70, 104, 235, 49, 9, 117, 147, 120, + 64, 60, 127, 13, 149, 103, 210, 116, 210, 134, 155, 2, 123, 78, 141, 11, 202, 143, 32, 207, 39, + 185, 165, 215, 107, 77, 131, 161, 231, 116, 242, 113, 169, 143, 62, 4, 230, 195, 53, 27, 41, + 58, 59, 16, 117, 114, 210, 115, 48, 203, 249, 124, 137, 29, 246, 7, 238, 109, 241, 122, 117, + 60, 204, 174, 110, 74, 124, 77, 49, 134, 11, 59, 82, 166, 202, 59, 20, 144, 217, 213, 196, 224, + 144, 220, 234, 53, 78, 215, 108, 36, 209, 11, 140, 174, 134, 229, 231, 224, 174, 3, 69, 249, + 215, 111, 184, 15, 131, 89, 148, 98, 11, 128, 246, 244, 73, 138, 138, 230, 5, 97, 11, 38, 167, + 144, 196, 22, 114, 113, 244, 173, 126, 94, 74, 101, 19, 49, 2, 109, 48, 206, 157, 169, 16, 71, + 77, 116, 219, 223, 14, 240, 194, 217, 51, 100, 111, 243, 81, 236, 98, 73, 170, 13, 26, 166, + 174, 138, 114, 229, 166, 76, 240, 169, 109, 248, 118, 97, 94, 154, 106, 13, 190, 5, 196, 84, + 58, 48, 142, 137, 125, 144, 79, 113, 54, 247, 214, 129, 101, 69, 24, 65, 133, 228, 225, 42, 57, + 2, 181, 210, 250, 92, 227, 147, 146, 110, 150, 173, 64, 133, 167, 87, 219, 15, 238, 116, 188, + 243, 141, 93, 186, 181, 92, 90, 107, 117, 32, 93, 252, 110, 248, 21, 114, 86, 248, 175, 122, + 97, 25, 160, 239, 185, 1, 213, 93, 80, 15, 255, 71, 137, 179, 66, 199, 182, 166, 142, 138, 65, + 138, 138, 95, 88, 143, 112, 69, 224, 206, 26, 169, 33, 57, 141, 147, 220, 102, 186, 136, 135, + 252, 15, 126, 40, 98, 218, 192, 220, 118, 54, 218, 51, 177, 58, 148, 244, 126, 15, 0, 206, 81, + 128, 150, 71, 179, 231, 105, 99, 82, 131, 156, 66, 183, 233, 177, 117, 0, 4, 207, 175, 70, 143, + 99, 87, 25, 134, 153, 7, 207, 87, 45, 11, 17, 168, 135, 185, 17, 252, 139, 70, 166, 156, 106, + 108, 116, 171, 29, 95, 89, 196, 109, 16, 90, 194, 6, 234, 203, 176, 168, 14, 229, 219, 172, + 228, 134, 237, 7, 44, 177, 110, 148, 137, 131, 161, 253, 27, 182, 6, 90, 27, 175, 85, 211, 222, + 134, 108, 97, 89, 58, 100, 24, 103, 71, 101, 79, 50, 153, 42, 43, 182, 252, 189, 194, 143, 51, + 10, 236, 165, 192, 47, 42, 125, 74, 171, 223, 192, 25, 115, 95, 199, 217, 75, 201, 194, 8, 41, + 169, 42, 233, 194, 56, 20, 166, 179, 20, 209, 188, 228, 210, 157, 110, 206, 78, 253, 251, 133, + 78, 218, 69, 58, 229, 116, 71, 127, 233, 7, 196, 10, 203, 192, 60, 192, 228, 213, 231, 169, + 104, 203, 25, 2, 171, 240, 137, 159, 113, 197, 83, 136, 232, 30, 80, 177, 16, 153, 166, 50, 64, + 32, 150, 255, 9, 140, 187, 226, 195, 166, 38, 5, 191, 175, 238, 106, 240, 105, 91, 208, 111, + 110, 107, 67, 174, 79, 155, 45, 87, 177, 12, 39, 197, 7, 229, 108, 158, 35, 93, 175, 119, 87, + 96, 25, 5, 92, 187, 63, 238, 228, 97, 39, 158, 241, 46, 124, 246, 10, 213, 72, 170, 163, 188, + 3, 189, 206, 87, 16, 58, 17, 234, 171, 42, 209, 86, 165, 188, 88, 84, 228, 23, 86, 171, 11, 6, + 95, 143, 128, 244, 7, 46, 1, 46, 231, 159, 124, 103, 162, 228, 181, 243, 57, 41, 100, 102, 219, + 68, 119, 12, 122, 147, 132, 56, 181, 250, 114, 190, 95, 108, 165, 147, 232, 8, 108, 159, 157, + 197, 139, 180, 169, 192, 99, 104, 96, 172, 207, 244, 212, 173, 76, 208, 92, 71, 6, 96, 104, + 113, 112, 62, 101, 131, 3, 32, 29, 17, 225, 100, 19, 46, 50, 87, 167, 158, 239, 214, 245, 234, + 199, 95, 79, 117, 164, 100, 92, 148, 75, 62, 152, 14, 87, 236, 245, 138, 38, 75, 78, 237, 98, + 146, 199, 105, 215, 57, 187, 237, 121, 2, 193, 12, 163, 49, 0, 91, 254, 130, 146, 37, 119, 140, + 22, 86, 153, 124, 39, 188, 40, 146, 158, 190, 136, 168, 133, 204, 116, 159, 221, 59, 199, 51, + 7, 174, 225, 57, 123, 33, 180, 164, 255, 147, 148, 67, 27, 243, 102, 161, 238, 192, 17, 5, 68, + 89, 209, 196, 16, 105, 116, 134, 140, 16, 181, 128, 146, 71, 57, 204, 46, 34, 81, 195, 192, 23, + 130, 7, 98, 188, 101, 87, 121, 80, 79, 183, 48, 130, 118, 67, 98, 60, 183, 86, 252, 145, 40, + 72, 216, 196, 79, 219, 209, 22, 138, 26, 18, 94, 85, 6, 198, 184, 41, 36, 51, 184, 53, 55, 27, + 20, 141, 135, 64, 208, 57, 220, 190, 24, 159, 166, 195, 182, 186, 200, 24, 182, 187, 16, 217, + 147, 118, 38, 233, 158, 182, 85, 36, 10, 155, 208, 32, 62, 44, 152, 253, 149, 212, 142, 5, 200, + 101, 121, 186, 164, 28, 141, 120, 222, 137, 69, 195, 136, 126, 166, 163, 50, 179, 232, 91, 106, + 163, 75, 166, 27, 81, 16, 37, 253, 104, 76, 179, 145, 248, 76, 55, 25, 228, 179, 107, 49, 231, + 47, 185, 11, 234, 237, 94, 223, 195, 254, 68, 118, 32, 124, 74, 196, 74, 50, 66, 0, 23, 20, 88, + 235, 112, 162, 122, 184, 202, 46, 252, 68, 215, 97, 143, 123, 101, 16, 74, 77, 191, 51, 202, 4, + 36, 69, 54, 146, 74, 92, 27, 102, 39, 30, 220, 30, 128, 64, 102, 182, 241, 170, 104, 106, 72, + 186, 133, 185, 91, 129, 142, 246, 222, 227, 189, 108, 39, 135, 155, 243, 153, 55, 240, 236, 34, + 80, 44, 254, 138, 74, 137, 152, 191, 16, 142, 175, 242, 155, 150, 80, 51, 103, 144, 238, 2, + 186, 64, 144, 242, 220, 125, 186, 143, 133, 84, 177, 37, 172, 17, 179, 83, 30, 239, 249, 8, + 243, 208, 149, 221, 87, 242, 68, 27, 90, 119, 12, 186, 34, 71, 97, 191, 91, 115, 255, 84, 220, + 196, 127, 213, 38, 246, 163, 118, 147, 103, 133, 228, 40, 164, 88, 58, 117, 194, 61, 249, 30, + 252, 6, 255, 186, 166, 226, 206, 41, 39, 240, 168, 52, 103, 11, 57, 41, 202, 32, 219, 94, 37, + 87, 223, 23, 168, 65, 250, 253, 103, 114, 239, 94, 26, 46, 216, 193, 139, 143, 40, 213, 67, + 197, 171, 33, 142, 45, 170, 19, 69, 149, 224, 56, 112, 191, 192, 208, 195, 118, 144, 204, 248, + 19, 129, 185, 183, 171, 28, 115, 103, 20, 245, 138, 252, 12, 183, 84, 219, 206, 130, 84, 189, + 88, 150, 125, 154, 198, 18, 106, 125, 75, 92, 226, 112, 98, 223, 174, 212, 106, 158, 99, 3, + 131, 61, 126, 79, 215, 70, 234, 77, 31, 143, 150, 87, 184, 85, 159, 103, 152, 78, 69, 24, 107, + 73, 209, 169, 232, 99, 32, 254, 255, 99, 119, 79, 107, 117, 105, 111, 165, 183, 204, 190, 43, + 214, 100, 156, 19, 109, 135, 206, 10, 200, 140, 67, 131, 226, 185, 158, 142, 59, 121, 152, 203, + 206, 152, 172, 190, 184, 217, 220, 15, 154, 1, 224, 173, 70, 0, 209, 164, 203, 17, 72, 106, + 115, 43, 9, 211, 131, 240, 135, 72, 13, 231, 57, 225, 140, 119, 243, 228, 143, 101, 165, 118, + 208, 53, 110, 243, 23, 224, 5, 145, 162, 56, 31, 99, 193, 240, 139, 193, 96, 157, 107, 148, 94, + 172, 47, 221, 99, 159, 127, 24, 168, 183, 17, 85, 153, 167, 78, 151, 131, 16, 153, 117, 26, 8, + 159, 252, 91, 242, 213, 89, 102, 4, 121, 226, 144, 64, 195, 15, 239, 65, 247, 81, 83, 187, 167, + 84, 146, 86, 208, 106, 118, 113, 107, 233, 95, 220, 52, 91, 52, 25, 2, 192, 63, 58, 155, 173, + 153, 48, 156, 226, 76, 1, 215, 190, 55, 179, 84, 172, 34, 107, 212, 44, 112, 60, 50, 95, 132, + 225, 91, 123, 209, 16, 46, 15, 33, 86, 122, 169, 43, 19, 236, 32, 170, 145, 232, 51, 44, 100, + 158, 209, 125, 86, 118, 86, 206, 66, 248, 187, 118, 24, 248, 29, 36, 115, 196, 127, 227, 129, + 139, 7, 9, 170, 196, 101, 15, 82, 248, 116, 250, 56, 106, 219, 226, 88, 210, 7, 123, 94, 94, + 10, 109, 183, 241, 38, 210, 182, 44, 167, 196, 111, 235, 98, 243, 142, 248, 105, 248, 0, 4, + 199, 48, 32, 37, 123, 209, 77, 178, 65, 23, 111, 43, 52, 178, 184, 42, 67, 224, 185, 3, 116, + 96, 163, 54, 126, 87, 249, 145, 183, 56, 20, 247, 245, 138, 93, 95, 236, 28, 157, 162, 132, + 218, 24, 199, 177, 61, 222, 197, 159, 144, 252, 62, 17, 239, 118, 240, 86, 18, 65, 199, 75, + 136, 71, 63, 138, 211, 167, 154, 71, 147, 167, 56, 83, 226, 85, 86, 209, 242, 222, 1, 28, 229, + 58, 228, 253, 162, 38, 128, 71, 203, 79, 212, 207, 24, 29, 205, 24, 222, 97, 21, 197, 102, 19, + 22, 191, 151, 223, 63, 152, 115, 95, 131, 243, 15, 148, 247, 154, 151, 112, 247, 230, 183, 160, + 84, 53, 99, 250, 205, 94, 19, 164, 98, 68, 160, 75, 63, 136, 13, 130, 10, 5, 29, 111, 206, 55, + 74, 156, 150, 219, 219, 99, 196, 129, 126, 11, 31, 194, 186, 131, 154, 84, 233, 75, 35, 231, + 65, 1, 222, 6, 185, 27, 77, 218, 167, 50, 251, 81, 175, 31, 168, 123, 10, 163, 208, 4, 103, + 129, 64, 151, 31, 122, 206, 137, 94, 214, 206, 102, 142, 191, 31, 79, 3, 87, 235, 77, 156, 129, + 53, 224, 67, 36, 2, 252, 165, 74, 249, 191, 71, 128, 80, 26, 89, 61, 27, 1, 113, 98, 185, 134, + 114, 102, 36, 198, 193, 43, 94, 167, 135, 146, 10, 113, 186, 239, 23, 52, 180, 207, 186, 213, + 32, 236, 251, 107, 143, 185, 102, 12, 222, 207, 228, 216, 100, 132, 17, 204, 169, 27, 26, 109, + 252, 193, 246, 51, 197, 222, 222, 184, 255, 240, 17, 161, 0, 112, 14, 156, 165, 51, 217, 183, + 143, 151, 164, 8, 42, 77, 170, 172, 131, 44, 150, 85, 91, 58, 131, 54, 177, 102, 75, 141, 9, + 101, 224, 165, 13, 228, 149, 208, 221, 158, 97, 146, 213, 66, 148, 202, 151, 29, 230, 93, 141, + 192, 194, 6, 148, 215, 61, 204, 34, 82, 98, 103, 39, 29, 213, 94, 246, 26, 136, 131, 86, 214, + 241, 252, 64, 118, 92, 195, 234, 232, 12, 100, 178, 171, 232, 108, 139, 12, 155, 139, 174, 185, + 100, 245, 137, 173, 120, 249, 185, 64, 139, 127, 146, 131, 237, 162, 144, 239, 215, 209, 56, + 34, 98, 50, 224, 67, 1, 19, 108, 68, 96, 14, 73, 1, 149, 19, 115, 32, 194, 50, 163, 13, 135, + 106, 27, 131, 65, 126, 79, 235, 51, 130, 173, 91, 62, 62, 212, 206, 179, 200, 212, 71, 225, + 162, 190, 114, 222, 0, 54, 89, 24, 76, 174, 236, 98, 22, 83, 80, 118, 78, 198, 158, 253, 140, + 4, 215, 91, 33, 102, 1, 44, 246, 152, 24, 184, 89, 234, 125, 210, 192, 126, 80, 130, 243, 80, + 170, 176, 47, 179, 92, 138, 209, 111, 252, 161, 126, 254, 132, 134, 193, 89, 230, 39, 197, 87, + 236, 90, 22, 137, 11, 175, 184, 165, 139, 201, 252, 185, 236, 13, 118, 162, 178, 206, 1, 221, + 59, 62, 31, 20, 104, 205, 122, 92, 235, 86, 19, 43, 183, 70, 109, 191, 105, 226, 63, 213, 137, + 50, 168, 192, 91, 144, 20, 52, 180, 46, 236, 103, 59, 108, 47, 31, 24, 169, 25, 196, 47, 39, + 226, 138, 45, 118, 203, 101, 84, 250, 13, 161, 220, 84, 31, 115, 70, 200, 61, 59, 102, 79, 39, + 175, 168, 196, 193, 236, 101, 144, 206, 101, 201, 1, 230, 160, 239, 174, 117, 94, 108, 245, 54, + 46, 48, 176, 227, 197, 134, 251, 189, 17, 96, 229, 138, 110, 255, 72, 159, 34, 92, 128, 116, + 72, 7, 9, 82, 76, 250, 91, 64, 75, 204, 127, 50, 78, 140, 195, 208, 149, 156, 182, 25, 33, 48, + 150, 104, 87, 179, 220, 73, 26, 157, 148, 1, 227, 150, 242, 124, 209, 81, 12, 35, 134, 213, 68, + 158, 95, 237, 80, 22, 251, 168, 150, 62, 80, 72, 91, 255, 200, 164, 51, 47, 203, 37, 156, 247, + 174, 246, 88, 248, 48, 182, 134, 249, 172, 68, 108, 238, 169, 247, 114, 230, 2, 142, 36, 153, + 110, 113, 106, 144, 26, 156, 158, 49, 107, 109, 71, 245, 182, 11, 132, 100, 170, 110, 119, 113, + 96, 94, 238, 117, 17, 212, 198, 128, 114, 133, 135, 11, 112, 218, 11, 54, 218, 213, 173, 216, + 25, 71, 245, 211, 157, 15, 158, 3, 230, 219, 102, 153, 90, 128, 134, 7, 5, 22, 62, 13, 151, + 119, 141, 116, 207, 1, 147, 80, 78, 145, 45, 146, 66, 171, 156, 207, 17, 192, 69, 246, 9, 220, + 98, 19, 118, 22, 194, 138, 53, 231, 30, 29, 165, 31, 39, 203, 150, 136, 253, 86, 131, 171, 108, + 216, 37, 26, 149, 186, 142, 192, 240, 68, 77, 29, 166, 240, 78, 137, 79, 68, 85, 106, 202, 161, + 106, 184, 33, 235, 205, 201, 49, 135, 164, 61, 153, 86, 115, 228, 74, 186, 250, 150, 121, 224, + 191, 146, 54, 161, 122, 101, 55, 190, 13, 50, 25, 114, 61, 24, 155, 216, 31, 130, 41, 104, 125, + 228, 223, 254, 84, 114, 116, 12, 191, 9, 140, 74, 103, 48, 82, 67, 126, 30, 144, 230, 21, 173, + 97, 77, 92, 213, 61, 172, 223, 143, 218, 251, 241, 197, 124, 150, 214, 60, 62, 170, 9, 154, + 167, 105, 88, 24, 53, 133, 125, 178, 19, 74, 217, 234, 123, 228, 230, 174, 161, 184, 22, 222, + 227, 97, 143, 173, 254, 244, 228, 14, 40, 22, 15, 11, 26, 226, 199, 218, 131, 84, 98, 55, 239, + 180, 233, 231, 30, 182, 36, 17, 23, 111, 60, 24, 172, 241, 9, 85, 167, 42, 137, 80, 97, 190, + 123, 85, 101, 31, 122, 121, 95, 188, 55, 21, 53, 17, 133, 49, 99, 242, 22, 45, 4, 117, 76, 244, + 208, 254, 108, 21, 165, 39, 213, 246, 253, 34, 27, 10, 104, 41, 150, 140, 202, 13, 114, 137, + 145, 147, 30, 152, 137, 69, 210, 156, 55, 88, 196, 72, 79, 36, 226, 219, 132, 176, 223, 16, + 238, 254, 218, 182, 240, 53, 165, 201, 46, 5, 164, 19, 247, 205, 243, 211, 224, 157, 140, 26, + 145, 95, 81, 19, 73, 238, 96, 50, 184, 134, 25, 120, 193, 58, 0, 88, 113, 48, 80, 89, 65, 220, + 33, 208, 20, 184, 7, 171, 160, 56, 36, 20, 186, 244, 11, 33, 86, 254, 99, 35, 121, 252, 236, + 14, 16, 254, 225, 63, 39, 72, 255, 0, 98, 44, 151, 13, 36, 137, 40, 218, 160, 82, 255, 162, 20, + 109, 3, 224, 218, 96, 105, 169, 239, 131, 136, 227, 208, 158, 60, 34, 49, 45, 11, 55, 72, 135, + 167, 2, 246, 1, 162, 183, 247, 251, 72, 99, 47, 23, 128, 214, 255, 171, 77, 132, 112, 235, 215, + 5, 12, 44, 33, 81, 222, 161, 218, 56, 244, 228, 221, 124, 35, 232, 12, 215, 104, 95, 189, 97, + 243, 243, 139, 247, 144, 20, 143, 244, 185, 209, 199, 208, 207, 75, 95, 70, 70, 137, 242, 68, + 5, 85, 229, 223, 49, 56, 242, 163, 65, 157, 143, 73, 96, 218, 202, 114, 114, 173, 13, 143, 33, + 84, 81, 55, 109, 68, 76, 67, 151, 136, 222, 176, 195, 236, 169, 224, 107, 241, 137, 123, 233, + 220, 20, 199, 66, 18, 4, 125, 171, 193, 183, 34, 49, 76, 54, 227, 227, 87, 218, 18, 22, 195, 5, + 144, 156, 67, 118, 223, 238, 89, 75, 109, 215, 31, 132, 86, 181, 75, 139, 31, 83, 120, 89, 106, + 181, 200, 201, 229, 58, 84, 152, 195, 135, 169, 126, 2, 21, 24, 243, 89, 91, 173, 211, 230, + 184, 0, 42, 22, 15, 59, 210, 164, 25, 199, 233, 147, 178, 15, 36, 93, 1, 63, 242, 75, 26, 16, + 231, 155, 71, 148, 93, 71, 252, 230, 252, 71, 139, 189, 213, 150, 211, 62, 154, 216, 219, 22, + 243, 200, 245, 255, 48, 82, 142, 186, 63, 139, 61, 253, 22, 40, 146, 8, 173, 79, 20, 222, 169, + 161, 170, 254, 94, 136, 78, 136, 114, 140, 212, 143, 21, 226, 98, 107, 75, 221, 240, 254, 65, + 145, 109, 64, 134, 114, 121, 67, 90, 79, 108, 72, 252, 231, 0, 130, 98, 192, 73, 141, 67, 212, + 236, 7, 189, 240, 36, 205, 77, 252, 181, 203, 162, 38, 175, 148, 6, 177, 179, 102, 178, 173, + 180, 228, 198, 191, 239, 76, 2, 176, 218, 227, 197, 172, 216, 210, 130, 27, 123, 151, 152, 37, + 33, 65, 229, 30, 22, 131, 2, 44, 78, 140, 250, 15, 179, 250, 67, 206, 86, 97, 78, 74, 80, 46, + 217, 0, 100, 194, 225, 178, 145, 120, 211, 203, 121, 228, 187, 146, 45, 207, 166, 99, 254, 243, + 60, 100, 112, 159, 196, 161, 181, 14, 226, 226, 190, 185, 184, 169, 182, 59, 149, 24, 182, 255, + 36, 94, 185, 53, 20, 138, 250, 216, 145, 34, 4, 7, 211, 81, 69, 78, 211, 77, 154, 139, 12, 184, + 50, 193, 19, 205, 167, 103, 53, 63, 147, 210, 158, 14, 57, 74, 71, 64, 90, 185, 222, 157, 105, + 98, 184, 238, 55, 72, 88, 11, 195, 32, 139, 194, 217, 125, 184, 80, 66, 150, 230, 187, 248, + 187, 162, 122, 101, 93, 192, 1, 129, 2, 193, 135, 246, 200, 128, 39, 126, 255, 23, 96, 73, 191, + 72, 219, 122, 67, 49, 145, 120, 119, 134, 156, 29, 117, 159, 224, 248, 18, 24, 187, 121, 104, + 252, 184, 83, 170, 57, 200, 180, 83, 58, 40, 158, 38, 6, 226, 74, 0, 222, 224, 229, 210, 25, + 150, 225, 184, 139, 142, 171, 10, 198, 97, 186, 205, 87, 86, 223, 14, 102, 43, 175, 169, 231, + 113, 121, 219, 185, 26, 237, 143, 148, 165, 155, 93, 167, 55, 82, 189, 22, 151, 121, 135, 218, + 78, 209, 12, 51, 210, 192, 211, 91, 19, 63, 209, 132, 54, 90, 57, 110, 75, 37, 7, 138, 224, 0, + 102, 12, 151, 48, 190, 69, 30, 233, 118, 44, 192, 139, 102, 145, 95, 119, 254, 184, 22, 124, + 106, 128, 88, 192, 77, 86, 104, 210, 98, 79, 223, 104, 231, 199, 89, 164, 206, 37, 61, 16, 112, + 184, 248, 134, 143, 32, 126, 179, 127, 35, 26, 166, 181, 222, 69, 2, 207, 186, 107, 183, 118, + 131, 135, 182, 79, 153, 37, 20, 165, 38, 6, 125, 70, 225, 220, 136, 52, 164, 36, 121, 53, 116, + 236, 214, 218, 196, 79, 107, 46, 71, 77, 3, 41, 226, 84, 154, 64, 202, 107, 231, 44, 181, 186, + 137, 125, 41, 151, 93, 9, 40, 67, 148, 229, 205, 22, 71, 6, 161, 11, 123, 195, 162, 232, 147, + 73, 1, 221, 13, 128, 148, 104, 81, 215, 234, 230, 86, 156, 51, 94, 208, 190, 228, 136, 229, + 201, 147, 5, 75, 38, 18, 240, 95, 224, 203, 86, 99, 207, 185, 194, 46, 105, 0, 34, 214, 2, 43, + 255, 104, 241, 182, 240, 63, 194, 10, 5, 162, 166, 224, 12, 40, 75, 96, 70, 175, 36, 224, 231, + 248, 98, 3, 139, 55, 55, 109, 161, 221, 131, 176, 26, 131, 159, 247, 128, 105, 215, 255, 167, + 243, 167, 78, 198, 238, 17, 83, 66, 168, 6, 230, 155, 187, 204, 217, 241, 196, 41, 73, 28, 85, + 160, 9, 215, 194, 77, 29, 180, 158, 149, 74, 137, 185, 158, 237, 204, 43, 176, 199, 167, 33, + 100, 226, 72, 136, 127, 95, 203, 149, 119, 16, 50, 159, 225, 170, 251, 74, 85, 168, 76, 120, + 36, 5, 17, 230, 228, 161, 213, 129, 63, 150, 149, 97, 134, 167, 84, 152, 234, 65, 160, 223, + 190, 91, 107, 202, 31, 25, 36, 109, 43, 199, 254, 91, 24, 171, 160, 206, 1, 2, 232, 226, 15, + 229, 248, 92, 140, 60, 174, 215, 196, 118, 109, 183, 249, 42, 8, 201, 191, 155, 90, 68, 6, 79, + 131, 131, 58, 190, 207, 158, 77, 68, 197, 165, 84, 222, 202, 193, 155, 11, 59, 103, 106, 28, + 174, 133, 98, 106, 60, 205, 71, 254, 210, 148, 171, 110, 243, 181, 187, 135, 126, 113, 245, + 165, 98, 162, 13, 186, 21, 183, 26, 225, 191, 164, 66, 160, 114, 85, 246, 240, 75, 138, 19, 43, + 151, 25, 163, 237, 135, 67, 187, 5, 237, 26, 151, 77, 103, 115, 74, 186, 7, 239, 5, 183, 240, + 19, 82, 133, 93, 207, 211, 83, 235, 178, 45, 121, 3, 216, 144, 218, 159, 131, 242, 171, 97, + 228, 167, 208, 72, 172, 165, 116, 187, 32, 97, 109, 208, 187, 181, 183, 144, 23, 71, 179, 149, + 190, 71, 18, 80, 157, 226, 177, 214, 148, 70, 209, 93, 12, 151, 223, 249, 172, 75, 176, 192, + 230, 97, 206, 13, 110, 203, 61, 5, 38, 152, 140, 46, 38, 215, 200, 226, 6, 9, 172, 179, 116, + 141, 54, 37, 224, 99, 252, 231, 97, 218, 109, 22, 74, 100, 150, 124, 183, 85, 153, 50, 95, 245, + 65, 167, 253, 0, 15, 155, 111, 217, 227, 120, 154, 61, 231, 225, 146, 234, 176, 116, 126, 65, + 200, 202, 114, 153, 137, 107, 21, 11, 69, 140, 150, 3, 25, 27, 115, 193, 113, 213, 192, 99, + 171, 14, 102, 235, 175, 178, 187, 116, 132, 21, 228, 30, 27, 120, 202, 102, 145, 137, 4, 227, + 1, 223, 191, 102, 223, 128, 71, 56, 97, 224, 31, 54, 161, 29, 105, 9, 143, 209, 104, 117, 175, + 138, 11, 22, 151, 74, 38, 229, 196, 136, 197, 144, 198, 248, 78, 180, 199, 241, 180, 59, 166, + 185, 75, 215, 63, 78, 57, 79, 6, 96, 202, 109, 5, 102, 44, 87, 243, 46, 0, 110, 44, 253, 85, + 225, 76, 29, 233, 211, 197, 2, 150, 86, 170, 111, 72, 143, 129, 182, 8, 163, 27, 90, 183, 152, + 9, 151, 199, 23, 251, 23, 153, 31, 135, 134, 121, 169, 170, 176, 217, 49, 219, 172, 141, 18, + 172, 42, 228, 144, 224, 137, 155, 218, 93, 61, 142, 149, 162, 182, 83, 22, 56, 246, 206, 201, + 225, 100, 188, 158, 212, 210, 179, 50, 174, 177, 136, 131, 37, 217, 173, 93, 220, 61, 201, 32, + 88, 84, 165, 225, 240, 67, 237, 113, 247, 228, 62, 169, 140, 101, 226, 10, 12, 147, 174, 237, + 234, 124, 71, 161, 181, 134, 158, 71, 61, 211, 253, 102, 183, 85, 215, 210, 214, 140, 187, 144, + 46, 62, 168, 7, 247, 55, 18, 75, 143, 238, 40, 102, 92, 215, 227, 241, 255, 231, 184, 238, 35, + 211, 195, 135, 225, 237, 105, 30, 14, 124, 55, 203, 252, 140, 34, 97, 248, 49, 255, 210, 96, + 50, 69, 149, 77, 242, 11, 44, 189, 214, 195, 141, 135, 208, 162, 241, 238, 108, 68, 183, 117, + 253, 105, 81, 252, 140, 97, 37, 185, 9, 240, 244, 68, 79, 24, 170, 171, 98, 110, 40, 50, 105, + 205, 188, 134, 11, 181, 116, 186, 33, 174, 251, 144, 19, 87, 145, 160, 41, 246, 119, 83, 32, + 192, 69, 7, 190, 181, 243, 188, 91, 128, 27, 193, 168, 167, 210, 3, 129, 2, 231, 164, 214, 79, + 234, 71, 66, 213, 25, 159, 57, 176, 103, 58, 173, 163, 251, 229, 106, 232, 0, 111, 159, 147, + 184, 202, 76, 238, 5, 79, 72, 132, 61, 151, 152, 118, 217, 179, 147, 119, 160, 171, 189, 181, + 126, 170, 107, 246, 84, 105, 77, 53, 23, 186, 12, 28, 204, 89, 97, 180, 145, 239, 136, 226, + 234, 86, 220, 64, 61, 177, 195, 87, 96, 169, 146, 109, 195, 121, 35, 94, 81, 91, 2, 70, 15, 36, + 110, 197, 223, 27, 135, 244, 40, 15, 155, 145, 212, 51, 162, 165, 186, 64, 136, 211, 195, 89, + 174, 138, 191, 12, 16, 142, 182, 33, 173, 245, 117, 83, 45, 8, 129, 92, 153, 99, 4, 87, 124, + 173, 60, 59, 145, 215, 38, 91, 7, 244, 78, 199, 175, 212, 5, 85, 184, 170, 182, 12, 139, 197, + 144, 173, 20, 176, 49, 163, 117, 35, 234, 60, 63, 94, 249, 230, 65, 98, 10, 165, 7, 228, 172, + 63, 191, 40, 0, 51, 248, 100, 208, 242, 122, 193, 178, 53, 128, 135, 152, 180, 10, 97, 154, + 151, 168, 63, 140, 30, 146, 65, 56, 222, 0, 172, 85, 250, 158, 32, 179, 228, 215, 240, 106, 37, + 84, 201, 216, 108, 200, 111, 132, 105, 85, 0, 118, 24, 155, 139, 4, 111, 65, 19, 194, 60, 117, + 89, 99, 105, 191, 124, 58, 93, 81, 159, 58, 88, 71, 98, 200, 103, 13, 141, 153, 240, 42, 40, + 81, 153, 75, 120, 153, 135, 225, 229, 240, 150, 212, 179, 242, 101, 39, 245, 108, 56, 103, 35, + 177, 97, 24, 57, 94, 55, 175, 19, 127, 113, 6, 154, 194, 186, 215, 225, 137, 76, 96, 52, 51, + 149, 93, 11, 5, 102, 60, 188, 50, 210, 130, 148, 177, 247, 131, 138, 12, 72, 236, 2, 199, 4, + 138, 242, 78, 12, 138, 127, 210, 134, 93, 209, 139, 89, 172, 86, 72, 137, 116, 132, 145, 6, + 212, 199, 59, 81, 108, 87, 204, 26, 214, 208, 21, 99, 38, 113, 229, 238, 251, 32, 83, 19, 129, + 226, 67, 133, 60, 78, 33, 248, 215, 135, 133, 53, 109, 63, 175, 95, 159, 163, 0, 160, 74, 213, + 240, 141, 200, 134, 252, 47, 246, 231, 180, 196, 102, 239, 242, 176, 75, 14, 76, 165, 255, 209, + 186, 131, 3, 163, 91, 187, 36, 5, 247, 182, 167, 19, 57, 98, 218, 65, 222, 96, 233, 218, 173, + 91, 213, 53, 183, 251, 2, 134, 147, 107, 70, 97, 24, 223, 40, 104, 74, 154, 158, 206, 198, 136, + 144, 54, 201, 107, 245, 116, 15, 112, 129, 237, 2, 142, 33, 112, 188, 209, 62, 194, 94, 101, + 73, 139, 53, 182, 110, 45, 63, 106, 214, 146, 130, 104, 14, 66, 112, 122, 99, 12, 66, 86, 56, + 89, 125, 196, 177, 22, 48, 167, 211, 29, 243, 194, 165, 113, 42, 24, 90, 202, 100, 229, 123, + 10, 94, 244, 11, 234, 156, 149, 134, 83, 110, 53, 174, 45, 219, 218, 154, 78, 80, 232, 215, + 172, 197, 126, 211, 219, 176, 196, 141, 241, 103, 59, 42, 250, 27, 80, 203, 117, 198, 171, 178, + 98, 91, 162, 254, 38, 183, 85, 59, 5, 108, 143, 47, 247, 133, 79, 21, 242, 14, 0, 131, 45, 122, + 218, 71, 214, 44, 242, 26, 153, 48, 41, 143, 43, 75, 70, 78, 108, 35, 13, 47, 164, 113, 105, + 166, 108, 209, 90, 139, 163, 193, 213, 74, 129, 42, 40, 189, 95, 58, 139, 172, 157, 214, 190, + 225, 149, 241, 215, 186, 126, 92, 230, 31, 148, 136, 221, 114, 10, 61, 193, 123, 156, 140, 111, + 182, 196, 173, 62, 218, 7, 28, 112, 165, 173, 104, 102, 198, 205, 80, 81, 85, 11, 129, 4, 171, + 182, 31, 64, 92, 127, 8, 92, 72, 140, 97, 1, 51, 73, 200, 11, 214, 248, 50, 218, 171, 142, 126, + 34, 41, 227, 209, 29, 73, 4, 181, 115, 251, 6, 182, 158, 73, 154, 118, 252, 196, 106, 250, 236, + 187, 237, 79, 70, 132, 193, 210, 180, 10, 229, 45, 141, 21, 91, 86, 119, 201, 18, 38, 147, 222, + 118, 94, 238, 69, 253, 204, 88, 143, 216, 68, 108, 72, 205, 95, 164, 244, 51, 35, 142, 121, + 195, 228, 168, 179, 208, 174, 175, 0, 193, 124, 185, 163, 178, 65, 117, 9, 87, 74, 25, 161, + 241, 124, 145, 51, 182, 11, 253, 210, 60, 102, 177, 232, 112, 14, 19, 122, 14, 111, 225, 209, + 152, 218, 58, 252, 159, 249, 12, 178, 151, 110, 92, 162, 157, 60, 64, 113, 47, 30, 85, 21, 212, + 209, 188, 249, 236, 83, 9, 216, 90, 194, 216, 183, 195, 86, 103, 198, 117, 172, 146, 154, 189, + 44, 59, 77, 117, 207, 242, 105, 191, 186, 139, 110, 15, 184, 69, 124, 33, 21, 234, 106, 213, + 130, 177, 22, 135, 192, 250, 90, 225, 248, 15, 221, 206, 184, 49, 106, 193, 10, 42, 199, 208, + 106, 204, 54, 40, 28, 136, 37, 83, 182, 75, 178, 64, 112, 234, 161, 122, 209, 141, 212, 32, + 173, 119, 226, 234, 19, 89, 210, 216, 235, 51, 177, 148, 194, 150, 130, 84, 117, 23, 154, 91, + 94, 9, 0, 159, 46, 185, 166, 22, 86, 211, 237, 233, 166, 31, 3, 200, 158, 182, 18, 234, 32, + 160, 74, 139, 184, 246, 0, 14, 220, 47, 244, 165, 51, 123, 236, 195, 183, 150, 38, 41, 123, + 181, 34, 103, 142, 168, 51, 218, 202, 14, 177, 223, 153, 144, 64, 56, 107, 77, 133, 89, 245, + 203, 228, 137, 218, 35, 0, 63, 32, 66, 66, 53, 117, 156, 179, 92, 248, 74, 82, 169, 82, 34, 30, + 172, 212, 33, 188, 116, 241, 135, 209, 139, 61, 181, 100, 45, 145, 112, 34, 180, 231, 199, 85, + 133, 221, 86, 17, 46, 195, 159, 190, 124, 63, 1, 155, 33, 243, 37, 236, 31, 77, 197, 187, 47, + 230, 66, 77, 142, 113, 254, 252, 149, 228, 190, 203, 235, 117, 225, 226, 84, 85, 61, 159, 5, + 161, 182, 214, 115, 222, 118, 138, 134, 199, 201, 187, 123, 15, 110, 72, 159, 10, 212, 219, + 189, 162, 76, 71, 92, 184, 199, 30, 64, 127, 120, 161, 105, 26, 25, 38, 209, 4, 25, 90, 47, 46, + 123, 179, 233, 152, 118, 157, 30, 69, 71, 207, 9, 145, 17, 29, 249, 243, 84, 216, 215, 185, + 144, 29, 57, 135, 237, 230, 238, 46, 83, 80, 117, 151, 147, 244, 154, 145, 232, 235, 45, 117, + 220, 183, 174, 37, 113, 105, 48, 93, 162, 35, 136, 237, 90, 62, 31, 12, 166, 146, 139, 195, 19, + 128, 24, 43, 114, 92, 237, 34, 205, 145, 208, 252, 35, 162, 28, 4, 190, 18, 106, 123, 224, 224, + 10, 135, 7, 226, 178, 93, 71, 129, 228, 44, 234, 9, 168, 57, 106, 121, 39, 138, 139, 203, 189, + 13, 240, 138, 50, 250, 117, 76, 198, 0, 197, 110, 17, 242, 232, 61, 46, 28, 97, 177, 207, 155, + 133, 84, 97, 231, 210, 16, 167, 198, 49, 220, 59, 101, 129, 58, 148, 126, 131, 155, 141, 9, + 190, 220, 17, 125, 87, 111, 201, 108, 20, 65, 181, 115, 206, 207, 2, 178, 71, 159, 166, 73, + 184, 199, 144, 92, 57, 166, 100, 126, 88, 116, 15, 122, 123, 231, 188, 223, 31, 69, 67, 56, + 242, 192, 175, 179, 210, 59, 42, 111, 73, 215, 170, 94, 26, 125, 72, 159, 200, 37, 144, 84, + 239, 27, 64, 99, 45, 112, 117, 243, 103, 75, 254, 234, 70, 199, 192, 231, 98, 116, 26, 18, 40, + 92, 220, 112, 13, 203, 87, 255, 254, 146, 105, 103, 7, 142, 139, 66, 86, 75, 134, 79, 207, 80, + 27, 49, 16, 68, 38, 125, 136, 108, 63, 144, 4, 55, 109, 150, 50, 179, 144, 29, 54, 158, 52, + 238, 162, 165, 139, 251, 39, 159, 33, 125, 248, 146, 255, 68, 159, 173, 119, 89, 15, 224, 54, + 101, 138, 148, 109, 52, 212, 215, 120, 28, 89, 169, 121, 201, 154, 6, 210, 23, 76, 209, 37, 28, + 159, 138, 150, 68, 245, 124, 194, 84, 173, 210, 20, 100, 81, 115, 51, 182, 223, 102, 145, 144, + 44, 146, 97, 246, 249, 109, 101, 69, 77, 64, 96, 195, 249, 5, 96, 56, 34, 219, 80, 190, 51, + 191, 194, 18, 102, 216, 253, 6, 219, 220, 4, 189, 44, 97, 195, 135, 253, 110, 71, 154, 209, + 146, 51, 149, 90, 145, 218, 28, 118, 150, 51, 1, 27, 190, 176, 253, 171, 42, 101, 143, 105, + 136, 227, 154, 231, 229, 164, 44, 127, 246, 106, 203, 46, 199, 131, 123, 36, 8, 11, 249, 191, + 249, 223, 159, 131, 49, 185, 197, 235, 192, 255, 190, 196, 110, 255, 246, 88, 91, 145, 37, 148, + 236, 88, 55, 229, 242, 103, 140, 74, 103, 245, 19, 31, 52, 158, 253, 205, 221, 77, 128, 43, 37, + 197, 249, 158, 155, 100, 127, 201, 188, 32, 20, 130, 101, 116, 215, 207, 92, 231, 233, 172, + 181, 85, 233, 112, 218, 23, 102, 205, 193, 227, 254, 22, 3, 30, 3, 135, 107, 252, 140, 147, + 135, 239, 76, 13, 119, 31, 28, 128, 234, 78, 173, 63, 19, 253, 184, 86, 118, 140, 3, 148, 10, + 140, 57, 12, 224, 6, 255, 132, 242, 67, 79, 135, 0, 54, 189, 48, 33, 96, 94, 241, 255, 84, 202, + 60, 28, 215, 167, 71, 71, 70, 249, 234, 49, 216, 142, 134, 42, 205, 233, 91, 196, 211, 195, 82, + 170, 202, 115, 44, 237, 161, 238, 44, 202, 184, 251, 0, 118, 94, 181, 91, 161, 48, 120, 134, + 123, 0, 96, 21, 240, 50, 212, 32, 157, 111, 90, 225, 177, 88, 161, 118, 97, 53, 143, 41, 236, + 46, 18, 108, 173, 127, 65, 75, 184, 65, 249, 169, 161, 105, 133, 23, 226, 107, 255, 191, 96, + 176, 7, 169, 71, 17, 128, 70, 26, 133, 35, 190, 113, 185, 212, 23, 38, 63, 190, 231, 27, 49, + 170, 65, 211, 72, 137, 69, 240, 132, 178, 49, 186, 203, 122, 202, 255, 83, 119, 92, 225, 129, + 49, 106, 123, 113, 76, 227, 9, 124, 108, 133, 71, 87, 39, 122, 173, 210, 136, 135, 118, 200, + 48, 253, 82, 148, 166, 3, 177, 95, 79, 176, 224, 149, 100, 143, 203, 171, 180, 196, 58, 24, 70, + 21, 59, 5, 143, 213, 221, 147, 247, 160, 130, 106, 30, 231, 179, 167, 180, 45, 179, 176, 13, + 163, 140, 184, 143, 86, 235, 111, 176, 236, 149, 181, 0, 102, 76, 189, 66, 43, 163, 24, 221, + 218, 105, 121, 0, 91, 72, 210, 35, 222, 120, 195, 181, 102, 46, 117, 189, 212, 130, 38, 138, + 246, 75, 222, 87, 212, 169, 4, 248, 16, 248, 74, 163, 68, 46, 190, 183, 234, 249, 89, 153, 137, + 154, 221, 112, 87, 15, 185, 188, 166, 93, 147, 210, 226, 98, 133, 46, 247, 105, 199, 115, 34, + 17, 247, 89, 14, 16, 85, 85, 4, 34, 190, 82, 61, 26, 134, 40, 147, 163, 2, 117, 202, 17, 64, + 42, 155, 13, 85, 87, 234, 132, 237, 240, 116, 146, 165, 219, 142, 214, 121, 197, 168, 253, 125, + 211, 80, 214, 42, 157, 204, 96, 51, 162, 54, 162, 20, 203, 174, 166, 209, 70, 12, 224, 23, 127, + 30, 86, 207, 150, 124, 48, 140, 77, 250, 228, 196, 36, 159, 251, 179, 7, 174, 238, 51, 99, 229, + 47, 244, 179, 70, 215, 171, 254, 242, 99, 159, 61, 82, 230, 131, 142, 50, 83, 177, 173, 75, + 120, 4, 1, 134, 108, 51, 9, 6, 228, 170, 65, 239, 178, 232, 95, 23, 17, 102, 134, 248, 247, 56, + 210, 84, 23, 204, 236, 154, 35, 241, 21, 47, 116, 241, 46, 84, 38, 164, 53, 193, 241, 149, 114, + 66, 216, 170, 216, 229, 154, 7, 184, 95, 1, 187, 175, 35, 195, 20, 145, 51, 66, 62, 108, 237, + 136, 79, 146, 159, 107, 60, 163, 206, 77, 8, 86, 73, 214, 187, 72, 251, 82, 153, 197, 117, 144, + 59, 208, 89, 189, 31, 189, 229, 80, 58, 69, 225, 183, 81, 38, 162, 3, 184, 98, 159, 144, 8, 79, + 64, 235, 89, 156, 247, 150, 35, 22, 52, 251, 244, 75, 242, 149, 169, 106, 229, 56, 8, 151, 165, + 12, 177, 105, 65, 245, 51, 110, 247, 7, 245, 24, 207, 83, 39, 140, 175, 118, 109, 252, 188, + 194, 129, 100, 212, 70, 133, 199, 190, 70, 104, 189, 14, 239, 194, 116, 62, 6, 235, 100, 131, + 68, 71, 30, 111, 0, 55, 111, 117, 188, 164, 244, 228, 255, 149, 154, 54, 164, 143, 75, 60, 158, + 29, 133, 165, 105, 76, 250, 56, 196, 63, 126, 211, 250, 204, 4, 200, 235, 76, 227, 157, 192, + 48, 235, 31, 98, 45, 239, 73, 126, 33, 126, 94, 23, 133, 206, 236, 170, 227, 91, 218, 207, 211, + 23, 53, 136, 63, 217, 160, 117, 192, 209, 243, 60, 218, 167, 37, 226, 95, 169, 25, 91, 19, 26, + 109, 142, 42, 91, 88, 221, 186, 242, 87, 91, 31, 7, 207, 164, 118, 109, 125, 199, 78, 64, 97, + 20, 151, 234, 57, 113, 182, 236, 28, 75, 52, 190, 198, 255, 100, 178, 181, 183, 18, 51, 146, + 165, 1, 169, 233, 175, 136, 235, 47, 32, 140, 206, 32, 192, 187, 224, 134, 240, 47, 251, 254, + 217, 65, 107, 199, 159, 242, 170, 3, 63, 202, 55, 250, 73, 193, 160, 152, 148, 221, 87, 112, + 228, 22, 188, 80, 127, 226, 150, 161, 166, 49, 56, 78, 134, 234, 40, 15, 153, 74, 26, 175, 18, + 205, 224, 110, 177, 168, 24, 9, 6, 135, 120, 112, 20, 57, 218, 220, 25, 55, 175, 232, 67, 11, + 124, 238, 218, 138, 18, 93, 1, 77, 192, 240, 119, 17, 70, 144, 3, 94, 117, 173, 229, 172, 44, + 81, 100, 114, 114, 204, 154, 135, 0, 97, 234, 2, 53, 87, 184, 71, 169, 173, 70, 121, 187, 85, + 182, 5, 54, 169, 162, 205, 93, 176, 227, 156, 95, 215, 41, 96, 208, 122, 11, 18, 158, 147, 98, + 189, 189, 17, 163, 143, 102, 254, 157, 155, 76, 167, 193, 102, 62, 95, 217, 66, 30, 159, 27, + 103, 75, 13, 127, 218, 134, 113, 233, 234, 136, 200, 142, 197, 57, 35, 164, 204, 4, 205, 134, + 6, 236, 178, 125, 62, 23, 170, 3, 163, 109, 224, 129, 252, 204, 235, 89, 182, 99, 186, 87, 178, + 183, 39, 83, 17, 92, 227, 254, 190, 157, 226, 149, 2, 223, 17, 204, 196, 55, 77, 22, 45, 147, + 193, 191, 167, 173, 79, 99, 193, 156, 182, 22, 32, 210, 215, 112, 84, 98, 88, 244, 249, 165, + 92, 128, 46, 62, 7, 82, 10, 36, 167, 147, 169, 6, 250, 165, 207, 155, 162, 245, 212, 246, 141, + 73, 149, 244, 186, 56, 176, 254, 138, 97, 7, 9, 39, 176, 56, 50, 117, 151, 77, 204, 179, 101, + 30, 253, 113, 139, 34, 41, 241, 185, 64, 97, 126, 18, 182, 157, 148, 116, 159, 56, 46, 220, + 138, 193, 208, 196, 35, 216, 136, 73, 219, 196, 178, 221, 111, 157, 157, 75, 9, 59, 33, 125, + 249, 23, 133, 192, 151, 169, 12, 110, 134, 44, 51, 86, 204, 131, 19, 35, 9, 139, 22, 115, 75, + 146, 7, 109, 47, 196, 22, 108, 213, 56, 54, 151, 52, 40, 234, 224, 30, 130, 101, 231, 9, 160, + 174, 44, 67, 243, 105, 81, 176, 251, 95, 218, 98, 85, 62, 96, 1, 209, 99, 64, 49, 242, 191, + 131, 186, 167, 103, 155, 241, 226, 142, 203, 73, 170, 119, 62, 42, 228, 89, 120, 182, 108, 26, + 100, 173, 239, 61, 185, 165, 142, 121, 98, 113, 237, 126, 172, 74, 221, 63, 227, 109, 141, 250, + 189, 74, 245, 220, 10, 97, 73, 152, 153, 30, 82, 99, 230, 127, 198, 161, 86, 170, 8, 146, 101, + 233, 159, 193, 39, 224, 33, 143, 160, 36, 30, 13, 194, 204, 89, 38, 88, 169, 251, 40, 104, 112, + 104, 46, 116, 20, 49, 128, 57, 45, 94, 136, 110, 135, 139, 7, 98, 215, 26, 187, 169, 8, 25, 46, + 56, 23, 110, 228, 179, 201, 226, 75, 103, 214, 179, 225, 81, 159, 235, 172, 236, 124, 230, 139, + 181, 224, 25, 60, 62, 249, 128, 124, 95, 177, 75, 54, 57, 98, 175, 208, 154, 233, 217, 1, 237, + 121, 216, 53, 12, 21, 90, 171, 109, 246, 249, 102, 121, 75, 123, 188, 189, 165, 52, 174, 212, + 195, 37, 19, 81, 247, 221, 254, 3, 125, 232, 212, 236, 250, 4, 92, 233, 48, 94, 216, 243, 122, + 54, 31, 166, 164, 229, 12, 231, 211, 233, 39, 6, 225, 59, 167, 200, 90, 245, 98, 216, 176, 129, + 208, 120, 142, 101, 115, 153, 184, 19, 172, 169, 222, 177, 208, 63, 247, 217, 65, 124, 67, 231, + 159, 107, 88, 56, 249, 66, 21, 207, 154, 124, 192, 165, 91, 73, 219, 177, 97, 25, 30, 69, 57, + 249, 37, 201, 187, 175, 22, 120, 35, 109, 2, 149, 147, 244, 121, 17, 59, 137, 24, 68, 110, 84, + 236, 72, 242, 72, 21, 98, 152, 18, 59, 122, 40, 36, 122, 200, 101, 196, 20, 49, 165, 253, 240, + 13, 252, 196, 55, 114, 62, 33, 59, 2, 132, 91, 46, 212, 253, 149, 93, 120, 199, 7, 148, 12, + 163, 238, 39, 98, 235, 95, 95, 157, 167, 44, 180, 201, 57, 147, 121, 196, 20, 29, 0, 134, 92, + 85, 62, 249, 192, 133, 38, 85, 59, 193, 242, 195, 183, 107, 189, 251, 197, 44, 28, 92, 186, + 255, 222, 217, 85, 232, 222, 33, 193, 161, 44, 2, 107, 238, 30, 123, 245, 139, 106, 162, 76, + 103, 27, 160, 27, 106, 31, 15, 173, 63, 227, 27, 206, 195, 199, 101, 132, 127, 247, 159, 79, + 219, 3, 225, 186, 172, 81, 138, 87, 65, 187, 126, 7, 116, 168, 43, 74, 175, 164, 131, 168, 246, + 114, 77, 85, 157, 133, 161, 127, 19, 238, 83, 255, 229, 43, 92, 205, 220, 17, 33, 194, 115, 51, + 104, 251, 122, 175, 226, 18, 250, 144, 24, 211, 121, 41, 91, 124, 23, 222, 184, 74, 165, 150, + 190, 230, 89, 93, 86, 160, 233, 232, 106, 1, 153, 237, 113, 126, 86, 91, 173, 85, 68, 19, 240, + 119, 151, 242, 99, 29, 250, 142, 32, 34, 124, 168, 119, 171, 167, 45, 237, 63, 126, 76, 110, + 135, 248, 222, 139, 230, 155, 13, 33, 227, 208, 172, 77, 58, 40, 94, 4, 146, 183, 152, 128, + 124, 127, 67, 153, 67, 45, 204, 157, 23, 41, 138, 80, 138, 37, 88, 231, 152, 206, 52, 102, 247, + 215, 32, 78, 16, 44, 70, 129, 16, 172, 181, 167, 167, 133, 172, 75, 41, 181, 143, 207, 86, 92, + 166, 218, 130, 34, 208, 108, 231, 74, 230, 197, 20, 166, 143, 119, 96, 52, 165, 133, 110, 226, + 206, 89, 182, 238, 204, 129, 226, 162, 212, 252, 36, 87, 159, 37, 0, 191, 183, 135, 124, 1, 62, + 110, 85, 153, 97, 216, 46, 241, 226, 97, 215, 93, 66, 232, 172, 133, 141, 229, 83, 228, 84, + 101, 78, 192, 129, 136, 122, 176, 220, 188, 198, 192, 226, 98, 192, 84, 197, 169, 247, 55, 74, + 13, 178, 182, 47, 219, 60, 178, 17, 85, 137, 0, 222, 119, 37, 212, 48, 254, 253, 39, 3, 251, + 136, 232, 230, 182, 242, 37, 236, 180, 219, 193, 102, 208, 93, 146, 137, 7, 11, 119, 65, 91, + 36, 34, 229, 68, 24, 12, 23, 240, 182, 64, 23, 66, 201, 119, 128, 30, 98, 28, 151, 224, 177, + 177, 150, 17, 150, 73, 33, 220, 147, 17, 131, 171, 224, 18, 72, 240, 34, 140, 149, 143, 231, + 155, 5, 133, 210, 220, 170, 50, 46, 153, 97, 20, 235, 186, 93, 198, 53, 74, 112, 234, 45, 127, + 103, 91, 76, 236, 202, 88, 151, 3, 193, 85, 250, 118, 12, 193, 216, 117, 106, 20, 47, 106, 96, + 189, 215, 153, 134, 187, 240, 44, 213, 206, 69, 123, 253, 242, 103, 102, 220, 35, 147, 24, 16, + 146, 186, 25, 193, 14, 183, 248, 227, 59, 223, 11, 29, 5, 252, 181, 231, 131, 97, 223, 199, + 163, 184, 168, 249, 32, 124, 86, 144, 105, 123, 217, 235, 87, 178, 90, 235, 60, 23, 187, 104, + 178, 210, 64, 144, 246, 152, 234, 99, 241, 144, 198, 12, 185, 100, 174, 47, 15, 48, 59, 69, + 154, 216, 254, 254, 241, 3, 189, 238, 73, 247, 245, 130, 115, 12, 25, 140, 57, 216, 196, 169, + 60, 89, 140, 128, 230, 186, 123, 238, 150, 73, 79, 218, 106, 229, 244, 225, 193, 76, 130, 173, + 67, 207, 237, 77, 156, 15, 122, 212, 4, 6, 48, 222, 231, 174, 199, 140, 190, 155, 96, 1, 69, + 101, 240, 60, 115, 155, 176, 195, 113, 173, 48, 54, 244, 65, 155, 52, 78, 25, 171, 23, 220, + 119, 241, 88, 180, 65, 92, 56, 247, 236, 47, 194, 139, 153, 147, 136, 79, 217, 203, 182, 226, + 87, 213, 208, 255, 253, 30, 54, 243, 136, 126, 255, 176, 40, 255, 154, 180, 145, 255, 19, 47, + 5, 39, 233, 206, 131, 86, 254, 180, 28, 2, 44, 165, 106, 114, 19, 181, 120, 27, 247, 145, 243, + 247, 26, 53, 14, 80, 76, 141, 161, 58, 231, 61, 6, 5, 48, 54, 77, 8, 204, 3, 177, 198, 116, + 120, 12, 252, 15, 175, 22, 143, 8, 174, 61, 72, 82, 202, 10, 117, 192, 6, 73, 15, 11, 161, 199, + 68, 138, 168, 10, 124, 131, 32, 197, 127, 153, 167, 176, 226, 211, 40, 5, 118, 224, 197, 107, + 194, 226, 248, 153, 166, 202, 183, 55, 204, 91, 51, 155, 114, 234, 95, 115, 103, 128, 5, 84, + 222, 7, 29, 114, 90, 228, 59, 26, 137, 251, 170, 213, 43, 23, 129, 219, 100, 220, 66, 251, 186, + 109, 189, 117, 219, 88, 224, 48, 240, 209, 59, 233, 78, 83, 66, 86, 9, 197, 221, 9, 250, 42, + 174, 11, 206, 144, 45, 108, 60, 115, 219, 7, 169, 176, 106, 174, 247, 199, 176, 152, 80, 215, + 133, 213, 169, 131, 248, 13, 110, 224, 134, 160, 102, 4, 242, 207, 173, 199, 255, 118, 4, 189, + 3, 118, 249, 189, 16, 138, 242, 43, 210, 57, 166, 76, 188, 7, 111, 93, 207, 7, 66, 72, 228, + 229, 101, 32, 143, 99, 119, 148, 159, 0, 192, 146, 232, 177, 243, 202, 165, 159, 193, 186, 243, + 65, 89, 105, 49, 154, 79, 19, 52, 154, 251, 64, 252, 148, 122, 189, 167, 59, 211, 249, 93, 129, + 245, 167, 67, 159, 91, 246, 146, 192, 60, 90, 136, 134, 184, 151, 147, 185, 89, 129, 197, 139, + 100, 246, 98, 97, 175, 152, 251, 105, 52, 98, 104, 172, 71, 238, 15, 228, 112, 56, 20, 228, 45, + 203, 68, 182, 115, 58, 209, 139, 20, 45, 219, 133, 62, 44, 81, 17, 94, 177, 63, 147, 22, 72, + 157, 182, 193, 208, 78, 194, 170, 164, 215, 48, 184, 180, 209, 95, 71, 182, 253, 150, 31, 17, + 240, 19, 81, 30, 190, 248, 83, 54, 31, 73, 238, 188, 90, 111, 254, 185, 138, 93, 81, 25, 10, + 136, 80, 208, 234, 63, 189, 26, 9, 158, 147, 182, 163, 68, 175, 91, 185, 139, 122, 223, 125, + 61, 75, 56, 46, 171, 245, 133, 95, 85, 147, 51, 87, 255, 191, 75, 28, 201, 63, 128, 152, 60, + 193, 5, 233, 113, 1, 152, 196, 236, 245, 24, 248, 148, 142, 231, 61, 0, 185, 136, 70, 0, 231, + 207, 220, 246, 16, 59, 124, 136, 244, 92, 149, 188, 140, 204, 100, 142, 154, 156, 42, 31, 6, + 189, 149, 191, 213, 36, 162, 190, 116, 122, 71, 22, 8, 247, 104, 133, 116, 241, 29, 159, 19, + 122, 31, 158, 230, 243, 169, 224, 103, 248, 68, 7, 119, 86, 87, 131, 61, 165, 101, 75, 76, 75, + 227, 149, 72, 75, 128, 209, 174, 44, 226, 152, 189, 244, 192, 184, 165, 186, 228, 233, 141, 44, + 94, 90, 245, 12, 8, 61, 134, 104, 217, 227, 136, 127, 28, 177, 111, 3, 43, 152, 213, 215, 21, + 79, 115, 188, 14, 77, 187, 178, 110, 215, 22, 73, 32, 133, 148, 95, 40, 226, 226, 77, 120, 167, + 24, 46, 223, 52, 33, 119, 244, 112, 163, 38, 190, 142, 188, 200, 53, 189, 152, 24, 83, 56, 159, + 125, 224, 86, 219, 168, 233, 247, 218, 67, 61, 243, 62, 140, 30, 106, 50, 206, 103, 22, 49, + 203, 247, 102, 45, 238, 132, 8, 176, 217, 239, 109, 109, 243, 90, 91, 217, 196, 248, 163, 124, + 77, 14, 253, 19, 165, 203, 63, 111, 204, 201, 241, 102, 53, 46, 55, 48, 138, 12, 140, 165, 227, + 78, 34, 47, 244, 139, 26, 11, 207, 231, 53, 165, 63, 152, 175, 128, 255, 121, 191, 44, 26, 170, + 165, 129, 86, 196, 184, 48, 20, 85, 13, 187, 94, 18, 180, 222, 10, 130, 89, 161, 131, 56, 49, + 253, 92, 168, 227, 70, 251, 248, 169, 149, 245, 33, 176, 164, 80, 13, 247, 101, 157, 205, 128, + 32, 238, 192, 238, 101, 55, 172, 205, 138, 200, 83, 206, 200, 132, 166, 140, 70, 238, 217, 197, + 214, 193, 110, 171, 18, 123, 236, 143, 162, 171, 250, 207, 244, 63, 134, 17, 211, 140, 104, + 155, 131, 226, 177, 166, 114, 11, 128, 234, 171, 17, 78, 53, 242, 117, 42, 134, 198, 10, 237, + 136, 212, 116, 20, 27, 195, 41, 71, 127, 76, 192, 130, 135, 88, 26, 179, 210, 64, 77, 214, 107, + 244, 244, 15, 187, 135, 89, 16, 220, 12, 58, 215, 170, 102, 46, 243, 244, 85, 165, 211, 83, + 113, 96, 50, 186, 27, 126, 192, 219, 194, 22, 208, 173, 47, 94, 228, 185, 252, 112, 147, 3, 73, + 121, 119, 255, 211, 245, 223, 153, 16, 116, 11, 63, 164, 186, 74, 87, 85, 201, 137, 122, 198, + 235, 61, 127, 193, 175, 183, 172, 251, 80, 153, 81, 8, 237, 4, 221, 25, 234, 193, 100, 198, 14, + 48, 222, 195, 173, 197, 99, 116, 101, 121, 197, 209, 81, 123, 142, 26, 176, 11, 135, 22, 142, + 14, 32, 111, 226, 76, 191, 25, 143, 149, 102, 113, 165, 139, 31, 81, 195, 214, 114, 64, 233, + 144, 246, 142, 223, 125, 169, 198, 42, 220, 251, 63, 136, 223, 198, 193, 231, 171, 210, 44, 66, + 208, 121, 220, 135, 233, 8, 90, 128, 176, 14, 12, 137, 150, 210, 156, 189, 248, 38, 123, 108, + 176, 202, 151, 247, 57, 236, 8, 136, 7, 202, 233, 172, 43, 144, 210, 6, 237, 120, 18, 40, 224, + 61, 134, 241, 86, 206, 213, 232, 242, 218, 175, 166, 155, 24, 63, 149, 245, 232, 201, 49, 92, + 90, 73, 196, 177, 11, 123, 113, 46, 105, 164, 239, 69, 132, 185, 35, 3, 20, 180, 10, 4, 51, 10, + 105, 180, 152, 76, 232, 165, 182, 170, 229, 230, 240, 22, 50, 62, 17, 20, 97, 30, 224, 66, 227, + 82, 119, 105, 124, 247, 181, 170, 192, 203, 146, 168, 20, 161, 35, 231, 205, 34, 123, 134, 21, + 76, 212, 174, 53, 108, 162, 144, 141, 112, 107, 124, 152, 153, 119, 143, 243, 79, 45, 75, 59, + 54, 54, 163, 129, 43, 212, 82, 103, 181, 63, 82, 60, 147, 15, 152, 86, 20, 21, 134, 169, 138, + 205, 114, 147, 142, 149, 34, 50, 43, 177, 250, 211, 36, 232, 113, 83, 234, 117, 229, 230, 191, + 214, 62, 32, 66, 94, 120, 121, 237, 181, 189, 225, 64, 74, 230, 60, 31, 230, 84, 191, 60, 66, + 101, 190, 111, 209, 28, 201, 184, 150, 79, 83, 148, 68, 202, 199, 198, 244, 194, 246, 183, 243, + 192, 136, 98, 33, 221, 101, 80, 86, 243, 131, 196, 138, 98, 6, 13, 206, 26, 137, 83, 31, 224, + 214, 139, 78, 52, 116, 107, 123, 240, 68, 246, 48, 81, 209, 81, 117, 108, 251, 109, 82, 35, + 181, 203, 124, 90, 197, 143, 107, 32, 241, 51, 184, 148, 195, 228, 177, 63, 77, 235, 122, 130, + 115, 98, 168, 146, 225, 64, 48, 112, 59, 248, 88, 153, 67, 53, 56, 152, 202, 154, 127, 0, 81, + 4, 242, 156, 18, 216, 210, 30, 102, 205, 114, 98, 139, 225, 60, 241, 214, 235, 39, 252, 134, + 237, 211, 235, 165, 30, 8, 115, 177, 110, 147, 91, 48, 230, 71, 153, 6, 77, 228, 192, 185, 30, + 217, 153, 194, 77, 123, 189, 241, 52, 66, 157, 175, 228, 189, 218, 161, 161, 8, 157, 13, 241, + 235, 172, 192, 67, 9, 219, 3, 16, 73, 117, 47, 233, 65, 20, 72, 74, 129, 175, 61, 157, 56, 20, + 104, 17, 27, 225, 169, 166, 220, 150, 89, 100, 233, 65, 75, 182, 91, 69, 89, 178, 58, 65, 10, + 28, 25, 168, 120, 43, 160, 31, 121, 20, 180, 137, 114, 116, 209, 112, 3, 7, 119, 16, 204, 29, + 177, 167, 124, 0, 98, 93, 0, 160, 251, 219, 192, 32, 102, 216, 146, 135, 205, 82, 189, 65, 169, + 164, 166, 16, 54, 206, 65, 245, 236, 80, 238, 170, 94, 115, 135, 231, 76, 16, 207, 66, 34, 121, + 97, 57, 152, 219, 61, 19, 30, 181, 218, 243, 83, 72, 77, 24, 172, 168, 147, 62, 238, 35, 207, + 210, 105, 44, 172, 152, 115, 165, 110, 238, 99, 120, 101, 158, 250, 139, 155, 156, 119, 225, + 35, 228, 157, 209, 67, 56, 133, 136, 23, 2, 179, 43, 18, 79, 43, 77, 233, 216, 206, 108, 162, + 124, 243, 72, 113, 152, 208, 151, 138, 40, 159, 20, 153, 155, 179, 82, 80, 127, 13, 66, 123, + 221, 134, 166, 189, 2, 218, 230, 126, 126, 120, 98, 129, 153, 89, 14, 169, 57, 143, 127, 59, + 148, 34, 173, 24, 238, 117, 196, 78, 168, 30, 200, 50, 70, 106, 68, 60, 199, 77, 255, 230, 35, + 136, 222, 107, 223, 9, 117, 13, 85, 109, 12, 148, 175, 167, 246, 150, 49, 147, 64, 141, 215, + 67, 9, 200, 10, 169, 205, 14, 237, 14, 151, 229, 243, 135, 204, 106, 193, 132, 94, 26, 13, 253, + 147, 121, 212, 227, 54, 177, 216, 139, 117, 70, 33, 37, 153, 3, 31, 106, 15, 59, 142, 51, 158, + 31, 167, 197, 248, 7, 24, 49, 123, 200, 57, 2, 165, 236, 175, 24, 132, 224, 148, 140, 178, 160, + 86, 17, 206, 44, 76, 248, 97, 74, 90, 126, 166, 136, 179, 255, 250, 242, 184, 212, 104, 82, 8, + 149, 88, 25, 40, 198, 52, 122, 245, 154, 122, 88, 74, 173, 195, 65, 246, 168, 63, 217, 176, + 218, 62, 170, 243, 152, 117, 175, 254, 216, 202, 123, 17, 11, 54, 95, 34, 168, 230, 53, 248, + 162, 202, 116, 126, 226, 122, 76, 215, 146, 95, 205, 146, 156, 62, 154, 242, 56, 213, 113, 213, + 28, 214, 124, 182, 168, 161, 119, 89, 92, 23, 96, 103, 200, 14, 14, 178, 117, 140, 75, 3, 82, + 99, 78, 164, 55, 185, 150, 205, 48, 85, 193, 252, 217, 142, 132, 212, 205, 93, 53, 195, 129, 4, + 25, 102, 125, 73, 248, 2, 89, 139, 199, 23, 172, 56, 125, 56, 242, 19, 116, 88, 66, 108, 226, + 124, 16, 35, 108, 72, 4, 26, 213, 108, 215, 92, 100, 237, 99, 212, 105, 89, 155, 45, 158, 5, + 96, 72, 244, 18, 159, 93, 129, 132, 189, 64, 214, 246, 13, 85, 167, 206, 169, 74, 80, 230, 178, + 170, 246, 139, 248, 33, 199, 243, 69, 32, 101, 244, 131, 233, 213, 253, 1, 53, 183, 116, 130, + 192, 97, 79, 132, 110, 72, 123, 182, 218, 197, 118, 98, 65, 211, 129, 79, 17, 99, 244, 9, 161, + 67, 198, 34, 137, 151, 91, 151, 66, 13, 46, 69, 77, 47, 235, 248, 154, 201, 133, 141, 187, 183, + 201, 90, 35, 169, 110, 86, 163, 16, 74, 119, 199, 6, 115, 175, 219, 52, 32, 131, 96, 44, 241, + 163, 91, 65, 147, 138, 111, 16, 39, 188, 97, 184, 228, 83, 181, 242, 184, 103, 31, 101, 111, + 73, 113, 64, 66, 83, 103, 180, 93, 25, 30, 74, 47, 33, 1, 71, 224, 57, 4, 38, 54, 154, 16, 185, + 192, 52, 119, 189, 177, 0, 113, 90, 41, 83, 179, 32, 83, 177, 26, 88, 183, 209, 207, 165, 24, + 110, 44, 40, 144, 235, 238, 69, 47, 237, 216, 194, 17, 171, 75, 222, 97, 235, 88, 161, 52, 31, + 142, 178, 248, 190, 45, 122, 171, 186, 176, 51, 72, 230, 196, 188, 194, 156, 23, 77, 215, 98, + 76, 108, 131, 113, 100, 49, 91, 208, 107, 102, 201, 157, 182, 126, 108, 27, 30, 246, 190, 150, + 192, 2, 82, 38, 100, 76, 40, 169, 10, 204, 109, 185, 226, 156, 69, 111, 155, 137, 73, 252, 223, + 237, 246, 81, 180, 215, 101, 13, 93, 180, 139, 146, 160, 248, 65, 46, 95, 115, 35, 13, 115, + 238, 156, 162, 1, 205, 209, 167, 21, 55, 9, 153, 219, 242, 1, 69, 20, 180, 122, 158, 38, 95, + 86, 239, 41, 208, 174, 223, 242, 115, 73, 189, 145, 134, 252, 146, 17, 139, 139, 108, 89, 134, + 107, 69, 85, 234, 198, 195, 148, 99, 42, 220, 225, 114, 169, 131, 210, 149, 197, 133, 182, 244, + 104, 48, 37, 201, 149, 110, 167, 19, 87, 142, 235, 64, 163, 77, 140, 199, 245, 81, 138, 244, + 221, 241, 210, 95, 215, 120, 97, 221, 248, 227, 222, 187, 176, 184, 243, 54, 164, 154, 225, + 147, 62, 29, 187, 101, 166, 222, 100, 126, 105, 166, 188, 74, 159, 148, 129, 224, 170, 37, 187, + 154, 203, 80, 73, 220, 25, 222, 172, 39, 18, 138, 115, 221, 163, 240, 39, 144, 164, 250, 128, + 143, 50, 95, 40, 167, 129, 110, 113, 143, 64, 147, 143, 56, 53, 208, 246, 8, 227, 179, 58, 205, + 216, 244, 181, 255, 183, 191, 1, 206, 226, 20, 206, 248, 146, 25, 225, 86, +]; diff --git a/p2p-net/src/tests/mod.rs b/p2p-net/src/tests/mod.rs new file mode 100644 index 0000000..2e172cd --- /dev/null +++ b/p2p-net/src/tests/mod.rs @@ -0,0 +1 @@ +pub mod file; diff --git a/p2p-repo/Cargo.toml b/p2p-repo/Cargo.toml index 1abbb30..9b89be7 100644 --- a/p2p-repo/Cargo.toml +++ b/p2p-repo/Cargo.toml @@ -17,4 +17,6 @@ serde_bare = "0.5.0" serde_bytes = "0.11.7" fastbloom-rs = "0.5.3" debug_print = "1.0.0" -hex = "0.4.3" \ No newline at end of file +hex = "0.4.3" +futures = "0.3.24" +base64-url = "2.0.0" \ No newline at end of file diff --git a/p2p-repo/src/block.rs b/p2p-repo/src/block.rs index 76115e7..fc8776e 100644 --- a/p2p-repo/src/block.rs +++ b/p2p-repo/src/block.rs @@ -3,7 +3,7 @@ // This code is partly derived from work written by TG x Thoth from P2Pcollab. // Copyright 2022 TG x Thoth // Licensed under the Apache License, Version 2.0 -// +// // or the MIT license , // at your option. All files in the project carrying such // notice may not be copied, modified, or distributed except @@ -35,6 +35,13 @@ impl BlockV0 { } } +impl From for String { + fn from(id: BlockId) -> Self { + base64_url::encode(&serde_bare::to_vec(&id).unwrap()) + //hex::encode(to_vec(&id).unwrap()) + } +} + impl Block { pub fn new( children: Vec, diff --git a/p2p-repo/src/object.rs b/p2p-repo/src/object.rs index 914e803..6ff3eb4 100644 --- a/p2p-repo/src/object.rs +++ b/p2p-repo/src/object.rs @@ -3,7 +3,7 @@ // This code is partly derived from work written by TG x Thoth from P2Pcollab. // Copyright 2022 TG x Thoth // Licensed under the Apache License, Version 2.0 -// +// // or the MIT license , // at your option. All files in the project carrying such // notice may not be copied, modified, or distributed except @@ -194,6 +194,7 @@ impl Object { ) -> Object { // create blocks by chunking + encrypting content let valid_block_size = store_valid_value_size(block_size); + println!("valid_block_size {}", valid_block_size); let data_chunk_size = valid_block_size - EMPTY_BLOCK_SIZE - DATA_VARINT_EXTRA; let mut blocks: Vec = vec![]; @@ -301,6 +302,7 @@ impl Object { for id in parents { match store.get(&id) { Ok(block) => { + //FIXME: remove the block.clone() blocks.insert(0, block.clone()); match block { Block::V0(o) => { @@ -561,6 +563,9 @@ mod test { use crate::object::*; use crate::store::*; use crate::types::*; + use std::io::BufReader; + use std::io::Read; + use std::io::Write; // Those constants are calculated with RepoStore::get_max_value_size @@ -571,11 +576,61 @@ mod test { /// Maximum data that can fit in object.content const MAX_DATA_PAYLOAD_SIZE: usize = 2097112; + /// Test JPEG file + #[test] + pub fn test_jpg() { + let f = std::fs::File::open("tests/test.jpg").expect("open of tests/test.jpg"); + let mut reader = BufReader::new(f); + let mut img_buffer: Vec = Vec::new(); + reader + .read_to_end(&mut img_buffer) + .expect("read of test.jpg"); + + let file = File::V0(FileV0 { + content_type: "image/jpeg".into(), + metadata: vec![], + content: img_buffer, + }); + let content = ObjectContent::File(file); + + let deps: Vec = vec![Digest::Blake3Digest32([9; 32])]; + let exp = Some(2u32.pow(31)); + let max_object_size = store_max_value_size(); + + let repo_secret = SymKey::ChaCha20Key([0; 32]); + let repo_pubkey = PubKey::Ed25519PubKey([1; 32]); + + let obj = Object::new( + content, + vec![], + exp, + max_object_size, + repo_pubkey, + repo_secret, + ); + + println!("obj.id: {:?}", obj.id()); + println!("obj.key: {:?}", obj.key()); + println!("obj.blocks.len: {:?}", obj.blocks().len()); + + let mut i = 0; + for node in obj.blocks() { + println!("#{}: {:?}", i, node.id()); + let mut file = std::fs::File::create(format!("tests/{}.ng", node.id())) + .expect("open block write file"); + let ser_file = serde_bare::to_vec(node).unwrap(); + file.write_all(&ser_file); + println!("{:?}", ser_file); + + i += 1; + } + } + /// Test tree API #[test] pub fn test_object() { let file = File::V0(FileV0 { - content_type: Vec::from("file/test"), + content_type: "file/test".into(), metadata: Vec::from("some meta data here"), content: [(0..255).collect::>().as_slice(); 320].concat(), }); @@ -683,7 +738,7 @@ mod test { let deps: Vec = vec![Digest::Blake3Digest32([9; 32])]; let empty_file = ObjectContent::File(File::V0(FileV0 { - content_type: vec![], + content_type: "".into(), metadata: vec![], content: vec![], })); @@ -699,7 +754,7 @@ mod test { println!("file size: {}", size); let content = ObjectContent::File(File::V0(FileV0 { - content_type: vec![], + content_type: "".into(), metadata: vec![], content: vec![99; size], })); diff --git a/p2p-repo/src/store.rs b/p2p-repo/src/store.rs index 59d1b09..5ed81fe 100644 --- a/p2p-repo/src/store.rs +++ b/p2p-repo/src/store.rs @@ -11,7 +11,10 @@ //! Block store +use futures::StreamExt; + use crate::types::*; +use crate::utils::Receiver; use std::sync::{Arc, RwLock}; use std::{ @@ -77,6 +80,14 @@ impl HashMapRepoStore { } } + pub async fn from_block_stream(mut blockstream: Receiver) -> Self { + let this = Self::new(); + while let Some(block) = blockstream.next().await { + this.put(&block).unwrap(); + } + this + } + pub fn get_len(&self) -> usize { self.blocks.read().unwrap().len() } diff --git a/p2p-repo/src/types.rs b/p2p-repo/src/types.rs index abd8fd8..9cfbe4b 100644 --- a/p2p-repo/src/types.rs +++ b/p2p-repo/src/types.rs @@ -219,11 +219,11 @@ pub struct Site { /// BLAKE3 hash of the RepoId pub type RepoHash = Digest; -impl From for String { - fn from(id: RepoHash) -> Self { - hex::encode(to_vec(&id).unwrap()) - } -} +// impl From for String { +// fn from(id: RepoHash) -> Self { +// hex::encode(to_vec(&id).unwrap()) +// } +// } /// RepoId is a PubKey pub type RepoId = PubKey; @@ -594,8 +594,7 @@ pub enum Commit { /// File Object #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] pub struct FileV0 { - #[serde(with = "serde_bytes")] - pub content_type: Vec, + pub content_type: String, #[serde(with = "serde_bytes")] pub metadata: Vec, diff --git a/p2p-repo/src/utils.rs b/p2p-repo/src/utils.rs index dd0d288..82bd741 100644 --- a/p2p-repo/src/utils.rs +++ b/p2p-repo/src/utils.rs @@ -13,6 +13,7 @@ use crate::errors::*; use crate::types::*; use ed25519_dalek::*; +use futures::channel::mpsc; use rand::rngs::OsRng; use std::time::{SystemTime, UNIX_EPOCH}; @@ -121,3 +122,5 @@ pub fn now_timestamp() -> Timestamp { .try_into() .unwrap() } + +pub type Receiver = mpsc::UnboundedReceiver; diff --git a/p2p-repo/tests/test.jpg b/p2p-repo/tests/test.jpg new file mode 100644 index 0000000000000000000000000000000000000000..345a6d2c1ed520e2986dd9b483cd7ab9de4dbc03 GIT binary patch literal 29454 zcmbTdWmFtn7cJUYNN{%zuE8BbAT;hS!Cli$@Zj$5?he77KyY_=cL*LVc?~(|d~dv8 z@7`w6qpND~x#pTn_AaXVGyi8DfF=c$1OlL-0RSk-58zJ+0R1&o6jT%p6gmJJ9SQ~= z>dz8D6!7L1{A>7EZ(hT{MnHIjh>U}ZjD&DJ3ljBPBH}4Jj#; zAQLMmHyTIf~;Narn6Hrmp(9+R!aB^|;@bZa%6a$J&NJ=TIsH&-JXlfZ5 zo0yuJTUgqEad32Uc5(If^A89N3J!^hjf+o6OiE74$<50zC@d;2sjjK5t8Zv*YW~sH z-P7CGKQK5sH9a#sH@~pBvAMOqv%9x{aCm-kd3Akr`|Ixh*)J#n%wM-4?|&Wp|M&$7 z2NX0cEDS9CvtLlqPLN+1bXYiY)>jxG6yXg(m~YvEeG3)&k3{$k}H+WyZ3z2R687@^0>vJ7NICZAn>AwvG2 z0Sm9c0IykvU(rH=Aa8&kh&jj+9hB0G2Y@V?zwi(t{=!3hKY#q|2t=x5=y8aGNr(~< z>GUC9{tx^`+gA_`0M9!2Kz+`F%lhz)@~={bn#2%+LteD~#}SAQBID4TUPv!EB9MqY z&v~)^JWKsW@@Ih{KrFcbiTW(eKi)My6NbP%N0Jsg-O%>0Dv;p_FL5>WdY<;oQe+AO z^b*f!)aR%}NI*=nzDNP#`5IyoE(`i^^j=6og#dIE$X>ANylORIA(vqb;P|@tA-2#I zo|X7-t`>kU2okpENI&!aM>PN*gr+}4V*msOf*lG_)PI)kg|(qKL=4tvabK?gb?7-5 ze?tQuZu|vujSLs71Cp%}7D*7Yko?h6{+lR>5c1Edtfi0jTIa=;=Oa3=XI{^^h#|0e z&q?tt%(H-qGS3>Z%0Tq0eRlP)Vi61!c`xbqpX_LjFF|;r^;+v0{vZ9up^Tj5p2O~?W%z>eBF?`>j({CK{cmnWA--6AHV)Ac3Q|vhGwXQ*4#ee` z%>5_U|6)VzK|^Bh^-SZr?*GOF_MfuA@nS!s$b%^MKVe>6BRBsK{Y7^Oy2MKcK=Sk@ zUJ&ljk$Lv}C7=I?{!em0_cw?^MG&gb4exJ%VFJ9giWgdts6gN#$qn&`?q5m& z@#1f|pQ-&@lRAu8-7oB(d(2CzJO@bMObuQ^`Pl+Q$Y*`XAcXXppr2*+hor4PgeD{> zpIg#j%^|*P3IAKQkUDJKMvz?5vC$BnP4Y*uAD@gXt57j=G7z%uU%MSKJBcp*7M*RC zr>6r&`Pn+OHs+hKCtt7gqT)oGY_3l!&6is0rg1xiG?9`T)<_pt>8w>Y;=WUf`cByC=g>f+SXomQo9V;^wF?|s zc*QU}mg413l{dJQnY|Uf{y5S@Ru#QHg}ziN%N$d9`F(V?EbvDuI|&vRZdK!l5lShy z`Nfi7>5A`uYXeIHd7@JzgyJWja-|cV+=%`F7V4VHr_g3w2C`eAUV8w zD#e$F(j_(h?GIPeY~lBI(T?LvHjw6LMWhv??qMHyb+L!8Iw+=xl37V(0nb4VkJD00 z>L8Z3v4w*znH-`rqA>oo_w?TkV0p<}NRmSqEwty7dG2n?&&PiY{iO%|uP~maC$ z$a!({$fzBU9{quvp)W_P^08?teLMUFEJ-R1z*^-hol3$%2y@t>w!xL1n&j1;mu;vx z=z@0d+fWt|%~Y09P*4*KI%E6<8%p%r@#Ldn8pHD|l;?5mVmY6H(F~Hz*sa6it$TC3n~^po zoyQA~i=zka$D{WBNGh362!U!0S>X1q?1bOy=3AJjYGj}}((w0IB%S?3s82a10v*3b zd3#7^5wq?n?-Q78-x;iyo9$xEBfZ|umqS(9iJ^?ybcom8T?l+n3rpY>I=N9Y+hcXY zJf;zsY_q3Xe@-orJrUSF7*eYnDEO6;fq%f#NY|Oq-1up_aL883WPmi@sgE^O_kxEi zf#Ydb-fBaemx^U@F0>CW7XWjOUq+RzvO;NHJ*dq!sPzZnzcG2DyUSnb01t)q^|!-J zK;K~5G?AQ)njQg*y%KK>Po*q>hO!#F6$PZ6|Jy1&e}u%jgBC64rE|XYp?{jx%L?^h zGkxyNF)O0OURTRd_oh{)>hXjVdE29r?s;6Mq_rO-PCe8+ zN}Dx^Js>_7QXuhfhKe^xvld&%gD=kLdC`>0k%A2T4q44veAnmTUPpEC5;>H?6>NYp7NdiWp zxza25yGk13WP06gZb54ty|J?~qwqZY1vql5<7L= z^?rDH^&x7s2z+7HH=S2EC2lctDfz8x=q2P%OM_5T=VdMq9J}MAHm3LTT;#BCa94-G z9cGz*DN8Xa>W3y{{7cz|c2v`0Wt-f{@m*x3Q%j3YCGs&$wRYIUC*b4BB#!TFR1HoG z>G^=)z$OFD!Age6T^o7}k%M%&uu`Xj{MBjYT0l8G{u6^_K4A-5sw;Md0|kbJ79x1< zGz?|6ZiFC0mNGmIL*4p&phn94xk@Y%i{5R(k#ZMYdsS9`+bk4i&E7qeOWbiv3qi!A!hwC~N z#F{%sTfEXMKtwb1QPqmgc)VgqZuOjh3WhUR5WCKqFQ-a0V>EXA`dE4*h1 zW&L0p*HMyx*Nt5_lMa7zm-~JZMj*E6W2zebp_6fKLw2*6IaheS`2)RuC_Xvv>;S>a}1*5%3G8!Cl>3PNr;|+2i z@dJX&-116s=N(afHA89)^YxNv9Tm>@eB~~w((xaN)gq$*0DcIi{=SV(u#;o39J#0s zTdxBO6%!1>+{wmK>bqVr#3E9cRM;Jf=2Xk2M;C7dEj_@^Wwvi!bI#4~cUpsDoK0^I zZDvPcqkB=LiJU4;@$MB1?oK0_3lPc*nwX4oC(I&7@ox*xR?!1UrOvZaoD0U( z(gbUnOxL}_cpaa>R@%SxOYK{T7QSptLMs`LcF=G|HTFu!04!+k@iqt4{B8ZDXboGd za4D%@9%Yt;=pXL~GC~VYayX5C-o(?NhP?JLNHYn%uHZF8 z4@* z&d>@*1JAme%@#3u%Vt%q^-zr|c@?Sp0W)<4e-Y`v~80O40U z?)e&+HxlDSZt$loOXD7auoTZ20^tRmD*4fqr*hR7I2~PizBcE(em$5kbj#9RT6R(B zq1>{J8N$aK1wEF!Iu9y^FI9!>U~5PX=nR?A_GlQytw)M}g6#RXEecJsx~a&R4-)5a z*zn0^_dnyI_sUD{c2D?gEbNb#ak@-8g*5Y@@bTh)sp!TbBEwsDha}8cpUqf~TPi5r zhu0R%Rv`PZ{N%d0Ip!8Pr5&|$$l&A<`3?Zhy7aR&9OIJ+O@n4x!V;7)o?PgzD-dms&JEGz&|$jmOjS16;YxM+FLEd(cI{#1L2K;Hrr zN*%P)Q6ZzFQ_NF7QY=YVFsxnQ@POE)%AdOt{9CmP!T!E)_#j>ExLsT}w+DaRh)QLX zRNnHcq;JKH(xilqljCV(F$9VXYN_1C*~~KJEPILbp+;Ub7$u+@{nDiUOs=2}JA1@k z#!3QjxQ8<2Z66`qhq3GOysOuzYSqqM!?s%}U%PsRcWVmrHk&>LQa7bffbYi~6HG3J z)qFkXIss-`TX(yyJJh9;%sU0i!5eMGPR>h;ULTQb5ae~8D>aKb%7(EkhT9yHuL)yp zw)6)Z)w+m0JZ3;kV4C)xNF)lvZ)(^&(3(a%puT)w-9?tbtS1kg2Yurol?fjA+t=5{ zHu)B8&HDkrOjj}pV=~{CMkh7yrrPDcUMgX~rbO2n+GV~#RbFk=d7J7}8_ABfo_88H z6w~spg!L%px~R}bbIXvj(l|^Ck>g5Q!j@oH+Q)IJrxm696w&u?j+wr+keDx>M@uU2 zdfyc%IPdLJf)7WXV~1m4%)HQ}{gYL9sjmI6^fAkHJkbp`%x+i8hL|EkBMg0RKmbhr z`*JKxIp$mXGIH95TrN^1ZJ?)%9VRw0i=6o0Cyefy-$rl&xsQ1Xt0bWh)ECQiijJM$ zi%_BPS-bh0)Q3R3gF_aQ&?d>e1V>f){`qtb>`OHTNs349k@zlc2f~C!seHR{0U|T<3jgus@fU z(lS~-uS+eR?M+7qMq9ZE!U#cXObaf`76FveGrbc0_P$e*TAO>fby~z<%l2z`=&T5;ltjX+ zZy!;m&KZj6t3iim3~Ne?jKOJSM^775bNMFtJS~XvtY%=5pD50}WJXsxh3#l+v=ZOi zj+wtsNBQ5W2Jk#Gw1+zp;7EVet8uj5t%}okKO6S+w|A4c1`_2OMX_%4Tx}~W1)6db zVqKd8B`!2Qz-+7;@e?AJXYmAzq0>FBIMFgWH!CJo9^%ej#O>EBQZ24M^K%JolTye1 zGqwEg8r}B}@o5%l`a9#)m%V_F-IfDWw)}I+G>30r@@BHyH@^L{T+WkPMu{y!R?@xTV>{p*8;6a%V_4xChji@|t19DR^^Dm2WJH>R z`xaiisz zB#$WZ{fAAm^ofcWd}WijY6T{>i)E#ZP6qo@iQLadco%Esy3LXV;i>oX{7X%p`5_tn8XkLKWQ5wzN{ncUv#Hj{v!-7oY9c+0cJJF*owR($Ncell z8-C{)-Y-uzqH%)adXwL}8;;i)ra%9xW2yU99+2`{5ua9mG*FV$s+kHL4pB6JJaS?C7^|F==H=dkoiW&0hcB8F;{D6?Cw&x?@zM*L5gGRh zUq#^)i$to{Jx&@KS|)4a(u|7pV_i{x_7o-~kGr=@xQH#H?#MAK)g@8JpX&ee>w~+h zswEG^)8`dHxMfjE4diCs+OnkLYLfF*q;OvJ2Eu?Z z3e?!Pco-}8f<2!cMgl8GaGmT66zcobt&{6Nq<6o|ceyrl>EDU1^+#v@ykJ7QQmikq}N$4D_`t#~0*!rApI7~h%wF%ZU z-0c@pCTj5R4dli;JjsaaLtnJ5{lr(XIm8mrT*z(j;2*%zoQW=RClE#I-X#s|l5a95 zR9bn0;Lw8O7iFv!zXT8za!16NX6r6hh^?5X>*Ho|^HEbXBr?wTW6^Y|z4;H>f@95) z1uPpCg>+}0Cwk@fZQdHL!&7rk7=(7L%y>sLim=O16WQ?MDP57R*PIoYIF;8G*x4Lw z?O}!hN5DFgC;f5ZyXACg%{Lagn#I})UjDjYv)1T@8Y_uSIb)pWF40ZUeZ|r6%`cZ1xCd*{gRjU9WaYV9cTm)YL>#=)jMrBPt)d(^EyH(zF zDZ)OVQ|+L);iicAls@7c({t{06Y05f>g<_pvl7-?ewjuQ)7>qG>nvLWszWGshN}2R znwndX-D3~{3&RP;`F@tga;Ns#P*1a!&pqK6B~ljcUGKyg58(1n&9=mWq$MG1S}sve zC1%B_31NJ1SI2?qVR|lR+mV{piDEX(>)_)D!(lD}vyM+Ew#{0&OSKUR44^ zYtb=gmUn9WFq@ku9RzjL+ied=4n6~7>b6|hEJH{uoKpNrKLQ?);}k`ua3_RrT`d1^MT z&or{pYi)wRt^|gggBRzBwZLt|W0=B*ZSl6J>@*4ZNp!tz?#N$$=q%>hk7&gHP>`Fd z(Uxwi-!?{juQNd(ET{nF7E8C}52_qrAzj7h7r9{7oK7<#M$a>xLdM|Vx%@q<@pU<1 zvjkf|p-2wHPV}8db(3_1%X?>e>&G8$I>hFKToRX{FN^V`R+@nWF|2JG@dG_>&YJdO z`_4)87j?x4F`dvNnmci@hfUk+-D9kNRD*Nt?$)1AKNh0}%E!>I@pcXfT#kGJ>RdE2 zf%AeGJ3{~{vt$?yK=NCS6xvUT6xpyS7EHZ2Zzaj-2h(7W#+9w(c)vCQ77M*Q7g4d9 z5~AggyO;adefXff`)0Fkm0bw}X4!4?jVPg^7`)X@jQCr^8>ZHrsebbA1Kn#Rks$)q zqIXLmEPMtpUuwz;UH9hahj_d-!xSlXvj@=k;dC>927*DqUCQa|Gp;U=h{lZhFxk+G;kG);T6i(gXe@eQs%nfMQ zTlYvojO3j$3X@W6zVmDe#c%gXHhwD(+$kso6N{xCqWXH3y<(kh`}hX{GQ~>h-Rboh zT(}x>89m@nn))>nPKHQve(=O#X?umze`*c%9aIp6b5{11?cR>PO^#+iolYfoywtrx zIgBxrQVXFBhtaeC8Xew25LN+4ku{qj(FWZ zMXheJ$bOQNdy^P=3OW8lsZd;?0cyg_@kEf z)kK5e$|QRFgNSpG9|Iyk#L)2wPV-;Q^Q8H!%k|1>znj za;sHSFx7reSS(W^+KX@{VOJlb6SBaU%+GlzyW3Y%|0zr^vId80q+&ET2G7NIdVt@UQAG zvC8S$#&#=Z#uB7OG?6V+DQCIBuPsFJmc6@?-qaWj!9?GZd9{D0N{WNMV>=+9adB7XA-lMuY1M zRdH!vP9WlC4C`%aD%u%s1fN(UlYp%0;=n{}vB!9z6*r-)Y48S(T%47(1(9s=sHC8x zl@iPYQ0V!F{H3=TYdLR_Ta3y>aXY^smk{k2&h{+M`n9YruB zx0f(IU&!U|RKbFuYKcZ)<0X#iYxq_Cu>!hr&*MJ;mjz@c?hW~6@#sg2J7pDIdK;3j zYpuhuU6x>&jLZ$Kjqg4YdpTnJ`p9J`o%H1J*AwFKfj@x0Vyu+1 zceK2!{1P;Ci*1b2_LK1s$(v8BdZI~a9o27eM^=t@xqr>oXB&lV#-J{n;a`7M96)O! zPk4zmx^05bi2{`7gj1yq_9j+IiWYGw;VtVb`=Ev^;k7PUNNK>6Ns5$S^@ zBhk&H1$gx4T?$uIBB*4EgDM8UTZSKuTIssTQILLWLLY6}$6CBte!VSETw4rHtH+3B z76Y0Kxn}uQD97dLva`toD&?fgIW{_UZ7;0gQJ+pc4v}R2m<8>QTJBQ&v$j}eH)Q%W z-C{bT?24HBkh}Xs^+&5KJnZ3I3-;2~kLG<~O>JXen0nU8*;EM~}_y4FUO-+RqT z9RmA5Fu~>69Ti3nnc?fSotQ!NeZ%VY7W=G)=%C%6piUUFPuT zoW6^_PqI$}s7%_!OtJesn@y!pss0T-Cp-<0jCZ3vY*2py5g}LS$O3RwyDnEbGp?2W zr`If=brgX0JI~ox*NHke7vf(|4~d5^@}bh=TelAVLRy!908o{-gPNZ*J*U_GXALu> z_bsLSOpdm*-^YI)C6(le)FnkU!#ua}kmd1yRPv;%Ebm{*e;>VJ_NK9G*X26-4?xBj zK9g1W@o2thIwY5Bd+gmCDY;rb(@4u2#(Uyy+q|l=$5-F^3iBN!tMo9h$j>qU0D1&n z0q@UG_pUgP6dlXqcf%MMreZGG+eziwk8sZWyS*_%ztq_Zv9%5yI4ahvYWUKHQENxW z&QqE*5ve2kC!I(a@~!{~7jc=@(Q!r(oBnG<4qWn{2cJHN`r~9Kw=o%pKY&u5Yn~<^ zODodsq=bSl3(srP8nU-3s>(`1IaXdcp721xu05|dH zo#Iat%otCh8EkvM7{!Rnrgz9gO`bniv8-feE1<+1!WZn{q9(oS6(;GbY%>cT#yTik z9P2On(nQKSVVN^>jc43Iiv+3$H2why)pg31ZiC!MOH@|Qm_~7X(NAZ+K#?oO8#PC| zzhQpSki7d9fK*iEOoM+{wc4UN9Fmxb5Zj%sB0!WW0t&I%r)jb!E>MtWW&4^}M5F+V z`wlyO`ArM0G_a$R;^5Asw%PYx?|G^WwY2_D8&HhvbxCX_2PsPp^amX?imDNDroqPg zML%vvJvXw@voKI}N zDQqY5W6i0`-~jZ`D8$kfB=*PV%b@uQ&0))IX`i(f+xG;Yq=*{kG+#6GJhG~hhi}s5 zfCyzGG`8Y%Kj`*om-1%Sd0xd!gP}ZEHZ+i2)wt=(xlvK1sk3es?P6~&xn8f4eo&+X zABXttuB3L!Wbg=Vy9Gn(HB#~@ucZ;qdQ7Tw?5N=YW@B)J-j)K9GAzvc1bImFncYrt zs!S&z6q}l3@Mf_-%nV6*MJmqmWMAAOOM}9dtY)Ll>K^zCCJ<}AFrUt}I4nCIgX)m2 zEoQp~>Z_OQwb*z2m*5Kl9<|`^2&ZrJ4o6<+HZ$dZzIMsBm1Hy-K#8q#&a8Y2TV!WZ z=W|VLdhqDSNe=BuH5ywt$5V@9h6OgJ{2_GbDv}EYBvUN?7B!3Dm80~=9wq&W_>xb$ zD|!iy!A8OM+orNT)0b<7mZKn<)zoj=avfDBGPa0e4)VI9F`e*23pjhbL~<eZVNYSP390E!*H5*JUeQ!KurQqA zYKLm}(jo_9KN1;u$~{Hg#kDh)Bvk+3?e2 z%#A*R(@DJ(#w|8RG^bL-Gn&bier!U77CR*2|arI!1=RWCbKO@|?r}tixTWv3E z!>W3;>UGnkEmIC?R~qx}X@4h0o2w*`q|_4otGk?u$=g9Wz`=(%G|^WT zl2SQ|9EO8M(;I`<%gc<_(r+{H2k`O6IBRohh}E*CrO77`4UV+{*m~Q58WfkkJN4w_ zf?OtikdG=><+3dBW_9yAg$}q1KfSK*ZZ`I65*uzX#!R?5JV%S#_AL?xyoJFWF@w1r zeVP&EW?CxlZZ$<`7srn8LMhd!;WOx$szSj*C-s*>oxx7*{BL&55@Wg@RYO9mk z%q%q0gk+^bpT4b8Q%DKM9=23dOwW&$x1Q2)wUSf3WJf!~P4OsY zYC`x)@AcN!YpcS%)GJ?+j>^<*^serm)~}q!&8@+V4_4%N9tNGHTARgQrN~Al9AO(( z>F%3|&KFf%qh@48pV#EI4!iX8*4i!j1{p*{=T0-+el#F`UGa^-0}UKoEoQ?>aYgiH zs>#_N53cO+M!Ly1nn?7K^fnt#X(iQ8C~0fh8pEY`m)Kt#L5HJp%!fM8-g*th!-V|- zAfik!Nu(>>4Pz9!(7d?^E)0+c4V?C4G_DTGuC#=0&Pbxn*RtMn2rk){^hV9^n2D zAe_Mm=$J?wvNdS-7NaHZeIc)2$9OU;v*lE6)GPlV)$9JF?7u;>aTEehQIt(|+&aEt zSL;)|<7(_@(V>h!A7V$vjU)&-9fqQv^h1I<%3F33oQXkwAk92pK}4Zfe!=g410$10 zU-#XX@>PCRrD~cHnF7XqG=_y`@)raO)dhYUIm_xtvZF?L`qg=VeI&b2k=0P&(BNOc z9Z&d;b?ivu&D$n9l*vB;7UX^%m}`y!Bij?EDO|d@w4#kUQPL=`gRxp@VInkcDr7ziPHBOszaW$WDHQlO z#5wz;YnsU7Raz}jOnB$zSe!R&<(0XKVV8HQFqUYIrj5}bOYWkH%96EBH*bzv$IC*0 zW8L`-56`51T0#^TSBoFT8$@R@>i2GUiW6k7FNtVcm{Y`$LNN+6w)g+mLEE*y!Spdim|C8%*l(Bi z*?u)bIx?-&%DF*Z35Y)}>Z6jjn_7@t)RvnNXkwVWiz$@v<_(l?Iu zTNRf$cwOXzsEFtmI?aJvuB&}iLB{a)sLD^!TphnghE<63R~E6o_~lnTg+uN=!yhl9&4}Y*(XiJgiM8-0M(yJF_|Ac@$-IXLhZPw(}7@y0$&S0Y}PCA(04A0eo zGcShZ-A%upk(UPfrlJLguK#iu<#(FZV`S@?gs_0c`5=q)ASr(po$XR0q(1;DrGgmP zB|6Jl;J{W4Tf0tf(2#Kioc>HbT`4>3C^sCwAdt7e2vo(*ytJr0WIfqkd7*D}D8Z>H zd(0JbZpt6YZlDP@1k)#YP;l?VL9#!Dztnk_Vy6_#akVswz>~zPD`dYkmC}=Id_~r1 z9Pu$ypNG=>@mz^1m{NksPq%T4;@}Tpu7E8I83xUlT<7v$p%!Wq=!B!Te(A$M6IARx z#|<-paRMA-A!T-_S4?%{`ws7tY0?5M^2w2wcg$$A>1atbCsG+akBJnsDzSgJ=vU19 zSc*unTxUR}#LqTxiv<-0Z_8lbl3i;o zStJVO+)pz^bV}`y6OI*ay_&5mE+^5;JBmz$Gqfx5j`Ka&tOgkyd>}min@66jGRvvv z=|)+aY}|k|PNomGF#P=#dMj88+?k@WeU`iF^dJsZN{ddC^47ah0v`A`t*m2{iPd2a z-=1<45@~`Rh#x2u&?MHmK0NUhDTbS{!eOnBAls3*aUlC|zQ_~@8e`gOzwJSgCO zxO#Pil1s34U4FtG<|Q*%PPErLXq3-sw?JiQTrx-U+D?G}qZ$kb@)|dB6aJCXLBD0^ z%><9qr^gPqk?4lV!VSruxUf4;8rm^F?DZ(Vt)&oNct^t(U5TF?nqBNMm^?fqR(NRJ z@>vU?mgH`g9)BC5#=CUDM@P#!8uuP#WLqJDwYqn(a>M)u*4326mnpQG@HA8wR^QUz0&eyr8 zpIz3Cr)=I(56XgGD@~r#1MX7aZ_HLXHZ{xjNCzPK^$i+lj-{w`O7&3=wP-i;>`~ky zEXuEZtPGB;%dTB4NL>iB6Q%}c&v5AxmP2wg>rNV#Bg zs85hT+_Kl7zLJ+xZy}EP$n6MuT9qKUWtiSbMB>aTTWuY5BHC8d5)hnAR1Zq2y`t`} zaw+g+eG|il|5gs9lF@)}p@vx0Y2HPMM>)OZV@>g{l-eEF9<#`Oc8y`r;KT_MW$d4LqZpE!ezRqJ;HhQgPhT= zDh%zjR0hvuiE-U{FtCeBHSd)?Bjgz!f~aI3yF%lNJyvKVoBp@6j5v;@CFX+My`nX| z%U4cB4p`F&yTsOpam{pOVMLf~kDEEOCc4|z(4b4GlaN|!`{*%--af|9d?BG6#t~B+ zkKXHP5^MrJq}gSbSKRqE{K-^H2zikEwW=}R$0Hbnb0R4cARsdi$~*RM(!<0RH^sf9 zNYuMisPHmNw6N8o9vDkO2>?NwN8UUoUGu9|u7%yRbu`e3l6gY1A^%JSJ{G%w=ox5g zUMpS+JC~Nepo! zGCKXJpjb;bnJ$!dZrG}2PriIvW*@M1)Y@=IKx5KYbijf5+v7J;z53Gj@+$N$!T?6zUi;rbOPivl@we&@PsnJSp zZwvMfh<>d60l0R&!drGF;Ap(Z-D)H?VHKxj3gBS`3YuH>>vXNBjEy03$1|%(XEv`` zXol?Uzl%Y1jDYQb6NaXW>(Sb>Ji_FukD%TB%_5N znVt32v{U=EMEZ8~7kOy#JNx19L7I!Xj#c>wXW)^9N{b>myiH*E zLcDtfJ)?HfgF`)GZOAM5adkr*qM_j$7wozYWy}-P{jTi7;Xp%fTpaXnGZTlX6Ii4) z)t)PAsh(EOmBPer2j#FEihT2E{^SA5^Q1}PmJdY5C;R5QhVO#8{LMSIeA?I#)Ml8(AqAD3@koW3oBxztZ!wq%y6&1B5XJ0|E-eJ+-N=grj+3tu4rOYC|9)DtT!G8;04Zc%m{NLt7$P*Jb3WvN0WIT9|UrN@J>r zNf~VnGlgaS=~Pt=ErC9@yRZ~g>pCM?VK%)yxwt2ax+|a%Eb+D9FY1+ezWvbJ{H)OF z&fT?Dg9X>W{B262#(jzIUp$;w3c6S8RHE(Tw;D-R#~;)6}A<+1vKf zD#dx-yNl%Rjt|aaUw~1k8rup|pngh+GqtQBu<5%XPM6gSmWclKcz(H8&U@IFZ_u_+ zjn+i>hASDXTcR5Ge4GmjgHxkVSRaQK172CCSt~g)Mi7ISrhXOkR25Xn+3K4Mho1Qc z(BN%mD>ca#8q!uUX7KuIX$`SPJ?4X@&G557lrs|zB8{-Q9|Vo7)3=*>1|_=8uMb3a+gn~G&=J1L z1x5?RJ{=R!ZwZ{MjO$4Fg*66ms=CE}*E6>HZ%d5_qa*6K&yETgJ2svkvmCJBxxprj_p)UNz0bt@1lK3z z4-V1dSe5Lg^vb>9uzwx?#YR#GE0_plFghG*I4n0Kk`M9J6N_&W8*~QGt%?q zYQ!m+vBizT!aRhMD)7aQNBt&tf4@7=pDqO%PDn)ul1US;^IaYE3&L5*g)HwCtG1!O zcM1?}&Qps`_E2iaK@!tv95FS_%O|j|XMciQ_F}NAknGm?9Ggmhx2N(XDJVi`! z%c@R>M*$F*N-Bo+`#WLstIwLm<%T9xrWs#);R=F67FiYNgQu-4Uwx~#R2g&9^mWi#qQ3AbbR$T!B$@+G>96sF+A!tCpU!u&vc z-Ck$YdLivs3}b>8t4AVH2l~d1+CBIJc4Q>ZhxE$wN@))7I&FwYnxcW)6j05i4p(_A zw{#TZg9+NavU!DL^g!pW`STt#2DXW0uB6~XTJO-P)G!n9AfzuNB()$WirCNs-#fHn z=i{@sf0l2^E^&lanJcs1Z7^T_L37u@I1!@(btGB1tR#8Gl3$xKlQ>3k8|cM{F2{V2 zUM4FmHE>E%U+Xim+07p;HpCA#HkGfnP){>I)awL*ElE|%#qZ(;bw4pivN8C8y*Q=(;qB6*ls3Og zdKsLk#q+>vdn?u`p*{+vuYF!0auWnQb&B0lipk@{*kL~;bwa*Gbh%i(IQy~gZJfd( zka)lPZu`q3iaT$KHm0e#V0|uS$b~rd4ggJF4*q(CpKLm1wM$VuC@+EA7#8dr>8e(x zm1_2RaDWghq6L(a9b|^q`$_~T2jxMh^X6pg1ZRKtI3F)VzD}ml=2iT_#^gua;Z|PC z1lS1qEyWW?bq2~r`D6p{MaRzWF zd0`Up`1oVHvNVd0xD4bq4~mVZF=AiTkn3{r#v0F7{iZPFb_&1yVAh`wz9CSK|Kbl^ zc3fB5{{CY~seb23)PT`ai&j|g#?>Q^WBe25N}r)B0c{)-HjM$XCqj{nFU8uMux}JR zhtdcwma>Bd1`WaLB%>}R)!0J`P9`?fXmXQs>#4qOrcHb8{^g<2x7IFD)u?2^4iD$s zvPC+i#uhLA{&SP>&3*3&v#GVsJL}F@(*5Q>w_+w4-#NWog)ad0(7YOcDv{aw1E{vK z?)3m zbDZf@n{Qp{bWs~458l8W$+E_M3jXX)KfoyVWg|ke4(Y zd#zD1n&NDZ_clJe8rs$)IQ{cZuwc|3O`76dEqs=KGV|>OxF1EU!aMezrQj(gE`}q% z<$7f?0*X7E+iz^LDu&H|`G&mYwXGyyVlq5*&*MoUxLU?jvc zs<1twe!nc1NdVu+-6+c?>32o}`A?UD@*62m7D4;gHWV7F$z6|)19;Ssf3s4vd%Z7O zvTs#Vk%8H1ya6$K-XdCCb7g61i177_x8WW6_fh(${AnrrMeN%Cj3H^S zRUhdRf92__qm)UefoLlVRdm%;ZSwhR~|?WV}Yn)?e$v2@;r$!@>%n zjuQJCD#{=4*fg+nBQQGNjdrZ3+4q|7?sJ6Nkm9M~5rg>@9r?+bv-HSFld32P&29Xn zQ%i=R#fU5iC+%Rp3d3AI>6yEa!$VC}>KY^-3O0ogVl!qiS_sC+gQS2^hNutlj|^|P z!j(Qsn=#*9>6XN=jAvB_K9?zx>mS}5jl=LdqnyO?aJu`RX>0E zoGwBkf&C++{Q;Q2CafZpQ*aiynXGf1x0rKbV~0@QYrQSgtDRD|0yb4mOG==l`SJUv zWwY8MIPX&1~p2RJxAXzDSm3;Bc0QiNcxd(+(# z^cGPfxpIn0@9Rx11X(ghAtp5Y$DtibtFc6HY$Pp%wUslETvD(U@W74^4InJrS~R10 zY>>ch=~CG2Y2N9rX&SITV?KW2-GB}%AvY#djfripV2a*2+1t!Ku~z*nM#QDcHe07j z{K%xjk3-E0%sGy)z}lqGB(X^B>(pnEKDC`lbw<>s(VCjPscAag!M0m_h9X1#yAYlCBc3OlJMMp$|ozA3!jB2#2H7WZ<`3B5!`4p?FH+aK1I(CpslQ4@jWENA5rpwC{_gr0_xTAFY(eWS|3 zBVcX7^~pSbmB&%pToZ{#CQm#M z#*S@lD=S>$JVWBx^y{fDpowK6cz-kQx45pVRNR%>%~rQ7vN?@=U;fjN%PAR+lwnWa zM(#oM_O6IV$2{tD9M;9aC60Z1iq_^tBm|S^IbPKI43H2`3V=PRuo}8moxmPz$YGCR zWnf0;!0H7wwYcn9wAZGzbVlDKYBsTEJoB96)~?{CW3TX^iR`Rx@Aoh>Z1ZAQ2V)+} zPp>u0iG!aljpG)Q$vsOlK_qp3>o;dqHi3B#bCN@+1%oF?4c+NdKR~1Y<=6ajPwwoQLmGbHu zMY|bSbdYY@{A z&Nl(ZY09KyqhO%e!1p$n1yq6%oQ!Z!(w>Z3q8V;k&PnJ+J6M)qu$c)l5HS35GAilH z&cY#oF5c^8?0!>~9k6P;jI$NRyE8eBw-bOt#TT$KBW<522h%*%Fu5`_6Vw(bA1``A za{igDeV9*f(4>zl81o>>LVJ&TnM0V;Gq#2$?Uc6CnOFCSPd=mTR^eo3$YI<;XXSe? zdQ{%aKsyf(-X@=9<&y$I^8>-hx4kB>xve=_4xd*?XOcKV?gSijpL}}I;y-9br_E;X ziPgaW0APWG>sdN|LNZLVEK*D4h=5cqTb}s!$NA!=MXTy*Z4J$0^<;~7oLS{V_gPLj z#zsFA)~X7`$(;4&_0y3h$W>F2GT@QNLFg!HAz!)Hcy3oV7O&;2<~95L;=KCOwAtNF zUMT4xSsk636>@Wh7!`w+^)*qj`#7Pxw~|QPId=h+h75NaeMDmGHU2PzeLG!S{Jm$J1sgtrZbpvr4?X+0H-SZbcN2tNAVWFI^ zbN3QlB#vFzu2qqU`qqRJTim~pT3ombfIjy%NKNQiitarxNJ-|1=1ChrFFcxSU5URg zQwp~>%-D^=4UNxn)0K8mPe46Es|@oD;&YS*PH-8lvo65SPV9E??r;c zRx-d62=ykNz}wMudFPrZbtw_~w>lCJ;ohaPlui9|+9{ISCc1fuJD$SXS_Cg zqzJLi5qory?k$`WSDq`65mM3SiM=>o*_v=@e`HDJTUk;5(CDypu#k4+`qw>5-hB-t zPQ-1YUaFumTf~sC!6~?w>)x?gsLJ-Z{gjL?dsM#Art)naHqR2Vd;-88-qq+(f}C#5 zDoRjxMHTT~#mYn_Rr8}#p}P_9?_IEpO2$r2jF-fhOpJ=l7$AZ`=9{>#%$e^VVyz)8 zae&$FO2q0$vjLovaB)D$Tkr1u1u+&;9z<0qZ~McFL%D7Urnew{swq%ps<|X7J@MX& zK@_E8NiX$Rvo_I962<&W7z#)ojb^Dv_b=KutYkl#oxd@1d)BrisPD7O<(#Mjm4rF#<#+Zxt+O@`?C~)~CcjO9Osg$JRc8_s6jegIF)xq-i0(axk{{ULV z*ylAuODU5jNX{3oXpx-G+rr__ooE9w{o0Sa(!9#Q6Fn+P@*}N#q_(tSCCbJEkj}sW zp8VEIPWDEQIyTII1+=F|f-vgvmS#xQa-(tnEc5va(yP5fD63Pse_5Y07~>)`2QMNM zx4&cQR~^CZayOTDvZS6x%8j}w=li-DoPA7s!MmcZ5iANB-WAl ziI#?3@|h&^+aY>x$6D1y&B&SyX(EsXkcB(;W%#Mf%WVX*ZBhZ`;ePSt^Zcry zXFbWTS;d0y!7U#p3EFE*g^jyn@aeHK43Y*qepQ^)ld(~DMp(F({&3GSGVUV){onAW zqN5!Jd$Z6qSuEZ%ZLSfKM(m~l80VV#{7hNs)0T&l_~ObNJ!HHQO0i5yVpAW!7@3G5fCm5`^z{p&(>gFM^8OSd-sOu3 zqI;BCztx1^-1YRUP-0CT7}O+J-2)Yc2g*lku0&rslP0{%CEBg#GjiGE6en$na%_SL ztuFG{N<7T<&jy{-+>%Wy?i)$wwz;!67P2rq0px8t;Qayo>z=Gz)jKm-J8pG0+B{nB zviDX}%@>vvU|BjJOrDqmxg|MMg_^n0qNgjKf#LayTko`kD<#t+2VwG(6r6jLoSO5i z-KfXN>4a6=G5#WWf=fFevD*MABoa?JTpn}lT43!~-kqnZJ=V;xZ%8(3eDI|!nW`blQAQjOPje?Gniu}mnQ&G+zC$Ix{s{x_@m_SJdD)%x+l@Q<32`mXvEh4rn^0X{15C3y3d5n!IXL9??L=a! z)oGPE%B3XGo(|Mwv(r`yT*T&2mO0MSGueH!nswmiJE39bqYE>4U!EWA+0T~q0;CmV zo;&BKYE<_{RQOrL_+9~hE#2(ba`}itf=EzQaoe{_?5WWll(oAnOB&u?CFr;fP!idYYjVn~2ga@=URuVT&FqHE_L-Z^ZXv=H}YoAPlz8sw>lP4gQ@wUv!sTTRmS+Xx=V zQjR$z8)Py+1pYWVu6k3e3AEyAH3_X5$Ll(BS=^Z8ayE{Pr=M|Mw5oGP=QQc4voyrV zaT|zUq;wUn$*~_GWA&yF;B{(q|fV)y>3_h@k>7%Q*Rd z=07avxoWG~Bccy`m90EYH~MAGoLk{(-P>>Ql5j9H>?=7?O{z9; zT(o0pJ(K~D!lKRY4cx3R8FRdWlic%F$^&kUa>k*4^7GF*tA_f5D>~pP>MKhHhJ-E7 z(o`O!wH6C9a>F}F2OR+v2%afnworKtdVqRT5Iy2b+Z!x99Q39Z8y&<^F~Q%S-6(pD zSgtq7%jGiz#s_LbEL>Z~l=)RN&?x4F*!CwITY;Q`jzu5>M&Fkkx^u+{7|AfKfm|0S zoN=0~h$R8#VIv%E&R33UCKe;W7LC0|RD7+}iY^9hQnOqZlQ_q2l|f>{x|Plt9>+Z> zxU4$VD}FYNHiN@Z zEyG7N(K9N;B&Be`{4rV6kH4|CNiI#!U&DH#j^5(cm`0vS3eO?I zKZkyujdaR7+~tIEU4K~25@TH6d7(ywr$gHJ$dGfq&t=6)ZvmQf<@dJ za9NHqOqV3gn~2Jo<%Z?tVm@rQDnaA$=}d-QOV2TYe4m%*a^#X~E{3FM-NC_l*p(-} zG|?q6zc)}ossUN>a_KVxVBy923X2QAnE6 z?ycolh_Ywp&O1_QX)~l6)yqS&_$2X+VI+(meeqekYoV>*QfnPiEbKgiYk=E>g>tId zIUkiosmZ(CYRMSyC=-_0LiH*SC-JJ~G1->lo+;)gXb9eb2HnDupZ>K>v|1H=l^#92 z#A&qWILBI)?m-NUi`GA>&00)DP_%%QC_Mo*>^ly(jkdo9PfQc*Rk2afxY}gTYS=M_ zRNa#6$LpG{bjw-Yj$_)&w2J(JW$of@SWQpd-ZjMejQd@&ANfdrtx${IrCZ`%Nhh%8URVx?^*F1{O-tbG{(8kg3qmIsKr%*xv09L^PDt@M%*0)4L zNhfnxN!90u)9fp6ZzNeiGm<-)C(Er$4$Ri0ZR1g@O7-BHu%eJZIXd!VU1 zs~8q&&m4}t?FS?KqaABzWQ+P7q8VpEft0TdPeVzol?F|7BD>>mbJ$Rj*;7%Cmf1_j z*yxp+Q;knT+zGW_NKY;iy_Q)G^ zDYiSBa2L9t&yX0}Hu*5WcLUco=cc2iPL-~v#;0p%Hk&M^x6kEdV~%+1_*YzS%c$jR z=y4Z!vX~m(i3&&r9(r`COIw*aJ&KSL8*23@y;C5zh0}m?GoHO_UZ6Rf%w$K__RskB@XeADD+Z>u23z7(CSolISkF5y+@3TqdjmeUEp|M<&G?f?zDxnjAY-)& z0e0F6gek(Th`!AfDU?&w6%49Vjul^ERl-IP02j!Vw&hS+UPGFF;~Q_+5jIt&ly9Bm=y} z3|SioJq0pB3rjyO#A7)@ClmXI8RjJ%9f5aw7)uEc_tnr*`nWs@YF zU{xeTV_pc=vO}TmimL_LGEWIX8mn>MizlHvj4aX;io^yT>KqYQ5COjuNygrTy)=U3 zVUaDS+^4AgsfF1%xLI-XWwX|rvIf|oyq_}LoGOwDG8PYe+@f@h@baoZomr{pkn#1pDIQUdhtbsO%jQs$-)&soglE`9Fe}{!TES1m<#rS9(Nz!4_c%qD7k3? zJFrNlC3FNtF*rFb+ZC9`n|$YU74#mpRv62ChG5G09Wp6(6CRKT#?)msw>l?Le7`PG zT%Jw^Or%<|ZJJ32RZay;LnCnDb;b@l(R3hKncoc{BOOP2tAQ)*i}!51m)@0tBAs`U zyY!|_h^|Wz8XS|U@ zWa2X}`CKdm48^VkjZl<=RcVx&cFBVsk1X?%WC~~)jTOFkFXTOFOd1vv0VgLo>xvo@B}o<6kPp2U7}kk*Zq9l2 zqm)Auc4;tp&lv)hfSNp_FbqjO*>j2#U__!vL%qWK`id=K+(08z0dPpc!5vLDt``zX z2q9H?Juy^}Twt9^DnKXH&;u3_@#pTIp{N8_joW|B#16pIC6Q77Riu zHy0q|?&77eLQiwGKnOPzjEaUk5?x9SuH{@4?VdYQ8)R-$NYQXN9y)Y1Yz$;FBx=E* za}Gxo2#Kc2IV@xi ztOk8WFeO#_F&V)g^k@PVC4mp~W1R3sC#nE)p>kM}-v*U};vi6WafaflA(E&^J9d(N zdQxZsBaSEBqZsv~!X9n`$lKek9H?ll&x6-F^`~KtG6K6m$?44@42()p@P1z6m=DB} zCdmQ$s1?MCys~#>(qKr__Q>b3ph6_rjDyK1wJ;D|;r6p*=}ZJ^a&igHD+PrY5~}^? z$GsM?Sad99ErKw5lj}f;{N-8l>ykLd08Y2K=Vsf}C)Cu1$z2`9eKVf8=qR{c ztvNBqTWcz?;FFy5{{Ysba1_b=knfPK%IB%Y3q;4p7pivWF(Gd zg(Hiuar1FN#wtjxs^o^<)OV^8o1C68K}7MaNOwCDJ99`yxOu~NJo8Kkw193KKME`W zo>!JOuOq%_U{al#q$r0V9t{I6#Un(!0X+2w)}4Tc;^eawP&enVYCt|5zYUVdjwlfJ zh(-W0pKf|n0<^|ZOMTQGDOdq+7jPhC;~bu}SP7(%6aiEb{nJ3f8*j(}AoGLToxprD z70&WLqNRX&`F?rD01`|J@-dEvgat1=h9L9JP|3F=Fc<)ukS2&ZQyMl~sRDvnra8mL zT!1s4wCpVi??wo9=O26Cn9*E0I8ZWAN<$<_oE$Lqt1)a?zp+KreFuCA+ z)P}%rNJIpN9oTlDRx8VL(@D9(5hp>81v`v$kF-a*LXHB0cmj|a?Uaxx=Z>{S61PKd zOwa|9X%=@OJF~~VAzYp)Vc1UYX^4!%vn=hPq z#RDG$4l(JRnm|eBeBEdfBr>SvbH@UJu-0_|$f`H=$o_P~#cz{)Zv*D^Gywz>68lKo zoQ(QX9gPUSSIhKK*WQz0OlKZe^(3+CPwP@3X%I)W5Jpb}wE#wEQ3ljev~>5T78|=N ztgLd!arEY$^c9BO7A_8c=-_(P?leO$5N9~YL+e67F^Q5j3U(ptJ!-9C*kgtPcM?Zj zQD6eazWKq&7^h$t=VBvFpXW&cNEDzPh6lAf0JvW#J5MLA05pB&>-cx3GI>>ZY*B&_ z8T6?{m6w)bRE9bo*usO;C+SImNc&TqhWf#N(cn)r8wDOh5yUX)r3tNM5-5QW+Q|p7g*{NIgEZ3~>dQ zK9m5v%3~aldTEl;B1~W9W5qj)))cnR2+5!aB!m)Aev|-t#JC@=A&I~D;1kDskSA+` z4itr6w7`mMlGt_N_ofyT&SnH~IiLyJQc$Wf+y_HI5<=^>e8ZMJ&C493aWb=|gEDise!+F_BcAz=?<`0}<~`2*53kqa^ec0V1*8=)iND zhP47Rp@{Y+W=ETAHqZeug%<= zKn$gr7TOmaf!dIZNi=b}F~$l3#~jkIAqxWk04kG=AEg6hakybHFmg%ieW~mW$LAEr zO#>Y5{Amf2G5#Fq+|m&Yj&Zb#p^@a~fF%(*T!E3-G_C@NP&S%i3>feiAoMt-A*h6~ z1QAZ)PRa`?IU}+4rk%+jEDFtt!vl_<^*4P$V%o}}yY}o4YA#jCSr7#_7lBHe@3XSdRT4eD|m zB=)8>I#~*k0KmZQNMNtOCvg}Q005h_l2;rG1#!Vy<~eh;_ssxUSOD5dEDvU&R~`Bial-9sY3YL#K!9BpChx~7T-B&{%>kYvUMCJ>K6;??N4Eid2n`-^&nAT zum)1=k<+D8*a`f^LO9NQ(QBX^GqXl;GmZ@_bqfp$5l{f}WFiLhH?xq8c=a^Ghzoh|kX}@!g`E9G7J08@mE0ONro3=Ld zouq#{k&!w&KblDg8CqZ}I0)Gzp&)hbK!^l{xFleYPSnO(B^d&MGBfj2wt~45GorTA zIvf$-ik5(A51*ZJk%5W^I1-T^ry%4GDTr9ne5{aqm0wCX0yvzz?PG;4)Y1ZIeAx>G zao>*g0Oo`g3P8y{M>(daa2X35dA?-MI~u2`!r*TO!(g7Pnm|6D{qyjEhL6f=jz#ZrjW?0%X3&t_}QUVbqVm490=m&E{ z83s<)BRf>p2xLm0PSeTjpGu4BCiM}Yem5y9IHO<`vZ%_g-1~Q?3gp3+SxIc1Wa6Y& zxhRaeBrradu1&~UTsb5TDaOTIk8wS+GuE$^W8J_QAOlmVtT>if!xk7nr6CbJ4E(&G zT4{RSP2coG5wL6$17LH{TA)Jk&I`F!1F+605cg_zy$U6#Rx+l7@9DC>yQ^1 z?t9Z)j_i^J5d4yW0UNmQNsDtXL%iTF4roflEGn+gEOKgZ)Soa!9T*Ne(Ax$%V@wmD z!kx!<1cZ?M$E7XMuXH>(1N+8=wGz~edayqy*A(?b7z9kkvG`E#JweAg+Hhz>xP>X%HHAtdgHCawTC#OnHbqf-x{m>cBLwbpXw&}1QNyk3a zl$fqiAQ##X=UNs>%_zVbz~FH}6M}wKkuq_SPU18)`9Y3XE1468Q;&aI0F@;s@&l<^p#wB({EK)KC;k#%Z zK8G|78TYm^TcbQX*_J@3b7OCObmzYy_Mm2&hTOFF=&K}_>ZFKQ4UjOyJ@Uujr2s2f zK(ey#kiX2uc*qI{M^3rOpjI6on{Ja8+anNDa=FIP*w1cxJt=_On;S%FZXKOex%-2R z5xXM*@zbt5(t3d$mN7zJLS=FkGRB{Ikl-)#Ka~Mt(`k|JWiKXMC0yfb;kK@Qd8PzU zV7^;P0G(uA!BvMYLnsFr;BtQ|ObM=Z=)_37UP7|%J1`iMNaW+7+J8C#&eUw;hB)3W z@&e2YF~&&t$EG>W0A~`TIabGN5D6PP9l)HaroehJ-LNiL^fas@IUE-xpup`+Vyw9x z!6Ouy0g;>J-NEfnz%f%j&mD0{2NH3D0A8Yi9wuQKKmZJLpYWz3rdQ>8E1vX_Sb0An zSqL7OpkpMEE<%mR*EG-*WSIMBwt9*{C(OKnN$5>9#5@6j0|UV%fkl8~znI%I&}0+p zD6#@j>gqR=9Ag8vedx7-l)Q>bVYr1H)QDrpu|X)Hbga`049Gm31KOUbOgH54N3}E? z5g9Nrcoj`{7>y$5)7Fwgu^5m5PH<|F> zgj29`PhJIAEr7Dh91oVF{e%Z@(4jiQs7m6s!PeQIV6E#Je$*t#Vynq2vbs4!dEnx$F`_lPmN#cv7&-nd z@@bC4p8DZ}D>=dp0iHVN^X7qx9n^~3gEIP%XbTK^9F-xMs5}CA6alAa8zMBUXHPVR?xDE)8U`ZDaLyTngMdNp zMeGCQx|FIUu6(_q0qKeu3-+^|?rff?Cph$^B0sb--gh`B0O0nfF`=Y(Ro>0V1d@26 z0O^A51RVQOa2fa80Z$_sqQEL65C%#1qhPS|8C8oSg(I)6E8GZ*x0FjS%1FVc7aHsW zl2-(Q*R?c&Y7vf33w7pz9de4hL}Z>hG+YRj{NOik)G!_Sbrh@wu5rqoudN6Mg&WHp zfJX*^7bkv4w_fxB=VrljOJ|{`AW2!v7Gg=14} @@ -1256,6 +1264,10 @@ packages: engines: {node: '>= 6'} dev: true + /object-path-operator/3.0.0: + resolution: {integrity: sha512-Z7dlPUeXqRU/lLfGerP24dPC66n7ehyXaTM81k71EFlsaaEjOHkf4/uq1WGicfGfiO7snYShneE1YZZUkyRiLQ==} + dev: false + /once/1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: