From c88402e580e9bfa9a9e6e56f4a40fff4616b3e86 Mon Sep 17 00:00:00 2001 From: "NGnius (Graham)" Date: Sun, 4 Jun 2023 14:48:58 -0400 Subject: [PATCH] Upgrade backend & wasm to USDPL next --- .gitignore | 1 + backend-rs/Cargo.lock | 1267 ++++++++++++-------- backend-rs/Cargo.toml | 11 +- backend-rs/build.rs | 9 + backend-rs/build.sh | 10 +- backend-rs/protos/fantastic.proto | 136 +++ backend-rs/src/api.rs | 404 +++---- backend-rs/src/control.rs | 59 +- backend-rs/src/main.rs | 21 +- package.json | 2 +- src/rust/Cargo.lock | 1069 +++++++++++++++++ src/rust/Cargo.toml | 19 + src/rust/build.rs | 15 + src/rust/build.sh | 19 + src/rust/scripts/generate_embedded_wasm.py | 45 + src/rust/src/lib.rs | 5 + src/usdpl/README.md | 9 - src/usdpl/package.json | 21 - src/usdpl/rebuild.sh | 13 - src/usdpl/usdpl_front.d.ts | 105 -- src/usdpl/usdpl_front.js | 605 ---------- src/usdpl/usdpl_front_bg.wasm | Bin 92609 -> 0 bytes src/usdpl/usdpl_front_bg.wasm.d.ts | 20 - 23 files changed, 2304 insertions(+), 1561 deletions(-) create mode 100644 backend-rs/build.rs create mode 100644 backend-rs/protos/fantastic.proto create mode 100644 src/rust/Cargo.lock create mode 100644 src/rust/Cargo.toml create mode 100644 src/rust/build.rs create mode 100755 src/rust/build.sh create mode 100644 src/rust/scripts/generate_embedded_wasm.py create mode 100644 src/rust/src/lib.rs delete mode 100644 src/usdpl/README.md delete mode 100644 src/usdpl/package.json delete mode 100755 src/usdpl/rebuild.sh delete mode 100644 src/usdpl/usdpl_front.d.ts delete mode 100644 src/usdpl/usdpl_front.js delete mode 100644 src/usdpl/usdpl_front_bg.wasm delete mode 100644 src/usdpl/usdpl_front_bg.wasm.d.ts diff --git a/.gitignore b/.gitignore index 957315b..65541f1 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ yalc.lock /backend-rs/target backend /bin/backend +/src/rust/target # packaged teasers *.zip diff --git a/backend-rs/Cargo.lock b/backend-rs/Cargo.lock index 7f554f2..f9374e2 100644 --- a/backend-rs/Cargo.lock +++ b/backend-rs/Cargo.lock @@ -3,25 +3,46 @@ version = 3 [[package]] -name = "async-recursion" +name = "adler" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b015a331cc64ebd1774ba119538573603427eaace0a1950c423ab971f903796" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "anyhow" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" + +[[package]] +name = "async-lock" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-recursion" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] name = "async-trait" -version = "0.1.64" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] @@ -36,6 +57,12 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" + [[package]] name = "bitflags" version = "1.3.2" @@ -44,23 +71,13 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ "generic-array", ] -[[package]] -name = "buf_redux" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" -dependencies = [ - "memchr", - "safemem", -] - [[package]] name = "byteorder" version = "1.4.3" @@ -73,6 +90,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + [[package]] name = "cfg-if" version = "1.0.0" @@ -80,34 +103,57 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "cpufeatures" -version = "0.2.5" +name = "convert_case" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cpufeatures" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" dependencies = [ "libc", ] [[package]] -name = "crypto-common" -version = "0.1.6" +name = "crc32fast" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ - "generic-array", - "typenum", + "cfg-if", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", ] [[package]] name = "digest" -version = "0.10.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "block-buffer", - "crypto-common", + "generic-array", ] +[[package]] +name = "either" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" + [[package]] name = "encoding" version = "0.2.33" @@ -172,15 +218,46 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + [[package]] name = "fantastic-rs" -version = "0.4.0" +version = "0.5.0" dependencies = [ "log", + "nrpc 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "prost", "serde", "serde_json", "simplelog", + "tokio", "usdpl-back", + "usdpl-build", ] [[package]] @@ -192,6 +269,23 @@ dependencies = [ "instant", ] +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +dependencies = [ + "crc32fast", + "libz-sys", + "miniz_oxide", +] + [[package]] name = "fnv" version = "1.0.7" @@ -207,53 +301,23 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "futures-channel" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" -dependencies = [ - "futures-core", - "futures-sink", -] - [[package]] name = "futures-core" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-sink" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" - -[[package]] -name = "futures-task" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" - -[[package]] -name = "futures-util" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" -dependencies = [ - "futures-core", - "futures-sink", - "futures-task", - "pin-project-lite", - "pin-utils", - "slab", -] +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -261,9 +325,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if", "libc", @@ -280,25 +344,6 @@ dependencies = [ "encoding", ] -[[package]] -name = "h2" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "hashbrown" version = "0.12.3" @@ -306,29 +351,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] -name = "headers" -version = "0.3.8" +name = "heck" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" -dependencies = [ - "base64", - "bitflags", - "bytes", - "headers-core", - "http", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" -dependencies = [ - "http", -] +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -339,6 +365,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "http" version = "0.2.9" @@ -350,53 +382,12 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - [[package]] name = "httparse" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - [[package]] name = "idna" version = "0.3.0" @@ -409,9 +400,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", @@ -427,76 +418,189 @@ dependencies = [ ] [[package]] -name = "itoa" -version = "1.0.5" +name = "io-lifetimes" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" - -[[package]] -name = "libc" -version = "0.2.139" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "cfg-if", + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.48.0", ] [[package]] -name = "memchr" -version = "2.5.0" +name = "itertools" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "mime_guess" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ - "mime", - "unicase", + "either", +] + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.144" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" + +[[package]] +name = "libz-sys" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" + +[[package]] +name = "logos" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c000ca4d908ff18ac99b93a062cb8958d331c3220719c52e77cb19cc6ac5d2c1" +dependencies = [ + "logos-derive", +] + +[[package]] +name = "logos-codegen" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc487311295e0002e452025d6b580b77bb17286de87b57138f3b5db711cded68" +dependencies = [ + "beef", + "fnv", + "proc-macro2", + "quote", + "regex-syntax 0.6.29", + "syn 2.0.18", +] + +[[package]] +name = "logos-derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbfc0d229f1f42d790440136d941afd806bc9e949e2bcb8faa813b0f00d1267e" +dependencies = [ + "logos-codegen", +] + +[[package]] +name = "miette" +version = "5.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a236ff270093b0b67451bc50a509bd1bad302cb1d3c7d37d5efe931238581fa9" +dependencies = [ + "miette-derive", + "once_cell", + "thiserror", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "5.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4901771e1d44ddb37964565c654a3223ba41a594d02b8da471cc4464912b5cfa" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.18", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", ] [[package]] name = "mio" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", - "log", "wasi", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] -name = "multipart" -version = "0.18.0" +name = "multimap" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "nrpc" +version = "0.6.0" dependencies = [ - "buf_redux", - "httparse", - "log", - "mime", - "mime_guess", - "quick-error", - "rand", - "safemem", - "tempfile", - "twoway", + "async-trait", + "bytes", + "prost", +] + +[[package]] +name = "nrpc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f41caeb65399490c6f68ab2527a833d6f2e9b0d7d5ffc4b062f1484b3fa61cd" +dependencies = [ + "async-trait", + "bytes", + "prost", +] + +[[package]] +name = "nrpc-build" +version = "0.7.0" +dependencies = [ + "nrpc 0.6.0", + "prettyplease 0.2.6", + "proc-macro2", + "prost-build", + "prost-types", + "protox", + "quote", + "syn 2.0.18", ] [[package]] @@ -505,7 +609,7 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ - "hermit-abi", + "hermit-abi 0.2.6", "libc", ] @@ -520,9 +624,38 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.1" +version = "1.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +checksum = "9670a07f94779e00908f3e686eab508878ebb390ba6e604d3a284c00e8d0487b" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "windows-sys 0.45.0", +] [[package]] name = "percent-encoding" @@ -531,23 +664,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] -name = "pin-project" -version = "1.0.12" +name = "petgraph" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "fixedbitset", + "indexmap", ] [[package]] @@ -557,10 +680,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] -name = "pin-utils" -version = "0.1.0" +name = "pkg-config" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "ppv-lite86" @@ -569,25 +692,133 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] -name = "proc-macro2" -version = "1.0.51" +name = "prettyplease" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "prettyplease" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b69d39aab54d069e7f2fe8cb970493e7834601ca2d8c65fd7bbd183578080d1" +dependencies = [ + "proc-macro2", + "syn 2.0.18", +] + +[[package]] +name = "proc-macro2" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" dependencies = [ "unicode-ident", ] [[package]] -name = "quick-error" -version = "1.2.3" +name = "prost" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +dependencies = [ + "bytes", + "heck", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease 0.1.25", + "prost", + "prost-types", + "regex", + "syn 1.0.109", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-reflect" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000e1e05ebf7b26e1eba298e66fe4eee6eb19c567d0ffb35e0dd34231cdac4c8" +dependencies = [ + "logos", + "miette", + "once_cell", + "prost", + "prost-types", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost", +] + +[[package]] +name = "protox" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33583a76f29d02e8c8153e36d6676dd6d6aaff934a51a80809d710e143b61977" +dependencies = [ + "bytes", + "miette", + "prost", + "prost-reflect", + "prost-types", + "protox-parse", + "thiserror", +] + +[[package]] +name = "protox-parse" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712a2a651fa4466e67df6c967df5d7fc6cbffac89afc7b834f97ec49846c9c11" +dependencies = [ + "logos", + "miette", + "prost-types", + "thiserror", +] [[package]] name = "quote" -version = "1.0.23" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" dependencies = [ "proc-macro2", ] @@ -622,6 +853,66 @@ dependencies = [ "getrandom", ] +[[package]] +name = "ratchet_core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854bf6632d9f5c7fa7f77cbc332f2b0a8dfb2acc36c3f351fc36bf40f2759728" +dependencies = [ + "base64", + "bitflags", + "bytes", + "derive_more", + "either", + "fnv", + "http", + "httparse", + "log", + "rand", + "ratchet_ext", + "sha-1", + "thiserror", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "ratchet_deflate" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0b144cb23a76d810b25737f4b87943fdfd7772b423bdc15c2b3820849207adc" +dependencies = [ + "bytes", + "flate2", + "http", + "log", + "ratchet_ext", + "thiserror", +] + +[[package]] +name = "ratchet_ext" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67f97bb0776d195720319a1e9f08fa343fe3f9f0b7ebf9d97d5926ce50b8e1ad" +dependencies = [ + "bytes", + "http", + "httparse", +] + +[[package]] +name = "ratchet_rs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7dba456fc23026b46ce0936d109ce3e73b4a592baf0dda0f83d49886c5e5f83" +dependencies = [ + "ratchet_core", + "ratchet_deflate", + "ratchet_ext", +] + [[package]] name = "redox_syscall" version = "0.2.16" @@ -632,111 +923,134 @@ dependencies = [ ] [[package]] -name = "remove_dir_all" -version = "0.5.3" +name = "redox_syscall" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "winapi", + "bitflags", ] [[package]] -name = "rustls-pemfile" -version = "0.2.1" +name = "regex" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" +checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390" dependencies = [ - "base64", + "regex-syntax 0.7.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.37.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", ] [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] -name = "safemem" -version = "0.3.3" +name = "scopeguard" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] -name = "scoped-tls" -version = "1.0.1" +name = "semver" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" [[package]] name = "serde" -version = "1.0.152" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] name = "serde_json" -version = "1.0.93" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" dependencies = [ "itoa", "ryu", "serde", ] -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - [[package]] name = "sha-1" -version = "0.10.1" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" dependencies = [ + "block-buffer", "cfg-if", "cpufeatures", "digest", + "opaque-debug", ] [[package]] -name = "sha1" -version = "0.10.5" +name = "signal-hook-registry" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ - "cfg-if", - "cpufeatures", - "digest", + "libc", ] [[package]] name = "simplelog" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dfff04aade74dd495b007c831cd6f4e0cee19c344dd9dc0884c0289b70a786" +checksum = "acee08041c5de3d5048c8b3f6f13fafb3026b24ba43c6a695a0c76179b844369" dependencies = [ "log", "termcolor", @@ -744,19 +1058,16 @@ dependencies = [ ] [[package]] -name = "slab" -version = "0.4.8" +name = "smallvec" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "socket2" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -764,9 +1075,20 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.107" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" dependencies = [ "proc-macro2", "quote", @@ -775,16 +1097,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.3.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "redox_syscall 0.3.5", + "rustix", + "windows-sys 0.45.0", ] [[package]] @@ -798,29 +1119,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] name = "time" -version = "0.3.19" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53250a3b3fed8ff8fd988587d8925d26a83ac3845d9e03b220b37f34c2b8d6c2" +checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" dependencies = [ "itoa", "libc", @@ -832,15 +1153,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a460aeb8de6dcb0f381e1ee05f1cd56fcf5a5f6eb8187ff3d8f0b11078d38b7c" +checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" dependencies = [ "time-core", ] @@ -862,117 +1183,46 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.25.0" +version = "1.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" dependencies = [ "autocfg", "bytes", "libc", - "memchr", "mio", "num_cpus", + "parking_lot", "pin-project-lite", + "signal-hook-registry", "socket2", - "windows-sys 0.42.0", + "tokio-macros", + "windows-sys 0.48.0", ] [[package]] -name = "tokio-stream" -version = "0.1.12" +name = "tokio-macros" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite", + "proc-macro2", + "quote", + "syn 2.0.18", ] [[package]] name = "tokio-util" -version = "0.7.7" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" dependencies = [ "bytes", "futures-core", "futures-sink", + "log", "pin-project-lite", "tokio", - "tracing", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-core", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "tungstenite" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" -dependencies = [ - "base64", - "byteorder", - "bytes", - "http", - "httparse", - "log", - "rand", - "sha-1", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "twoway" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" -dependencies = [ - "memchr", ] [[package]] @@ -981,26 +1231,17 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" -version = "0.3.10" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" [[package]] name = "unicode-normalization" @@ -1011,6 +1252,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + [[package]] name = "url" version = "2.3.1" @@ -1024,34 +1271,47 @@ dependencies = [ [[package]] name = "usdpl-back" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d185cc6e3f5d305e6e97f1b5cadf1da78bac6b62ea3457802d250708c315306" +version = "0.11.0" dependencies = [ + "async-lock", "async-recursion", "async-trait", "bytes", "gettext-ng", "log", + "nrpc 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "prost", + "ratchet_rs", "tokio", + "usdpl-build", "usdpl-core", - "warp", +] + +[[package]] +name = "usdpl-build" +version = "0.11.0" +dependencies = [ + "nrpc-build", + "prettyplease 0.2.6", + "proc-macro2", + "prost-build", + "prost-types", + "quote", + "syn 2.0.18", ] [[package]] name = "usdpl-core" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd73bec3df5bed5862cab15aaa645d76c388e00128a14c372806907e2f331960" +version = "0.11.0" dependencies = [ "base64", ] [[package]] -name = "utf-8" -version = "0.7.6" +name = "vcpkg" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" @@ -1059,53 +1319,23 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "warp" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed7b8be92646fc3d18b06147664ebc5f48d222686cb11a8755e561a735aacc6d" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "headers", - "http", - "hyper", - "log", - "mime", - "mime_guess", - "multipart", - "percent-encoding", - "pin-project", - "rustls-pemfile", - "scoped-tls", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-stream", - "tokio-tungstenite", - "tokio-util", - "tower-service", - "tracing", -] - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "which" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +dependencies = [ + "either", + "libc", + "once_cell", +] + [[package]] name = "winapi" version = "0.3.9" @@ -1137,83 +1367,134 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - [[package]] name = "windows-sys" version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", ] [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" diff --git a/backend-rs/Cargo.toml b/backend-rs/Cargo.toml index d80a544..df20211 100644 --- a/backend-rs/Cargo.toml +++ b/backend-rs/Cargo.toml @@ -1,17 +1,24 @@ [package] name = "fantastic-rs" -version = "0.4.0" +version = "0.5.0" edition = "2021" [dependencies] -usdpl-back = { version = "0.10", features = ["blocking"]} +usdpl-back = { version = "0.11", features = ["blocking"], path = "../../usdpl-rs/usdpl-back"} serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +nrpc = "0.6" +prost = "0.11" +tokio = { version = "1", features = ["sync"] } + # logging log = "0.4" simplelog = "0.12" +[build-dependencies] +usdpl-build = { version = "0.11", path = "../../usdpl-rs/usdpl-build" } + [profile.release] debug = false strip = true diff --git a/backend-rs/build.rs b/backend-rs/build.rs new file mode 100644 index 0000000..d77b62e --- /dev/null +++ b/backend-rs/build.rs @@ -0,0 +1,9 @@ +fn main() { + //println!("CWD: {}", std::env::current_dir().unwrap().display()); + usdpl_build::back::build([ + format!("{}/protos/fantastic.proto", std::env::current_dir().unwrap().display()) + ].into_iter(), + [ + format!("{}/protos/", std::env::current_dir().unwrap().display()) + ].into_iter()) +} diff --git a/backend-rs/build.sh b/backend-rs/build.sh index 08d6ef3..c7a4a58 100755 --- a/backend-rs/build.sh +++ b/backend-rs/build.sh @@ -1,11 +1,13 @@ #!/bin/bash #cargo build --release --target x86_64-unknown-linux-musl -cargo build --target x86_64-unknown-linux-musl +#cargo build --target x86_64-unknown-linux-musl #cross build --release +cargo build mkdir -p ../bin -#cp ./target/x86_64-unknown-linux-musl/release/fantastic-rs ../bin/backend -cp ./target/x86_64-unknown-linux-musl/debug/fantastic-rs ../bin/backend -#cp ./target/release/fantastic-rs ../bin/backend +#cp --preserve=mode ./target/x86_64-unknown-linux-musl/release/fantastic-rs ../bin/backend +#cp --preserve=mode ./target/x86_64-unknown-linux-musl/debug/fantastic-rs ../bin/backend +#cp --preserve=mode ./target/release/fantastic-rs ../bin/backend +cp --preserve=mode ./target/debug/fantastic-rs ../bin/backend diff --git a/backend-rs/protos/fantastic.proto b/backend-rs/protos/fantastic.proto new file mode 100644 index 0000000..81cd667 --- /dev/null +++ b/backend-rs/protos/fantastic.proto @@ -0,0 +1,136 @@ +syntax = "proto3"; + +package fantastic; + +// The most amazing fan service +service Fan { + // Send back the exact same message as received + rpc echo (EchoMessage) returns (EchoMessage); + + // Hello world + rpc hello (NameMessage) returns (HelloResponse); + + // Fantastic version info + rpc version (Empty) returns (VersionMessage); + + // Fantastic version number string + rpc version_str (Empty) returns (VersionDisplayMessage); + + // Rust name (fantastic) + rpc name (Empty) returns (NameMessage); + + // Get fan speed + rpc get_fan_rpm (Empty) returns (RpmMessage); + + // Get system temperature + rpc get_temperature (Empty) returns (TemperatureMessage); + + // Set custom fan control enabled + rpc set_enable (EnablementMessage) returns (EnablementMessage); + + // Get custon fan control status + rpc get_enable (Empty) returns (EnablementMessage); + + // Set fan control interpolation + rpc set_interpolate (EnablementMessage) returns (EnablementMessage); + + // Get fan control interpolation + rpc get_interpolate (Empty) returns (EnablementMessage); + + // Get fan control curve + rpc get_curve_x (Empty) returns (CurveMessageX); + + // Get fan control curve + rpc get_curve_y (Empty) returns (CurveMessageY); + + // Add a new point to the fan curve + rpc add_curve_point (GraphPoint) returns (Empty); + + // Remove a point from the fan curve + rpc remove_curve_point (IndexMessage) returns (Empty); + + /* + .register("echo", api::echo) + .register("hello", api::hello) + .register("version", api::version) + .register("name", api::name) + .register("get_fan_rpm", api::get_fan_rpm) + .register("get_temperature", api::get_temperature) + .register("set_enable", api::set_enable_gen(&runtime)) + .register("get_enable", api::get_enable_gen(&runtime)) + .register("set_interpolate", api::set_interpolate_gen(&runtime)) + .register("get_interpolate", api::get_interpolate_gen(&runtime)) + .register("get_curve", api::get_curve_gen(&runtime)) + .register("add_curve_point", api::add_curve_point_gen(&runtime)) + .register("remove_curve_point", api::remove_curve_point_gen(&runtime)) + */ +} + +// The request and response message for Echo +message EchoMessage { + string msg = 1; +} + +message NameMessage { + string name = 1; +} + +message HelloResponse { + string phrase = 1; +} + +message Empty { + bool ok = 1; +} + +message VersionMessage { + int32 major = 1; + int32 minor = 2; + int32 patch = 3; + //string display = 4; +} + +message VersionDisplayMessage { + string display = 1; +} + +message VersionStr { + string version_str = 1; +} + +message RpmMessage { + uint64 rpm = 1; +} + +message TemperatureMessage { + double temperature = 1; +} + +message EnablementMessage { + bool is_enabled = 1; +} + +message GraphPoint { + double x = 1; + double y = 2; +} + +/*message CurveMessage { + //repeated GraphPoint points = 1; + repeated double x = 1; + repeated double y = 2; +}*/ + +message CurveMessageX { + //repeated GraphPoint points = 1; + repeated double x = 1; +} + +message CurveMessageY { + //repeated GraphPoint points = 1; + repeated double y = 2; +} + +message IndexMessage { + uint64 index = 1; +} diff --git a/backend-rs/src/api.rs b/backend-rs/src/api.rs index 9ae5953..367a896 100644 --- a/backend-rs/src/api.rs +++ b/backend-rs/src/api.rs @@ -1,259 +1,183 @@ -use usdpl_back::core::serdes::Primitive; +use crate::services::fantastic::*; use super::control::ControlRuntime; -use super::json::GraphPointJson; pub const VERSION: &'static str = env!("CARGO_PKG_VERSION"); pub const NAME: &'static str = env!("CARGO_PKG_NAME"); -pub fn hello(params: Vec) -> Vec { - if let Some(Primitive::String(name)) = params.get(0) { - vec![Primitive::String(format!("Hello {}", name))] - } else { - vec![] - } +pub struct FanService { + ctrl: ControlRuntime, } -pub fn echo(params: Vec) -> Vec { - params -} - -pub fn version(_: Vec) -> Vec { - vec![VERSION.into()] -} - -pub fn name(_: Vec) -> Vec { - vec![NAME.into()] -} - -pub fn get_fan_rpm(_: Vec) -> Vec { - if let Some(rpm) = crate::sys::read_fan() { - log::debug!("get_fan_rpm() success: {}", rpm); - vec![rpm.into()] - } else { - log::error!("get_fan_rpm failed to read fan speed"); - Vec::new() - } -} - -pub fn get_temperature(_: Vec) -> Vec { - if let Some(temperature) = crate::sys::read_thermal_zone(0) { - let real_temp = temperature as f64 / 1000.0; - log::debug!("get_temperature() success: {}", real_temp); - vec![real_temp.into()] - } else { - log::error!("get_fan_rpm failed to read fan speed"); - Vec::new() - } -} - -pub fn set_enable_gen(runtime: &ControlRuntime) -> impl Fn(Vec) -> Vec { - let runtime_settings = runtime.settings_clone(); - let runtime_state = runtime.state_clone(); - move |params| { - if let Some(Primitive::Bool(enabled)) = params.get(0) { - let mut settings = match runtime_settings.write() { - Ok(x) => x, - Err(e) => { - log::error!("set_enable failed to acquire settings write lock: {}", e); - return vec![]; - } - }; - if settings.enable != *enabled { - settings.enable = *enabled; - let mut state = match runtime_state.write() { - Ok(x) => x, - Err(e) => { - log::error!("set_enable failed to acquire state write lock: {}", e); - return vec![]; - } - }; - state.dirty = true; - log::debug!("set_enable({}) success", enabled); - } - vec![(*enabled).into()] - } else { - Vec::new() +impl FanService { + pub fn new(runtime: ControlRuntime) -> Self { + runtime.run(); + Self { + ctrl: runtime, } } } -pub fn get_enable_gen(runtime: &ControlRuntime) -> impl Fn(Vec) -> Vec { - let runtime_settings = runtime.settings_clone(); - move |_| { - let lock = match runtime_settings.read() { - Ok(x) => x, - Err(e) => { - log::error!("get_enable failed to acquire settings read lock: {}", e); - return vec![]; - } - }; - log::debug!("get_enable() success"); - vec![lock.enable.into()] - } -} - -pub fn set_interpolate_gen(runtime: &ControlRuntime) -> impl Fn(Vec) -> Vec { - let runtime_settings = runtime.settings_clone(); - let runtime_state = runtime.state_clone(); - move |params| { - if let Some(Primitive::Bool(enabled)) = params.get(0) { - let mut settings = match runtime_settings.write() { - Ok(x) => x, - Err(e) => { - log::error!("set_enable failed to acquire settings write lock: {}", e); - return vec![]; - } - }; - if settings.interpolate != *enabled { - settings.interpolate = *enabled; - let mut state = match runtime_state.write() { - Ok(x) => x, - Err(e) => { - log::error!("set_interpolate failed to acquire state write lock: {}", e); - return vec![]; - } - }; - state.dirty = true; - log::debug!("set_interpolate({}) success", enabled); - } - vec![(*enabled).into()] - } else { - Vec::new() +#[usdpl_back::nrpc::_helpers::async_trait::async_trait] +impl IFan for FanService { + async fn echo( + &mut self, + input: EchoMessage, + ) -> Result> { + Ok(input) } - } -} - -pub fn get_interpolate_gen(runtime: &ControlRuntime) -> impl Fn(Vec) -> Vec { - let runtime_settings = runtime.settings_clone(); - move |_| { - let lock = match runtime_settings.read() { - Ok(x) => x, - Err(e) => { - log::error!("get_interpolate failed to acquire settings read lock: {}", e); - return vec![]; - } - }; - log::debug!("get_interpolate() success"); - vec![lock.interpolate.into()] - } -} - -fn curve_to_json(curve: &Vec) -> serde_json::Result { - let mut curve_points = Vec::::with_capacity(curve.len()); - for point in curve.iter() { - curve_points.push(point.clone().into()); - } - serde_json::to_string(&curve_points) -} - -pub fn get_curve_gen(runtime: &ControlRuntime) -> impl Fn(Vec) -> Vec { - let runtime_settings = runtime.settings_clone(); - move |_| { - let lock = match runtime_settings.read() { - Ok(x) => x, - Err(e) => { - log::error!("get_curve failed to acquire settings read lock: {}", e); - return vec![]; - } - }; - let json_str = match curve_to_json(&lock.curve) { - Ok(x) => x, - Err(e) => { - log::error!("get_curve failed to serialize points: {}", e); - return vec![]; - } - }; - log::debug!("get_curve() success"); - vec![Primitive::Json(json_str)] - } -} - -pub fn add_curve_point_gen(runtime: &ControlRuntime) -> impl Fn(Vec) -> Vec { - let runtime_settings = runtime.settings_clone(); - let runtime_state = runtime.state_clone(); - move |params| { - if let Some(Primitive::Json(json_str)) = params.get(0) { - let mut settings = match runtime_settings.write() { - Ok(x) => x, - Err(e) => { - log::error!("add_curve_point failed to acquire settings write lock: {}", e); - return vec![]; - } - }; - let new_point: GraphPointJson = match serde_json::from_str(&json_str) { - Ok(x) => x, - Err(e) => { - log::error!("add_curve_point failed deserialize point json: {}", e); - return vec![]; - } - }; - let version = settings.version; - settings.curve.push(super::datastructs::GraphPoint::from_json(new_point, version)); - settings.sort_curve(); - let mut state = match runtime_state.write() { - Ok(x) => x, - Err(e) => { - log::error!("add_curve_point failed to acquire state write lock: {}", e); - return vec![]; - } - }; - state.dirty = true; - let json_str = match curve_to_json(&settings.curve) { - Ok(x) => x, - Err(e) => { - log::error!("add_curve_point failed to serialize points: {}", e); - return vec![]; - } - }; - log::debug!("add_curve_point({}) success", json_str); - vec![Primitive::Json(json_str)] - } else { - Vec::new() + async fn hello( + &mut self, + input: NameMessage, + ) -> Result> { + Ok(HelloResponse { + phrase: format!("Hello {}", input.name) + }) } - } -} - -pub fn remove_curve_point_gen(runtime: &ControlRuntime) -> impl Fn(Vec) -> Vec { - let runtime_settings = runtime.settings_clone(); - let runtime_state = runtime.state_clone(); - move |params| { - if let Some(Primitive::F64(index)) = params.get(0) { - let mut settings = match runtime_settings.write() { - Ok(x) => x, - Err(e) => { - log::error!("remove_curve_point failed to acquire settings write lock: {}", e); - return vec![]; + async fn version( + &mut self, + _input: Empty, + ) -> Result> { + Ok( + VersionMessage { + major: 0, + minor: 0, + patch: 0, + //display: VERSION.to_string(), } - }; - let rounded = index.round(); - if rounded >= 0.0 && rounded < settings.curve.len() as _ { - let index = rounded as usize; - settings.curve.swap_remove(index); - settings.sort_curve(); - let mut state = match runtime_state.write() { - Ok(x) => x, - Err(e) => { - log::error!("remove_curve_point failed to acquire state write lock: {}", e); - return vec![]; - } - }; - state.dirty = true; - let json_str = match curve_to_json(&settings.curve) { - Ok(x) => x, - Err(e) => { - log::error!("remove_curve_point failed to serialize points: {}", e); - return vec![]; - } - }; - log::debug!("remove_curve_point({}) success", json_str); - vec![Primitive::Json(json_str)] + ) + } + async fn version_str( + &mut self, + _input: Empty, + ) -> Result> { + Ok( + VersionDisplayMessage { + display: VERSION.to_owned(), + } + ) + } + async fn name( + &mut self, + _input: Empty, + ) -> Result> { + Ok( + NameMessage { + name: NAME.to_string(), + } + ) + } + async fn get_fan_rpm( + &mut self, + _input: Empty, + ) -> Result> { + if let Some(rpm) = crate::sys::read_fan() { + log::debug!("get_fan_rpm() success: {}", rpm); + Ok(RpmMessage { rpm }) } else { - log::error!("remove_curve_point received index out of bounds: {} indexing array of length {}", index, settings.curve.len()); - return vec![]; + Err("Failed to read fan speed".into()) + } + } + async fn get_temperature( + &mut self, + _input: Empty, + ) -> Result>{ + if let Some(temperature) = crate::sys::read_thermal_zone(0) { + let real_temp = temperature as f64 / 1000.0; + log::debug!("get_temperature() success: {}", real_temp); + Ok(TemperatureMessage { temperature: real_temp }) + } else { + Err("get_temperature failed to read thermal zone 0".into()) + } + } + async fn set_enable( + &mut self, + input: EnablementMessage, + ) -> Result>{ + let mut settings = self.ctrl.settings().write().await; + if settings.enable != input.is_enabled { + let mut state = self.ctrl.state().write().await; + settings.enable = input.is_enabled; + state.dirty = true; + } + log::debug!("set_enable({}) success", input.is_enabled); + Ok(input) + } + async fn get_enable( + &mut self, + _input: Empty, + ) -> Result>{ + let is_enabled = self.ctrl.settings().read().await.enable; + log::debug!("get_enable() success"); + Ok(EnablementMessage { is_enabled }) + } + async fn set_interpolate( + &mut self, + input: EnablementMessage, + ) -> Result>{ + let mut settings = self.ctrl.settings().write().await; + if settings.interpolate != input.is_enabled { + let mut state = self.ctrl.state().write().await; + settings.interpolate = input.is_enabled; + state.dirty = true; + } + log::debug!("set_interpolate({}) success", input.is_enabled); + Ok(input) + } + async fn get_interpolate( + &mut self, + _input: Empty, + ) -> Result>{ + let is_enabled = self.ctrl.settings().read().await.interpolate; + log::debug!("get_interpolate() success"); + Ok(EnablementMessage { is_enabled }) + } + async fn get_curve_x( + &mut self, + _input: Empty, + ) -> Result>{ + let settings = self.ctrl.settings().read().await; + let x = settings.curve.iter().map(|p| p.x).collect(); + log::debug!("get_curve_x() success"); + Ok(CurveMessageX { x }) + } + async fn get_curve_y( + &mut self, + _input: Empty, + ) -> Result>{ + let settings = self.ctrl.settings().read().await; + let y = settings.curve.iter().map(|p| p.y).collect(); + log::debug!("get_curve_x() success"); + Ok(CurveMessageY { y }) + } + async fn add_curve_point( + &mut self, + point: GraphPoint, + ) -> Result>{ + let mut settings = self.ctrl.settings().write().await; + settings.curve.push(super::datastructs::GraphPoint { + x: point.x, + y: point.y + }); + settings.sort_curve(); + let mut state = self.ctrl.state().write().await; + state.dirty = true; + Ok(Empty { ok: true }) + } + async fn remove_curve_point( + &mut self, + input: IndexMessage, + ) -> Result>{ + let mut settings = self.ctrl.settings().write().await; + let i = input.index as usize; + if settings.curve.len() < i { + settings.curve.swap_remove(i); + settings.sort_curve(); + let mut state = self.ctrl.state().write().await; + state.dirty = true; + Ok(Empty { ok: true }) + } else { + Ok(Empty { ok: false }) } - } else { - Vec::new() } - } } diff --git a/backend-rs/src/control.rs b/backend-rs/src/control.rs index c53a455..364626b 100644 --- a/backend-rs/src/control.rs +++ b/backend-rs/src/control.rs @@ -1,6 +1,7 @@ //! Fan control -use std::sync::{RwLock, Arc}; +use std::sync::Arc; +use tokio::sync::RwLock; use std::thread; use std::time::{Duration, Instant}; @@ -33,6 +34,14 @@ impl ControlRuntime { self.state.clone() } + pub(crate) fn settings(&self) -> &'_ RwLock { + &self.settings + } + + pub(crate) fn state(&self) -> &'_ RwLock { + &self.state + } + pub fn run(&self) -> thread::JoinHandle<()> { let runtime_settings = self.settings_clone(); let runtime_state = self.state_clone(); @@ -44,20 +53,8 @@ impl ControlRuntime { // resumed from sleep; do fan re-init log::debug!("Detected resume from sleep, overriding fan again"); { - let state = match runtime_state.read() { - Ok(x) => x, - Err(e) => { - log::error!("runtime failed to acquire state read lock: {}", e); - continue; - } - }; - let settings = match runtime_settings.read() { - Ok(x) => x, - Err(e) => { - log::error!("runtime failed to acquire settings read lock: {}", e); - continue; - } - }; + let state = runtime_state.blocking_read(); + let settings = runtime_settings.blocking_read(); if settings.enable { Self::on_set_enable(&settings, &state); } @@ -65,46 +62,22 @@ impl ControlRuntime { } start_time = Instant::now(); { // save to file - let state = match runtime_state.read() { - Ok(x) => x, - Err(e) => { - log::error!("runtime failed to acquire state read lock: {}", e); - continue; - } - }; + let state = runtime_state.blocking_read(); if state.dirty { // save settings to file - let settings = match runtime_settings.read() { - Ok(x) => x, - Err(e) => { - log::error!("runtime failed to acquire settings read lock: {}", e); - continue; - } - }; + let settings = runtime_settings.blocking_read(); let settings_json: SettingsJson = settings.clone().into(); if let Err(e) = settings_json.save(settings_path(&state.home)) { log::error!("SettingsJson.save({}) error: {}", settings_path(&state.home).display(), e); } Self::on_set_enable(&settings, &state); drop(state); - let mut state = match runtime_state.write() { - Ok(x) => x, - Err(e) => { - log::error!("runtime failed to acquire state write lock: {}", e); - continue; - } - }; + let mut state = runtime_state.blocking_write(); state.dirty = false; } } { // fan control - let settings = match runtime_settings.read() { - Ok(x) => x, - Err(e) => { - log::error!("runtime failed to acquire settings read lock: {}", e); - continue; - } - }; + let settings = runtime_settings.blocking_read(); if settings.enable { Self::enforce_jupiter_status(true); Self::do_fan_control(&settings); diff --git a/backend-rs/src/main.rs b/backend-rs/src/main.rs index 0142f1f..3c7fb65 100644 --- a/backend-rs/src/main.rs +++ b/backend-rs/src/main.rs @@ -6,7 +6,13 @@ mod sys; use simplelog::{WriteLogger, LevelFilter}; -use usdpl_back::Instance; +#[allow(missing_docs)] +#[allow(dead_code)] +pub mod services { + include!(concat!(env!("OUT_DIR"), "/mod.rs")); +} + +use services::fantastic::FanServer; const PORT: u16 = 44444; @@ -20,9 +26,14 @@ fn main() -> Result<(), ()> { log::info!("Starting back-end ({} v{})", api::NAME, api::VERSION); println!("Starting back-end ({} v{})", api::NAME, api::VERSION); - let runtime = control::ControlRuntime::new(); - runtime.run(); - Instance::new(PORT) + usdpl_back::Server::new(PORT) + .register(FanServer::new( + api::FanService::new(control::ControlRuntime::new()) + )) + .run_blocking() + .unwrap(); + Ok(()) + /*Instance::new(PORT) .register("echo", api::echo) .register("hello", api::hello) .register("version", api::version) @@ -36,7 +47,7 @@ fn main() -> Result<(), ()> { .register("get_curve", api::get_curve_gen(&runtime)) .register("add_curve_point", api::add_curve_point_gen(&runtime)) .register("remove_curve_point", api::remove_curve_point_gen(&runtime)) - .run_blocking() + .run_blocking()*/ //Ok(()) //println!("Hello, world!"); } diff --git a/package.json b/package.json index df12fa5..e14686c 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "dependencies": { "decky-frontend-lib": "~3.19.1", "react-icons": "^4.7.1", - "usdpl-front": "file:src/usdpl" + "fantastic-wasm": "file:src/rust/pkg" }, "pnpm": { "peerDependencyRules": { diff --git a/src/rust/Cargo.lock b/src/rust/Cargo.lock new file mode 100644 index 0000000..2b27c77 --- /dev/null +++ b/src/rust/Cargo.lock @@ -0,0 +1,1069 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" + +[[package]] +name = "async-channel" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-trait" +version = "0.1.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.18", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bumpalo" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "concurrent-queue" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "either" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" + +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "fantastic-wasm" +version = "0.1.0" +dependencies = [ + "nrpc 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "prost", + "usdpl-build", + "usdpl-front", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "futures" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" + +[[package]] +name = "futures-executor" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" + +[[package]] +name = "futures-macro" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.18", +] + +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + +[[package]] +name = "futures-task" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" + +[[package]] +name = "futures-util" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gloo-net" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9902a044653b26b99f7e3693a42f171312d9be8b26b5697bd1e43ad1f8a35e10" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-utils" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8e8fc851e9c7b9852508bc6e3f690f452f474417e8545ec9857b7f7377036b5" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + +[[package]] +name = "js-sys" +version = "0.3.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.144" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "log" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" + +[[package]] +name = "logos" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c000ca4d908ff18ac99b93a062cb8958d331c3220719c52e77cb19cc6ac5d2c1" +dependencies = [ + "logos-derive", +] + +[[package]] +name = "logos-codegen" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc487311295e0002e452025d6b580b77bb17286de87b57138f3b5db711cded68" +dependencies = [ + "beef", + "fnv", + "proc-macro2", + "quote", + "regex-syntax 0.6.29", + "syn 2.0.18", +] + +[[package]] +name = "logos-derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbfc0d229f1f42d790440136d941afd806bc9e949e2bcb8faa813b0f00d1267e" +dependencies = [ + "logos-codegen", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "miette" +version = "5.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a236ff270093b0b67451bc50a509bd1bad302cb1d3c7d37d5efe931238581fa9" +dependencies = [ + "miette-derive", + "once_cell", + "thiserror", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "5.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4901771e1d44ddb37964565c654a3223ba41a594d02b8da471cc4464912b5cfa" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.18", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "nrpc" +version = "0.6.0" +dependencies = [ + "async-trait", + "bytes", + "prost", +] + +[[package]] +name = "nrpc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f41caeb65399490c6f68ab2527a833d6f2e9b0d7d5ffc4b062f1484b3fa61cd" +dependencies = [ + "async-trait", + "bytes", + "prost", +] + +[[package]] +name = "nrpc-build" +version = "0.7.0" +dependencies = [ + "nrpc 0.6.0", + "prettyplease 0.2.6", + "proc-macro2", + "prost-build", + "prost-types", + "protox", + "quote", + "syn 2.0.18", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "petgraph" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.18", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "prettyplease" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "prettyplease" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b69d39aab54d069e7f2fe8cb970493e7834601ca2d8c65fd7bbd183578080d1" +dependencies = [ + "proc-macro2", + "syn 2.0.18", +] + +[[package]] +name = "proc-macro2" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +dependencies = [ + "bytes", + "heck", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease 0.1.25", + "prost", + "prost-types", + "regex", + "syn 1.0.109", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-reflect" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000e1e05ebf7b26e1eba298e66fe4eee6eb19c567d0ffb35e0dd34231cdac4c8" +dependencies = [ + "logos", + "miette", + "once_cell", + "prost", + "prost-types", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost", +] + +[[package]] +name = "protox" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33583a76f29d02e8c8153e36d6676dd6d6aaff934a51a80809d710e143b61977" +dependencies = [ + "bytes", + "miette", + "prost", + "prost-reflect", + "prost-types", + "protox-parse", + "thiserror", +] + +[[package]] +name = "protox-parse" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712a2a651fa4466e67df6c967df5d7fc6cbffac89afc7b834f97ec49846c9c11" +dependencies = [ + "logos", + "miette", + "prost-types", + "thiserror", +] + +[[package]] +name = "quote" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390" +dependencies = [ + "regex-syntax 0.7.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" + +[[package]] +name = "rustix" +version = "0.37.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "ryu" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + +[[package]] +name = "serde" +version = "1.0.163" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" + +[[package]] +name = "serde_json" +version = "1.0.96" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "slab" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.45.0", +] + +[[package]] +name = "thiserror" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.18", +] + +[[package]] +name = "unicode-ident" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "usdpl-build" +version = "0.11.0" +dependencies = [ + "nrpc-build", + "prettyplease 0.2.6", + "proc-macro2", + "prost-build", + "prost-types", + "quote", + "syn 2.0.18", +] + +[[package]] +name = "usdpl-core" +version = "0.11.0" +dependencies = [ + "base64", +] + +[[package]] +name = "usdpl-front" +version = "0.11.0" +dependencies = [ + "async-channel", + "console_error_panic_hook", + "futures", + "gloo-net", + "js-sys", + "nrpc 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "prost", + "usdpl-core", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.18", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.18", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" + +[[package]] +name = "web-sys" +version = "0.3.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "which" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +dependencies = [ + "either", + "libc", + "once_cell", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" diff --git a/src/rust/Cargo.toml b/src/rust/Cargo.toml new file mode 100644 index 0000000..770a838 --- /dev/null +++ b/src/rust/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "fantastic-wasm" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +usdpl-front = { version = "0.11", path = "../../../usdpl-rs/usdpl-front"} +nrpc = "0.6" +prost = "0.11" + +[build-dependencies] +usdpl-build = { version = "0.11", path = "../../../usdpl-rs/usdpl-build" } + +[features] +debug = ["usdpl-front/debug"] +decky = ["usdpl-front/decky"] diff --git a/src/rust/build.rs b/src/rust/build.rs new file mode 100644 index 0000000..6cb4f89 --- /dev/null +++ b/src/rust/build.rs @@ -0,0 +1,15 @@ +fn main() { + println!("CWD: {}", std::env::current_dir().unwrap().display()); + usdpl_build::front::build( + [format!( + "{}/../../backend-rs/protos/fantastic.proto", + std::env::current_dir().unwrap().display() + )] + .into_iter(), + [format!( + "{}/../../backend-rs/protos/", + std::env::current_dir().unwrap().display() + )] + .into_iter(), + ) +} diff --git a/src/rust/build.sh b/src/rust/build.sh new file mode 100755 index 0000000..b91cbe0 --- /dev/null +++ b/src/rust/build.sh @@ -0,0 +1,19 @@ +#!/bin/bash +if [ -n "$1" ]; then + if [ "$1" == "--help" ]; then + echo "Usage: +$0 [decky|crankshaft|]" + exit 0 + elif [ "$1" == "decky" ]; then + echo "Building WASM module for decky framework" + RUSTFLAGS="--cfg aes_compact" wasm-pack build --target web --features decky,$2 + else + echo "Unsupported plugin framework \`$1\`" + exit 1 + fi +else + echo "WARNING: Building for any plugin framework, which may not work for every framework" + RUSTFLAGS="--cfg aes_compact" wasm-pack build --target web --features debug,$2 +fi + +python3 ./scripts/generate_embedded_wasm.py diff --git a/src/rust/scripts/generate_embedded_wasm.py b/src/rust/scripts/generate_embedded_wasm.py new file mode 100644 index 0000000..0e11404 --- /dev/null +++ b/src/rust/scripts/generate_embedded_wasm.py @@ -0,0 +1,45 @@ +import base64 + +if __name__ == "__main__": + print("Embedding WASM into udspl_front.js") + # assumption: current working directory (relative to this script) is ../ + # assumption: release wasm binary at ./pkg/usdpl_bg.wasm + with open("./pkg/fantastic_wasm_bg.wasm", mode="rb") as infile: + with open("./pkg/fantastic_wasm.js", mode="ab") as outfile: + outfile.write("\n\n// USDPL customization\nconst encoded = \"".encode()) + encoded = base64.b64encode(infile.read()) + outfile.write(encoded) + outfile.write("\";\n\n".encode()) + outfile.write( +"""function asciiToBinary(str) { + if (typeof atob === 'function') { + return atob(str) + } else { + return new Buffer(str, 'base64').toString('binary'); + } +} + +function decode() { + var binaryString = asciiToBinary(encoded); + var bytes = new Uint8Array(binaryString.length); + for (var i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return (async function() { + return new Response(bytes.buffer, { + status: 200, + statusText: 'OK', + headers: { + 'Content-Type': 'application/wasm' + } + }); + })(); +} + +export function init_embedded() { + return init(decode()) +} +""".encode()) + with open("./pkg/usdpl_front.d.ts", "a") as outfile: + outfile.write("\n\n// USDPL customization\nexport function init_embedded();\n") + print("Done: Embedded WASM into udspl_front.js") diff --git a/src/rust/src/lib.rs b/src/rust/src/lib.rs new file mode 100644 index 0000000..384be5d --- /dev/null +++ b/src/rust/src/lib.rs @@ -0,0 +1,5 @@ +#[allow(missing_docs)] +#[allow(dead_code)] +pub mod services { + include!(concat!(env!("OUT_DIR"), "/mod.rs")); +} diff --git a/src/usdpl/README.md b/src/usdpl/README.md deleted file mode 100644 index fd771f8..0000000 --- a/src/usdpl/README.md +++ /dev/null @@ -1,9 +0,0 @@ -[![Crates.io](https://img.shields.io/crates/v/usdpl-front?style=flat-square)](https://crates.io/crates/usdpl-front) - -# usdpl-front-front - -Front-end library to be called from Javascript. -Targets WASM. - -In true Javascript tradition, this part of the library does not support error handling. - diff --git a/src/usdpl/package.json b/src/usdpl/package.json deleted file mode 100644 index 15d0344..0000000 --- a/src/usdpl/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "usdpl-front", - "collaborators": [ - "NGnius (Graham) " - ], - "description": "Universal Steam Deck Plugin Library front-end designed for WASM", - "version": "0.10.0", - "license": "GPL-3.0-only", - "repository": { - "type": "git", - "url": "https://github.com/NGnius/usdpl-rs" - }, - "files": [ - "usdpl_front_bg.wasm", - "usdpl_front.js", - "usdpl_front.d.ts" - ], - "module": "usdpl_front.js", - "types": "usdpl_front.d.ts", - "sideEffects": false -} \ No newline at end of file diff --git a/src/usdpl/rebuild.sh b/src/usdpl/rebuild.sh deleted file mode 100755 index 5d6c8e5..0000000 --- a/src/usdpl/rebuild.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -git clone https://github.com/NGnius/usdpl-rs usdpl-rs -cd usdpl-rs/usdpl-front/ - -./build.sh $1 $2 - -cd ../.. - -cp -f ./usdpl-rs/usdpl-front/pkg/* ./ -#rm ./.gitignore - -rm -rf ./usdpl-rs diff --git a/src/usdpl/usdpl_front.d.ts b/src/usdpl/usdpl_front.d.ts deleted file mode 100644 index 9477118..0000000 --- a/src/usdpl/usdpl_front.d.ts +++ /dev/null @@ -1,105 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** -* Initialize the front-end library -* @param {number} port -*/ -export function init_usdpl(port: number): void; -/** -* Get the targeted plugin framework, or "any" if unknown -* @returns {string} -*/ -export function target_usdpl(): string; -/** -* Get the UDSPL front-end version -* @returns {string} -*/ -export function version_usdpl(): string; -/** -* Get the targeted plugin framework, or "any" if unknown -* @param {string} key -* @param {any} value -* @returns {any} -*/ -export function set_value(key: string, value: any): any; -/** -* Get the targeted plugin framework, or "any" if unknown -* @param {string} key -* @returns {any} -*/ -export function get_value(key: string): any; -/** -* Call a function on the back-end. -* Returns null (None) if this fails for any reason. -* @param {string} name -* @param {any[]} parameters -* @returns {Promise} -*/ -export function call_backend(name: string, parameters: any[]): Promise; -/** -* Initialize translation strings for the front-end -* @param {string} locale -* @returns {Promise} -*/ -export function init_tr(locale: string): Promise; -/** -* Translate a phrase, equivalent to tr_n(msg_id, 0) -* @param {string} msg_id -* @returns {string} -*/ -export function tr(msg_id: string): string; -/** -* Translate a phrase, retrieving the plural form for `n` items -* @param {string} msg_id -* @param {number} n -* @returns {string} -*/ -export function tr_n(msg_id: string, n: number): string; - -export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; - -export interface InitOutput { - readonly memory: WebAssembly.Memory; - readonly init_usdpl: (a: number) => void; - readonly target_usdpl: (a: number) => void; - readonly version_usdpl: (a: number) => void; - readonly set_value: (a: number, b: number, c: number) => number; - readonly get_value: (a: number, b: number) => number; - readonly call_backend: (a: number, b: number, c: number, d: number) => number; - readonly init_tr: (a: number, b: number) => number; - readonly tr: (a: number, b: number, c: number) => void; - readonly tr_n: (a: number, b: number, c: number, d: number) => void; - readonly __wbindgen_export_0: (a: number) => number; - readonly __wbindgen_export_1: (a: number, b: number, c: number) => number; - readonly __wbindgen_export_2: WebAssembly.Table; - readonly __wbindgen_export_3: (a: number, b: number, c: number) => void; - readonly __wbindgen_add_to_stack_pointer: (a: number) => number; - readonly __wbindgen_export_4: (a: number, b: number) => void; - readonly __wbindgen_export_5: (a: number) => void; - readonly __wbindgen_export_6: (a: number, b: number, c: number, d: number) => void; -} - -export type SyncInitInput = BufferSource | WebAssembly.Module; -/** -* Instantiates the given `module`, which can either be bytes or -* a precompiled `WebAssembly.Module`. -* -* @param {SyncInitInput} module -* -* @returns {InitOutput} -*/ -export function initSync(module: SyncInitInput): InitOutput; - -/** -* If `module_or_path` is {RequestInfo} or {URL}, makes a request and -* for everything else, calls `WebAssembly.instantiate` directly. -* -* @param {InitInput | Promise} module_or_path -* -* @returns {Promise} -*/ -export default function init (module_or_path?: InitInput | Promise): Promise; - - -// USDPL customization -export function init_embedded(); diff --git a/src/usdpl/usdpl_front.js b/src/usdpl/usdpl_front.js deleted file mode 100644 index 012ee25..0000000 --- a/src/usdpl/usdpl_front.js +++ /dev/null @@ -1,605 +0,0 @@ -let wasm; - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -function getObject(idx) { return heap[idx]; } - -let heap_next = heap.length; - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - -const cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - -cachedTextDecoder.decode(); - -let cachedUint8Memory0 = null; - -function getUint8Memory0() { - if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { - cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8Memory0; -} - -function getStringFromWasm0(ptr, len) { - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -let WASM_VECTOR_LEN = 0; - -const cachedTextEncoder = new TextEncoder('utf-8'); - -const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' - ? function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); -} - : function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length - }; -}); - -function passStringToWasm0(arg, malloc, realloc) { - - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length); - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len); - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3); - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -let cachedInt32Memory0 = null; - -function getInt32Memory0() { - if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { - cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachedInt32Memory0; -} - -let cachedFloat64Memory0 = null; - -function getFloat64Memory0() { - if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { - cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); - } - return cachedFloat64Memory0; -} - -function makeMutClosure(arg0, arg1, dtor, f) { - const state = { a: arg0, b: arg1, cnt: 1, dtor }; - const real = (...args) => { - // First up with a closure we increment the internal reference - // count. This ensures that the Rust closure environment won't - // be deallocated while we're invoking it. - state.cnt++; - const a = state.a; - state.a = 0; - try { - return f(a, state.b, ...args); - } finally { - if (--state.cnt === 0) { - wasm.__wbindgen_export_2.get(state.dtor)(a, state.b); - - } else { - state.a = a; - } - } - }; - real.original = state; - - return real; -} -function __wbg_adapter_26(arg0, arg1, arg2) { - wasm.__wbindgen_export_3(arg0, arg1, addHeapObject(arg2)); -} - -/** -* Initialize the front-end library -* @param {number} port -*/ -export function init_usdpl(port) { - wasm.init_usdpl(port); -} - -/** -* Get the targeted plugin framework, or "any" if unknown -* @returns {string} -*/ -export function target_usdpl() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.target_usdpl(retptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_export_4(r0, r1); - } -} - -/** -* Get the UDSPL front-end version -* @returns {string} -*/ -export function version_usdpl() { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.version_usdpl(retptr); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_export_4(r0, r1); - } -} - -/** -* Get the targeted plugin framework, or "any" if unknown -* @param {string} key -* @param {any} value -* @returns {any} -*/ -export function set_value(key, value) { - const ptr0 = passStringToWasm0(key, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.set_value(ptr0, len0, addHeapObject(value)); - return takeObject(ret); -} - -/** -* Get the targeted plugin framework, or "any" if unknown -* @param {string} key -* @returns {any} -*/ -export function get_value(key) { - const ptr0 = passStringToWasm0(key, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.get_value(ptr0, len0); - return takeObject(ret); -} - -let cachedUint32Memory0 = null; - -function getUint32Memory0() { - if (cachedUint32Memory0 === null || cachedUint32Memory0.byteLength === 0) { - cachedUint32Memory0 = new Uint32Array(wasm.memory.buffer); - } - return cachedUint32Memory0; -} - -function passArrayJsValueToWasm0(array, malloc) { - const ptr = malloc(array.length * 4); - const mem = getUint32Memory0(); - for (let i = 0; i < array.length; i++) { - mem[ptr / 4 + i] = addHeapObject(array[i]); - } - WASM_VECTOR_LEN = array.length; - return ptr; -} -/** -* Call a function on the back-end. -* Returns null (None) if this fails for any reason. -* @param {string} name -* @param {any[]} parameters -* @returns {Promise} -*/ -export function call_backend(name, parameters) { - const ptr0 = passStringToWasm0(name, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArrayJsValueToWasm0(parameters, wasm.__wbindgen_export_0); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.call_backend(ptr0, len0, ptr1, len1); - return takeObject(ret); -} - -/** -* Initialize translation strings for the front-end -* @param {string} locale -* @returns {Promise} -*/ -export function init_tr(locale) { - const ptr0 = passStringToWasm0(locale, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.init_tr(ptr0, len0); - return takeObject(ret); -} - -/** -* Translate a phrase, equivalent to tr_n(msg_id, 0) -* @param {string} msg_id -* @returns {string} -*/ -export function tr(msg_id) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0(msg_id, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len0 = WASM_VECTOR_LEN; - wasm.tr(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_export_4(r0, r1); - } -} - -/** -* Translate a phrase, retrieving the plural form for `n` items -* @param {string} msg_id -* @param {number} n -* @returns {string} -*/ -export function tr_n(msg_id, n) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0(msg_id, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len0 = WASM_VECTOR_LEN; - wasm.tr_n(retptr, ptr0, len0, n); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_export_4(r0, r1); - } -} - -function handleError(f, args) { - try { - return f.apply(this, args); - } catch (e) { - wasm.__wbindgen_export_5(addHeapObject(e)); - } -} -function __wbg_adapter_58(arg0, arg1, arg2, arg3) { - wasm.__wbindgen_export_6(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); -} - -async function load(module, imports) { - if (typeof Response === 'function' && module instanceof Response) { - if (typeof WebAssembly.instantiateStreaming === 'function') { - try { - return await WebAssembly.instantiateStreaming(module, imports); - - } catch (e) { - if (module.headers.get('Content-Type') != 'application/wasm') { - console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); - - } else { - throw e; - } - } - } - - const bytes = await module.arrayBuffer(); - return await WebAssembly.instantiate(bytes, imports); - - } else { - const instance = await WebAssembly.instantiate(module, imports); - - if (instance instanceof WebAssembly.Instance) { - return { instance, module }; - - } else { - return instance; - } - } -} - -function getImports() { - const imports = {}; - imports.wbg = {}; - imports.wbg.__wbindgen_object_drop_ref = function(arg0) { - takeObject(arg0); - }; - imports.wbg.__wbindgen_string_new = function(arg0, arg1) { - const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_string_get = function(arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof(obj) === 'string' ? obj : undefined; - var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbindgen_object_clone_ref = function(arg0) { - const ret = getObject(arg0); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_number_new = function(arg0) { - const ret = arg0; - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_boolean_get = function(arg0) { - const v = getObject(arg0); - const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2; - return ret; - }; - imports.wbg.__wbindgen_number_get = function(arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof(obj) === 'number' ? obj : undefined; - getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); - }; - imports.wbg.__wbindgen_is_null = function(arg0) { - const ret = getObject(arg0) === null; - return ret; - }; - imports.wbg.__wbindgen_is_undefined = function(arg0) { - const ret = getObject(arg0) === undefined; - return ret; - }; - imports.wbg.__wbg_instanceof_Window_e266f02eee43b570 = function(arg0) { - let result; - try { - result = getObject(arg0) instanceof Window; - } catch { - result = false; - } - const ret = result; - return ret; - }; - imports.wbg.__wbg_fetch_465e8cb61a0f43ea = function(arg0, arg1) { - const ret = getObject(arg0).fetch(getObject(arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_instanceof_Response_fb3a4df648c1859b = function(arg0) { - let result; - try { - result = getObject(arg0) instanceof Response; - } catch { - result = false; - } - const ret = result; - return ret; - }; - imports.wbg.__wbg_text_f61464d781b099f0 = function() { return handleError(function (arg0) { - const ret = getObject(arg0).text(); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_newwithstrandinit_c45f0dc6da26fd03 = function() { return handleError(function (arg0, arg1, arg2) { - const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2)); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbindgen_cb_drop = function(arg0) { - const obj = takeObject(arg0).original; - if (obj.cnt-- == 1) { - obj.a = 0; - return true; - } - const ret = false; - return ret; - }; - imports.wbg.__wbg_newnoargs_2b8b6bd7753c76ba = function(arg0, arg1) { - const ret = new Function(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_call_95d1ea488d03e4e8 = function() { return handleError(function (arg0, arg1) { - const ret = getObject(arg0).call(getObject(arg1)); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_new_f9876326328f45ed = function() { - const ret = new Object(); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_is_string = function(arg0) { - const ret = typeof(getObject(arg0)) === 'string'; - return ret; - }; - imports.wbg.__wbg_self_e7c1f827057f6584 = function() { return handleError(function () { - const ret = self.self; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_window_a09ec664e14b1b81 = function() { return handleError(function () { - const ret = window.window; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_globalThis_87cbb8506fecf3a9 = function() { return handleError(function () { - const ret = globalThis.globalThis; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_global_c85a9259e621f3db = function() { return handleError(function () { - const ret = global.global; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_newwithlength_0da6f12fbc1ab6eb = function(arg0) { - const ret = new Array(arg0 >>> 0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_set_17224bc548dd1d7b = function(arg0, arg1, arg2) { - getObject(arg0)[arg1 >>> 0] = takeObject(arg2); - }; - imports.wbg.__wbg_call_9495de66fdbe016b = function() { return handleError(function (arg0, arg1, arg2) { - const ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_new_9d3a9ce4282a18a8 = function(arg0, arg1) { - try { - var state0 = {a: arg0, b: arg1}; - var cb0 = (arg0, arg1) => { - const a = state0.a; - state0.a = 0; - try { - return __wbg_adapter_58(a, state0.b, arg0, arg1); - } finally { - state0.a = a; - } - }; - const ret = new Promise(cb0); - return addHeapObject(ret); - } finally { - state0.a = state0.b = 0; - } - }; - imports.wbg.__wbg_resolve_fd40f858d9db1a04 = function(arg0) { - const ret = Promise.resolve(getObject(arg0)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_then_ec5db6d509eb475f = function(arg0, arg1) { - const ret = getObject(arg0).then(getObject(arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_then_f753623316e2873a = function(arg0, arg1, arg2) { - const ret = getObject(arg0).then(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_set_6aa458a4ebdb65cb = function() { return handleError(function (arg0, arg1, arg2) { - const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2)); - return ret; - }, arguments) }; - imports.wbg.__wbg_parse_3ac95b51fc312db8 = function() { return handleError(function (arg0, arg1) { - const ret = JSON.parse(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_stringify_029a979dfb73aa17 = function() { return handleError(function (arg0) { - const ret = JSON.stringify(getObject(arg0)); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbindgen_throw = function(arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }; - imports.wbg.__wbindgen_closure_wrapper386 = function(arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 75, __wbg_adapter_26); - return addHeapObject(ret); - }; - - return imports; -} - -function initMemory(imports, maybe_memory) { - -} - -function finalizeInit(instance, module) { - wasm = instance.exports; - init.__wbindgen_wasm_module = module; - cachedFloat64Memory0 = null; - cachedInt32Memory0 = null; - cachedUint32Memory0 = null; - cachedUint8Memory0 = null; - - - return wasm; -} - -function initSync(module) { - const imports = getImports(); - - initMemory(imports); - - if (!(module instanceof WebAssembly.Module)) { - module = new WebAssembly.Module(module); - } - - const instance = new WebAssembly.Instance(module, imports); - - return finalizeInit(instance, module); -} - -async function init(input) { - if (typeof input === 'undefined') { - input = new URL('usdpl_front_bg.wasm', import.meta.url); - } - const imports = getImports(); - - if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { - input = fetch(input); - } - - initMemory(imports); - - const { instance, module } = await load(await input, imports); - - return finalizeInit(instance, module); -} - -export { initSync } -export default init; - - -// USDPL customization -const encoded = "AGFzbQEAAAABtwEbYAJ/fwBgAn9/AX9gAX8AYAN/f38AYAR/f39/AGADf39/AX9gAX8Bf2AAAGAAAX9gBX9/f39/AGAEf39/fwF/YAV/f39/fwF/YAF/AX5gA39/fwF+YAR/fn9/AGAGf39/f39/AX9gBn9/f39/fwBgBX9/fn9/AGAFf399f38AYAV/f3x/fwBgBH99f38AYAR/fH9/AGACfn8AYAd/f39/f39/AX9gA35/fwF/YAF8AX9gAn9/AX4CqgkjA3diZxpfX3diaW5kZ2VuX29iamVjdF9kcm9wX3JlZgACA3diZxVfX3diaW5kZ2VuX3N0cmluZ19uZXcAAQN3YmcVX193YmluZGdlbl9zdHJpbmdfZ2V0AAADd2JnG19fd2JpbmRnZW5fb2JqZWN0X2Nsb25lX3JlZgAGA3diZxVfX3diaW5kZ2VuX251bWJlcl9uZXcAGQN3YmcWX193YmluZGdlbl9ib29sZWFuX2dldAAGA3diZxVfX3diaW5kZ2VuX251bWJlcl9nZXQAAAN3YmcSX193YmluZGdlbl9pc19udWxsAAYDd2JnF19fd2JpbmRnZW5faXNfdW5kZWZpbmVkAAYDd2JnKF9fd2JnX2luc3RhbmNlb2ZfV2luZG93X2UyNjZmMDJlZWU0M2I1NzAABgN3YmccX193YmdfZmV0Y2hfNDY1ZThjYjYxYTBmNDNlYQABA3diZypfX3diZ19pbnN0YW5jZW9mX1Jlc3BvbnNlX2ZiM2E0ZGY2NDhjMTg1OWIABgN3YmcbX193YmdfdGV4dF9mNjE0NjRkNzgxYjA5OWYwAAYDd2JnKF9fd2JnX25ld3dpdGhzdHJhbmRpbml0X2M0NWYwZGM2ZGEyNmZkMDMABQN3YmcSX193YmluZGdlbl9jYl9kcm9wAAYDd2JnIF9fd2JnX25ld25vYXJnc18yYjhiNmJkNzc1M2M3NmJhAAEDd2JnG19fd2JnX2NhbGxfOTVkMWVhNDg4ZDAzZTRlOAABA3diZxpfX3diZ19uZXdfZjk4NzYzMjYzMjhmNDVlZAAIA3diZxRfX3diaW5kZ2VuX2lzX3N0cmluZwAGA3diZxtfX3diZ19zZWxmX2U3YzFmODI3MDU3ZjY1ODQACAN3YmcdX193Ymdfd2luZG93X2EwOWVjNjY0ZTE0YjFiODEA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BGoiAyACQYABaiACQShqEIQCIAIoAghFBEAgAigCDCIEQYQBTwRAIAQQAAsgAigCgAEiBEGEAU8EQCAEEAALIAIoAigiBEGEAU8EQCAEEAALIAMoAgAiA0GEAU8EQCADEAALQQEhAyAAKAKUBCIEQYQBSQ0BIAQQAAwBC0G4gMAAQRUQlgMACyAAIAM6AJgEIAJB4AJqJAAgAUEARwuhDAEFfyMAQZACayIDJAAgAQJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AYEEBaw4EBwACAwELAAsgASABKQMANwMIIANByABqIAFBEGpBKBCiAxogASABLwFcOwFeIAEQETYCOCABQThqIgQQvwEgBBDCASADQaQBakEGNgIAIANBnAFqQQc2AgAgAyABQd4AajYCoAEgA0HQisAANgKYASADQQg2ApQBIAMgAUEIajYCkAEgA0EDNgLMASADQQQ2AsQBIANBpIrAADYCwAEgA0EANgK4ASADIANBkAFqNgLIASADQYABaiADQbgBahBBIAFBxABqIANBiAFqKAIANgIAIAEgAykDgAE3AjwgA0G4AWogA0HIAGpBKBCiAxogA0GQAWogA0G4AWoQgQEgAygCkAEhBSADKAKUASIGRQ0LIAFB0ABqIAMoApgBIgc2AgAgAUHMAGogBjYCACABIAU2AkggA0GQAWogBiAHEDcgA0HAAWoiBSADQZgBaikDADcDACADIAMpA5ABNwO4ASADQfAAaiADQbgBahC8ASAFIANB+ABqKAIANgIAIAMgAykDcDcDuAEgAyADQbgBahCMAjYCkAEgBCADQZABahCwASADKAKQASIFQYQBTwRAIAUQAAsgA0FAayABQUBrKAIAIAFBxABqKAIAIAQQ8wEgAygCRCEFIAMoAkANCiABIAU2AlQgA0E4ahDtASADKAI4RQ0GIAEgAygCPDYCWCABIAFB2ABqKAIAIAFB1ABqKAIAEAoQSDYCaAsgA0EwaiABQegAaiIEIAIQjQEgAygCMCIGQQJGDQYgAygCNCEFIAQQrwEgBg0IIANBKGogBRDyASADKAIsIQUgAygCKA0IIAEgBTYCaCADQSBqIAQQ9gEgAygCICEEIAFB9ABqIAMoAiQiBTYCACABIAQ2AnAgBA0BIAEgBRBINgJsCyADQRhqIAFB7ABqIgQgAhCNASADKAIYIgJBAkYNASADKAIcIQUgBBCvASACDQAgA0EQaiAFEPEBIAMoAhQhBCADKAIQRQ0CIAQhBQsgASgCaCICQYQBSQ0GIAIQAAwGCyAAQQs2AgBBBAwKCyADQQhqIAQQAiADKAIIIgVFBEAgA0EANgK8AQwECyADKAIMIQIgAyAFNgK8ASADIAI2AsABIAMgAjYCuAEgAyADQbgBahCxAiADQbgBaiADKAIAIAMoAgQQ5QIgAygCvAFFDQMgA0GIAWogA0HAAWoiBigCACICNgIAIAMgAykDuAE3A4ABIANBuAFqIAMoAoQBIAIQmwEgAygCuAEiAkEKRwRAIAMoArwBIQUgA0GQAWogBkEoEKIDGiADQfABaiADQZgBaikDADcDACADQfgBaiADQaABaikDADcDACADQYACaiADQagBaikDADcDACADIAMpA5ABNwPoASADQYABahCaAiAEQYQBTwRAIAQQAAsgASgCaCIEQYQBTwRAIAQQAAsgASgCWCIEQYQBTwRAIAQQAAsgASgCVCIEQYQBTwRAIAQQAAsgAUHIAGoQmgIgAUE8ahCaAiABKAI4IgFBhAFJDQkgARAADAkLIAMgAykCvAE3A4gCIANBiAJqEKoBIQUgA0GAAWoQmgIgBEGEAU8EQCAEEAALIAEoAmgiAkGEAU8EQCACEAALIAEoAlgiAkGEAU8EQCACEAALIAEoAlQiAkGEAU8EQCACEAALIAFByABqEJoCIAFBPGoQmgIgASgCOCIBQYQBSQ0HIAEQAAwHC0HAgsAAQSNB9InAABD3AQALQbyFwABBK0HYisAAEPcBAAsgAEELNgIAQQMMBgtBvIXAAEErQeiKwAAQ9wEACyABKAJYIgJBhAFPBEAgAhAACyABKAJUIgJBhAFJDQAgAhAACyABQcgAahCaAgsgAUE8ahCaAiABKAI4IgFBhAFJDQAgARAAC0EKIQILIAAgBTYCBCAAIAI2AgAgACADKQPoATcDCCAAQRBqIANB8AFqKQMANwMAIABBGGogA0H4AWopAwA3AwAgAEEgaiADQYACaikDADcDAEEBCzoAYCADQZACaiQAC4YMAgp/An4jAEHQAmsiAiQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAC0A2AJBAWsOAwcCAQALIAAgAEGoAWpBqAEQogMaCwJAIAAtAKABQQFrDgMFAQACCyAAQQhqIQQgAEGYAWotAABBAWsOAwcAAwILAAsgACgCACEDIAIgACgCBCIENgLIASACIAM2AsQBIAIgBDYCwAEgAkEoaiACQcABahCxAiACQTBqIAIoAiggAigCLBDlAiACQcwCaiACQThqKAIANgIAIAIgAikDMDcCxAIgAEEIaiIEIAJBwAFqQZABEKIDGiAAQZgBakEAOgAACyAAQYgBaiAAQZQBaigCADYCACAAQYABaiIDIABBjAFqKQIANwIAQYjswABBiOzAACkDACIMQgF8NwMAIAJB6ABqQQRyIAMQ0QEgAkEJNgJoQZDswAAvAQAhAyACQcgBaiACQegAakEoEKIDGiAAQRBqIAJBwAFqQTAQogMaIABB6ABqQQA6AAAgAEHkAGogAzsBACAAIAw3AwgLIAJBwAFqIAQgARAnIAIoAsABQQtGDQIgAkFAayACQcABakEoEKIDGiAEEK4BAkACQCACKAJAIghBeGoOAwEGAAYLIAIoAkQhAUHU7MAAKAIABEAQ4wILQdTswABBADYCACABQYQBSQ0JIAEQAAwJCyACQcgAaigCACEBIAJBzABqKAIAIQUgAigCRCEGIAJBGGpB5ILAABDnASACKQMYIQwgAikDICENIAJBwAFqIAUQayACQYABaiIJIAJByAFqIgopAwA3AwAgAiACKQPAATcDeCACIA03A3AgAiAMNwNoIAIgATYCzAEgAiABIAVBGGwiA2oiBzYCyAEgAiABNgLEASACIAY2AsABIAVFDQYgAkG4AWohBQNAIAEoAgQiBkUEQCABQRhqIQcMBwsgASgCACELIAIgASgCCDYCqAEgAiAGNgKkASACIAs2AqABIAUgAUEUaigCADYCACACIAEpAgw3A7ABIAJBkAFqIAJB6ABqIAJBoAFqIAJBsAFqEEsgAigClAEEQCACQZABahCmAiACQZABahDKAgsgAUEYaiEBIANBaGoiAw0ACwwFC0HAgsAAQSNBgIzAABD3AQALQcCCwABBI0GwgsAAEPcBAAtBAyEDIABBAzoAoAEgAEEDOgCYAUEBIQEMBgtBwILAAEEjQfCLwAAQ9wEAC0HU7MAAKAIABEAQ4wILQdTswABBADYCAEEBIQEMAgsgAiAHNgLEAQsgAkHAAWoQuwEg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IAAoAgQoAgwRBQALrQcCBn8CfiMAQTBrIgMkACADQf8BOgAPIANBEGogASADQQ9qQQEgAigCICIGEQQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAy0AEEEERwRAIAMpAxAiCUL/AYNCBlINAQsgAy0AD0F/ag4KExACAwQFBgcJCAELIAAgCTcCBAwTCyAAQQU6AAQMEgsgA0F/NgIoIANBEGogASADQShqQQQgBhEEACADLQAQQQRHBEAgAzEAEEIGUg0NCyADNQIoIQlBBCEFQQIhBAwQCyADQn83AyggA0EQaiABIANBKGpBCCAGEQQAIAMtABBBBEcEQCADMQAQQgZSDQsLIAMpAygiCkIghiEJIApCIIinIQdBCCEFQQMhBAwPCyADQX82AiggA0EQaiABIANBKGpBBCAGEQQAIAMtABBBBEcEQCADKQMQIglC/wGDQgZSDQkLIAM1AighCUEEIQRBBCEFDA4LIANCfzcDICADQShqIAEgA0EgakEIIAYRBAAgAy0AKEEERwRAIAMpAygiCUL/AYNCBlINBwsgAyADKQMgIgk3AhQgCUIgiKchByADKQMQIQlBCCEFQQUhBAwNCyADQX82AiggA0EQaiABIANBKGpBBCAGEQQAIAMtABBBBEcEQCADKQMQIglC/wGDQgZSDQULIAM1AighCUEEIQVBBiEEDAwLIANCfzcDICADQShqIAEgA0EgakEIIAYRBAAgAy0AKEEERwRAIAMpAygiCUL/AYNCBlINAwsgAyADKQMgIgk3AhQgCUIgiKchByADKQMQIQlBCCEFQQchBAwLCyADQRBqIAEgAhBFIAMoAhRFDQggAygCGCEHIAMpAxAhCSADKAIcIQVBCSEEDAoLIANBEGogASACEL4BIAMoAhBFDQggACADKQIUNwIEDAoLIAAgCTcCBAwJCyAAIAk3AgQMCAsgACAJNwIEDAcLIAAgCTcCBAwGCyAAIAM1AhAgAzUCFEIghoQ3AgQMBQsgACADNQIQIAM1AhRCIIaENwIEDAQLIANBEGogASACEEUgAygCFARAIAMoAhghByADKQMQIQkgAygCHCEFQQEhBAwDCyAAIAMpAxg3AgQMAwsgACADKQMYNwIEDAILQQghBCADQRhqKAIAIQUgAy0AFCEICyAA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IANBGGogA0HgAGoQngMgAygCHEUEQCAAIAY2AgQgAEEANgIAIABBCGogBDYCAAwCCwJAAkACQCACRQRAQQEhAQwBCyACQX9MDQIgAkEBEPcCIgFFDQELIANBADYCQCADIAE2AjwgAyACNgI4IAQgAksEfyADQThqQQAgBBCFASADKAJAIQUgAygCPAUgAQsgBWogBiAEEKIDGiADIAQgBWoiAjYCQCADKAI4IAJrQQJNBEAgA0E4aiACQQMQhQEgAygCQCECCyADKAI8IgEgAmoiBEGYzsAALwAAIgU7AAAgBEECakGazsAALQAAIgY6AAAgAyACQQNqIgI2AkAgAyADKQMwNwNIIANB0ABqIANByABqED4gAygCUARAA0AgA0HoAGogA0HYAGopAwA3AwAgAyADKQNQNwNgIANBEGogA0HgAGoQnQMgAygCECEHIAMoAjggAmsgAygCFCIESQRAIANBOGogAiAEEIUBIAMoAkAhAiADKAI8IQELIAEgAmogByAEEKIDGiADIAIgBGoiAjYCQCADQQhqIANB4ABqEJ4DIAMoAgwEQCADKAI4IAJrQQJNBEAgA0E4aiACQQMQhQEgAygCQCECCyADKAI8IgEgAmoiBCAFOwAAIARBAmogBjoAACADIAJBA2oiAjYCQAsgA0HQAGogA0HIAGoQPiADKAJQDQALCyAAIAMpAzg3AgQgAEEBNgIAIABBDGogA0FAaygCADYCAAwDCyACQQEQmwMACxCYAgALIABB5MzAADYCBCAAQQA2AgAgAEEIakEANgIACyADQfAAaiQAC9AEAgR/Bn4gACAAKAI4IAJqNgI4AkAgAAJ/AkACQAJAIAAoAjwiBUUEQAwBCwJ+IAJBCCAFayIEIAIgBEkbIgZBA00EQEIADAELQQQhAyABNQAACyEHIAAgACkDMCADQQFyIAZJBEAgASADajMAACADQQN0rYYgB4QhByADQQJyIQMLIAMgBkkEfiABIANqMQAAIANBA3SthiAHhAUgBwsgBUEDdEE4ca2GhCIHNwMwIAQgAksNASAAIAApAxggB4UiCCAAKQMIfCIJIAApAxAiCkINiSAKIAApAwB8IgqFIgt8IgwgC0IRiYU3AxAgACAMQiCJNwMIIAAgCSAIQhCJhSIIQhWJIAggCkIgiXwiCIU3AxggACAHIAiFNwMACyACIARrIgJBB3EhAyAEIAJBeHEiAkkEQCAAKQMIIQggACkDECEHIAApAwAhCSAAKQMYIQoDQCAIIAEgBGopAAAiCyAKhSIIfCIKIAcgCXwiCSAHQg2JhSIHfCIMIAdCEYmFIQcgCiAIQhCJhSIIQhWJIAggCUIgiXwiCYUhCiAMQiCJIQggCSALhSEJIARBCGoiBCACSQ0ACyAAIAc3AxAgACAJNwMAIAAgCjcDGCAAIAg3AwgLIANBA0sNAUIAIQdBAAwCCyACIAVqIQMMAgsgASAEajUAACEHQQQLIgJBAXIgA0kEQCABIAIgBGpqMwAAIAJBA3SthiAHhCEHIAJBAnIhAgsgAiADSQR+IAEgAiAEamoxAAAgAkEDdK2GIAeEBSAHCzcDMAsgACADNgI8C5oFAgZ/A34jAEEwayIDJAAgA0H/AToAByADQQhqIAEgA0EHakEBIAIoAiARBAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADLQAIQQRHBEAgAykDCCIKQv8Bg0IGUg0BC0ECIQQgAy0AB0F/ag4KAgMNBAoFBgkIBwELIAAgCjcCBAwNCyAAQQU6AAQMDAsgA0EIaiABIAIQYSADKQMIIQogAygCFCIHRQ0IIAMoAighBSADKQMgIQsgAykDGCEJIAMoAhAhCEEAIQQMCgsgA0EIaiABIAIQjgEgAykDCCEKIAMoAhQiB0UNByADKAIgIQUgAykDGCEJIAMoAhAhCEEBIQQMCQtBAyEEDAgLQQUhBAwHCyAAQQU6AAQMBwsgA0EIaiABIAIQRSADKAIMIgFFDQQgAa0gAykDECIJQiCGhCEKIAlCIIinIQUgAygCCCEGQQkhBAwFCyADQQhqIAEgAhBRIAMoAgwiAQRAIAGtIAMpAxAiCUIghoQhCiAJQiCIpyEFIAMoAgghBkEIIQQMBQsgACADKQMQNwIEDAULIANBCGogASACED8gAygCDCIBBEAgAa0gAykDECIJQiCGhCEKIAlCIIinIQUgAygCCCEGQQchBAwECyAAIAMpAxA3AgQMBAsgA0EIaiABIAIQRSADKAIMIgEEQCABrSADKQMQIglCIIaEIQogCUIgiKchBSADKAIIIQZBBCEEDAMLIAAgAykDEDcCBAwDCyAAIAo3AgQMAgsgACADKQMQNwIEDAELIAAgCzcCICAAIAk3AhggACAHNgIUIAAgCDYCECAAIAo3AgggACAGNgIEIAAgBDYCACAAIAVBAWo2AigMAQsgAEEKNgIACyADQTBqJAAL+QQBCn8jAEEwayIDJAAgA0EDOgAoIANCgICAgIAENwMgIANBADYCGCADQQA2AhAgAyABNgIMIAMgADYCCAJ/AkACQCACKAIAIgpFBEAgAkEUaigCACIARQ0BIAIoAhAhASAAQQN0IQUgAEF/akH/////AXFBAWohByACKAIIIQADQCAAQQRqKAIAIgQEQCADKAIIIAAoAgAgBCADKAIMKAIMEQUADQQLIAEoAgAgA0EIaiABQQRqKAIAEQEADQMgAUEIaiEBIABBCGohACAFQXhqIgUNAAsMAQsgAigCBCIARQ0AIABBBXQhCyAAQX9qQf///z9xQQFqIQcgAigCCCEAA0AgAEEEaigCACIBBEAgAygCCCAAKAIAIAEgAygCDCgCDBEFAA0DCyADIAUgCmoiBEEcai0AADoAKCADIARBFGopAgA3AyAgBEEQaigCACEGIAIoAhAhCEEAIQlBACEBAkACQAJAIARBDGooAgBBAWsOAgACAQsgBkEDdCAIaiIMQQRqKAIAQYMBRw0BIAwoAgAoAgAhBgtBASEBCyADIAY2AhQgAyABNgIQIARBCGooAgAhAQJAAkACQCAEQQRqKAIAQQFrDgIAAgELIAFBA3QgCGoiBkEEaigCAEGDAUcNASAGKAIAKAIAIQELQQEhCQsgAyABNgIcIAMgCTYCGCAIIAQoAgBBA3RqIgEoAgAgA0EIaiABKAIEEQEADQIgAEEIaiEAIAsgBUEgaiIFRw0ACwsgByACQQxqKAIASQRAIAMoAgggAigCCCAHQQN0aiIAKAIAIAAoAgQgAygCDCgCDBEFAA0BC0EADAELQQELIANBMGokAAvRBAEKfyMAQUBqIgMkACACKAIAIQkgAigCCCEIIANBOGohCiADQTBqIQsgA0EoaiEMA0AgAigCCCIFIAIoAgAiBEYEQCACQSAQywIgAigCACEEIAIoAgghBQsgAyAGNgIUIANBADYCECADIAQgBWs2AgwgAyACKAIEIAVqNgIIIANBGGogAUEAIANBCGoQqAECQAJAAkACQAJAAkACQAJAIAMtABgiBUEERgRAIAMoAhAiBQ0BIABBBDoAACAAIAIo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IAQ2AgQgASAAIAJqNgIACyABEIEDDQEgARCXAyICQRBBCBDmAiADak0NASABIAMQqAMhACABIAMQugIgACACIANrIgMQugIgACADED0MAQsgBA8LIAEQqgMgARCBAxoLvwMBAX8jAEFAaiICJAACQAJAAkACQAJAAkAgAC0AAEEBaw4DAQIDAAsgAiAAKAIENgIEQRRBARD3AiIARQ0EIABBEGpBxMfAACgAADYAACAAQQhqQbzHwAApAAA3AAAgAEG0x8AAKQAANwAAIAJBFDYCECACIAA2AgwgAkEUNgIIIAJBNGpBAzYCACACQTxqQQI2AgAgAkEkakHtADYCACACQazFwAA2AjAgAkEANgIoIAJB7gA2AhwgAiACQRhqNgI4IAIgAkEEajYCICACIAJBCGo2AhggASACQShqENgBIQAgAigCCEUNAyACKAIMECsMAwsgAC0AASEAIAJBNGpBATYCACACQTxqQQE2AgAgAkGov8AANgIwIAJBADYCKCACQe8ANgIMIAIgAEEgc0E/cUECdCIAQcjHwABqKAIANgIcIAIgAEHIycAAaigCADYCGCACIAJBCGo2AjggAiACQRhqNgIIIAEgAkEoahDYASEADAILIAAoAgQiACgCACAAKAIEIAEQnAMhAAwBCyAAKAIEIgAoAgAgASAAQQRqKAIAKAIQEQEAIQALIAJBQGskACAADwtBFEEBEJsDAAuPAwIKfwV+IwBBIGsiBCQAIAFBEGohCCABIAIQQyEPIAFBHGooAgAiCUFoaiEKIAEoAhAiByAPp3EhBiAPQhmIQv8Ag0KBgoSIkKDAgAF+IREgAigCCCELIAIoAgQhDAJAAkACQANAIAYgCWopAAAiECARhSIOQn+FIA5C//379+/fv/9+fINCgIGChIiQoMCAf4MhDgNAIA5QBEAgECAQQgGGg0KAgYKEiJCgwIB/g1BFDQMgBiANQQhqIg1qIAdxIQYMAgsgDnohEiAOQn98IA6DIQ4gDCALIApBACASp0EDdiAGaiAHcWtBGGxqIgUoAgQgBSgCCBDRAkUNAAsLIAUNAQsgBEEQaiACQQhqKAIANgIAIARBHGogA0EIaigCADYCACAEIAIpAgA3AwggBCADKQIANwIUIAggDyAEQQhqIAEQRCAAQQA2AgQMAQsgACAFKQIMNwIAIAUgAykCADcCDCAAQQhqIAVBFGoiACgCADYCACAAIANBCGooAgA2AgAgAhCaAgsgBEEgaiQAC8sDAQZ/QQEhAgJAIAEoAgAiBkEnIAEoAgQoAhAiBxEBAA0AQYKAxAAhAkEwIQECQAJ/AkACQAJAAkACQAJAAkAgACgCACIADigIAQEBAQEBAQECBAEBAwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFAAsgAEHcAEYNBAsgABBORQ0EIABBAXJnQQJ2QQdzDAULQfQAIQEMBQtB8gAhAQwEC0HuACEBDAMLIAAhAQwCC0GBgMQAIQIgABByBEAgACEBDAILIABBAXJnQQJ2QQdzCyEBIAAhAgtBBSEDA0AgAyEFIAIhBEGBgMQAIQJB3AAhAAJAAkACQAJAAkACQCAEQYCAvH9qQQMgBEH//8MASxtBAWsOAwEFAAILQQAhA0H9ACEAIAQhAgJAAkACQCAFQf8BcUEBaw4FBwUAAQIEC0ECIQNB+wAhAAwFC0EDIQNB9QAhAAwEC0EEIQNB3AAhAAwDC0GAgMQAIQIgASIAQYCAxABHDQMLIAZBJyAHEQEAIQIMBAsgBUEBIAEbIQNBMEHXACAEIAFBAnR2QQ9xIgBBCkkbIABqIQAgAUF/akEAIAEbIQELCyAGIAAgBxEBAEUNAAtBAQ8LIAIL3wIBB39BASEJAkACQCACRQ0AIAEgAkEBdGohCiAAQYD+A3FBCHYhCyAAQf8BcSENA0AgAUECaiEMIAcgAS0AASICaiEIIAsgAS0AACIBRwRAIAEgC0sNAiAIIQcgDCIBIApGDQIMAQsCQAJAIAggB08EQCAIIARLDQEgAyAHaiEBA0AgAkUNAyACQX9qIQIgAS0AACABQQFqIQEgDUcNAAtBACEJDAULIAcgCEHo2MAAEIgDAAsgCCAEQejYwAAQhwMACyAIIQcgDCIBIApHDQALCyAGRQ0AIAUgBmohAyAAQf//A3EhAQNAAkAgBUEBaiEAAn8gACAFLQAAIgJBGHRBGHUiBEEATg0AGiAAIANGDQEgBS0AASAEQf8AcUEIdHIhAiAFQQJqCyEFIAEgAmsiAUEASA0CIAlBAXMhCSADIAVHDQEMAgsLQZzOwABBK0H42MAAEPcBAAsgCUEBcQvrAgEFfyAAQQt0IQRBISEDQSEhAgJAA0ACQAJAQX8gA0EBdiABaiIDQQJ0QZzlwABqKAIAQQt0IgUgBEcgBSAESRsiBUEBRgRAIAMhAgwBCyAFQf8BcUH/AUcNASADQQFqIQELIAIgAWshAyACIAFLDQEMAgsLIANBAWohAQsCfwJAAn8CQCABQSBNBEAgAUECdCIDQZzlwABqKAIAQRV2IQIgAUEgRw0BQdcFIQNBHwwCCyABQSFB+OvAABDDAQALIANBoOXAAGooAgBBFXYhAyABRQ0BIAFBf2oLQQJ0QZzlwABqKAIAQf///wBxDAELQQALIQECQCADIAJBf3NqRQ0AIAAgAWshBSACQdcFIAJB1wVLGyEEIANBf2ohAEEAIQEDQAJAIAIgBEcEQCABIAJBoObAAGotAABqIgEgBU0NAQwDCyAEQdcFQfjrwAAQwwEACyAAIAJBAWoiAkcNAAsgACECCyACQQFxC4YDAgV/An4jAEFAaiIFJABBASEHAkAgAC0ABA0AIAAtAAUhCCAAKAIAIgYoAhgiCUEEcUUEQCAGKAIAQf3PwABB/8/AACAIG0ECQQMgCBsgBigCBCgCDBEFAA0BIAYoAgAgASACIAYoAgQoAgwRBQANASAGKAIAQcnPwABBAiAGKAIEKAIMEQUADQEgAyAGIAQoAgwRAQAhBwwBCyAIRQRAIAYoAgBB+M/AAEEDIAYoAgQoAgwRBQANASAGKAIYIQkLIAVBAToAFyAFQdzPwAA2AhwgBSAGKQIANwMIIAUgBUEXajYCECAGKQIIIQogBikCECELIAUgBi0AIDoAOCAFIAYoAhw2AjQgBSAJNgIwIAUgCzcDKCAFIAo3AyAgBSAFQQhqNgIYIAVBCGogASACEEcNACAFQQhqQcnPwABBAhBHDQAgAyAFQRhqIAQoAgwRAQANACAFKAIYQfvPwABBAiAFKAIcKAIMEQUAIQcLIABBAToABSAAIAc6AAQgBUFAayQAIAAL/QICCH8EfgJAQdTswAAoAgAEQEHQ7MAAKAIARQ0BQbjswAAgARBDIQtB1OzAACgCACIGQWhqIQdByOzAACgCACIFIAuncSEDIAtCGYhC/wCDQoGChIiQoMCAAX4hDSABKAIIIQggASgCBCEJA0AgAyAGaikAACIMIA2FIgtCf4UgC0L//fv379+//358g0KAgYKEiJCgwIB/gyELA0AgC1AEQCAMIAxCAYaDQoCBgoSIkKDAgH+DUEUNBCADIApBCGoiCmogBXEhAwwCCyALeiEOIAtCf3wgC4MhCyAJIAggB0EAIA6nQQN2IANqIAVxa0EYbGoiBCgCBCAEKAIIENECRQ0ACwsgBEUNASAEQQxqQQAgBBsiAygCCCACTQRAIAAgASkCADcCACAAQQhqIAFBCGooAgA2AgAPCyAAIAMoAgQgAkEMbGoQ0QEgARCaAg8LQeCPwABBK0HckMAAEPcBAAsgACABKQIANwIAIABBCGogAUEIaigCADYCAAvzAgIHfwJ+IwBBQGoiAyQAIANBfzYCDCADQSBqIAEgA0EMakEEIAIoAiARBAACQAJAAkAgAy0AIEEERwRAIAMpAyAiCkL/AYNCBlINAQsgAyADKAIMIgUQoAEgA0EANgIYIAMgAykDADcDEEEEIQYgBUUNAQNAAkAgA0EgaiABIAIQeyADKAIkIgdFDQAgAygCOCEIIAMpAzAhCiADKQMoIQsgAygCICEJIAMoAhgiBCADKAIQRgRAIANBEGogBBD9ASADKAIYIQQLIAYgCGohBiADKAIUIARBGGxqIgQgCjcCECAEIAs3AgggBCAHNgIEIAQgCTYCACADIAMoAhhBAWo2AhggBUF/aiIFDQEMAwsLIAMpAyghCiAAQQA2AgQgACAKNwIIIANBEGoQmwIgA0EQahDKAgwCCyAAQQA2AgQgACAKNwIIDAELIAAgAykDEDcCACAAIAY2AgwgAEEIaiADQRhqKAIANgIACyADQUBrJAAL9QICCH8EfgJAQdTswAAoAgAEQEHQ7MAAKAIARQ0BQbjswAAgARBDIQpB1OzAACgCACIFQWhqIQZByOzAACgCACIEIAqncSECIApCGYhC/wCDQoGChIiQoMCAAX4hDCABKAIIIQcgASgCBCEIA0AgAiAFaikAACILIAyFIgpCf4UgCkL//fv379+//358g0KAgYKEiJCgwIB/gyEKA0AgClAEQCALIAtCAYaDQoCBgoSIkKDAgH+DUEUNBCACIAlBCGoiCWogBHEhAgwCCyAKeiENIApCf3wgCoMhCiAIIAcgBkEAIA2nQQN2IAJqIARxa0EYbGoiAygCBCADKAIIENECRQ0ACwsgA0UNASADQQxqQQAgAxsiAigCCEUEQCAAIAEpAgA3AgAgAEEIaiABQQhqKAIANgIADwsgACACKAIEENEBIAEQmgIPC0Hgj8AAQStBzJDAABD3AQALIAAgASkCADcCACAAQQhqIAFBCGooAgA2AgAL3AICB38BfiMAQTBrIgMkACADQX82AgwgA0EgaiABIANBDGpBBCACKAIgEQQAAkACQAJAIAMtACBBBEcEQCADKQMgIgpC/wGDQgZSDQELIAMgAygCDCIFEJ4BIANBADYCGCADIAMpAwA3AxBBBCEGIAVFDQEDQAJAIANBIGogASACEEUgAygCJCIHRQ0AIAMpAygiCkIgiKchCCADKAIgIQkgAygCGCIEIAMoAhBGBEAgA0EQaiAEEP4BIAMoAhghBAsgBiAIaiEGIAMoAhQgBEEMbGoiBCAKPgIIIAQgBzYCBCAEIAk2AgAgAyADKAIYQQFqNgIYIAVBf2oiBQ0BDAMLCyADKQMoIQogAEEANgIEIAAgCjcCCCADQRBqEJ0CDAILIABBADYCBCAAIAo3AggMAQsgACADKQMQNwIAIAAgBjYCDCAAQQhqIANBGGooAgA2AgALIANBMGokAAvVAgECfyMAQRBrIgIkACAAKAIAIQACQAJ/AkAgAUGAAU8EQCACQQA2AgwgAUGAEE8NASACIAFBP3FBgAFyOgANIAIgAUEGdkHAAXI6AAxBAgwCCyAAKAIIIgMgACgCAEYEQCAAIAMQhwEgACgCCCEDCyAAIANBAWo2AgggACgCBCADaiABOgAADAILIAFBgIAETwRAIAIgAUE/cUGAAXI6AA8gAiABQQZ2QT9xQYABcjoADiACIAFBDHZBP3FBgAFyOgANIAIgAUESdkEHcUHwAXI6AAxBBAwBCyACIAFBP3FBgAFyOgAOIAIgAUEMdkHgAXI6AAwgAiABQQZ2QT9xQYABcjoADUEDCyEBIAAoAgAgACgCCCIDayABSQRAIAAgAyABEIQBIAAoAgghAwsgACgCBCADaiACQQxqIAEQogMaIAAgASADajYCCAsgAkEQaiQAQQAL2QICCX8FfiMAQRBrIgQkAEGY7MAAIAEQQyENQbTswAAoAgAiB0FwaiEIQajswAAoAgAiBiANp3EhAyANQhmIQv8Ag0KBgoSIkKDAgAF+IQ8gASgCCCEJIAEoAgQhCgJ/AkACQANAIAMgB2opAAAiDiAPhSIMQn+FIAxC//379+/fv/9+fINCgIGChIiQoMCAf4MhDANAIAxQBEAgDiAOQgGGg0KAgYKEiJCgwIB/g1BFDQMgAyALQQhqIgtqIAZxIQMMAgsgDHohECAMQn98IAyDIQwgCiAJIAggEKdBA3YgA2ogBnFBBHRrIgUoAgQgBSgCCBDRAkUNAAsLIAUNAQsgBEEIaiABQQhqKAIANgIAIAQgAjYCDCAEIAEpAgA3AwAgDSAEEEZBAAwBCyAFKAIMIQMgBSACNgIMIAEQmgJBAQshASAAIAM2AgQgACABNgIAIARBEGokAAviAgIEfwF+IwBBEGsiBCQAIAQgASgCACIGQQFqOgAHIARBCGogAiAEQQdqQQEgAygCDBEEAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/IAQtAAhBBEYEQCAEKAIMDAELIAQpAwgiCEL/AYNCBlINASAIQiCIpwshByAGQQFrDgkCCQkDCQQFBgcBCyAAIAg3AgAMCgsgBEEIaiABQQhqIAIgAxBpDAYLIARBCGogAUEIaiACIAMQigEMBQsgBEEIaiABQQRqIAIgAxCGAQwECyAAQQU6AAAMBgsgBEEIaiABQQRqIAIgAxB1DAILIARBCGogAUEEaiACIAMQdAwBCyAEQQhqIAFBBGogAiADEIYBCyAELQAIQQZGBEAgBCgCDCEFDAELIAQpAwgiCEL/AYNCBlINASAIQiCIpyEFCyAAQQY6AAAgACAFIAdqNgIEDAELIAAgCDcCAAsgBEEQaiQAC8kCAQd/IwBBMGsiACQAEBMhASAAQShqEL0CAkACQAJAIAAoAihFDQAgACgCLCEDEBQhASAAQSBqEL0CIAAoAiAhAiAAKAIkIANBhAFPBEAgAxAACyACRQ0AIAEgAhshAxAVIQEgAEEYahC9AiAAKAIYIQIgACgCHCADQYQBTwRAIAMQAAsgAkUNACABIAIbIQIQFiEBIABBEGoQvQIgACgCFCEDIAAoAhAgAkGEAU8EQCACEAALQQEhAg0BCyABEAhBAUcNAUEAIQIgAUGEAU8EQCABEAALIAEhAwtB3LvAAEELEA8iAUGAARAQIQQgAEEIahC9AgJAIAAoAggiBUUNACAAKAIMIAQgBRsiBkGEAUkNACAGEAALIAFBhAFPBEAgARAAC0GAASAEIAUbIQEgAiADQYMBS3FFDQAgAxAACyAAQTBqJAAgAQvOAgECfyMAQRBrIgIkAAJAAn8CQAJAIAFBgAFPBEAgAkEANgIMIAFBgBBJDQEgAUGAgARPDQIgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwwDCyAAKAIIIgMgACgCAEYEQCAAIAMQiAEgACgCCCEDCyAAIANBAWo2AgggACgCBCADaiABOgAADAMLIAIgAUE/cUGAAXI6AA0gAiABQQZ2QcABcjoADEECDAELIAIgAUE/cUGAAXI6AA8gAiABQQZ2QT9xQYABcjoADiACIAFBDHZBP3FBgAFyOgANIAIgAUESdkEHcUHwAXI6AAxBBAshASAAKAIAIAAoAggiA2sgAUkEQCAAIAMgARCFASAAKAIIIQMLIAAoAgQgA2ogAkEMaiABEKIDGiAAIAEgA2o2AggLIAJBEGokAAuxAgEHfwJAIAJBD00EQCAAIQMMAQsgAEEAIABrQQNxIgZqIQQgBgRAIAAhAyABIQUDQCADIAUtAAA6AAAgBUEBaiEFIANBAWoiAyAESQ0ACwsgBCACIAZrIghBfHEiB2ohAwJAIAEgBmoiBkEDcSICBEAgB0EBSA0BIAZBfHEiBUEEaiEBQQAgAkEDdCIJa0EYcSECIAUoAgAhBQNAIAQgBSAJdiABKAIAIgUgAnRyNgIAIAFBBGohASAEQQRqIgQgA0kNAAsMAQsgB0EBSA0AIAYhAQNAIAQgASgCADYCACABQQRqIQEgBEEEaiIEIANJDQALCyAIQQNxIQIgBiAHaiEBCyACBEAgAiADaiECA0AgAyABLQAAOgAAIAFBAWohASADQQFqIgMgAkkNAAsLIAALwAICBX8BfiMAQTBrIgUkAEEnIQMCQCAAQpDOAFQEQCAAIQgMAQsDQCAFQQlqIANqIgRBfGogACAAQpDOAIAiCEKQzgB+faciBkH//wNxQeQAbiIHQQF0QcrQwABqLwAAOwAAIARBfmogBiAHQeQAbGtB//8DcUEBdEHK0MAAai8AADsAACADQXxqIQMgAEL/wdcvViAIIQANAAsLIAinIgRB4wBLBEAgA0F+aiIDIAVBCWpqIAinIgQgBEH//wNxQeQAbiIEQeQAbGtB//8DcUEBdEHK0MAAai8AADsAAAsCQCAEQQpPBEAgA0F+aiIDIAVBCWpqIARBAXRBytDAAGovAAA7AAAMAQsgA0F/aiIDIAVBCWpqIARBMGo6AAALIAIgAUGczsAAQQAgBUEJaiADakEnIANrEDEgBUEwaiQAC8ECAQN/IwBBgAFrIgQkAAJAAkACQAJAIAEoAhgiAkEQcUUEQCACQSBxDQEgADUCAEEBIAEQWiEADAQLIAAoAgAhAEEAIQIDQCACIARqQf8AakEwQdcAIABBD3EiA0EKSRsgA2o6AAAgAkF/aiECIABBD0sgAEEEdiEADQALIAJBgAFqIgBBgQFPDQEgAUEBQcjQwABBAiACIARqQYABakEAIAJrEDEhAAwDCyAAKAIAIQBBACECA0AgAiAEakH/AGpBMEE3IABBD3EiA0EKSRsgA2o6AAAgAkF/aiECIABBD0sgAEEEdiEADQALIAJBgAFqIgBBgQFPDQEgAUEBQcjQwABBAiACIARqQYABakEAIAJrEDEhAAwCCyAAQYABQbjQwAAQhgMACyAAQYABQbjQwAAQhgMACyAEQYABaiQAIAALqQIBBH8CQAJAAkACQCABQQNqQXxxIgMgAUYNACADIAFrIgMgAiADIAJJGyIERQ0AQQAhA0EBIQUDQCABIANqLQAAQQpGDQQgBCADQQFqIgNHDQALIAQgAkF4aiIDSw0CDAELIAJBeGohA0EAIQQLA0ACQCABIARqIgUoAgBBipSo0ABzIgZBf3MgBkH//ft3anFBgIGChHhxDQAgBUEEaigCAEGKlKjQAHMiBUF/cyAFQf/9+3dqcUGAgYKEeHENACAEQQhqIgQgA00NAQsLIAQgAk0NACAEIAJBjNPAABCGAwALQQAhBSACIARHBEADQCABIARqLQAAQQpGBEAgBCEDQQEhBQwDCyACIARBAWoiBEcNAAsLIAIhAwsgACADNgIEIAAgBTYCAAvBAgEDfyMAQYABayIEJAACQAJAAkACQCABKAIYIgJBEHFFBEAgAkEgcQ0BIACtQv8Bg0EBIAEQWiEADAQLQQAhAgNAIAIgBGpB/wBqQTBB1wAgAEEPcSIDQQpJGyADajoAACACQX9qIQIgAEH/AXEiA0EEdiEAIANBD0sNAAsgAkGAAWoiAEGBAU8NASABQQFByNDAAEECIAIgBGpBgAFqQQAgAmsQMSEADAMLQQAhAgNAIAIgBGpB/wBqQTBBNyAAQQ9xIgNBCkkbIANqOgAAIAJBf2ohAiAAQf8BcSIDQQR2IQAgA0EPSw0ACyACQYABaiIAQYEBTw0BIAFBAUHI0MAAQQIgAiAEakGAAWpBACACaxAxIQAMAgsgAEGAAUG40MAAEIYDAAsgAEGAAUG40MAAEIYDAAsgBEGAAWokACAAC8gCAQR/IwBBIGsiAiQAQYEBIQECQAJAAkACQAJAAkACQAJAAkACQCAALQAAQQFrDgkAAQIDBAUGBwgJCyACQRhqIABBDGooAgAiATYCACACIAApAgQ3AxAgAigCFCABEAEhASACQRBqEJoCDAgLIAAqAgS7EAQhAQwHCyAAKwMIEAQhAQwGCyAAKAIEuBAEIQEMBQsgACkDCLoQBCEBDAQLIAAoAgS3EAQhAQwDCyAAKQMIuRAEIQEMAgtBggFBgwEgAC0AARshAQwBCyACQRhqIABBDGooAgAiAzYCACACIAApAgQ3AxAgAkEIaiACKAIUIgAgAxCUAiACKAIIIgRFIAIoAgwiAUGEAUlyRQRAIAEQAAsgACADEAEhAAJAIAQEQCAAIQEMAQsgAEGEAUkNACAAEAALIAJBEGoQmgILIAJBIGokACABC9ECAgR/An4jAEFAaiIDJAAgAAJ/IAAtAAgEQCAAKAIAIQVBAQwBCyAAKAIAIQUgAEEEaigCACIEKAIYIgZBBHFFBEBBASAEKAIAQf3PwABBh9DAACAFG0ECQQEgBRsgBCgCBCgCDBEFAA0BGiABIAQgAigCDBEBAAwBCyAFRQRAIAQoAgBBhdDAAEECIAQoAgQoAgwRBQAEQEEAIQVBAQwCCyAEKAIYIQYLIANBAToAFyADQdzPwAA2AhwgAyAEKQIANwMIIAMgA0EXajYCECAEKQIIIQcgBCkCECEIIAMgBC0AIDoAOCADIAQoAhw2AjQgAyAGNgIwIAMgCDcDKCADIAc3AyAgAyADQQhqNgIYQQEgASADQRhqIAIoAgwRAQANABogAygCGEH7z8AAQQIgAygCHCgCDBEFAAs6AAggACAFQQFqNgIAIANBQGskACAAC6cCAQV/IABCADcCECAAAn9BACABQYACSQ0AGkEfIAFB////B0sNABogAUEGIAFBCHZnIgJrdkEBcSACQQF0a0E+agsiAjYCHCACQQJ0QcjtwABqIQMgACEEAkACQAJAAkBB5PDAACgCACIFQQEgAnQiBnEEQCADKAIAIQMgAhDgAiECIAMQlwMgAUcNASADIQIMAgtB5PDAACAFIAZyNgIAIAMgADYCAAwDCyABIAJ0IQUDQCADIAVBHXZBBHFqQRBqIgYoAgAiAkUNAiAFQQF0IQUgAiIDEJcDIAFHDQALCyACKAIIIgEgBDYCDCACIAQ2AgggBCACNgIMIAQgATYCCCAAQQA2AhgPCyAGIAA2AgALIAAgAzYCGCAEIAQ2AgggBCAENgIMC8UCAgN/A34jAEEgayIDJAAgA0J/NwMAIANBEGogASADQQggAigCIBEEAAJAAkACQAJAIAMtABBBBEcEQCADKQMQIgZC/wGDQgZSDQELIAMpAwAhByADQRBqIAEgAhBFIAMoAhQiBEUNASADKAIQIQUgAyADKQMYIgg+AgggAyAENgIEIAMgBTYCACADQRBqIAEgAhBAIAMoAhQiAUUNAiADKAIQIQIgAykDGCEGIAAgAykDADcCCCAAIAY+AhwgACABNgIYIAAgAjYCFCAAIAc3AwAgAEEQaiADQQhqKAIANgIAIAAgCEIgiKcgBkIgiKdqQQhqNgIgDAMLIABBADYCDCAAIAY3AwAMAgsgAykDGCEGIABBADYCDCAAIAY3AwAMAQsgAykDGCEGIABBADYCDCAAIAY3AwAgAxCaAgsgA0EgaiQAC7YCAQV/IAAoAhghBAJAAkAgACAAKAIMRgRAIABBFEEQIABBFGoiASgCACIDG2ooAgAiAg0BQQAhAQwCCyAAKAIIIgIgACgCDCIBNgIMIAEgAjYCCAwBCyABIABBEGogAxshAwNAIAMhBSACIgFBFGoiAygCACICRQRAIAFBEGohAyABKAIQIQILIAINAAsgBUEANgIACwJAIARFDQACQCAAIAAoAhxBAnRByO3AAGoiAigCAEcEQCAEQRBBFCAEKAIQIABGG2ogATYCACABDQEMAgsgAiABNgIAIAENAEHk8MAAQeTwwAAoAgBBfiAAKAIcd3E2AgAPCyABIAQ2AhggACgCECICBEAgASACNgIQIAIgATYCGAsgAEEUaigCACIARQ0AIAFBFGogADYCACAAIAE2AhgLC58CAQJ/IwBBEGsiAiQAAkAgACgCACIAIAJBDGoCfwJAAkAgAUGAAU8EQCACQQA2AgwgAUGAEEkNASABQYCABE8NAiACIAFBP3FBgAFyOgAOIAIgAUEMdkHgAXI6AAwgAiABQQZ2QT9xQYABcjoADUEDDAMLIAAoAggiAyAAKAIARgR/IAAgAxD6ASAAKAIIBSADCyAAKAIEaiABOgAAIAAgACgCCEEBajYCCAwDCyACIAFBP3FBgAFyOgANIAIgAUEGdkHAAXI6AAxBAgwBCyACIAFBP3FBgAFyOgAPIAIgAUEGdkE/cUGAAXI6AA4gAiABQQx2QT9xQYABcjoADSACIAFBEnZBB3FB8AFyOgAMQQQLEJcCCyACQRBqJABBAAubAgECfyMAQRBrIgQkAAJAIAMoAggiAiADKAIERwRAA0AgBEEIaiABIAQgAxCoAQJAIAQtAAgiBUEERgRAIAIgAygCCCICRw0BIAQQ5gEgBEEIaiAEKAIAEKACIAAgBCkDCDcCAAwECwJ/AkACQAJAAkAgBUEBaw4DAQIDAAsgBCgCDBpBKAwDCyAELQAJDAILIAQoAgwtAAgMAQsgBCgCDC0ACAtB/wFxQSNHBEAgACAEKQMINwIADAQLIAQtAAhBA0YEQCAEKAIMIgIoAgAgAigCBCgCABECACACKAIEIgUoAgQEQCAFKAIIGiACKAIAECsLIAIQKwsgAygCCCECCyADKAIEIAJHDQALCyAAQQQ6AAALIARBEGokAAtgAQx/QdDuwAAoAgAiAgRAQcjuwAAhBgNAIAIiASgCCCECIAEoAgQhAyABKAIAIQQgAUEMaigCABogASEGIAVBAWohBSACDQALC0GI8cAAIAVB/x8gBUH/H0sbNgIAIAgL3QECA38BfiMAQSBrIgQkAAJAAkACQCABrSACrX4iBkIgiKcNACAGpyIBQQdqIgMgAUkNACACIANBeHEiA2pBCGoiASADSQ0ADAELEOgBIAQpAwghBiAAQQA2AgwgACAGNwIADAELIAFBAE4EQCABBH8gAUEIEPcCBUEICyIFBEAgAEEANgIIIAAgAyAFajYCDCAAIAJBf2oiATYCACAAIAEgAkEDdkEHbCABQQhJGzYCBAwCCyABQQgQmwMACxDoASAEKQMQIQYgAEEANgIMIAAgBjcCAAsgBEEgaiQAC5oCAQJ/IwBBEGsiAiQAAkAgACACQQxqAn8CQAJAIAFBgAFPBEAgAkEANgIMIAFBgBBJDQEgAUGAgARPDQIgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwwDCyAAKAIIIgMgACgCAEYEfyAAIAMQ+gEgACgCCAUgAwsgACgCBGogAToAACAAIAAoAghBAWo2AggMAwsgAiABQT9xQYABcjoADSACIAFBBnZBwAFyOgAMQQIMAQsgAiABQT9xQYABcjoADyACIAFBBnZBP3FBgAFyOgAOIAIgAUEMdkE/cUGAAXI6AA0gAiABQRJ2QQdxQfABcjoADEEECxCXAgsgAkEQaiQAQQALsgICCX8EfkG07MAAKAIAIgEEQEGAASECAkBBsOzAACgCAEUNAEGY7MAAQQAgARsgABBDIQpBtOzAACgCACIFQXBqIQZBqOzAACgCACIDIAqncSEBIApCGYhC/wCDQoGChIiQoMCAAX4hDCAAKAIIIQcgACgCBCEIA0AgASAFaikAACILIAyFIgpCf4UgCkL//fv379+//358g0KAgYKEiJCgwIB/gyEKA0AgClAEQCALIAtCAYaDQoCBgoSIkKDAgH+DUEUNAyABIAlBCGoiCWogA3EhAQwCCyAKeiENIApCf3wgCoMhCiAIIAcgBiANp0EDdiABaiADcUEEdGsiBCgCBCAEKAIIENECRQ0ACwsgBCgCDBADIQILIAAQmgIgAg8LQeCPwABBK0G8kMAAEPcBAAuWAgIDfwF+IwBBEGsiBCQAIAQgASkDADcDCCAEIAIgBEEIakEIIAMoAgwRBAACQAJAAkACfyAELQAAQQRGBEAgBCgCBAwBCyAEKQMAIgdC/wGDQgZSDQEgB0IgiKcLIQUgBEEIaiABQQhqIAIgAxCGAQJ/IAQtAAhBBkYEQCAEKAIMDAELIAQpAwgiB0L/AYNCBlINAiAHQiCIpwshBiAEQQhqIAFBFGogAiADEHcCQAJ/IAQtAAhBBkYEQCAEKAIMDAELIAQpAwgiB0L/AYNCBlINASAHQiCIpwshASAAQQY6AAAgACAFIAZqIAFqNgIEDAMLIAAgBzcCAAwCCyAAIAc3AgAMAQsgACAHNwIACyAEQRBqJAALnAIBBX8jAEEQayIDJAAgACgCACIAQRxqQQA6AAACQCAAKAIIIgJB/////wdJBEACQCAAQRhqKAIAIgRFDQAgAg0CA0AgAEF/NgIIAkAgACgCGCICBEAgACACQX9qNgIYIAAgACgCFCICQQFqIgVBACAAKAIMIgYgBSAGSRtrNgIUIAAoAhAgAkECdGooAgAiAg0BCyAAQQA2AggMAgsgAEEANgIIIAMgAjYCBCACQQhqEK0BIANBBGoQtQEgBEF/aiIERQ0BIAAoAghFDQALDAILIAFBhAFPBEAgARAACyADQRBqJAAPC0GotcAAQRggA0EIakHAtcAAQbC2wAAQtAEAC0GItcAAQRAgA0EIakGYtcAAQcC2wAAQtAEAC/sBAgJ/AX4jAEEgayICJAACQAJAAkACQCABRQRAQQAhAUGwgMAAIQMMAQsCQCABQQhPBEAgASABQf////8BcUYEQEF/IAFBA3RBB25Bf2pndkEBaiEBDAILEOgBIAIoAgghASACKAIMIgNBgYCAgHhHDQQMAQtBBEEIIAFBBEkbIQELIAJBEGpBGCABEGYgAigCECEBIAIoAhwiA0UNASACKQIUIQQgA0H/ASABQQlqEKMDGgsgACADNgIMIAAgBD4CBCAAIAE2AgAgACAEQiCIPgIIDAILIAIoAhQhAwsgAEEANgIMIAAgAzYCBCAAIAE2AgALIAJBIGokAAuLAgIDfwF+IwBBMGsiAiQAIAEoAgRFBEAgASgCDCEDIAJBEGoiBEEANgIAIAJCgICAgBA3AwggAiACQQhqNgIUIAJBKGogA0EQaikCADcDACACQSBqIANBCGopAgA3AwAgAiADKQIANwMYIAJBFGpB2L7AACACQRhqEDoaIAFBCGogBCgCADYCACABIAIpAwg3AgALIAEpAgAhBSABQoCAgIAQNwIAIAJBIGoiAyABQQhqIgEoAgA2AgAgAUEANgIAIAIgBTcDGEEMQQQQ9wIiAUUEQEEMQQQQmwMACyABIAIpAxg3AgAgAUEIaiADKAIANgIAIABB3MbAADYCBCAAIAE2AgAgAkEwaiQAC+kBAQF/IwBBEGsiAiQAIAAoAgAgAkEANgIMIAJBDGoCfwJAAkAgAUGAAU8EQCABQYAQSQ0BIAFBgIAETw0CIAIgAUE/cUGAAXI6AA4gAiABQQx2QeABcjoADCACIAFBBnZBP3FBgAFyOgANQQMMAwsgAiABOgAMQQEMAgsgAiABQT9xQYABcjoADSACIAFBBnZBwAFyOgAMQQIMAQsgAiABQT9xQYABcjoADyACIAFBBnZBP3FBgAFyOgAOIAIgAUEMdkE/cUGAAXI6AA0gAiABQRJ2QQdxQfABcjoADEEECxBHIAJBEGokAAuNAgECfyMAQSBrIgIkAAJ/IAAoAgAiAy0AAEUEQCABKAIAQdHkwABBBCABKAIEKAIMEQUADAELQQEhACACIANBAWo2AgwgAiABKAIAQc3kwABBBCABKAIEKAIMEQUAOgAYIAIgATYCFCACQQA6ABkgAkEANgIQIAJBEGogAkEMakGM0MAAEF8hAyACLQAYIQECQCADKAIAIgNFBEAgASEADAELIAENACACKAIUIQECQCADQQFHDQAgAi0AGUUNACABLQAYQQRxDQAgASgCAEGI0MAAQQEgASgCBCgCDBEFAA0BCyABKAIAQcfOwABBASABKAIEKAIMEQUAIQALIABB/wFxQQBHCyACQSBqJAAL+AECA38BfiMAQTBrIgEkAAJAIAAEQCAAKQIAIQQgAEEANgIEIAFBKGoiAiAAQRBqKAIANgIAIAFBIGoiAyAAQQhqKQIANwMAIAEgBDcDGCABKAIcBEAgAUEQaiACKAIANgIAIAFBCGogAykDADcDACABIAEpAxg3AwAMAgsgAUEYahCuAgsgARCxAQtB3OzAACkCACEEQdzswAAgASkDADcCACABQShqQezswAAoAgA2AgAgAUEgakHk7MAAKQIANwMAQeTswAAgAUEIaikDADcCAEHs7MAAIAFBEGooAgA2AgAgASAENwMYIAFBGGoQrgIgAUEwaiQAC/ABAQF/IwBBEGsiAiQAIAJBADYCDAJ/AkACQCABQYABTwRAIAFBgBBJDQEgAUGAgARPDQIgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwwDCyACIAE6AAxBAQwCCyACIAFBP3FBgAFyOgANIAIgAUEGdkHAAXI6AAxBAgwBCyACIAFBP3FBgAFyOgAPIAIgAUEGdkE/cUGAAXI6AA4gAiABQQx2QT9xQYABcjoADSACIAFBEnZBB3FB8AFyOgAMQQQLIQEgACgCCCACQQxqIAEQlwIgAkEQaiQAQQAL5gEBAX8jAEEQayICJAAgAkEANgIMIAAgAkEMagJ/AkACQCABQYABTwRAIAFBgBBJDQEgAUGAgARPDQIgAiABQT9xQYABcjoADiACIAFBDHZB4AFyOgAMIAIgAUEGdkE/cUGAAXI6AA1BAwwDCyACIAE6AAxBAQwCCyACIAFBP3FBgAFyOgANIAIgAUEGdkHAAXI6AAxBAgwBCyACIAFBP3FBgAFyOgAPIAIgAUEGdkE/cUGAAXI6AA4gAiABQQx2QT9xQYABcjoADSACIAFBEnZBB3FB8AFyOgAMQQQLEEcgAkEQaiQAC+EBAAJAIABBIEkNAAJAAn9BASAAQf8ASQ0AGiAAQYCABEkNAQJAIABBgIAITwRAIABB0LhzakHQuitJIABBtdlzakEFSXINBCAAQeKLdGpB4gtJIABBn6h0akGfGElyDQQgAEF+cUGe8ApGIABB3uJ0akEOSXINBCAAQWBxQeDNCkcNAQwECyAAQabewABBLEH+3sAAQcQBQcLgwABBwgMQTQ8LQQAgAEHGkXVqQQZJDQAaIABBgIC8f2pB8IN0SQsPCyAAQYjZwABBKEHY2cAAQZ8CQffbwABBrwIQTQ8LQQAL/QEBBX8jAEEgayIDJAACQAJAAkACQCABKAIAIAJPBEAgA0EIaiABELMCIAMoAhAiBEUNAyADKAIMIQUgAygCCCEGAkAgAkUEQEEBIQQgBQ0BDAQLQQEhByAEQQFGDQIgAkEBEPcCIgRFDQUgBCAGIAIQogMaIAVFDQMLIAYQKwwCCyADQRRqQQE2AgAgA0EcakEANgIAIANB9L3AADYCECADQdC9wAA2AhggA0EANgIIIANBCGpByL7AABCoAgALIAYgBUEBIAIQ6AIiBEUNAgsgASACNgIAIAEgBDYCBAtBgYCAgHghBwsgACAHNgIEIAAgAjYCACADQSBqJAAL6gECBH8BfiMAQRBrIgQkACAEIAEoAggiBTYCBCAEQQhqIAIgBEEEakEEIAMoAgwRBAACQAJAAn8gBC0ACEEERgRAIAQoAgwMAQsgBCkDCCIIQv8Bg0IGUg0BIAhCIIinCyEGIAUEQCABKAIEIQEgBUEYbCEFA0AgBEEIaiABIAIgAxCUAQJ/IAQtAAhBBkYEQCAEKAIMDAELIAQpAwgiCEL/AYNCBlINAyAIQiCIpwshByABQRhqIQEgBiAHaiEGIAVBaGoiBQ0ACwsgAEEGOgAAIAAgBjYCBAwBCyAAIAg3AgALIARBEGokAAvpAQIEfwF+IwBBEGsiBCQAIAQgASgCCCIFNgIEIARBCGogAiAEQQRqQQQgAygCDBEEAAJAAkACfyAELQAIQQRGBEAgBCgCDAwBCyAEKQMIIghC/wGDQgZSDQEgCEIgiKcLIQYgBQRAIAEoAgQhASAFQShsIQUDQCAEQQhqIAEgAiADEFYCfyAELQAIQQZGBEAgBCgCDAwBCyAEKQMIIghC/wGDQgZSDQMgCEIgiKcLIQcgAUEoaiEBIAYgB2ohBiAFQVhqIgUNAAsLIABBBjoAACAAIAY2AgQMAQsgACAINwIACyAEQRBqJAAL6gECBH8BfiMAQRBrIgQkACAEIAEoAggiBTYCBCAEQQhqIAIgBEEEakEEIAMoAgwRBAACQAJAAn8gBC0ACEEERgRAIAQoAgwMAQsgBCkDCCIIQv8Bg0IGUg0BIAhCIIinCyEGIAUEQCABKAIEIQEgBUEMbCEFA0AgBEEIaiABIAIgAxCGAQJ/IAQtAAhBBkYEQCAEKAIMDAELIAQpAwgiCEL/AYNCBlINAyAIQiCIpwshByABQQxqIQEgBiAHaiEGIAVBdGoiBQ0ACwsgAEEGOgAAIAAgBjYCBAwBCyAAIAg3AgALIARBEGokAAvpAQIEfwF+IwBBEGsiBCQAIAQgASgCCCIFNgIEIARBCGogAiAEQQRqQQQgAygCDBEEAAJAAkACfyAELQAIQQRGBEAgBCgCDAwBCyAEKQMIIghC/wGDQgZSDQEgCEIgiKcLIQYgBQRAIAEoAgQhASAFQQR0IQUDQCAEQQhqIAEgAiADEDYCfyAELQAIQQZGBEAgBCgCDAwBCyAEKQMIIghC/wGDQgZSDQMgCEIgiKcLIQcgAUEQaiEBIAYgB2ohBiAFQXBqIgUNAAsLIABBBjoAACAAIAY2AgQMAQsgACAINwIACyAEQRBqJAALhgIBAn8jAEEwayICJAACfwJAAkACQCAALQAAIgNBfGpBAiADQQNLG0H/AXFBAWsOAgECAAsgAkEcakEBNgIAIAJBJGpBADYCACACQYifwAA2AhggAkH8ncAANgIgIAJBADYCECABIAJBEGoQ2AEMAgsgAkEcakEBNgIAIAJBJGpBADYCACACQeSewAA2AhggAkH8ncAANgIgIAJBADYCECABIAJBEGoQ2AEMAQsgAiAANgIMIAJBHGpBAjYCACACQSRqQQE2AgAgAkG8nsAANgIYIAJBADYCECACQcIANgIsIAIgAkEoajYCICACIAJBDGo2AiggASACQRBqENgBCyACQTBqJAALhgIBAn8jAEEwayICJAACfwJAAkACQCAALQAAIgNBfGpBAiADQQNLG0H/AXFBAWsOAgECAAsgAkEcakEBNgIAIAJBJGpBADYCACACQeyfwAA2AhggAkH8ncAANgIgIAJBADYCECABIAJBEGoQ2AEMAgsgAkEcakEBNgIAIAJBJGpBADYCACACQcifwAA2AhggAkH8ncAANgIgIAJBADYCECABIAJBEGoQ2AEMAQsgAiAANgIMIAJBHGpBAjYCACACQSRqQQE2AgAgAkGgn8AANgIYIAJBADYCECACQcIANgIsIAIgAkEoajYCICACIAJBDGo2AiggASACQRBqENgBCyACQTBqJAAL6gECAn8BfiMAQSBrIgMkACAAKAIARQRAIABBfzYCACADQRhqIABBHGopAgA3AwAgA0EQaiAAQRRqKQIANwMAIABBDGoiBCkCACEFIARBADYCACADIAU3AwggA0EIahDaAgJAIABBJGooAgBBAkYNACAAQShqKAIAIgRBhAFJDQAgBBAACyAAIAE2AiQgAEEoaiACNgIAIABBCGoiAigCACEBIAJBADYCACAAIAAoAgBBAWo2AgAgAQRAIAAoAgQgASgCBBECAAsgA0EgaiQADwtB4LbAAEEQIANBCGpB8LbAAEGwuMAAELQBAAvpAQIDfwJ+IwBBIGsiAyQAIANBEGogASACEEUCQAJAIAMoAhQiBARAIAMoAhAhBSADIAMpAxgiBz4CCCADIAQ2AgQgAyAFNgIAIANBEGogASACEFMgAygCFCIBRQ0BIAMoAhAhAiADKQMYIQYgACADKQMANwIAIAAgBj4CFCAAIAE2AhAgACACNgIMIABBCGogA0EIaigCADYCACAAIAZCIIinIAdCIIinajYCGAwCCyADKQMYIQYgAEEANgIEIAAgBjcCCAwBCyADKQMYIQYgAEEANgIEIAAgBjcCCCADEJoCCyADQSBqJAAL0AEBBX8jAEEgayIDJAAgAAJ/QQAgAkEBaiIEIAJJDQAaIAEoAgAiAkEBdCIFIAQgBSAESxsiBEEEIARBBEsbIgVBBHQhBCAFQYCAgMAASUEDdCEGAkAgAgRAIAEoAgQhByADQQg2AhggAyACQQR0NgIUIAMgBzYCEAwBCyADQQA2AhgLIAMgBCAGIANBEGoQlwEgAygCBCEEIAMoAgAEQCADQQhqKAIADAELIAEgBTYCACABIAQ2AgRBgYCAgHgLNgIEIAAgBDYCACADQSBqJAALzwEBBX8jAEEgayIDJAAgAAJ/QQAgAkEBaiIEIAJJDQAaIAEoAgAiAkEBdCIFIAQgBSAESxsiBEEEIARBBEsbIgVBGGwhBCAFQdaq1SpJQQJ0IQYCQCACBEAgASgCBCEHIANBBDYCGCADIAJBGGw2AhQgAyAHNgIQDAELIANBADYCGAsgAyAEIAYgA0EQahCXASADKAIEIQQgAygCAARAIANBCGooAgAMAQsgASAFNgIAIAEgBDYCBEGBgICAeAs2AgQgACAENgIAIANBIGokAAvQAQEFfyMAQSBrIgMkACAAAn9BACACQQFqIgQgAkkNABogASgCACICQQF0IgUgBCAFIARLGyIEQQQgBEEESxsiBUEMbCEEIAVBq9Wq1QBJQQJ0IQYCQCACBEAgASgCBCEHIANBBDYCGCADIAJBDGw2AhQgAyAHNgIQDAELIANBADYCGAsgAyAEIAYgA0EQahCXASADKAIEIQQgAygCAARAIANBCGooAgAMAQsgASAFNgIAIAEgBDYCBEGBgICAeAs2AgQgACAENgIAIANBIGokAAvPAQEFfyMAQSBrIgMkACAAAn9BACACQQFqIgQgAkkNABogASgCACICQQF0IgUgBCAFIARLGyIEQQQgBEEESxsiBUEobCEEIAVBtObMGUlBA3QhBgJAIAIEQCABKAIEIQcgA0EINgIYIAMgAkEobDYCFCADIAc2AhAMAQsgA0EANgIYCyADIAQgBiADQRBqEJcBIAMoAgQhBCADKAIABEAgA0EIaigCAAwBCyABIAU2AgAgASAENgIEQYGAgIB4CzYCBCAAIAQ2AgAgA0EgaiQAC9ABAQV/IwBBIGsiAyQAIAACf0EAIAJBAWoiBCACSQ0AGiABKAIAIgJBAXQiBSAEIAUgBEsbIgRBBCAEQQRLGyIFQQJ0IQQgBUGAgICAAklBAnQhBgJAIAIEQCABKAIEIQcgA0EENgIYIAMgAkECdDYCFCADIAc2AhAMAQsgA0EANgIYCyADIAQgBiADQRBqEJcBIAMoAgQhBCADKAIABEAgA0EIaigCAAwBCyABIAU2AgAgASAENgIEQYGAgIB4CzYCBCAAIAQ2AgAgA0EgaiQAC8kBAQV/IwBBMGsiAiQAIAJBCGpBgAgQ3gEgAkEANgIYIAIgAikDCDcDECACQSBqIAEgAkEQahCDAQJAIAItACBBBkYEQCACKAIkIQUgAigCFCEEIAIgAigCGCIDEN4BIAIoAgAhBiACKAIEIAQgAxCiAyEEIAAgBTYCDCAAIAM2AgggACAENgIEIAAgBjYCAAwBCyACIAIpAyA3AyggAkEoahCpASEDIABBADYCBCAAIAM2AgALIAJBEGoQmgIgARC4ASACQTBqJAAL4AEBAn8jAEEgayICJAAgAiAANgIMIAIgASgCAEG85MAAQREgASgCBCgCDBEFADoAGCACIAE2AhQgAkEAOgAZIAJBADYCECACQRBqIAJBDGpBrOTAABBfIQACfyACLQAYIgEgACgCACIDRQ0AGiABQf8BcSEAQQEgAA0AGiACKAIUIQACQCADQQFHDQAgAi0AGUUNACAALQAYQQRxDQBBASAAKAIAQYjQwABBASAAKAIEKAIMEQUADQEaCyAAKAIAQcfOwABBASAAKAIEKAIMEQUACyACQSBqJABB/wFxQQBHC70BAgJ/AX4jAEEgayIDJAAgA0GACBDeASADQQA2AhAgAyADKQMANwMIIANBGGogASADQQhqQeyQwAAQVgJAAkACQAJ/IAMtABhBBkYEQCADKAIcDAELIAMpAxgiBUL/AYNCBlINASAFQiCIpwshASADKAIQIgQgAUkNAiADKAIMIAEgAhDqASAAQQY6AAAgACABNgIEDAELIAAgBTcCAAsgA0EIahCaAiADQSBqJAAPCyABIARB1JHAABCHAwALzAEBAn8jAEEgayIDJAACQAJAIAEgAmoiAiABSQ0AIAAoAgAiAUEBdCIEIAIgBCACSxsiAkEIIAJBCEsbIgJBf3NBH3YhBAJAIAEEQCADQQE2AhggAyABNgIUIAMgAEEEaigCADYCEAwBCyADQQA2AhgLIAMgAiAEIANBEGoQmAEgAygCBCEBIAMoAgBFBEAgACACNgIAIAAgATYCBAwCCyADQQhqKAIAIgBBgYCAgHhGDQEgAEUNACABIAAQmwMACxCYAgALIANBIGokAAvMAQECfyMAQSBrIgMkAAJAAkAgASACaiICIAFJDQAgACgCACIBQQF0IgQgAiAEIAJLGyICQQggAkEISxsiAkF/c0EfdiEEAkAgAQRAIANBATYCGCADIAE2AhQgAyAAQQRqKAIANgIQDAELIANB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AygCEEUEQCAAIAMpAwg3AgAgAyABKAIINgIADAELIAMpAwgiBUL/AYNCBFEEQCAAQZCNwAA2AgQgAEECNgIADAELIAAgBTcCAAsgAygCBCADKAIANgIIIANBIGokAA8LIAQgAkHcjMAAEIYDAAumAQEBfyMAQTBrIgMkACADQQQ6AAggAyABNgIQIANBKGogAkEQaikCADcDACADQSBqIAJBCGopAgA3AwAgAyACKQIANwMYAkAgA0EIakHQksAAIANBGGoQOgRAIAMtAAhBBEYEQCAAQfiSwAA2AgQgAEECNgIADAILIAAgAykDCDcCAAwBCyAAQQQ6AAAgAy0ACEEERg0AIANBCGoQiAILIANBMGokAAupAQEDfyMAQTBrIgIkACABKAIERQRAIAEoAgwhAyACQRBqIgRBADYCACACQoCAgIAQNwMIIAIgAkEIajYCFCACQShqIANBEGopAgA3AwAgAkEgaiADQQhqKQIANwMAIAIgAykCADcDGCACQRRqQdi+wAAgAkEYahA6GiABQQhqIAQoAgA2AgAgASACKQMINwIACyAAQdzGwAA2AgQgACABNgIAIAJBMGokAAudAQEBfyMAQUBqIgQkACAEIAI2AjggBCABNgI0IAQgAjYCMCAEQQhqIARBMGoQsQIgBEEgaiAEKAIIIAQoAgwQ5QIgBEE4aiIBIARBKGooAgA2AgAgBCAEKQMgNwMwIARBEGogBEEwaiADEFAgASAEQRhqKAIANgIAIAQgBCkDEDcDMCAEIARBMGoQsQIgACAEKQMANwMAIARBQGskAAusAQEDfyMAQSBrIgMkACADQgA3AwggA0EBOgAcIANBCGoQhgIiAiACKAIAQQFqIgQ2AgACQCAEBEAgAigCCA0BIAJBfzYCCCACQQxqIgQQiQIgAkEYakHQucAANgIAIAJBFGogAkEIajYCACACQRBqIAE2AgAgBCAANgIAIAJBADYCCCACEPQBIANBIGokAA8LAAtB4LbAAEEQIANBCGpB8LbAAEG8ucAAELQBAAubAQEBfyMAQUBqIgMkACADIAI2AjggAyABNgI0IAMgAjYCMCADQQhqIANBMGoQsQIgA0EgaiADKAIIIAMoAgwQ5QIgA0E4aiIBIANBKGooAgA2AgAgAyADKQMgNwMwIANBEGogA0EwahBSIAEgA0EYaigCADYC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QCAAEAALAkAgAS0AAEUNACABKAIEIgBBhAFJDQAgABAACyABQRBqJAALeQECfyMAQRBrIgQkACAEQQhqIAEQ8AECQCAEKAIMIANPBEAgBCgCCCEFAkAgA0EBRwRAIAIgBSADEKIDGgwBCyACIAUtAAA6AAALIABBBDoAACABIAEpAwAgA618NwMADAELIABCgoCAgICzgAg3AgALIARBEGokAAuHAQIBfwF+IwBBEGsiASQAQbDtwAApAwBQBEBBwO3AAAJ+AkAgAEUNACAAKQMAIABCADcDAEIBUg0AIAApAwghAiAAKQMQDAELIAFCAjcDCCABQgE3AwAgASkDACECIAEpAwgLNwMAQbjtwAAgAjcDAEGw7cAAQgE3AwALIAFBEGokAEG47cAAC4EBAQF/IwBBEGsiASQAIAFB8rLAAEEEEAE2AgggAUGIs8AAQQQQATYCDCABIAAgAUEIaiABQQxqEOIBIAEoAgwiAEGEAU8EQCAAEAALIAEoAggiAEGEAU8EQCAAEAALAkAgAS0AAEUNACABKAIEIgBBhAFJDQAgABAACyABQRBqJAALeQEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBFGpBAjYCACADQRxqQQI2AgAgA0EsakHwADYCACADQaDPwAA2AhAgA0EANgIIIANB8AA2AiQgAyADQSBqNgIYIAMgAzYCKCADIANBBGo2AiAgA0EIaiACEKgCAAt5AQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0EUakECNgIAIANBHGpBAjYCACADQSxqQfAANgIAIANB0NPAADYCECADQQA2AgggA0HwADYCJCADIANBIGo2AhggAyADQQRqNgIoIAMgAzYCICADQQhqIAIQqAIAC3kBAX8jAEEwayIDJAAgAyABNgIEIAMgADYCACADQRRqQQI2AgAgA0EcakECNgIAIANBLGpB8AA2AgAgA0Hw08AANgIQIANBADYCCCADQfAANgIkIAMgA0EgajYCGCADIANBBGo2AiggAyADNgIgIANBCGogAhCoAgALeQEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBFGpBAjYCACADQRxqQQI2AgAgA0EsakHwADYCACADQaTUwAA2AhAgA0EANgIIIANB8AA2AiQgAyADQSBqNgIYIAMgA0EEajYCKCADIAM2AiAgA0EIaiACEKgCAAt0AQR/IwBBEGsiASQAIAAoAggiAiAAKAIEIgNHBEAgAiADa0ECdkECdCECA0AgAygCACIEQYQBTwRAIAQQAAsgA0EEaiEDIAJBfGoiAg0ACwsgASAAKAIMNgIMIAEgACgCADYCCCABQQhqEJkCIAFBEGokAAtsAQF/IwBBMGsiAyQAIAMgATYCKCADIAA2AiQgAyABNgIgIANBCGogA0EgahCxAiADQRBqIAMoAgggAygCDBDlAiADQShqIANBGGooAgA2AgAgAyADKQMQNwMgIANBIGogAhDPASADQTBqJAALaQEBfyMAQTBrIgIkACACIAE2AiggAiAANgIkIAIgATYCICACQQhqIAJBIGoQsQIgAkEQaiACKAIIIAIoAgwQ5QIgAkEoaiACQRhqKAIANgIAIAIgAikDEDcDICACQSBqEGggAkEwaiQAC3IBA38jAEEgayICJAACf0EBIAAgARBbDQAaIAEoAgQhAyABKAIAIQQgAkEANgIcIAJBnM7AADYCGCACQQE2AhQgAkHMzsAANgIQIAJBADYCCEEBIAQgAyACQQhqEDoNABogAEEEaiABEFsLIAJBIGokAAt5AQF/AkACQCAARQ0AIAAoAgAhASAAQQA2AgAgACgCBCEAAkAgAQ4CAQIACyAAQYQBSQ0AIAAQAAsQVyEAC0H07MAAKAIAIQFB9OzAACAANgIAQfDswAAoAgBB8OzAAEEBNgIARSABQYQBSXJFBEAgARAAC0H07MAAC3wBA38gACAAEKoDIgBBCBDmAiAAayICEKgDIQBB7PDAACABIAJrIgE2AgBB9PDAACAANgIAIAAgAUEBcjYCBEEIQQgQ5gIhAkEUQQgQ5gIhA0EQQQgQ5gIhBCAAIAEQqAMgBCADIAJBCGtqajYCBEGA8cAAQYCAgAE2AgALcwAjAEEwayIBJABB2OzAAC0AAARAIAFBFGpBAjYCACABQRxqQQE2AgAgAUHoxcAANgIQIAFBADYCCCABQfAANgIkIAEgADYCLCABIAFBIGo2AhggASABQSxqNgIgIAFBCGpBkMbAABCoAgALIAFBMGokAAt2AQF/IAAtAAQhASAALQAFBEAgAUH/AXEhASAAAn9BASABDQAaIAAoAgAiAS0AGEEEcUUEQCABKAIAQYPQwABBAiABKAIEKAIMEQUADAELIAEoAgBBgtDAAEEBIAEoAgQoAgwRBQALIgE6AAQLIAFB/wFxQQBHC2oBAX8jAEEgayICJABBtOzAACgCAEUEQEHgj8AAQStBrJDAABD3AQALIAJBGGogAEEIaigCADYCACACIAApAgA3AxAgAkEIaiACQRBqIAEQVSACKAIIIQAgAigCDCACQSBqJABBgQEgABsLawECfyMAQSBrIgIkACACQQhqIAEoAgAQAgJAIAIoAggiAwRAIAIoAgwhASACIAM2AhQgAiABNgIYIAIgATYCECACIAJBEGoQsQIgACACKAIAIAIoAgQQ5QIMAQsgAEEANgIECyACQSBqJAALawECfyABQQRqKAIAIQMCQAJAAkAgAUEIaigCACIBRQRAQQEhAgwBCyABQX9MDQEgAUEBEPcCIgJFDQILIAIgAyABEKIDIQIgACABNgIIIAAgAjYCBCAAIAE2AgAPCxCYAgALIAFBARCbAwALWQEBfyMAQSBrIgIkACACIAAoAgA2AgQgAkEYaiABQRBqKQIANwMAIAJBEGogAUEIaikCADcDACACIAEpAgA3AwggAkEEakHIj8AAIAJBCGoQOiACQSBqJAALWQEBfyMAQSBrIgIkACACIAAoAgA2AgQgAkEYaiABQRBqKQIANwMAIAJBEGogAUEIaikCADcDACACIAEpAgA3AwggAkEEakGol8AAIAJBCGoQOiACQSBqJAALYQEDfyAAIAEQywIgACgCBCIEIAAoAggiAmohAwJAAkAgAUECTwRAIANBACABQX9qIgEQowMaIAQgASACaiICaiEDDAELIAFFDQELIANBADoAACACQQFqIQILIAAgAjYCCAtZAQF/IwBBIGsiAiQAIAIgACgCADYCBCACQRhqIAFBEGopAgA3AwAgAkEQaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQdi+wAAgAkEIahA6IAJBIGokAAtZAQF/IwBBIGsiAiQAIAIgACgCADYCBCACQRhqIAFBEGopAgA3AwAgAkEQaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQczMwAAgAkEIahA6IAJBIGokAAtZAQF/IwBBIGsiAiQAIAIgACgCADYCBCACQRhqIAFBEGopAgA3AwAgAkEQaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQZTSwAAgAkEIahA6IAJBIGokAAtTAQJ/IwBBIGsiAiQAIAAoAgQhAyAAKAIAIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAMgAkEIahA6IAJBIGokAAtWAQF/IwBBIGsiAiQAIAIgADYCBCACQRhqIAFBEGopAgA3AwAgAkEQaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQciPwAAgAkEIahA6IAJBIGokAAuTAQIBfwJ+IwBBEGsiASQAQZDswAAgADsBAEGI7MAAQgA3AwAgAUGMkMAAEOcBIAEpAwghAiABKQMAIQNBtOzAACgCAARAQajswAAoAgAEQBCcARCrAgsLQbTswABByJ3AADYCAEGo7MAAQgA3AwBBmOzAACADNwMAQaDswAAgAjcDAEGw7MAAQQA2AgAgAUEQaiQAC1YBAX8jAEEgayICJAAgAiAANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpBqJfAACACQQhqEDogAkEgaiQAC1YBAX8jAEEgayICJAAgAiAANgIEIAJBGGogAUEQaikCADcDACACQRBqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpBlNLAACACQQhqEDogAkEgaiQAC2YBAX8jAEFAaiIBJAAgAUEBOgAPIABBADYCCCAAQoCAgIAQNwIAIAFBEGogAEGMjsAAEL4CIAFBD2ogAUEQahCTAQRAQaSOwABBNyABQThqQdyOwABBuI/AABC0AQALIAFBQGskAAtIAQJ/AkAgAUUEQEEBIQIMAQsgAUEATgRAIAEgAUF/c0EfdiIDEPcCIgINASABIAMQmwMACxCYAgALIAAgAjYCBCAAIAE2AgALYgEBfyMAQSBrIgMkACAAKAIAIANBCGogASACEDAgAygCCARAIAMgAykCDDcDGEGIsMAAQSsgA0EYakG0sMAAQaCxwAAQtAEACyADKAIMIANBEGooAgAQlwIgA0EgaiQAQQALaQEDfyMAQRBrIgEkAAJAQQBBzLnAACgCABEGACICBEAgACgCACgCACIAIAAoAgBBAWoiAzYCACADRQ0BIAIgABC2ASABQRBqJAAPC0GiusAAQcYAIAFBCGpB6LrAAEHIu8AAELQBAAsAC1YBAn8CQCAAQQNwQQNzQQNwIgRFBEAMAQtBACEAA0AgACACRwRAIAAgAWpBPToAACAAQQFqIQNBASEAIAMgBEkNAQwCCwsgAiACQcigwAAQwwEACyADC1oBAX8jAEEQayIEJAAgASgCACACKAIAIAMoAgAQHiEBIARBCGoQvQIgAAJ/IAQoAghFBEAgACABQQBHOgABQQAMAQsgACAEKAIMNgIEQQELOgAAIARBEGokAAtUAQF/IwBBMGsiASQAIAFBEGpBkJDAAEEGEIUCIAFBKGogAUEYaigCADYCACABIAEpAxA3AyAgAUEIaiABQSBqELECIAAgASkDCDcDACABQTBqJAALWQECfyAAKAIMIgIgACgCACIDRgRAIAAQqwEgACgCDCECIAAoAgAhAwsgACgCBCAAKAIIIAJqIgJBACADIAIgA0kba0ECdGogATYCACAAIAAoAgxBAWo2AgwLRwECfwJAIAAoAgAiAkUNACACIABBFGooAgAiASAANQIQIAJBAWqtfqdqQX9qQQAgAWtxIgFqQQlqRQ0AIAAoAgwgAWsQKwsLYAECfyMAQRBrIgEkACABQeiCwABBFRCFAkEMQQQQ9wIiAkUEQEEMQQQQmwMACyACIAEpAwA3AgAgAkEIaiABQQhqKAIANgIAIABB4IDAADYCBCAAIAI2AgAgAUEQaiQAC2ECAX8BfiMAQRBrIgIkAEEAIAEoAgARBgAiAQRAIAEgASkDACIDQgF8NwMAIAAgASkDCDcDCCAAIAM3AwAgAkEQaiQADwtBsJTAAEHGACACQQhqQfiUwABB2JXAABC0AQALSgEBfyMAQSBrIgAkACAAQRRqQQE2AgAgAEEcakEANgIAIABB5MvAADYCECAAQcjLwAA2AhggAEEANgIIIABBCGpBvMzAABCoAgALTQEBfyMAQTBrIgEkACABQRBqEN0BIAFBKGogAUEYaigCADYCACABIAEpAxA3AyAgAUEIaiABQSBqELECIAAgASkDCDcDACABQTBqJAALZwEBfyMAQSBrIgMkACADIAI2AgwgA0EQaiICQYACOwEEIAJBBmpBADoAACACQf0FNgIAIANBEGogACABIANBDGoQJQRAQcCcwABBIiADQRhqQeyXwABBtJ3AABC0AQALIANBIGokAAtMAQJ/IAAoAggiAQRAIAAoAgQhACABQQR0IQEDQCAALQAAIgJBfmpBB0kgAkVyRQRAIABBBGoQmgILIABBEGohACABQXBqIgENAAsLC1YBAn8gASgCACECIAFBADYCAAJAIAIEQCABKAIEIQNBCEEEEPcCIgFFDQEgASADNgIEIAEgAjYCACAAQdiywAA2AgQgACABNgIADwsAC0EIQQQQmwMAC1IBA38jAEEQayIBJAAgAUEIahCPAhC0AiABKAIMIQICQCABKAIIRQRAQQEhAwwBCyACQYQBSQ0AIAIQAAsgACACNgIEIAAgAzYCACABQRBqJAALSwECfyMAQRBrIgEkACABIABBeGo2AgggAC0AFCAAQQE6ABQgASABQQhqNgIMQQFxRQRAIAFBDGoQ4AELIAFBCGoQtQEgAUEQaiQAC18BA38jAEEQayIBJAACQCAAKAIMIgIEQCAAKAIIIgNFDQEgASACNgIIIAEgADYCBCABIAM2AgAgARC2AgALQfC+wABBK0HMxsAAEPcBAAtB8L7AAEErQbzGwAAQ9wEAC1ACAn8CfiABQRBqKAIAIgIgASkDACIEIAKtIgUgBCAFVBunIgNJBEAgAyACQcyEwAAQhgMACyAAIAIgA2s2AgQgACABQQxqKAIAIANqNgIAC0gBA38jAEEQayICJAAgAiABNgIMQQEhASACQQxqKAIAEBJBAUYgAigCDCEDBEBBACEBCyAAIAM2AgQgACABNgIAIAJBEGokAAtIAQN/IwBBEGsiAiQAIAIgATYCDEEBIQEgAkEMaigCABALQQBHIAIoAgwhAwRAQQAhAQsgACADNgIEIAAgATYCACACQRBqJAALSgEBfyMAQRBrIgQkACABIAIgAygCABANIQEgBEEIahC9AiAAAn8gASAEKAIIIgFFDQAaIAQoAgwLNgIEIAAgATYCACAEQRBqJAALWAECfyMAQRBrIgEkACABIAA2AgRBAEHMucAAKAIAEQYAIgIEQCACIAAQtgEgAUEQaiQADwsgAUEEahC1AUGiusAAQcYAIAFBCGpB6LrAAEHIu8AAELQBAAtYAQF/IwBBIGsiACQAIABBDGpBATYCACAAQRRqQQE2AgAgAEGomMAANgIIIABBADYCACAAQQc2AhwgAEHIm8AANgIYIAAgAEEYajYCECAAQdCbwAAQqAIAC0YBAX8jAEEQayICJAAgASgCABAMIQEgAkEIahC9AiAAAn8gASACKAIIIgFFDQAaIAIoAgwLNgIEIAAgATYCACACQRBqJAALUgEBfyMAQSBrIgMkACADQQxqQQE2AgAgA0EUakEANgIAIANBnM7AADYCECADQQA2AgAgAyABNgIcIAMgADYCGCADIANBGGo2AgggAyACEKgCAAtTAQF/IwBBIGsiAiQAIAJBDGpBATYCACACQRRqQQE2AgAgAkHAz8AANgIIIAJBADYCACACQYQBNgIcIAIgADYCGCACIAJBGGo2AhAgAiABEKgCAAtDAQN/AkAgAkUNAANAIAAtAAAiBCABLQAAIgVGBEAgAEEBaiEAIAFBAWohASACQX9qIgINAQwCCwsgBCAFayEDCyADC0sBAX8jAEEQayICJAAgAkEIaiAAIAFBARCMAQJAIAIoAgwiAEGBgICAeEcEQCAARQ0BIAIoAgggABCbAwALIAJBEGokAA8LEJgCAAtIAQF/IwBBEGsiAiQAIAJBCGogACABEH8CQCACKAIMIgBBgYCAgHhHBEAgAEUNASACKAIIIAAQmwMACyACQRBqJAAPCxCYAgALSAEBfyMAQRBrIgIkACACQQhqIAAgARB8AkAgAigCDCIAQYGAgIB4RwRAIABFDQEgAigCCCAAEJsDAAsgAkEQaiQADwsQmAIAC0gBAX8jAEEQayICJAAgAkEIaiAAIAEQfQJAIAIoAgwiAEGBgICAeEcEQCAARQ0BIAIoAgggABCbAwALIAJBEGokAA8LEJgCAAtIAQF/IwBBEGsiAiQAIAJBCGogACABEH4CQCACKAIMIgBBgYCAgHhHBEAgAEUNASACKAIIIAAQmwMACyACQRBqJAAPCxCYAgALSwEBfyMAQRBrIgMkACADQQhqIAAgASACEIwBAkAgAygCDCIAQYGAgIB4RwRAIABFDQEgAygCCCAAEJsDAAsgA0EQaiQADwsQmAIAC00BAn8jAEEQayICJAAgACgCACEDIABBADYCACADRQRAQai3wABBHBCWAwALIAIgAzYCDCADQQhqQQAgARB6IAJBDGoQrwEgAkEQaiQAC00BAn8jAEEQayICJAAgACgCACEDIABBADYCACADRQRAQai3wABBHBCWAwALIAIgAzYCDCADQQhqQQEgARB6IAJBDGoQrwEgAkEQaiQAC0MBAn8jAEEQayIBJAAgASAAQXhqNgIIIAAtABQgAEEBOgAUIAEgAUEIajYCDEEBcUUEQCABQQxqEOABCyABQRBqJAALSQEBfyMAQRBrIgIkACACQQhqIAAgARCAAQJAIAIoAgwiAEGBgICAeEcEQCAARQ0BIAIoAgggABCbAwALIAJBEGokAA8LEJgCAAtOAQF/IwBBEGsiBCQAIAEoAgAgAigCACADKAIAEBkhASAEQQhqEL0CIAQoAgwhAiAAIAQoAggiAzYCACAAIAIgASADGzYCBCAEQRBqJAALSQEDfyMAQRBrIgMkACADQQhqIAIQ3gEgAygCCCEEIAAgAygCDCIFNgIEIAAgBDYCACAFIAEgAhCiAxogACACNgIIIANBEGokAAtQAQF/QSBBBBD3AiIBRQRAQSBBBBCbAwALIAFCgYCAgBA3AgAgASAAKQIANwIIIAFBEGogAEEIaikCADcCACABQRhqIABBEGopAgA3AgAgAQtKAQF/IwBBsAFrIgEkACABIABBqAEQogMiACAANgKsASAAQawBakGsgcAAEKcDIAAtAKABQQNGBEAgAEEIahCsAgsgAEGwAWokAAtFAQJ/IAAtAABBA0YEQCAAKAIEIgEoAgAgASgCBCgCABECACABKAIEIgIoAgQEQCACKAIIGiABKAIAECsLIAAoAgQQKwsLSAEBfyAAKAIAIgEEQCABIAAoAgQoAgARAgAgACgCBCIBKAIEBEAgASgCCBogACgCABArCyAAKAIIIABBDGooAgAoAgwRAgALC0gBAX8gACgCACIAKAIAIAAoAggiA2sgAkkEQCAAIAMgAhCEASAAKAIIIQMLIAAoAgQgA2ogASACEKIDGiAAIAIgA2o2AghBAAtIAQF/IAAoAgAiACgCACAAKAIIIgNrIAJJBEAgACADIAIQhQEgACgCCCEDCyAAKAIEIANqIAEgAhCiAxogACACIANqNgIIQQALPgECfyMAQRBrIgEkACABQQhqIABBCGooAgAiAjYCACABIAApAgA3AwAgASgCBCACEAEgARCaAiABQRBqJAALQQECfyAAKAIIIgEEQCAAKAIEIQAgAUECdCEBA0AgACgCACICQYQBTwRAIAIQAAsgAEEEaiEAIAFBfGoiAQ0ACwsLTwEBfyAAKAIAIgAgACgCAEF/aiIBNgIAAkAgAQ0AIABBDGoiARCVASABKAIABEAgASgCBBArCyAAIAAoAgRBf2oiATYCBCABDQAgABArCwtJAQJ/IwBBEGsiASQAQQBB2LvAACgCABEGACIABEAgACgCABADIAFBEGokAA8LQZm8wABBxgAgAUEIakHgvMAAQcC9wAAQtAEAC0cBAX8jAEGQAmsiASQAIAEgAEGIAhCiAyIAIAA2AowCIABBjAJqQcCBwAAQpwMgAC0AgAJBA0YEQCAAEJYCCyAAQZACaiQAC0YBAX8jAEGQAmsiBCQAIARBADoAiAIgBCADNgKEAiAEIAI2AoACIAQgATYC/AEgBCAANgL4ASAEQQhqEJACIARBkAJqJAALRAEBfyMAQRBrIgIkACAAKAIAIgBFBEBBqLfAAEEcEJYDAAsgAiAANgIMIABBCGpBASABEHogAkEMahCvASACQRBqJAALRAEBfyMAQRBrIgIkACAAKAIAIgBFBEBBqLfAAEEcEJYDAAsgAiAANgIMIABBCGpBACABEHogAkEMahCvASACQRBqJAALQwECfyMAQRBrIgMkACABIAIQHyEBIANBCGoQvQIgAygCDCECIAAgAygCCCIENgIAIAAgAiABIAQbNgIEIANBEGokAAtEAQN/IwBBEGsiAiQAIAEoAgAQICEBIAJBCGoQvQIgAigCDCEDIAAgAigCCCIENgIAIAAgAyABIAQbNgIEIAJBEGokAAtAAAJAAkACQCAALQDsAQ4EAAICAQILIABB1AFqEJoCIABB4AFqIgAQjQIgABCZAg8LIAAQxwIgAEGwAWoQmgILC0EBAX8gACgCACAAKAIIIgNrIAJJBEAgACADIAIQ/wEgACgCCCEDCyAAKAIEIANqIAEgAhCiAxogACACIANqNgIIC0oBAX8jAEEgayIAJAAgAEEUakEBNgIAIABBHGpBADYCACAAQZTNwAA2AhAgAEHkzMAANgIYIABBADYCCCAAQQhqQZzNwAAQqAIACzUBAX8jAEEQayIBJAAgASAAEKcCAkAgASgCCEUNACABKAIERQ0AIAEoAgAQKwsgAUEQaiQACzUBAX8jAEEQayIBJAAgASAAELMCAkAgASgCCEUNACABKAIERQ0AIAEoAgAQKwsgAUEQaiQACzkBAX8gACgCCCIBBEAgACgCBCIAIAFBGGxqIQEDQCAAEJoCIABBDGoQnQIgAEEYaiIAIAFHDQALCwtGAQJ/IAEoAgQhAiABKAIAIQNBCEEEEPcCIgFFBEBBCEEEEJsDAAsgASACNgIEIAEgAzYCACAAQezGwAA2AgQgACABNgIACzkBAn8gACgCCCIBBEAgACgCBCECIAFBDGwhAQNAIAIQmgIgAkEMaiECIAFBdGoiAQ0ACwsgABDKAgs7AQF/IwBBEGsiAiQAIAJBCGogACABEHMgAigCDCIAQYGAgIB4RwRAIAIoAgggABCbAwALIAJBEGokAAs8AQF/IwBBEGsiAiQAIAJBCGogACABEI8BIAIoAgwiAEGBgICAeEcEQCACKAIIIAAQmwMACyACQRBqJAALPwEBf0EMQQQQ9wIiAkUEQEEMQQQQmwMACyACQSU6AAggAkHggMAANgIEIAIgATYCACAAIAKtQiCGQgOENwIACzkBAX8gAUEQdkAAIQIgAEEANgIIIABBACABQYCAfHEgAkF/RiIBGzYCBCAAQQAgAkEQdCABGzYCAAs5AAJAAn8gAkGAgMQARwRAQQEgACACIAEoAhARAQANARoLIAMNAUEACw8LIAAgAyAEIAEoAgwRBQALRAEBf0EEQQQQ9wIiAkUEQEEEQQQQmwMACyACIAE2AgAgAkH0tMAAEJUDIQEgAEH0tMAANgIEIAAgAjYCACAAIAE2AggLLgEBf0HI7MAAKAIAIgAgAEEBaq1CGH6nIgBqQQlqBEBB1OzAACgCACAAaxArCws0AQF/IwBBsAFrIgIkACACQQA6AKgBIAIgATYCDCACIAA2AgggAkEIahCHAiACQbABaiQACzQBAX8gACgCCCIBBEAgACgCBCEAIAFBDGwhAQNAIAAQmgIgAEEMaiEAIAFBdGoiAQ0ACwsLNQEBfyABKAIAIgIEQCABKAIEIQEgAEEENgIIIAAgAkECdDYCBCAAIAE2AgAPCyAAQQA2AggLPwEBfyMAQSBrIgIkACACQQE6ABggAiABNgIUIAIgADYCECACQbDPwAA2AgwgAkGczsAANgIIIAJBCGoQ7wEACzcBAX8CQCAAKAIIEA5FDQAgACgCACIBIAAoAgQiACgCABECACAAKAIERQ0AIAAoAggaIAEQKwsLMwACQCAAQfz///8HSw0AIABFBEBBBA8LIAAgAEH9////B0lBAnQQ9wIiAEUNACAADwsACywBAX9BqOzAACgCACIAIABBBHRBEGoiAGpBCWoEQEG07MAAKAIAIABrECsLCzEAAkACfwJAAkAgAC0AkAEOBAADAwEDCyAAQYQBagwBCyAAEK4BIABB+ABqCxCaAgsLLwEBfyMAQRBrIgIkACACIAAoAgA2AgwgAkEMaiABEGogAkEMahCOAiACQRBqJAALLgEBfyAAKAIEBEAgAEEEahCOAiAAKAIAIgFBhAFPBEAgARAACyAAQQhqEKkCCwskACMAQRBrIgAkACAAQQhqIAEQvwIgAEEIahDOASAAQRBqJAALMwEBf0E0QQQQ9wIiAUUEQEE0QQQQmwMACyABQoGAgIAQNwIAIAFBCGogAEEsEKIDGiABCzIBAX8gACABKAIAIAEoAggiAksEfyABIAIQngIgASgCCAUgAgs2AgQgACABKAIENgIACzIBAX8gACABKAIAIAEoAggiAksEfyABIAIQnwIgASgCCAUgAgs2AgQgACABKAIENgIACy4BAX8gASgCACICBEAgAEEBNgIIIAAgAjYCBCAAIAEoAgQ2AgAPCyAAQQA2AggLIwEBfwJ/QQEgARAJRQ0AGkEACyECIAAgATYCBCAAIAI2AgALMAEBfyABQXhqIgIgAigCAEEBaiICNgIAIAJFBEAACyAAQdC5wAA2AgQgACABNgIACy0BAX8jAEEQayIBJAAgAUEIaiAAQQhqKAIANgIAIAEgACkCADcDACABEKwBAAskACAAKAIAQXBqIgAQmgIgAEEMaigCACIAQYQBTwRAIAAQAAsLMQEBf0EEQQQQ9wIiAkUEQEEEQQQQmwMACyACIAE2AgAgAEGAt8AANgIEIAAgAjYCAAsxAQF/QQRBBBD3AiICRQRAQQRBBBCbAwALIAIgATYCACAAQZS3wAA2AgQgACACNgIACycAIAAgACgCBEEBcSABckECcjYCBCAAIAFqIgAgACgCBEEBcjYCBAsmAQF/IwBBEGsiASQAIAEgAEF4ajYCDCABQQxqELUBIAFBEGokAAsmAAJAIABFDQAgACABKAIAEQIAIAEoAgRFDQAgASgCCBogABArCws6AQJ/QZDtwAAtAAAhAUGQ7cAAQQA6AABBlO3AACgCACECQZTtwABBADYCACAAIAI2AgQgACABNgIACzEAIABBAzoAICAAQoCAgICABDcCGCAAQQA2AhAgAEEANgIIIAAgAjYCBCAAIAE2AgALMgEBfyABKAIAQZu/wABBCyABKAIEKAIMEQUAIQIgAEEAOgAFIAAgAjoABCAAIAE2AgALIAEBfwJAIABBBGooAgAiAUUNACAAKAIARQ0AIAEQKwsLJgEBfyMAQRBrIgMkACADIAE2AgwgAyAANgIIIANBCGogAhD4AQALEwAgACABKQAANwABIABBADoAAAsmAQF/IABBB2oiASAASQRAQbCxwABBM0G0ssAAEIoDAAsgAUEDdgsjAAJAIAFB/P///wdNBEAgACABQQQgAhDoAiIADQELAAsgAAsjACACIAIoAgRBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAseACAAKAIAIgCtQgAgAKx9IABBf0oiABsgACABEFoLKgACQAJAAkAgAC0AqgEOBAACAgECCyAAQYABahC4AQ8LIABBCGoQrgELCyUAIABFBEBB57vAAEEyEJYDAAsgACACIAMgBCAFIAEoAhARCwALHQAgACgCACgCACABKAIMQQAgAmtBGGxqQWhqEEMLEQAgACgCAARAIAAoAgQQKwsLIAEBfyAAKAIAIAAoAggiAmsgAUkEQCAAIAIgARD/AQsLIwAgAEUEQEHnu8AAQTIQlgMACyAAIAIgAyAEIAEoAhARFAALIwAgAEUEQEHnu8AAQTIQlgMACyAAIAIgAyAEIAEoAhARBAALIwAgAEUEQEHnu8AAQTIQlgMACyAAIAIgAyAEIAEoAhARCgALIwAgAEUEQEHnu8AAQTIQlgMACyAAIAIgAyAEIAEoAhARFQALIwAgAEUEQEHnu8AAQTIQlgMACyAAIAIgAyAEIAEoAhARDgALFwAgASADRgR/IAAgAiABEPkBRQVBAAsLHgAgACABQQNyNgIEIAAgAWoiACAAKAIEQQFyNgIECyEAIABFBEBB57vAAEEyEJYDAAsgACACIAMgASgCEBEDAAsUACAAKAIABEAgAEEEaigCABArCwsaACAAKAIAKAIAIAEoAgwgAkEEdGtBcGoQQwsdACABKAIARQRAAAsgAEHYssAANgIEIAAgATYCAAsfACAARQRAQcC0wABBMhCWAwALIAAgAiABKAIQEQAACx8AIABFBEBB8LnAAEEyEJYDAAsgACACIAEoAhARAAALHwAgAEUEQEHnu8AAQTIQlgMACyAAIAIgASgCEBEBAAsXACAAKAIABEAgABCpAiAAQQxqEKkCCwsfAQF/IAAoAgQgACgCCBABIAAoAgAEQCAAKAIEECsLCx4BAX9B9OzAACEBQfDswAAoAgAEfyABBSAAEMsBCwsZAQF/IAAoAhAiAQR/IAEFIABBFGooAgALCxkAIAEgAiADEJcCIABBBDoAACAAIAM2AgQLFwAgAEEEaigCACAAQQhqKAIAIAEQnAMLEgBBAEEZIABBAXZrIABBH0YbCxYAIAAgAUEBcjYCBCAAIAFqIAE2AgALFgAgAEEEaigCACAAQQhqKAIAIAEQLwsTAEHI7MAAKAIABEAQmQEQpAILCxcAQeDswAAoAgBFBEAgABBvC0Hc7MAACxcAIAAgAjYCCCAAIAE2AgQgACACNgIACxAAIAAgAWpBf2pBACABa3ELEgAgAC0AAEEERwRAIAAQiAILCwwAIAAgASACIAMQLgsLACABBEAgABArCwsPACAAQQF0IgBBACAAa3ILGQAgASgCAEHUzsAAQQsgASgCBCgCDBEFAAsZACABKAIAQd/OwABBDiABKAIEKAIMEQUACxkAIAEoAgBB6OTAAEEFIAEoAgQoAgwRBQALEwAgACgCACgCCCABIAIQlwJBAAsSACABIAIgAxCXAiAAQQQ6AAALCgAgAEEIahCaAgsPACAAKAIABEAgABCvAQsLFAAgACgCACABIAAoAgQoAgwRAQALDwAgACABIAIgAyAEECkACw4AIAAoAgAgARBwGkEACxAAIAAoAgggASACEJcCQQALEAAgACgCACABIAIQlwJBAAsIACAAIAEQSQsRACAAKAIAIAAoAgQgARCcAwsQACAAIAI2AgQgACABNgIACxYAQZTtwAAgADYCAEGQ7cAAQQE6AAALEwAgAEHsxsAANgIEIAAgATYCAAsNACAALQAEQQJxQQF2Cw8AIAAgAUEEaikCADcDAAsQACABIAAoAgAgACgCBBAsCw0AIAAgASACEJcCQQALCgBBACAAayAAcQsLACAALQAEQQNxRQsMACAAIAFBA3I2AgQLDQAgACgCACAAKAIEagsNACAAKAIAIAEQWEEACw4AIAAoAgAaA0AMAAsACwwAIAAgASACEMQBAAsMACAAIAEgAhDFAQALDAAgACABIAIQxgEACw0AIAA1AgBBASABEFoLDAAgACABIAIQwQIACw0AIAAoAgAgASACEEcLDQAgACkDAEEBIAEQWgsNACAAMwEAQQEgARBaCw4AIAAoAgAtAAAgARBdCwsAIAAjAGokACMACwoAIAAgASACEDsLCwAgACACIAEQoQELBwAgABCaAgsNACABQeiVwABBAhAsCwsAIAAoAgAgARBKCwsAIAAgAUHdABAiCwkAIAAgARAhAAsKACAAKAIEQXhxCwoAIAAoAgRBAXELCgAgACgCDEEBcQsKACAAKAIMQQF2CxoAIAAgAUGY7cAAKAIAIgBB8QAgABsRAAAACwoAIAIgACABECwLDAAgACABKQIANwMACwwAIAAgASkCCDcDAAsLACAAKAIAIAEQWwsNACABQejSwABBAhAsCwoAIAAgASACEDULCgAgACABIAIQWQsLACAAIAEgAhCWAQsHACAAEMEBCwkAIABBBDoAAAsJACAAQQA2AgALCAAgACABEBoLBwAgACABagsHACAAIAFrCwcAIABBCGoLBwAgAEF4agsHACAAENoBCwcAIAAQjgILBABBAQsLAELys9u82+mRJQsNAELIteDPyobb04l/Cw0AQu/Fjf7k3bzN8wALDABCs7b38aLcov4ECwMAAQsDAAELC91rBABBgIDAAAu0VQEAAAAEAAAABAAAAAIAAAADAAAAAwAAAAEAAAAEAAAABAAAAAQAAAAFAAAABQAAAP//////////YHVud3JhcF90aHJvd2AgZmFpbGVkAAAACQAAAAwAAAAEAAAACgAAAAkAAAAMAAAABAAAAAsAAAAKAAAAUAAQAAwAAAANAAAADgAAAAwAAAAPAAAAEAAAAGABAAAIAAAAEQAAABIAAAAgAgAACAAAABMAAAAUAAAABAAAAAQAAAAVAAAAFgAAABQAAAAEAAAABAAAABcAAAAYAAAAL3Jvb3QvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvd2FzbS1iaW5kZ2VuLWZ1dHVyZXMtMC40LjM0L3NyYy9saWIucnPUABAAXAAAANoAAAAVAAAAYGFzeW5jIGZuYCByZXN1bWVkIGFmdGVyIGNvbXBsZXRpb24AGQAAAGZhaWxlZCB0byBmaWxsIGJ1ZmZlcmZhaWxlZCB0byBmaWxsIHdob2xlIGJ1ZmZlcn0BEAAbAAAAJQAAAC9ydXN0Yy9mYzU5NGYxNTY2OTY4MGZhNzBkMjU1ZmFlYzNjYTNmYjUwN2MzNDA1L2xpYnJhcnkvc3RkL3NyYy9pby9pbXBscy5ycwCkARAASwAAAPIAAAANAAAAL3J1c3RjL2ZjNTk0ZjE1NjY5NjgwZmE3MGQyNTVmYWVjM2NhM2ZiNTA3YzM0MDUvbGlicmFyeS9zdGQvc3JjL2lvL2N1cnNvci5ycwACEABMAAAA6wAAAAoAAAAvcnVzdGMvZmM1OTRmMTU2Njk2ODBmYTcwZDI1NWZhZWMzY2EzZmI1MDdjMzQwNS9saWJyYXJ5L3N0ZC9zcmMvaW8vcmVhZGJ1Zi5ycwAAAFwCEABNAAAAIQEAACsAAABjYWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZQAAFAAAAAAAAAABAAAAGgAAAC9yb290Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL2Jhc2U2NC0wLjEzLjEvc3JjL2NodW5rZWRfZW5jb2Rlci5ycwAAJAMQAFoAAAAtAAAAGgAAACQDEABaAAAANwAAAEQAAAAkAxAAWgAAADoAAAAnAAAAL3Jvb3QvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvYmFzZTY0LTAuMTMuMS9zcmMvZW5jb2RlLnJzAAAAsAMQAFEAAAC2AAAAIAAAALADEABRAAAAtwAAACUAAACwAxAAUQAAAPwAAAAcAAAAsAMQAFEAAAD9AAAAIQAAALADEABRAAAAEwEAAC4AAACwAxAAUQAAABMBAAAJAAAAsAMQAFEAAAAUAQAACQAAALADEABRAAAACwEAAC4AAACwAxAAUQAAAAsBAAAJAAAAsAMQAFEAAAANAQAADwAAALADEABRAAAADAEAAAkAAACwAxAAUQAAAA8BAAAJAAAAsAMQAFEAAACgAAAAKgAAAHVzZHBsLWZyb250L3NyYy9jb25uZWN0aW9uLnJzAAAA1AQQAB0AAAAZAAAAJgAAAFBPU1RodHRwOi8vdXNkcGwuOi91c2RwbC9jYWxsAAAACAUQAAwAAAAUBRAAAQAAABUFEAABAAAAFgUQAAsAAABsb2NhbGhvc3QAAABEBRAACQAAANQEEAAdAAAALQAAACQAAADUBBAAHQAAADQAAAAnAAAA1AQQAB0AAABJAAAAJgAAAEV4cGVjdGVkIGNhbGwgcmVzcG9uc2UgbWVzc2FnZSwgZ290IHNvbWV0aGluZyBlbHNldXNkcGwtZnJvbnQvc3JjL2xpYi5yc7oFEAAWAAAAcAAAAE4AAAC6BRAAFgAAAG8AAAABAAAAugUQABYAAACfAAAAJgAAALoFEAAWAAAAngAAAAEAAAAvcnVzdGMvZmM1OTRmMTU2Njk2ODBmYTcwZDI1NWZhZWMzY2EzZmI1MDdjMzQwNS9saWJyYXJ5L3N0ZC9zcmMvaW8vbW9kLnJzAAAAEAYQAEkAAABTAQAAGAAAAHN0cmVhbSBkaWQgbm90IGNvbnRhaW4gdmFsaWQgVVRGLTgAAGwGEAAiAAAAFQAAABAGEABJAAAAhwEAABsAAAAvcnVzdGMvZmM1OTRmMTU2Njk2ODBmYTcwZDI1NWZhZWMzY2EzZmI1MDdjMzQwNS9saWJyYXJ5L3N0ZC9zcmMvaW8vcmVhZGJ1Zi5ycwAAAKwGEABNAAAAywAAADYAAAAbAAAADAAAAAQAAAAcAAAAHQAAAB4AAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5AB8AAAAAAAAAAQAAACAAAAAvcnVzdGMvZmM1OTRmMTU2Njk2ODBmYTcwZDI1NWZhZWMzY2EzZmI1MDdjMzQwNS9saWJyYXJ5L2FsbG9jL3NyYy9zdHJpbmcucnMAbAcQAEsAAADoCQAACQAAAB8AAAAEAAAABAAAACEAAAAiAAAAIwAAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWUAJAAAADAuMTAuMHVzZHBsLWZyb250L3NyYy9saWIucnMWCBAAFgAAAGEAAAAYAAAAFggQABYAAABpAAAAGAAAABYIEAAWAAAAwwAAAEAAAAAWCBAAFgAAANEAAABAAAAAJQAAAAwAAAAEAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC9jYXlsb24vc3JjL3VzZHBsX2Zyb250L3VzZHBsLXJzL3VzZHBsLWNvcmUvc3JjL3NlcmRlcy90cmFpdHMucnOUCBAAQAAAAHYAAAAcAAAALQAAABgAAAAIAAAALgAAAC8AAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAABgdW53cmFwX3Rocm93YCBmYWlsZWRmYWlsZWQgdG8gd3JpdGUgd2hvbGUgYnVmZmVyAAAAJQkQABwAAAAXAAAANgAAAAwAAAAEAAAANwAAADgAAAA5AAAAZm9ybWF0dGVyIGVycm9yAGgJEAAPAAAAKAAAAC9ydXN0Yy9mYzU5NGYxNTY2OTY4MGZhNzBkMjU1ZmFlYzNjYTNmYjUwN2MzNDA1L2xpYnJhcnkvc3RkL3NyYy9pby9tb2QucnMAAACECRAASQAAACQFAAAWAAAAhAkQAEkAAAAoBQAADQAAAGFkdmFuY2luZyBpbyBzbGljZXMgYmV5b25kIHRoZWlyIGxlbmd0aADwCRAAJwAAAIQJEABJAAAAJgUAAA0AAABjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uAAA6AAAAAAAAAAEAAAA7AAAAL3J1c3RjL2ZjNTk0ZjE1NjY5NjgwZmE3MGQyNTVmYWVjM2NhM2ZiNTA3YzM0MDUvbGlicmFyeS9zdGQvc3JjL3RocmVhZC9sb2NhbC5ycwCIChAATwAAAKYBAAAJAAAAKCkAACUAAAAMAAAABAAAADwAAAA9AAAAHgAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkAOgAAAAAAAAABAAAAIAAAAC9ydXN0Yy9mYzU5NGYxNTY2OTY4MGZhNzBkMjU1ZmFlYzNjYTNmYjUwN2MzNDA1L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwBMCxAASwAAAOgJAAAJAAAAOgAAAAQAAAAEAAAAPgAAAD8AAABAAAAAY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZQA6AAAAAAAAAAEAAABBAAAAaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZTogAAD8CxAAKgAAAC9yb290Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL2Jhc2U2NC0wLjEzLjEvc3JjL2RlY29kZS5ycwAAADAMEABRAAAA2QEAAB8AAAAwDBAAUQAAAN8BAAAfAAAAMAwQAFEAAADoAQAAHwAAADAMEABRAAAA8QEAAB8AAAAwDBAAUQAAAPoBAAAfAAAAMAwQAFEAAAADAgAAHwAAADAMEABRAAAADAIAAB8AAAAwDBAAUQAAABUCAAAfAAAAMAwQAFEAAAAKAQAAJAAAADAMEABRAAAACwEAACkAAAAwDBAAUQAAADEBAAAWAAAAMAwQAFEAAAA0AQAAGgAAADAMEABRAAAASAEAAA4AAAAwDBAAUQAAAEsBAAASAAAAMAwQAFEAAABfAQAAEwAAAEltcG9zc2libGU6IG11c3Qgb25seSBoYXZlIDAgdG8gOCBpbnB1dCBieXRlcyBpbiBsYXN0IGNodW5rLCB3aXRoIG5vIGludmFsaWQgbGVuZ3Roc3QNEABUAAAAMAwQAFEAAACkAQAADgAAADAMEABRAAAAuAEAAAkAAABPdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIG91dHB1dCBidWZmZXIgbGVuZ3RoAAAwDBAAUQAAAJ0AAAAKAAAAMAwQAFEAAACiAAAAIQAAAFdyaXRpbmcgdG8gYSBTdHJpbmcgc2hvdWxkbid0IGZhaWwvcm9vdC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9iYXNlNjQtMC4xMy4xL3NyYy9lbmNvZGUucnMAYg4QAFEAAABTAAAADgAAAAAAAAD//////////3VzZHBsLWZyb250L3NyYy9jb252ZXJ0LnJzAADQDhAAGgAAACAAAAAnAAAAY3JhbmtzaGFmdAAA/A4QAAoAAABkZWNreQAAABAPEAAFAAAAYW55ACAPEAADAAAATG9hZEVycm9yOiBJbygpACwPEAAOAAAAOg8QAAEAAABMb2FkRXJyb3I6IEludmFsaWREYXRhAABMDxAAFgAAAExvYWRFcnJvcjogVG9vU21hbGxCdWZmZXIAAABsDxAAGQAAAER1bXBFcnJvcjogSW8oAACQDxAADgAAADoPEAABAAAARHVtcEVycm9yOiBVbnN1cHBvcnRlZAAAsA8QABYAAABEdW1wRXJyb3I6IFRvb1NtYWxsQnVmZmVyAAAA0A8QABkAAAAvcm9vdC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy9iYXNlNjQtMC4xMy4xL3NyYy9lbmNvZGUucnMAAAD0DxAAUQAAADsBAAAJAAAAISIjJCUmJygpKissLTAxMjM0NTY3ODlAQUJDREVGR0hJSktMTU5QUVJTVFVWWFlaW2BhYmNkZWhpamtsbXBxckFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5KywuL0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Li8wMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsv////////////////////////////////////////////AAECAwQFBgcICQoLDP//DQ4PEBESExQVFv///////xcYGRobHB0eHyAhIiMkJf8mJygpKiss/y0uLzD/////MTIzNDU2//83ODk6Ozz//z0+P/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8+P////zQ1Njc4OTo7PD3/////////AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBn///////8aGxwdHh8gISIjJCUmJygpKissLS4vMDEyM///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAE2Nzg5Ojs8PT4//////////wIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRob////////HB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDX//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wABAgMEBQYHCAkKC/////////8MDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJf///////yYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////z7//zQ1Njc4OTo7PD3/////////AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBn/////P/8aGxwdHh8gISIjJCUmJygpKissLS4vMDEyM///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Pv///z80NTY3ODk6Ozw9/////////wABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZ////////GhscHR4fICEiIyQlJicoKSorLC0uLzAxMjP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////mBEQAFgREAAYERAA2BAQAJgQEABYEBAA2BYQANgVEADYFBAA2BMQANgSEADYERAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZQBDAAAACAAAAAQAAABEAAAAL3Jvb3QvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvYmFzZTY0LTAuMTMuMS9zcmMvY2h1bmtlZF9lbmNvZGVyLnJzAABEGBAAWgAAAGgAAAAwAAAAT3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBudW1iZXIgb2YgY2h1bmtzIGluIGlucHV0L3Jvb3QvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9naXRodWIuY29tLTFlY2M2Mjk5ZGI5ZWM4MjMvYmFzZTY0LTAuMTMuMS9zcmMvZGVjb2RlLnJz4xgQAFEAAADDAAAACgAAAEUAAAAIAAAABAAAAEYAAABHAAAARQAAAAgAAAAEAAAASAAAAGJvZHltZXRob2Rtb2Rlc2FtZS1vcmlnaW5uby1jb3JzY29yc25hdmlnYXRlYXR0ZW1wdGVkIHRvIGNvbnZlcnQgaW52YWxpZCBSZXF1ZXN0TW9kZSBpbnRvIEpTVmFsdWUvcm9vdC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy93ZWItc3lzLTAuMy42MS9zcmMvZmVhdHVyZXMvZ2VuX1JlcXVlc3RNb2RlLnJzAAAAyRkQAGQAAAADAAAAAQAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkAABMAAAABAAAAAQAAABNAAAATgAAAGFscmVhZHkgYm9ycm93ZWRPAAAAAAAAAAEAAABQAAAAYWxyZWFkeSBtdXRhYmx5IGJvcnJvd2VkTwAAAAAAAAABAAAAUQAAAC9yb290Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3dhc20tYmluZGdlbi1mdXR1cmVzLTAuNC4zNC9zcmMvcXVldWUucnMAANAaEABeAAAAGgAAAC4AAADQGhAAXgAAAB0AAAApAAAA0BoQAF4AAAAyAAAAGgAAAGFscmVhZHkgYm9ycm93ZWRSAAAAAAAAAAEAAABQAAAAUwAAAAQAAAAEAAAAVAAAAFUAAABTAAAABAAAAAQAAABWAAAAVwAAAEZuT25jZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Uvcm9vdC8uY2FyZ28vcmVnaXN0cnkvc3JjL2dpdGh1Yi5jb20tMWVjYzYyOTlkYjllYzgyMy93YXNtLWJpbmRnZW4tZnV0dXJlcy0wLjQuMzQvc3JjL2xpYi5yc8QbEABcAAAApQAAAA8AAADEGxAAXAAAAIUAAAAnAAAAxBsQAFwAAACvAAAAJAAAAC9yb290Ly5jYXJnby9yZWdpc3RyeS9zcmMvZ2l0aHViLmNvbS0xZWNjNjI5OWRiOWVjODIzL3dhc20tYmluZGdlbi1mdXR1cmVzLTAuNC4zNC9zcmMvdGFzay9zaW5nbGV0aHJlYWQucnMAAFAcEABqAAAAIQAAABUAAABYAAAAWQAAAFoAAABbAAAAXAAAAFAcEABqAAAAVQAAACUAAABjbG9zdXJlIGludm9rZWQgcmVjdXJzaXZlbHkgb3IgYWZ0ZXIgYmVpbmcgZHJvcHBlZGNhbm5vdCBhY2Nlc3MgYSBUaHJlYWQgTG9jYWwgU3RvcmFnZSB2YWx1ZSBkdXJpbmcgb3IgYWZ0ZXIgZGVzdHJ1Y3Rpb25eAAAAAAAAAAEAAAA7AAAAL3J1c3RjL2ZjNTk0ZjE1NjY5NjgwZmE3MGQyNTVmYWVjM2NhM2ZiNTA3YzM0MDUvbGlicmFyeS9zdGQvc3JjL3RocmVhZC9sb2NhbC5ycwB4HRAATwAAAKYBAAAJAAAAXwAAAHJldHVybiB0aGlzY2xvc3VyZSBpbnZva2VkIHJlY3Vyc2l2ZWx5IG9yIGFmdGVyIGJlaW5nIGRyb3BwZWRjYW5ub3QgYWNjZXNzIGEgVGhyZWFkIExvY2FsIFN0b3JhZ2UgdmFsdWUgZHVyaW5nIG9yIGFmdGVyIGRlc3RydWN0aW9uAGwAAAAAAAAAAQAAADsAAAAvcnVzdGMvZmM1OTRmMTU2Njk2ODBmYTcwZDI1NWZhZWMzY2EzZmI1MDdjMzQwNS9saWJyYXJ5L3N0ZC9zcmMvdGhyZWFkL2xvY2FsLnJzAHAeEABPAAAApgEAAAkAAABUcmllZCB0byBzaHJpbmsgdG8gYSBsYXJnZXIgY2FwYWNpdHnQHhAAJAAAAC9ydXN0Yy9mYzU5NGYxNTY2OTY4MGZhNzBkMjU1ZmFlYzNjYTNmYjUwN2MzNDA1L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnP8HhAATAAAAKoBAAAJAAAAcgAAAAQAAAAEAAAAcwAAAHQAAAB1AAAAY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZUFjY2Vzc0Vycm9yAABwHxAAAAAAAHVuY2F0ZWdvcml6ZWQgZXJyb3JvdGhlciBlcnJvcm91dCBvZiBtZW1vcnl1bmV4cGVjdGVkIGVuZCBvZiBmaWxldW5zdXBwb3J0ZWRvcGVyYXRpb24gaW50ZXJydXB0ZWRhcmd1bWVudCBsaXN0IHRvbyBsb25naW52YWxpZCBmaWxlbmFtZXRvbyBtYW55IGxpbmtzY3Jvc3MtZGV2aWNlIGxpbmsgb3IgcmVuYW1lZGVhZGxvY2tleGVjdXRhYmxlIGZpbGUgYnVzeXJlc291cmNlIGJ1c3lmaWxlIHRvbyBsYXJnZWZpbGVzeXN0ZW0gcXVvdGEgZXhjZWVkZWRzZWVrIG9uIHVuc2Vla2FibGUgZmlsZW5vIHN0b3JhZ2Ugc3BhY2V3cml0ZSB6ZXJvdGltZWQgb3V0aW52YWxpZCBkYXRhaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzdGFsZSBuZXR3b3JrIGZpbGUgaGFuZGxlZmlsZXN5c3RlbSBsb29wIG9yIGluZGlyZWN0aW9uIGxpbWl0IChlLmcuIHN5bWxpbmsgbG9vcCly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CzAVEAFlBwIGAgIBBCMBHhtbCzoJCQEYBAEJAQMBBSsDPAgqGAEgNwEBAQQIBAEDBwoCHQE6AQEBAgQIAQkBCgIaAQICOQEEAgQCAgMDAR4CAwELAjkBBAUBAgQBFAIWBgEBOgEBAgEECAEHAwoCHgE7AQEBDAEJASgBAwE3AQEDBQMBBAcCCwIdAToBAgECAQMBBQIHAgsCHAI5AgEBAgQIAQkBCgIdAUgBBAECAwEBCAFRAQIHDAhiAQIJCwdJAhsBAQEBATcOAQUBAgULASQJAWYEAQYBAgICGQIEAxAEDQECAgYBDwEAAwADHQIeAh4CQAIBBwgBAgsJAS0DAQF1AiIBdgMEAgkBBgPbAgIBOgEBBwEBAQECCAYKAgEwHzEEMAcBAQUBKAkMAiAEAgIBAzgBAQIDAQEDOggCApgDAQ0BBwQBBgEDAsZAAAHDIQADjQFgIAAGaQIABAEKIAJQAgABAwEEARkCBQGXAhoSDQEmCBkLLgMwAQIEAgInAUMGAgICAgwBCAEvATMBAQMCAgUCAQEqAggB7gECAQQBAAEAEBAQAAIAAeIBlQUAAwECBQQoAwQBpQIABAACUANGCzEEewE2DykBAgIKAzEEAgIHAT0DJAUBCD4BDAI0CQoEAgFfAwIBAQIGAQIBnQEDCBUCOQIBAQEBFgEOBwMFwwgCAwEBFwFRAQIGAQECAQECAQLrAQIEBgIBAhsCVQgCAQECagEBAQIGAQFlAwIEAQUACQEC9QEKAgEBBAGQBAICBAEgCigGAgQIAQkGAgMuDQECAAcBBgEBUhYCBwECAQJ6BgMBAQIBBwEBSAIDAQEBAAILAjQFBQEBAQABBg8ABTsHAAE/BFEBAAIALgIXAAEBAwQFCAgCBx4ElAMANwQyCAEOARYFAQ8ABwERAgcBAgEFZAGgBwABPQQABAAHbQcAYIDwAAAEMhAAKAAAAD8BAAAJAEGQ7MAACwJpegBHCXByb2R1Y2VycwEMcHJvY2Vzc2VkLWJ5AgZ3YWxydXMGMC4xOS4wDHdhc20tYmluZGdlbhIwLjIuODQgKGNlYThjYzNkMik="; - -function asciiToBinary(str) { - if (typeof atob === 'function') { - return atob(str) - } else { - return new Buffer(str, 'base64').toString('binary'); - } -} - -function decode() { - var binaryString = asciiToBinary(encoded); - var bytes = new Uint8Array(binaryString.length); - for (var i = 0; i < binaryString.length; i++) { - bytes[i] = binaryString.charCodeAt(i); - } - return (async function() {return new Response(bytes.buffer);})(); -} - -export function init_embedded() { - return init(decode()) -} diff --git a/src/usdpl/usdpl_front_bg.wasm b/src/usdpl/usdpl_front_bg.wasm deleted file mode 100644 index 625d6423066b30e151f5b5991577de4ce2c17d65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92609 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∨kB$(&OVb*E$+^Eci!|!?D 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 z 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