diff --git a/.gitignore b/.gitignore
index 7945583..b2d9cea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,4 +11,6 @@ buf.gen.yaml
# Ignore 'target' directory in any subdirectory
target/
-# Ignore '.spkg' files in any subdirectory
\ No newline at end of file
+# Ignore '.spkg' files in any subdirectory
+utils/convert
+/utils/wasm_bytes.js
diff --git a/dex-trades-wasm-only/Cargo.lock b/dex-trades-wasm-only/Cargo.lock
new file mode 100644
index 0000000..686534a
--- /dev/null
+++ b/dex-trades-wasm-only/Cargo.lock
@@ -0,0 +1,948 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ahash"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bigdecimal"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa"
+dependencies = [
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "borsh"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b"
+dependencies = [
+ "borsh-derive",
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "borsh-derive"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7"
+dependencies = [
+ "borsh-derive-internal",
+ "borsh-schema-derive-internal",
+ "proc-macro-crate 0.1.5",
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-derive-internal"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-schema-derive-internal"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bs58"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3"
+
+[[package]]
+name = "bs58"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hex-literal"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.2",
+]
+
+[[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.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "js-sys"
+version = "0.3.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
+dependencies = [
+ "once_cell",
+ "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.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "num-bigint"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "683751d591e6d81200c39fb0d1032608b77724f34114db54f571ff1317b337c0"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c11e44798ad209ccdd91fc192f0526a369a01234f7373e1b141c96d7cee4f0e"
+dependencies = [
+ "proc-macro-crate 2.0.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "pad"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[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 = "proc-macro-crate"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
+dependencies = [
+ "toml",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
+dependencies = [
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+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",
+ "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-types"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
+dependencies = [
+ "prost",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "rustix"
+version = "0.38.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "serde"
+version = "1.0.190"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.190"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "substreams"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af972e374502cdfc9998132f5343848d1c58f27a295dc061a89804371f408a46"
+dependencies = [
+ "anyhow",
+ "bigdecimal",
+ "hex",
+ "hex-literal",
+ "num-bigint",
+ "num-traits",
+ "pad",
+ "prost",
+ "prost-build",
+ "prost-types",
+ "substreams-macro",
+ "thiserror",
+]
+
+[[package]]
+name = "substreams-macro"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6521ccd011a4c3f52cd3c31fc7400733e4feba2094e0e0e6354adca25b2b3f37"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "thiserror",
+]
+
+[[package]]
+name = "substreams-solana"
+version = "0.11.1"
+source = "git+https://github.com/streamingfast/substreams-solana?branch=master#1f66cc3081f61ad1189dc814cb82096ae5ac4b3b"
+dependencies = [
+ "anyhow",
+ "num_enum",
+ "substreams",
+ "substreams-solana-core",
+ "substreams-solana-macro",
+]
+
+[[package]]
+name = "substreams-solana-core"
+version = "0.11.1"
+source = "git+https://github.com/streamingfast/substreams-solana?branch=master#1f66cc3081f61ad1189dc814cb82096ae5ac4b3b"
+dependencies = [
+ "bs58 0.4.0",
+ "prost",
+ "prost-build",
+ "prost-types",
+]
+
+[[package]]
+name = "substreams-solana-macro"
+version = "0.11.1"
+source = "git+https://github.com/streamingfast/substreams-solana?branch=master#1f66cc3081f61ad1189dc814cb82096ae5ac4b3b"
+dependencies = [
+ "bs58 0.4.0",
+]
+
+[[package]]
+name = "substreams-solana-program-instructions"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2d2eac3fee28a079bd3af5573bb6d43cf9667d89ce577fc7dd40113bb31e9e1"
+dependencies = [
+ "anyhow",
+ "num_enum",
+ "substreams",
+]
+
+[[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.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tl-solana-dex-trades"
+version = "1.0.0"
+dependencies = [
+ "borsh",
+ "bs58 0.5.0",
+ "bytes",
+ "chrono",
+ "num-bigint",
+ "prost",
+ "serde",
+ "serde-wasm-bindgen",
+ "serde_json",
+ "substreams",
+ "substreams-solana",
+ "substreams-solana-program-instructions",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+
+[[package]]
+name = "toml_edit"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
+dependencies = [
+ "indexmap",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "serde",
+ "serde_json",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
+dependencies = [
+ "bumpalo",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+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_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "winnow"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.7.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
diff --git a/dex-trades-wasm-only/Cargo.toml b/dex-trades-wasm-only/Cargo.toml
new file mode 100644
index 0000000..3e59afb
--- /dev/null
+++ b/dex-trades-wasm-only/Cargo.toml
@@ -0,0 +1,28 @@
+[package]
+name = "tl-solana-dex-trades"
+version = "1.0.0"
+edition = "2021"
+
+[lib]
+name = "dex_trades"
+crate-type = ["cdylib"]
+
+[dependencies]
+substreams = "^0.5.0"
+substreams-solana = { git = "https://github.com/streamingfast/substreams-solana", branch = "master" }
+substreams-solana-program-instructions = "0.1"
+bytes = "1.1.0"
+prost = "0.11"
+num-bigint = "0.4"
+bs58 = "0.5.0"
+borsh = { version = "0.10.3"}
+chrono = { version = "0.4", features = [ "std" ], default-features = false }
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+wasm-bindgen = { version = "0.2", features = ["serde-serialize"] }
+serde-wasm-bindgen = "0.5"
+
+[profile.release]
+lto = true
+opt-level = 's'
+strip = "debuginfo"
\ No newline at end of file
diff --git a/dex-trades-wasm-only/Makefile b/dex-trades-wasm-only/Makefile
new file mode 100644
index 0000000..0c00b2e
--- /dev/null
+++ b/dex-trades-wasm-only/Makefile
@@ -0,0 +1,22 @@
+ENDPOINT ?= mainnet.sol.streamingfast.io:443
+
+.PHONY: build
+build:
+ LDFLAGS="-Wl,-no_compact_unwind" cargo build --target wasm32-unknown-unknown --release
+
+.PHONY: protogen
+protogen:
+ substreams protogen ./substreams.yaml --exclude-paths="sf/substreams,google"
+
+.PHONY: package
+package:
+ substreams pack ./substreams.yaml
+
+.PHONY wasm_pack:
+wasm_pack:
+ wasm-pack build --no-typescript --target no-modules
+
+.PHONY convert_and_gcloud_upload:
+convert_and_gcloud_upload:
+ go build utils/convert.go && mv convert utils/convert
+ utils/script.sh dex_trades
diff --git a/dex-trades-wasm-only/index.html b/dex-trades-wasm-only/index.html
new file mode 100644
index 0000000..65bb482
--- /dev/null
+++ b/dex-trades-wasm-only/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+ hello-wasm example
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dex-trades-wasm-only/src/dapps/dapp_27haf8L6oxUeXrHrgEgsexjSY5hbVUWEmvv9Nyxg8vQv.rs b/dex-trades-wasm-only/src/dapps/dapp_27haf8L6oxUeXrHrgEgsexjSY5hbVUWEmvv9Nyxg8vQv.rs
new file mode 100644
index 0000000..02d8d47
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_27haf8L6oxUeXrHrgEgsexjSY5hbVUWEmvv9Nyxg8vQv.rs
@@ -0,0 +1,62 @@
+use crate::pb::sf::solana::transactions::v1::TokenBalance;
+use crate::trade_instruction::TradeInstruction;
+use crate::utils::get_mint;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ input_accounts: Vec,
+ post_token_balances: &Vec,
+ accounts: &Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 9 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("27haf8L6oxUeXrHrgEgsexjSY5hbVUWEmvv9Nyxg8vQv"),
+ name: String::from("SwapBaseIn"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: get_vault_a(&input_accounts, post_token_balances, accounts),
+ vault_b: get_vault_b(&input_accounts, post_token_balances, accounts),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
+
+fn get_vault_a(
+ input_accounts: &Vec,
+ post_token_balances: &Vec,
+ accounts: &Vec,
+) -> String {
+ let mut vault_a = input_accounts.get(4).unwrap().to_string();
+ let mint_a = get_mint(&vault_a, post_token_balances, accounts, "".to_string());
+
+ if mint_a.is_empty() {
+ vault_a = input_accounts.get(5).unwrap().to_string();
+ }
+
+ return vault_a;
+}
+
+fn get_vault_b(
+ input_accounts: &Vec,
+ post_token_balances: &Vec,
+ accounts: &Vec,
+) -> String {
+ let vault_a = input_accounts.get(4).unwrap().to_string();
+ let mint_a = get_mint(&vault_a, post_token_balances, accounts, "".to_string());
+ let mut vault_b = input_accounts.get(5).unwrap().to_string();
+
+ if mint_a.is_empty() {
+ vault_b = input_accounts.get(6).unwrap().to_string();
+ }
+
+ return vault_b;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_2KehYt3KsEQR53jYcxjbQp2d2kCp4AkuQW68atufRwSr.rs b/dex-trades-wasm-only/src/dapps/dapp_2KehYt3KsEQR53jYcxjbQp2d2kCp4AkuQW68atufRwSr.rs
new file mode 100644
index 0000000..e23ac1e
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_2KehYt3KsEQR53jYcxjbQp2d2kCp4AkuQW68atufRwSr.rs
@@ -0,0 +1,31 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_FUND_TOKENS_DISCRIMINATOR: u64 =
+ u64::from_le_bytes([112, 246, 21, 136, 172, 62, 27, 20]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_FUND_TOKENS_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("2KehYt3KsEQR53jYcxjbQp2d2kCp4AkuQW68atufRwSr"),
+ name: String::from("SwapFundTokens"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: accounts.get(3).unwrap().to_string(),
+ vault_b: accounts.get(5).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_2wT8Yq49kHgDzXuPxZSaeLaH1qbmGXtEyPy64bL7aD3c.rs b/dex-trades-wasm-only/src/dapps/dapp_2wT8Yq49kHgDzXuPxZSaeLaH1qbmGXtEyPy64bL7aD3c.rs
new file mode 100644
index 0000000..6d73aaf
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_2wT8Yq49kHgDzXuPxZSaeLaH1qbmGXtEyPy64bL7aD3c.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("2wT8Yq49kHgDzXuPxZSaeLaH1qbmGXtEyPy64bL7aD3c"),
+ name: String::from("Swap"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: accounts.get(5).unwrap().to_string(),
+ vault_b: accounts.get(6).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8.rs b/dex-trades-wasm-only/src/dapps/dapp_675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8.rs
new file mode 100644
index 0000000..c173c13
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8.rs
@@ -0,0 +1,83 @@
+use crate::pb::sf::solana::transactions::v1::TokenBalance;
+use crate::trade_instruction::TradeInstruction;
+
+use crate::utils::get_mint;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ input_accounts: Vec,
+ post_token_balances: &Vec,
+ accounts: &Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 9 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
+ name: String::from("SwapBaseIn"),
+ amm: input_accounts.get(1).unwrap().to_string(),
+ vault_a: get_vault_a(&input_accounts, post_token_balances, accounts),
+ vault_b: get_vault_b(&input_accounts, post_token_balances, accounts),
+ ..Default::default()
+ });
+ }
+ 11 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),
+ name: String::from("SwapBaseOut"),
+ amm: input_accounts.get(1).unwrap().to_string(),
+ vault_a: get_vault_a(&input_accounts, post_token_balances, accounts),
+ vault_b: get_vault_b(&input_accounts, post_token_balances, accounts),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
+
+fn get_vault_a(
+ input_accounts: &Vec,
+ post_token_balances: &Vec,
+ accounts: &Vec,
+) -> String {
+ let mut vault_a = input_accounts.get(4).unwrap().to_string();
+ let mint_a = get_mint(&vault_a, post_token_balances, accounts, "".to_string());
+
+ if mint_a.is_empty() {
+ vault_a = input_accounts.get(5).unwrap().to_string();
+ }
+
+ return vault_a;
+}
+
+fn get_vault_b(
+ input_accounts: &Vec,
+ post_token_balances: &Vec,
+ accounts: &Vec,
+) -> String {
+ let mut vault_a_index = 4;
+
+ let mut vault_a = input_accounts.get(4).unwrap().to_string();
+ let mint_a = get_mint(&vault_a, post_token_balances, accounts, "".to_string());
+
+ if mint_a.is_empty() {
+ vault_a_index += 1;
+ vault_a = input_accounts.get(vault_a_index).unwrap().to_string();
+ }
+
+ let mut vault_b_index = vault_a_index + 1;
+ let mut vault_b = input_accounts.get(vault_b_index).unwrap().to_string();
+
+ if vault_a == vault_b {
+ vault_b_index += 1;
+ vault_b = input_accounts.get(vault_b_index).unwrap().to_string();
+ }
+
+ return vault_b;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P.rs b/dex-trades-wasm-only/src/dapps/dapp_6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P.rs
new file mode 100644
index 0000000..2843e30
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P.rs
@@ -0,0 +1,41 @@
+use crate::trade_instruction::TradeInstruction;
+
+const BUY_DISCRIMINATOR: u64 = u64::from_le_bytes([102, 6, 61, 18, 1, 218, 235, 234]);
+const SELL_DISCRIMINATOR: u64 = u64::from_le_bytes([51, 230, 133, 164, 1, 127, 131, 173]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ BUY_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"),
+ name: String::from("Buy"),
+ amm: accounts.get(3).unwrap().to_string(),
+ vault_a: accounts.get(3).unwrap().to_string(),
+ vault_b: accounts.get(4).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ SELL_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"),
+ name: String::from("Sell"),
+ amm: accounts.get(3).unwrap().to_string(),
+ vault_a: accounts.get(3).unwrap().to_string(),
+ vault_b: accounts.get(4).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_6MLxLqiXaaSUpkgMnWDTuejNZEz3kE7k2woyHGVFw319.rs b/dex-trades-wasm-only/src/dapps/dapp_6MLxLqiXaaSUpkgMnWDTuejNZEz3kE7k2woyHGVFw319.rs
new file mode 100644
index 0000000..2117715
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_6MLxLqiXaaSUpkgMnWDTuejNZEz3kE7k2woyHGVFw319.rs
@@ -0,0 +1,27 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 1 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("6MLxLqiXaaSUpkgMnWDTuejNZEz3kE7k2woyHGVFw319"),
+ name: String::from("Swap"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(5).unwrap().to_string(),
+ vault_b: accounts.get(6).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_7WduLbRfYhTJktjLw5FDEyrqoEv61aTTCuGAetgLjzN5.rs b/dex-trades-wasm-only/src/dapps/dapp_7WduLbRfYhTJktjLw5FDEyrqoEv61aTTCuGAetgLjzN5.rs
new file mode 100644
index 0000000..42b1737
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_7WduLbRfYhTJktjLw5FDEyrqoEv61aTTCuGAetgLjzN5.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("7WduLbRfYhTJktjLw5FDEyrqoEv61aTTCuGAetgLjzN5"),
+ name: String::from("Swap"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(5).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP.rs b/dex-trades-wasm-only/src/dapps/dapp_9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP.rs
new file mode 100644
index 0000000..58e25fd
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP.rs
@@ -0,0 +1,27 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 1 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP"),
+ name: String::from("Swap"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(5).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_9tKE7Mbmj4mxDjWatikzGAtkoWosiiZX9y6J4Hfm2R8H.rs b/dex-trades-wasm-only/src/dapps/dapp_9tKE7Mbmj4mxDjWatikzGAtkoWosiiZX9y6J4Hfm2R8H.rs
new file mode 100644
index 0000000..5261572
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_9tKE7Mbmj4mxDjWatikzGAtkoWosiiZX9y6J4Hfm2R8H.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("9tKE7Mbmj4mxDjWatikzGAtkoWosiiZX9y6J4Hfm2R8H"),
+ name: String::from("Swap"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(5).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin.rs b/dex-trades-wasm-only/src/dapps/dapp_9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin.rs
new file mode 100644
index 0000000..2be1304
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin.rs
@@ -0,0 +1,28 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(2);
+ let disc_bytes_arr: [u8; 2] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u16 = u16::from_be_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ 5 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),
+ name: String::from("SettleFunds"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(3).unwrap().to_string(),
+ vault_b: accounts.get(4).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_AMM55ShdkoGRB5jVYPjWziwk8m5MpwyDgsMWHaMSQWH6.rs b/dex-trades-wasm-only/src/dapps/dapp_AMM55ShdkoGRB5jVYPjWziwk8m5MpwyDgsMWHaMSQWH6.rs
new file mode 100644
index 0000000..100a022
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_AMM55ShdkoGRB5jVYPjWziwk8m5MpwyDgsMWHaMSQWH6.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("AMM55ShdkoGRB5jVYPjWziwk8m5MpwyDgsMWHaMSQWH6"),
+ name: String::from("Swap"),
+ amm: accounts.get(2).unwrap().to_string(),
+ vault_a: accounts.get(3).unwrap().to_string(),
+ vault_b: accounts.get(4).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_BSwp6bEBihVLdqJRKGgzjcGLHkcTuzmSo1TQkHepzH8p.rs b/dex-trades-wasm-only/src/dapps/dapp_BSwp6bEBihVLdqJRKGgzjcGLHkcTuzmSo1TQkHepzH8p.rs
new file mode 100644
index 0000000..df8d608
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_BSwp6bEBihVLdqJRKGgzjcGLHkcTuzmSo1TQkHepzH8p.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("BSwp6bEBihVLdqJRKGgzjcGLHkcTuzmSo1TQkHepzH8p"),
+ name: String::from("Swap"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(5).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK.rs b/dex-trades-wasm-only/src/dapps/dapp_CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK.rs
new file mode 100644
index 0000000..ea97daa
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK.rs
@@ -0,0 +1,41 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+const SWAP_V2_DISCRIMINATOR: u64 = u64::from_le_bytes([43, 4, 237, 11, 26, 201, 30, 98]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),
+ name: String::from("Swap"),
+ amm: accounts.get(2).unwrap().to_string(),
+ vault_a: accounts.get(5).unwrap().to_string(),
+ vault_b: accounts.get(6).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ SWAP_V2_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),
+ name: String::from("SwapV2"),
+ amm: accounts.get(2).unwrap().to_string(),
+ vault_a: accounts.get(5).unwrap().to_string(),
+ vault_b: accounts.get(6).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_CLMM9tUoggJu2wagPkkqs9eFG4BWhVBZWkP1qv3Sp7tR.rs b/dex-trades-wasm-only/src/dapps/dapp_CLMM9tUoggJu2wagPkkqs9eFG4BWhVBZWkP1qv3Sp7tR.rs
new file mode 100644
index 0000000..7bb69f1
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_CLMM9tUoggJu2wagPkkqs9eFG4BWhVBZWkP1qv3Sp7tR.rs
@@ -0,0 +1,31 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_WITH_PARTNER_DISCRIMINATOR: u64 =
+ u64::from_le_bytes([133, 215, 191, 214, 102, 243, 55, 25]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_WITH_PARTNER_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("CLMM9tUoggJu2wagPkkqs9eFG4BWhVBZWkP1qv3Sp7tR"),
+ name: String::from("SwapWithPartner"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: accounts.get(6).unwrap().to_string(),
+ vault_b: accounts.get(7).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C.rs b/dex-trades-wasm-only/src/dapps/dapp_CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C.rs
new file mode 100644
index 0000000..f635174
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C.rs
@@ -0,0 +1,43 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_BASE_INPUT_PARTNER_DISCRIMINATOR: u64 =
+ u64::from_le_bytes([143, 190, 90, 218, 196, 30, 51, 222]);
+const SWAP_BASE_OUTPUT_PARTNER_DISCRIMINATOR: u64 =
+ u64::from_le_bytes([55, 217, 98, 86, 163, 74, 180, 173]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_BASE_INPUT_PARTNER_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),
+ name: String::from("SwapBaseInput"),
+ amm: accounts.get(3).unwrap().to_string(),
+ vault_a: accounts.get(6).unwrap().to_string(),
+ vault_b: accounts.get(7).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ SWAP_BASE_OUTPUT_PARTNER_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),
+ name: String::from("SwapBaseOutput"),
+ amm: accounts.get(3).unwrap().to_string(),
+ vault_a: accounts.get(6).unwrap().to_string(),
+ vault_b: accounts.get(7).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_CTMAxxk34HjKWxQ3QLZK1HpaLXmBveao3ESePXbiyfzh.rs b/dex-trades-wasm-only/src/dapps/dapp_CTMAxxk34HjKWxQ3QLZK1HpaLXmBveao3ESePXbiyfzh.rs
new file mode 100644
index 0000000..2eef0af
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_CTMAxxk34HjKWxQ3QLZK1HpaLXmBveao3ESePXbiyfzh.rs
@@ -0,0 +1,27 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 1 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("CTMAxxk34HjKWxQ3QLZK1HpaLXmBveao3ESePXbiyfzh"),
+ name: String::from("Swap"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: accounts.get(5).unwrap().to_string(),
+ vault_b: accounts.get(6).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_CURVGoZn8zycx6FXwwevgBTB2gVvdbGTEpvMJDbgs2t4.rs b/dex-trades-wasm-only/src/dapps/dapp_CURVGoZn8zycx6FXwwevgBTB2gVvdbGTEpvMJDbgs2t4.rs
new file mode 100644
index 0000000..e7c2f35
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_CURVGoZn8zycx6FXwwevgBTB2gVvdbGTEpvMJDbgs2t4.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("CURVGoZn8zycx6FXwwevgBTB2gVvdbGTEpvMJDbgs2t4"),
+ name: String::from("Swap"),
+ amm: accounts.get(2).unwrap().to_string(),
+ vault_a: accounts.get(3).unwrap().to_string(),
+ vault_b: accounts.get(4).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_D3BBjqUdCYuP18fNvvMbPAZ8DpcRi4io2EsYHQawJDag.rs b/dex-trades-wasm-only/src/dapps/dapp_D3BBjqUdCYuP18fNvvMbPAZ8DpcRi4io2EsYHQawJDag.rs
new file mode 100644
index 0000000..d0572c1
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_D3BBjqUdCYuP18fNvvMbPAZ8DpcRi4io2EsYHQawJDag.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("D3BBjqUdCYuP18fNvvMbPAZ8DpcRi4io2EsYHQawJDag"),
+ name: String::from("Swap"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: accounts.get(5).unwrap().to_string(),
+ vault_b: accounts.get(8).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_DEXYosS6oEGvk8uCDayvwEZz4qEyDJRf9nFgYCaqPMTm.rs b/dex-trades-wasm-only/src/dapps/dapp_DEXYosS6oEGvk8uCDayvwEZz4qEyDJRf9nFgYCaqPMTm.rs
new file mode 100644
index 0000000..58df40e
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_DEXYosS6oEGvk8uCDayvwEZz4qEyDJRf9nFgYCaqPMTm.rs
@@ -0,0 +1,31 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_EXACT_AMOUNT_IN_DISCRIMINATOR: u64 =
+ u64::from_le_bytes([8, 151, 245, 76, 172, 203, 144, 39]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_EXACT_AMOUNT_IN_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("DEXYosS6oEGvk8uCDayvwEZz4qEyDJRf9nFgYCaqPMTm"),
+ name: String::from("SwapExactAmountIn"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: accounts.get(3).unwrap().to_string(),
+ vault_b: accounts.get(4).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1.rs b/dex-trades-wasm-only/src/dapps/dapp_DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1.rs
new file mode 100644
index 0000000..7da1481
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1.rs
@@ -0,0 +1,27 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 1 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1"),
+ name: String::from("Swap"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(5).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_Dooar9JkhdZ7J3LHN3A7YCuoGRUggXhQaG4kijfLGU2j.rs b/dex-trades-wasm-only/src/dapps/dapp_Dooar9JkhdZ7J3LHN3A7YCuoGRUggXhQaG4kijfLGU2j.rs
new file mode 100644
index 0000000..800c880
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_Dooar9JkhdZ7J3LHN3A7YCuoGRUggXhQaG4kijfLGU2j.rs
@@ -0,0 +1,27 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 1 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("Dooar9JkhdZ7J3LHN3A7YCuoGRUggXhQaG4kijfLGU2j"),
+ name: String::from("Swap"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(5).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_EewxydAPCCVuNEyrVN68PuSYdQ7wKn27V9Gjeoi8dy3S.rs b/dex-trades-wasm-only/src/dapps/dapp_EewxydAPCCVuNEyrVN68PuSYdQ7wKn27V9Gjeoi8dy3S.rs
new file mode 100644
index 0000000..0de6579
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_EewxydAPCCVuNEyrVN68PuSYdQ7wKn27V9Gjeoi8dy3S.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("EewxydAPCCVuNEyrVN68PuSYdQ7wKn27V9Gjeoi8dy3S"),
+ name: String::from("Swap"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: accounts.get(5).unwrap().to_string(),
+ vault_b: accounts.get(6).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB.rs b/dex-trades-wasm-only/src/dapps/dapp_Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB.rs
new file mode 100644
index 0000000..f4b5cdd
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB.rs
@@ -0,0 +1,31 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_WITH_PARTNER_DISCRIMINATOR: u64 =
+ u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_WITH_PARTNER_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB"),
+ name: String::from("Swap"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(5).unwrap().to_string(),
+ vault_b: accounts.get(6).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_FLUXubRmkEi2q6K3Y9kBPg9248ggaZVsoSFhtJHSrm1X.rs b/dex-trades-wasm-only/src/dapps/dapp_FLUXubRmkEi2q6K3Y9kBPg9248ggaZVsoSFhtJHSrm1X.rs
new file mode 100644
index 0000000..fa2cd15
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_FLUXubRmkEi2q6K3Y9kBPg9248ggaZVsoSFhtJHSrm1X.rs
@@ -0,0 +1,27 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 1 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("FLUXubRmkEi2q6K3Y9kBPg9248ggaZVsoSFhtJHSrm1X"),
+ name: String::from("Swap"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(5).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_GFXsSL5sSaDfNFQUYsHekbWBW1TsFdjDYzACh62tEHxn.rs b/dex-trades-wasm-only/src/dapps/dapp_GFXsSL5sSaDfNFQUYsHekbWBW1TsFdjDYzACh62tEHxn.rs
new file mode 100644
index 0000000..6abe4a1
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_GFXsSL5sSaDfNFQUYsHekbWBW1TsFdjDYzACh62tEHxn.rs
@@ -0,0 +1,116 @@
+use crate::{
+ pb::sf::solana::transactions::v1::InnerInstruction, trade_instruction::TradeInstruction,
+};
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+fn parse_vault_a(
+ user_ata_in: String,
+ input_accounts: &Vec,
+ accounts: &Vec,
+ inner_instructions: &Vec,
+) -> String {
+ let mut result: String = String::new();
+
+ inner_instructions.iter().for_each(|inner_instruction| {
+ let inner_program = inner_instruction.executing_account.clone();
+ if inner_program
+ .as_str()
+ .eq("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")
+ {
+ let b58_data = bs58::decode(inner_instruction.data.clone())
+ .into_vec()
+ .unwrap();
+ let (discriminator_bytes, rest) = b58_data.split_at(1);
+ let discriminator: u8 = u8::from(discriminator_bytes[0]);
+ match discriminator {
+ 3 => {
+ let _source = input_accounts.get(0).unwrap().to_string();
+ let _destination = input_accounts.get(1).unwrap().to_string();
+
+ if user_ata_in.as_str().eq(_source.as_str()) {
+ if result.is_empty() {
+ result = _destination;
+ }
+ }
+ }
+ _ => {}
+ }
+ }
+ });
+ result
+}
+
+fn parse_vault_b(
+ user_ata_out: String,
+ input_accounts: &Vec,
+ accounts: &Vec,
+ inner_instructions: &Vec,
+) -> String {
+ let mut result: String = String::new();
+
+ inner_instructions.iter().for_each(|inner_instruction| {
+ let inner_program = inner_instruction.executing_account.clone();
+ if inner_program
+ .as_str()
+ .eq("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")
+ {
+ let b58_data = bs58::decode(inner_instruction.data.clone())
+ .into_vec()
+ .unwrap();
+ let (discriminator_bytes, rest) = b58_data.split_at(1);
+ let discriminator: u8 = u8::from(discriminator_bytes[0]);
+ match discriminator {
+ 3 => {
+ let _source = input_accounts.get(0).unwrap().to_string();
+ let _destination = input_accounts.get(1).unwrap().to_string();
+
+ if user_ata_out.as_str().eq(_destination.as_str()) {
+ if result.is_empty() {
+ result = _source;
+ }
+ }
+ }
+ _ => {}
+ }
+ }
+ });
+ result
+}
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ input_accounts: Vec,
+ inner_instructions: &Vec,
+ accounts: &Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ let user_ata_in = input_accounts.get(5).unwrap().to_string();
+ let user_ata_out = input_accounts.get(6).unwrap().to_string();
+
+ let vault_a: String =
+ parse_vault_a(user_ata_in, &input_accounts, &accounts, inner_instructions);
+ let vault_b: String =
+ parse_vault_b(user_ata_out, &input_accounts, &accounts, inner_instructions);
+
+ result = Some(TradeInstruction {
+ dapp_address: String::from("GFXsSL5sSaDfNFQUYsHekbWBW1TsFdjDYzACh62tEHxn"),
+ name: String::from("Swap"),
+ amm: input_accounts.get(0).unwrap().to_string(),
+ vault_a: vault_a,
+ vault_b: vault_b,
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt.rs b/dex-trades-wasm-only/src/dapps/dapp_H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt.rs
new file mode 100644
index 0000000..77fc778
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt"),
+ name: String::from("Swap"),
+ amm: accounts.get(2).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(6).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt.rs b/dex-trades-wasm-only/src/dapps/dapp_HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt.rs
new file mode 100644
index 0000000..1993f89
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ input_accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt"),
+ name: String::from("Swap"),
+ amm: input_accounts.get(1).unwrap().to_string(),
+ vault_a: input_accounts.get(5).unwrap().to_string(),
+ vault_b: input_accounts.get(6).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo.rs b/dex-trades-wasm-only/src/dapps/dapp_LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo.rs
new file mode 100644
index 0000000..07e0c5a
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo.rs
@@ -0,0 +1,53 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+const SWAP_EXACT_OUT_DISCRIMINATOR: u64 = u64::from_le_bytes([250, 73, 101, 33, 38, 207, 75, 184]);
+const SWAP_WITH_PRICE_IMPACT_DISCRIMINATOR: u64 =
+ u64::from_le_bytes([56, 173, 230, 208, 173, 228, 156, 205]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ input_accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"),
+ name: String::from("Swap"),
+ amm: input_accounts.get(0).unwrap().to_string(),
+ vault_a: input_accounts.get(2).unwrap().to_string(),
+ vault_b: input_accounts.get(3).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ SWAP_EXACT_OUT_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"),
+ name: String::from("SwapExactOut"),
+ amm: input_accounts.get(0).unwrap().to_string(),
+ vault_a: input_accounts.get(2).unwrap().to_string(),
+ vault_b: input_accounts.get(3).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ SWAP_WITH_PRICE_IMPACT_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"),
+ name: String::from("SwapWithPriceImpact"),
+ amm: input_accounts.get(0).unwrap().to_string(),
+ vault_a: input_accounts.get(2).unwrap().to_string(),
+ vault_b: input_accounts.get(3).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_PSwapMdSai8tjrEXcxFeQth87xC4rRsa4VA5mhGhXkP.rs b/dex-trades-wasm-only/src/dapps/dapp_PSwapMdSai8tjrEXcxFeQth87xC4rRsa4VA5mhGhXkP.rs
new file mode 100644
index 0000000..2fbf52c
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_PSwapMdSai8tjrEXcxFeQth87xC4rRsa4VA5mhGhXkP.rs
@@ -0,0 +1,27 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 1 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("PSwapMdSai8tjrEXcxFeQth87xC4rRsa4VA5mhGhXkP"),
+ name: String::from("Swap"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(5).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY.rs b/dex-trades-wasm-only/src/dapps/dapp_PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY.rs
new file mode 100644
index 0000000..3ce092f
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY.rs
@@ -0,0 +1,27 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 0 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY"),
+ name: String::from("Swap"),
+ amm: accounts.get(2).unwrap().to_string(),
+ vault_a: accounts.get(6).unwrap().to_string(),
+ vault_b: accounts.get(7).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_SCHAtsf8mbjyjiv4LkhLKutTf6JnZAbdJKFkXQNMFHZ.rs b/dex-trades-wasm-only/src/dapps/dapp_SCHAtsf8mbjyjiv4LkhLKutTf6JnZAbdJKFkXQNMFHZ.rs
new file mode 100644
index 0000000..78b1ac6
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_SCHAtsf8mbjyjiv4LkhLKutTf6JnZAbdJKFkXQNMFHZ.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("SCHAtsf8mbjyjiv4LkhLKutTf6JnZAbdJKFkXQNMFHZ"),
+ name: String::from("Swap"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(7).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_SSwapUtytfBdBn1b9NUGG6foMVPtcWgpRU32HToDUZr.rs b/dex-trades-wasm-only/src/dapps/dapp_SSwapUtytfBdBn1b9NUGG6foMVPtcWgpRU32HToDUZr.rs
new file mode 100644
index 0000000..84b74cd
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_SSwapUtytfBdBn1b9NUGG6foMVPtcWgpRU32HToDUZr.rs
@@ -0,0 +1,27 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 1 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("SSwapUtytfBdBn1b9NUGG6foMVPtcWgpRU32HToDUZr"),
+ name: String::from("Swap"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(5).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_SSwpMgqNDsyV7mAgN9ady4bDVu5ySjmmXejXvy2vLt1.rs b/dex-trades-wasm-only/src/dapps/dapp_SSwpMgqNDsyV7mAgN9ady4bDVu5ySjmmXejXvy2vLt1.rs
new file mode 100644
index 0000000..6f6410c
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_SSwpMgqNDsyV7mAgN9ady4bDVu5ySjmmXejXvy2vLt1.rs
@@ -0,0 +1,27 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 1 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("SSwpMgqNDsyV7mAgN9ady4bDVu5ySjmmXejXvy2vLt1"),
+ name: String::from("Swap"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(5).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ.rs b/dex-trades-wasm-only/src/dapps/dapp_SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ.rs
new file mode 100644
index 0000000..db868c9
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ.rs
@@ -0,0 +1,27 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let discriminator: u8 = u8::from(disc_bytes[0]);
+
+ let mut result = None;
+
+ match discriminator {
+ 1 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ"),
+ name: String::from("Swap"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(5).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_SoLFiHG9TfgtdUXUjWAxi3LtvYuFyDLVhBWxdMZxyCe.rs b/dex-trades-wasm-only/src/dapps/dapp_SoLFiHG9TfgtdUXUjWAxi3LtvYuFyDLVhBWxdMZxyCe.rs
new file mode 100644
index 0000000..54c1a44
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_SoLFiHG9TfgtdUXUjWAxi3LtvYuFyDLVhBWxdMZxyCe.rs
@@ -0,0 +1,34 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u8 = 7;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let mut result = None;
+
+ if bytes_stream.len() < 8 {
+ return result;
+ }
+
+ let (disc_bytes, rest) = bytes_stream.split_at(1);
+ let disc_bytes_arr: [u8; 1] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u8 = u8::from_le_bytes(disc_bytes_arr);
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("SoLFiHG9TfgtdUXUjWAxi3LtvYuFyDLVhBWxdMZxyCe"),
+ name: String::from("Swap"),
+ amm: accounts.get(1).unwrap().to_string(),
+ vault_a: accounts.get(2).unwrap().to_string(),
+ vault_b: accounts.get(3).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_cysPXAjehMpVKUapzbMCCnpFxUFFryEWEaLgnb9NrR8.rs b/dex-trades-wasm-only/src/dapps/dapp_cysPXAjehMpVKUapzbMCCnpFxUFFryEWEaLgnb9NrR8.rs
new file mode 100644
index 0000000..fee2d7d
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_cysPXAjehMpVKUapzbMCCnpFxUFFryEWEaLgnb9NrR8.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([23, 113, 90, 161, 237, 143, 153, 13]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("cysPXAjehMpVKUapzbMCCnpFxUFFryEWEaLgnb9NrR8"),
+ name: String::from("ExactInputSingle"),
+ amm: accounts.get(2).unwrap().to_string(),
+ vault_a: accounts.get(5).unwrap().to_string(),
+ vault_b: accounts.get(6).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_dp2waEWSBy5yKmq65ergoU3G6qRLmqa6K7We4rZSKph.rs b/dex-trades-wasm-only/src/dapps/dapp_dp2waEWSBy5yKmq65ergoU3G6qRLmqa6K7We4rZSKph.rs
new file mode 100644
index 0000000..dac9f2d
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_dp2waEWSBy5yKmq65ergoU3G6qRLmqa6K7We4rZSKph.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const CREATE_ORDER_DISCRIMINATOR: u64 = u64::from_le_bytes([141, 54, 37, 207, 237, 210, 250, 215]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ CREATE_ORDER_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("dp2waEWSBy5yKmq65ergoU3G6qRLmqa6K7We4rZSKph"),
+ name: String::from("CreateOrder"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(7).unwrap().to_string(),
+ vault_b: accounts.get(8).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_obriQD1zbpyLz95G5n7nJe6a4DPjpFwa5XYPoNm113y.rs b/dex-trades-wasm-only/src/dapps/dapp_obriQD1zbpyLz95G5n7nJe6a4DPjpFwa5XYPoNm113y.rs
new file mode 100644
index 0000000..de3d02e
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_obriQD1zbpyLz95G5n7nJe6a4DPjpFwa5XYPoNm113y.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("obriQD1zbpyLz95G5n7nJe6a4DPjpFwa5XYPoNm113y"),
+ name: String::from("Swap"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(3).unwrap().to_string(),
+ vault_b: accounts.get(4).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb.rs b/dex-trades-wasm-only/src/dapps/dapp_opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb.rs
new file mode 100644
index 0000000..2d94be4
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const PLACE_TAKE_ORDER_DISCRIMINATOR: u64 = u64::from_le_bytes([3, 44, 71, 3, 26, 199, 203, 85]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ PLACE_TAKE_ORDER_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb"),
+ name: String::from("PlaceTakeOrder"),
+ amm: accounts.get(2).unwrap().to_string(),
+ vault_a: accounts.get(6).unwrap().to_string(),
+ vault_b: accounts.get(7).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX.rs b/dex-trades-wasm-only/src/dapps/dapp_srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX.rs
new file mode 100644
index 0000000..336af4d
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX.rs
@@ -0,0 +1,28 @@
+use crate::trade_instruction::TradeInstruction;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(2);
+ let disc_bytes_arr: [u8; 2] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u16 = u16::from_be_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ 10 => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),
+ name: String::from("Serum3PlaceOrder"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(8).unwrap().to_string(),
+ vault_b: accounts.get(9).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_swapNyd8XiQwJ6ianp9snpu4brUqFxadzvHebnAXjJZ.rs b/dex-trades-wasm-only/src/dapps/dapp_swapNyd8XiQwJ6ianp9snpu4brUqFxadzvHebnAXjJZ.rs
new file mode 100644
index 0000000..b15ca1e
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_swapNyd8XiQwJ6ianp9snpu4brUqFxadzvHebnAXjJZ.rs
@@ -0,0 +1,30 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = u64::from_le_bytes([248, 198, 158, 145, 225, 117, 135, 200]);
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("swapNyd8XiQwJ6ianp9snpu4brUqFxadzvHebnAXjJZ"),
+ name: String::from("Swap"),
+ amm: accounts.get(6).unwrap().to_string(),
+ vault_a: accounts.get(3).unwrap().to_string(),
+ vault_b: accounts.get(4).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/dapp_whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc.rs b/dex-trades-wasm-only/src/dapps/dapp_whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc.rs
new file mode 100644
index 0000000..fbae319
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/dapp_whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc.rs
@@ -0,0 +1,67 @@
+use crate::trade_instruction::TradeInstruction;
+
+const SWAP_DISCRIMINATOR: u64 = 14449647541112719096;
+const SWAP_V2_DISCRIMINATOR: u64 = 7070309578724672555;
+const TWO_HOP_SWAP_DISCRIMINATOR: u64 = 16635068063392030915;
+const TWO_HOP_SWAP_V2_DISCRIMINATOR: u64 = 8485347938364657594;
+
+pub fn parse_trade_instruction(
+ bytes_stream: Vec,
+ accounts: Vec,
+) -> Option {
+ let (disc_bytes, rest) = bytes_stream.split_at(8);
+ let disc_bytes_arr: [u8; 8] = disc_bytes.to_vec().try_into().unwrap();
+ let discriminator: u64 = u64::from_le_bytes(disc_bytes_arr);
+
+ let mut result = None;
+
+ match discriminator {
+ SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"),
+ name: String::from("Swap"),
+ amm: accounts.get(2).unwrap().to_string(),
+ vault_a: accounts.get(4).unwrap().to_string(),
+ vault_b: accounts.get(6).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ SWAP_V2_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"),
+ name: String::from("SwapV2"),
+ amm: accounts.get(4).unwrap().to_string(),
+ vault_a: accounts.get(8).unwrap().to_string(),
+ vault_b: accounts.get(10).unwrap().to_string(),
+ ..Default::default()
+ });
+ }
+ TWO_HOP_SWAP_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"),
+ name: String::from("TwoHopSwap"),
+ amm: accounts.get(2).unwrap().to_string(),
+ vault_a: accounts.get(5).unwrap().to_string(),
+ vault_b: accounts.get(7).unwrap().to_string(),
+ second_swap_amm: Some(accounts.get(3).unwrap().to_string()),
+ second_swap_vault_a: Some(accounts.get(9).unwrap().to_string()),
+ second_swap_vault_b: Some(accounts.get(11).unwrap().to_string()),
+ });
+ }
+ TWO_HOP_SWAP_V2_DISCRIMINATOR => {
+ result = Some(TradeInstruction {
+ dapp_address: String::from("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"),
+ name: String::from("TwoHopSwapV2"),
+ amm: accounts.get(0).unwrap().to_string(),
+ vault_a: accounts.get(9).unwrap().to_string(),
+ vault_b: accounts.get(10).unwrap().to_string(),
+ second_swap_amm: Some(accounts.get(1).unwrap().to_string()),
+ second_swap_vault_a: Some(accounts.get(11).unwrap().to_string()),
+ second_swap_vault_b: Some(accounts.get(12).unwrap().to_string()),
+ });
+ }
+ _ => {}
+ }
+
+ return result;
+}
diff --git a/dex-trades-wasm-only/src/dapps/mod.rs b/dex-trades-wasm-only/src/dapps/mod.rs
new file mode 100644
index 0000000..a1b9bcf
--- /dev/null
+++ b/dex-trades-wasm-only/src/dapps/mod.rs
@@ -0,0 +1,42 @@
+pub mod dapp_27haf8L6oxUeXrHrgEgsexjSY5hbVUWEmvv9Nyxg8vQv;
+pub mod dapp_2KehYt3KsEQR53jYcxjbQp2d2kCp4AkuQW68atufRwSr;
+pub mod dapp_2wT8Yq49kHgDzXuPxZSaeLaH1qbmGXtEyPy64bL7aD3c;
+pub mod dapp_675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8;
+pub mod dapp_6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P;
+pub mod dapp_6MLxLqiXaaSUpkgMnWDTuejNZEz3kE7k2woyHGVFw319;
+pub mod dapp_7WduLbRfYhTJktjLw5FDEyrqoEv61aTTCuGAetgLjzN5;
+pub mod dapp_9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP;
+pub mod dapp_9tKE7Mbmj4mxDjWatikzGAtkoWosiiZX9y6J4Hfm2R8H;
+pub mod dapp_9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin;
+pub mod dapp_AMM55ShdkoGRB5jVYPjWziwk8m5MpwyDgsMWHaMSQWH6;
+pub mod dapp_BSwp6bEBihVLdqJRKGgzjcGLHkcTuzmSo1TQkHepzH8p;
+pub mod dapp_CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK;
+pub mod dapp_CLMM9tUoggJu2wagPkkqs9eFG4BWhVBZWkP1qv3Sp7tR;
+pub mod dapp_CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C;
+pub mod dapp_CTMAxxk34HjKWxQ3QLZK1HpaLXmBveao3ESePXbiyfzh;
+pub mod dapp_CURVGoZn8zycx6FXwwevgBTB2gVvdbGTEpvMJDbgs2t4;
+pub mod dapp_D3BBjqUdCYuP18fNvvMbPAZ8DpcRi4io2EsYHQawJDag;
+pub mod dapp_DEXYosS6oEGvk8uCDayvwEZz4qEyDJRf9nFgYCaqPMTm;
+pub mod dapp_DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1;
+pub mod dapp_Dooar9JkhdZ7J3LHN3A7YCuoGRUggXhQaG4kijfLGU2j;
+pub mod dapp_EewxydAPCCVuNEyrVN68PuSYdQ7wKn27V9Gjeoi8dy3S;
+pub mod dapp_Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB;
+pub mod dapp_FLUXubRmkEi2q6K3Y9kBPg9248ggaZVsoSFhtJHSrm1X;
+pub mod dapp_GFXsSL5sSaDfNFQUYsHekbWBW1TsFdjDYzACh62tEHxn;
+pub mod dapp_H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt;
+pub mod dapp_HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt;
+pub mod dapp_LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo;
+pub mod dapp_PSwapMdSai8tjrEXcxFeQth87xC4rRsa4VA5mhGhXkP;
+pub mod dapp_PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY;
+pub mod dapp_SCHAtsf8mbjyjiv4LkhLKutTf6JnZAbdJKFkXQNMFHZ;
+pub mod dapp_SSwapUtytfBdBn1b9NUGG6foMVPtcWgpRU32HToDUZr;
+pub mod dapp_SSwpMgqNDsyV7mAgN9ady4bDVu5ySjmmXejXvy2vLt1;
+pub mod dapp_SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ;
+pub mod dapp_SoLFiHG9TfgtdUXUjWAxi3LtvYuFyDLVhBWxdMZxyCe;
+pub mod dapp_cysPXAjehMpVKUapzbMCCnpFxUFFryEWEaLgnb9NrR8;
+pub mod dapp_dp2waEWSBy5yKmq65ergoU3G6qRLmqa6K7We4rZSKph;
+pub mod dapp_obriQD1zbpyLz95G5n7nJe6a4DPjpFwa5XYPoNm113y;
+pub mod dapp_opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb;
+pub mod dapp_srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX;
+pub mod dapp_swapNyd8XiQwJ6ianp9snpu4brUqFxadzvHebnAXjJZ;
+pub mod dapp_whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc;
diff --git a/dex-trades-wasm-only/src/lib.rs b/dex-trades-wasm-only/src/lib.rs
new file mode 100644
index 0000000..28c1fca
--- /dev/null
+++ b/dex-trades-wasm-only/src/lib.rs
@@ -0,0 +1,684 @@
+#![allow(dead_code)]
+#![allow(unused_variables)]
+#![allow(non_snake_case)]
+
+mod dapps;
+mod pb;
+mod utils;
+
+use pb::sf::solana::transactions::v1::InnerInstruction;
+use pb::sf::solana::transactions::v1::TokenBalance;
+use pb::sf::solana::transactions::v1::TransactionStat;
+use serde::Serialize;
+use substreams_solana::pb::sf::solana::r#type::v1::InnerInstructions;
+use utils::get_amt;
+use utils::get_mint;
+mod trade_instruction;
+
+use serde_wasm_bindgen;
+use wasm_bindgen::prelude::*;
+
+#[derive(Serialize, Default)]
+pub struct TradeData {
+ pub block_slot: u64,
+ pub block_date: String,
+ pub block_time: i64,
+ pub tx_id: String,
+ pub signer: String,
+ pub pool_address: String,
+ pub base_mint: String,
+ pub quote_mint: String,
+ pub base_vault: String,
+ pub quote_vault: String,
+ pub base_amount: f64,
+ pub quote_amount: f64,
+ pub is_inner_instruction: bool,
+ pub instruction_index: u32,
+ pub instruction_type: String,
+ pub inner_instruction_index: u32,
+ pub outer_program: String,
+ pub inner_program: String,
+ pub txn_fee_lamports: u64,
+ pub signer_lamports_change: i64,
+ pub error: String,
+}
+
+#[wasm_bindgen]
+pub fn parse(transaction: &JsValue) -> JsValue {
+ let data = parse_transaction(transaction);
+ serde_wasm_bindgen::to_value(&data).unwrap()
+}
+
+fn parse_transaction(transaction_js: &JsValue) -> Vec {
+ let mut result: Vec = vec![];
+
+ let transaction_stat: TransactionStat = match transaction_js.into_serde() {
+ Ok(tx) => tx,
+ Err(err) => {
+ let mut err_trade_data = TradeData::default();
+ err_trade_data.error = format!("Error deserializing: {err}");
+ result.push(err_trade_data);
+ return result;
+ }
+ };
+
+ let accounts = transaction_stat.account_keys.clone();
+ let pre_balances = transaction_stat.pre_balances.clone();
+ let post_balances = transaction_stat.post_balances.clone();
+ let pre_token_balances = transaction_stat
+ .pre_token_balances
+ .clone()
+ .unwrap_or_default();
+ let post_token_balances = transaction_stat
+ .post_token_balances
+ .clone()
+ .unwrap_or_default();
+
+ for (idx, inst) in transaction_stat
+ .instructions
+ .clone()
+ .into_iter()
+ .enumerate()
+ {
+ let inner_instructions = inst.inner_instructions.unwrap_or_default();
+ let program = inst.executing_account;
+
+ let trade_instruction = get_trade_instruction(
+ &program,
+ bs58::decode(inst.data.clone()).into_vec().unwrap(),
+ inst.account_arguments,
+ accounts.clone(),
+ &pre_token_balances,
+ &post_token_balances,
+ &"".to_string(),
+ false,
+ &inner_instructions,
+ 0 as u32,
+ );
+
+ if trade_instruction.is_some() {
+ let ti = trade_instruction.unwrap();
+ let mut trade_data = default_trade_data(&transaction_stat);
+ trade_data.pool_address = ti.amm;
+ trade_data.base_mint = get_mint(
+ &ti.vault_a,
+ &post_token_balances,
+ &accounts,
+ ti.dapp_address.clone(),
+ );
+ trade_data.quote_mint =
+ get_mint(&ti.vault_b, &post_token_balances, &accounts, "".to_string());
+ trade_data.base_vault = ti.vault_a.clone();
+ trade_data.quote_vault = ti.vault_b.clone();
+ trade_data.base_amount = get_amt(
+ &ti.vault_a.clone(),
+ 0 as u32,
+ &inner_instructions,
+ &accounts,
+ &post_token_balances,
+ ti.dapp_address.clone(),
+ pre_balances.clone(),
+ post_balances.clone(),
+ );
+
+ trade_data.quote_amount = get_amt(
+ &ti.vault_b.clone(),
+ 0 as u32,
+ &inner_instructions,
+ &accounts,
+ &post_token_balances,
+ "".to_string(),
+ pre_balances.clone(),
+ post_balances.clone(),
+ );
+ trade_data.is_inner_instruction = false;
+ trade_data.instruction_index = idx as u32;
+ trade_data.instruction_type = ti.name.clone();
+ trade_data.inner_instruction_index = 0;
+ trade_data.outer_program = ti.dapp_address.clone();
+ trade_data.inner_program = "".to_string();
+ result.push(trade_data);
+
+ if ti.second_swap_amm.clone().unwrap_or_default() != "" {
+ let mut trade_data = default_trade_data(&transaction_stat);
+ trade_data.pool_address = ti.second_swap_amm.unwrap();
+ trade_data.base_mint = get_mint(
+ &ti.second_swap_vault_a.clone().unwrap(),
+ &post_token_balances,
+ &accounts,
+ "".to_string(),
+ );
+ trade_data.quote_mint = get_mint(
+ &ti.second_swap_vault_b.clone().unwrap(),
+ &post_token_balances,
+ &accounts,
+ "".to_string(),
+ );
+ trade_data.base_vault = ti.second_swap_vault_a.clone().unwrap();
+ trade_data.quote_vault = ti.second_swap_vault_b.clone().unwrap();
+ trade_data.base_amount = get_amt(
+ &ti.second_swap_vault_a.clone().unwrap(),
+ 0 as u32,
+ &inner_instructions,
+ &accounts,
+ &post_token_balances,
+ "".to_string(),
+ pre_balances.clone(),
+ post_balances.clone(),
+ );
+ trade_data.quote_amount = get_amt(
+ &ti.second_swap_vault_b.clone().unwrap(),
+ 0 as u32,
+ &inner_instructions,
+ &accounts,
+ &post_token_balances,
+ "".to_string(),
+ pre_balances.clone(),
+ post_balances.clone(),
+ );
+ trade_data.is_inner_instruction = false;
+ trade_data.instruction_index = idx as u32;
+ trade_data.instruction_type = ti.name.clone();
+ trade_data.inner_instruction_index = 0;
+ trade_data.outer_program = ti.dapp_address.clone();
+ trade_data.inner_program = "".to_string();
+ result.push(trade_data);
+ }
+ }
+
+ inner_instructions
+ .iter()
+ .enumerate()
+ .for_each(|(inner_idx, inner_inst)| {
+ let inner_program = inner_inst.executing_account.clone();
+ let inner_trade_instruction = get_trade_instruction(
+ &inner_program,
+ bs58::decode(inner_inst.data.clone()).into_vec().unwrap(),
+ inner_inst.account_arguments.clone(),
+ accounts.clone(),
+ &pre_token_balances,
+ &post_token_balances,
+ &program,
+ true,
+ &inner_instructions,
+ inner_idx as u32,
+ );
+
+ if inner_trade_instruction.is_some() {
+ let inner_ti = inner_trade_instruction.unwrap();
+ let mut inner_trade_data = default_trade_data(&transaction_stat);
+ inner_trade_data.pool_address = inner_ti.amm;
+ inner_trade_data.base_mint = get_mint(
+ &inner_ti.vault_a,
+ &post_token_balances,
+ &accounts,
+ inner_ti.dapp_address.clone(),
+ );
+ inner_trade_data.quote_mint = get_mint(
+ &inner_ti.vault_b,
+ &post_token_balances,
+ &accounts,
+ "".to_string(),
+ );
+ inner_trade_data.base_vault = inner_ti.vault_a.clone();
+ inner_trade_data.quote_vault = inner_ti.vault_b.clone();
+ inner_trade_data.base_amount = get_amt(
+ &inner_ti.vault_a.clone(),
+ 0 as u32,
+ &inner_instructions,
+ &accounts,
+ &post_token_balances,
+ inner_ti.dapp_address.clone(),
+ pre_balances.clone(),
+ post_balances.clone(),
+ );
+ inner_trade_data.quote_amount = get_amt(
+ &inner_ti.vault_b.clone(),
+ 0 as u32,
+ &inner_instructions,
+ &accounts,
+ &post_token_balances,
+ "".to_string(),
+ pre_balances.clone(),
+ post_balances.clone(),
+ );
+ inner_trade_data.is_inner_instruction = true;
+ inner_trade_data.instruction_index = idx as u32;
+ inner_trade_data.instruction_type = inner_ti.name.clone();
+ inner_trade_data.inner_instruction_index = inner_idx as u32;
+ inner_trade_data.outer_program = program.to_string();
+ inner_trade_data.inner_program = inner_ti.dapp_address.clone();
+ result.push(inner_trade_data);
+
+ if inner_ti.second_swap_amm.clone().unwrap_or_default() != "" {
+ let mut inner_trade_data = default_trade_data(&transaction_stat);
+ inner_trade_data.pool_address = inner_ti.second_swap_amm.unwrap();
+ inner_trade_data.base_mint = get_mint(
+ &inner_ti.second_swap_vault_a.clone().unwrap(),
+ &post_token_balances,
+ &accounts,
+ "".to_string(),
+ );
+ inner_trade_data.quote_mint = get_mint(
+ &inner_ti.second_swap_vault_b.clone().unwrap(),
+ &post_token_balances,
+ &accounts,
+ "".to_string(),
+ );
+ inner_trade_data.base_vault = inner_ti.second_swap_vault_a.clone().unwrap();
+ inner_trade_data.quote_vault =
+ inner_ti.second_swap_vault_b.clone().unwrap();
+ inner_trade_data.base_amount = get_amt(
+ &inner_ti.second_swap_vault_a.clone().unwrap(),
+ inner_idx as u32,
+ &inner_instructions,
+ &accounts,
+ &post_token_balances,
+ "".to_string(),
+ pre_balances.clone(),
+ post_balances.clone(),
+ );
+ inner_trade_data.quote_amount = get_amt(
+ &inner_ti.second_swap_vault_b.clone().unwrap(),
+ inner_idx as u32,
+ &inner_instructions,
+ &accounts,
+ &post_token_balances,
+ "".to_string(),
+ pre_balances.clone(),
+ post_balances.clone(),
+ );
+ inner_trade_data.is_inner_instruction = true;
+ inner_trade_data.instruction_index = idx as u32;
+ inner_trade_data.instruction_type = inner_ti.name.clone();
+ inner_trade_data.inner_instruction_index = inner_idx as u32;
+ inner_trade_data.outer_program = inner_ti.dapp_address.clone();
+ inner_trade_data.inner_program = inner_ti.dapp_address.clone();
+ result.push(inner_trade_data);
+ }
+ }
+ });
+ }
+ result
+}
+
+fn get_trade_instruction(
+ dapp_address: &String,
+ instruction_data: Vec,
+ input_accounts: Vec,
+ all_accounts: Vec,
+ pre_token_balances: &Vec,
+ post_token_balances: &Vec,
+ outer_program: &String,
+ is_inner: bool,
+ inner_instructions: &Vec,
+ input_inner_idx: u32,
+) -> Option {
+ let mut result = None;
+ match dapp_address.as_str() {
+ "CLMM9tUoggJu2wagPkkqs9eFG4BWhVBZWkP1qv3Sp7tR" => {
+ result =
+ dapps::dapp_CLMM9tUoggJu2wagPkkqs9eFG4BWhVBZWkP1qv3Sp7tR::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "Dooar9JkhdZ7J3LHN3A7YCuoGRUggXhQaG4kijfLGU2j" => {
+ result =
+ dapps::dapp_Dooar9JkhdZ7J3LHN3A7YCuoGRUggXhQaG4kijfLGU2j::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB" => {
+ result =
+ dapps::dapp_Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY" => {
+ result =
+ dapps::dapp_PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "SSwapUtytfBdBn1b9NUGG6foMVPtcWgpRU32HToDUZr" => {
+ result =
+ dapps::dapp_SSwapUtytfBdBn1b9NUGG6foMVPtcWgpRU32HToDUZr::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX" => {
+ let jupiter_dapps = vec![
+ "JUP2jxvXaqu7NQY1GmNF4m1vodw12LVXYxbFL2uJvfo".to_string(),
+ "JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WcGuJB".to_string(),
+ "JUP3c2Uh3WA4Ng34tw6kPd2G4C5BB21Xo36Je1s32Ph".to_string(),
+ "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4".to_string(),
+ "JUP6i4ozu5ydDCnLiMogSckDPpbtr7BJ4FtzYWkb5Rk".to_string(),
+ "JUP5cHjnnCx2DppVsufsLrXs8EBZeEZzGtEK9Gdz6ow".to_string(),
+ "JUP5pEAZeHdHrLxh5UCwAbpjGwYKKoquCpda2hfP4u8".to_string(),
+ ];
+
+ if is_inner & jupiter_dapps.contains(outer_program) {
+ result =
+ dapps::dapp_srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ }
+ "HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt" => {
+ result =
+ dapps::dapp_HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc" => {
+ result =
+ dapps::dapp_whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "EewxydAPCCVuNEyrVN68PuSYdQ7wKn27V9Gjeoi8dy3S" => {
+ result =
+ dapps::dapp_EewxydAPCCVuNEyrVN68PuSYdQ7wKn27V9Gjeoi8dy3S::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "2wT8Yq49kHgDzXuPxZSaeLaH1qbmGXtEyPy64bL7aD3c" => {
+ result =
+ dapps::dapp_2wT8Yq49kHgDzXuPxZSaeLaH1qbmGXtEyPy64bL7aD3c::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ" => {
+ result =
+ dapps::dapp_SSwpkEEcbUqx4vtoEByFjSkhKdCT862DNVb52nZg1UZ::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK" => {
+ result =
+ dapps::dapp_CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP" => {
+ result =
+ dapps::dapp_9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "AMM55ShdkoGRB5jVYPjWziwk8m5MpwyDgsMWHaMSQWH6" => {
+ result =
+ dapps::dapp_AMM55ShdkoGRB5jVYPjWziwk8m5MpwyDgsMWHaMSQWH6::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "CURVGoZn8zycx6FXwwevgBTB2gVvdbGTEpvMJDbgs2t4" => {
+ result =
+ dapps::dapp_CURVGoZn8zycx6FXwwevgBTB2gVvdbGTEpvMJDbgs2t4::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "cysPXAjehMpVKUapzbMCCnpFxUFFryEWEaLgnb9NrR8" => {
+ result =
+ dapps::dapp_cysPXAjehMpVKUapzbMCCnpFxUFFryEWEaLgnb9NrR8::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "7WduLbRfYhTJktjLw5FDEyrqoEv61aTTCuGAetgLjzN5" => {
+ result =
+ dapps::dapp_7WduLbRfYhTJktjLw5FDEyrqoEv61aTTCuGAetgLjzN5::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" => {
+ let jupiter_dapps = vec![
+ "JUP2jxvXaqu7NQY1GmNF4m1vodw12LVXYxbFL2uJvfo".to_string(),
+ "JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WcGuJB".to_string(),
+ "JUP3c2Uh3WA4Ng34tw6kPd2G4C5BB21Xo36Je1s32Ph".to_string(),
+ "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4".to_string(),
+ "JUP6i4ozu5ydDCnLiMogSckDPpbtr7BJ4FtzYWkb5Rk".to_string(),
+ "JUP5cHjnnCx2DppVsufsLrXs8EBZeEZzGtEK9Gdz6ow".to_string(),
+ "JUP5pEAZeHdHrLxh5UCwAbpjGwYKKoquCpda2hfP4u8".to_string(),
+ ];
+
+ if is_inner & jupiter_dapps.contains(outer_program) {
+ result =
+ dapps::dapp_9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ }
+ "GFXsSL5sSaDfNFQUYsHekbWBW1TsFdjDYzACh62tEHxn" => {
+ result =
+ dapps::dapp_GFXsSL5sSaDfNFQUYsHekbWBW1TsFdjDYzACh62tEHxn::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ inner_instructions,
+ &all_accounts,
+ );
+ }
+ "SSwpMgqNDsyV7mAgN9ady4bDVu5ySjmmXejXvy2vLt1" => {
+ result =
+ dapps::dapp_SSwpMgqNDsyV7mAgN9ady4bDVu5ySjmmXejXvy2vLt1::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "SCHAtsf8mbjyjiv4LkhLKutTf6JnZAbdJKFkXQNMFHZ" => {
+ result =
+ dapps::dapp_SCHAtsf8mbjyjiv4LkhLKutTf6JnZAbdJKFkXQNMFHZ::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "dp2waEWSBy5yKmq65ergoU3G6qRLmqa6K7We4rZSKph" => {
+ result =
+ dapps::dapp_dp2waEWSBy5yKmq65ergoU3G6qRLmqa6K7We4rZSKph::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "CTMAxxk34HjKWxQ3QLZK1HpaLXmBveao3ESePXbiyfzh" => {
+ result =
+ dapps::dapp_CTMAxxk34HjKWxQ3QLZK1HpaLXmBveao3ESePXbiyfzh::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "PSwapMdSai8tjrEXcxFeQth87xC4rRsa4VA5mhGhXkP" => {
+ result =
+ dapps::dapp_PSwapMdSai8tjrEXcxFeQth87xC4rRsa4VA5mhGhXkP::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "D3BBjqUdCYuP18fNvvMbPAZ8DpcRi4io2EsYHQawJDag" => {
+ result =
+ dapps::dapp_D3BBjqUdCYuP18fNvvMbPAZ8DpcRi4io2EsYHQawJDag::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "2KehYt3KsEQR53jYcxjbQp2d2kCp4AkuQW68atufRwSr" => {
+ result =
+ dapps::dapp_2KehYt3KsEQR53jYcxjbQp2d2kCp4AkuQW68atufRwSr::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8" => {
+ result =
+ dapps::dapp_675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ &post_token_balances,
+ &all_accounts,
+ );
+ }
+ "27haf8L6oxUeXrHrgEgsexjSY5hbVUWEmvv9Nyxg8vQv" => {
+ result =
+ dapps::dapp_27haf8L6oxUeXrHrgEgsexjSY5hbVUWEmvv9Nyxg8vQv::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ &post_token_balances,
+ &all_accounts,
+ );
+ }
+ "BSwp6bEBihVLdqJRKGgzjcGLHkcTuzmSo1TQkHepzH8p" => {
+ result =
+ dapps::dapp_BSwp6bEBihVLdqJRKGgzjcGLHkcTuzmSo1TQkHepzH8p::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "FLUXubRmkEi2q6K3Y9kBPg9248ggaZVsoSFhtJHSrm1X" => {
+ result =
+ dapps::dapp_FLUXubRmkEi2q6K3Y9kBPg9248ggaZVsoSFhtJHSrm1X::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "9tKE7Mbmj4mxDjWatikzGAtkoWosiiZX9y6J4Hfm2R8H" => {
+ result =
+ dapps::dapp_9tKE7Mbmj4mxDjWatikzGAtkoWosiiZX9y6J4Hfm2R8H::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1" => {
+ result =
+ dapps::dapp_DjVE6JNiYqPL2QXyCUUh8rNjHrbz9hXHNYt99MQ59qw1::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "6MLxLqiXaaSUpkgMnWDTuejNZEz3kE7k2woyHGVFw319" => {
+ result =
+ dapps::dapp_6MLxLqiXaaSUpkgMnWDTuejNZEz3kE7k2woyHGVFw319::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo" => {
+ result =
+ dapps::dapp_LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C" => {
+ result =
+ dapps::dapp_CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb" => {
+ let jupiter_dapps = vec![
+ "JUP2jxvXaqu7NQY1GmNF4m1vodw12LVXYxbFL2uJvfo".to_string(),
+ "JUP3c2Uh3WA4Ng34tw6kPd2G4C5BB21Xo36Je1s32Ph".to_string(),
+ "JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WcGuJB".to_string(),
+ "JUP5cHjnnCx2DppVsufsLrXs8EBZeEZzGtEK9Gdz6ow".to_string(),
+ "JUP5pEAZeHdHrLxh5UCwAbpjGwYKKoquCpda2hfP4u8".to_string(),
+ "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4".to_string(),
+ "JUP6i4ozu5ydDCnLiMogSckDPpbtr7BJ4FtzYWkb5Rk".to_string(),
+ ];
+
+ if is_inner & jupiter_dapps.contains(outer_program) {
+ result =
+ dapps::dapp_opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ }
+ "DEXYosS6oEGvk8uCDayvwEZz4qEyDJRf9nFgYCaqPMTm" => {
+ result =
+ dapps::dapp_DEXYosS6oEGvk8uCDayvwEZz4qEyDJRf9nFgYCaqPMTm::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt" => {
+ result =
+ dapps::dapp_H8W3ctz92svYg6mkn1UtGfu2aQr2fnUFHM1RhScEtQDt::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "obriQD1zbpyLz95G5n7nJe6a4DPjpFwa5XYPoNm113y" => {
+ result =
+ dapps::dapp_obriQD1zbpyLz95G5n7nJe6a4DPjpFwa5XYPoNm113y::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "SoLFiHG9TfgtdUXUjWAxi3LtvYuFyDLVhBWxdMZxyCe" => {
+ result =
+ dapps::dapp_SoLFiHG9TfgtdUXUjWAxi3LtvYuFyDLVhBWxdMZxyCe::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "swapNyd8XiQwJ6ianp9snpu4brUqFxadzvHebnAXjJZ" => {
+ result =
+ dapps::dapp_swapNyd8XiQwJ6ianp9snpu4brUqFxadzvHebnAXjJZ::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P" => {
+ result =
+ dapps::dapp_6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P::parse_trade_instruction(
+ instruction_data,
+ input_accounts,
+ );
+ }
+ _ => {}
+ }
+
+ return result;
+}
+
+fn get_signer_balance_change(pre_balances: &Vec, post_balances: &Vec) -> i64 {
+ if let (Some(&pre_signer), Some(&post_signer)) = (pre_balances.get(0), post_balances.get(0)) {
+ (post_signer as i64) - (pre_signer as i64)
+ } else {
+ 0
+ }
+}
+
+fn default_trade_data(transaction_stat: &TransactionStat) -> TradeData {
+ let mut trade_data = TradeData::default();
+ let _transaction_stat = transaction_stat.clone();
+ trade_data.tx_id = _transaction_stat.id.clone();
+ trade_data.block_slot = _transaction_stat.block_slot as u64;
+ trade_data.block_date = _transaction_stat.block_date.clone().unwrap_or_default();
+ trade_data.block_time = _transaction_stat.block_time as i64;
+ trade_data.signer = _transaction_stat.signer.clone();
+ trade_data.txn_fee_lamports = _transaction_stat.fees;
+ trade_data.signer_lamports_change = get_signer_balance_change(
+ &_transaction_stat.pre_balances,
+ &_transaction_stat.post_balances,
+ );
+ trade_data.error = "".to_string();
+ trade_data
+}
diff --git a/dex-trades-wasm-only/src/output/output.proto b/dex-trades-wasm-only/src/output/output.proto
new file mode 100644
index 0000000..32dcb76
--- /dev/null
+++ b/dex-trades-wasm-only/src/output/output.proto
@@ -0,0 +1,57 @@
+syntax = "proto2";
+
+package sf.solana.transactions.v1;
+
+message TransactionStats {
+ required uint32 block_slot = 1;
+ required string block_date = 2;
+ required uint64 block_time = 3;
+ required uint32 index = 4;
+ required uint32 required_signatures = 5;
+ required uint32 readonly_signed_accounts = 6;
+ required uint32 readonly_unsigned_accounts = 7;
+ required string id = 8;
+ required uint64 fees = 9;
+ repeated string account_keys= 10;
+ repeated Instruction instructions = 11;
+ repeated uint64 pre_balances = 12;
+ repeated uint64 post_balances = 13;
+ repeated TokenBalance pre_token_balances = 14;
+ repeated TokenBalance post_token_balances = 15;
+ repeated string signatures = 16;
+ required string signer = 17;
+ required string version = 18;
+ repeated string executing_accounts = 19;
+ required bool logs_truncated = 20;
+ repeated string log_messages = 21;
+ required uint64 compute_units_consumed = 22;
+ required ReturnData return_data=23;
+}
+
+
+message Instruction {
+ required string executing_account = 1;
+ repeated string account_arguments = 2;
+ required string data = 3;
+ repeated InnerInstruction inner_instructions = 4;
+}
+
+message InnerInstruction {
+ required string executing_account = 1;
+ repeated string account_arguments = 2;
+ required string data = 3;
+ required uint32 stack_height = 4;
+}
+
+message TokenBalance {
+ required string account = 1;
+ required double amount = 2;
+ required string mint = 3;
+ required string owner = 4;
+ required string program = 5;
+}
+
+message ReturnData {
+ required string program_id = 1;
+ required string data = 2;
+}
\ No newline at end of file
diff --git a/dex-trades-wasm-only/src/pb/mod.rs b/dex-trades-wasm-only/src/pb/mod.rs
new file mode 100644
index 0000000..228e4fe
--- /dev/null
+++ b/dex-trades-wasm-only/src/pb/mod.rs
@@ -0,0 +1,35 @@
+// @generated
+pub mod sf {
+ pub mod solana {
+ pub mod r#type {
+ // @@protoc_insertion_point(attribute:sf.solana.type.v1)
+ pub mod v1 {
+ include!("sf.solana.type.v1.rs");
+ // @@protoc_insertion_point(sf.solana.type.v1)
+ }
+ }
+ pub mod transactions {
+ // @@protoc_insertion_point(attribute:sf.solana.transactions.v1)
+ pub mod v1 {
+ include!("sf.solana.transactions.v1.rs");
+ // @@protoc_insertion_point(sf.solana.transactions.v1)
+ }
+ }
+ }
+}
+pub mod sol {
+ pub mod instructions {
+ // @@protoc_insertion_point(attribute:sol.instructions.v1)
+ pub mod v1 {
+ include!("sol.instructions.v1.rs");
+ // @@protoc_insertion_point(sol.instructions.v1)
+ }
+ }
+ pub mod transactions {
+ // @@protoc_insertion_point(attribute:sol.transactions.v1)
+ pub mod v1 {
+ include!("sol.transactions.v1.rs");
+ // @@protoc_insertion_point(sol.transactions.v1)
+ }
+ }
+}
diff --git a/dex-trades-wasm-only/src/pb/sf.solana.transactions.v1.rs b/dex-trades-wasm-only/src/pb/sf.solana.transactions.v1.rs
new file mode 100644
index 0000000..820dcd4
--- /dev/null
+++ b/dex-trades-wasm-only/src/pb/sf.solana.transactions.v1.rs
@@ -0,0 +1,64 @@
+use serde::Deserialize;
+
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, Deserialize)]
+pub struct TransactionStat {
+ pub block_slot: u32,
+ pub block_date: Option,
+ pub block_time: u64,
+ pub index: Option,
+ pub required_signatures: u32,
+ pub readonly_signed_accounts: u32,
+ pub readonly_unsigned_accounts: u32,
+ pub id: String,
+ pub fees: u64,
+ pub account_keys: Vec,
+ pub instructions: Vec,
+ pub pre_balances: Vec,
+ pub post_balances: Vec,
+ pub pre_token_balances: Option>,
+ pub post_token_balances: Option>,
+ pub signatures: Vec,
+ pub signer: String,
+ pub version: String,
+ pub executing_accounts: Vec,
+ pub logs_truncated: bool,
+ pub log_messages: Vec,
+ pub compute_units_consumed: Option,
+ pub return_data: Option,
+}
+
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, Deserialize)]
+pub struct Instruction {
+ pub executing_account: String,
+ pub account_arguments: Vec,
+ pub data: String,
+ pub inner_instructions: Option>,
+}
+
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, Deserialize)]
+pub struct InnerInstruction {
+ pub executing_account: String,
+ pub account_arguments: Vec,
+ pub data: String,
+ pub stack_height: Option,
+}
+
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, Deserialize)]
+pub struct TokenBalance {
+ pub account: String,
+ pub amount: f64,
+ pub mint: String,
+ pub owner: String,
+ pub program: String,
+}
+
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, Deserialize)]
+pub struct ReturnData {
+ pub program_id: String,
+ pub data: String,
+}
diff --git a/dex-trades-wasm-only/src/pb/sf.solana.type.v1.rs b/dex-trades-wasm-only/src/pb/sf.solana.type.v1.rs
new file mode 100644
index 0000000..3f078a0
--- /dev/null
+++ b/dex-trades-wasm-only/src/pb/sf.solana.type.v1.rs
@@ -0,0 +1,256 @@
+// @generated
+/// This Block is backwards compatible with solana.storage.ConfirmedBlock.ConfirmedBlock from
+/// the Solana Labs repositories.
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct Block {
+ #[prost(string, tag="1")]
+ pub previous_blockhash: ::prost::alloc::string::String,
+ #[prost(string, tag="2")]
+ pub blockhash: ::prost::alloc::string::String,
+ #[prost(uint64, tag="3")]
+ pub parent_slot: u64,
+ #[prost(message, repeated, tag="4")]
+ pub transactions: ::prost::alloc::vec::Vec,
+ #[prost(message, repeated, tag="5")]
+ pub rewards: ::prost::alloc::vec::Vec,
+ #[prost(message, optional, tag="6")]
+ pub block_time: ::core::option::Option,
+ #[prost(message, optional, tag="7")]
+ pub block_height: ::core::option::Option,
+ /// StreamingFast additions
+ #[prost(uint64, tag="20")]
+ pub slot: u64,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct ConfirmedTransaction {
+ #[prost(message, optional, tag="1")]
+ pub transaction: ::core::option::Option,
+ #[prost(message, optional, tag="2")]
+ pub meta: ::core::option::Option,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct Transaction {
+ #[prost(bytes="vec", repeated, tag="1")]
+ pub signatures: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>,
+ #[prost(message, optional, tag="2")]
+ pub message: ::core::option::Option,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct Message {
+ #[prost(message, optional, tag="1")]
+ pub header: ::core::option::Option,
+ #[prost(bytes="vec", repeated, tag="2")]
+ pub account_keys: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>,
+ #[prost(bytes="vec", tag="3")]
+ pub recent_blockhash: ::prost::alloc::vec::Vec,
+ #[prost(message, repeated, tag="4")]
+ pub instructions: ::prost::alloc::vec::Vec,
+ #[prost(bool, tag="5")]
+ pub versioned: bool,
+ #[prost(message, repeated, tag="6")]
+ pub address_table_lookups: ::prost::alloc::vec::Vec,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct MessageHeader {
+ #[prost(uint32, tag="1")]
+ pub num_required_signatures: u32,
+ #[prost(uint32, tag="2")]
+ pub num_readonly_signed_accounts: u32,
+ #[prost(uint32, tag="3")]
+ pub num_readonly_unsigned_accounts: u32,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct MessageAddressTableLookup {
+ #[prost(bytes="vec", tag="1")]
+ pub account_key: ::prost::alloc::vec::Vec,
+ #[prost(bytes="vec", tag="2")]
+ pub writable_indexes: ::prost::alloc::vec::Vec,
+ #[prost(bytes="vec", tag="3")]
+ pub readonly_indexes: ::prost::alloc::vec::Vec,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct TransactionStatusMeta {
+ #[prost(message, optional, tag="1")]
+ pub err: ::core::option::Option,
+ #[prost(uint64, tag="2")]
+ pub fee: u64,
+ #[prost(uint64, repeated, tag="3")]
+ pub pre_balances: ::prost::alloc::vec::Vec,
+ #[prost(uint64, repeated, tag="4")]
+ pub post_balances: ::prost::alloc::vec::Vec,
+ #[prost(message, repeated, tag="5")]
+ pub inner_instructions: ::prost::alloc::vec::Vec,
+ #[prost(bool, tag="10")]
+ pub inner_instructions_none: bool,
+ #[prost(string, repeated, tag="6")]
+ pub log_messages: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
+ #[prost(bool, tag="11")]
+ pub log_messages_none: bool,
+ #[prost(message, repeated, tag="7")]
+ pub pre_token_balances: ::prost::alloc::vec::Vec,
+ #[prost(message, repeated, tag="8")]
+ pub post_token_balances: ::prost::alloc::vec::Vec,
+ #[prost(message, repeated, tag="9")]
+ pub rewards: ::prost::alloc::vec::Vec,
+ #[prost(bytes="vec", repeated, tag="12")]
+ pub loaded_writable_addresses: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>,
+ #[prost(bytes="vec", repeated, tag="13")]
+ pub loaded_readonly_addresses: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>,
+ #[prost(message, optional, tag="14")]
+ pub return_data: ::core::option::Option,
+ #[prost(bool, tag="15")]
+ pub return_data_none: bool,
+ /// Sum of compute units consumed by all instructions.
+ /// Available since Solana v1.10.35 / v1.11.6.
+ /// Set to `None` for txs executed on earlier versions.
+ #[prost(uint64, optional, tag="16")]
+ pub compute_units_consumed: ::core::option::Option,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct TransactionError {
+ #[prost(bytes="vec", tag="1")]
+ pub err: ::prost::alloc::vec::Vec,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct InnerInstructions {
+ #[prost(uint32, tag="1")]
+ pub index: u32,
+ #[prost(message, repeated, tag="2")]
+ pub instructions: ::prost::alloc::vec::Vec,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct InnerInstruction {
+ #[prost(uint32, tag="1")]
+ pub program_id_index: u32,
+ #[prost(bytes="vec", tag="2")]
+ pub accounts: ::prost::alloc::vec::Vec,
+ #[prost(bytes="vec", tag="3")]
+ pub data: ::prost::alloc::vec::Vec,
+ /// Invocation stack height of an inner instruction.
+ /// Available since Solana v1.14.6
+ /// Set to `None` for txs executed on earlier versions.
+ #[prost(uint32, optional, tag="4")]
+ pub stack_height: ::core::option::Option,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct CompiledInstruction {
+ #[prost(uint32, tag="1")]
+ pub program_id_index: u32,
+ #[prost(bytes="vec", tag="2")]
+ pub accounts: ::prost::alloc::vec::Vec,
+ #[prost(bytes="vec", tag="3")]
+ pub data: ::prost::alloc::vec::Vec,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct TokenBalance {
+ #[prost(uint32, tag="1")]
+ pub account_index: u32,
+ #[prost(string, tag="2")]
+ pub mint: ::prost::alloc::string::String,
+ #[prost(message, optional, tag="3")]
+ pub ui_token_amount: ::core::option::Option,
+ #[prost(string, tag="4")]
+ pub owner: ::prost::alloc::string::String,
+ #[prost(string, tag="5")]
+ pub program_id: ::prost::alloc::string::String,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct UiTokenAmount {
+ #[prost(double, tag="1")]
+ pub ui_amount: f64,
+ #[prost(uint32, tag="2")]
+ pub decimals: u32,
+ #[prost(string, tag="3")]
+ pub amount: ::prost::alloc::string::String,
+ #[prost(string, tag="4")]
+ pub ui_amount_string: ::prost::alloc::string::String,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct ReturnData {
+ #[prost(bytes="vec", tag="1")]
+ pub program_id: ::prost::alloc::vec::Vec,
+ #[prost(bytes="vec", tag="2")]
+ pub data: ::prost::alloc::vec::Vec,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct Reward {
+ #[prost(string, tag="1")]
+ pub pubkey: ::prost::alloc::string::String,
+ #[prost(int64, tag="2")]
+ pub lamports: i64,
+ #[prost(uint64, tag="3")]
+ pub post_balance: u64,
+ #[prost(enumeration="RewardType", tag="4")]
+ pub reward_type: i32,
+ #[prost(string, tag="5")]
+ pub commission: ::prost::alloc::string::String,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct Rewards {
+ #[prost(message, repeated, tag="1")]
+ pub rewards: ::prost::alloc::vec::Vec,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct UnixTimestamp {
+ #[prost(int64, tag="1")]
+ pub timestamp: i64,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct BlockHeight {
+ #[prost(uint64, tag="1")]
+ pub block_height: u64,
+}
+#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
+#[repr(i32)]
+pub enum RewardType {
+ Unspecified = 0,
+ Fee = 1,
+ Rent = 2,
+ Staking = 3,
+ Voting = 4,
+}
+impl RewardType {
+ /// String value of the enum field names used in the ProtoBuf definition.
+ ///
+ /// The values are not transformed in any way and thus are considered stable
+ /// (if the ProtoBuf definition does not change) and safe for programmatic use.
+ pub fn as_str_name(&self) -> &'static str {
+ match self {
+ RewardType::Unspecified => "Unspecified",
+ RewardType::Fee => "Fee",
+ RewardType::Rent => "Rent",
+ RewardType::Staking => "Staking",
+ RewardType::Voting => "Voting",
+ }
+ }
+ /// Creates an enum from field names used in the ProtoBuf definition.
+ pub fn from_str_name(value: &str) -> ::core::option::Option {
+ match value {
+ "Unspecified" => Some(Self::Unspecified),
+ "Fee" => Some(Self::Fee),
+ "Rent" => Some(Self::Rent),
+ "Staking" => Some(Self::Staking),
+ "Voting" => Some(Self::Voting),
+ _ => None,
+ }
+ }
+}
+// @@protoc_insertion_point(module)
diff --git a/dex-trades-wasm-only/src/pb/sol.instructions.v1.rs b/dex-trades-wasm-only/src/pb/sol.instructions.v1.rs
new file mode 100644
index 0000000..f8e8361
--- /dev/null
+++ b/dex-trades-wasm-only/src/pb/sol.instructions.v1.rs
@@ -0,0 +1,20 @@
+// @generated
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct Instructions {
+ #[prost(message, repeated, tag="1")]
+ pub instructions: ::prost::alloc::vec::Vec,
+}
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct Instruction {
+ #[prost(string, tag="1")]
+ pub program_id: ::prost::alloc::string::String,
+ #[prost(string, repeated, tag="2")]
+ pub accounts: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
+ #[prost(bytes="vec", tag="3")]
+ pub data: ::prost::alloc::vec::Vec,
+ #[prost(string, tag="4")]
+ pub tx_hash: ::prost::alloc::string::String,
+}
+// @@protoc_insertion_point(module)
diff --git a/dex-trades-wasm-only/src/pb/sol.transactions.v1.rs b/dex-trades-wasm-only/src/pb/sol.transactions.v1.rs
new file mode 100644
index 0000000..02b2d46
--- /dev/null
+++ b/dex-trades-wasm-only/src/pb/sol.transactions.v1.rs
@@ -0,0 +1,8 @@
+// @generated
+#[allow(clippy::derive_partial_eq_without_eq)]
+#[derive(Clone, PartialEq, ::prost::Message)]
+pub struct Transactions {
+ #[prost(message, repeated, tag="1")]
+ pub transactions: ::prost::alloc::vec::Vec,
+}
+// @@protoc_insertion_point(module)
diff --git a/dex-trades-wasm-only/src/trade_instruction.rs b/dex-trades-wasm-only/src/trade_instruction.rs
new file mode 100644
index 0000000..673a4c9
--- /dev/null
+++ b/dex-trades-wasm-only/src/trade_instruction.rs
@@ -0,0 +1,26 @@
+#[derive(Debug)]
+pub struct TradeInstruction {
+ pub dapp_address: String,
+ pub name: String,
+ pub amm: String,
+ pub vault_a: String,
+ pub vault_b: String,
+ pub second_swap_amm: Option,
+ pub second_swap_vault_a: Option,
+ pub second_swap_vault_b: Option,
+}
+
+impl Default for TradeInstruction {
+ fn default() -> Self {
+ TradeInstruction {
+ dapp_address: "".to_string(),
+ name: "".to_string(),
+ amm: "".to_string(),
+ vault_a: "".to_string(),
+ vault_b: "".to_string(),
+ second_swap_amm: None,
+ second_swap_vault_a: None,
+ second_swap_vault_b: None,
+ }
+ }
+}
diff --git a/dex-trades-wasm-only/src/utils.rs b/dex-trades-wasm-only/src/utils.rs
new file mode 100644
index 0000000..4416e58
--- /dev/null
+++ b/dex-trades-wasm-only/src/utils.rs
@@ -0,0 +1,378 @@
+extern crate chrono;
+use borsh::{BorshDeserialize, BorshSerialize};
+use chrono::prelude::*;
+
+use crate::pb::sf::solana::transactions::v1::{InnerInstruction, TokenBalance};
+
+#[derive(BorshSerialize, BorshDeserialize, Debug, Default)]
+pub struct TransferLayout {
+ amount: u64,
+}
+
+pub fn convert_to_date(ts: i64) -> String {
+ let nt = NaiveDateTime::from_timestamp_opt(ts, 0);
+ let dt: DateTime = DateTime::from_naive_utc_and_offset(nt.unwrap(), Utc);
+ let res = dt.format("%Y-%m-%d");
+ return res.to_string();
+}
+
+pub fn get_mint(
+ address: &String,
+ token_balances: &Vec,
+ accounts: &Vec,
+ dapp_address: String,
+) -> String {
+ if dapp_address.eq("MoonCVVNZFSYkqNXP6bxHLPL6QQJiMagDL3qcqUQTrG")
+ || dapp_address.eq("6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P")
+ {
+ return "So11111111111111111111111111111111111111112".to_string();
+ }
+
+ let mut result: String = String::new();
+
+ token_balances
+ .iter()
+ .filter(|token_balance| token_balance.account.eq(address))
+ .for_each(|token_balance| {
+ result = token_balance.mint.clone();
+ });
+ return result;
+}
+
+pub fn get_amt(
+ address: &String,
+ input_inner_idx: u32,
+ inner_instructions: &Vec,
+ accounts: &Vec,
+ post_token_balances: &Vec,
+ dapp_address: String,
+ pre_balances: Vec,
+ post_balances: Vec,
+) -> f64 {
+ let mut result: f64 = 0.0;
+
+ let source_transfer_amt = get_token_transfer(
+ address,
+ input_inner_idx,
+ inner_instructions,
+ accounts,
+ "source".to_string(),
+ dapp_address.clone(),
+ pre_balances.clone(),
+ post_balances.clone(),
+ );
+
+ let destination_transfer_amt = get_token_transfer(
+ address,
+ input_inner_idx,
+ inner_instructions,
+ accounts,
+ "destination".to_string(),
+ dapp_address.clone(),
+ pre_balances.clone(),
+ post_balances.clone(),
+ );
+
+ if source_transfer_amt != 0.0 {
+ result = source_transfer_amt;
+ } else if destination_transfer_amt != 0.0 {
+ result = destination_transfer_amt;
+ }
+
+ if result != 0.0 {
+ post_token_balances
+ .iter()
+ .filter(|token_balance| token_balance.mint.eq(address))
+ .for_each(|token_balance: &TokenBalance| {
+ // TODO: uncomment if decimals is available in token_balance
+ // result = result / (u64::pow(10, decimals)) as f64;
+ });
+ }
+
+ result
+}
+
+pub fn get_token_transfer(
+ address: &String,
+ input_inner_idx: u32,
+ inner_instructions: &Vec,
+ accounts: &Vec,
+ account_name_to_check: String,
+ dapp_address: String,
+ pre_balances: Vec,
+ post_balances: Vec,
+) -> f64 {
+ if dapp_address.eq("6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P") {
+ return get_system_program_transfer(
+ address,
+ input_inner_idx,
+ inner_instructions,
+ accounts,
+ account_name_to_check,
+ pre_balances,
+ post_balances,
+ );
+ }
+
+ let mut result = 0.0;
+ let mut result_assigned = false;
+
+ inner_instructions
+ .iter()
+ .enumerate()
+ .for_each(|(inner_idx, inner_instruction)| {
+ let inner_program = inner_instruction.executing_account.clone();
+ if inner_program
+ .as_str()
+ .eq("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")
+ {
+ let b58_data = bs58::decode(inner_instruction.data.clone())
+ .into_vec()
+ .unwrap();
+ let (discriminator_bytes, rest) = b58_data.split_at(1);
+ let discriminator: u8 = u8::from(discriminator_bytes[0]);
+
+ match discriminator {
+ 3 => {
+ let input_accounts = inner_instruction.account_arguments.clone();
+
+ let source = input_accounts.get(0).unwrap().to_string();
+ let destination = input_accounts.get(1).unwrap().to_string();
+
+ let condition = if input_inner_idx > 0 {
+ inner_idx as u32 > input_inner_idx
+ } else {
+ true
+ };
+
+ if condition && address.eq(&source) {
+ let data = TransferLayout::deserialize(&mut rest.clone()).unwrap();
+ if !result_assigned {
+ result = -1.0 * data.amount as f64;
+ result_assigned = true;
+ }
+ }
+
+ if condition && address.eq(&destination) {
+ let data = TransferLayout::deserialize(&mut rest.clone()).unwrap();
+ if !result_assigned {
+ result = data.amount as f64;
+ result_assigned = true;
+ }
+ }
+ }
+ 12 => {
+ let input_accounts = inner_instruction.account_arguments.clone();
+
+ let source = input_accounts.get(0).unwrap().to_string();
+ let destination = input_accounts.get(2).unwrap().to_string();
+
+ let condition = if input_inner_idx > 0 {
+ inner_idx as u32 > input_inner_idx
+ } else {
+ true
+ };
+
+ if condition && address.eq(&source) {
+ let data = TransferLayout::deserialize(&mut rest.clone()).unwrap();
+ if !result_assigned {
+ result = -1.0 * data.amount as f64;
+ result_assigned = true;
+ }
+ }
+
+ if condition && address.eq(&destination) {
+ let data = TransferLayout::deserialize(&mut rest.clone()).unwrap();
+ if !result_assigned {
+ result = data.amount as f64;
+ result_assigned = true;
+ }
+ }
+ }
+ _ => {}
+ }
+ }
+ });
+
+ if !result_assigned {
+ let _result = get_token_22_transfer(
+ address,
+ input_inner_idx,
+ inner_instructions,
+ accounts,
+ account_name_to_check,
+ );
+ if _result.is_some() {
+ result = _result.unwrap();
+ }
+ }
+
+ result
+}
+
+pub fn get_token_22_transfer(
+ address: &String,
+ input_inner_idx: u32,
+ inner_instructions: &Vec,
+ accounts: &Vec,
+ account_name_to_check: String,
+) -> Option {
+ let mut result = None;
+ let mut result_assigned = false;
+
+ inner_instructions
+ .iter()
+ .enumerate()
+ .for_each(|(inner_idx, inner_instruction)| {
+ let inner_program = inner_instruction.executing_account.clone();
+
+ if inner_program
+ .as_str()
+ .eq("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb")
+ {
+ let b58_data = bs58::decode(inner_instruction.data.clone())
+ .into_vec()
+ .unwrap();
+ let (discriminator_bytes, rest) = b58_data.split_at(1);
+ let discriminator: u8 = u8::from(discriminator_bytes[0]);
+
+ match discriminator {
+ 3 => {
+ let input_accounts = inner_instruction.account_arguments.clone();
+
+ let source = input_accounts.get(0).unwrap().to_string();
+ let destination = input_accounts.get(1).unwrap().to_string();
+
+ let condition = if input_inner_idx > 0 {
+ inner_idx as u32 > input_inner_idx
+ } else {
+ true
+ };
+
+ if condition && address.eq(&source) {
+ let data = TransferLayout::deserialize(&mut rest.clone()).unwrap();
+ if !result_assigned {
+ result = Some(-1.0 * data.amount as f64);
+ result_assigned = true;
+ }
+ }
+
+ if condition && address.eq(&destination) {
+ let data = TransferLayout::deserialize(&mut rest.clone()).unwrap();
+ if !result_assigned {
+ result = Some(data.amount as f64);
+ result_assigned = true;
+ }
+ }
+ }
+ 12 => {
+ let input_accounts = inner_instruction.account_arguments.clone();
+
+ let source = input_accounts.get(0).unwrap().to_string();
+ let destination = input_accounts.get(2).unwrap().to_string();
+
+ let condition = if input_inner_idx > 0 {
+ inner_idx as u32 > input_inner_idx
+ } else {
+ true
+ };
+
+ if condition && address.eq(&source) {
+ let data = TransferLayout::deserialize(&mut rest.clone()).unwrap();
+ if !result_assigned {
+ result = Some(-1.0 * data.amount as f64);
+ result_assigned = true;
+ }
+ }
+
+ if condition && address.eq(&destination) {
+ let data = TransferLayout::deserialize(&mut rest.clone()).unwrap();
+ if !result_assigned {
+ result = Some(data.amount as f64);
+ result_assigned = true;
+ }
+ }
+ }
+ _ => {}
+ }
+ }
+ });
+
+ result
+}
+
+fn get_system_program_transfer(
+ address: &String,
+ input_inner_idx: u32,
+ inner_instructions: &Vec,
+ accounts: &Vec,
+ account_name_to_check: String,
+ pre_balances: Vec,
+ post_balances: Vec,
+) -> f64 {
+ let mut result = 0.0;
+ let mut result_assigned = false;
+
+ &inner_instructions
+ .iter()
+ .enumerate()
+ .for_each(|(inner_idx, inner_instruction)| {
+ let inner_program = inner_instruction.executing_account.clone();
+
+ if inner_program
+ .as_str()
+ .eq("11111111111111111111111111111111")
+ {
+ let b58_data = bs58::decode(inner_instruction.data.clone())
+ .into_vec()
+ .unwrap();
+ let (discriminator_bytes, rest) = b58_data.split_at(4);
+
+ let disc_bytes_arr: [u8; 4] = discriminator_bytes.to_vec().try_into().unwrap();
+ let discriminator: u32 = u32::from_le_bytes(disc_bytes_arr);
+
+ match discriminator {
+ 2 => {
+ let input_accounts = inner_instruction.account_arguments.clone();
+
+ let source = input_accounts.get(0).unwrap().to_string();
+ let destination = input_accounts.get(1).unwrap().to_string();
+
+ let condition = if input_inner_idx > 0 {
+ inner_idx as u32 > input_inner_idx
+ } else {
+ true
+ };
+
+ if condition && address.eq(&source) {
+ let data = TransferLayout::deserialize(&mut rest.clone()).unwrap();
+ if !result_assigned {
+ result = -1.0 * data.amount as f64;
+ result /= 10f64.powi(9);
+ result_assigned = true;
+ }
+ }
+
+ if condition && address.eq(&destination) {
+ let data = TransferLayout::deserialize(&mut rest.clone()).unwrap();
+ if !result_assigned {
+ result = 1.0 * data.amount as f64;
+ result /= 10f64.powi(9);
+ result_assigned = true;
+ }
+ }
+ }
+ _ => {}
+ }
+ }
+ });
+
+ if !result_assigned {
+ let index = accounts.iter().position(|r| r == address).unwrap();
+ let _result = post_balances[index] as f64 - pre_balances[index] as f64;
+ result = 1.0 * _result as f64;
+ result /= 10f64.powi(9);
+ }
+
+ result
+}
diff --git a/dex-trades-wasm-only/substreams.yaml b/dex-trades-wasm-only/substreams.yaml
new file mode 100644
index 0000000..8b2eafe
--- /dev/null
+++ b/dex-trades-wasm-only/substreams.yaml
@@ -0,0 +1,28 @@
+specVersion: v0.1.0
+package:
+ name: 'solana_raw_transactions_1_0_1'
+ version: v1.0.1
+
+protobuf:
+ files:
+ - output.proto
+ importPaths:
+ - ./proto
+
+
+imports:
+ sink_files: https://github.com/streamingfast/substreams-sink-files/releases/download/v2.1.0/substreams-sink-files-v2.1.0.spkg
+ solana: https://spkg.io/streamingfast/solana-common-v0.3.0.spkg
+
+binaries:
+ default:
+ type: wasm/rust-v1
+ file: target/wasm32-unknown-unknown/release/dex_trades.wasm
+
+modules:
+ - name: map_block
+ kind: map
+ inputs:
+ - map: solana:blocks_without_votes
+ output:
+ type: proto:sf.solana.transactions.v1.TransactionStats
\ No newline at end of file
diff --git a/dex-trades-wasm-only/utils/convert b/dex-trades-wasm-only/utils/convert
new file mode 100755
index 0000000..d0c7a4c
Binary files /dev/null and b/dex-trades-wasm-only/utils/convert differ
diff --git a/dex-trades-wasm-only/utils/convert.go b/dex-trades-wasm-only/utils/convert.go
new file mode 100644
index 0000000..c58e5fb
--- /dev/null
+++ b/dex-trades-wasm-only/utils/convert.go
@@ -0,0 +1,43 @@
+package main
+
+import (
+ "bytes"
+ "compress/zlib"
+ "fmt"
+ "io"
+ "log"
+ "os"
+)
+
+func main() {
+ // Read all data from stdin
+ bs, err := io.ReadAll(os.Stdin)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ // Compress the data using zlib
+ var b bytes.Buffer
+ w := zlib.NewWriter(&b)
+ _, err = w.Write(bs)
+ if err != nil {
+ log.Fatal(err)
+ }
+ err = w.Close()
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ // Get the compressed data
+ compressedData := b.Bytes()
+
+ // Build a string representation of the compressed byte slice
+ fmt.Print("const bytes = new Uint8Array([")
+ for i, c := range compressedData {
+ if i > 0 {
+ fmt.Print(",")
+ }
+ fmt.Print(c)
+ }
+ fmt.Println("]);")
+}
diff --git a/dex-trades-wasm-only/utils/script.sh b/dex-trades-wasm-only/utils/script.sh
new file mode 100755
index 0000000..d055428
--- /dev/null
+++ b/dex-trades-wasm-only/utils/script.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+name=${1}
+
+cd utils || exit
+./convert < ../pkg/${name}_bg.wasm > wasm_bytes.js
+gsutil cp wasm_bytes.js gs://tt-bq-js/solana/${name}/wasm_bytes.js
+gsutil cp ../pkg/${name}.js gs://tt-bq-js/solana/${name}/
\ No newline at end of file
diff --git a/dex-trades-wasm-only/utils/wasm_bytes.js b/dex-trades-wasm-only/utils/wasm_bytes.js
new file mode 100644
index 0000000..bc75f2a
--- /dev/null
+++ b/dex-trades-wasm-only/utils/wasm_bytes.js
@@ -0,0 +1 @@
+const bytes = new Uint8Array([120,156,236,253,11,156,93,71,113,32,140,119,247,121,222,123,206,153,57,243,144,52,210,232,81,125,36,219,35,75,194,227,215,140,48,78,118,90,225,142,44,132,98,135,77,54,252,255,155,111,45,8,6,115,198,128,37,20,224,219,120,173,187,177,72,244,129,178,25,18,101,87,9,218,221,97,163,253,172,37,130,104,19,101,51,33,74,50,2,45,12,70,36,19,16,160,37,54,81,140,146,40,137,8,34,17,68,4,179,254,126,85,221,231,113,207,189,35,141,176,1,217,107,233,247,155,123,250,221,93,93,85,93,213,93,93,205,94,247,246,183,112,198,24,255,121,145,108,183,118,239,222,205,119,111,23,217,95,182,157,239,102,20,139,95,124,247,118,103,247,110,10,216,165,159,60,218,124,60,186,155,109,119,119,155,140,140,239,222,206,31,229,187,179,152,252,235,81,182,157,81,165,143,110,231,143,240,221,219,163,221,229,127,108,123,80,10,241,71,182,123,197,103,77,127,61,250,232,163,172,136,222,189,221,122,148,126,108,93,119,189,84,154,186,245,111,116,127,233,199,217,189,251,17,29,124,196,4,31,213,193,71,179,65,61,194,196,111,90,93,214,59,95,255,166,165,247,223,255,206,215,191,249,173,111,120,211,3,111,189,63,125,251,219,222,122,255,219,31,216,249,230,215,61,244,230,127,253,0,19,152,190,12,211,223,116,255,91,31,120,231,253,163,27,223,248,192,235,111,29,222,248,250,145,59,70,111,27,189,245,118,22,86,50,220,49,124,231,3,183,221,246,198,219,95,62,124,231,232,200,79,62,112,91,75,134,183,63,176,235,254,219,55,14,143,190,225,206,55,14,191,254,141,63,121,219,29,175,123,221,40,179,171,25,70,55,222,62,58,124,219,237,111,188,253,13,163,119,12,63,176,177,148,193,244,241,109,175,79,31,248,201,93,247,191,97,231,219,30,190,127,231,3,111,100,22,102,88,84,202,240,214,159,122,203,235,31,216,137,253,97,189,213,194,175,127,243,155,222,252,214,93,247,191,113,231,219,222,114,255,79,141,220,193,162,106,225,183,239,218,249,230,183,210,96,24,191,82,225,55,103,133,7,219,187,246,147,15,189,237,173,15,80,223,28,204,209,95,202,241,192,206,157,111,219,89,212,190,164,148,244,134,7,94,255,83,111,50,237,107,200,199,165,212,93,15,238,124,219,59,153,176,206,240,207,243,62,71,56,253,66,56,182,96,194,230,14,231,190,176,124,91,216,172,139,113,206,132,99,51,46,68,189,46,28,87,8,33,22,9,71,44,22,92,8,75,4,181,250,18,75,112,155,15,112,102,113,172,129,243,64,48,206,93,177,212,22,30,23,98,153,240,108,139,121,194,233,22,221,156,11,206,3,46,184,237,10,135,113,207,182,109,155,51,142,255,132,133,255,108,206,57,99,182,45,184,45,106,60,22,150,240,57,198,99,142,46,238,214,6,87,172,226,30,183,56,119,61,94,252,99,150,180,4,70,82,128,199,140,49,209,211,99,217,182,195,31,230,63,246,99,142,197,89,143,91,227,187,185,106,54,103,88,224,253,128,237,190,229,129,183,188,109,231,255,45,152,243,240,235,118,190,253,1,214,221,83,2,204,91,94,247,208,67,111,251,73,246,31,120,111,41,114,231,3,58,246,48,175,253,103,206,153,226,193,143,126,150,15,126,158,159,225,95,224,159,229,159,231,159,225,255,15,255,209,119,172,252,34,255,13,254,223,249,175,241,255,255,111,241,223,230,255,250,24,255,109,254,155,252,20,255,8,63,198,143,241,255,193,127,135,79,243,15,243,207,241,159,250,28,255,111,252,105,254,41,126,130,127,148,127,156,159,228,31,227,159,224,179,252,127,242,79,242,39,248,211,252,119,249,211,252,253,124,219,123,249,211,252,15,248,159,240,207,241,163,252,207,248,89,62,199,191,204,255,51,255,115,126,239,45,247,255,60,255,95,252,95,237,227,255,191,63,230,111,252,127,249,240,239,243,167,249,111,241,3,252,211,252,40,255,61,126,156,215,255,113,127,237,243,252,175,15,10,209,181,155,63,186,154,169,179,98,34,137,214,48,136,20,27,17,76,140,125,175,255,131,80,235,38,186,4,103,245,128,130,92,237,63,55,195,212,250,248,41,110,99,232,153,191,52,161,70,196,129,171,243,167,243,160,0,174,46,124,193,4,35,27,34,117,70,164,96,41,63,29,18,56,22,136,192,90,43,216,168,53,39,32,82,231,89,10,118,57,205,166,180,237,16,169,25,158,202,26,68,234,44,75,165,181,154,169,163,124,34,225,107,74,176,128,72,205,137,52,113,135,132,175,188,173,246,152,250,244,167,78,176,13,140,45,3,119,72,48,233,41,63,238,73,4,118,80,128,183,150,177,100,112,148,49,16,177,4,110,160,10,131,155,46,255,252,183,246,253,202,241,167,62,118,207,107,236,177,172,151,210,6,11,127,68,200,131,188,82,181,94,215,38,64,100,227,251,18,151,245,34,221,142,123,18,31,211,125,245,217,191,123,247,99,222,8,99,88,141,159,216,138,111,139,44,224,106,146,167,84,113,34,84,136,237,128,80,253,248,27,255,123,14,182,114,182,69,54,112,53,197,83,16,234,110,147,126,146,21,25,220,241,200,1,142,240,0,161,102,153,201,49,151,231,224,106,47,79,147,0,184,58,192,51,128,114,117,153,165,73,8,92,29,46,226,128,175,181,38,249,168,213,228,250,123,138,143,90,15,3,143,223,2,92,65,10,65,94,118,125,10,97,30,216,152,226,68,179,188,150,77,123,154,72,156,163,86,12,28,252,17,17,2,223,116,4,163,156,81,97,3,135,186,46,198,70,196,143,234,159,123,244,207,221,186,209,38,31,181,6,244,231,195,163,98,141,254,218,62,106,13,7,80,163,81,198,95,226,203,64,128,29,63,206,17,106,182,61,134,115,23,224,228,226,183,135,223,92,29,229,233,26,22,58,129,250,223,63,123,130,169,213,234,212,255,156,97,241,127,228,44,96,129,58,122,236,4,83,235,212,147,89,84,22,113,161,26,241,76,22,1,81,252,22,136,160,102,154,15,71,2,154,66,229,109,139,34,176,135,132,47,5,254,216,248,135,73,221,47,233,105,108,177,11,84,64,196,179,26,209,173,96,129,157,35,158,21,75,77,206,51,28,6,55,189,251,55,158,253,237,175,92,120,230,253,75,127,164,132,184,132,99,86,35,186,13,172,140,222,190,196,165,95,164,119,23,233,94,170,62,113,110,134,173,101,140,42,87,51,69,64,32,194,117,107,242,0,110,112,141,23,184,38,148,187,45,138,53,105,1,207,80,137,151,80,73,40,111,60,234,129,72,77,81,13,167,179,28,79,230,57,34,53,43,210,164,166,201,59,163,94,53,45,210,164,174,201,58,167,232,104,173,53,39,70,173,25,161,191,183,143,90,71,133,38,111,132,181,58,203,83,168,229,21,92,224,41,212,243,208,101,158,66,164,14,23,13,108,250,133,102,179,121,145,143,90,115,28,249,200,136,56,197,33,202,177,238,36,70,250,4,96,2,244,126,161,127,247,154,223,103,184,238,194,140,24,181,206,152,239,163,98,84,156,51,223,83,98,212,186,200,3,3,24,234,98,134,135,28,68,252,56,177,62,68,59,207,30,3,27,63,52,186,80,254,12,101,238,212,40,211,136,226,121,17,70,179,151,196,219,192,88,134,17,138,143,119,192,131,91,193,202,56,109,43,30,216,69,122,206,107,68,35,234,205,230,92,207,150,95,76,167,189,45,234,203,39,124,216,204,230,198,34,221,25,143,250,243,233,190,219,164,159,252,126,207,118,198,97,190,191,179,157,115,155,14,179,125,71,193,32,250,174,198,32,172,86,6,97,55,162,91,192,6,43,103,16,118,11,131,200,23,166,54,6,97,55,162,97,176,179,53,183,29,49,76,122,25,49,22,205,139,24,206,182,104,113,142,24,237,19,47,112,213,89,146,99,70,7,86,113,61,160,134,253,253,100,4,214,60,168,113,123,38,57,205,93,156,97,106,93,38,57,157,254,107,19,210,146,211,254,207,229,65,148,156,14,156,49,193,231,75,114,178,87,51,53,41,42,146,211,21,228,62,45,83,121,237,50,149,135,40,236,151,101,42,191,163,76,101,234,25,220,244,193,189,199,254,108,234,215,126,243,23,158,102,63,110,183,72,90,63,18,9,24,220,244,177,19,191,253,87,31,159,61,255,149,55,190,38,226,5,254,174,211,213,187,32,50,80,180,10,89,245,184,39,113,49,221,85,126,170,142,28,159,97,183,48,246,10,198,192,85,135,142,231,11,32,18,98,98,41,129,171,54,71,112,16,57,38,66,13,24,161,9,50,236,181,144,0,186,112,146,230,17,187,44,36,237,110,20,72,40,195,233,76,236,122,178,36,118,93,164,164,53,38,101,125,81,180,134,203,44,87,77,129,233,23,178,162,151,74,149,7,219,162,158,92,166,219,195,77,142,125,188,168,124,218,200,116,179,37,153,238,48,215,50,221,153,82,220,1,158,38,56,144,243,165,56,148,7,177,239,151,43,242,32,118,106,175,104,145,7,103,248,168,117,212,200,131,115,124,212,154,50,223,103,249,168,53,105,190,47,150,100,198,166,88,160,204,216,149,7,78,178,20,186,115,233,241,61,205,102,19,5,79,148,30,93,45,61,254,122,179,217,60,218,34,61,98,75,71,11,65,113,138,231,146,34,202,175,195,185,36,137,66,37,242,36,136,243,214,158,100,21,121,85,75,154,214,61,153,164,41,126,52,92,18,192,224,166,95,207,241,84,35,230,71,254,243,199,255,238,207,255,172,249,231,95,103,63,18,89,65,70,99,210,210,44,93,132,139,130,54,116,181,230,67,87,91,163,171,5,110,193,142,11,228,180,13,238,204,143,156,246,54,18,249,53,2,13,155,244,141,69,186,187,45,114,13,134,207,163,18,156,55,232,83,70,129,51,6,125,42,40,128,211,123,182,52,189,115,124,97,58,65,9,51,91,116,130,121,103,117,94,157,224,108,49,213,115,197,84,35,106,14,135,253,237,96,23,243,129,221,213,96,23,224,42,59,85,151,190,93,226,18,23,191,61,195,134,24,43,77,132,173,97,88,154,136,14,128,246,183,69,94,62,17,103,51,64,159,47,81,114,125,91,228,231,83,113,57,203,209,228,223,183,169,248,217,102,179,121,246,187,50,21,125,237,83,193,231,155,138,80,79,5,215,12,123,238,247,114,232,187,106,246,247,42,12,187,81,97,215,26,132,126,11,63,45,120,117,71,126,90,31,47,49,235,142,179,160,153,117,155,254,77,172,184,96,214,29,88,177,165,194,241,18,179,158,204,114,28,248,63,128,89,239,67,178,254,62,51,235,222,92,199,159,254,189,54,29,255,232,239,87,84,250,153,106,196,92,53,162,89,141,152,172,70,76,85,35,142,30,175,182,82,141,152,171,70,156,173,70,92,172,70,156,254,189,74,196,185,106,196,165,106,196,158,106,29,251,179,136,214,189,19,43,126,156,147,58,146,237,157,120,250,219,215,123,39,147,34,93,195,170,91,30,185,254,58,112,45,250,107,163,172,164,172,43,180,83,35,251,46,64,123,197,5,113,89,190,103,49,96,244,12,104,217,179,24,188,234,158,197,242,235,112,207,162,163,22,155,145,207,245,164,197,54,162,193,231,176,103,97,102,125,24,172,76,199,233,56,235,195,149,61,139,21,87,218,179,88,121,149,61,139,85,47,144,61,139,235,106,182,111,47,45,223,167,89,220,147,240,70,244,178,182,21,253,101,32,212,31,126,46,155,71,209,154,238,98,186,171,254,38,79,119,91,211,61,76,247,212,47,127,62,75,247,90,211,3,76,15,212,76,158,94,145,40,66,76,15,213,223,230,233,97,107,122,23,166,119,169,127,255,133,44,189,171,53,189,27,211,187,213,137,60,29,23,214,83,44,205,39,2,151,152,110,45,243,140,77,180,196,118,145,8,164,238,104,205,27,142,136,97,224,106,168,53,54,24,193,21,78,45,111,141,245,70,196,0,112,21,183,198,118,88,54,5,98,140,143,44,59,254,85,14,245,29,137,80,124,115,116,251,115,83,252,187,140,226,239,155,35,19,183,195,145,73,128,234,61,111,81,239,81,38,144,161,18,122,242,56,120,16,222,194,88,82,67,169,217,139,37,184,217,145,73,77,53,251,55,227,26,98,244,162,26,248,116,218,210,114,86,98,112,64,128,151,109,112,224,28,20,233,113,220,147,212,49,189,142,82,225,158,63,201,5,193,186,122,102,46,15,248,40,21,214,180,250,52,201,83,106,40,241,144,206,189,130,79,212,80,54,183,193,165,131,19,47,147,205,189,146,108,94,83,181,241,200,1,151,104,198,203,228,70,175,36,55,186,36,124,197,224,150,78,78,92,18,190,122,192,45,157,156,184,224,230,39,39,244,173,79,78,220,248,45,224,162,96,21,231,101,215,167,208,147,7,54,166,224,150,24,142,187,105,178,217,108,162,76,22,131,139,178,83,8,110,9,47,92,68,76,166,1,254,163,250,231,30,253,115,183,110,84,159,156,208,39,157,156,208,151,62,57,233,162,81,18,63,240,160,134,171,191,95,58,45,9,244,119,72,167,40,109,39,39,23,230,218,164,170,125,127,82,145,51,14,86,35,142,252,73,235,201,73,87,193,100,128,171,143,157,201,143,5,81,55,250,106,30,180,199,94,148,231,130,102,128,47,157,11,94,135,231,130,31,111,63,23,252,120,245,92,176,26,241,204,199,231,57,23,188,13,155,56,249,237,28,187,87,32,8,158,206,131,43,129,171,247,255,175,242,121,249,39,178,80,36,94,148,152,111,198,183,96,204,23,109,152,223,182,251,101,43,107,188,132,249,109,219,171,118,182,59,166,17,191,109,211,230,37,180,71,180,255,68,59,218,127,162,138,246,213,136,103,62,49,63,218,191,24,145,247,253,47,33,239,117,137,188,83,127,208,190,207,243,7,213,29,152,106,196,220,31,204,131,188,183,98,19,207,124,45,63,110,187,5,184,250,135,255,149,29,183,241,239,62,102,63,135,67,53,24,220,244,31,158,254,235,247,124,241,219,95,62,21,93,21,179,75,187,227,102,124,173,152,29,23,187,227,126,170,102,62,146,203,219,174,154,46,2,215,130,235,47,56,17,165,16,192,191,147,189,241,239,24,221,91,183,223,170,232,126,248,35,109,232,62,251,145,10,118,159,169,70,156,255,200,60,232,62,140,77,252,167,47,182,136,40,79,124,177,44,147,28,253,153,19,207,143,76,50,80,58,107,206,145,223,32,125,79,59,210,163,98,36,151,106,210,200,80,159,129,128,165,29,80,191,202,210,179,211,184,56,59,141,115,2,125,120,16,35,18,10,131,99,230,28,167,29,19,99,196,68,58,5,152,23,19,135,196,27,240,207,118,233,139,49,8,27,246,152,226,164,220,98,228,131,178,6,161,90,255,144,116,33,80,67,169,180,48,141,142,40,100,63,9,237,114,145,133,144,109,34,181,40,152,192,202,45,53,48,161,235,22,99,88,199,94,174,214,109,142,24,126,54,185,58,221,60,97,24,16,211,84,150,212,113,22,116,201,156,56,126,235,31,102,216,136,56,200,53,141,37,139,161,30,175,49,172,133,15,137,41,158,244,218,244,117,88,27,21,12,137,67,92,46,129,222,13,140,41,107,115,100,193,98,160,179,148,126,83,97,29,131,33,44,202,187,85,211,133,177,91,190,174,17,106,241,83,28,186,119,70,12,186,114,6,61,36,14,208,78,202,144,216,207,101,23,254,78,34,108,172,64,71,145,5,3,198,197,50,20,1,81,133,56,68,39,18,234,3,63,135,195,212,35,84,103,191,53,195,212,204,191,61,193,226,221,44,71,254,57,12,19,30,83,247,27,26,66,83,180,153,181,4,67,189,166,11,123,184,30,107,147,146,44,181,62,149,22,42,220,19,137,27,177,32,200,201,107,72,236,194,63,15,203,222,108,30,145,211,114,89,83,76,214,205,124,190,75,246,85,230,211,228,209,115,186,72,207,233,98,44,241,156,231,53,184,250,188,46,129,64,207,171,153,213,176,125,86,151,65,104,102,85,192,18,61,171,102,26,33,208,179,186,184,220,169,3,28,250,198,237,49,232,213,19,147,4,208,135,243,90,223,217,136,184,153,53,221,198,36,55,64,67,208,91,25,232,113,106,125,123,12,106,38,241,48,151,117,211,17,131,39,178,86,204,125,176,144,121,63,91,153,247,139,249,188,47,195,89,14,23,60,203,136,15,109,6,115,56,45,134,173,181,110,74,218,69,122,46,205,233,85,173,122,202,152,175,37,45,107,81,139,128,100,181,11,72,238,21,86,140,250,136,216,168,197,170,59,128,67,141,118,18,161,123,68,172,215,187,141,67,122,203,176,116,84,54,16,218,165,53,96,234,103,78,84,206,169,242,8,3,195,102,22,1,3,229,229,39,174,158,254,244,232,239,165,165,229,199,172,26,3,197,170,209,190,55,188,174,77,180,88,119,149,189,225,117,87,217,27,94,119,149,189,225,117,87,217,27,94,119,149,189,225,117,87,217,27,94,247,66,221,27,30,190,238,247,134,235,87,221,27,94,95,236,13,27,121,164,117,111,56,40,246,134,189,84,125,236,163,185,197,64,93,29,255,232,181,238,13,91,229,189,225,53,102,227,119,125,145,110,151,119,134,135,77,250,198,239,215,190,240,123,17,1,120,203,190,112,193,100,190,95,251,194,71,62,218,46,150,126,180,42,150,86,35,206,127,116,158,125,97,18,75,155,127,155,107,97,40,150,126,227,139,101,3,201,15,252,105,166,147,125,15,182,202,158,155,78,246,243,95,217,255,205,39,159,58,246,237,31,191,22,157,204,140,175,85,39,11,10,157,204,75,213,239,156,40,153,201,28,61,81,209,201,26,21,141,172,178,128,217,202,43,171,99,29,44,22,109,229,151,245,177,14,230,76,223,107,125,172,64,252,235,72,31,155,58,209,134,248,199,79,84,240,252,84,53,226,201,19,243,232,99,183,188,136,246,206,74,216,108,104,247,249,61,242,176,203,8,220,182,55,70,8,94,160,111,71,147,220,239,251,238,217,247,2,125,175,188,123,118,225,143,218,208,247,153,63,170,96,235,190,63,174,30,240,253,241,60,232,251,50,108,98,238,47,242,237,4,20,234,79,253,105,203,137,199,229,34,184,10,184,58,184,247,68,22,4,224,234,200,133,60,21,177,238,208,147,121,48,193,57,57,159,7,87,99,67,69,42,10,81,151,191,82,222,183,56,254,231,207,211,89,138,191,64,146,178,199,136,140,146,218,6,198,164,40,72,6,69,178,107,216,102,54,253,110,39,21,35,13,85,72,229,170,108,254,5,183,235,86,38,19,239,249,220,100,246,23,66,38,181,206,100,114,228,207,219,200,228,252,159,87,168,226,114,53,98,239,211,173,100,226,151,200,228,133,132,146,134,176,158,55,148,188,26,227,118,202,24,217,142,178,47,33,164,90,173,206,127,165,13,33,15,253,93,5,255,142,85,35,78,254,221,60,8,185,1,155,56,244,213,92,222,94,142,45,190,231,196,243,123,234,97,119,194,214,231,247,90,17,12,110,250,167,95,250,229,247,62,125,238,31,254,235,244,238,215,216,109,242,202,224,166,233,47,254,234,207,61,245,203,191,251,71,219,126,36,18,237,183,54,186,58,223,218,48,160,88,232,173,141,6,161,247,228,252,22,234,66,75,38,154,0,58,92,232,176,198,233,178,129,38,128,182,83,193,239,39,254,63,143,98,119,24,117,150,21,59,2,59,108,57,141,58,252,222,19,133,230,51,245,222,19,213,11,2,238,85,193,239,93,5,252,254,245,3,254,5,89,213,127,7,224,15,59,223,207,232,8,254,190,226,126,70,119,170,254,230,61,37,240,251,169,250,242,123,78,20,135,131,127,250,158,182,233,240,175,58,29,181,171,76,71,253,250,153,142,95,66,216,63,255,135,130,97,80,104,148,239,57,209,102,141,241,222,202,238,238,133,106,196,51,213,136,35,213,136,227,213,136,83,213,136,139,239,169,68,52,171,57,38,179,136,107,186,65,80,222,67,206,85,133,245,152,114,248,217,92,130,31,2,174,30,127,170,44,193,127,246,169,23,183,53,148,25,223,243,107,80,114,53,217,202,221,118,253,74,251,215,143,73,201,76,187,73,201,76,213,164,164,26,49,55,51,143,82,188,254,123,176,167,243,220,100,166,189,31,254,252,95,157,252,250,111,206,222,116,45,232,251,120,39,244,237,41,214,233,56,85,103,78,206,96,244,93,217,66,49,119,178,100,69,50,123,178,106,69,178,160,93,31,107,219,85,44,166,198,175,39,139,169,247,53,155,205,201,214,213,226,123,129,222,87,222,178,156,62,217,110,238,119,178,106,238,87,141,120,230,228,60,232,189,142,44,166,158,204,117,135,27,128,171,103,159,202,131,9,112,245,193,47,229,193,213,192,213,231,138,224,26,28,198,215,103,242,83,240,239,30,161,60,119,82,129,193,77,191,117,234,63,28,250,213,179,127,118,226,67,70,185,248,203,125,151,222,247,190,153,111,124,61,237,72,56,126,103,1,215,140,183,149,112,172,130,112,68,170,62,252,141,18,225,28,249,70,126,51,217,16,138,213,70,40,107,232,72,78,147,66,18,230,200,142,84,66,241,97,153,62,236,235,135,62,30,107,54,155,195,207,191,48,229,117,150,109,59,66,222,46,100,219,207,62,241,223,191,236,142,180,192,217,126,14,112,190,142,248,208,119,75,135,115,11,211,156,175,183,175,153,223,168,174,153,213,136,125,213,136,131,223,232,120,69,117,33,12,174,202,151,110,14,128,17,67,160,58,28,156,63,6,142,81,60,30,231,24,99,55,162,117,192,98,137,60,236,197,40,97,126,236,165,155,38,215,171,136,121,106,182,125,13,158,173,174,193,213,136,103,102,231,89,131,135,242,122,247,156,171,138,165,213,136,179,213,136,139,121,68,118,38,244,151,149,28,135,255,170,18,49,93,141,152,253,171,74,29,83,127,88,189,21,95,141,152,169,70,204,253,97,165,142,153,139,213,241,87,35,246,125,173,202,63,190,86,169,227,228,95,87,47,244,255,77,245,66,127,53,98,234,111,114,40,127,23,165,145,231,77,120,175,108,112,150,29,213,240,118,78,81,239,204,41,204,45,165,142,43,163,40,239,112,190,168,13,190,59,172,146,207,7,167,8,107,237,64,231,243,1,221,45,196,145,43,120,165,41,166,193,89,200,52,184,87,155,6,239,122,154,134,14,62,105,158,151,105,240,115,174,112,236,219,109,220,247,240,255,174,242,184,106,196,108,53,226,242,183,171,7,126,213,28,7,254,247,243,38,206,244,189,176,206,12,205,61,199,151,206,12,175,163,51,195,51,79,183,97,253,254,47,87,48,246,80,53,226,216,151,231,57,51,236,125,113,202,204,255,233,139,223,5,153,249,5,140,189,215,141,196,124,225,83,237,150,74,159,170,202,131,167,170,242,224,169,121,36,230,158,23,0,59,45,237,25,25,91,216,151,216,105,206,78,159,31,211,185,231,194,78,47,254,77,27,66,30,249,219,10,254,29,175,70,156,250,219,121,216,105,252,194,66,72,99,44,242,18,66,94,71,8,185,255,171,109,8,57,247,213,170,246,95,141,184,248,213,121,16,178,251,197,185,190,27,115,212,239,241,158,152,191,237,250,50,165,191,46,87,248,233,143,181,223,33,249,88,245,14,73,53,226,252,199,230,89,225,187,174,251,99,215,139,23,190,48,51,251,185,63,254,249,254,107,193,223,203,157,240,183,171,216,169,113,83,245,247,79,148,142,89,47,60,241,93,57,102,117,182,93,87,252,248,223,53,155,205,179,252,58,59,103,125,242,137,118,137,245,137,170,196,90,21,97,15,126,106,30,124,142,158,35,62,215,75,248,60,217,138,207,6,155,107,90,60,168,33,82,4,173,226,129,208,175,253,212,38,186,44,206,4,11,218,209,213,237,140,174,198,190,191,245,2,102,189,96,183,126,170,46,236,61,145,237,113,249,234,220,222,19,197,107,37,212,68,129,177,205,43,96,172,185,172,15,54,184,224,197,219,51,212,52,225,209,242,133,221,189,37,140,92,159,106,180,156,31,179,202,30,200,59,112,202,240,59,221,140,114,58,239,9,118,132,87,160,225,197,193,87,94,170,254,120,111,110,126,231,171,217,235,13,94,229,75,90,207,39,188,236,156,172,246,237,109,179,143,187,184,183,98,168,118,58,139,128,250,21,9,184,166,191,3,227,234,182,180,241,86,207,232,46,124,190,232,142,206,32,165,200,206,32,201,30,122,174,211,193,192,124,228,232,23,139,135,175,106,11,218,141,51,84,102,174,213,124,39,84,152,99,147,118,134,209,238,18,91,47,42,37,249,221,154,199,63,58,117,126,150,3,223,196,71,173,25,174,25,166,113,98,208,165,29,7,32,242,105,231,222,73,119,252,47,49,110,154,220,0,154,77,236,238,206,107,205,144,56,196,237,49,232,210,147,120,152,87,124,156,131,241,133,61,197,3,141,205,237,43,208,148,89,129,134,196,49,227,82,224,40,207,81,2,196,144,24,190,242,64,166,244,64,38,205,64,14,148,7,226,198,255,82,235,47,174,25,241,60,99,56,108,70,234,110,139,124,112,231,245,59,82,237,224,244,124,195,61,74,195,61,79,126,113,167,91,147,145,62,183,231,112,203,61,104,100,158,30,12,32,103,177,243,21,114,159,230,105,226,181,242,4,77,171,4,135,140,130,143,150,28,36,184,101,222,225,125,183,248,236,76,193,55,142,242,202,18,126,45,28,96,142,150,112,47,231,53,7,47,180,45,225,103,46,84,37,208,106,196,229,106,196,222,175,84,207,5,190,210,186,200,231,204,38,120,113,42,93,230,30,223,75,155,170,215,155,202,117,225,211,237,34,234,167,171,34,106,245,62,232,193,63,154,71,68,173,191,0,246,176,74,88,105,174,147,190,180,135,117,29,157,81,29,56,223,134,144,167,207,87,159,62,168,70,92,58,63,207,30,86,237,197,201,78,231,94,98,167,215,41,59,61,213,206,78,171,71,82,251,170,252,245,224,167,231,97,167,254,139,8,123,75,71,7,198,56,124,161,216,123,85,182,251,194,186,17,112,125,122,129,248,227,118,188,173,58,125,216,55,87,197,219,185,121,240,214,123,158,196,0,81,224,109,129,116,26,109,109,68,91,127,75,196,10,180,165,43,188,110,134,222,138,231,190,220,192,221,192,88,226,222,101,94,215,117,149,183,57,178,219,94,36,97,96,101,247,20,190,196,101,173,205,10,142,149,173,224,4,98,166,135,124,149,151,28,196,37,150,225,171,86,193,87,61,37,198,201,227,36,105,198,198,60,203,42,204,179,188,204,152,31,209,211,50,232,107,85,175,55,90,29,208,211,187,38,244,180,22,168,134,93,197,80,188,246,157,111,223,148,44,171,126,183,106,89,85,141,56,147,69,180,200,18,4,226,156,246,31,231,24,99,103,111,107,154,235,135,136,5,237,86,84,185,64,224,62,143,44,181,101,19,181,140,151,173,236,84,227,101,153,157,186,215,196,78,189,171,176,211,207,125,233,90,216,169,167,220,182,205,193,142,38,127,23,231,187,110,59,31,31,253,78,55,12,191,55,12,209,171,50,68,131,47,110,105,231,47,180,114,134,248,204,159,180,49,196,125,159,153,135,221,57,29,188,33,178,182,169,98,87,241,134,136,252,165,240,118,216,238,13,145,129,87,242,150,216,238,13,145,65,80,242,102,216,238,13,145,65,88,242,102,216,238,13,145,65,87,201,155,98,187,55,68,6,221,37,111,138,47,32,111,136,206,247,200,27,162,215,201,27,162,95,242,134,152,83,125,139,55,196,193,77,143,157,57,248,171,83,95,254,218,95,124,142,189,230,26,94,204,49,55,238,90,189,34,118,21,94,17,221,84,61,253,201,210,139,57,79,126,178,226,21,81,219,112,151,253,34,154,213,201,43,86,167,26,114,139,194,53,226,108,246,40,206,92,233,217,28,175,236,28,241,116,150,227,201,239,219,179,57,197,81,224,117,244,108,206,169,79,182,241,147,11,159,172,222,110,168,70,236,123,98,30,247,136,78,240,2,184,156,0,131,155,126,231,55,223,251,91,191,125,250,23,191,152,93,151,252,133,111,255,205,103,62,125,230,19,191,242,175,58,170,11,243,92,77,48,62,2,90,215,183,168,56,240,118,82,245,43,205,146,3,138,253,69,224,10,215,37,219,180,4,183,172,69,116,88,17,109,141,232,215,145,63,185,159,111,54,155,115,207,255,153,247,124,183,21,58,206,67,87,113,91,193,77,213,23,159,45,25,30,156,126,182,106,120,96,181,221,86,232,60,15,238,85,231,193,187,158,230,225,187,100,123,80,186,174,112,224,217,118,103,79,205,202,137,231,177,106,196,201,106,196,185,103,171,219,102,213,136,61,205,142,238,61,190,147,235,10,226,133,181,21,108,124,22,46,116,43,248,255,128,155,146,215,205,142,240,204,95,180,239,77,252,69,117,165,172,222,88,60,248,151,243,236,8,243,23,0,94,150,148,59,243,18,205,75,71,20,215,145,153,237,133,175,181,95,30,251,251,234,229,177,106,196,236,223,119,70,200,246,75,234,118,251,37,117,139,94,76,80,164,195,242,88,94,253,94,187,61,6,180,11,34,34,17,104,183,91,44,67,234,146,171,38,202,98,81,11,92,227,161,29,128,77,239,193,170,179,34,93,195,130,201,73,46,94,185,59,124,116,53,83,147,245,210,70,220,24,240,77,254,168,181,145,158,220,5,22,211,131,22,195,146,38,126,72,220,145,88,35,226,176,175,223,64,56,132,191,108,68,76,249,164,239,33,242,249,105,18,198,147,148,117,72,174,195,159,245,114,61,226,173,147,110,98,163,22,163,221,137,187,216,1,7,248,166,102,179,217,140,71,173,189,14,112,88,63,34,246,224,239,186,17,209,116,20,35,26,60,235,76,36,66,211,32,22,115,244,22,76,66,206,199,236,196,221,98,182,132,228,18,107,12,24,44,73,55,48,150,116,169,218,68,82,83,75,182,42,14,181,93,234,151,154,77,123,71,99,103,36,192,6,166,120,154,176,17,225,3,3,119,115,196,130,0,132,114,70,196,52,38,10,53,45,210,248,167,37,131,112,147,192,126,134,56,48,63,228,65,139,228,188,91,140,65,151,250,83,134,116,222,165,190,69,191,88,248,140,147,170,169,159,153,97,241,58,105,133,181,0,108,176,55,176,1,197,39,146,218,93,108,0,106,234,89,190,3,103,162,220,11,129,208,62,106,235,223,25,243,59,103,126,207,154,223,139,230,183,233,232,223,73,7,108,21,166,242,70,16,106,198,78,149,189,83,46,197,117,69,127,222,0,66,29,112,82,217,11,2,33,174,236,157,152,77,164,178,75,113,185,100,147,144,227,74,72,79,9,89,211,99,33,192,21,128,188,217,234,232,187,241,123,255,31,24,220,76,211,233,171,112,27,41,206,181,9,37,182,68,63,132,60,222,87,171,94,77,113,209,230,136,135,63,132,17,48,30,109,2,95,173,31,39,59,186,111,179,241,200,13,96,9,2,157,196,91,191,58,201,97,163,72,174,32,198,22,91,67,37,107,191,54,145,44,209,232,180,228,59,65,167,240,149,216,191,164,232,152,192,108,61,109,217,54,5,96,227,252,246,155,154,53,130,76,139,20,108,184,49,166,231,123,142,11,73,187,211,211,66,137,241,72,229,176,18,67,98,70,36,174,18,19,93,75,107,27,235,110,24,109,220,200,98,30,116,109,220,184,209,18,27,55,118,111,244,54,250,27,3,96,106,102,207,9,166,234,228,156,231,102,96,234,137,34,184,22,152,58,93,4,135,128,169,61,63,123,130,129,27,63,197,163,81,136,162,165,96,199,63,158,176,232,149,89,175,226,91,91,251,148,68,13,76,196,190,72,23,132,58,107,167,241,135,104,71,116,68,156,183,65,32,57,157,195,223,8,145,59,164,254,124,248,221,39,152,10,141,191,104,166,62,82,4,87,2,83,31,47,130,43,128,169,223,203,251,51,2,203,163,30,211,159,31,154,183,63,203,27,152,152,247,167,233,20,253,217,235,232,254,236,193,223,229,72,92,225,40,246,231,203,8,129,62,227,188,136,169,175,189,59,107,241,78,216,16,13,152,22,55,229,45,198,173,45,98,10,8,243,116,183,25,241,105,91,113,185,1,37,3,36,237,112,4,91,249,51,28,87,47,181,50,0,76,189,63,31,215,29,176,38,31,151,154,119,92,107,26,152,152,143,235,98,9,206,151,77,171,151,240,119,13,50,143,240,78,68,183,69,109,232,54,22,192,162,70,116,35,196,138,193,234,65,233,119,36,194,198,125,13,123,12,250,144,111,245,160,72,210,143,34,200,138,134,236,134,21,141,200,134,123,238,139,28,236,200,81,59,113,27,50,2,183,17,185,212,71,91,210,195,68,199,108,121,35,44,107,68,30,172,108,68,62,172,106,68,53,234,183,141,83,83,71,166,229,164,176,180,16,199,4,44,37,113,108,214,9,199,2,197,165,149,97,228,191,227,146,133,63,168,163,204,20,81,212,15,232,168,111,96,212,128,142,186,91,71,253,59,4,241,50,29,245,10,29,117,24,163,4,69,41,46,123,20,151,253,138,19,95,92,164,184,236,83,92,58,138,75,143,222,135,226,50,202,186,240,65,44,102,47,188,152,233,166,193,236,133,20,203,134,241,145,133,21,201,198,243,241,171,103,15,95,174,179,126,6,179,70,243,102,69,220,167,181,101,214,65,116,97,234,75,8,80,71,59,106,15,111,197,24,3,226,167,120,52,12,61,209,74,131,163,63,144,227,232,43,12,5,172,51,184,122,7,182,163,139,154,169,120,138,71,183,64,127,180,220,20,189,187,173,232,205,166,232,157,216,189,112,56,0,118,11,99,234,175,103,249,230,232,101,176,34,231,63,203,242,130,63,86,161,139,21,141,104,153,161,139,17,96,114,113,120,75,0,108,136,49,245,151,79,252,242,251,189,205,209,6,184,231,190,70,180,196,212,115,87,94,207,15,152,14,12,105,218,149,175,222,196,229,61,225,203,176,239,6,112,79,241,104,61,172,202,73,179,55,47,122,91,165,11,171,26,152,72,93,24,5,38,131,112,3,65,0,69,75,34,240,117,0,81,96,106,9,231,29,8,52,48,145,106,217,8,76,214,195,245,88,203,126,172,197,195,90,110,134,193,200,55,181,212,230,173,101,48,35,55,33,95,14,76,146,31,36,166,62,132,181,116,97,45,107,193,83,98,115,228,152,138,70,242,138,126,2,196,6,54,45,162,53,248,251,187,66,122,228,109,73,125,2,75,46,198,146,67,48,190,73,188,6,87,78,42,121,103,94,242,77,8,193,105,145,140,111,18,63,130,26,206,144,56,41,228,93,166,19,86,184,22,171,121,10,171,9,176,154,155,224,150,28,29,238,200,235,88,82,225,169,152,50,227,164,208,165,98,228,19,9,61,179,37,212,52,69,249,233,90,193,146,45,40,174,9,232,194,239,87,141,90,71,29,232,133,87,141,10,6,189,202,79,97,139,254,138,83,253,66,23,241,199,253,72,73,183,104,174,60,233,132,67,65,54,186,95,32,18,9,239,8,76,167,89,120,91,64,11,143,10,179,180,219,130,12,136,38,226,214,128,88,184,234,205,34,134,131,108,178,76,196,45,129,98,114,80,241,240,101,65,134,12,38,101,3,166,128,226,225,250,128,214,91,85,207,82,214,5,180,252,168,190,44,226,230,0,186,27,209,178,108,245,48,177,107,131,12,73,77,196,16,214,184,74,241,240,166,0,217,238,226,140,79,152,228,27,233,149,181,254,140,217,152,216,27,2,112,26,81,111,198,181,76,236,154,32,227,126,38,98,117,144,113,81,19,145,96,99,43,20,15,101,144,209,185,73,129,32,227,25,38,98,85,128,11,73,61,227,223,38,118,101,0,53,20,102,252,140,231,152,248,21,1,52,238,139,220,108,1,48,177,203,3,88,221,136,236,76,110,49,177,131,180,148,137,76,184,49,177,203,130,44,66,179,189,112,105,144,225,158,201,49,144,81,226,226,54,94,100,27,36,28,70,22,25,214,3,49,102,178,178,60,235,235,42,120,202,12,247,216,172,184,92,13,76,198,97,29,129,179,90,241,112,113,214,80,127,27,207,49,242,130,220,186,137,203,70,232,103,25,251,242,140,111,48,212,76,80,226,166,205,91,67,47,104,227,69,175,40,58,66,153,110,35,214,238,6,89,63,195,158,172,76,60,175,104,225,52,162,184,36,90,28,45,137,22,211,70,180,56,134,191,14,234,45,161,221,9,46,125,149,42,233,77,63,93,229,90,96,114,32,180,17,44,203,20,15,227,78,197,171,28,117,101,81,60,1,38,135,66,11,139,175,84,60,236,206,134,19,205,43,143,69,133,60,54,107,186,127,18,229,177,110,77,249,51,54,106,19,118,188,28,185,177,126,68,84,106,221,82,186,138,201,37,56,131,11,88,242,177,194,208,9,180,32,62,103,39,107,236,49,195,160,110,40,203,54,55,144,108,115,212,193,54,181,230,231,4,173,138,101,73,242,18,67,226,172,157,116,217,244,117,222,150,139,240,247,156,45,251,0,80,26,27,108,104,246,122,209,78,122,200,139,253,144,184,108,203,126,252,189,100,75,71,27,166,16,18,55,157,70,228,16,141,73,134,108,251,71,100,132,209,147,78,228,42,178,133,71,249,192,112,158,178,124,16,6,70,144,210,236,42,75,10,107,58,218,240,55,146,175,188,156,255,81,208,201,249,35,5,173,156,127,82,144,180,159,25,145,18,111,38,136,224,220,207,82,68,92,0,171,151,146,166,105,144,251,157,64,174,86,12,106,192,6,101,12,158,226,59,228,210,77,12,198,33,26,148,13,16,234,50,109,120,77,59,121,113,117,88,164,186,153,181,150,105,225,40,197,204,138,34,207,1,138,217,91,42,181,151,98,230,138,24,68,158,163,206,168,117,145,235,239,105,49,106,77,9,253,221,116,70,173,73,243,61,235,140,90,77,17,46,10,160,7,250,105,155,6,177,182,135,30,92,108,72,11,36,6,7,49,56,216,144,61,80,199,32,96,16,26,178,31,186,96,17,150,233,163,99,122,140,93,222,144,125,176,166,33,23,65,87,67,118,97,231,157,52,254,32,234,177,179,250,131,44,2,86,97,214,85,13,233,192,16,6,87,98,112,101,67,122,176,12,214,198,15,195,0,70,46,195,200,101,13,89,3,23,150,96,35,55,146,45,2,198,46,198,175,21,248,181,186,33,93,240,27,176,121,211,179,207,62,251,108,247,99,247,237,140,92,240,99,137,188,163,147,150,139,51,104,85,21,138,64,241,128,30,195,93,16,185,40,46,53,99,154,116,12,250,238,199,143,248,8,15,173,242,222,137,127,23,27,0,31,245,116,218,102,41,244,98,126,23,35,221,205,54,27,35,211,52,117,168,226,253,208,115,222,122,208,140,135,33,9,49,96,13,123,108,147,144,13,197,212,169,61,51,44,254,55,210,10,193,208,122,211,161,221,224,132,209,158,98,178,100,139,38,215,227,66,174,208,118,150,22,109,36,88,197,190,148,175,55,18,252,242,70,130,219,2,226,37,217,70,130,32,8,187,57,132,173,112,21,177,11,232,82,235,245,230,211,83,108,28,23,138,13,108,143,67,155,28,94,91,9,25,152,100,86,109,101,139,217,194,94,72,23,173,249,186,232,180,53,8,196,218,112,110,2,221,65,98,133,139,58,12,69,7,16,116,122,37,213,11,151,33,89,185,217,192,17,155,211,211,250,74,35,90,54,80,180,228,208,184,207,30,83,162,152,146,149,129,145,54,187,204,98,177,164,5,41,148,153,84,87,89,227,218,13,239,184,61,166,172,106,249,227,66,46,107,69,166,50,50,8,66,6,101,119,40,181,242,170,165,156,14,165,86,93,181,148,219,161,20,180,148,186,171,16,36,48,53,25,196,98,94,107,177,12,170,175,110,41,217,2,81,75,67,212,47,10,174,200,32,186,216,64,116,117,75,233,141,173,146,82,50,132,237,214,90,139,103,237,110,93,205,84,60,145,176,53,250,140,4,231,221,210,235,157,174,44,137,204,203,157,126,226,208,241,99,210,141,248,73,150,8,189,214,24,56,208,75,248,89,67,252,92,170,241,115,105,153,132,60,112,16,63,29,196,79,7,186,53,126,50,36,33,102,246,111,161,166,169,166,166,158,162,45,219,104,3,179,17,200,72,52,44,180,3,176,112,69,182,21,125,83,34,171,214,154,119,41,162,46,69,69,151,122,117,151,122,203,36,51,79,151,28,92,87,60,96,241,79,75,7,44,20,66,24,88,40,78,217,212,48,210,142,29,80,47,145,116,24,146,206,124,249,173,0,24,120,113,31,176,33,193,236,49,176,128,225,106,39,108,61,22,6,150,10,83,96,185,8,130,5,44,204,108,143,80,30,172,11,151,99,75,215,143,163,231,193,136,96,216,205,56,93,147,201,80,142,153,224,0,39,184,94,76,240,242,210,4,143,183,160,198,203,77,73,215,148,140,177,100,80,148,28,44,149,188,167,99,73,207,148,172,99,201,176,40,185,172,84,242,135,91,74,254,179,50,241,248,154,120,162,162,224,210,160,144,12,141,68,40,78,27,137,112,206,158,191,166,154,174,169,171,168,105,160,67,77,135,132,174,9,69,131,14,36,82,55,163,145,88,85,119,81,213,146,210,104,182,116,36,106,211,86,178,22,75,198,69,201,197,165,146,247,118,44,25,154,146,3,88,178,167,40,185,168,84,242,190,142,189,141,76,201,27,177,100,111,81,178,191,84,242,85,237,4,237,204,67,208,86,39,130,182,174,78,208,22,82,143,133,212,99,125,103,4,237,40,113,23,227,21,130,110,169,181,133,160,173,171,19,116,199,46,149,8,218,66,146,191,139,49,112,192,90,8,65,87,243,27,130,254,9,96,27,24,162,29,56,248,197,239,98,28,28,172,135,40,216,201,41,88,23,70,10,118,202,20,124,23,43,81,48,237,227,116,233,125,156,100,145,94,245,250,138,57,237,11,58,162,64,151,65,129,62,68,129,254,74,118,131,2,219,218,81,192,19,143,86,81,192,209,40,224,228,40,224,44,24,5,156,133,162,192,38,161,193,27,217,203,244,68,243,12,11,172,124,230,157,246,153,119,22,60,243,243,244,132,102,222,49,51,233,109,178,80,207,240,112,38,253,43,204,124,231,252,52,243,78,252,38,226,224,184,32,191,6,81,19,67,254,168,229,131,7,141,81,139,134,227,225,236,251,216,17,93,1,206,190,167,43,29,17,254,38,43,24,181,74,179,111,150,119,11,107,195,85,222,30,83,139,90,103,147,22,248,158,108,131,110,53,83,112,37,170,238,38,155,7,50,52,167,155,213,73,239,22,227,194,64,46,181,176,195,75,9,144,17,2,114,185,6,228,242,242,148,214,80,119,75,19,143,250,15,189,157,166,52,162,41,85,12,162,108,74,187,171,83,218,173,167,180,82,89,222,147,110,234,73,119,209,147,118,228,178,230,235,9,77,105,141,166,168,134,12,68,207,88,205,16,115,183,153,210,168,117,74,59,231,167,41,173,197,75,104,117,54,196,188,86,216,163,154,112,41,163,234,199,229,185,159,180,96,10,211,114,29,154,112,149,216,133,89,174,29,221,32,18,187,200,150,107,200,151,107,189,108,197,250,20,56,113,180,202,155,43,193,83,78,154,212,80,197,21,45,42,238,140,24,181,38,29,189,212,45,174,34,200,113,33,251,205,22,108,45,215,148,167,157,20,156,188,218,57,39,213,58,119,158,62,107,99,204,25,187,165,153,73,135,246,102,233,123,74,140,90,179,230,123,206,30,181,102,108,210,29,204,70,113,79,214,114,38,134,82,236,96,17,187,172,136,29,40,98,151,20,159,139,138,207,190,226,179,84,111,119,241,25,21,159,65,241,89,43,62,189,226,211,41,62,173,226,147,7,138,23,112,139,2,232,131,109,155,96,239,227,168,113,111,123,28,21,237,62,84,180,111,132,87,101,177,175,162,216,27,49,246,62,250,28,192,207,123,233,115,45,126,74,216,146,229,221,66,177,146,76,62,212,148,72,227,15,210,14,210,156,173,191,126,152,146,235,152,124,15,125,198,100,177,12,227,84,254,97,24,167,72,114,129,48,4,91,179,74,183,82,236,16,198,190,250,241,124,123,162,117,23,128,145,17,32,106,191,133,78,158,162,70,110,199,27,80,254,81,23,132,217,120,33,193,19,99,46,233,141,151,210,22,74,255,136,56,139,242,209,226,17,241,36,254,174,30,17,103,240,183,107,68,156,198,223,37,35,98,14,127,151,141,136,83,66,111,53,206,226,111,207,136,56,137,191,214,136,152,193,95,24,17,123,81,98,91,53,34,246,224,239,202,17,209,196,223,205,163,214,101,11,4,248,35,226,18,254,174,24,17,23,241,119,219,168,117,30,127,251,70,196,57,252,125,213,168,120,18,127,111,28,17,103,240,247,190,81,107,14,127,7,70,196,41,252,189,119,84,156,196,223,181,35,98,6,127,183,140,90,211,248,43,71,196,49,252,253,225,81,113,4,127,235,35,226,48,254,222,51,106,77,225,111,60,34,14,226,239,248,168,216,143,191,193,136,152,196,223,173,163,214,94,252,29,26,17,123,240,247,213,163,226,25,28,199,224,136,184,44,242,173,37,113,14,191,27,122,171,75,237,39,178,153,45,200,70,77,217,149,45,41,245,56,197,252,189,157,154,39,100,4,44,186,139,29,50,178,236,97,219,80,180,61,42,246,217,197,230,212,1,250,190,133,93,180,95,193,254,171,45,104,57,192,85,129,105,235,8,172,241,164,72,213,57,158,93,172,102,141,200,5,22,191,143,211,6,50,233,237,91,17,17,128,25,122,80,3,173,59,64,122,87,179,18,25,180,89,211,184,197,214,137,143,88,231,99,96,175,99,238,123,237,161,125,51,68,58,129,235,178,222,224,244,21,219,188,35,207,123,217,54,121,47,217,89,94,24,84,108,51,244,236,104,128,108,236,68,86,75,168,92,111,0,52,160,95,241,183,239,164,72,208,181,234,141,85,11,75,116,237,208,55,8,105,135,213,212,122,142,106,165,59,103,139,244,118,46,182,110,143,193,13,68,107,125,250,252,218,196,45,165,184,160,1,171,26,200,212,77,67,180,47,55,212,128,149,13,92,100,76,228,74,221,122,13,150,101,163,169,236,210,225,218,7,250,44,189,117,192,211,89,215,142,21,3,94,220,128,238,6,172,104,232,186,87,24,34,45,72,23,92,88,77,149,64,108,242,16,79,96,210,106,35,228,31,44,17,242,97,81,37,228,163,165,133,98,181,33,228,87,143,90,68,192,91,201,166,82,192,173,134,112,99,67,184,119,85,8,23,25,128,165,207,12,136,0,123,12,1,190,124,68,156,54,4,70,132,56,104,8,113,227,136,152,53,132,70,4,9,134,32,23,141,136,227,134,160,137,48,187,12,97,142,142,136,163,134,240,136,64,87,25,2,77,70,196,33,67,128,68,168,43,13,161,174,29,17,7,12,225,19,193,46,51,4,187,100,68,236,51,12,130,8,215,53,132,59,50,34,154,150,102,96,68,192,43,10,2,158,18,21,2,190,96,165,122,103,57,39,87,77,210,123,69,149,164,47,243,2,178,195,134,101,101,44,44,99,105,183,25,22,119,135,97,121,119,26,22,136,107,41,182,108,153,157,104,81,16,251,69,174,137,221,176,137,175,242,130,77,44,173,178,137,91,216,87,56,178,131,130,25,136,14,204,192,34,102,192,136,25,16,154,105,74,111,225,8,1,137,151,116,11,45,76,169,14,83,26,66,18,112,33,212,18,44,15,192,2,59,254,21,94,229,11,88,227,89,39,205,239,91,242,181,214,148,175,123,197,213,81,55,133,80,93,164,10,5,121,52,218,235,36,100,148,184,199,73,172,45,218,201,81,211,145,33,109,101,134,56,98,148,251,98,45,247,197,101,9,212,50,27,153,40,240,105,11,198,189,14,185,70,154,118,37,35,255,66,174,108,0,39,157,136,171,227,110,62,14,174,183,170,109,252,216,231,196,18,229,65,178,124,220,235,104,163,215,16,172,188,118,96,96,109,29,140,247,240,226,86,13,31,18,107,164,133,63,32,67,213,31,247,36,44,226,140,154,62,236,75,130,12,131,112,68,132,192,212,98,196,10,134,157,139,245,232,227,173,129,238,128,30,42,182,111,86,229,245,246,24,172,35,238,161,237,117,12,200,176,99,247,1,71,160,223,3,92,157,214,110,162,68,49,26,66,66,242,8,5,92,29,36,84,140,127,18,27,211,209,71,48,250,152,142,126,20,184,154,209,209,211,92,123,189,162,104,229,75,41,118,43,154,135,131,34,65,28,89,166,237,63,129,1,87,135,8,227,227,31,214,25,166,252,44,195,144,56,228,203,31,0,38,165,30,123,32,127,80,207,248,144,56,44,18,70,19,158,213,113,212,212,161,107,136,200,229,21,27,17,103,108,109,160,58,71,199,119,28,197,76,224,234,176,223,98,159,60,69,25,2,83,27,121,193,202,141,152,227,27,76,159,134,116,31,18,166,134,31,74,101,175,233,221,63,131,33,105,33,210,99,137,57,145,202,59,128,147,81,229,157,192,213,108,45,149,35,136,27,181,84,246,96,31,107,169,236,195,241,214,82,217,143,249,106,169,92,4,92,237,171,165,114,9,112,213,172,165,50,194,78,122,169,28,5,174,78,121,169,68,56,205,120,169,28,68,40,123,169,92,129,61,243,82,185,18,39,195,75,229,42,224,106,210,75,37,0,87,123,188,84,174,6,174,206,219,169,220,8,150,100,136,228,106,56,149,180,149,199,146,27,27,145,32,165,80,46,37,101,1,54,146,78,145,131,130,173,21,225,168,117,214,198,196,1,249,114,252,1,25,138,221,248,177,134,54,150,128,111,98,163,226,146,173,108,185,86,17,38,82,169,161,164,129,177,208,64,137,49,144,164,121,46,151,10,56,50,208,139,182,49,245,101,240,114,8,181,241,248,111,253,195,12,27,17,71,124,141,179,137,15,44,94,211,241,124,133,15,137,163,46,77,244,140,208,246,230,211,110,154,220,213,226,195,204,37,134,122,23,108,44,199,158,181,71,173,163,46,104,140,34,82,60,108,19,218,54,157,20,110,132,165,134,112,125,157,99,206,78,98,252,61,99,39,3,138,43,166,24,172,5,47,238,210,220,34,17,141,168,78,206,197,28,164,248,33,241,164,35,187,41,187,35,111,198,223,211,142,92,76,213,56,114,57,254,158,114,228,77,248,59,235,72,106,250,184,35,169,153,105,71,214,201,117,155,35,55,208,208,28,25,18,13,57,210,165,46,58,242,22,66,44,71,58,68,114,142,28,214,212,44,111,213,212,44,107,154,167,201,46,205,211,228,109,100,193,62,203,210,120,41,165,120,154,238,247,208,85,196,213,112,167,81,24,87,35,175,190,179,56,98,214,51,226,227,210,168,103,4,129,225,128,11,49,12,128,175,61,238,237,55,117,77,82,93,128,0,152,22,88,25,96,101,133,229,62,211,54,222,155,248,168,69,182,221,88,85,8,117,170,138,218,209,213,77,153,234,14,82,117,171,138,234,86,181,86,135,52,232,128,107,188,220,29,49,165,14,83,169,149,134,92,5,131,149,88,138,72,57,241,91,202,134,80,55,101,167,77,217,99,84,118,69,81,118,5,150,45,74,77,186,105,146,228,109,170,41,55,77,220,22,200,36,47,163,217,178,147,53,84,173,157,220,64,172,14,65,248,10,140,153,177,19,178,94,159,181,147,245,152,2,9,178,50,117,145,152,13,178,79,23,94,6,175,136,239,126,185,53,67,243,188,223,53,144,205,46,157,83,139,89,199,9,160,174,1,168,107,122,80,135,53,80,180,154,192,58,208,45,185,149,150,168,251,80,135,4,91,155,237,216,26,187,139,93,246,128,195,221,35,226,162,103,128,86,131,97,3,180,147,6,104,51,4,180,193,2,104,131,173,64,99,35,226,82,86,58,131,213,144,152,51,165,79,81,233,101,69,233,101,45,165,135,196,147,38,227,25,227,136,132,141,136,179,158,30,243,25,15,19,198,18,34,149,187,199,137,250,55,166,80,143,137,55,143,201,58,173,112,27,19,31,234,106,142,63,148,106,38,162,230,204,122,5,117,92,88,235,35,153,157,4,148,23,10,226,80,166,175,83,126,226,70,60,80,76,38,138,75,151,184,25,49,245,68,47,68,135,253,136,47,11,20,15,32,49,254,1,26,121,77,25,201,49,100,169,124,72,92,246,245,112,46,233,171,112,184,154,94,54,247,29,46,249,96,174,227,232,67,76,27,150,103,248,41,18,151,82,134,196,113,170,101,70,200,151,105,88,204,8,13,139,105,97,102,20,49,8,9,138,105,98,218,83,51,162,12,93,77,137,8,206,46,194,57,50,100,225,166,9,211,208,206,124,27,44,38,145,132,58,145,192,98,232,110,233,132,221,210,137,87,204,219,137,87,80,39,18,221,137,73,211,137,125,212,137,37,69,39,150,96,39,42,205,115,99,159,94,12,190,17,57,192,10,194,55,12,129,80,126,72,28,52,117,31,168,105,253,74,215,109,49,88,84,170,219,84,90,30,12,233,162,243,85,122,216,84,122,136,42,237,47,58,220,223,86,105,101,162,26,116,211,116,47,209,105,91,229,77,87,195,235,128,33,218,73,215,112,145,229,134,104,89,78,174,92,53,221,180,141,100,39,221,20,150,3,67,146,61,234,211,244,26,146,109,22,160,75,88,101,156,62,92,75,87,220,107,232,138,171,187,50,221,177,43,236,46,118,190,166,185,199,217,154,153,128,130,123,28,51,16,62,74,16,238,43,152,124,95,219,154,113,46,43,93,112,143,25,83,250,56,149,238,41,74,247,180,148,30,18,167,76,198,217,90,206,61,230,106,122,196,179,180,66,222,13,245,42,227,216,40,253,156,127,148,88,199,148,95,97,29,35,98,12,110,203,46,128,221,154,221,254,186,197,30,3,148,165,97,67,35,170,135,181,224,138,89,178,235,255,172,17,213,128,201,16,26,153,182,221,136,124,44,140,243,37,142,185,184,96,170,15,252,220,9,166,214,153,158,28,252,204,12,83,231,63,51,195,226,221,37,55,162,159,169,186,17,253,108,213,141,104,53,226,112,53,98,186,26,49,91,141,56,147,69,232,190,219,13,184,73,111,145,216,102,27,225,230,198,206,136,193,98,186,247,107,143,129,167,214,63,36,95,166,24,217,191,161,62,197,81,45,3,23,214,166,137,57,73,166,211,133,226,109,92,31,37,56,166,157,74,0,83,67,69,82,69,30,172,67,112,85,121,16,57,220,98,104,147,4,167,92,168,103,82,45,48,181,220,168,43,65,155,28,72,106,219,144,56,235,232,37,252,188,147,47,157,1,241,184,27,97,169,34,164,188,72,165,46,219,90,26,156,22,137,109,147,210,121,89,104,97,112,191,165,133,190,73,75,110,34,110,104,105,225,109,175,37,73,92,216,99,201,31,34,2,178,180,240,118,73,104,97,240,162,208,8,121,65,104,161,239,188,208,158,119,207,9,73,58,199,89,161,133,191,39,133,22,246,78,9,45,4,206,10,121,27,45,212,66,11,161,51,66,122,154,123,203,132,92,220,206,43,12,222,81,22,6,239,168,10,131,117,176,193,203,37,32,232,130,27,8,14,245,121,133,65,205,58,73,24,92,60,175,48,136,85,33,189,93,93,24,212,213,173,106,173,14,215,218,46,184,225,26,132,193,122,75,217,0,252,5,9,131,69,169,166,155,38,55,231,109,146,104,118,83,11,100,146,219,141,48,120,131,17,6,215,229,98,217,43,141,48,184,222,8,131,27,136,209,222,92,97,178,55,193,237,240,202,66,24,172,50,88,221,129,172,227,29,153,185,15,55,64,209,234,77,176,30,58,183,164,217,185,15,55,21,194,96,181,53,222,65,24,236,134,91,23,36,12,230,64,131,176,36,12,222,8,75,23,36,12,182,78,84,6,225,170,100,56,90,148,26,109,41,181,16,9,241,230,231,46,33,250,90,66,188,73,113,233,23,18,226,77,85,9,241,38,227,5,161,163,132,104,93,93,66,172,105,225,12,39,151,65,13,214,100,29,112,19,223,8,103,135,180,4,227,202,219,59,104,8,122,154,111,191,138,132,56,89,150,16,15,180,72,136,212,41,50,255,213,157,184,9,156,92,250,209,157,112,90,58,17,207,219,9,210,163,203,250,52,220,52,175,180,56,217,73,90,52,206,36,144,113,148,1,161,5,187,197,45,251,54,174,166,137,142,210,226,100,39,105,17,43,45,15,12,197,186,121,43,237,32,45,78,118,146,22,219,39,13,133,51,174,46,59,72,169,109,149,95,116,52,236,246,26,216,53,13,236,146,53,134,170,89,78,207,92,93,116,80,161,109,165,233,166,155,194,154,178,180,120,201,108,246,93,116,114,208,37,172,50,206,26,92,75,87,252,107,232,138,95,150,22,171,93,225,21,105,17,39,160,96,47,29,164,69,189,10,244,181,172,2,200,94,206,101,165,11,70,209,65,90,212,165,123,42,107,72,75,169,86,209,113,164,40,53,210,82,106,30,17,242,230,156,193,220,124,21,17,50,201,36,39,20,20,187,241,99,56,243,168,127,75,35,10,194,122,112,197,44,153,39,122,214,136,234,192,100,80,22,33,107,88,152,36,152,248,45,244,121,101,105,242,179,21,105,178,42,248,237,61,93,149,38,171,17,135,171,17,211,213,136,217,106,196,153,44,66,15,163,214,128,31,210,210,100,77,115,26,216,68,210,164,99,158,27,56,135,120,243,10,12,132,138,167,50,132,151,145,123,175,36,187,43,173,249,106,211,73,227,183,4,246,152,62,12,39,217,76,111,238,95,182,99,253,106,195,165,220,157,129,178,199,224,229,248,113,55,86,120,55,88,9,211,198,27,228,66,129,76,240,16,219,143,248,233,38,78,142,228,212,233,207,204,100,238,9,2,227,96,128,154,52,46,12,8,145,200,132,156,43,174,221,25,208,113,131,150,106,238,44,78,4,232,132,192,34,196,81,76,35,206,221,114,64,175,72,177,94,184,66,66,29,197,212,112,252,36,79,104,255,254,56,199,197,103,84,28,227,192,232,198,7,7,134,52,121,24,127,217,168,53,133,191,198,9,194,1,147,54,105,210,246,150,210,154,38,237,93,58,233,225,34,229,65,157,176,93,39,188,182,72,184,79,39,220,163,19,198,138,132,141,58,97,24,152,154,229,41,217,149,233,60,51,188,44,145,79,185,180,146,116,9,198,173,32,179,34,53,123,205,182,12,232,192,98,3,179,149,181,153,140,115,244,227,52,129,118,226,25,12,9,59,145,67,130,245,88,12,36,185,160,48,103,170,65,142,13,117,156,81,156,182,94,176,38,212,240,91,101,0,22,244,142,71,218,63,170,217,230,30,154,208,166,173,76,173,159,48,174,63,201,68,201,210,138,192,192,132,113,121,193,212,114,147,211,202,179,197,121,217,126,83,22,133,2,229,235,210,198,105,34,113,124,68,51,166,236,9,26,32,43,85,49,156,74,6,129,226,19,73,64,24,251,207,236,49,109,49,161,249,69,25,9,100,182,68,50,189,68,198,143,224,239,233,28,115,37,252,96,252,8,252,128,61,166,237,56,80,12,179,141,24,102,155,136,99,38,226,104,22,49,101,106,59,76,39,192,184,104,229,213,105,65,164,129,82,76,168,217,253,148,31,115,125,14,164,175,151,196,134,149,73,9,49,65,147,171,129,12,175,69,98,153,187,113,100,112,22,239,194,202,7,116,235,203,165,54,20,54,119,236,8,10,26,218,218,145,204,31,114,242,214,104,4,162,236,134,54,97,0,86,181,19,235,136,117,85,253,89,85,205,63,155,97,202,1,102,124,206,176,204,231,204,31,114,200,46,24,33,54,50,147,58,87,74,125,55,22,13,129,101,174,192,88,230,10,140,82,223,135,169,53,96,217,163,123,44,123,116,143,82,127,21,83,177,107,23,178,212,75,165,212,67,89,234,229,44,181,201,139,212,15,99,42,226,192,30,110,82,247,149,82,127,55,75,141,211,117,22,139,255,8,227,78,102,61,29,200,226,136,192,54,48,38,135,192,82,115,152,220,31,223,172,126,134,171,199,56,12,13,198,22,88,234,28,198,246,0,203,78,213,102,176,166,175,99,100,12,76,77,102,109,31,40,181,253,238,179,51,76,45,65,32,150,138,28,196,200,8,152,57,203,3,166,14,149,138,252,183,44,245,112,150,122,148,23,147,233,23,147,249,63,206,154,150,33,205,241,194,136,184,161,158,76,158,231,253,56,230,93,76,42,127,62,241,76,231,181,179,137,127,223,241,19,122,226,143,101,13,31,207,27,14,32,4,43,182,179,181,129,169,57,58,58,149,116,52,171,81,88,77,243,140,19,236,225,57,57,239,229,5,47,184,204,242,232,103,88,17,125,161,136,190,88,138,62,91,68,159,43,69,159,46,162,207,148,162,103,139,232,83,165,232,187,243,216,177,180,224,20,121,228,29,69,206,53,121,228,80,17,57,144,71,46,47,34,195,60,50,206,35,179,24,187,200,54,135,224,64,97,100,34,169,19,67,26,200,44,59,184,154,172,167,107,24,4,221,8,246,61,252,94,114,156,236,4,16,152,64,128,1,227,170,167,85,158,56,130,242,196,147,103,181,60,113,104,165,88,177,219,123,116,53,83,103,185,113,189,3,140,20,170,221,229,43,138,132,23,9,169,64,118,98,155,19,120,38,29,178,166,117,200,244,210,237,232,134,135,150,252,22,115,90,123,115,196,67,43,8,192,85,127,199,198,35,186,163,96,223,27,49,93,99,157,106,172,83,141,14,214,232,234,26,221,242,161,126,91,133,249,237,164,73,14,28,4,210,81,252,211,161,23,128,163,254,148,44,55,57,112,115,193,204,185,139,13,128,67,206,121,232,170,210,64,165,144,31,180,84,79,247,54,125,16,155,124,237,201,40,212,158,118,14,242,84,198,202,167,123,110,174,53,70,198,75,5,88,106,52,136,26,13,162,62,223,45,176,121,6,33,90,251,35,109,178,160,234,184,141,86,215,6,241,117,50,156,181,192,205,157,223,120,109,117,244,4,121,114,165,221,188,211,46,117,218,45,58,221,201,165,210,194,32,47,237,48,14,168,95,155,233,142,215,162,182,228,238,160,2,178,50,38,213,159,227,188,119,97,219,127,202,198,201,113,174,118,216,132,137,103,120,170,230,50,135,77,81,208,25,39,34,174,184,244,77,75,35,194,87,76,122,102,119,180,166,24,205,55,77,135,213,74,18,245,124,32,61,215,234,80,9,44,232,161,97,219,218,241,145,109,28,31,45,161,171,202,218,241,145,173,29,31,45,193,8,24,143,22,131,173,29,31,217,153,227,35,63,115,122,212,2,103,186,6,227,183,205,121,93,59,60,42,218,93,16,134,214,231,155,108,178,200,181,181,195,35,187,197,225,81,37,219,98,179,201,223,95,128,87,167,2,135,94,237,240,104,63,151,100,158,55,201,149,24,143,22,105,243,189,3,92,217,19,93,182,237,88,140,184,221,227,143,25,191,24,168,161,91,234,247,179,96,212,5,78,84,7,30,255,120,98,145,155,12,170,90,187,201,40,42,78,108,227,38,227,0,151,125,138,73,31,108,233,128,37,35,125,225,165,138,171,116,15,198,83,108,179,244,193,179,179,57,163,45,34,183,33,109,32,119,169,53,148,147,233,98,107,215,135,160,255,67,155,224,103,247,72,0,87,46,130,80,46,134,37,114,0,106,114,41,116,203,101,48,40,151,135,50,64,44,82,31,126,44,187,104,109,41,46,237,176,87,71,31,123,44,115,63,99,133,61,129,154,126,140,188,36,80,176,59,200,6,139,65,232,110,68,93,168,137,133,93,186,36,162,234,227,69,58,78,139,149,181,130,192,178,195,32,0,107,136,49,245,149,207,252,238,175,121,155,163,58,184,136,28,4,47,49,47,188,92,115,245,252,0,151,75,8,94,150,12,145,190,173,172,111,79,241,168,38,198,160,70,188,158,42,227,243,86,86,107,104,159,6,7,184,28,52,149,117,227,48,153,244,105,12,166,202,95,224,132,47,72,117,161,95,164,26,216,80,106,63,70,187,161,27,64,16,217,121,14,51,92,202,209,27,128,215,136,68,158,102,96,243,11,6,178,92,230,197,194,190,34,248,251,69,46,74,234,65,86,165,135,197,230,29,150,103,156,22,28,224,178,223,12,171,43,172,209,148,208,126,35,21,207,177,61,30,215,197,104,5,90,107,29,224,114,21,53,205,100,128,235,143,169,26,7,206,101,222,177,48,34,56,0,143,151,39,86,35,114,112,121,171,53,80,187,202,111,120,119,53,162,58,120,177,212,219,9,237,196,107,238,113,183,226,55,213,74,45,25,3,119,91,210,21,79,95,210,53,54,134,236,180,125,153,12,58,243,207,124,181,207,47,109,159,230,32,128,143,136,185,12,39,4,74,53,241,93,40,93,232,145,38,158,134,70,196,150,129,215,176,199,20,83,51,143,205,176,248,223,144,221,33,129,7,200,11,159,24,18,115,188,229,134,145,157,223,235,89,208,234,229,92,105,201,117,242,177,21,14,0,171,75,172,216,192,78,243,210,18,91,148,113,2,147,88,189,122,116,77,93,172,94,61,170,44,113,69,115,182,185,118,125,154,235,117,54,191,118,221,146,11,231,147,96,238,228,24,167,169,111,63,15,69,160,120,27,156,87,181,206,145,153,31,167,152,31,167,65,183,176,171,229,100,101,110,179,153,181,139,146,118,131,238,95,87,75,38,157,90,204,200,10,233,195,202,105,100,53,56,114,5,72,185,6,108,185,18,18,121,67,232,4,202,54,53,74,43,128,228,241,108,43,206,10,64,62,110,14,114,3,128,199,141,87,247,224,67,68,104,94,129,187,100,19,45,128,199,27,18,135,30,1,21,176,154,30,191,20,102,55,71,192,13,180,155,67,214,196,71,241,119,13,237,230,144,85,240,33,252,133,81,113,144,94,85,26,17,7,240,119,21,237,232,172,122,92,90,98,140,142,88,245,93,253,115,44,133,152,124,18,47,211,28,205,195,5,195,3,39,126,31,215,246,245,56,103,191,196,117,138,180,180,25,126,149,236,200,63,137,77,155,252,60,128,136,168,69,70,8,78,218,131,235,110,64,208,128,154,49,1,167,77,186,176,1,110,3,236,220,46,221,48,10,240,193,51,217,232,132,198,154,31,52,63,152,216,6,52,125,35,226,36,215,254,252,8,68,142,1,209,242,17,49,205,181,97,53,129,106,169,1,213,192,136,56,194,181,33,53,129,108,209,66,65,102,183,129,76,104,144,145,111,83,27,65,198,43,32,179,17,3,60,242,45,161,54,234,139,80,231,88,170,75,211,67,183,224,152,128,245,33,88,69,123,99,15,63,182,7,49,94,243,19,100,124,227,246,152,190,17,231,24,23,164,154,22,27,17,83,132,201,118,98,43,190,43,113,201,242,215,221,50,152,160,70,111,111,27,76,92,181,241,33,137,18,248,47,125,242,80,239,22,101,237,146,184,32,218,56,249,40,148,245,131,3,182,218,248,208,136,24,0,34,38,54,34,98,154,52,18,135,244,21,47,11,28,21,167,241,3,196,217,204,243,194,180,64,128,59,34,108,141,144,250,250,182,250,183,205,102,243,93,40,110,97,215,88,16,31,226,12,235,202,46,133,249,82,51,114,150,32,55,217,248,80,154,216,64,23,223,108,132,52,35,111,162,4,146,12,58,122,156,148,133,83,113,173,211,219,180,192,178,128,44,167,181,252,124,246,223,146,252,108,35,233,113,105,151,152,61,87,255,56,61,195,148,21,255,95,9,215,104,105,235,45,80,27,177,155,225,18,128,170,12,88,192,227,95,225,65,182,198,16,239,103,210,161,59,173,241,35,96,222,0,66,108,86,44,144,97,43,58,242,120,3,226,136,24,131,16,89,3,34,67,8,245,248,17,196,11,1,161,222,95,180,240,219,66,28,17,198,198,218,166,91,118,218,191,48,83,126,10,246,136,96,216,67,218,180,32,55,185,186,87,116,161,22,195,140,178,128,80,103,121,186,134,5,255,125,149,240,119,243,71,175,217,177,8,83,95,39,101,156,169,79,63,251,211,247,70,139,128,169,32,77,152,122,215,14,105,169,169,79,157,32,131,94,191,17,57,138,129,53,33,5,153,87,91,170,41,182,68,108,153,90,5,150,122,246,217,103,189,173,200,63,45,218,50,243,223,241,166,132,77,188,67,241,29,192,20,223,53,161,126,48,13,18,79,137,93,106,207,236,9,218,214,74,120,132,4,129,152,162,59,161,14,154,118,56,109,244,4,169,122,23,22,14,16,125,149,245,142,68,188,35,97,202,34,109,216,82,135,116,222,109,145,15,44,226,121,23,25,74,218,76,49,96,19,59,30,108,105,205,30,18,54,86,104,77,72,114,68,28,39,76,191,123,76,182,27,146,5,192,180,119,213,60,95,226,2,223,34,29,112,129,131,51,40,57,194,26,63,200,96,57,78,132,189,27,132,147,25,127,4,9,163,21,208,142,255,57,112,21,111,137,44,176,193,82,214,78,242,104,0,182,126,75,139,83,144,131,149,34,154,177,108,20,137,19,137,112,153,222,5,222,253,118,132,153,64,224,91,187,18,75,29,252,164,25,128,80,126,154,24,79,205,150,218,143,209,137,165,125,252,90,35,34,196,70,180,83,96,130,35,112,245,40,176,119,238,160,107,152,2,168,50,102,186,195,168,122,61,82,221,35,7,213,92,133,146,245,170,29,137,216,149,216,138,129,61,177,19,115,238,218,145,100,240,76,4,214,226,20,93,66,20,77,220,204,121,180,238,146,163,187,228,96,151,156,246,46,9,211,37,150,3,135,129,165,185,160,181,43,225,8,246,172,83,12,184,33,128,12,76,188,17,45,1,174,222,181,67,183,37,153,58,162,83,8,33,51,244,177,20,7,174,172,119,236,74,72,204,99,67,229,46,0,54,202,128,5,52,159,130,24,2,254,132,250,250,73,168,101,64,31,53,88,231,106,13,185,138,131,67,13,57,109,13,57,224,102,13,57,89,67,78,165,33,199,52,164,49,162,52,61,118,235,244,132,75,112,77,65,136,45,5,79,241,119,76,168,85,59,20,3,79,173,218,60,184,75,58,150,217,246,66,180,69,150,191,133,124,234,16,254,10,218,174,66,229,47,17,17,50,18,1,220,236,150,106,180,77,92,96,26,193,213,138,119,40,123,71,106,92,25,242,205,131,152,48,40,25,56,138,239,146,14,112,125,17,25,236,157,25,211,244,149,0,111,151,193,142,157,59,18,50,61,232,68,123,68,92,40,7,208,45,24,59,35,49,156,237,123,129,155,158,110,217,145,16,109,185,8,152,65,41,52,145,113,123,55,240,118,34,211,207,230,101,104,193,182,33,76,193,154,184,119,71,196,136,2,5,82,160,168,82,32,174,13,25,5,138,84,63,219,36,136,135,145,228,18,255,139,208,10,10,92,3,235,222,200,82,135,179,54,192,218,26,249,4,65,75,253,70,19,103,72,197,239,24,67,102,181,123,60,113,162,110,164,250,93,168,178,119,171,99,159,58,65,96,80,205,230,35,59,192,25,76,28,138,26,18,140,28,21,49,53,141,25,166,243,134,24,162,250,150,65,76,57,106,34,69,35,178,213,158,79,158,96,122,147,217,228,35,215,226,41,216,227,145,75,216,70,224,208,242,87,129,170,21,74,16,132,160,162,13,65,69,65,9,66,175,122,190,198,253,80,111,198,134,154,46,200,10,133,22,245,43,32,104,64,78,222,187,131,156,74,152,24,211,19,43,84,247,54,123,140,226,201,243,11,129,87,251,128,65,126,96,229,132,158,112,141,194,26,225,185,158,7,154,34,42,172,185,4,45,117,118,62,139,196,32,132,185,146,164,235,210,231,129,221,129,154,201,23,4,236,238,214,157,145,131,10,43,27,210,227,218,186,19,181,96,176,183,68,92,103,45,242,3,141,143,102,3,217,88,42,185,153,135,108,51,141,102,99,179,1,103,194,34,92,189,117,205,136,226,249,164,161,26,104,38,238,94,219,20,179,201,210,127,43,74,196,116,47,134,133,60,8,104,206,53,159,59,76,156,67,13,77,16,154,104,175,98,57,196,213,16,46,250,199,177,179,205,102,147,235,251,121,174,130,9,156,123,127,130,238,118,9,21,167,91,6,19,174,6,49,47,118,101,45,61,233,197,85,156,170,125,58,168,159,49,171,141,10,95,237,253,36,182,135,45,99,86,221,7,204,69,71,47,24,152,252,100,54,91,92,45,207,14,60,60,45,157,16,14,184,91,244,117,53,114,109,99,166,240,209,29,90,12,228,32,38,18,150,83,156,158,116,213,20,247,146,172,200,226,127,65,183,121,11,204,229,37,204,181,21,199,53,235,29,187,18,182,67,111,88,22,152,139,60,136,186,20,144,227,127,161,93,127,137,156,121,27,14,235,211,132,107,241,72,35,43,56,41,118,165,224,10,92,243,5,103,66,90,25,229,1,61,147,193,51,76,30,143,204,190,169,80,214,14,122,213,141,92,78,188,11,23,69,61,18,30,255,115,125,215,43,52,252,148,155,19,103,111,51,121,202,160,151,121,92,18,107,179,17,100,163,196,229,80,89,239,40,86,68,186,58,69,196,128,82,173,64,217,149,144,195,201,144,35,99,71,68,141,198,105,135,33,25,135,28,117,128,139,67,164,82,57,47,97,170,59,37,118,171,252,137,182,138,156,52,33,242,159,72,113,45,183,245,84,219,19,160,41,145,112,170,3,230,133,110,160,145,21,185,110,194,51,206,85,52,137,29,212,252,53,151,122,74,43,190,242,83,41,176,142,35,249,232,136,47,28,154,111,116,56,180,148,48,8,245,171,153,140,96,180,109,133,48,24,71,59,18,134,219,59,41,105,33,36,162,222,75,46,46,172,248,95,208,37,207,206,156,146,43,84,16,58,115,74,14,34,227,148,56,61,142,222,241,48,2,14,211,63,22,221,20,53,92,240,36,142,229,217,85,56,172,78,20,54,133,68,133,93,160,201,192,192,65,19,56,88,78,57,138,129,67,38,112,168,156,109,26,3,71,76,224,72,57,219,12,6,142,153,192,177,114,182,89,12,28,55,129,227,229,108,115,24,56,105,2,39,203,217,206,96,224,148,9,156,42,103,203,249,130,58,139,95,167,77,244,233,114,129,39,203,41,231,49,240,164,9,156,43,7,46,98,224,156,9,92,40,7,46,99,224,130,9,92,42,7,154,79,156,208,49,24,120,230,147,165,192,94,76,121,198,4,246,148,3,147,24,192,24,98,114,229,192,1,12,236,51,129,253,229,192,20,6,246,155,192,97,12,28,52,129,131,229,148,163,24,56,100,2,135,202,217,166,49,112,196,4,142,148,179,205,96,224,152,9,28,43,103,155,197,192,113,19,56,94,206,54,135,129,147,38,112,178,156,237,12,6,78,153,192,169,114,182,179,24,56,109,2,167,203,217,206,99,224,73,19,120,178,156,237,34,6,206,153,192,185,114,182,203,24,184,96,2,23,202,217,154,136,243,151,76,224,82,57,219,94,76,121,198,4,158,121,162,148,109,18,83,246,124,202,76,86,57,219,1,12,236,51,41,251,202,217,138,197,114,127,57,207,53,174,156,40,79,139,178,108,183,45,98,207,145,161,117,7,32,186,171,28,77,175,62,110,22,111,229,241,212,9,226,23,193,95,13,90,61,187,197,35,156,142,182,217,68,18,152,171,230,218,86,216,31,18,190,90,55,110,211,23,83,103,191,78,239,50,61,197,105,91,205,110,104,63,97,182,180,181,187,176,110,228,136,182,90,255,144,236,81,250,168,50,32,102,152,184,230,134,132,155,223,144,16,99,64,207,135,174,219,28,233,11,76,234,116,243,132,174,155,222,116,29,155,72,66,122,0,83,23,203,111,79,4,230,246,196,171,33,80,195,41,132,157,111,78,232,179,167,33,49,156,244,217,244,177,49,65,241,8,191,238,144,189,16,42,62,33,67,232,83,60,149,17,229,237,219,192,88,18,43,82,104,99,21,142,71,228,69,57,32,223,232,230,122,133,91,92,175,24,18,3,73,220,136,108,8,204,171,78,49,169,161,224,22,111,78,197,138,143,71,142,238,164,107,94,73,115,139,87,210,132,34,191,236,247,14,70,145,238,233,16,112,132,4,193,2,128,27,48,64,56,34,126,20,2,136,70,196,125,4,20,8,212,28,75,227,7,49,219,88,20,64,183,122,150,239,80,92,118,99,238,181,214,61,31,249,85,185,156,30,229,220,136,245,69,186,190,97,170,175,17,241,48,186,234,152,156,43,142,73,108,139,220,108,76,3,166,6,104,31,83,240,28,198,228,95,101,76,65,121,76,56,158,107,168,47,208,245,201,229,97,112,245,130,181,249,11,6,107,197,29,163,214,88,102,46,130,101,213,197,75,51,76,157,252,71,99,125,106,222,204,58,253,143,21,67,209,67,151,43,17,199,170,17,231,170,69,46,253,99,110,91,138,13,191,114,212,122,109,209,240,25,150,170,38,18,229,158,203,186,229,43,102,218,191,144,76,39,23,146,233,116,158,105,72,220,161,73,108,56,214,207,193,174,209,65,242,226,236,66,28,63,78,100,215,79,175,101,198,18,133,160,107,40,99,14,236,122,115,79,81,230,189,217,192,152,254,116,41,122,171,184,7,28,181,62,77,156,205,17,242,86,61,113,145,88,166,121,81,127,43,143,34,235,4,109,169,208,85,112,168,208,112,168,240,10,28,234,220,229,153,86,14,21,65,104,56,84,56,47,135,138,174,198,161,122,50,14,21,229,28,106,49,68,200,161,250,160,7,135,23,83,222,30,237,182,141,56,84,212,202,161,66,67,205,97,43,53,247,182,114,168,104,200,92,135,48,253,236,45,113,168,200,112,168,232,218,57,84,159,38,162,120,62,14,229,42,46,221,130,146,87,108,226,114,229,2,56,212,252,99,114,174,56,166,130,67,69,134,67,69,215,206,161,174,60,38,255,42,99,106,231,80,11,171,47,99,50,84,157,102,52,87,46,88,155,191,224,188,28,106,242,155,173,28,106,234,155,21,118,115,177,26,209,252,167,74,196,209,106,142,153,111,46,132,67,205,125,115,1,124,229,236,66,50,77,254,211,2,50,77,253,211,130,56,84,4,189,101,14,21,45,132,67,181,148,97,88,198,56,141,239,153,159,67,105,254,4,253,100,147,207,3,168,15,9,95,118,227,143,45,251,233,158,151,140,160,134,145,125,228,65,82,46,214,78,27,99,205,188,150,104,230,53,96,24,135,77,71,7,235,31,146,75,141,221,149,173,180,73,32,57,45,78,147,154,225,102,181,54,110,6,57,55,59,251,79,51,76,65,137,155,45,130,154,225,102,181,249,184,89,178,12,22,181,243,51,205,199,194,140,143,245,40,107,91,198,201,6,91,159,239,236,106,68,2,186,32,28,98,44,233,29,97,228,213,31,137,118,115,228,107,178,175,25,178,175,181,146,125,87,35,178,74,100,95,211,89,114,178,239,66,86,102,195,50,168,25,62,86,171,242,177,250,189,131,145,7,61,202,158,144,61,16,42,59,149,189,87,228,0,61,154,240,122,145,240,22,181,82,157,11,182,145,11,236,140,5,188,146,49,198,30,248,244,167,79,252,90,89,82,241,90,248,128,87,169,181,157,156,203,21,123,173,21,171,95,147,203,67,239,138,132,221,252,86,43,97,79,126,171,237,185,206,169,111,85,41,249,91,11,33,220,153,111,45,128,220,230,190,181,32,114,171,65,87,153,116,232,228,125,144,46,28,116,32,157,186,190,14,177,20,60,36,30,143,236,159,109,109,157,137,252,219,181,199,80,180,126,72,90,184,148,35,33,208,254,168,121,19,116,220,152,147,0,51,107,139,21,208,179,72,178,139,60,156,74,143,220,138,146,239,240,112,34,177,34,22,20,96,201,56,30,120,208,125,111,196,193,131,190,123,35,1,17,116,165,107,45,246,17,232,130,152,62,62,80,158,159,0,250,113,105,38,102,144,89,31,47,177,199,180,255,74,95,122,161,77,245,169,25,172,253,221,186,246,62,53,151,135,236,236,90,212,114,88,1,43,239,27,148,203,149,230,19,152,80,55,32,169,153,39,90,77,208,188,196,239,235,32,234,100,158,185,84,226,153,28,129,58,203,210,53,12,150,7,31,24,20,43,118,59,168,230,205,240,210,227,161,244,128,174,222,100,180,90,172,76,237,178,189,114,103,179,71,91,113,218,180,171,154,224,108,167,109,177,179,44,141,127,90,154,11,62,44,59,218,38,163,161,221,100,167,228,46,196,232,248,74,117,185,65,75,39,114,27,100,59,183,65,238,3,161,206,179,84,198,32,212,97,78,15,129,246,43,155,158,226,200,205,145,183,102,163,246,105,212,126,97,83,221,217,178,183,227,168,69,75,79,233,1,160,10,147,116,180,137,148,211,201,10,185,92,52,44,155,32,183,180,181,181,108,130,108,27,11,41,231,57,77,15,74,11,78,217,254,184,156,86,15,42,0,106,107,215,211,237,122,215,222,110,221,216,156,71,2,156,146,237,241,52,79,213,76,233,177,216,249,109,143,235,229,134,80,166,215,211,127,128,235,223,195,92,49,25,26,57,223,188,225,104,181,142,166,118,45,22,200,96,27,59,117,79,91,31,123,198,250,120,17,46,230,158,182,62,246,180,245,241,34,140,128,241,168,31,249,214,56,178,143,204,250,184,158,89,31,151,145,154,188,243,214,59,206,182,85,110,182,54,145,212,53,184,235,215,78,133,100,84,236,105,219,99,175,197,246,184,53,87,127,201,244,216,206,205,19,207,178,20,56,244,105,211,227,55,104,171,179,237,74,140,71,125,218,218,240,193,164,166,122,38,186,4,179,233,114,203,23,30,59,193,84,15,49,93,15,44,117,62,11,70,33,56,145,107,140,60,251,178,122,245,83,91,89,173,73,173,17,145,47,209,7,105,70,15,112,243,206,150,51,34,166,140,181,25,153,68,213,104,170,107,210,33,39,197,21,204,213,54,173,174,98,155,165,141,203,4,82,159,126,129,102,138,75,178,105,62,136,8,228,27,43,191,35,92,49,8,7,165,71,174,103,185,92,5,142,92,4,117,20,193,228,18,240,229,0,244,202,165,176,76,14,66,64,206,150,179,17,145,241,112,87,160,126,177,176,68,6,7,106,184,192,213,27,81,4,78,44,195,40,160,23,126,190,80,42,209,27,64,77,217,155,163,154,182,49,62,247,209,63,121,175,139,33,191,197,198,88,195,230,199,90,96,227,27,11,227,7,229,50,176,100,47,18,145,165,14,238,49,111,166,70,62,132,145,99,170,176,243,42,250,203,85,68,198,27,230,131,163,214,81,3,206,35,72,77,161,126,247,235,48,215,198,184,54,117,250,23,75,86,196,221,100,254,26,58,69,170,1,2,165,162,158,167,45,136,237,242,112,41,45,212,16,96,116,217,33,251,204,122,77,57,130,86,203,225,78,35,119,141,221,240,131,114,57,88,100,129,139,164,93,212,236,7,218,222,23,169,140,76,179,244,146,70,162,65,157,30,61,104,72,15,2,212,30,221,88,134,78,208,145,110,140,221,111,11,38,229,3,38,3,98,59,128,254,248,215,121,110,1,108,105,211,223,90,208,182,88,133,94,153,123,89,200,189,172,220,242,215,46,91,254,30,49,150,191,135,77,89,189,84,105,27,207,55,72,39,95,46,17,16,228,47,93,91,64,184,138,169,131,153,103,109,135,236,68,31,36,195,212,162,138,141,100,43,72,245,36,174,158,127,107,25,184,88,158,155,178,100,33,139,37,161,67,227,137,175,11,137,101,224,107,131,86,83,200,50,133,164,238,214,97,174,157,223,219,218,249,189,135,114,196,170,77,176,247,113,25,106,45,166,139,56,89,87,97,210,219,173,57,89,119,171,19,252,98,70,108,240,90,86,214,90,62,33,94,110,176,213,209,236,248,8,47,214,212,114,33,55,200,83,43,237,228,254,241,159,75,39,157,106,123,78,229,94,79,107,42,153,37,35,180,107,25,121,122,122,122,233,202,151,178,178,137,245,232,85,56,61,177,174,92,1,32,19,240,229,74,144,100,228,235,234,23,3,93,50,131,205,76,121,201,161,132,23,128,11,144,121,52,39,187,94,55,150,129,206,109,25,187,65,105,205,103,223,59,105,140,77,247,26,227,211,61,218,222,87,60,162,205,123,223,5,2,146,81,235,97,109,220,251,16,8,8,71,196,131,154,155,188,65,219,97,110,55,242,185,182,233,221,152,66,172,134,200,62,213,49,61,110,68,182,54,233,205,64,17,255,34,47,143,165,141,156,92,242,193,222,171,111,202,25,71,216,40,195,27,143,208,142,230,238,198,35,244,65,222,200,174,219,7,13,20,89,26,133,81,47,49,142,78,214,187,243,13,124,112,68,52,141,181,238,35,218,88,247,93,218,41,242,46,109,178,251,176,182,216,125,72,27,248,46,16,14,34,135,3,215,112,224,237,112,208,76,149,172,42,168,176,46,74,140,7,162,113,123,119,171,13,110,132,120,233,151,108,112,107,138,239,74,234,224,131,15,245,45,131,137,15,62,217,224,214,213,240,67,210,135,186,250,245,207,125,112,209,22,37,118,73,91,140,65,141,68,83,91,219,224,214,212,240,149,108,112,109,240,91,108,112,253,146,13,110,93,27,95,248,230,120,220,47,108,112,253,142,54,184,76,63,178,225,59,16,5,106,248,33,232,73,19,253,232,11,56,250,85,90,71,251,93,142,243,209,83,118,28,107,148,219,225,150,152,125,201,14,119,186,176,195,181,244,19,79,218,162,214,202,108,126,163,248,225,170,29,109,208,110,71,235,232,45,14,98,188,17,135,128,138,145,237,108,160,237,104,29,186,212,148,219,209,70,218,32,196,210,103,116,65,246,56,133,204,123,80,85,99,232,237,24,50,159,253,131,165,2,118,187,168,162,77,85,46,153,86,188,130,117,80,217,60,226,94,94,161,178,57,154,123,57,149,43,166,149,85,175,253,138,233,182,236,138,233,213,107,188,162,248,249,90,109,12,157,17,239,130,148,189,114,25,111,65,202,221,89,150,202,30,101,211,245,31,167,77,163,171,149,36,104,247,26,21,22,209,210,29,233,132,78,199,251,165,224,234,53,200,53,107,144,83,214,235,90,43,232,14,242,212,249,52,187,231,210,97,167,218,94,87,64,189,202,215,160,214,212,168,170,221,149,231,187,54,255,213,210,133,181,29,161,144,139,250,29,135,90,73,191,59,192,83,53,169,245,59,7,53,221,78,18,82,35,114,74,250,157,214,238,92,61,255,123,185,18,180,213,131,113,161,40,221,47,53,244,208,189,229,26,181,187,28,218,150,214,235,44,163,215,245,106,107,29,210,235,44,173,215,245,98,4,140,71,61,96,105,189,206,106,211,235,202,48,32,101,170,170,215,217,244,196,146,85,110,118,1,147,108,103,111,43,181,1,154,30,113,177,180,94,103,181,232,117,173,185,122,58,234,117,103,88,154,120,133,102,247,19,154,53,190,214,60,148,67,218,152,178,81,69,175,169,16,113,187,166,122,54,71,245,86,13,207,109,209,240,234,224,230,42,72,12,94,166,221,101,53,39,158,121,70,121,59,205,232,94,94,188,162,60,105,212,145,125,102,233,221,139,203,96,29,60,233,210,139,52,85,252,165,119,106,124,212,240,234,224,147,134,231,106,13,111,210,104,120,251,184,244,128,14,253,187,20,131,46,37,54,15,74,27,124,217,15,177,92,4,139,229,18,112,229,0,120,114,41,212,228,50,8,229,32,244,202,229,176,66,174,12,151,180,42,120,65,171,130,231,106,5,207,107,224,88,233,10,33,93,60,172,40,120,133,102,55,30,209,181,37,75,125,243,49,122,235,247,41,30,185,212,157,200,50,112,10,245,160,128,235,39,173,95,155,96,170,30,204,79,208,81,101,29,41,69,67,17,191,80,13,193,88,106,183,77,71,211,209,101,229,172,43,32,77,55,79,251,66,139,226,150,71,155,254,25,157,173,69,35,59,83,104,100,249,76,250,70,35,219,46,23,211,68,89,50,14,189,236,6,42,245,175,170,215,117,170,37,204,107,89,97,106,233,13,221,160,84,3,197,154,171,156,180,225,71,151,137,227,70,228,211,67,188,126,208,145,80,140,34,215,130,48,84,21,85,77,66,53,10,12,21,22,84,185,158,217,162,164,237,51,74,218,94,83,163,193,222,252,122,230,79,232,171,81,175,165,43,40,250,114,230,197,242,21,190,237,244,74,104,81,112,99,86,204,205,139,25,189,172,82,44,169,180,103,138,57,121,49,115,213,176,82,108,77,75,49,165,139,189,54,177,149,53,110,80,75,95,155,39,76,179,228,42,88,45,111,0,87,2,36,242,70,112,164,132,53,242,38,131,129,40,179,91,166,254,0,214,20,247,5,93,72,50,21,35,201,85,12,88,253,56,185,216,144,65,32,29,37,164,221,81,201,176,140,108,125,147,86,42,164,150,169,111,212,74,5,104,97,250,134,81,146,162,87,161,30,64,27,64,63,161,159,53,126,45,114,109,211,113,98,188,195,41,244,168,53,217,141,65,33,109,20,207,60,125,181,137,110,12,34,6,252,50,215,41,210,201,111,12,182,174,88,117,186,3,216,75,142,186,66,173,95,216,13,212,28,232,62,3,113,22,163,93,236,227,153,97,2,85,25,55,160,14,190,209,48,72,253,178,164,211,81,195,200,70,189,210,104,20,203,181,70,49,168,71,191,76,107,20,75,181,70,49,160,129,176,68,107,20,139,180,70,209,223,6,139,2,18,162,21,18,86,14,137,226,146,87,135,81,187,237,240,33,180,32,117,90,223,127,27,78,117,149,128,200,163,159,181,213,250,7,228,47,227,249,101,29,196,43,233,32,161,190,7,232,129,11,222,214,193,196,5,151,116,144,154,90,255,144,244,160,166,126,227,210,127,89,66,58,136,107,238,170,249,90,7,241,33,84,235,73,7,241,203,58,136,111,116,16,31,235,3,95,235,32,62,61,75,79,135,32,116,57,139,158,153,3,139,212,7,28,181,91,232,32,110,73,7,241,75,58,72,80,232,32,235,31,130,32,77,244,75,178,250,82,19,3,75,235,32,97,6,136,171,232,32,78,161,131,28,40,116,16,7,181,117,92,65,10,206,210,126,23,208,202,238,2,186,249,93,64,186,242,71,122,131,19,144,246,209,228,153,214,18,104,117,54,232,160,181,88,185,214,98,101,90,75,147,107,85,37,232,120,253,47,200,175,255,69,249,245,63,71,95,255,211,218,147,204,59,98,174,255,209,67,126,150,121,186,135,244,151,11,253,162,111,55,89,18,14,79,36,181,53,140,234,67,248,242,146,73,33,27,18,182,113,158,198,35,161,158,249,159,39,244,211,26,145,190,218,144,48,109,172,131,223,129,212,199,188,96,199,31,224,80,27,18,161,164,31,63,9,129,129,29,127,137,99,6,156,163,1,168,33,180,250,161,6,25,174,212,80,109,102,241,157,88,96,64,210,214,84,44,105,51,18,197,75,186,251,167,184,62,51,148,66,247,12,220,52,177,148,191,141,116,225,131,71,79,48,125,210,1,86,17,176,200,129,16,56,227,145,192,210,192,21,79,117,101,32,164,171,31,55,20,169,162,27,37,238,4,237,78,154,203,168,53,213,252,47,230,172,143,110,231,232,75,39,224,141,39,214,160,36,103,194,96,13,130,72,37,189,120,195,211,196,81,181,45,17,211,29,102,228,100,33,235,180,223,210,105,43,77,234,29,58,93,47,2,117,74,132,186,238,180,223,218,105,171,181,211,214,4,9,215,212,233,250,124,157,246,199,19,39,235,180,211,169,211,40,143,153,219,191,9,27,76,44,69,142,95,60,240,129,13,38,30,89,216,131,167,111,124,214,182,217,99,212,85,240,116,143,193,138,159,226,250,85,101,61,116,28,178,80,250,69,118,145,112,96,105,226,211,128,51,133,88,237,126,59,176,9,85,75,19,65,241,138,20,240,20,53,152,218,189,180,68,228,160,16,224,22,1,87,223,5,113,233,154,5,194,68,152,214,28,64,41,200,70,38,193,211,68,32,80,168,35,122,103,170,166,38,51,160,128,171,106,106,170,10,34,129,60,122,60,161,251,107,66,49,112,7,1,43,167,187,187,155,35,30,4,149,129,249,197,192,234,87,31,152,191,128,129,109,187,194,192,232,21,214,186,238,167,255,60,15,12,60,154,105,85,147,117,85,3,11,80,73,244,183,14,78,72,203,184,172,208,91,177,158,178,118,32,83,0,79,217,91,204,244,235,183,158,60,245,200,14,41,76,132,53,182,137,3,187,149,177,159,133,254,61,248,169,120,138,33,253,45,74,223,150,254,150,253,116,51,136,122,103,79,36,130,148,38,222,136,156,150,154,40,23,121,12,227,40,246,241,136,5,200,101,61,85,83,23,63,48,195,226,159,195,241,91,216,127,125,173,201,218,50,72,22,3,106,183,172,211,133,248,163,39,247,251,178,159,232,70,213,212,217,188,140,7,76,135,246,154,26,212,92,150,102,78,34,29,146,93,144,68,8,60,150,170,109,27,148,14,249,50,146,28,108,164,105,210,91,119,3,106,106,97,154,116,221,202,216,222,77,252,177,251,244,210,102,65,157,28,19,13,66,48,136,125,119,101,219,254,16,233,196,76,237,30,199,105,128,58,4,131,9,3,75,191,188,37,221,236,161,36,141,27,12,25,153,107,174,186,222,75,22,43,93,169,244,129,25,74,212,96,218,192,24,248,27,24,27,143,232,50,175,55,33,5,208,97,74,184,140,78,126,148,191,53,18,154,252,125,172,198,234,80,205,68,91,53,214,4,176,148,112,19,130,40,80,53,212,164,222,9,124,2,193,1,124,34,241,17,38,22,49,41,78,20,96,78,236,169,157,64,189,115,179,141,96,10,84,13,187,110,19,35,220,28,213,192,6,119,66,63,26,214,149,170,90,186,158,49,245,135,187,95,29,249,100,207,16,80,62,74,216,192,112,149,34,131,155,250,22,212,154,177,166,196,130,48,149,117,189,49,114,47,137,35,181,9,96,168,253,7,1,212,117,101,175,138,80,84,4,146,14,212,228,111,158,96,241,105,206,116,131,137,87,169,249,222,136,156,171,209,168,12,206,185,248,99,182,41,17,125,206,127,240,132,33,57,31,108,117,57,15,57,170,166,246,254,122,22,202,46,233,234,219,129,96,171,3,121,18,118,69,131,65,53,243,222,96,71,100,29,108,125,127,210,73,53,2,250,91,72,117,116,160,190,150,177,77,83,31,255,253,47,127,254,195,239,255,29,120,13,25,85,214,82,217,77,3,150,61,96,35,219,233,153,144,136,209,61,244,92,79,106,86,33,134,83,212,11,62,166,246,65,128,169,177,62,96,183,74,91,148,184,146,70,52,65,54,68,219,72,157,242,54,71,54,216,224,79,232,135,180,156,124,106,44,240,160,55,13,232,74,1,215,70,39,45,51,67,219,63,54,68,91,163,58,8,232,222,170,47,193,53,244,21,74,205,193,109,163,101,11,8,169,218,177,123,34,122,79,51,80,239,28,143,24,170,133,219,104,230,123,54,71,228,103,168,158,181,237,6,100,244,70,5,129,197,175,133,218,6,6,81,29,34,136,183,68,36,51,172,33,154,13,212,219,116,69,177,174,168,15,27,116,13,150,245,100,109,58,244,186,53,141,117,16,75,99,205,38,7,88,69,229,84,171,139,114,224,86,218,132,35,117,130,235,177,112,61,22,59,128,46,83,169,21,104,217,102,0,81,16,231,58,2,91,77,229,19,237,32,58,57,6,171,192,67,84,211,15,178,75,139,86,47,114,228,30,168,195,191,126,130,169,97,117,6,177,230,63,102,88,19,67,164,102,242,154,66,186,104,219,173,142,230,49,72,46,92,10,186,231,38,133,170,5,178,78,203,196,68,194,193,38,217,132,14,97,201,45,69,77,13,165,80,211,54,183,250,241,231,218,90,43,30,181,0,191,20,164,241,100,233,209,191,255,143,189,247,129,178,227,58,235,4,239,191,250,243,94,189,234,174,150,219,73,91,173,140,191,42,181,237,39,44,141,197,142,163,118,228,144,244,125,39,221,114,163,40,114,50,153,108,102,118,246,12,11,236,97,168,167,205,228,201,61,34,3,178,250,57,86,28,1,134,49,139,119,113,178,134,136,224,160,156,96,7,133,100,119,77,48,155,110,48,139,57,152,172,103,79,178,49,139,146,49,140,147,213,28,60,224,61,120,192,108,12,218,243,125,223,189,85,245,94,191,150,37,79,128,153,57,56,39,234,87,247,222,186,255,234,254,249,254,254,62,178,112,148,172,118,83,28,244,143,166,53,60,160,50,246,113,235,176,79,165,25,17,149,199,208,178,251,145,104,23,211,137,72,254,207,41,217,90,103,90,211,56,254,131,14,67,22,8,6,32,173,225,0,9,69,116,52,21,44,40,20,69,2,65,73,20,142,118,6,33,177,19,120,62,241,9,190,60,25,6,14,130,210,17,233,30,105,8,119,65,68,254,166,97,30,16,73,135,53,133,175,34,94,108,217,11,130,163,241,147,140,78,210,135,42,104,44,134,194,188,144,144,172,25,16,209,32,153,171,240,79,156,7,52,55,114,57,189,6,119,6,121,69,219,172,214,28,176,251,105,102,85,103,7,94,193,225,97,100,113,32,194,211,88,225,213,155,157,245,45,114,123,80,130,204,238,2,131,203,48,152,36,11,221,39,242,34,176,255,78,48,49,249,251,238,111,193,114,237,91,144,249,11,112,60,108,133,208,64,131,193,227,60,251,25,89,131,170,212,216,86,236,80,105,47,80,152,254,235,112,189,254,129,232,79,5,70,74,25,144,86,233,143,68,127,42,14,132,16,161,136,98,178,240,99,20,105,242,4,37,107,78,252,158,227,83,52,235,96,52,220,242,209,203,233,78,208,236,133,171,109,135,152,54,156,162,140,192,234,174,178,175,5,118,245,218,171,127,239,22,124,239,53,180,23,227,123,215,92,253,123,29,124,111,199,213,191,215,198,247,102,174,254,189,20,223,203,174,254,189,22,190,55,141,95,118,14,23,224,219,193,220,34,231,150,73,104,107,110,145,59,139,192,14,95,214,131,34,180,195,243,154,85,41,195,199,73,76,101,236,236,1,5,196,48,67,153,221,139,52,121,134,75,102,120,254,11,235,119,217,75,255,242,137,245,195,169,244,86,155,79,156,243,71,27,150,46,112,91,253,0,47,245,136,22,54,251,135,199,133,7,172,196,117,28,192,164,98,218,42,42,241,239,197,161,52,164,18,212,101,42,113,139,44,176,163,75,125,123,233,146,30,96,199,87,201,128,127,248,148,40,41,9,187,247,140,251,109,219,107,199,11,109,135,67,131,140,209,240,188,190,203,14,135,79,138,190,29,62,240,196,250,81,44,57,124,82,28,26,32,213,98,167,121,164,17,15,115,10,71,33,48,41,176,67,242,224,15,236,48,59,202,216,38,246,173,3,59,148,199,15,138,130,158,58,39,236,115,248,4,244,20,158,168,178,115,171,121,198,154,239,228,190,212,6,189,99,93,200,119,3,1,62,249,182,187,106,23,11,155,21,227,28,211,225,18,243,225,210,154,116,184,48,160,82,245,75,144,136,0,23,25,189,217,226,55,219,44,48,32,38,134,143,175,208,107,120,232,195,66,104,95,120,100,211,145,207,120,153,209,211,135,249,155,190,126,124,41,196,19,83,35,234,253,2,3,131,77,88,64,1,142,53,172,166,99,55,249,227,55,38,173,154,211,209,9,219,113,194,70,3,251,34,207,153,225,122,176,191,247,127,162,217,95,122,162,254,98,222,43,35,99,121,165,26,11,43,135,173,34,219,7,62,150,113,54,19,127,113,241,157,181,74,204,11,49,86,10,12,159,136,1,4,227,7,161,225,187,66,212,119,133,172,239,10,51,225,174,72,200,67,149,238,81,188,69,177,5,123,225,17,71,76,254,110,170,210,117,117,106,183,176,207,136,134,6,122,171,22,90,141,131,29,7,171,77,51,90,127,173,154,137,122,196,173,96,199,129,215,68,155,90,19,29,84,96,199,134,45,55,169,198,248,202,64,111,131,134,194,12,72,20,7,14,181,56,118,102,167,113,67,45,137,155,247,60,171,37,163,81,195,173,248,160,152,131,216,153,157,142,180,65,42,232,142,243,189,136,173,204,91,44,226,98,128,222,106,54,146,43,209,67,130,134,196,233,124,73,11,25,58,45,228,12,18,171,33,107,33,67,214,66,18,66,49,172,164,25,132,172,133,12,189,22,178,229,181,144,245,120,89,63,216,218,130,108,27,120,100,219,228,50,144,212,87,56,167,222,216,178,168,59,227,117,144,35,133,178,137,168,182,128,100,149,132,14,107,32,23,88,47,4,86,173,164,211,248,171,91,4,172,129,12,108,251,80,138,12,243,153,123,55,133,109,103,95,149,169,6,83,233,26,67,8,189,110,201,215,81,152,229,148,228,246,221,60,5,157,71,108,164,119,237,88,175,166,216,240,62,78,175,29,209,242,69,203,120,40,103,121,167,149,248,22,41,221,88,113,8,223,25,209,239,121,219,67,146,34,196,56,109,216,39,54,106,128,178,238,87,155,251,165,83,3,109,214,71,5,157,172,170,159,128,84,5,114,193,108,208,72,126,138,77,245,94,43,225,209,76,129,206,227,100,4,129,46,32,0,88,178,6,51,52,214,100,28,216,52,104,234,197,154,51,64,102,47,1,196,100,219,216,94,78,53,233,213,116,178,61,100,29,5,197,96,163,71,97,101,195,28,63,118,26,134,198,126,11,174,20,254,244,109,172,94,115,83,166,236,82,159,116,107,164,170,130,101,86,89,45,20,134,212,152,198,10,123,250,222,134,129,28,78,46,219,129,146,21,21,225,238,231,211,205,170,96,250,92,30,121,43,202,186,62,178,232,153,38,75,197,176,126,209,89,119,46,116,100,98,165,107,137,163,0,154,44,79,184,165,237,180,90,183,33,11,181,168,247,179,150,102,47,235,182,187,172,210,94,96,157,13,56,7,46,86,94,205,149,212,112,161,109,92,238,81,98,81,19,54,18,253,202,156,185,45,232,229,212,176,168,158,140,133,160,204,30,149,213,167,214,91,103,221,36,16,45,67,0,198,41,165,12,235,9,168,252,118,138,41,236,248,212,1,117,43,219,112,237,103,27,174,189,12,98,249,154,251,175,170,254,75,238,191,220,210,127,7,167,229,194,235,207,225,23,40,166,185,22,181,71,103,69,134,191,73,27,193,192,63,216,3,167,168,200,22,73,81,49,91,194,244,162,18,150,68,214,81,67,67,145,48,250,156,125,70,148,11,34,249,104,71,38,149,6,2,249,64,2,80,210,199,137,14,213,204,130,171,50,111,121,165,5,59,9,73,188,124,112,192,120,40,224,34,38,4,99,13,173,149,84,169,117,208,123,233,248,20,239,160,3,250,146,28,228,33,173,107,178,30,217,39,164,125,235,32,71,242,240,250,65,142,84,199,63,97,224,242,112,13,226,227,84,82,249,146,202,190,117,0,177,13,215,142,83,249,247,227,253,129,44,91,103,141,11,234,146,245,181,59,214,236,112,248,162,24,224,59,186,122,231,56,210,164,195,39,201,0,73,91,83,38,5,225,209,244,89,50,64,84,166,3,138,162,158,11,238,183,177,226,29,96,236,119,173,30,7,99,223,191,202,75,133,228,46,91,90,113,61,196,158,187,97,97,207,142,31,119,173,50,18,48,4,44,148,9,142,56,93,150,130,96,133,218,165,39,47,243,89,186,131,142,76,228,21,2,92,43,243,185,66,102,13,127,200,4,146,58,148,14,239,127,155,177,140,71,90,93,218,147,3,188,46,250,133,233,23,109,171,7,196,200,183,152,153,71,106,146,100,52,152,78,176,137,118,253,174,210,234,163,44,118,166,235,78,66,84,22,198,137,241,74,210,195,53,30,84,243,65,87,15,244,229,77,89,68,76,144,45,51,166,29,147,36,141,50,88,89,110,72,216,87,4,88,84,45,145,205,35,132,208,182,39,7,117,187,121,11,98,43,177,171,45,172,64,114,5,152,168,170,68,229,18,19,104,91,117,34,143,41,76,2,185,101,133,121,132,213,106,187,33,33,134,216,110,200,163,243,69,136,99,110,65,104,213,90,222,33,155,180,87,228,160,104,59,168,60,146,171,99,69,107,101,158,210,190,139,72,151,66,219,210,80,88,159,194,216,245,187,108,116,2,23,231,137,227,246,158,15,158,142,7,37,45,165,203,100,198,151,203,236,108,155,137,251,222,102,101,161,33,101,130,34,134,176,159,199,16,65,167,204,67,48,54,62,97,47,221,243,74,52,192,197,136,127,75,123,207,208,28,179,217,9,8,112,65,183,150,83,145,120,117,130,230,77,79,131,43,12,163,206,113,147,186,110,50,215,208,194,25,39,192,45,50,155,220,90,166,164,66,170,42,20,111,83,136,142,48,110,59,96,157,186,30,144,5,173,98,85,134,112,202,35,58,233,78,14,88,234,143,41,154,96,160,170,21,166,253,151,199,95,170,250,165,249,195,7,52,247,4,149,107,250,69,232,97,7,229,104,37,121,224,37,125,6,87,157,113,190,197,154,103,112,215,0,244,164,9,196,109,151,172,186,45,154,64,208,47,76,238,164,65,32,246,33,19,216,159,82,66,210,174,13,240,224,227,147,71,158,112,139,28,127,5,137,111,89,176,200,143,80,108,25,203,52,34,236,196,92,48,41,76,182,125,203,228,68,41,72,98,51,35,197,50,169,53,167,89,29,46,220,25,162,240,236,6,98,102,58,51,66,164,94,227,167,33,88,193,206,78,87,77,142,213,68,109,64,176,58,77,193,206,68,151,40,76,229,59,198,181,145,245,237,244,118,185,201,135,83,213,89,55,200,246,188,168,137,237,33,139,227,30,223,102,248,135,148,252,143,83,76,11,10,194,39,11,195,244,157,56,160,206,40,254,216,103,40,226,183,244,225,135,254,71,89,193,92,178,113,192,51,146,67,229,62,45,115,138,184,248,148,228,80,182,89,30,131,220,163,231,136,98,121,72,149,32,237,82,159,229,95,28,249,137,98,249,237,209,192,94,140,84,224,105,14,205,36,93,244,167,236,123,64,113,140,95,251,172,207,225,200,79,217,13,200,222,80,206,243,62,135,163,62,101,167,64,217,103,41,231,69,159,243,178,203,225,81,126,73,122,42,86,28,80,23,221,40,47,170,18,15,82,123,129,71,249,14,55,35,207,53,203,190,236,202,190,236,202,94,244,101,113,150,52,182,248,138,111,145,163,72,81,255,31,162,156,51,210,229,60,32,107,23,238,79,82,214,131,62,235,225,70,214,227,148,117,214,103,125,210,215,39,247,137,23,200,20,208,62,69,37,30,245,37,62,87,149,216,163,227,124,10,255,8,194,43,34,90,186,91,180,217,24,185,164,232,194,251,235,134,22,24,67,247,86,87,205,155,235,156,231,116,233,40,30,92,55,23,53,18,50,123,189,28,28,201,24,181,107,81,63,75,92,201,28,73,200,236,222,210,227,38,95,144,101,97,64,217,7,84,245,2,126,57,2,11,61,219,72,123,129,108,185,206,215,41,144,112,172,0,164,146,206,168,69,69,241,3,106,202,243,162,51,171,124,222,153,83,62,39,153,162,235,242,27,15,169,69,253,94,80,64,97,239,40,229,147,138,204,173,112,9,128,178,27,141,166,79,75,6,200,125,166,145,246,128,36,44,73,251,92,35,237,37,130,167,127,177,145,50,84,152,50,212,205,185,160,192,237,239,231,159,79,41,54,255,82,123,244,179,202,121,93,168,61,250,162,90,84,47,184,223,47,171,69,253,178,228,72,66,216,110,93,23,126,106,156,164,70,202,231,40,229,124,35,101,131,82,54,26,41,79,51,136,126,163,79,173,131,226,180,114,19,169,23,213,131,174,229,135,52,133,33,228,201,209,139,140,208,142,253,215,139,250,113,247,251,41,189,200,72,239,154,88,23,152,90,212,0,10,102,22,245,28,40,220,155,188,30,234,198,41,229,57,141,84,238,34,165,60,137,41,123,244,179,154,31,159,197,197,211,85,239,37,217,1,173,174,174,122,78,179,119,208,5,157,147,76,245,89,157,183,172,36,188,74,146,181,209,54,77,197,78,247,58,221,94,248,46,231,62,171,145,17,22,59,93,77,29,48,185,228,218,200,19,194,183,120,86,242,140,142,52,107,92,179,109,215,108,170,78,245,4,59,123,164,98,103,79,64,232,126,98,254,25,220,72,248,227,228,30,45,238,78,242,41,16,184,30,73,32,184,71,199,139,58,99,118,241,115,28,198,17,231,211,135,94,84,143,112,24,71,245,176,203,123,176,145,119,191,203,59,237,242,78,214,89,107,156,115,140,51,190,183,206,248,199,156,241,110,102,23,238,4,129,60,205,219,217,57,227,14,16,184,33,222,198,66,200,37,16,208,58,160,222,204,0,232,183,177,108,238,86,230,104,247,131,192,47,218,5,1,164,200,18,144,60,198,220,200,28,187,164,224,87,164,231,58,94,36,174,56,190,55,40,116,228,227,4,243,220,21,207,234,3,226,183,36,8,183,252,126,79,151,93,33,14,8,65,39,77,182,140,251,70,35,147,242,241,68,6,235,187,133,205,250,133,118,64,108,91,132,110,83,93,25,187,255,148,137,99,29,79,248,47,194,127,66,129,55,208,5,177,146,50,182,188,29,154,219,101,155,58,38,241,6,188,240,156,184,93,138,201,89,23,37,102,133,147,178,158,167,172,96,82,214,5,202,50,147,178,30,167,44,58,253,134,138,132,105,91,203,124,145,250,67,68,21,137,160,82,49,161,208,147,84,168,17,123,68,89,73,69,165,77,214,136,220,82,54,207,141,205,145,168,97,225,155,93,39,250,5,84,89,24,171,214,236,195,191,180,65,247,143,77,214,138,8,194,67,206,58,49,178,146,180,14,121,192,150,40,200,9,93,146,135,82,54,216,99,51,23,213,199,93,1,193,170,227,167,92,142,143,2,135,220,45,217,222,88,130,49,175,26,186,246,4,185,51,195,161,84,218,175,4,185,177,215,35,87,148,219,220,190,242,153,10,0,194,158,109,20,55,160,200,61,217,202,126,50,210,231,75,151,46,137,65,71,146,220,70,41,86,8,172,223,85,58,6,182,159,71,246,43,1,4,16,216,175,4,71,230,137,158,150,125,146,81,42,34,30,201,238,67,65,96,207,126,118,131,244,157,101,161,32,58,76,156,64,96,165,3,209,194,73,32,221,242,128,177,174,99,183,190,181,21,183,203,144,92,13,14,138,105,186,220,167,7,246,147,231,185,170,131,98,138,146,204,137,209,212,148,82,227,177,212,14,165,118,198,82,201,75,202,102,99,169,109,74,157,29,75,109,17,24,226,247,89,117,194,170,126,33,109,114,52,85,72,174,151,32,203,66,217,231,207,111,136,91,132,184,157,182,153,42,237,55,206,111,8,122,143,140,122,246,200,112,81,56,209,130,182,83,229,45,146,74,10,219,62,72,50,122,121,80,144,231,176,180,176,154,42,178,198,186,36,86,105,157,13,135,172,171,183,195,97,204,63,94,188,247,182,190,125,224,149,100,21,164,61,255,155,157,190,125,230,243,55,175,30,7,105,127,251,231,59,125,27,96,242,207,188,148,244,237,31,36,171,199,49,249,247,191,146,244,237,199,230,48,253,227,63,157,244,237,20,21,62,53,176,63,243,98,123,5,164,253,174,129,125,238,119,218,43,199,143,31,167,32,229,159,255,163,118,223,134,171,41,113,28,210,126,252,83,27,194,238,181,255,31,254,121,82,218,255,237,209,13,97,127,77,103,223,201,134,3,210,158,254,196,134,176,93,251,37,252,243,49,101,255,228,220,134,176,191,168,178,239,36,16,20,167,14,16,118,40,15,10,218,145,161,253,74,96,239,255,37,191,14,165,109,219,47,157,223,16,217,125,108,197,244,159,200,183,95,37,79,157,111,225,183,151,91,167,34,195,51,250,92,91,74,103,119,160,22,38,42,70,38,156,218,216,56,50,86,51,82,105,19,132,81,220,106,39,157,116,106,58,155,225,0,9,251,132,60,40,98,80,118,154,36,228,142,169,34,146,137,192,176,41,138,238,44,40,188,214,22,216,59,109,23,210,67,15,108,138,3,106,14,216,75,244,128,2,112,87,74,151,20,188,32,232,230,197,122,211,171,170,247,165,127,185,109,189,217,104,189,83,223,170,122,167,169,222,155,117,252,38,170,55,187,170,122,159,221,190,222,169,132,145,208,157,23,225,204,85,213,251,248,246,245,166,60,15,202,240,60,236,184,178,122,37,215,251,200,246,245,118,146,70,53,238,101,193,47,191,242,27,155,164,19,174,170,121,208,85,83,189,156,92,197,203,195,241,151,219,87,241,242,11,63,62,246,114,235,42,94,126,118,252,229,248,42,94,222,24,127,57,186,138,151,207,143,191,28,94,197,203,143,140,191,28,92,197,203,15,141,191,108,174,226,229,211,227,47,235,171,249,84,63,54,246,178,186,138,151,191,52,254,50,171,169,103,25,209,222,133,55,247,213,57,105,10,249,140,44,136,228,119,83,153,56,98,54,100,77,114,246,95,22,50,101,153,189,51,235,178,29,138,120,222,85,113,206,49,10,114,227,226,28,80,64,56,10,231,160,183,83,161,146,77,36,25,63,219,235,153,234,98,181,41,246,32,117,70,155,202,238,229,44,232,79,233,68,106,18,76,176,133,147,178,251,200,159,133,20,194,200,205,126,67,80,204,118,50,153,38,51,5,59,28,110,8,107,72,241,149,198,116,244,145,126,26,11,191,68,206,173,202,126,83,172,164,1,141,185,178,89,212,16,218,246,1,37,58,132,5,89,215,118,122,88,169,209,210,96,44,51,59,80,80,232,201,78,35,53,225,201,83,53,39,224,148,22,28,139,131,162,1,11,86,243,201,3,42,118,170,13,55,39,218,238,103,127,107,182,200,165,207,52,102,91,41,57,24,245,183,115,66,124,216,185,96,144,216,205,189,231,102,216,191,212,58,76,214,189,210,55,73,102,172,76,177,167,14,175,159,205,44,42,153,191,57,154,202,74,235,194,61,40,2,251,117,177,2,129,253,13,177,66,74,135,192,254,221,67,169,105,214,203,253,104,177,83,55,215,162,64,66,171,44,146,145,33,144,213,96,245,22,201,100,101,146,64,144,42,160,130,112,220,126,93,28,74,141,155,73,179,224,130,49,176,25,144,159,53,23,219,36,56,154,138,145,142,218,155,251,83,90,72,33,57,96,144,226,23,18,183,244,130,163,69,43,21,190,125,210,179,210,243,150,153,110,29,118,201,121,75,47,89,145,75,54,110,80,62,246,113,163,156,242,223,83,251,201,5,227,103,214,224,204,74,54,144,91,16,36,100,214,140,62,144,140,204,255,15,177,140,137,10,105,92,84,10,79,118,209,85,25,137,63,11,217,135,24,39,174,13,18,226,236,97,26,252,44,59,112,196,102,157,172,79,64,150,16,33,173,132,67,11,64,38,120,185,241,196,85,46,217,26,20,171,95,155,43,188,86,20,167,49,139,119,99,30,251,44,91,166,120,147,251,3,124,130,116,120,162,242,40,25,63,2,220,114,15,213,186,246,91,189,62,16,92,204,33,7,80,167,216,102,194,111,126,201,122,104,119,32,164,43,62,225,230,195,228,210,6,135,210,40,25,89,106,210,185,177,91,197,60,95,33,233,64,208,59,65,210,230,150,246,195,67,162,167,207,222,227,112,1,43,198,147,60,255,21,121,254,227,81,64,182,15,228,237,187,76,182,244,245,54,137,60,63,249,123,226,80,218,96,47,191,73,139,115,124,229,207,22,138,43,64,238,175,80,213,100,41,158,44,203,250,133,196,106,66,151,104,37,172,190,12,27,221,63,100,214,169,247,135,82,101,227,192,70,84,144,190,72,220,104,57,108,204,236,216,148,242,92,10,229,79,78,105,2,225,142,85,61,121,250,32,180,218,117,39,68,42,75,112,0,148,145,3,46,141,121,243,185,13,87,127,81,69,187,92,213,46,241,91,17,237,244,101,91,141,18,255,149,30,240,95,9,180,61,184,66,78,68,241,200,183,8,240,37,114,14,36,245,186,228,216,37,91,171,198,98,129,139,141,18,102,63,148,147,41,14,111,189,228,108,44,163,117,230,9,91,100,222,110,131,19,181,18,165,171,206,202,130,49,90,101,159,180,38,106,13,68,105,77,63,87,100,141,95,63,35,127,222,61,76,234,68,147,114,232,144,34,178,93,60,29,66,103,72,39,72,9,68,6,10,84,1,171,84,236,58,143,159,216,211,202,76,90,218,13,113,148,217,192,200,118,237,67,149,112,129,221,10,173,36,201,128,60,50,95,40,171,86,240,184,113,176,26,86,87,79,29,108,168,122,202,64,217,160,122,154,5,101,195,234,105,14,148,141,170,39,36,23,226,234,9,105,136,86,245,132,180,69,187,122,234,130,178,73,245,180,23,148,237,84,79,251,121,211,186,167,91,145,195,168,158,110,67,254,168,122,122,51,30,114,213,19,46,212,153,234,233,109,72,145,87,79,119,128,178,215,84,79,111,7,101,103,171,167,59,65,217,107,171,167,119,131,178,175,171,158,222,11,202,190,190,122,250,199,72,2,85,79,223,5,202,94,87,61,125,47,40,187,179,122,250,167,160,236,124,245,116,12,148,221,85,61,189,31,148,125,67,245,180,6,202,254,157,234,233,3,120,110,85,79,39,113,235,85,79,67,60,96,242,234,241,52,62,22,213,35,185,165,239,174,30,239,39,133,69,245,248,0,62,222,80,61,62,136,143,55,86,143,4,153,120,83,245,248,48,62,118,87,82,101,187,35,43,72,55,159,236,175,125,102,67,216,55,112,2,109,54,90,244,16,148,185,2,105,175,31,20,17,89,10,129,34,220,62,65,113,236,21,47,220,155,232,100,206,57,130,133,90,227,184,69,228,87,82,200,19,172,43,84,92,136,120,247,181,210,59,153,202,210,249,238,111,223,47,146,194,147,24,43,38,92,19,123,253,32,151,84,11,238,183,184,207,62,132,86,245,121,139,105,107,74,60,55,215,88,9,30,130,60,113,156,29,126,13,238,219,216,29,192,171,46,248,92,64,90,102,201,182,152,209,90,101,143,194,35,180,235,205,158,220,227,164,4,75,101,147,126,187,186,255,209,217,104,101,127,106,110,139,212,96,199,53,179,215,190,238,245,115,226,85,169,241,92,118,230,146,166,24,2,207,164,41,45,149,118,145,25,227,210,153,235,86,72,205,228,143,177,156,206,131,176,89,105,127,123,99,83,56,97,53,22,182,191,190,177,41,246,8,193,242,147,95,169,31,84,239,193,225,112,184,161,22,171,8,88,164,52,179,215,243,199,3,60,32,70,249,99,67,140,175,231,148,231,60,43,162,22,105,219,107,62,25,158,248,149,77,225,212,86,118,174,100,161,188,178,221,50,235,178,30,163,179,156,146,250,33,206,242,206,78,60,231,232,6,35,15,192,200,5,227,178,106,173,16,246,153,13,14,7,72,7,21,8,251,210,166,127,158,27,235,215,92,233,188,186,29,223,126,43,179,67,216,155,11,159,171,123,19,143,245,166,115,93,130,148,164,51,139,32,50,16,63,75,54,71,159,96,52,131,47,64,214,97,231,178,243,122,254,140,246,244,249,77,97,231,182,124,192,215,185,236,127,251,139,155,194,206,111,201,190,214,101,255,31,152,189,115,75,246,172,203,254,95,48,251,186,45,217,215,184,236,79,97,118,103,75,246,14,151,253,83,152,125,205,150,236,25,223,243,201,217,153,203,254,211,79,111,10,59,181,37,123,218,101,95,156,156,61,229,178,47,124,122,98,215,82,151,253,197,201,111,119,92,246,198,228,236,196,101,63,246,233,137,61,111,187,236,159,252,244,196,73,109,185,236,47,63,182,41,236,91,182,100,199,46,123,19,179,103,183,100,71,46,251,199,48,251,214,45,217,161,203,254,253,71,55,133,221,187,37,59,112,217,191,138,217,11,91,178,141,203,254,197,71,39,142,91,187,236,135,31,157,56,110,229,178,135,152,189,107,75,182,244,95,236,23,38,173,212,132,204,45,145,66,154,78,68,242,229,80,165,12,7,192,48,117,86,230,83,21,233,92,224,145,155,21,211,51,82,16,153,233,0,16,100,199,121,146,231,25,136,60,100,13,14,132,69,178,87,136,162,227,13,237,200,215,173,67,246,118,36,167,77,156,169,29,38,94,63,200,99,232,176,169,93,108,195,53,8,143,231,109,72,172,42,243,208,149,37,99,187,144,140,237,90,144,88,205,181,145,205,93,11,98,178,185,107,51,220,68,101,8,23,34,159,246,214,1,180,216,220,174,93,25,173,36,214,148,121,152,64,0,109,123,207,208,100,59,217,18,14,139,15,201,200,43,216,39,18,252,167,205,76,158,100,63,194,232,112,26,17,194,8,187,254,29,169,93,255,90,20,54,208,91,202,197,132,115,200,165,162,202,145,178,197,179,20,213,238,173,206,88,142,94,133,8,76,31,167,151,236,104,240,218,154,43,139,150,7,70,231,200,118,193,30,45,138,153,69,157,193,204,57,234,215,80,34,173,60,36,112,1,133,51,55,164,80,132,193,62,177,179,72,241,207,252,209,52,128,128,32,62,14,138,157,144,146,115,43,225,0,66,74,71,46,197,205,20,121,12,45,166,69,3,100,43,13,4,61,177,168,73,104,108,96,218,153,236,96,201,54,215,109,192,216,246,145,249,156,219,40,90,96,192,64,107,117,62,239,16,74,22,17,134,1,67,252,180,176,93,3,41,251,161,101,37,152,18,91,35,133,92,188,79,136,170,250,164,19,38,106,221,74,104,219,161,164,16,209,10,218,246,210,244,17,252,169,173,193,244,161,89,157,79,32,42,115,130,101,79,250,16,150,121,4,33,100,222,82,50,181,109,123,241,124,165,156,107,216,210,213,223,139,64,156,112,178,101,110,252,210,53,213,71,33,16,175,62,237,10,254,46,178,241,81,112,7,96,127,243,169,10,14,113,106,154,150,62,25,17,157,57,187,81,249,21,99,74,100,95,254,152,75,249,149,80,5,235,234,212,168,32,204,70,131,66,153,38,255,161,237,30,82,137,120,59,57,18,10,168,53,59,124,104,67,148,111,84,248,161,144,147,176,151,46,93,186,164,7,133,34,221,159,213,3,98,52,8,87,80,176,235,103,96,95,185,116,233,82,52,200,3,96,70,77,129,122,163,18,16,159,130,232,100,17,189,133,174,119,83,226,151,244,201,61,56,83,229,196,219,230,116,182,201,193,159,121,68,34,140,28,169,57,195,6,149,108,218,230,72,44,114,164,9,201,139,97,114,119,114,229,235,9,201,81,158,72,184,232,92,161,88,161,121,147,151,181,32,125,169,152,230,147,101,133,105,66,222,56,54,30,44,167,166,158,206,163,20,73,222,77,167,73,94,101,250,122,100,9,151,43,18,210,84,83,232,83,171,126,247,134,191,246,149,91,38,206,164,207,153,56,153,147,50,59,219,103,110,55,165,42,217,142,202,223,50,193,19,58,250,173,152,227,140,2,94,218,87,206,108,8,171,178,221,196,208,114,210,233,31,38,217,43,37,109,8,78,123,16,211,34,78,27,114,124,109,123,30,211,166,92,26,199,207,180,23,49,109,62,219,157,76,143,13,240,99,145,12,214,145,22,235,23,72,171,153,62,155,140,126,96,80,136,146,17,85,20,25,45,14,104,4,154,189,126,168,12,8,66,140,160,0,125,85,124,86,118,36,48,86,15,172,62,148,74,142,174,231,109,157,234,104,180,178,17,16,80,114,36,81,50,103,156,24,195,213,84,49,92,41,152,57,69,49,239,112,76,243,73,49,92,117,21,195,149,189,27,76,161,45,205,2,178,55,219,54,95,25,80,84,145,103,25,115,206,143,12,7,243,168,15,21,56,26,30,213,133,145,158,60,40,142,144,40,183,4,122,221,250,82,35,200,173,100,132,156,15,12,10,67,179,76,32,25,46,82,47,207,141,170,230,70,185,185,225,238,250,185,81,175,54,55,147,122,91,119,225,80,170,234,79,231,195,112,115,132,209,42,118,52,82,240,79,248,200,214,71,82,217,12,150,45,45,97,28,85,33,29,141,221,179,154,138,58,130,182,11,197,28,112,44,88,10,197,12,234,112,170,146,58,142,118,66,161,143,137,65,160,77,199,24,61,205,124,23,215,21,36,72,123,233,250,35,243,236,228,108,142,166,146,131,75,174,243,170,18,85,72,113,145,189,7,251,197,47,62,233,38,69,186,24,149,34,21,175,165,197,233,100,122,36,106,242,120,228,251,70,212,100,53,26,53,153,227,125,171,132,152,44,150,116,250,120,223,170,10,251,29,39,127,20,200,176,161,82,7,101,91,71,157,147,113,175,80,56,211,4,115,136,139,251,233,75,63,116,56,85,54,3,109,147,210,126,96,128,127,87,231,115,222,215,69,192,114,133,15,12,154,226,100,171,249,124,136,251,57,9,250,142,144,221,75,92,22,145,255,156,100,136,220,140,191,28,81,216,115,171,6,105,8,88,29,146,40,120,208,202,163,12,72,136,135,206,42,221,217,230,248,234,113,194,46,177,247,12,227,163,46,230,55,97,153,80,64,248,136,156,66,229,0,228,113,75,33,125,125,24,99,220,31,92,229,145,84,143,23,2,137,221,83,92,143,139,253,201,177,66,171,48,161,116,182,98,101,143,140,84,198,86,43,244,158,166,56,232,190,106,227,171,166,145,55,35,159,211,205,38,147,237,250,224,3,28,83,56,118,201,98,153,102,212,109,23,103,84,85,113,70,53,75,89,169,19,100,172,212,114,219,58,226,109,29,185,109,173,33,26,13,91,173,201,145,127,187,176,213,97,189,173,157,123,72,64,86,137,35,147,107,146,70,234,246,67,102,39,92,58,216,241,255,171,243,132,240,38,56,14,152,102,143,90,62,182,78,218,15,80,125,133,180,122,128,92,248,7,6,52,11,213,107,248,22,199,97,229,9,163,232,247,85,192,255,66,35,245,103,170,128,228,42,219,155,128,72,206,5,170,195,30,183,103,37,25,253,129,182,248,59,187,64,30,165,124,116,156,149,69,192,88,12,68,211,5,86,173,229,49,67,127,208,254,97,215,14,141,236,75,72,191,13,121,138,40,114,91,146,76,49,147,67,129,97,49,90,232,16,127,25,35,35,201,9,207,84,36,16,61,150,103,61,145,79,67,140,196,2,238,36,222,60,116,58,220,116,152,124,35,166,65,191,81,137,147,76,184,101,167,78,22,211,72,14,76,35,29,48,237,189,22,220,81,98,184,201,8,183,99,132,245,7,185,134,233,115,133,33,25,31,45,34,22,244,181,64,18,145,64,70,209,29,118,234,144,35,116,201,232,83,219,47,65,9,237,213,121,100,239,114,201,218,178,96,132,126,113,243,165,200,47,134,135,158,122,57,94,62,5,236,89,220,130,136,158,67,189,4,81,158,64,152,107,48,48,229,125,169,24,85,5,153,3,114,179,142,105,84,69,144,27,242,238,73,32,246,115,214,201,99,72,114,3,146,65,65,144,125,25,159,179,240,50,115,230,252,135,66,110,50,198,57,139,9,41,169,49,103,154,176,9,253,156,233,122,206,82,158,179,17,89,40,152,177,57,227,183,25,63,42,111,67,144,155,73,115,38,160,133,203,239,107,18,218,36,217,108,57,112,191,127,21,201,41,167,205,15,22,4,195,193,199,16,244,228,162,110,132,146,74,72,159,11,137,147,160,137,60,114,34,131,78,158,178,32,192,44,8,75,136,241,120,170,202,181,66,1,110,192,228,240,124,65,66,53,82,77,172,223,101,175,63,145,71,14,213,215,64,120,64,205,225,4,29,80,179,72,8,213,128,144,198,1,66,26,36,108,67,48,28,42,3,89,102,195,151,7,11,12,186,202,176,82,196,48,186,34,161,66,186,3,103,57,85,100,199,140,95,25,84,86,32,189,206,197,24,161,69,81,192,102,242,98,171,252,238,85,54,147,20,228,16,138,71,84,163,160,21,206,89,102,52,85,178,211,125,87,25,26,148,113,80,149,1,67,220,4,228,218,200,231,161,131,170,20,56,0,143,84,105,152,61,228,11,13,255,196,133,38,216,44,43,15,153,117,2,98,75,72,78,157,93,144,59,33,228,189,161,203,0,84,194,150,123,14,194,166,227,63,74,17,65,130,235,63,221,39,134,50,159,134,168,218,229,102,47,105,255,196,29,102,201,126,112,248,164,96,160,131,20,20,105,22,181,139,141,113,73,174,164,244,6,196,192,254,234,185,134,24,111,103,194,252,135,142,125,249,62,183,156,200,129,71,239,19,194,30,60,6,237,178,104,179,37,33,249,241,180,109,124,34,111,59,25,59,241,14,109,242,122,236,176,246,43,46,129,74,51,138,81,2,45,252,235,227,111,192,20,153,169,98,41,220,137,248,22,254,255,240,124,63,175,29,135,8,203,28,166,9,175,6,116,201,59,200,56,115,198,196,41,218,93,68,70,18,232,16,222,88,11,7,209,33,8,131,130,104,143,22,169,149,177,125,236,110,8,173,146,212,122,120,196,238,19,72,138,132,52,66,26,25,40,55,192,62,57,111,209,89,219,198,1,182,29,7,219,130,142,61,243,225,234,128,226,207,169,160,5,10,90,171,243,7,84,108,239,165,142,208,166,49,116,85,146,215,145,166,244,21,210,138,4,206,125,128,65,58,43,177,14,201,31,60,92,146,126,12,90,143,245,224,190,211,139,138,118,12,73,154,2,23,21,46,96,75,198,75,70,102,184,165,31,144,13,115,115,246,110,51,121,139,233,238,79,125,249,83,215,30,102,112,217,99,133,177,226,142,84,129,49,235,13,12,138,108,38,0,85,69,147,72,138,22,35,37,224,11,37,29,111,80,230,56,217,179,120,89,105,59,36,217,158,182,47,137,50,159,1,77,225,217,118,128,98,207,68,82,3,79,175,32,85,70,48,86,251,43,40,160,42,216,163,182,75,125,207,43,121,7,171,236,123,64,219,103,68,233,229,145,200,68,150,85,224,75,201,174,222,196,184,199,204,105,237,101,173,19,143,148,0,230,25,105,225,211,47,125,252,245,135,83,60,133,247,30,43,218,56,90,3,237,230,104,219,56,218,176,194,173,77,10,242,197,20,120,112,187,0,50,109,236,253,14,255,89,104,170,93,207,103,32,112,225,45,131,42,188,101,70,194,31,78,171,130,110,106,8,200,157,232,187,136,92,1,109,159,19,165,221,235,48,120,247,178,151,233,222,50,15,96,10,87,214,20,179,221,124,125,72,187,31,111,222,14,232,61,122,9,215,72,130,191,238,92,36,230,59,195,186,110,243,66,192,14,91,191,62,37,124,66,194,9,207,86,9,26,223,221,191,168,99,186,35,247,31,99,167,79,2,193,45,34,60,148,247,66,196,254,237,17,196,7,212,2,133,45,46,82,167,45,83,14,13,134,121,174,22,243,255,15,72,135,59,66,71,219,189,129,140,27,22,98,235,204,191,26,179,100,165,195,145,97,228,19,146,153,201,157,137,21,21,39,168,189,223,73,76,0,173,157,99,37,57,78,119,202,38,242,63,4,183,72,82,160,41,197,202,65,186,118,148,221,20,108,182,205,232,180,90,83,123,246,225,143,109,8,187,33,64,99,107,209,78,80,164,188,179,27,226,176,219,187,106,57,213,172,200,124,43,91,151,224,27,149,184,143,118,31,166,144,179,50,85,61,35,4,46,15,217,9,18,95,59,13,225,194,199,106,233,30,118,169,90,45,205,247,164,37,97,125,112,139,84,185,130,22,159,90,33,95,187,28,151,189,178,61,94,31,31,174,20,36,184,139,75,18,224,221,34,85,161,237,197,232,40,46,119,139,211,245,192,23,197,234,124,110,144,213,149,228,143,219,94,77,181,85,22,73,158,231,57,139,42,48,101,194,252,108,136,116,20,193,47,240,53,26,216,251,63,182,81,97,243,144,184,36,36,164,222,146,40,71,246,25,133,176,180,81,89,68,160,108,251,125,133,182,127,42,143,129,42,237,254,227,7,5,94,169,248,226,10,126,197,200,170,190,19,137,105,2,78,42,34,124,161,109,219,239,231,194,68,186,65,155,42,208,174,2,136,236,243,226,125,228,101,142,45,175,144,90,55,87,68,147,153,100,100,38,5,93,223,20,240,179,8,32,230,40,225,222,154,3,23,97,180,174,214,65,154,37,123,51,93,3,72,114,239,66,234,100,80,200,249,188,69,102,49,116,184,118,213,174,60,180,251,242,22,209,222,9,83,40,214,12,248,108,81,36,84,33,17,33,203,42,245,160,104,147,75,124,46,53,94,108,178,114,220,245,24,188,245,221,144,224,30,42,243,40,169,20,191,12,128,43,189,95,109,17,122,167,213,66,208,117,161,179,143,75,186,113,171,213,30,177,89,13,89,119,133,54,30,164,120,51,70,253,34,202,67,242,236,69,254,145,116,191,146,190,251,171,84,109,124,176,166,136,69,219,17,222,127,146,14,26,252,69,172,47,75,12,156,246,52,170,92,128,227,166,11,48,91,124,225,165,128,235,54,218,226,2,44,43,23,96,44,17,53,198,6,132,218,137,175,240,1,64,82,150,117,188,119,217,217,95,238,244,93,24,171,153,218,76,32,92,117,66,121,236,12,238,206,253,132,47,184,79,64,222,113,13,203,131,2,38,76,67,187,238,133,160,57,164,102,198,134,19,218,253,208,158,48,156,144,122,221,174,68,253,2,58,212,10,82,197,25,57,50,203,233,196,149,242,54,179,247,6,178,237,156,10,152,7,132,146,24,124,92,69,7,69,23,19,144,6,214,108,76,163,129,212,216,154,13,116,232,79,236,8,95,213,85,25,121,254,87,39,165,112,97,14,201,188,206,234,53,134,34,101,201,181,28,48,107,67,40,232,4,12,235,93,254,205,18,178,171,187,216,156,145,64,2,192,13,136,245,139,14,21,221,97,244,205,72,65,80,195,49,175,135,184,204,41,114,83,45,184,87,110,138,5,59,117,5,107,244,61,184,23,111,221,174,19,114,164,19,178,217,9,70,136,66,138,82,242,5,75,179,3,210,238,98,247,144,46,61,56,52,202,133,234,168,15,121,34,60,108,132,169,212,39,116,252,178,231,187,34,74,64,175,33,253,215,65,142,61,56,148,74,232,144,154,211,5,29,52,9,227,203,119,24,33,62,246,211,80,87,56,82,155,113,181,133,85,109,161,171,141,32,225,91,9,87,51,203,216,245,25,158,20,60,93,86,175,149,69,99,178,187,202,224,76,43,63,197,172,58,42,60,48,19,222,36,209,97,63,105,138,153,26,172,162,50,70,104,78,161,76,136,91,177,116,84,145,193,246,31,26,70,212,204,42,68,77,242,105,195,183,217,80,15,137,50,99,59,101,37,171,14,14,248,43,58,46,20,71,224,224,184,84,196,255,48,179,193,16,65,184,233,90,188,19,219,248,180,11,207,39,9,109,210,224,133,64,236,171,219,135,126,23,130,204,110,100,253,137,115,219,215,163,110,251,20,7,54,116,155,216,238,39,192,97,218,225,21,251,198,230,236,2,34,208,253,66,91,164,104,162,35,243,121,100,69,146,75,138,9,26,80,0,105,93,95,161,170,73,49,144,150,163,171,156,79,34,173,17,94,204,170,188,69,138,34,104,220,169,1,223,169,52,161,16,224,125,42,118,210,133,26,208,133,154,144,255,95,135,204,163,32,192,93,82,199,157,102,208,82,142,68,24,145,152,143,225,251,149,195,148,41,20,29,219,2,47,117,182,170,166,171,6,79,162,19,100,110,197,7,50,41,248,8,79,217,31,200,213,1,79,178,13,230,179,150,153,183,34,224,1,175,141,213,91,167,222,100,55,18,69,12,18,127,210,209,171,244,18,197,82,215,116,240,186,166,198,170,162,70,64,175,38,216,11,104,241,177,215,102,102,221,202,92,85,214,203,42,249,249,107,85,198,241,168,179,126,145,241,114,179,207,255,230,166,191,250,94,252,205,77,6,154,178,47,252,230,166,176,159,36,203,27,65,37,122,18,147,95,254,77,39,153,199,186,47,242,139,169,251,73,194,112,122,145,5,211,157,126,30,82,141,172,68,16,3,236,223,99,197,108,239,186,51,189,123,62,120,250,204,3,103,55,134,242,84,126,173,99,131,145,91,220,35,68,113,13,92,251,161,98,71,111,253,67,176,163,46,118,247,189,189,161,127,88,191,55,223,161,151,96,199,157,102,9,174,129,107,122,242,190,145,204,59,151,157,179,101,92,22,65,9,102,192,26,213,29,63,152,191,14,118,244,228,221,176,227,222,124,7,210,116,240,186,115,86,159,0,133,101,250,69,11,201,217,34,162,239,113,136,131,121,27,138,83,207,0,62,68,236,34,133,101,95,170,167,75,248,53,163,150,104,102,112,160,83,132,217,190,156,10,181,84,13,62,129,132,116,233,86,159,176,209,49,164,249,87,231,139,25,242,142,93,37,192,102,5,51,196,23,227,36,28,158,47,148,37,23,71,101,135,195,225,80,29,77,141,37,177,230,90,161,236,212,106,42,119,218,117,80,54,122,159,149,253,239,59,193,192,71,214,216,152,208,80,230,147,66,61,214,235,156,42,118,244,224,204,185,84,193,142,115,133,70,130,208,128,94,37,158,220,144,206,167,196,233,209,96,86,65,219,63,191,116,233,82,116,244,120,170,108,140,12,160,89,170,89,47,157,205,144,180,38,161,40,101,246,18,161,221,149,217,5,73,42,87,217,39,144,2,30,85,128,163,130,169,126,222,246,107,32,143,160,149,106,154,48,92,143,130,230,131,3,92,96,9,14,22,98,146,170,120,200,11,158,160,216,181,37,77,163,194,174,107,80,171,248,13,176,139,212,62,157,7,208,90,117,66,77,162,71,77,153,16,166,81,72,226,182,61,90,208,26,234,69,141,181,118,47,236,232,93,250,203,191,248,230,159,253,241,191,254,194,37,113,250,228,162,22,222,172,91,49,110,48,77,123,8,173,18,66,182,176,243,42,59,60,45,90,69,64,84,111,97,32,44,84,255,48,105,72,2,18,82,226,31,60,117,166,201,167,151,233,94,146,254,27,54,2,48,86,128,233,35,109,26,33,29,26,113,14,40,15,105,228,36,25,78,28,201,50,18,136,87,29,82,79,128,244,100,96,79,14,138,118,73,168,75,10,144,194,199,234,40,78,189,21,111,167,16,211,39,7,69,135,52,196,150,16,153,214,138,180,111,231,6,249,52,221,163,212,20,222,21,233,9,142,197,104,96,122,141,213,67,172,85,142,173,41,139,24,87,9,83,15,84,173,128,136,152,132,184,178,139,158,80,26,71,75,248,79,17,180,75,222,109,218,158,28,228,56,106,38,200,251,121,135,228,76,138,32,158,251,12,87,73,150,169,100,68,226,36,78,253,156,3,243,49,242,14,82,26,253,162,141,163,10,8,148,30,130,62,225,130,71,208,113,163,39,148,84,43,222,209,24,61,137,162,32,222,50,122,138,51,111,77,191,64,242,124,122,141,167,32,134,244,132,159,2,178,242,102,132,109,23,121,243,29,4,172,213,102,19,242,250,245,198,68,52,222,193,249,210,3,62,234,3,136,112,85,104,80,253,132,68,241,146,43,112,35,86,110,196,138,210,253,136,169,81,198,57,11,74,183,46,26,37,75,54,66,231,61,75,237,181,8,188,61,196,99,54,133,208,123,155,83,16,16,85,4,101,17,179,57,20,158,101,41,40,187,118,172,80,101,222,70,206,173,196,119,58,116,232,50,236,41,82,174,109,162,52,200,46,103,80,180,56,232,26,158,199,205,163,181,192,51,215,198,158,109,44,9,204,34,230,43,73,227,123,122,194,27,236,49,0,59,126,144,78,91,93,98,57,70,253,98,57,241,30,61,242,6,21,195,75,43,122,44,223,129,187,188,15,1,180,250,119,65,50,176,241,42,233,48,112,139,239,35,193,223,142,222,117,103,206,21,154,231,40,238,67,50,192,209,197,37,184,164,181,99,16,150,185,182,151,228,33,179,100,215,92,199,77,89,180,200,169,131,25,14,126,194,23,90,236,128,67,118,37,138,191,73,66,64,164,36,208,109,54,224,210,136,158,32,24,189,14,82,42,14,94,2,58,213,225,1,177,235,163,218,82,5,73,45,29,150,60,158,202,157,126,142,107,62,97,191,24,58,52,103,96,170,207,103,164,72,88,144,47,22,216,147,175,231,100,145,164,204,21,246,147,247,111,178,136,194,81,95,25,155,13,159,254,177,77,145,125,130,67,19,116,250,36,43,67,134,183,154,251,41,136,237,218,177,178,224,243,192,33,52,26,164,180,137,81,154,252,61,47,179,2,182,121,99,203,10,8,174,108,5,224,151,6,99,175,59,209,248,194,193,164,47,92,125,5,28,14,222,83,72,229,53,63,136,230,15,130,159,35,89,113,194,109,98,31,47,123,55,1,199,71,72,232,246,183,81,137,23,167,42,57,188,65,4,170,79,161,215,144,98,142,243,160,162,123,76,117,235,135,32,176,252,54,51,168,253,12,42,226,51,72,255,165,32,156,252,134,59,17,221,12,170,18,203,17,88,94,225,180,45,6,204,164,89,100,237,65,78,192,249,166,132,89,90,138,45,94,185,113,31,194,1,16,33,128,68,163,160,185,240,212,13,1,124,224,218,99,138,207,17,55,228,86,68,156,41,45,27,94,253,100,35,195,230,5,134,141,208,201,164,137,172,124,178,54,83,134,23,71,222,207,136,28,157,78,236,253,159,221,20,54,131,12,215,234,195,248,251,193,207,109,138,108,93,36,207,24,165,217,138,117,169,116,82,242,241,136,188,130,165,144,200,32,173,154,202,215,49,112,8,200,95,23,140,250,88,172,164,1,24,187,111,37,13,193,144,35,24,50,1,237,131,98,191,19,116,131,202,222,215,105,227,13,253,39,238,149,111,136,149,52,38,76,100,118,76,13,182,58,218,153,20,71,24,77,170,229,37,247,246,55,25,81,217,52,61,63,241,165,54,219,175,227,107,28,111,151,42,16,86,102,127,151,4,191,61,253,78,210,129,206,177,216,216,161,221,120,161,112,198,2,101,108,239,71,200,100,89,219,100,172,23,65,210,116,245,173,122,175,57,46,134,176,157,50,123,29,113,164,46,134,221,30,138,139,161,109,64,245,64,184,168,110,29,171,78,119,213,66,110,216,99,171,174,142,122,45,26,189,118,252,242,132,94,83,92,0,238,178,166,234,110,35,41,232,200,220,86,78,191,134,92,68,196,237,114,100,84,114,180,116,229,212,107,232,123,14,213,104,241,4,68,246,17,150,24,176,105,180,73,126,60,144,102,157,141,156,85,189,130,76,49,102,118,198,172,11,176,136,141,98,17,93,222,236,76,110,49,59,35,175,54,103,177,33,71,109,206,4,27,96,136,202,174,74,188,54,155,179,109,44,206,234,150,201,218,74,114,40,190,87,183,54,19,91,172,205,216,43,79,76,170,209,91,155,137,45,214,102,19,94,106,54,53,193,186,107,186,50,64,99,65,223,183,222,0,109,194,0,182,246,138,146,147,105,182,42,226,168,70,50,123,15,61,111,107,114,37,201,228,74,110,49,185,146,181,201,149,244,30,57,100,100,229,98,171,116,92,80,149,228,203,70,134,46,152,188,94,112,158,202,65,243,104,147,149,68,78,57,79,209,202,255,222,31,114,29,62,176,216,109,148,163,14,177,11,174,97,79,124,82,26,192,74,170,193,216,189,43,41,18,25,228,53,203,98,60,5,44,198,160,248,70,234,240,252,8,200,189,102,144,123,77,210,65,15,114,31,248,161,72,251,58,54,67,82,7,84,214,137,26,46,167,214,185,82,52,124,59,169,203,138,220,188,117,221,123,130,63,55,236,112,106,106,135,83,57,230,21,170,14,177,57,134,100,85,33,7,214,166,211,241,213,7,176,139,7,48,87,15,192,212,3,184,182,49,128,144,97,102,174,160,202,89,174,50,171,171,212,147,231,100,139,123,107,53,16,70,247,185,130,182,58,220,86,236,219,74,37,7,184,116,173,169,186,53,138,145,205,62,178,127,30,168,168,138,6,105,22,124,84,249,90,66,234,131,244,208,66,166,216,22,56,153,200,172,108,137,114,176,139,163,28,204,229,186,25,229,64,115,243,65,35,64,144,232,105,138,15,207,67,39,24,115,114,7,12,249,235,7,46,190,121,204,224,8,26,194,195,196,101,71,91,227,129,81,37,61,145,125,55,199,1,116,32,9,45,238,103,198,253,12,183,134,165,81,28,150,166,234,167,170,251,153,110,219,79,106,97,127,255,177,222,37,121,111,222,198,138,143,164,74,55,59,86,16,110,122,17,219,246,209,84,67,108,131,195,208,238,125,228,179,223,120,26,255,127,221,187,142,55,159,254,209,128,3,44,132,126,224,208,238,181,79,65,64,213,159,228,250,121,79,178,109,9,107,236,144,103,171,191,141,41,66,247,137,142,164,124,219,229,49,132,200,246,134,46,20,5,41,90,145,41,114,144,14,85,200,51,6,116,224,152,65,191,33,14,65,96,191,46,14,13,28,190,171,134,54,168,236,86,114,82,2,5,49,93,162,161,99,115,216,164,35,103,24,111,87,116,149,209,139,253,227,223,75,64,168,83,56,199,192,14,166,230,102,221,125,147,142,123,194,121,95,116,213,194,1,21,247,116,178,168,5,139,59,98,254,86,216,29,197,54,99,122,108,133,55,67,46,85,31,78,92,201,135,83,137,243,208,80,208,206,190,59,113,113,53,146,143,25,153,172,179,192,188,205,231,169,3,56,96,78,87,59,72,12,69,252,51,3,92,148,36,79,80,96,250,69,72,178,31,175,210,117,176,215,20,170,143,168,40,194,211,21,214,169,74,92,192,180,54,18,151,154,163,52,10,154,71,13,161,141,251,69,124,132,173,114,66,178,121,181,34,215,108,147,19,176,86,160,104,217,245,187,160,101,127,228,193,79,62,35,238,34,148,227,254,192,34,237,254,129,65,90,159,251,130,34,81,110,87,74,179,0,47,62,226,36,148,225,10,123,248,118,140,111,139,187,72,161,166,25,114,172,97,124,67,37,41,112,144,241,239,81,112,132,177,225,73,8,155,195,83,172,162,38,99,87,194,106,55,132,229,168,24,19,133,241,55,218,135,104,158,52,152,60,6,227,162,92,130,57,74,92,45,133,121,32,216,105,85,80,204,10,181,4,157,125,66,152,37,72,236,197,135,145,4,172,116,120,228,244,19,149,121,0,2,162,62,9,7,91,128,247,103,116,200,172,67,128,108,159,236,115,63,3,104,37,36,67,202,35,32,67,90,95,201,178,11,252,153,38,144,38,247,7,82,53,48,196,38,99,133,213,78,186,132,94,213,97,207,187,51,191,178,41,172,26,243,188,163,112,156,7,197,181,88,248,160,152,101,122,47,35,127,15,251,35,248,130,225,248,197,15,252,202,166,200,238,0,101,187,7,197,245,246,255,250,188,203,185,190,180,23,62,143,57,91,156,128,245,107,117,2,94,96,146,3,236,11,216,72,68,176,255,246,44,53,159,221,35,217,119,119,1,239,113,213,85,144,229,120,75,121,24,180,12,187,79,78,165,220,243,145,161,30,20,93,30,221,2,15,121,15,67,14,131,143,246,144,149,118,119,246,46,80,251,68,55,103,18,137,206,9,43,14,145,231,36,171,125,57,138,245,66,78,150,90,135,82,146,110,237,161,193,238,19,187,172,25,48,96,206,172,125,5,151,129,28,213,58,45,167,228,252,67,155,155,225,147,236,191,194,33,6,99,159,68,115,255,110,64,170,248,160,88,224,78,115,55,253,196,211,84,186,137,119,211,36,236,75,159,175,230,136,215,43,241,6,52,68,105,127,244,137,77,97,195,45,239,219,159,120,98,83,112,213,15,61,177,41,178,239,39,71,78,246,202,159,181,23,127,99,115,203,40,216,87,115,63,223,212,223,8,84,92,221,212,206,16,204,233,244,198,131,251,24,39,181,170,232,166,136,233,166,104,52,108,12,159,231,204,140,59,237,164,246,97,99,52,71,30,145,35,161,253,140,147,110,67,104,127,79,48,110,209,214,176,33,20,3,213,199,186,216,166,26,190,88,42,214,80,58,172,65,166,7,21,235,202,231,64,247,204,162,206,172,201,13,135,236,33,3,59,96,251,166,236,32,179,153,1,177,166,120,251,81,164,236,61,186,139,87,39,121,133,175,152,117,34,211,242,176,178,105,117,206,10,78,225,98,13,25,157,22,145,149,107,69,76,244,85,188,202,22,174,230,200,124,17,219,206,49,18,92,255,194,151,63,245,101,65,1,208,91,108,180,10,134,3,160,27,136,108,135,2,160,83,77,91,236,93,73,92,104,56,0,122,35,10,212,50,81,51,20,92,43,100,183,0,210,92,86,1,208,85,35,0,186,51,43,37,26,146,20,195,115,100,49,218,57,134,71,170,130,246,34,241,141,129,51,4,235,170,57,247,77,231,72,20,105,64,101,231,72,37,63,91,69,24,33,171,23,36,130,104,234,178,132,130,92,142,5,38,55,222,168,151,44,40,184,146,0,183,94,200,97,103,12,254,54,217,79,72,23,150,154,173,157,2,230,155,66,118,207,113,95,191,142,172,46,61,96,41,7,74,31,91,19,149,126,251,119,155,20,169,106,174,115,175,182,174,214,121,64,182,124,193,171,173,115,54,70,229,16,59,102,114,120,164,43,94,231,26,167,72,251,117,62,22,211,101,242,58,55,205,16,58,29,231,87,67,214,136,202,225,179,244,98,92,231,113,174,25,72,201,159,146,113,153,189,13,212,30,13,69,171,39,223,101,150,160,213,83,239,98,51,145,46,199,79,154,101,118,50,227,15,171,3,44,221,205,91,148,133,23,245,58,59,19,6,21,223,72,163,226,249,224,13,80,155,120,71,228,212,27,173,206,147,183,47,110,128,200,234,53,82,71,12,135,195,161,92,197,167,216,45,12,109,99,54,133,8,173,94,99,171,142,134,193,183,118,27,64,147,254,72,243,6,208,28,50,94,87,102,213,17,155,85,27,183,1,76,189,1,76,99,3,56,78,69,17,189,78,232,236,1,152,196,234,53,208,37,180,92,12,26,183,238,13,174,123,60,82,73,226,49,203,229,39,175,240,192,13,132,130,11,233,198,210,166,101,30,84,75,219,240,210,214,227,75,91,53,150,54,123,227,80,244,130,109,150,182,195,218,123,201,200,212,153,110,196,11,194,199,58,108,97,215,163,202,22,63,169,236,196,60,219,69,49,214,200,26,188,3,17,82,247,41,180,32,32,107,167,41,43,243,54,139,58,137,19,233,208,94,152,198,173,147,17,47,50,195,180,126,184,76,241,233,194,126,97,96,186,2,92,219,233,168,98,220,203,183,34,91,62,131,44,139,30,97,89,244,4,150,5,90,37,82,233,109,218,82,200,181,100,142,107,33,107,159,195,121,27,166,28,95,83,226,69,204,39,81,216,175,228,21,205,221,28,86,1,228,34,218,205,145,139,244,218,68,143,107,110,97,195,108,145,74,40,40,48,14,132,4,20,126,32,1,243,34,245,227,173,20,240,11,187,156,75,32,147,43,178,70,163,144,76,49,7,119,13,240,72,242,108,71,48,198,118,196,204,118,196,200,24,152,38,19,111,198,217,14,227,35,109,213,252,98,0,17,173,103,72,203,132,176,116,252,108,175,178,13,62,183,29,249,136,253,19,218,54,220,182,168,219,22,117,219,193,182,109,19,235,31,179,233,228,87,2,25,185,85,23,17,190,67,219,175,60,250,70,129,103,186,253,114,139,73,244,226,236,163,28,105,127,51,17,186,108,218,210,78,136,109,85,252,42,219,153,81,92,61,199,11,1,41,197,35,82,19,64,60,38,38,136,120,58,163,145,233,148,87,50,36,51,34,38,128,96,4,150,175,8,120,157,71,212,100,56,222,164,225,38,197,196,38,47,251,5,67,136,143,58,46,127,164,189,132,121,252,38,255,30,88,220,38,226,16,36,54,58,124,220,63,190,99,192,129,241,142,225,254,69,78,131,44,91,233,148,106,192,29,146,189,128,238,9,104,207,223,105,106,185,139,219,32,178,142,217,24,112,204,198,70,236,114,229,167,37,224,105,9,157,175,4,51,213,175,26,163,119,60,140,49,109,55,23,153,114,106,107,100,74,79,178,190,77,184,255,252,143,33,168,249,55,233,216,10,23,186,18,151,94,99,39,170,117,222,124,6,89,99,97,175,255,231,116,169,124,224,46,32,116,166,59,32,176,226,59,239,154,247,129,208,199,74,4,86,220,65,197,238,154,79,178,213,4,34,94,216,23,52,139,68,247,111,193,225,231,153,35,15,119,233,44,10,107,99,74,15,3,16,13,242,72,145,97,12,153,226,178,192,240,205,236,122,255,50,1,6,16,129,161,88,187,21,247,249,111,230,254,206,185,191,224,254,118,221,223,253,238,239,109,125,118,242,116,255,209,109,191,212,167,202,157,197,37,40,251,230,126,130,43,147,40,9,83,178,146,148,95,203,141,215,147,114,64,51,7,35,71,242,109,34,64,197,29,108,161,104,150,113,178,87,7,12,128,191,150,155,4,76,202,118,92,30,10,131,11,143,56,131,144,221,129,187,168,99,54,108,52,28,154,153,232,72,142,208,12,37,72,155,249,128,113,36,68,149,117,0,57,13,146,3,200,81,28,41,251,165,211,27,236,189,144,117,151,83,101,63,247,161,13,97,255,30,104,219,45,237,69,252,253,192,125,27,164,169,163,91,157,227,171,54,29,100,116,141,123,226,232,192,143,212,2,239,138,251,110,74,186,217,119,88,123,84,68,167,65,149,78,212,237,3,133,47,143,130,143,122,194,206,184,136,223,134,35,98,146,46,56,164,235,187,185,61,20,110,15,225,130,38,251,147,35,170,69,78,153,115,150,119,50,225,26,71,145,66,211,136,236,46,100,89,57,136,50,82,117,251,196,117,133,116,176,182,210,5,238,150,182,88,1,105,111,89,57,158,134,20,7,226,80,170,216,97,153,34,112,7,46,2,183,228,8,220,70,8,97,132,97,163,199,172,100,21,166,19,255,208,220,140,119,127,54,247,164,147,239,126,92,119,191,211,232,126,148,248,78,191,29,212,45,114,142,150,135,234,170,93,77,232,69,47,175,199,155,141,124,50,28,32,40,209,250,108,100,34,65,179,39,151,179,6,222,50,161,134,123,36,38,10,137,77,221,35,142,65,232,81,138,136,153,120,248,19,46,0,238,239,104,22,204,44,149,69,80,49,117,230,176,225,91,108,191,115,210,184,205,123,234,4,12,75,72,94,144,251,25,148,166,225,166,135,171,31,2,187,191,44,116,246,95,217,32,39,154,120,142,12,199,130,35,228,140,230,226,8,129,180,79,86,161,158,2,246,251,10,217,81,139,60,188,110,27,1,238,217,191,168,133,13,73,254,229,131,95,159,253,97,23,252,218,39,156,247,9,94,208,72,67,160,125,7,134,204,11,181,55,43,174,155,141,11,162,181,187,56,205,65,151,33,124,160,8,65,103,95,149,206,94,15,89,64,236,122,224,20,156,84,213,184,139,86,208,85,11,245,8,186,19,71,0,141,222,111,140,247,254,25,159,192,206,110,208,112,118,235,86,21,49,143,18,48,143,226,103,173,246,112,91,234,47,136,228,49,93,17,40,85,48,227,138,0,193,41,64,98,81,211,93,184,202,118,211,163,196,98,48,25,139,148,40,173,81,186,145,89,63,85,67,107,64,192,240,176,129,253,42,199,25,222,39,12,125,250,200,121,167,59,72,78,250,77,153,98,188,214,170,75,210,201,136,171,46,109,229,70,245,118,93,114,12,188,114,60,164,28,227,33,173,56,40,112,211,217,175,178,90,153,181,81,147,203,115,116,247,236,219,105,151,49,62,35,29,180,21,252,40,133,229,84,181,67,34,179,240,36,189,244,4,16,11,109,169,254,145,32,157,116,237,254,237,231,250,43,248,92,255,197,223,126,174,255,148,62,215,63,248,43,251,92,47,27,29,174,203,83,242,228,149,8,122,201,99,0,194,58,138,251,127,144,160,87,142,8,192,70,195,201,147,77,148,11,196,238,197,182,25,210,131,206,162,39,235,233,119,166,138,169,205,166,146,209,9,1,55,88,82,162,200,60,136,95,148,141,23,9,225,190,91,18,141,217,180,5,162,136,94,100,237,102,198,40,65,39,11,46,2,239,195,35,113,14,131,155,117,76,225,4,53,197,105,129,214,155,116,86,71,45,182,23,63,184,41,178,247,229,1,251,254,11,54,157,33,13,149,81,235,120,135,197,69,204,209,201,254,17,173,3,142,246,2,20,22,205,52,234,161,209,124,80,210,199,99,150,37,126,11,46,227,196,249,119,79,174,77,189,134,218,42,42,8,247,41,137,170,136,99,227,85,165,187,106,174,177,170,140,75,235,240,150,82,19,138,80,154,34,33,85,99,229,57,130,251,211,90,77,173,235,147,76,87,69,11,162,34,219,212,146,13,179,153,130,226,228,198,214,148,246,83,127,86,197,237,137,237,207,255,217,134,215,58,69,189,251,134,195,225,115,180,29,200,217,88,16,171,86,196,36,246,46,152,37,37,159,7,36,64,34,252,126,45,38,197,58,222,185,182,152,206,78,65,132,212,88,155,68,234,69,90,129,64,100,217,41,166,242,103,42,59,168,29,32,217,48,251,154,218,226,135,81,130,103,171,208,183,26,187,2,45,104,103,59,242,107,107,213,89,194,170,51,220,176,81,105,63,91,15,66,216,71,255,108,195,171,202,162,222,143,14,135,195,243,146,71,68,27,60,134,4,168,255,45,232,0,246,182,13,41,96,223,102,0,187,115,13,40,152,133,102,163,175,83,75,112,109,197,47,255,55,102,9,94,87,52,158,83,153,192,181,249,235,19,98,230,204,18,164,13,66,169,131,191,13,255,78,240,119,196,230,105,175,71,154,248,179,163,39,197,36,81,121,84,157,20,140,181,208,80,9,5,124,82,4,219,137,202,13,68,219,139,202,47,123,82,132,254,164,168,5,223,213,73,161,154,39,69,56,118,82,144,76,245,25,62,41,200,124,80,213,39,133,170,79,10,133,39,133,170,79,10,142,65,190,168,97,68,202,173,188,32,125,242,17,161,249,136,208,124,68,56,67,196,185,210,190,236,143,8,101,157,169,158,63,34,148,117,144,113,1,135,85,34,131,179,122,163,139,127,72,150,102,152,227,116,44,188,225,53,111,120,213,104,227,153,198,134,247,59,208,11,185,189,31,168,241,22,143,106,194,38,231,80,141,177,223,228,106,194,38,55,227,155,220,137,160,63,169,57,118,225,95,179,25,217,95,56,51,178,215,102,201,116,85,150,100,175,217,216,75,79,54,246,186,188,101,214,107,178,2,27,179,204,210,19,45,179,62,113,89,186,141,131,95,115,160,108,118,251,247,116,155,126,53,186,205,212,193,75,216,200,104,59,186,205,10,166,137,82,179,147,169,51,233,73,55,93,145,107,99,149,85,61,97,114,77,95,158,92,219,166,39,206,95,213,147,95,234,138,200,181,201,229,217,150,36,203,120,107,57,122,77,153,197,90,212,235,232,181,206,54,244,154,106,236,40,71,175,169,17,122,237,235,74,154,113,83,243,8,226,247,144,48,58,190,27,226,247,166,17,132,16,65,120,247,187,241,223,158,188,239,110,136,123,242,190,127,52,32,221,170,43,25,66,124,119,17,222,13,225,123,83,157,116,162,4,87,178,2,189,202,219,137,127,209,132,2,197,183,166,239,220,90,97,192,155,146,0,146,101,191,72,64,151,69,123,159,16,246,77,43,41,161,73,209,131,44,25,245,166,213,183,178,4,125,52,213,208,182,178,180,251,241,229,126,118,65,238,236,232,68,173,219,111,7,198,235,144,246,219,15,10,97,247,227,215,89,225,4,42,173,93,105,187,159,67,106,110,22,6,130,205,183,99,239,142,28,79,85,13,26,68,14,93,160,236,83,15,121,244,9,10,98,91,61,41,236,4,81,192,246,226,67,53,164,149,185,93,54,116,109,210,35,37,146,131,192,71,254,230,119,131,250,143,98,55,232,171,220,13,122,235,110,248,94,166,153,36,27,244,55,86,59,155,128,143,237,0,189,117,7,232,145,29,240,255,40,25,172,171,37,251,59,151,126,200,102,228,50,144,29,153,47,68,31,228,17,34,175,50,144,14,250,81,218,100,117,190,48,165,237,148,44,130,102,193,58,153,114,11,231,235,198,58,198,220,185,112,55,33,34,201,251,197,10,16,253,129,141,251,5,69,194,192,131,183,143,237,225,217,43,251,133,98,68,39,6,144,36,163,28,43,7,160,25,88,144,130,89,140,65,252,213,232,131,170,198,81,156,136,3,232,32,210,4,27,250,187,249,2,85,58,80,87,50,0,146,228,21,32,200,16,188,96,211,143,35,62,250,84,133,111,104,216,30,78,178,29,161,113,232,131,2,91,117,142,1,190,85,67,232,131,228,236,147,128,78,254,135,191,249,61,240,159,205,141,112,123,243,70,24,229,206,175,246,6,152,240,89,78,253,245,126,150,222,127,20,159,165,167,40,162,54,153,183,92,201,103,25,41,239,62,203,119,140,92,212,28,190,84,16,122,97,243,179,196,238,229,145,207,18,247,84,178,168,235,207,114,70,75,233,128,49,158,144,172,56,167,192,223,28,13,29,36,131,205,176,68,159,129,51,150,56,233,105,193,184,38,32,236,151,88,222,127,14,127,63,227,75,186,55,159,173,139,61,199,197,222,15,194,94,24,43,117,177,81,255,247,114,210,75,141,164,247,115,210,151,100,153,125,138,106,242,63,94,169,107,63,45,235,78,12,229,104,245,247,203,186,174,51,46,237,161,70,218,131,46,237,172,172,170,251,100,163,186,71,198,170,123,180,46,246,185,70,177,243,205,98,60,165,93,63,163,123,71,107,184,205,207,175,176,183,150,44,230,79,254,66,169,144,209,83,179,49,54,85,79,18,104,233,87,23,104,53,87,99,48,178,26,229,68,169,157,231,81,65,168,147,147,100,90,218,115,170,53,155,42,138,22,242,155,134,150,97,30,67,235,28,3,142,232,166,136,171,117,56,13,153,246,111,188,244,46,92,235,244,18,131,4,240,139,66,70,9,196,159,71,150,37,254,101,214,22,170,174,138,27,231,78,156,64,252,5,242,50,248,60,25,167,252,114,197,221,197,163,12,96,252,133,228,77,158,203,164,17,219,243,196,52,111,101,249,104,35,252,56,111,4,102,136,89,10,43,236,126,214,15,169,219,37,158,88,122,179,8,173,248,78,86,160,145,42,152,17,190,52,168,163,190,220,28,255,233,64,0,154,205,29,160,196,43,153,98,223,49,90,30,29,36,252,48,91,242,7,8,108,86,218,63,248,200,6,57,114,105,242,113,50,71,211,0,55,109,159,108,207,235,202,5,85,110,21,87,254,28,189,99,92,51,117,11,85,165,2,194,62,174,129,70,181,134,170,45,144,30,77,201,57,182,100,46,218,215,13,174,238,172,36,95,123,58,141,150,145,178,115,58,77,223,19,168,58,191,171,234,124,71,37,246,233,159,218,16,54,183,15,127,196,197,211,178,143,126,132,18,158,241,9,220,210,2,235,211,12,246,205,112,204,70,54,46,33,59,205,228,195,90,5,149,175,42,71,92,137,92,212,167,148,48,120,2,198,224,17,69,216,85,187,138,152,161,203,32,236,170,89,251,255,62,188,33,236,159,60,188,33,160,53,79,192,53,173,121,8,71,225,118,168,32,25,93,132,93,53,55,146,106,159,192,215,199,50,52,132,100,7,50,35,29,14,108,171,106,237,5,44,174,39,53,176,43,143,201,19,253,160,120,61,105,25,237,51,15,111,56,205,97,184,71,205,226,177,29,64,96,95,79,193,149,41,45,94,212,128,127,69,222,134,0,226,3,234,86,76,239,170,236,128,234,226,175,125,2,14,138,219,32,128,246,162,158,163,151,227,178,136,15,168,189,64,60,119,118,11,9,31,121,0,244,160,41,100,138,239,58,227,102,238,181,127,204,35,12,186,106,191,179,161,142,18,6,31,34,183,128,131,194,56,173,35,136,228,5,165,212,73,85,155,70,129,254,124,30,52,133,89,96,192,216,235,255,121,17,223,5,49,94,209,255,179,58,74,32,236,65,67,122,23,128,177,226,29,169,130,224,109,103,159,250,195,15,253,201,211,191,191,254,115,36,97,254,156,162,72,15,205,247,63,167,24,170,34,182,122,205,110,60,176,41,202,155,181,160,232,130,226,14,70,254,254,185,60,96,187,177,240,227,133,111,229,197,245,239,174,90,124,241,210,119,15,82,6,226,126,21,211,158,201,134,86,29,118,219,121,181,55,183,218,75,137,142,147,89,152,203,152,6,177,211,45,4,31,29,177,5,114,214,58,207,40,25,174,179,254,96,13,57,86,97,135,127,169,7,140,46,43,40,74,80,135,103,157,224,219,84,153,83,79,247,9,89,168,50,143,161,77,231,86,65,241,110,36,180,15,167,154,189,55,10,9,173,67,28,36,55,130,152,164,80,16,175,146,122,42,242,104,112,138,195,213,17,122,6,214,226,1,233,58,12,50,200,106,137,177,218,168,58,251,252,35,27,34,59,35,9,8,192,240,19,51,171,116,62,230,132,22,95,230,218,74,7,165,65,62,88,20,78,72,20,114,163,192,165,97,214,129,214,158,70,110,61,216,39,36,24,123,73,12,108,188,118,60,167,163,181,76,8,9,69,226,101,71,200,173,202,202,187,8,231,35,112,150,142,94,227,254,210,35,254,156,81,86,14,144,241,250,91,10,231,175,128,194,33,250,134,252,81,186,101,246,168,76,146,127,167,24,247,175,134,92,171,93,34,157,173,158,53,229,81,242,85,12,250,133,98,4,174,35,243,57,111,181,34,38,71,60,246,221,35,141,29,89,133,74,66,183,41,218,21,237,193,6,134,79,159,99,203,165,34,177,151,36,135,70,85,108,203,135,212,14,150,222,106,194,167,71,76,248,88,92,26,52,140,124,170,141,170,189,89,163,53,107,144,148,185,119,234,179,100,23,15,2,194,219,165,178,46,166,16,118,15,180,125,212,155,221,240,251,14,62,142,52,116,227,61,241,30,14,219,27,247,140,29,25,57,147,56,183,75,111,50,56,157,136,228,180,97,25,117,214,144,81,11,142,227,74,54,83,130,117,161,200,113,175,152,165,237,156,59,226,74,144,77,230,237,44,165,13,86,107,4,243,192,33,152,171,109,16,204,197,36,143,14,142,115,149,149,217,63,27,247,232,224,144,10,212,40,221,243,175,238,212,65,198,83,60,1,30,168,128,108,7,75,144,7,133,168,12,233,59,106,29,164,29,102,140,134,59,28,26,94,104,210,190,117,96,135,242,248,65,49,77,79,225,137,42,97,138,18,58,117,66,74,9,59,78,216,104,96,95,196,132,142,53,44,164,147,91,95,122,142,10,140,215,153,90,50,115,111,190,145,250,50,27,92,37,249,176,75,23,230,146,190,17,97,94,177,198,241,88,61,92,55,72,77,24,133,28,201,193,73,82,98,22,169,47,8,43,146,95,86,170,181,46,79,54,33,61,42,224,235,152,161,160,149,253,239,127,235,145,29,135,233,112,191,205,1,95,203,137,192,215,63,249,91,143,236,88,181,122,45,41,200,18,30,139,19,116,245,173,37,69,216,234,150,164,18,218,85,230,109,118,25,74,28,212,150,51,224,78,188,225,20,200,26,41,90,226,229,221,193,139,201,193,242,73,7,24,77,186,65,7,110,13,178,70,140,142,61,166,53,72,199,28,17,140,116,231,77,68,45,133,14,184,249,54,154,145,192,222,86,230,1,89,177,81,140,6,217,47,204,68,200,230,144,77,38,145,164,153,246,198,149,191,174,148,98,10,115,40,71,247,144,67,38,147,72,88,42,155,57,39,22,32,47,210,61,90,88,9,50,187,147,248,142,61,90,16,68,20,59,120,234,210,94,18,165,221,111,191,34,192,156,179,211,131,66,217,246,234,60,40,18,45,11,188,90,5,152,222,244,123,192,244,204,153,220,208,97,130,103,121,161,236,61,146,140,148,173,180,159,252,105,34,206,168,186,161,100,89,94,118,19,145,13,219,52,183,248,45,111,45,97,116,115,156,45,80,118,40,237,67,63,189,33,178,251,248,82,109,62,110,40,79,166,239,231,192,136,55,17,148,154,232,61,240,69,241,110,10,188,22,119,100,130,107,196,182,74,208,101,97,172,233,115,246,176,136,123,47,126,70,159,2,113,242,92,17,18,169,96,159,23,239,35,71,51,251,169,159,222,16,165,211,158,27,171,250,16,217,135,215,9,148,136,202,141,149,112,65,110,69,239,210,230,87,110,121,15,196,185,96,10,242,92,97,236,191,17,4,35,106,85,191,208,212,139,18,211,27,237,153,203,212,156,16,255,75,154,215,145,26,204,88,57,62,134,100,179,192,254,146,128,168,112,150,95,249,141,77,65,66,65,154,2,123,19,232,126,118,19,113,4,11,34,249,140,146,122,221,45,66,211,208,202,78,92,125,143,241,218,203,9,224,79,84,192,91,245,178,19,184,14,52,173,3,93,54,224,208,132,157,62,140,167,238,9,154,26,250,136,101,33,104,29,200,230,58,160,218,120,29,168,126,118,19,57,26,111,109,104,241,175,160,29,197,171,179,177,210,198,30,13,175,72,64,34,89,153,38,142,17,114,35,200,18,198,85,84,125,235,193,146,5,65,4,59,32,96,134,194,102,140,107,73,24,7,204,42,126,19,89,197,0,89,69,9,193,60,97,55,52,56,185,157,20,181,80,205,72,193,96,114,44,19,156,181,127,206,76,212,72,105,66,175,12,24,163,155,176,30,72,213,74,12,160,110,50,128,26,140,99,0,53,104,199,0,82,26,49,128,102,15,161,60,18,46,239,173,64,100,11,49,128,4,105,72,12,160,134,8,25,64,77,135,225,1,181,215,18,5,129,156,158,34,54,143,20,170,21,159,167,43,62,47,57,40,226,10,242,199,159,136,128,215,8,197,146,35,88,10,214,114,19,156,115,33,41,74,131,157,181,25,193,31,21,44,172,157,103,205,55,163,88,119,124,232,47,213,136,129,197,177,9,200,225,26,204,60,199,132,207,3,80,5,222,2,88,18,51,72,191,162,230,9,234,31,91,80,190,94,22,17,56,149,129,38,208,79,238,208,46,171,214,236,233,167,54,5,131,171,17,210,146,205,236,44,233,141,65,172,204,59,209,135,92,102,219,9,229,30,83,97,207,254,246,38,255,195,104,54,88,25,161,217,76,59,130,109,142,0,125,11,197,54,22,228,113,142,47,207,85,120,178,108,7,131,253,135,218,107,109,46,73,30,87,77,193,54,139,41,120,251,206,22,198,222,84,187,82,103,69,192,44,56,155,125,219,123,84,182,147,13,222,5,135,44,101,95,134,208,14,37,193,248,46,209,25,76,208,60,251,68,187,16,248,39,57,74,34,27,214,86,34,71,216,62,154,134,164,21,217,231,98,218,18,72,64,232,172,48,144,246,34,232,15,18,249,34,65,25,120,160,92,149,216,54,87,140,251,178,125,100,62,231,6,144,86,231,48,80,36,102,100,112,114,175,185,215,212,40,200,21,50,3,32,142,83,231,20,118,12,249,197,160,14,137,10,56,242,128,132,37,94,194,6,17,233,41,27,145,72,127,89,141,251,46,140,200,59,205,136,7,171,126,117,15,214,166,188,179,233,193,154,17,63,157,77,246,96,133,208,22,36,222,172,208,189,26,130,78,70,5,147,140,238,165,186,42,179,106,197,43,67,102,15,84,230,140,29,85,187,82,146,193,90,87,205,21,50,251,89,142,234,157,147,135,126,76,126,19,95,147,120,77,249,152,113,78,159,168,157,65,28,247,210,190,88,139,41,39,249,72,34,81,156,156,87,210,172,219,235,241,192,237,137,69,28,161,189,116,233,18,71,213,181,33,210,97,39,190,175,208,253,19,164,215,179,114,173,111,223,82,58,34,154,130,134,87,251,168,142,40,231,55,71,17,88,9,106,173,32,237,160,113,214,175,134,20,147,4,243,70,92,15,21,198,111,226,34,145,185,62,146,107,169,70,58,240,58,188,16,78,244,237,245,3,138,18,113,253,161,249,53,143,202,106,223,112,194,154,65,105,51,231,156,66,224,158,236,149,195,160,179,117,115,206,71,149,236,109,14,212,193,216,5,123,4,143,64,63,77,39,16,248,110,104,222,183,30,32,138,130,241,157,119,139,173,201,46,153,203,153,244,140,218,209,134,188,226,194,230,138,187,60,20,145,121,13,6,60,114,162,185,11,3,223,30,92,169,156,116,188,29,15,3,16,190,6,200,41,81,183,19,142,251,67,50,107,1,50,249,17,69,104,129,196,75,224,148,31,20,46,202,128,152,78,154,78,100,35,158,143,248,217,87,220,225,235,64,186,165,19,36,57,255,13,194,29,98,113,147,114,82,246,126,97,108,235,112,106,64,63,214,107,159,42,66,194,88,38,135,19,36,190,86,231,189,36,202,209,24,120,147,132,231,10,67,168,173,71,241,192,33,112,150,145,186,234,192,109,160,109,251,24,35,106,86,193,153,188,106,154,2,145,76,39,12,31,39,155,3,4,97,85,253,156,108,42,169,26,218,75,39,251,180,140,108,71,33,31,144,244,211,86,31,157,175,141,232,56,186,248,135,55,182,132,46,103,177,1,46,55,6,220,127,2,203,100,246,105,252,211,2,97,159,197,31,95,59,189,201,97,114,237,163,31,222,16,217,247,243,125,198,47,25,174,251,33,44,55,51,25,63,37,101,252,20,239,73,207,53,97,157,54,32,55,58,174,245,14,60,243,59,200,144,90,113,8,127,167,203,169,216,137,212,68,42,118,210,165,199,40,34,203,76,89,205,218,63,99,138,98,4,128,195,145,90,179,246,79,39,96,140,212,10,22,37,101,61,133,158,215,90,119,98,214,174,138,143,211,13,40,28,13,97,59,37,18,117,118,40,9,59,206,113,246,194,115,246,216,133,154,179,199,167,29,39,28,211,78,79,35,124,62,38,52,249,124,235,20,220,98,107,153,231,38,86,129,108,189,26,125,35,245,101,60,91,239,190,15,254,150,73,54,231,195,203,211,150,245,20,192,140,172,231,227,231,84,37,191,137,92,72,52,239,31,76,14,76,246,230,21,10,216,245,204,159,110,8,123,115,246,85,58,30,90,246,185,127,95,63,86,177,188,181,149,121,200,240,0,183,29,35,238,124,87,153,27,76,228,0,98,196,197,116,216,231,242,80,138,28,213,108,191,235,244,128,95,149,228,55,111,156,239,166,241,28,183,247,122,34,217,120,204,242,110,205,242,238,144,26,42,115,3,109,123,91,21,15,172,182,26,190,57,215,246,230,108,166,8,57,180,200,55,121,4,95,147,152,19,227,238,139,183,224,5,120,91,222,22,219,239,122,33,215,15,171,81,60,191,218,148,227,91,111,231,31,115,232,76,27,151,100,191,224,141,7,112,141,26,251,13,231,8,249,146,56,84,85,130,199,48,238,156,10,54,19,15,187,157,30,249,64,186,205,93,65,112,170,84,89,36,192,165,117,106,122,166,216,237,240,131,77,181,36,171,7,20,133,32,149,9,91,139,209,149,127,143,170,2,76,25,39,22,43,116,117,103,5,120,25,31,158,207,35,222,88,97,165,36,80,141,160,233,26,162,21,22,225,65,0,209,182,98,73,73,215,132,94,166,72,155,65,237,138,129,243,22,59,140,142,190,67,133,207,91,172,43,136,235,80,153,173,125,66,144,97,157,97,127,209,96,171,4,180,114,167,174,154,82,160,109,139,173,124,153,141,208,206,210,211,5,89,208,184,26,190,46,183,28,33,254,196,112,231,133,116,231,197,22,73,160,26,145,4,170,113,73,160,26,151,4,170,173,146,64,157,140,212,82,189,84,29,25,91,36,129,106,244,141,212,151,25,61,50,164,59,50,110,241,39,195,31,140,14,211,141,80,252,103,53,198,151,101,133,26,118,197,206,169,93,118,78,133,237,156,83,129,156,83,95,171,99,106,119,196,173,19,216,112,198,235,148,134,227,110,157,15,140,186,117,78,138,97,184,197,173,147,229,61,47,200,138,16,173,61,182,71,248,158,10,235,227,213,249,158,229,202,48,163,193,248,48,238,71,104,255,136,205,201,21,200,236,31,128,11,73,55,238,141,53,226,134,229,141,37,156,89,23,91,72,48,103,162,171,243,172,130,107,150,68,20,16,100,186,35,160,70,25,21,250,206,127,34,149,170,172,90,76,19,127,160,9,223,224,143,112,55,86,194,92,84,132,185,184,66,152,139,43,199,83,153,244,40,58,6,1,239,69,29,147,244,68,30,246,4,232,187,139,168,39,254,190,89,234,169,60,236,152,4,244,231,127,149,252,137,232,191,245,15,49,134,137,97,124,5,43,178,91,89,21,65,144,168,166,178,147,210,30,98,177,42,247,247,92,57,177,181,28,222,179,123,116,76,58,115,136,200,248,10,66,230,176,29,228,66,253,137,205,120,44,202,176,138,69,249,101,193,50,249,206,177,66,179,76,94,55,101,242,186,10,70,201,176,90,149,80,190,115,140,81,46,107,193,187,217,18,89,50,128,176,44,8,184,197,212,235,49,38,52,243,69,50,217,232,176,220,188,195,225,123,164,11,223,51,89,110,238,117,78,78,110,254,220,95,251,2,38,61,126,118,187,95,195,113,101,144,216,169,220,193,234,71,117,5,139,214,214,49,70,213,132,69,251,127,227,1,236,136,13,71,112,152,102,24,119,194,134,215,20,136,84,87,30,84,228,179,153,74,242,182,224,208,188,113,35,204,174,180,173,213,84,209,250,116,161,32,41,64,111,192,145,24,71,202,29,37,80,129,108,134,99,25,9,102,84,92,248,93,71,92,100,61,26,96,82,104,154,9,61,82,198,59,188,200,145,212,196,217,59,93,112,151,11,184,203,197,51,214,219,162,255,29,20,115,204,67,204,50,99,113,29,95,72,140,200,200,80,140,121,246,46,228,206,246,137,57,162,232,5,242,18,28,47,203,113,19,34,173,128,22,72,67,73,225,51,212,62,113,221,50,219,242,16,80,161,96,118,106,50,84,97,42,119,94,6,2,176,146,139,124,245,111,226,112,253,14,194,113,221,98,146,217,147,205,211,212,25,94,190,250,105,202,101,70,236,62,27,167,169,179,101,96,190,201,248,144,70,132,205,209,103,149,49,79,60,137,133,233,253,61,66,120,111,171,154,66,223,233,228,13,205,133,55,87,218,151,238,171,92,22,165,205,74,251,194,125,149,143,31,214,104,159,111,62,95,168,30,108,135,13,213,37,168,222,71,135,195,225,89,189,88,1,181,215,109,118,42,25,135,157,61,40,112,240,231,239,99,235,53,9,126,23,62,214,131,251,122,250,244,162,191,124,144,234,251,245,154,28,106,51,213,199,134,91,99,32,144,208,102,182,183,77,196,6,180,89,84,212,38,127,50,18,37,132,217,29,16,217,0,98,104,101,119,228,10,218,196,249,18,65,37,14,225,83,147,247,101,225,244,183,128,251,109,243,151,251,223,165,52,227,178,78,18,30,49,192,28,217,197,27,43,215,106,241,43,201,101,205,145,249,66,219,103,228,49,58,166,127,247,39,255,212,16,192,92,128,12,29,11,140,105,95,130,193,50,132,146,215,84,200,43,167,144,87,72,84,177,8,244,191,173,132,194,213,114,109,120,146,112,176,250,74,27,47,27,218,120,183,193,54,28,221,230,141,9,92,132,110,80,171,100,76,224,22,37,89,18,16,78,241,234,60,201,69,98,26,7,91,18,4,206,194,146,144,230,27,150,4,114,146,37,65,64,18,195,26,27,50,160,107,153,88,49,58,118,25,86,78,242,32,36,71,26,161,254,231,65,45,230,97,228,71,182,39,72,190,80,143,160,114,27,103,111,6,121,120,196,32,130,134,65,59,10,140,251,28,56,12,227,134,33,221,48,52,15,67,243,48,116,115,254,107,132,63,233,17,254,254,25,11,228,100,133,240,39,60,124,190,41,43,144,191,109,62,129,99,4,31,151,149,65,147,112,246,76,76,205,58,227,157,172,54,251,233,112,202,174,58,101,142,83,186,117,202,2,167,220,90,167,236,175,236,151,223,236,237,165,150,250,13,115,41,206,187,195,231,177,157,84,109,75,213,85,239,246,89,207,142,100,37,255,171,219,201,62,50,40,83,25,196,240,57,13,158,176,196,161,106,59,91,82,100,60,158,214,14,104,251,224,103,56,22,15,37,44,144,230,11,156,218,76,31,80,236,255,158,93,203,179,190,215,89,166,82,53,138,171,81,92,205,243,231,125,53,170,138,62,10,227,181,117,93,109,149,211,247,121,178,255,69,34,96,125,148,0,104,158,160,120,101,171,234,242,215,73,69,25,224,209,62,90,76,58,50,64,114,156,254,132,0,197,198,111,108,168,194,57,8,187,37,167,233,247,213,188,229,93,86,242,113,41,57,14,48,25,159,187,80,164,132,190,197,73,125,7,46,195,39,146,11,151,216,175,44,189,118,185,146,170,42,150,85,239,206,186,119,201,29,41,230,183,9,199,219,45,254,108,72,162,116,191,98,234,42,246,151,185,112,49,103,145,216,76,30,29,57,19,125,0,143,92,170,42,14,52,173,236,41,37,36,146,61,169,178,34,103,101,58,237,121,31,87,68,240,134,194,223,137,3,4,131,90,249,162,89,129,192,190,190,95,147,59,249,92,204,74,16,217,27,27,248,151,115,124,36,102,57,131,160,103,9,9,192,168,227,238,228,251,76,189,120,195,5,1,33,4,139,58,86,20,109,121,159,32,25,121,208,187,196,255,77,159,244,191,174,127,55,166,255,114,22,50,110,249,46,183,170,67,92,125,179,16,218,87,126,137,227,74,133,118,234,128,218,11,33,132,182,91,226,113,18,146,67,63,46,197,16,143,141,65,46,93,224,231,172,197,49,48,52,152,236,219,64,102,218,10,7,154,232,124,166,14,80,253,180,108,63,37,217,180,32,219,138,144,225,85,226,108,217,224,237,100,13,168,109,149,20,147,64,1,39,26,171,81,63,107,9,24,147,91,172,161,36,225,23,169,41,121,154,89,188,69,23,228,185,43,152,94,199,212,101,52,169,159,191,130,73,77,175,116,82,163,43,159,212,159,149,77,188,115,39,199,102,29,235,28,57,220,23,110,27,116,24,115,117,87,193,212,178,39,180,217,15,61,6,101,11,154,54,23,224,148,60,244,29,213,70,114,99,133,163,90,96,79,166,93,160,236,11,20,130,12,111,120,133,71,150,0,157,117,105,137,187,96,41,188,84,169,139,31,173,231,146,180,21,213,62,233,184,27,39,251,59,62,144,49,127,66,162,226,249,23,109,67,238,95,167,14,61,69,233,25,157,144,117,135,93,55,53,119,83,115,55,207,159,31,235,38,78,73,214,173,250,118,182,94,147,227,74,223,230,154,84,141,53,169,183,194,205,241,174,190,130,53,169,27,107,210,173,68,189,221,74,116,68,246,105,89,27,228,232,5,225,2,138,141,90,190,176,90,202,92,153,229,11,235,45,154,166,44,35,134,48,186,105,8,227,237,174,146,15,93,174,23,222,208,231,175,190,27,63,81,19,223,225,130,187,4,41,148,46,211,212,120,100,206,132,130,17,194,53,254,137,11,121,152,61,35,200,144,23,136,175,81,89,110,13,131,91,43,188,122,215,8,10,95,173,101,69,17,44,167,20,68,129,156,62,220,107,245,198,83,188,241,156,252,225,247,72,254,240,195,35,43,136,87,74,19,226,15,9,78,18,143,123,149,232,120,140,140,173,43,8,41,49,225,128,140,73,161,188,71,177,68,143,214,15,95,175,178,22,164,56,131,6,145,28,23,238,138,221,239,175,216,133,234,154,236,214,87,236,92,149,184,171,78,236,84,137,89,149,232,83,76,93,236,182,177,75,243,110,254,30,75,165,27,252,253,247,34,15,85,135,73,112,199,140,93,112,148,143,178,111,118,212,80,117,146,108,188,178,193,91,20,247,202,173,116,238,236,47,9,208,159,70,118,64,221,70,191,240,24,216,207,219,247,90,130,229,92,16,201,61,120,248,53,4,90,20,63,55,215,54,102,12,77,69,224,161,78,174,165,215,46,39,215,170,208,178,147,194,184,72,184,18,116,246,53,178,121,24,147,66,49,177,227,196,79,167,170,9,8,22,4,123,98,117,88,245,31,179,211,213,44,187,48,101,16,84,147,16,224,36,176,154,137,39,33,176,27,15,243,36,4,54,98,47,155,192,77,66,64,226,101,130,66,36,97,46,78,2,251,208,80,204,199,129,148,158,174,90,240,31,125,226,247,205,42,186,42,174,233,170,206,56,93,53,225,139,239,29,251,226,167,36,211,198,38,167,168,18,1,79,187,56,228,66,244,43,199,157,138,66,54,184,85,150,231,56,126,117,68,158,83,136,131,194,0,217,61,53,184,86,57,30,81,129,206,68,3,50,249,239,182,167,217,71,8,236,154,232,118,164,246,144,150,217,21,146,218,158,210,254,193,203,239,237,137,240,157,223,162,205,92,74,166,238,129,2,56,233,101,118,42,232,168,132,253,86,44,7,18,102,51,131,246,74,17,176,225,26,27,38,64,224,34,201,178,32,149,109,192,149,125,250,145,205,26,183,161,62,209,182,204,41,123,19,130,152,48,167,102,100,78,207,254,79,126,78,205,4,46,168,75,9,166,244,252,16,40,90,178,227,173,57,11,68,231,194,120,153,214,158,62,187,125,107,212,76,183,201,125,253,135,182,246,194,95,107,107,103,127,246,53,180,54,224,213,233,132,56,235,206,254,3,100,246,206,212,137,208,24,240,21,119,22,178,34,61,177,72,98,83,31,62,86,49,55,171,236,147,31,165,214,45,201,5,56,136,65,23,171,32,175,0,153,189,179,226,58,78,106,233,209,171,178,81,212,38,49,2,216,36,110,214,113,30,48,96,19,25,102,189,73,199,206,66,61,230,216,215,156,110,28,38,83,149,174,234,244,196,5,148,124,159,167,201,255,235,17,81,177,167,116,25,225,184,66,60,118,240,83,21,226,177,114,136,199,49,223,69,134,173,77,8,248,152,199,233,135,246,45,172,253,165,159,217,82,251,123,182,138,185,205,213,212,190,77,181,255,164,73,89,131,51,121,117,102,105,170,98,69,20,179,34,202,158,165,51,48,99,242,120,47,93,171,204,138,120,98,191,203,98,185,107,61,121,124,149,245,63,127,181,245,127,143,212,235,30,249,219,56,202,251,176,55,160,80,138,207,61,162,215,240,236,35,122,205,88,188,152,11,7,134,93,137,218,156,184,161,18,31,242,113,58,157,136,228,159,82,27,141,101,234,56,120,135,71,183,156,178,87,18,71,31,196,139,141,34,127,86,112,117,146,1,234,56,138,73,87,137,25,45,156,178,69,96,199,18,39,102,202,242,228,157,164,166,97,225,151,168,9,171,202,119,109,182,118,93,203,70,29,220,182,74,196,22,202,236,23,100,242,157,149,24,194,121,80,57,2,174,78,153,245,197,171,20,240,210,141,42,101,111,150,39,116,50,217,225,83,155,130,254,97,161,60,89,93,59,225,175,184,35,21,246,105,190,198,40,90,42,61,208,62,181,79,225,175,167,126,187,17,221,215,190,226,98,253,86,175,145,237,26,8,66,201,18,201,219,105,42,38,116,125,182,154,141,93,245,108,204,141,206,198,216,96,146,247,54,92,225,249,26,212,78,156,124,199,152,192,139,76,55,252,185,241,234,180,219,29,196,65,124,191,149,135,24,182,30,100,31,196,234,241,84,128,104,136,200,72,36,223,98,189,134,96,85,151,200,102,146,130,77,158,8,233,250,237,44,2,157,232,35,65,188,238,99,61,1,226,209,187,65,88,241,142,66,204,19,211,123,231,116,226,207,235,127,81,255,252,64,242,142,166,185,5,47,217,14,185,174,200,142,215,62,138,6,189,0,194,157,22,56,230,123,105,204,204,123,59,187,201,21,252,240,95,242,118,87,154,173,45,157,146,221,133,187,37,6,213,219,112,33,165,77,196,67,167,159,115,24,16,109,197,161,228,16,126,81,85,139,184,156,197,143,115,22,211,160,188,179,152,118,67,209,165,251,10,59,201,153,76,179,153,104,178,84,141,142,110,72,26,13,21,236,43,146,97,198,133,147,152,19,204,209,114,42,43,27,80,247,217,238,168,78,82,174,160,227,194,164,107,235,110,89,190,221,98,190,118,119,241,37,204,190,9,115,165,199,136,197,219,115,105,204,172,133,123,98,37,245,68,77,238,137,106,246,196,186,253,238,132,15,163,159,158,200,222,55,42,231,157,213,248,190,141,175,206,53,40,152,60,159,15,203,87,159,208,228,173,110,229,121,242,144,96,231,197,59,154,18,94,153,205,20,10,123,207,98,251,17,102,54,121,19,69,221,38,6,232,73,113,136,28,81,4,171,95,179,25,201,106,78,157,74,75,145,115,233,98,198,44,82,37,253,241,251,117,190,62,127,74,158,164,177,91,57,200,3,188,246,69,254,150,74,138,98,176,106,73,166,88,44,75,157,217,45,236,115,83,44,82,123,203,175,230,55,170,37,120,11,188,229,187,9,205,129,56,182,27,189,164,50,186,183,184,201,11,216,226,211,112,99,79,222,215,251,75,39,206,188,23,110,236,221,122,230,156,189,52,61,40,228,124,209,237,201,123,173,230,120,99,108,6,107,149,53,112,163,127,253,229,75,226,222,98,247,157,184,237,118,55,210,222,57,111,181,53,32,230,225,166,59,231,173,234,79,105,33,149,73,172,3,113,148,246,179,113,191,35,19,255,6,64,183,39,239,131,110,213,169,119,22,98,62,239,218,223,254,1,251,244,15,96,45,178,76,242,214,157,185,241,198,200,99,248,114,245,255,172,38,23,50,138,72,130,231,187,62,58,95,224,121,243,111,62,178,33,236,243,248,15,174,96,8,230,225,198,158,248,251,243,249,235,172,204,241,210,187,177,247,214,51,231,32,152,207,119,249,187,12,123,173,164,80,137,93,179,1,180,54,139,142,21,119,204,67,231,88,33,236,23,254,66,28,78,67,232,222,73,129,6,205,137,34,179,215,150,249,180,29,14,79,89,1,51,125,152,177,195,161,58,58,191,153,167,246,236,58,180,44,244,161,229,134,151,189,27,231,21,183,6,8,232,246,224,62,232,130,156,47,252,236,109,8,151,31,99,254,238,94,118,31,236,110,230,15,135,210,21,48,92,32,222,82,192,183,160,184,128,217,82,0,219,160,15,166,48,75,204,23,11,61,241,15,11,217,47,68,127,211,62,35,142,217,243,231,130,210,126,49,123,159,53,107,69,96,207,223,191,33,202,61,90,20,187,123,188,68,138,61,176,0,242,177,251,138,27,123,112,166,88,56,85,220,212,131,51,176,0,187,241,113,247,169,147,176,219,173,181,233,123,49,23,147,79,194,77,46,5,22,96,207,41,74,241,213,157,164,142,197,39,49,177,216,221,147,150,2,104,218,199,177,217,91,164,40,251,69,219,190,117,240,88,241,109,216,160,188,187,184,233,222,98,207,157,102,137,61,95,206,196,157,118,2,129,253,188,43,157,7,78,157,176,27,190,237,204,185,66,218,7,190,40,216,114,110,227,244,119,16,100,160,29,254,218,87,110,89,77,149,141,109,11,159,30,252,195,11,122,21,215,91,68,57,156,0,98,158,23,234,243,248,54,1,139,72,123,49,114,229,158,23,246,98,196,69,108,155,56,234,214,225,34,154,71,254,209,144,77,197,217,31,11,93,209,7,190,40,240,9,11,203,196,134,54,194,38,31,251,3,227,178,55,78,127,7,61,130,152,79,114,67,193,172,8,71,240,26,72,223,158,70,208,38,71,69,184,6,210,126,33,54,97,26,4,76,175,206,23,59,172,164,216,81,122,137,164,220,228,32,13,230,125,133,96,79,68,32,131,167,99,125,230,86,87,8,145,39,226,168,30,178,36,223,249,246,42,254,243,190,28,9,173,196,62,240,83,27,194,94,103,63,249,80,3,76,161,204,141,61,6,89,63,151,86,246,113,250,243,133,158,204,111,208,75,112,3,44,156,185,115,185,49,255,20,228,194,148,86,98,75,216,159,66,128,41,97,79,175,125,170,160,175,224,122,117,67,175,125,42,191,1,118,195,77,247,230,123,96,135,131,214,229,232,185,246,12,221,16,211,176,3,7,11,123,224,70,184,33,91,234,196,9,30,94,16,90,117,187,124,60,133,25,106,245,169,180,132,25,22,22,138,219,229,147,41,107,3,54,240,47,99,228,60,129,63,31,79,203,14,137,77,240,117,233,242,191,62,154,63,133,45,107,151,247,141,58,143,91,227,50,105,179,204,191,29,43,67,167,7,158,40,249,235,92,241,78,98,239,253,209,13,97,119,217,23,127,202,79,39,143,142,190,148,31,160,124,12,190,237,62,216,115,18,12,253,184,49,91,98,147,180,105,251,248,67,206,101,202,190,128,199,213,13,246,193,143,78,170,199,10,170,103,119,175,61,172,235,32,161,234,153,184,48,72,107,132,208,125,139,122,40,198,209,91,85,31,62,98,254,128,122,188,133,115,135,167,207,153,115,128,9,15,99,177,179,113,105,133,125,72,102,23,228,78,8,237,70,171,180,230,184,21,246,97,159,130,179,216,226,191,207,181,161,245,216,175,227,177,125,247,191,184,187,247,107,31,221,188,104,78,245,134,63,251,59,103,63,167,112,31,159,43,196,38,133,198,235,176,254,52,180,15,197,37,180,104,53,103,111,216,201,190,88,216,128,128,86,127,51,123,195,206,68,45,65,204,160,47,84,214,10,136,251,155,25,84,37,29,192,72,6,56,176,176,171,158,107,23,193,1,245,236,20,79,187,171,237,44,169,253,28,14,92,151,44,76,115,231,248,117,62,45,243,8,166,243,22,38,177,149,252,50,89,199,171,181,188,77,102,223,46,28,146,30,144,84,169,39,242,27,92,221,237,210,217,60,82,200,222,1,8,139,151,101,52,200,21,68,208,46,115,131,101,53,197,192,36,33,244,27,21,174,117,184,239,116,177,208,163,195,100,88,236,126,11,105,55,12,102,237,238,13,95,120,240,231,78,158,130,133,147,19,10,53,114,243,27,200,82,159,244,156,138,221,89,150,41,168,81,92,38,214,244,71,154,114,117,188,5,249,180,150,109,245,139,150,109,29,73,9,216,232,217,169,194,216,61,28,140,198,216,174,125,232,51,14,179,197,219,188,65,203,170,53,251,165,51,27,140,63,34,88,164,255,236,84,33,237,158,163,105,102,201,199,210,236,36,41,126,30,129,120,44,191,137,100,150,213,116,165,178,39,242,174,155,173,168,196,99,240,95,127,102,67,216,121,110,139,77,103,39,77,95,8,81,73,95,6,167,176,59,54,133,93,158,29,184,105,116,250,22,240,0,57,117,247,88,166,75,205,187,87,52,101,84,53,220,196,211,69,99,77,10,66,113,122,188,69,90,4,185,58,95,72,219,61,156,38,158,252,171,28,46,91,222,158,231,16,7,206,27,128,180,167,6,249,14,94,182,56,38,156,5,246,130,101,151,186,14,113,1,101,49,7,45,43,7,101,145,177,129,138,41,139,136,92,44,138,54,73,32,168,76,11,50,152,91,133,14,204,29,62,78,33,16,5,68,208,90,133,22,180,87,143,231,45,26,72,29,8,107,7,76,89,85,22,83,135,120,152,9,62,174,21,109,238,66,85,189,113,187,175,205,77,180,161,85,213,140,215,0,180,15,31,103,24,164,22,243,92,246,166,195,105,236,62,38,126,114,39,235,117,142,93,16,34,137,251,236,20,72,50,52,10,14,207,243,50,73,120,121,24,186,148,140,89,178,184,165,76,159,90,223,104,149,180,178,34,48,174,111,196,167,30,2,73,209,53,213,178,3,245,89,183,2,204,124,206,158,101,71,12,158,8,178,204,99,142,139,177,231,104,218,1,193,223,130,157,42,26,75,144,3,6,90,77,123,210,82,60,84,254,30,180,55,217,206,230,21,94,117,178,153,195,95,233,141,74,244,218,167,224,134,147,110,161,185,111,227,146,119,51,93,194,57,241,182,57,157,109,114,240,39,237,228,172,36,33,178,97,89,63,157,74,183,200,7,226,60,198,133,119,127,156,183,200,34,159,252,229,38,247,41,55,190,178,134,123,219,13,231,188,1,206,77,135,211,192,125,106,129,159,205,27,27,201,50,199,85,142,156,218,227,45,92,194,236,180,156,66,188,89,200,183,227,44,67,218,71,218,66,66,218,39,242,162,149,242,82,167,62,66,112,64,157,233,64,104,47,182,113,107,210,215,44,164,59,106,177,250,236,13,249,27,252,153,124,64,157,199,187,241,129,14,161,207,214,133,84,246,134,252,239,212,133,252,177,221,44,20,218,39,90,229,255,207,220,159,192,71,81,164,255,227,120,245,49,71,50,57,38,28,225,134,154,33,64,2,185,102,50,153,76,194,33,147,251,38,247,69,48,233,153,233,76,230,158,244,244,228,50,64,56,84,92,80,208,101,61,81,209,245,22,175,85,87,87,81,193,3,81,81,220,245,66,69,241,192,149,85,87,112,189,87,142,255,171,171,186,39,147,33,65,241,243,249,254,63,63,94,198,233,119,87,87,213,83,79,93,207,83,79,213,83,154,57,80,110,62,26,237,212,8,67,246,150,24,167,6,66,185,249,145,88,167,70,35,200,242,234,89,26,45,238,165,26,128,147,210,32,143,105,155,98,52,83,132,223,7,99,53,211,112,119,214,204,48,3,77,52,106,139,209,26,117,216,70,116,96,78,17,26,71,180,192,149,104,196,39,141,194,12,70,244,27,124,205,11,186,182,29,113,146,118,138,172,199,59,92,4,61,109,134,240,39,53,251,73,99,52,123,168,113,226,126,31,234,0,215,42,197,14,80,2,21,48,102,204,38,143,142,206,146,43,98,169,233,232,68,187,153,208,196,153,1,54,14,141,30,105,166,138,35,12,41,181,227,145,145,102,34,26,105,204,107,3,78,237,100,24,135,6,155,9,145,131,77,140,52,216,160,207,226,224,4,56,185,12,78,132,147,195,198,155,56,97,0,138,171,224,52,113,17,227,205,84,129,97,226,77,246,104,45,72,224,95,168,128,90,188,176,139,122,185,54,148,3,13,227,156,90,128,79,14,43,202,4,185,180,140,139,37,99,18,84,48,10,170,203,98,105,24,5,227,133,134,27,5,213,37,180,40,206,170,145,39,110,168,70,190,181,85,232,157,134,142,137,81,193,184,162,216,120,113,4,122,60,10,18,26,96,86,170,52,147,32,128,211,132,191,138,25,90,133,80,39,20,84,156,93,39,112,188,58,65,195,208,216,117,130,189,39,161,69,3,228,8,144,92,14,21,69,177,64,170,27,1,226,218,81,8,181,163,144,106,103,91,204,249,215,142,184,151,247,92,181,35,222,195,249,27,107,135,24,167,118,8,72,195,217,99,212,142,80,49,130,24,143,38,3,245,8,171,21,136,213,147,204,52,167,153,164,130,10,56,69,248,147,90,191,122,172,214,175,26,143,211,160,4,130,95,229,180,2,77,180,104,218,29,197,233,49,251,193,177,232,255,15,244,131,241,56,45,244,131,89,231,238,7,163,56,77,136,156,38,157,2,167,71,166,87,52,245,37,224,177,106,52,167,231,252,142,113,102,132,211,216,165,56,137,150,223,36,78,139,126,199,209,162,28,150,213,68,78,239,137,250,63,226,52,190,134,56,196,105,98,20,167,197,94,163,16,85,4,122,52,183,137,16,183,137,179,185,13,68,110,19,136,219,241,163,70,31,56,73,212,88,67,226,134,226,188,196,13,249,255,7,197,13,153,80,200,120,243,137,205,162,118,41,240,66,13,163,204,31,109,150,252,57,70,193,120,140,144,17,91,17,174,41,252,15,197,18,242,87,197,18,65,192,69,174,39,9,52,208,198,208,146,51,111,52,91,203,112,53,200,176,231,218,145,106,160,195,170,129,150,170,65,104,169,99,75,125,161,144,145,162,200,34,170,33,26,70,139,175,35,171,97,156,144,152,113,66,206,33,245,201,198,231,172,236,60,56,43,19,56,43,74,215,80,54,194,89,228,112,83,38,10,110,31,69,75,114,15,148,9,127,120,56,41,67,221,251,215,164,117,2,158,53,120,19,227,12,41,104,80,57,67,244,196,145,128,144,169,132,73,146,70,55,105,104,1,140,95,129,170,95,168,125,39,182,126,21,197,210,42,60,235,227,0,45,9,163,156,72,6,195,156,64,151,120,208,104,5,74,44,183,160,177,128,145,75,60,0,222,61,142,47,241,136,130,52,186,196,35,106,69,44,242,8,45,136,14,180,116,137,7,141,47,241,136,66,151,120,200,205,186,60,160,196,119,124,20,227,23,81,225,87,126,152,51,85,72,225,216,171,85,194,216,74,129,194,21,92,44,50,177,227,27,69,98,40,85,12,58,54,23,111,30,222,34,246,34,212,105,182,109,145,42,51,172,84,26,90,133,68,108,180,162,33,148,10,42,97,2,22,221,212,37,104,15,157,134,70,91,224,4,181,242,127,178,198,69,156,123,141,75,37,136,202,230,29,49,78,113,99,171,208,223,174,141,129,114,56,211,72,110,23,126,19,141,228,182,24,72,97,185,69,157,34,100,16,231,76,66,26,150,80,184,157,82,225,204,201,82,187,69,139,83,119,9,10,254,244,17,5,63,94,133,204,17,180,48,137,204,5,230,143,162,177,229,39,210,16,49,37,210,16,145,244,91,12,17,138,25,218,69,249,196,6,205,2,51,165,153,242,59,13,17,73,35,134,8,74,101,166,53,83,144,231,95,243,195,74,151,134,128,11,106,52,83,242,9,77,246,40,155,196,162,124,226,18,184,104,180,77,98,81,62,153,79,64,48,67,147,61,98,156,80,56,197,20,84,163,108,17,107,207,178,76,76,57,31,203,196,76,51,161,81,134,91,38,226,66,86,9,10,144,42,184,8,173,193,146,2,149,171,181,41,57,212,54,228,172,125,49,113,173,18,185,49,130,46,72,192,69,48,123,72,155,35,173,252,201,66,102,135,156,124,120,9,204,129,178,209,102,7,89,164,217,65,22,97,118,144,69,154,29,100,17,102,7,89,164,217,65,118,78,179,195,194,124,208,170,149,185,180,10,215,94,45,192,11,133,100,254,90,8,238,211,206,221,164,77,130,41,27,114,168,99,114,152,4,83,218,240,137,119,84,56,18,46,18,11,155,4,23,73,95,44,106,163,151,155,119,174,133,138,49,12,24,96,196,128,145,36,89,37,50,225,34,56,55,255,130,13,218,249,151,32,243,132,54,23,27,49,180,105,48,73,248,209,195,220,53,67,80,31,50,81,72,102,12,109,214,40,67,70,230,184,134,12,77,94,62,97,22,68,27,16,102,199,64,86,140,212,75,180,25,249,196,106,141,14,102,194,20,40,229,191,96,77,136,56,152,57,146,237,92,49,3,168,95,163,29,43,151,121,112,1,212,175,209,36,227,121,34,5,17,175,153,15,193,136,57,68,33,154,67,244,112,33,148,221,39,230,182,120,141,118,33,204,132,139,197,66,47,25,179,168,75,127,99,81,181,153,67,249,196,144,214,8,83,55,221,169,149,73,246,22,153,100,111,145,141,178,183,200,194,236,45,170,179,237,45,178,48,123,139,76,178,183,168,206,178,183,200,204,81,21,90,85,200,222,34,11,217,91,84,99,216,91,100,35,246,22,213,104,123,11,5,243,134,52,38,168,131,198,13,154,36,168,130,10,97,38,209,76,131,70,56,31,38,15,193,148,33,97,54,78,94,45,148,46,29,234,54,104,82,204,64,163,164,132,185,46,222,9,145,104,38,131,20,182,186,104,99,133,137,34,29,205,178,148,219,165,149,221,7,83,47,209,26,96,210,144,118,110,83,172,18,42,161,170,88,90,208,2,249,132,102,46,154,236,230,106,230,195,20,205,2,8,204,9,216,60,19,47,76,147,48,41,63,122,141,54,73,224,39,186,132,91,116,241,233,212,8,221,42,122,141,102,46,92,32,124,144,2,147,160,110,131,54,169,69,152,19,83,96,210,106,109,50,204,104,211,40,225,92,104,132,166,213,66,21,207,29,210,100,193,100,152,209,16,171,130,11,225,220,213,218,116,152,212,18,139,14,170,58,205,113,78,141,12,165,4,147,96,198,208,106,205,60,152,1,211,87,107,146,97,58,76,90,173,89,152,15,52,105,212,114,20,166,157,11,211,27,224,66,152,54,4,147,96,242,80,27,135,13,226,202,152,88,149,192,1,180,19,18,25,120,96,218,144,118,129,68,68,122,91,108,44,76,131,25,171,53,105,112,174,38,9,10,1,130,8,20,163,50,39,152,19,204,187,175,145,230,80,188,202,7,41,115,116,153,240,63,175,134,10,183,74,13,75,102,148,152,24,97,254,53,255,112,233,30,96,158,101,126,100,147,116,229,128,100,110,185,122,196,122,69,33,67,5,41,153,107,132,71,97,114,141,66,67,42,50,215,204,132,164,249,241,40,39,190,229,93,250,252,159,17,159,139,223,200,85,120,51,31,250,230,179,177,191,145,137,197,0,200,142,145,32,72,88,233,2,195,231,67,10,181,132,212,54,13,133,170,69,187,32,159,24,210,232,224,124,152,218,0,23,8,99,247,60,56,183,133,139,37,96,18,76,21,56,157,54,4,179,134,96,158,208,37,115,225,226,213,107,134,224,146,213,112,233,106,152,41,240,113,9,92,58,4,51,135,224,194,33,77,74,62,128,38,152,4,13,67,67,66,109,145,48,25,206,197,96,190,208,178,160,65,168,138,121,13,48,5,46,28,130,105,208,128,171,13,69,208,204,69,219,124,144,131,248,88,161,246,80,227,21,242,215,36,193,249,48,101,72,147,12,231,193,5,77,180,144,78,234,144,102,46,76,133,105,67,154,52,152,2,83,87,107,82,96,50,76,109,139,37,84,42,244,160,161,196,52,177,145,36,193,188,235,154,208,29,103,69,112,46,212,225,124,133,132,180,73,80,215,0,117,112,238,106,161,233,174,110,227,98,41,149,48,29,52,8,173,37,159,94,221,196,197,162,139,92,147,52,115,85,80,41,68,206,146,34,103,8,145,179,26,96,22,142,156,37,68,70,146,196,164,53,112,110,83,44,64,38,231,150,53,48,101,168,5,31,213,94,180,140,132,66,181,153,73,113,10,23,77,95,123,132,110,6,224,162,144,233,43,9,237,163,27,49,124,161,170,222,79,224,223,99,36,36,205,251,9,167,86,49,202,20,134,194,182,209,144,132,217,203,200,19,194,55,39,72,167,86,22,241,205,181,180,243,236,88,215,210,248,247,113,25,36,238,123,14,230,156,203,128,54,141,92,14,137,189,226,196,136,46,193,199,151,144,16,234,89,211,161,2,162,31,25,250,193,155,151,132,12,1,36,66,6,181,105,216,160,134,110,17,5,112,154,48,203,170,33,46,16,196,79,39,72,244,20,138,30,102,101,67,167,151,246,16,130,22,125,40,26,183,114,156,210,136,145,77,60,80,75,38,147,219,104,237,68,72,192,137,21,51,180,50,115,114,21,141,148,55,73,107,67,139,201,177,102,160,145,148,58,2,95,129,77,244,64,153,121,77,143,38,30,19,162,81,226,92,196,155,89,209,165,181,106,168,68,70,139,9,80,229,212,70,227,77,189,116,216,10,139,82,50,156,196,192,104,56,161,12,170,225,132,10,46,180,162,21,83,6,21,48,166,130,211,224,243,153,26,10,42,133,31,37,140,135,177,102,210,169,141,13,45,43,196,154,73,94,75,225,252,195,146,199,12,162,112,22,148,64,131,228,117,176,12,82,80,81,38,26,78,112,26,72,33,19,199,3,172,144,153,71,41,100,232,226,84,129,149,201,228,227,50,52,119,200,144,249,131,50,167,172,136,141,66,71,101,52,20,190,200,16,41,100,148,160,144,73,52,73,126,159,80,45,141,40,100,178,178,25,90,101,184,66,70,205,208,40,85,80,9,167,84,163,197,50,108,152,145,12,88,232,10,170,17,245,89,134,77,114,84,143,70,9,101,88,125,22,42,88,67,229,3,77,18,182,176,136,218,179,44,44,0,87,142,184,14,144,36,106,171,212,136,221,46,98,61,130,194,251,1,198,12,137,25,39,4,9,51,73,216,239,184,32,7,208,46,173,12,251,49,133,211,208,12,45,168,98,209,42,168,164,151,143,75,141,134,146,146,81,10,35,156,18,233,206,73,119,74,158,93,23,160,123,138,112,159,18,84,103,16,110,226,66,91,113,247,160,134,125,140,196,43,157,138,209,134,192,241,248,136,154,183,200,201,253,132,196,74,34,130,149,161,144,255,59,94,254,111,48,79,24,70,198,227,222,49,146,92,14,39,226,165,134,137,69,146,183,191,109,104,247,215,196,48,222,17,97,109,144,144,56,39,12,6,152,115,100,4,231,66,33,255,135,173,144,16,74,16,190,132,115,222,156,36,17,47,233,181,112,34,94,29,195,195,204,196,17,86,78,52,19,78,25,156,168,18,56,38,124,174,48,146,31,9,28,223,35,19,104,69,99,64,164,9,14,226,1,251,113,153,145,220,36,12,164,199,228,99,152,224,52,35,31,61,40,140,84,219,148,17,31,33,19,27,222,161,41,12,253,194,239,131,81,218,201,144,128,147,67,67,59,36,205,187,101,78,141,48,159,29,149,59,53,83,33,105,222,162,116,106,38,226,148,53,51,132,223,143,228,154,89,194,239,38,165,102,182,232,195,94,118,214,248,6,39,58,177,249,59,52,210,193,176,229,235,232,49,135,54,51,208,36,8,172,148,166,24,180,114,141,230,151,241,102,150,109,74,60,179,64,105,98,81,133,79,45,104,181,120,66,248,220,18,90,83,86,134,173,90,143,158,94,68,75,204,239,152,94,96,248,162,53,21,102,38,67,147,139,152,110,216,228,18,135,38,151,88,113,242,216,67,152,149,154,4,40,67,103,182,176,25,55,220,199,22,156,45,252,161,122,194,203,166,103,115,124,234,56,28,71,147,201,216,28,71,2,173,104,48,144,97,131,193,111,97,251,49,249,249,177,61,100,158,26,159,237,35,179,58,241,59,216,30,202,128,194,246,217,17,182,143,204,233,4,164,144,253,43,17,177,125,114,136,237,48,193,76,115,154,4,65,219,153,37,252,73,86,153,68,188,140,58,154,199,211,199,225,49,50,52,254,26,143,101,17,70,25,137,199,103,25,101,226,241,112,240,123,154,182,236,55,53,109,217,239,111,218,130,160,2,199,104,218,20,148,33,30,151,69,240,24,136,60,38,157,2,143,35,44,236,9,216,198,56,166,100,36,201,66,209,48,140,207,178,18,40,251,85,62,131,8,51,163,196,231,179,204,140,241,56,155,223,211,150,207,197,231,145,182,252,123,248,28,202,0,11,237,212,120,237,89,96,120,4,175,9,145,215,4,226,181,34,108,225,65,225,132,9,161,253,163,88,244,153,4,9,56,169,66,20,81,213,80,129,23,33,198,151,84,247,19,231,170,15,89,68,125,200,68,122,198,82,47,66,106,69,34,36,96,98,197,12,109,130,57,185,34,150,38,151,195,4,44,133,37,68,170,21,9,184,230,18,132,154,75,16,106,46,102,76,181,66,172,186,40,81,177,152,227,212,198,135,234,45,26,70,139,213,42,169,21,42,24,15,231,148,193,40,56,71,168,52,84,195,42,168,46,131,209,80,85,118,118,165,197,140,89,105,106,73,173,8,101,30,45,206,248,106,156,137,26,249,28,19,186,7,74,89,93,49,74,173,72,16,100,4,49,13,161,143,72,106,133,84,133,36,76,64,44,156,1,19,96,2,156,81,22,170,173,95,87,40,212,163,20,138,232,18,33,243,177,21,10,25,156,82,42,104,21,165,216,81,154,144,193,132,17,121,56,106,180,60,140,172,163,50,44,211,41,206,210,43,208,53,137,231,165,87,140,105,231,164,198,181,141,82,231,182,141,142,33,209,41,176,198,20,43,67,229,148,52,102,164,94,99,65,72,38,42,109,4,36,176,155,43,60,48,97,14,163,179,122,104,156,216,78,59,53,106,137,225,144,130,241,232,246,36,168,198,142,23,105,151,134,50,175,149,70,200,232,208,148,48,158,14,103,38,87,196,202,81,23,93,129,100,68,188,54,168,16,18,17,20,13,33,23,243,90,161,247,138,235,103,232,11,202,137,214,227,52,212,136,185,76,124,143,213,20,2,159,105,22,47,192,55,147,78,168,16,132,121,153,153,116,154,51,161,18,89,205,208,122,151,46,15,196,67,5,226,5,218,142,163,64,75,24,10,115,124,69,44,173,50,103,10,209,177,46,6,21,194,184,13,98,98,84,49,9,120,101,111,167,100,99,70,203,65,15,110,30,185,34,48,193,188,39,20,150,48,74,134,86,152,19,202,98,229,232,147,215,55,255,110,193,58,233,78,97,144,1,210,30,198,48,253,78,54,134,126,135,134,141,73,88,86,154,132,219,242,36,65,63,153,244,107,109,121,68,179,35,35,26,243,111,208,236,254,159,183,102,66,40,193,255,72,63,145,216,56,73,98,163,160,233,77,26,225,163,180,107,130,132,147,176,166,71,46,135,137,152,143,137,152,143,137,2,31,19,127,141,143,163,244,60,217,121,234,121,255,255,224,99,226,255,14,31,19,5,62,82,226,160,159,56,194,199,68,129,143,137,2,31,19,209,114,34,1,195,53,45,33,137,24,165,42,134,86,97,87,205,120,4,128,211,208,78,193,199,163,156,234,18,236,223,79,137,246,224,168,208,129,234,29,74,39,84,138,39,23,141,36,178,150,197,25,201,237,194,239,76,35,185,77,9,105,172,17,169,83,32,105,254,40,218,153,4,112,111,71,155,48,240,193,63,34,9,159,97,220,166,116,138,135,127,5,89,30,119,159,169,78,156,181,22,140,156,171,70,215,251,128,145,115,213,132,120,102,82,57,23,152,79,0,23,246,220,97,126,16,57,51,136,193,62,60,148,161,23,147,144,11,104,26,95,138,27,114,215,129,130,166,34,105,76,80,80,69,239,121,50,243,1,16,242,236,241,252,200,227,81,224,204,167,176,231,15,218,72,182,67,153,121,7,242,247,209,130,253,125,44,65,190,61,76,78,35,217,137,119,95,100,58,97,24,249,232,98,226,48,242,101,34,249,80,76,153,198,41,191,9,156,102,37,206,111,108,42,196,172,79,222,48,118,214,232,9,58,141,100,141,42,228,117,164,52,228,117,100,57,122,154,138,61,145,152,15,1,167,249,249,77,123,0,58,72,57,218,236,14,169,81,45,146,24,133,70,109,44,25,195,64,31,241,57,8,71,203,67,7,63,1,114,207,54,73,60,248,9,176,23,3,96,222,113,241,30,241,62,22,201,193,129,192,52,243,109,23,139,116,254,101,12,95,179,147,32,105,62,124,253,30,209,75,141,116,116,148,52,19,33,63,179,106,124,70,20,136,103,68,181,68,50,25,163,69,231,144,69,223,219,39,158,28,241,189,77,160,123,191,149,17,30,131,196,227,214,248,12,36,41,29,143,164,227,72,0,132,161,94,116,153,152,6,212,234,237,40,153,48,96,34,36,79,132,84,49,62,18,77,107,69,37,17,61,147,226,137,116,50,220,231,162,90,163,82,165,34,95,64,200,31,12,61,114,158,58,116,38,125,180,79,151,52,116,159,120,216,65,104,202,5,137,50,78,116,221,130,78,163,106,181,248,108,55,4,170,44,209,215,22,34,139,228,181,192,188,251,249,189,0,251,67,49,95,251,156,248,56,202,133,139,42,37,210,73,100,232,128,189,122,8,149,36,228,149,113,225,248,95,14,19,163,63,157,11,206,62,110,31,225,110,242,92,201,221,25,145,220,108,112,174,211,218,170,57,4,185,6,221,121,168,37,33,153,127,193,165,90,234,98,72,173,134,100,62,104,69,225,98,116,116,104,55,236,122,73,196,5,245,28,149,22,239,9,194,194,233,137,155,247,0,179,76,61,21,181,248,175,110,70,87,50,76,69,41,20,209,203,145,99,41,124,198,23,121,181,66,135,113,163,64,120,6,244,24,25,204,28,43,54,138,171,0,231,8,84,158,43,112,230,185,2,103,159,43,16,2,213,28,169,157,132,17,29,222,38,166,159,29,25,69,165,113,186,226,73,115,92,99,180,20,143,192,241,242,69,135,241,216,189,154,116,8,92,136,135,220,8,29,184,254,236,107,110,66,129,99,185,149,86,37,162,211,205,106,37,190,16,11,146,234,133,144,82,83,170,201,0,82,143,171,229,17,111,165,148,30,218,182,23,160,99,151,99,101,243,200,185,2,119,10,129,81,227,4,222,45,4,42,199,9,188,122,195,222,179,110,217,9,5,30,94,191,23,152,163,199,9,188,120,227,94,96,158,50,78,224,177,75,246,2,115,226,56,129,247,11,49,39,140,19,248,188,64,208,196,113,2,31,27,139,9,83,35,43,94,60,110,174,154,4,206,30,174,84,137,4,177,22,82,106,57,246,128,136,234,128,86,83,232,91,212,68,204,27,177,51,57,181,76,37,212,162,52,8,135,121,1,81,37,68,14,20,170,137,98,219,20,9,131,64,157,44,165,40,222,134,43,54,182,107,162,240,189,56,33,57,1,223,140,140,124,122,41,197,131,86,235,200,21,244,114,243,48,169,145,11,35,77,42,24,38,205,207,172,45,143,5,230,51,132,70,46,188,56,67,136,47,78,139,47,78,75,47,78,137,47,78,9,47,42,99,73,116,141,60,22,58,132,25,204,44,211,200,205,15,222,186,7,104,20,72,0,197,142,207,197,48,180,75,64,129,189,122,19,102,33,45,72,171,223,68,211,172,144,198,76,40,131,10,36,164,140,152,65,203,180,114,188,186,85,68,75,62,77,73,72,85,209,146,119,13,236,28,162,10,251,240,46,142,21,253,20,146,206,84,0,204,203,75,5,93,159,210,32,58,144,55,69,66,80,213,43,104,241,2,103,57,36,205,148,75,75,225,139,180,87,204,208,82,101,177,2,67,40,40,47,70,247,22,200,157,232,94,87,173,210,165,193,151,4,106,163,132,116,159,89,91,142,246,19,18,46,92,24,18,82,194,247,104,115,38,25,254,1,25,250,64,41,124,64,158,245,1,245,107,31,208,163,63,144,155,101,46,141,66,133,111,157,167,84,144,162,145,47,5,196,16,225,71,96,64,52,242,123,224,196,169,84,198,70,33,151,51,46,25,36,84,69,168,116,168,68,68,42,16,26,34,50,101,19,105,128,48,95,208,163,81,64,96,158,211,131,92,32,118,96,15,116,114,30,42,56,116,87,170,80,131,230,51,68,143,145,76,50,99,155,103,26,32,205,23,244,64,133,89,206,115,40,170,127,69,44,1,21,144,52,199,240,28,190,142,20,9,123,102,5,150,229,14,143,60,10,114,31,109,20,221,202,73,194,32,114,165,39,51,111,255,179,32,218,100,226,23,149,72,132,219,15,66,222,228,166,134,196,62,65,214,107,65,79,49,130,0,24,146,250,74,241,238,147,9,188,121,120,248,4,232,17,232,164,66,116,114,90,124,215,88,113,44,45,222,118,151,100,198,183,193,151,197,130,233,200,49,249,153,248,42,225,17,237,111,52,15,15,211,101,51,4,37,64,134,189,131,161,141,72,78,35,153,138,41,151,97,202,191,26,41,89,68,121,163,70,202,27,141,31,101,184,148,199,126,181,148,221,161,82,226,242,38,135,202,155,20,42,47,68,229,69,69,65,151,9,205,64,52,10,148,137,162,123,4,207,197,71,10,211,112,232,214,95,163,161,37,68,67,77,136,134,82,124,15,146,220,188,235,54,113,143,187,40,85,66,58,36,82,98,127,221,98,199,22,84,3,236,249,79,45,14,84,162,19,186,169,163,95,8,226,68,28,30,207,166,83,203,99,128,10,168,98,65,152,67,18,85,108,104,176,35,213,25,8,133,174,146,86,197,0,243,246,203,247,2,179,94,29,11,84,15,16,4,181,22,18,216,79,186,57,190,106,196,21,13,64,183,51,155,169,30,45,229,212,208,216,67,177,134,64,87,21,202,208,18,45,94,205,161,197,115,189,2,87,93,90,210,60,132,190,39,32,101,6,229,72,103,58,67,244,152,215,173,223,168,116,163,245,79,26,93,64,137,247,186,211,144,40,19,47,206,164,122,208,161,75,60,50,57,209,13,192,163,179,33,241,151,64,85,128,125,74,9,131,153,32,254,162,235,183,208,146,146,86,134,175,143,37,68,233,87,186,195,79,75,138,215,40,208,80,230,66,227,128,234,97,146,80,160,68,180,180,84,100,242,172,34,203,196,34,147,144,144,46,251,66,174,92,133,129,133,24,185,166,31,202,48,101,50,161,104,46,173,82,96,128,194,137,189,145,34,111,245,66,114,52,58,162,5,42,99,5,190,12,245,104,229,130,194,78,32,39,127,20,175,141,114,153,167,246,136,155,177,81,86,50,40,135,81,189,120,161,78,14,105,158,195,202,175,16,71,104,129,78,173,12,243,67,160,25,37,11,32,133,170,70,38,205,137,99,125,173,130,74,129,207,52,30,16,9,21,118,234,15,105,188,48,141,175,71,148,56,174,145,110,46,131,148,196,248,40,201,71,184,42,22,228,95,242,224,61,127,121,250,195,67,187,238,93,43,160,155,14,109,120,233,233,39,191,253,113,243,90,21,9,132,255,84,71,95,32,162,1,186,141,76,117,85,20,227,14,176,92,144,117,120,121,150,243,50,110,200,114,156,143,203,131,172,128,89,27,12,122,57,150,177,118,51,22,55,11,173,62,27,155,209,24,96,185,64,134,205,101,243,89,3,25,233,86,134,179,251,50,56,214,238,8,240,220,64,70,128,179,102,56,188,54,182,63,221,202,49,60,27,72,119,248,210,140,93,186,28,155,94,111,177,48,186,236,204,76,93,87,70,128,229,108,108,135,51,224,243,166,233,210,51,211,117,153,38,20,207,198,166,115,1,0,50,128,26,116,0,0,182,210,0,204,7,35,248,58,90,24,231,1,72,2,248,31,1,0,152,23,129,231,71,224,5,17,56,57,2,167,68,224,133,17,120,81,4,78,141,192,105,17,56,61,2,103,0,0,2,60,23,180,242,176,142,229,131,156,183,144,225,25,216,231,224,187,161,30,178,110,214,195,122,249,0,0,160,147,80,3,13,0,32,19,0,160,4,0,208,0,0,221,72,220,6,159,139,245,230,51,110,198,107,101,113,236,236,145,216,59,8,53,152,59,242,109,153,215,203,114,101,94,140,28,62,47,254,222,48,242,253,126,66,141,248,18,250,126,252,79,193,79,132,26,241,92,162,131,99,188,1,6,125,91,207,51,188,88,144,172,145,8,73,36,78,91,47,150,65,248,203,2,0,24,0,0,217,0,0,183,195,194,49,220,64,6,227,118,251,172,168,210,57,166,175,163,151,181,166,115,1,43,227,103,172,14,126,0,250,122,89,174,203,237,235,3,0,108,34,213,32,65,136,71,170,193,76,0,64,12,9,128,12,0,192,192,46,31,231,97,120,222,225,181,67,158,99,28,60,116,120,252,152,10,6,21,133,67,236,102,109,144,241,226,22,13,140,97,245,146,51,38,45,93,30,62,157,11,252,68,170,193,84,0,128,133,4,0,2,0,76,66,190,98,89,114,35,112,158,248,14,82,106,176,24,0,176,4,0,176,20,160,91,83,192,50,0,64,163,151,237,247,179,86,158,181,65,55,235,181,243,221,208,215,5,29,94,127,144,7,160,37,87,13,86,2,0,252,4,0,211,193,8,222,72,224,50,86,251,188,230,128,213,225,40,232,102,56,198,202,179,156,216,62,36,190,94,0,0,40,243,246,50,110,135,45,244,137,117,156,111,163,1,0,249,193,174,46,150,107,240,249,234,61,140,219,205,4,2,44,135,56,213,197,56,220,172,45,15,178,54,214,205,51,112,217,82,152,41,177,198,234,227,88,196,25,111,208,147,97,115,12,116,116,185,125,140,192,163,137,52,110,175,149,0,128,40,0,128,132,171,69,76,2,0,38,1,0,246,3,0,94,87,0,0,171,1,88,30,75,129,225,141,179,1,72,211,17,224,217,47,85,96,123,118,31,0,123,125,255,185,100,46,170,151,117,199,119,93,188,210,236,73,251,154,6,230,29,151,237,1,170,137,196,28,231,51,182,127,155,188,255,190,230,206,247,190,251,249,130,127,81,43,166,2,243,30,33,104,62,177,236,79,233,81,215,29,161,78,153,38,199,103,28,229,231,126,245,253,193,55,148,135,233,231,223,123,240,213,221,211,214,102,221,65,205,159,243,175,106,18,152,55,253,97,15,80,109,87,16,67,233,215,174,188,244,141,167,185,155,223,61,116,105,198,228,9,251,106,62,116,249,189,229,7,227,15,253,233,45,111,207,95,230,63,216,181,239,190,36,227,228,89,109,111,228,47,137,107,56,99,221,19,104,60,48,229,248,207,236,127,146,119,55,254,248,226,225,225,195,255,246,126,247,218,241,195,29,63,214,203,192,152,204,233,114,243,122,27,107,205,8,240,194,176,103,31,200,176,113,140,221,231,77,231,2,103,51,218,150,238,97,188,60,92,6,51,65,131,76,141,198,136,189,34,223,36,252,179,240,28,134,255,11,0,136,13,195,4,129,251,149,132,43,8,0,230,132,97,150,24,253,125,15,129,199,37,9,247,18,163,211,223,32,166,119,164,104,250,82,234,224,244,127,238,253,229,192,105,161,78,94,222,119,253,139,83,78,251,239,61,252,203,155,8,175,56,188,251,233,147,15,245,157,249,225,151,195,8,199,188,237,50,31,191,178,233,233,132,147,71,17,94,114,114,237,182,251,230,188,126,121,234,201,175,16,222,112,125,163,46,185,189,246,141,226,147,223,33,252,232,75,119,220,183,117,87,207,141,204,201,147,8,191,178,249,235,185,125,218,29,95,92,116,146,62,35,96,79,125,255,242,43,203,14,220,127,245,201,24,132,155,95,251,235,170,129,9,75,214,63,116,114,18,194,57,77,191,84,25,183,171,159,125,229,228,76,132,87,92,91,106,242,125,113,245,182,127,158,76,66,248,197,188,245,243,94,185,152,127,7,156,74,69,248,187,107,158,185,230,213,131,151,236,156,113,202,128,240,103,187,22,78,185,54,218,112,60,251,212,18,132,175,248,75,246,194,95,236,166,191,212,156,42,68,120,241,5,251,254,113,228,205,253,27,93,167,42,17,126,226,213,55,166,47,40,252,224,133,139,79,53,32,124,245,75,243,158,124,237,102,215,31,119,158,106,71,120,227,237,150,213,73,238,93,239,63,113,202,134,240,15,239,117,196,182,116,221,251,231,183,78,185,17,158,255,205,115,31,254,241,167,79,190,61,126,138,71,248,241,225,51,247,220,117,223,163,143,70,159,30,66,120,115,249,144,91,214,97,185,116,222,233,141,8,215,103,238,53,116,158,217,253,210,5,167,183,32,220,56,255,137,43,183,92,92,125,117,219,233,237,8,63,181,38,197,159,212,247,243,17,254,244,14,132,183,62,254,217,227,55,63,117,228,142,173,167,111,67,120,251,106,126,211,193,142,187,127,186,251,244,46,132,15,222,112,215,214,63,250,11,255,246,252,233,71,16,118,77,142,127,230,167,19,202,63,28,57,189,27,225,191,234,116,108,227,188,7,95,253,249,244,243,8,239,90,123,209,235,251,62,185,224,186,73,103,14,32,44,95,188,104,225,243,234,246,163,233,103,222,68,248,141,171,2,142,235,146,146,238,41,59,115,24,225,184,151,193,134,255,60,122,233,41,235,153,163,8,127,57,61,225,42,155,242,179,221,107,206,124,133,240,129,77,53,190,168,3,187,183,92,119,230,59,132,83,217,105,159,180,76,121,236,239,15,159,57,121,6,152,239,184,114,15,80,201,150,239,120,237,12,13,204,143,8,224,146,181,234,219,223,60,118,236,76,140,56,86,91,118,189,240,101,255,125,20,26,75,0,216,24,181,253,167,254,220,11,214,205,70,115,1,0,15,79,86,188,116,209,107,215,236,49,137,115,174,191,253,139,139,94,211,175,217,90,143,230,105,0,186,135,255,117,239,109,166,127,188,229,65,243,15,0,69,218,235,167,204,95,176,226,230,77,104,156,6,96,193,47,207,191,169,187,213,250,239,91,65,33,194,119,221,183,127,139,137,253,240,193,167,208,184,6,192,251,236,189,211,175,80,190,184,225,16,234,43,0,92,63,171,39,255,231,89,171,158,255,15,104,71,184,229,243,25,119,164,58,170,174,138,37,108,8,127,113,185,127,186,237,107,226,189,5,132,27,225,242,190,227,215,95,247,103,207,173,249,4,143,240,197,174,213,143,92,212,31,245,159,118,98,8,225,190,169,31,12,220,114,180,225,145,62,98,35,194,207,190,112,195,202,171,46,89,121,201,85,196,22,132,151,174,186,122,255,11,245,217,251,119,17,219,113,121,119,94,243,223,246,71,22,254,233,69,98,7,194,159,118,236,188,238,169,155,139,63,252,152,184,13,225,121,91,114,223,55,60,123,195,237,39,137,93,8,183,223,124,237,159,185,235,247,253,144,72,62,130,240,107,79,255,171,161,254,153,195,143,233,200,221,8,127,98,214,254,103,202,183,39,55,85,146,207,35,124,123,127,251,27,55,188,6,15,116,145,7,16,62,82,175,185,232,219,182,196,107,215,145,111,34,156,151,57,231,154,195,143,238,252,228,6,242,48,194,87,63,252,105,123,253,223,223,189,235,175,228,81,132,151,20,222,121,219,187,67,55,252,242,58,249,21,194,234,194,219,238,172,172,236,125,242,75,242,59,132,167,239,88,254,215,227,87,220,187,89,78,157,68,56,117,99,243,29,234,227,115,94,135,20,45,76,202,32,69,119,229,191,62,187,77,125,195,98,42,6,225,27,99,118,220,242,203,13,234,207,27,169,73,56,252,187,197,150,119,97,242,46,63,53,19,225,139,15,222,57,120,97,69,225,240,102,42,9,225,180,15,118,81,203,143,106,158,185,157,74,69,120,235,153,194,11,51,118,216,175,216,67,25,16,54,63,190,101,199,141,83,178,222,124,143,90,130,240,221,51,62,125,228,170,247,167,221,244,61,85,136,240,187,125,71,158,240,62,115,245,151,241,116,37,194,191,109,164,183,115,142,64,16,73,174,203,85,106,36,1,222,13,240,12,46,225,104,2,32,41,134,225,121,214,227,231,33,239,131,54,71,175,195,198,66,203,0,28,100,57,95,216,183,137,4,0,249,97,120,57,129,103,134,179,167,17,141,37,216,149,238,8,116,8,73,14,36,167,132,197,57,44,74,16,132,56,243,11,173,243,24,5,128,122,1,0,59,47,33,192,242,252,120,48,124,245,181,0,124,252,189,12,188,124,253,98,41,94,22,137,233,148,176,155,196,121,75,248,0,9,64,73,24,254,148,4,160,34,12,31,23,195,207,201,55,143,207,38,48,171,63,6,75,173,187,69,94,157,93,62,75,176,107,101,230,42,184,12,90,218,23,100,182,11,82,165,20,231,41,49,78,102,122,122,218,162,76,135,183,171,154,169,30,51,126,186,155,245,38,167,8,34,141,135,233,119,179,222,176,52,214,146,120,134,60,139,214,46,15,47,210,152,46,148,233,130,88,53,146,102,242,125,28,231,235,171,10,242,69,72,152,28,37,77,46,7,0,32,165,7,250,130,188,32,225,89,124,65,175,45,144,7,249,110,86,144,251,160,35,0,161,37,200,35,140,63,116,4,32,0,238,88,53,146,48,183,196,170,193,132,8,169,217,44,244,255,165,103,151,170,51,217,205,118,241,16,114,14,123,55,159,210,25,13,161,128,243,96,103,103,106,52,126,41,60,231,193,103,99,213,96,154,48,134,137,105,255,59,86,141,164,214,159,99,213,128,18,198,154,113,194,31,43,81,163,50,229,65,0,78,90,212,184,95,199,97,30,232,195,36,95,161,141,22,0,128,70,78,40,252,187,40,58,53,58,21,194,139,224,106,184,58,57,58,57,117,76,198,122,131,158,116,46,176,58,78,13,102,8,60,19,165,196,204,254,204,204,76,93,166,62,51,43,211,144,153,157,105,204,204,201,52,101,230,234,50,117,58,157,94,151,165,51,232,178,117,70,93,142,206,164,203,213,103,234,117,122,189,62,75,111,208,103,235,141,250,28,189,73,159,155,149,153,165,203,210,103,101,101,25,178,178,179,140,89,57,89,166,172,92,67,166,65,103,208,27,178,12,6,67,182,193,104,200,49,152,12,185,217,153,217,186,108,125,118,86,182,33,59,59,219,152,157,147,109,202,206,53,102,26,117,70,189,49,203,104,48,102,27,141,198,28,163,201,152,155,147,153,163,203,209,231,100,229,24,114,178,115,140,57,57,57,166,156,92,83,166,73,103,210,155,178,76,6,83,182,201,104,202,49,153,76,185,185,153,185,186,92,125,110,86,174,33,55,59,215,152,155,147,107,202,205,29,93,135,69,0,128,98,128,251,68,82,44,46,243,33,25,0,179,133,50,255,15,255,73,233,253,67,134,181,80,158,11,178,93,130,42,31,150,215,164,40,156,151,132,103,68,1,144,8,0,224,24,175,157,133,1,158,225,120,177,57,74,13,23,135,116,249,56,24,112,59,172,172,240,74,212,91,166,170,113,59,89,168,198,26,33,254,146,245,218,196,20,218,213,106,160,14,11,199,241,113,24,202,41,0,25,30,247,2,214,107,67,0,12,169,213,136,158,171,212,234,177,251,98,128,231,50,252,194,168,201,9,146,52,120,80,173,70,82,110,190,12,183,195,112,172,13,195,77,50,172,253,72,56,91,14,192,228,48,108,141,192,54,17,175,76,79,79,95,101,25,224,37,186,133,94,58,170,71,11,79,157,0,100,39,168,129,74,232,247,9,152,126,169,207,88,88,187,195,11,151,44,69,108,73,22,30,82,96,95,55,235,69,204,20,52,213,78,0,252,9,106,16,7,0,88,147,160,70,109,100,125,2,230,155,148,134,144,167,215,199,67,6,10,186,28,206,151,225,6,22,67,65,197,13,64,135,55,32,204,27,48,89,32,51,0,83,16,69,18,61,143,36,168,209,10,200,123,9,106,180,138,240,73,130,26,200,195,210,30,147,191,226,120,172,158,128,219,136,130,0,96,214,88,223,6,189,14,180,252,227,231,28,94,158,177,184,241,98,13,88,50,65,141,86,97,132,121,102,102,24,22,52,90,52,70,18,148,76,38,151,147,10,185,82,17,149,16,61,83,53,45,102,122,172,58,46,38,158,86,83,19,38,76,140,74,36,166,208,83,137,105,212,116,197,12,98,38,57,39,17,82,139,168,52,85,58,145,73,233,72,61,113,39,121,55,121,15,125,175,242,191,228,47,178,83,228,105,234,76,212,125,253,3,155,47,191,53,179,185,101,243,150,109,51,63,136,139,175,168,252,229,100,122,198,5,237,171,58,62,217,120,249,21,87,94,117,247,67,79,60,249,194,190,151,94,254,240,232,103,103,0,157,48,33,69,103,200,201,91,188,180,172,124,213,198,43,174,186,251,161,71,158,120,114,223,203,175,29,60,250,25,160,99,227,80,104,222,226,162,226,178,242,11,109,236,198,43,111,184,241,165,215,14,198,38,164,228,45,46,42,107,94,217,126,97,135,141,189,252,202,187,31,121,226,201,23,94,58,114,244,179,19,177,9,69,101,54,118,120,227,95,118,63,253,204,91,239,156,248,102,195,197,155,111,187,227,233,103,94,120,241,224,123,239,151,94,251,212,171,251,94,59,88,86,189,162,185,245,194,142,203,174,216,250,208,95,31,123,102,239,190,23,223,73,72,156,178,178,253,135,31,79,159,25,246,244,124,120,36,110,142,215,55,115,86,199,234,53,247,63,176,246,201,221,137,83,102,207,41,46,169,94,209,210,214,126,225,154,181,143,190,240,230,91,135,79,124,243,61,23,216,202,7,175,158,159,158,113,231,3,143,61,243,226,193,119,142,92,191,252,154,107,51,183,206,249,199,155,175,157,169,94,209,182,82,161,140,87,47,200,248,250,184,215,151,179,244,130,252,162,109,87,214,219,131,251,95,122,253,239,135,222,253,252,244,25,0,59,180,235,143,208,235,11,149,51,104,121,194,186,93,113,195,247,202,230,68,173,155,65,77,83,18,116,6,109,160,21,20,161,144,43,18,162,107,226,39,40,26,21,20,61,51,58,138,82,82,10,138,164,40,42,134,150,81,42,57,17,55,89,86,173,152,161,104,86,144,242,41,49,53,116,1,149,70,17,116,130,60,62,38,143,158,53,175,3,122,104,231,188,225,253,178,245,15,82,211,229,235,79,81,173,138,196,168,169,81,147,98,38,197,56,229,209,242,233,242,86,197,34,89,113,116,42,29,67,19,148,78,149,74,79,151,171,168,225,93,242,104,121,134,174,138,26,190,77,185,132,138,167,150,40,76,202,69,178,245,103,18,166,42,51,18,210,40,77,188,38,126,120,11,189,254,154,105,170,201,155,182,203,50,100,139,21,100,220,212,168,225,167,181,124,204,240,219,211,99,100,195,103,100,195,71,98,254,115,35,149,19,181,174,125,210,240,227,202,225,87,100,209,83,23,83,209,114,147,178,88,25,35,231,85,179,169,54,186,53,106,120,195,212,153,209,137,81,149,244,240,31,228,247,222,22,51,133,214,221,66,175,123,111,190,34,70,38,27,190,67,189,238,123,5,1,23,202,43,233,225,203,233,225,167,169,25,84,124,44,144,19,4,69,208,164,76,161,32,149,202,40,50,90,166,34,227,104,53,145,64,78,144,77,76,152,68,76,38,167,144,211,98,103,202,102,41,231,16,73,132,147,118,145,15,80,15,145,187,201,131,228,223,201,55,99,222,138,122,155,124,135,124,143,248,72,246,49,249,57,125,140,252,26,158,160,127,34,255,75,253,66,196,44,88,188,172,122,197,214,155,110,186,249,162,205,127,188,250,214,191,60,113,201,67,114,69,148,113,233,178,166,111,95,255,59,61,105,170,49,167,169,121,237,61,247,63,240,84,246,71,19,46,189,236,138,155,66,141,81,104,139,213,43,108,108,251,95,31,155,49,83,161,140,86,77,154,98,204,205,187,235,238,67,239,70,229,108,187,242,46,69,244,226,101,93,142,173,87,37,248,58,158,249,250,120,155,229,187,147,103,234,27,174,191,33,61,99,65,114,227,141,59,111,249,243,109,119,222,117,223,19,187,159,151,171,98,38,207,202,187,160,168,246,142,59,15,188,186,83,49,109,186,118,222,178,11,62,255,234,248,153,23,246,209,112,238,188,249,201,89,166,188,210,242,202,154,250,198,38,161,237,117,90,217,46,87,160,127,245,218,63,220,118,207,3,15,238,121,253,254,7,188,190,167,255,120,161,246,34,25,69,167,81,93,20,145,145,62,188,126,22,165,139,159,73,39,69,205,150,45,146,21,210,113,11,135,239,145,39,209,73,116,178,210,160,170,46,88,151,19,149,24,173,156,186,184,40,151,178,42,163,50,19,101,26,106,134,140,88,110,162,43,100,25,116,180,34,74,177,28,46,160,99,162,140,84,158,108,186,130,142,81,212,148,229,100,197,102,41,210,149,209,235,230,215,85,44,82,46,76,156,62,127,230,164,41,81,213,116,82,84,97,236,52,69,180,188,84,185,32,42,168,202,95,182,80,190,88,22,45,175,149,19,50,53,37,27,222,108,153,93,170,140,30,190,227,66,109,145,42,90,30,59,49,79,30,109,76,165,167,12,255,109,137,173,62,166,52,42,186,184,104,70,169,178,62,182,76,17,61,252,67,113,244,44,170,164,44,135,138,83,70,203,115,21,209,235,140,211,20,139,169,153,77,68,188,62,118,195,13,93,65,213,240,243,127,168,180,198,110,204,84,39,110,189,103,125,201,45,127,91,159,171,88,72,183,203,231,71,23,71,39,203,38,174,127,112,37,91,65,231,42,18,150,11,77,226,154,159,148,27,223,94,24,117,235,231,235,178,226,137,89,242,56,90,185,110,203,101,180,75,22,75,69,41,212,87,117,150,68,241,75,134,127,136,14,40,253,147,139,7,133,174,208,28,53,109,248,210,117,37,212,197,249,241,147,55,214,204,145,203,135,223,90,36,91,166,33,252,105,212,116,154,92,183,124,78,66,158,140,88,247,250,194,245,255,28,254,49,165,146,142,166,201,13,9,133,149,75,135,159,93,34,39,232,70,217,12,3,185,46,46,149,182,197,52,69,15,223,111,154,21,155,74,71,41,200,56,249,240,245,27,14,209,9,84,44,213,71,119,200,99,104,34,62,134,54,41,163,229,201,74,109,245,186,134,152,89,84,148,194,168,140,163,163,20,81,138,225,87,230,69,111,148,143,59,134,139,191,29,54,134,103,210,185,64,166,78,159,101,200,54,230,152,114,25,139,213,198,118,157,21,143,13,88,25,63,30,240,77,83,213,104,108,55,136,50,120,123,240,162,208,59,11,0,72,182,30,83,254,183,56,236,88,250,3,160,127,170,26,201,37,187,8,44,63,159,45,229,122,125,22,36,111,143,177,120,230,176,59,248,0,92,2,13,153,103,7,250,248,110,150,67,11,107,0,76,85,163,213,254,26,113,213,95,194,130,230,46,204,217,130,16,188,129,134,224,74,89,39,88,53,113,39,152,48,5,206,137,129,157,115,142,167,238,92,180,48,19,166,250,238,248,40,149,188,171,51,109,246,47,157,233,224,52,52,222,116,166,211,120,138,248,216,72,68,107,114,146,98,63,206,185,55,142,201,205,152,122,75,110,230,76,166,244,219,217,183,84,46,55,48,53,39,156,183,212,174,240,105,234,110,220,125,75,29,56,200,212,179,127,191,165,30,188,167,105,0,31,125,220,120,255,39,76,243,87,71,53,173,175,31,187,165,21,130,175,91,79,16,107,219,128,31,40,64,26,65,16,36,65,18,68,169,42,115,178,154,96,21,164,156,36,9,122,46,49,123,198,74,85,94,84,20,49,149,38,162,8,138,144,45,162,150,40,23,78,37,96,14,65,16,180,146,38,40,69,52,57,139,200,19,162,211,74,34,138,136,38,167,19,36,153,75,208,36,77,146,20,69,204,38,41,66,37,96,25,65,210,196,36,50,81,78,8,95,147,4,173,36,20,84,52,57,155,88,76,16,68,12,17,69,36,19,20,145,67,16,148,140,34,104,5,169,66,169,10,36,81,132,140,20,240,76,50,151,28,201,101,22,81,74,208,4,73,17,132,146,168,37,72,69,140,210,66,144,81,42,69,25,57,131,16,254,229,196,17,50,130,148,169,136,164,40,162,139,38,228,4,73,146,211,72,154,82,211,177,4,73,202,137,120,2,80,128,154,69,206,38,103,147,203,73,66,161,36,72,85,20,145,70,17,68,144,212,18,189,20,77,70,17,114,234,125,146,20,168,85,8,41,146,74,121,52,73,100,206,209,209,153,10,130,144,17,201,81,49,36,164,73,146,160,76,4,34,132,202,83,146,228,181,20,17,75,40,132,12,41,114,223,114,64,60,167,1,212,229,68,39,4,114,7,9,104,34,26,146,53,36,16,70,123,98,26,41,35,174,33,167,79,136,37,230,43,167,169,210,169,76,66,96,217,2,162,64,78,146,36,25,67,40,137,12,34,139,32,40,146,148,145,4,177,144,84,18,95,11,108,35,0,1,212,106,65,21,34,62,33,254,36,3,20,65,202,232,100,138,38,110,39,1,13,200,26,170,88,165,163,47,34,140,241,41,4,73,70,83,58,154,36,21,196,82,42,73,70,40,151,17,49,164,33,42,154,38,137,14,74,96,165,156,32,137,27,9,74,57,25,113,150,32,18,137,56,5,37,123,78,41,20,102,138,192,85,185,80,81,66,37,124,73,144,180,156,36,200,25,100,163,82,120,227,36,80,116,130,165,72,154,144,129,40,130,252,158,136,38,9,130,38,182,209,36,73,19,48,58,89,142,106,74,78,82,233,177,4,9,20,132,156,32,234,18,73,133,144,218,160,156,18,82,85,16,68,169,144,21,1,72,21,105,144,201,132,39,66,30,15,100,139,21,128,184,128,174,37,0,9,210,201,41,128,32,40,90,166,84,146,138,217,244,118,10,228,208,122,37,17,71,36,202,136,120,160,32,18,80,138,50,27,177,83,1,136,165,52,160,129,194,163,0,157,195,39,64,208,237,70,230,60,198,239,15,160,255,119,212,251,42,139,29,165,37,185,13,93,118,222,214,216,210,232,108,54,247,59,178,42,249,222,214,96,241,64,97,101,83,119,126,115,191,173,170,173,127,160,0,13,50,131,51,213,200,138,50,85,180,232,73,120,154,104,161,147,240,116,17,71,228,102,29,8,212,180,152,157,108,119,149,191,169,162,145,241,15,90,170,10,10,188,254,226,254,198,226,98,110,160,168,185,136,169,180,123,45,185,213,92,157,9,203,176,199,196,244,162,68,139,95,81,63,99,229,203,188,254,32,95,239,240,218,221,172,20,62,73,164,71,194,147,197,252,37,156,56,54,61,125,221,14,174,210,82,229,112,88,155,108,14,159,161,167,183,177,171,42,187,194,108,55,22,240,166,166,62,127,235,96,73,87,87,86,208,202,15,20,88,49,61,253,179,112,122,49,34,61,13,125,190,82,159,191,190,143,241,55,233,165,176,28,145,22,9,155,196,188,37,156,43,198,149,176,100,157,146,240,18,241,111,36,237,145,176,69,17,105,167,70,164,157,22,129,51,196,244,37,156,25,145,151,38,34,61,109,68,252,185,17,180,78,137,248,126,106,196,247,211,198,230,179,185,170,42,59,187,190,219,230,242,149,212,229,103,59,155,90,107,156,205,131,142,62,151,201,147,93,229,239,27,40,180,7,170,154,75,153,170,250,218,230,82,35,98,244,71,179,213,200,74,39,213,187,132,165,122,150,176,84,207,18,30,167,158,139,124,57,205,206,138,30,99,14,231,44,175,173,111,235,175,55,14,102,181,186,24,255,96,107,22,91,229,52,182,12,152,90,178,139,106,155,188,217,141,76,62,202,191,115,14,78,47,90,204,95,194,147,197,252,37,44,229,39,225,41,99,231,95,106,106,206,178,242,131,185,250,64,111,171,221,232,113,121,117,141,124,73,87,80,207,212,114,250,46,111,99,113,105,149,174,174,187,222,90,196,215,22,242,184,252,115,34,202,63,39,162,252,115,34,202,63,231,156,229,183,249,245,125,76,81,115,125,254,64,246,64,133,167,199,152,205,114,118,95,99,86,137,177,167,174,210,211,195,24,43,114,154,89,3,215,86,95,225,239,198,237,188,19,142,238,119,5,28,203,240,236,10,206,198,114,161,48,137,22,9,75,180,72,120,28,90,114,251,107,217,230,222,18,147,206,104,105,236,207,45,170,113,150,122,152,6,125,214,64,111,83,149,190,173,217,194,113,254,54,75,110,77,48,208,84,236,64,75,11,224,43,136,203,166,16,105,169,103,121,222,205,22,11,90,127,40,108,130,72,139,132,39,138,121,75,120,210,216,180,20,102,229,231,59,123,26,109,5,173,193,26,157,169,171,186,183,183,202,82,99,110,51,21,250,173,117,14,131,195,167,47,10,180,150,214,50,125,229,133,140,29,203,71,154,209,245,34,97,137,23,18,150,120,33,225,113,120,81,88,212,210,234,11,212,27,125,69,37,189,46,83,176,160,144,25,232,237,43,106,27,52,244,20,13,20,150,215,117,229,122,139,237,173,5,76,79,77,85,3,150,207,126,210,140,110,151,194,232,128,198,68,179,199,23,244,242,101,94,48,242,141,212,86,127,138,160,65,194,227,181,213,1,38,63,171,57,183,199,216,98,51,103,247,247,249,27,13,45,222,250,182,166,92,67,55,223,229,177,120,122,202,91,218,172,69,150,58,166,60,200,227,182,186,69,59,154,39,18,158,36,142,79,18,158,44,142,63,18,78,20,113,68,254,250,190,6,83,107,143,33,215,85,106,47,28,108,9,214,244,183,213,51,108,37,83,170,235,177,120,74,90,248,162,129,154,1,163,193,82,153,195,20,102,225,65,57,102,238,232,252,37,44,213,137,132,165,58,145,240,56,117,82,208,88,215,84,226,107,243,154,6,7,172,253,198,226,150,190,62,182,215,158,223,144,175,183,55,245,218,44,37,13,69,254,222,170,242,66,139,61,160,231,13,184,252,17,249,111,137,200,127,75,68,254,91,206,157,127,17,219,215,63,96,51,215,20,20,52,5,171,139,6,184,166,106,163,169,38,88,223,106,171,205,233,171,240,234,115,154,114,75,156,172,207,97,178,13,100,213,227,242,39,69,148,63,41,162,252,73,17,229,79,58,103,254,62,191,215,162,175,52,119,149,183,90,234,170,204,165,165,189,61,206,130,190,218,126,198,219,230,205,169,99,139,74,253,58,151,73,87,228,235,246,183,89,240,88,177,37,105,244,88,81,227,102,172,108,3,227,18,135,139,80,120,136,31,73,163,199,11,9,143,67,143,190,130,237,110,229,179,42,2,69,181,117,217,89,206,86,107,191,211,82,235,215,219,244,174,2,191,193,236,10,214,54,27,77,12,31,236,170,235,171,231,16,65,51,231,157,221,71,132,209,2,109,213,9,11,151,250,135,132,165,252,37,60,78,255,200,105,182,5,43,45,117,93,173,221,13,229,46,222,89,217,151,93,92,88,52,192,245,248,138,122,141,58,166,161,161,32,88,98,102,121,123,165,115,176,58,27,209,179,107,222,232,250,145,176,196,143,93,243,70,215,207,174,121,231,172,159,92,190,162,40,167,202,226,113,26,60,253,133,206,102,134,119,184,6,75,204,188,203,215,236,11,56,28,109,45,185,3,198,114,67,105,151,71,95,103,42,69,249,167,206,31,157,191,132,165,252,37,44,229,47,225,113,242,207,175,239,243,27,45,69,249,142,238,166,74,91,79,121,93,69,137,125,208,105,45,169,44,117,89,27,130,131,158,122,159,174,161,214,85,202,250,7,75,77,126,92,254,136,252,119,69,228,191,43,34,255,93,231,206,191,190,160,212,204,7,186,76,30,139,115,192,233,232,53,84,186,186,43,43,130,124,67,151,177,220,219,102,182,216,202,43,138,93,45,181,213,85,197,165,109,184,125,166,46,24,221,62,37,28,42,255,130,209,237,81,194,227,245,15,11,231,168,45,212,13,90,252,3,149,131,185,217,37,217,222,28,111,57,107,100,12,133,53,78,127,113,31,147,221,210,90,227,171,246,232,116,89,3,56,255,93,17,249,239,138,200,127,87,68,254,187,206,157,127,128,243,244,212,244,14,120,202,217,226,138,90,195,96,73,45,107,211,149,20,251,253,118,87,93,105,101,174,139,41,170,44,176,12,184,2,229,124,77,139,88,254,100,156,222,200,252,201,5,61,89,168,151,162,30,42,133,75,115,168,132,165,57,84,194,227,204,161,129,62,198,95,61,96,51,181,56,106,251,202,141,14,198,235,207,13,120,253,65,131,133,107,236,41,238,103,108,131,189,165,172,197,107,110,113,150,139,245,177,59,121,52,63,118,39,143,230,71,248,78,187,82,0,64,89,152,221,166,92,208,1,56,206,199,65,27,27,96,57,7,227,118,12,58,188,246,60,40,200,181,41,106,196,67,129,62,183,3,15,78,237,41,106,52,14,180,136,114,184,132,183,137,187,192,36,124,149,184,11,78,194,215,70,224,27,69,90,36,124,147,72,151,132,119,70,124,127,79,4,126,94,180,55,73,248,12,0,160,46,12,19,4,182,217,73,88,17,129,99,8,188,62,34,225,56,209,22,45,97,117,196,247,211,69,124,62,130,239,121,52,172,242,198,26,189,179,191,183,133,233,9,230,84,215,182,234,74,60,213,197,6,143,174,215,103,235,211,233,43,155,90,90,251,45,197,149,250,96,121,111,151,175,188,177,198,80,108,209,91,123,28,117,141,86,166,161,212,198,213,20,152,186,245,246,234,128,89,95,212,208,226,168,41,44,204,202,106,182,150,4,203,243,203,27,107,178,172,250,198,238,172,102,179,161,218,158,101,224,251,140,174,26,155,190,196,80,144,157,159,175,215,181,248,178,140,229,172,46,144,165,175,233,46,111,172,49,86,186,44,109,22,103,189,206,89,81,209,199,248,109,165,213,3,57,134,65,107,91,22,95,217,216,230,115,100,215,86,15,52,53,48,77,6,225,83,135,193,55,24,204,30,176,21,22,120,43,29,85,62,123,189,213,85,88,227,183,240,92,78,126,185,161,152,31,108,109,118,89,178,235,92,229,141,53,217,214,82,167,215,91,208,175,47,244,251,155,2,193,174,64,37,215,18,48,21,229,183,177,69,109,131,37,124,81,69,110,137,109,208,232,235,19,62,245,23,153,219,216,82,91,41,87,217,223,157,221,88,208,103,182,248,157,37,125,173,21,21,190,158,96,129,223,198,232,187,187,106,12,65,211,249,8,84,231,161,144,158,143,156,112,62,50,213,249,232,106,231,35,43,157,135,238,127,62,83,236,249,168,19,231,49,117,156,135,198,116,62,74,196,249,8,51,231,51,209,158,143,80,112,30,2,222,249,232,39,231,163,227,158,199,28,122,30,11,84,231,49,19,241,253,29,14,155,223,231,115,119,48,54,27,199,6,2,22,38,192,118,120,28,94,190,39,232,227,241,19,122,213,203,4,221,226,59,244,136,94,50,72,217,194,111,241,179,35,208,225,240,122,89,174,195,49,178,103,59,236,177,3,89,173,195,95,240,3,126,246,172,24,248,51,95,144,103,185,14,63,231,179,115,140,7,127,35,2,190,223,219,209,197,178,29,110,198,227,247,113,124,32,224,176,11,161,18,236,176,118,51,94,59,43,205,1,58,113,23,125,196,124,109,172,170,236,175,236,113,180,48,76,125,163,223,101,175,242,54,23,54,4,89,103,117,91,209,96,150,171,40,199,165,239,243,13,148,150,52,21,247,101,233,114,209,28,234,206,28,173,127,159,79,2,82,220,4,113,110,151,240,4,81,150,144,240,196,113,100,221,230,220,236,220,194,158,162,162,6,71,73,155,207,218,218,92,80,91,195,148,27,3,249,158,198,65,123,87,127,75,87,79,9,219,80,100,243,103,49,181,53,136,214,169,186,209,180,158,79,2,82,92,137,86,9,75,180,74,120,28,90,11,42,171,170,114,249,70,159,221,94,30,212,247,49,246,26,151,171,39,144,203,22,151,24,242,155,187,155,242,219,154,93,53,186,158,222,172,122,127,14,95,135,104,125,94,55,90,79,57,159,4,4,157,166,217,193,119,215,48,28,239,101,185,80,90,146,78,35,97,73,134,148,240,56,58,77,65,67,149,185,191,223,149,101,40,117,86,52,247,215,102,213,86,182,85,232,74,253,76,101,139,39,191,151,101,124,89,69,245,108,77,139,197,49,208,53,136,23,136,134,245,163,249,124,62,9,72,113,37,62,75,88,226,179,132,199,225,115,161,207,199,112,185,229,174,110,91,91,78,121,86,101,105,117,150,57,167,181,32,232,43,169,107,180,219,91,186,107,153,18,131,203,225,236,170,44,105,212,59,177,254,147,53,154,214,243,73,64,138,43,209,42,97,137,86,9,143,67,107,113,101,99,75,208,82,231,113,21,57,244,61,198,138,172,214,92,87,126,141,61,87,111,48,217,237,76,91,83,192,87,95,220,205,151,151,214,115,30,29,22,214,15,69,208,122,62,9,28,138,160,245,80,4,173,135,206,77,107,189,208,166,26,249,1,190,43,223,150,239,213,89,114,171,27,75,74,140,93,190,170,166,26,222,218,108,247,215,53,102,233,75,27,124,133,141,109,88,205,6,27,13,17,122,197,111,79,32,20,87,162,85,194,18,173,18,30,159,86,127,149,189,167,186,48,48,208,148,227,49,219,171,115,25,219,128,193,82,216,20,204,30,168,119,122,60,45,172,179,165,119,64,223,91,201,235,48,173,153,217,103,209,250,91,19,8,197,149,104,149,176,68,171,132,199,161,85,159,211,205,116,153,42,141,190,254,70,182,133,43,229,236,69,246,0,219,239,172,111,205,238,182,52,53,54,23,121,122,123,115,171,7,250,237,166,222,218,94,68,236,225,108,92,79,42,145,214,243,73,64,138,43,141,3,18,158,47,218,6,36,188,80,156,27,36,156,19,17,158,55,246,220,81,232,108,42,50,150,87,59,90,123,106,42,245,181,45,3,5,141,141,221,38,174,218,89,202,89,6,115,187,91,74,171,91,249,220,220,170,218,236,220,158,62,204,248,187,140,17,125,239,60,18,144,226,74,124,151,176,196,119,9,143,195,247,26,161,57,86,217,234,25,135,137,119,114,69,45,214,254,98,182,150,239,54,229,244,23,24,184,186,0,99,104,50,103,123,186,75,186,91,92,120,234,0,13,57,163,219,200,121,36,16,138,43,209,42,97,137,86,9,143,71,107,183,143,173,118,180,180,153,242,7,202,75,42,93,253,213,93,109,117,94,87,99,151,179,215,19,108,237,169,172,51,229,58,157,197,165,37,61,182,150,86,76,43,48,69,208,250,219,19,8,197,149,104,149,176,68,171,132,207,209,247,92,69,69,86,75,99,79,191,161,151,247,21,229,15,20,59,235,93,221,21,182,130,6,147,81,95,88,221,100,201,214,123,219,236,186,70,81,223,223,101,58,187,239,253,198,4,66,113,37,90,119,69,208,186,43,130,214,255,133,35,144,150,64,182,41,45,51,61,59,61,83,60,250,104,245,161,227,143,103,206,247,31,32,72,138,150,201,21,74,17,71,69,171,98,98,227,226,213,103,18,38,76,156,52,249,76,226,148,169,211,166,207,152,57,107,246,28,136,195,53,218,185,73,243,230,47,72,78,89,184,232,76,106,90,122,198,200,222,15,20,28,66,230,252,130,194,162,226,146,210,242,138,202,170,234,154,218,186,250,134,198,166,230,150,214,54,188,67,196,222,237,112,186,60,94,159,191,135,11,240,193,222,190,254,129,193,49,214,84,42,194,112,229,24,50,98,81,177,137,227,88,43,223,93,151,93,232,26,244,121,77,213,125,193,28,83,119,93,111,87,65,69,208,82,174,51,84,101,7,243,139,250,138,141,98,223,217,150,135,235,65,146,101,206,35,129,80,220,57,98,29,75,88,35,214,105,126,112,32,244,110,114,196,55,146,60,83,229,243,121,11,154,154,170,219,138,235,91,93,61,213,45,53,70,75,127,105,101,77,165,177,182,182,220,81,197,216,11,43,179,122,172,61,141,181,13,92,73,189,79,247,27,255,233,3,190,32,103,101,109,108,128,119,120,209,217,69,180,83,135,119,184,3,66,169,31,91,140,247,101,111,16,229,44,9,111,20,109,172,18,190,51,2,223,37,238,33,151,240,67,0,128,230,48,252,183,8,188,57,34,254,150,136,248,127,138,248,254,70,17,163,245,238,193,90,91,126,181,165,178,167,38,187,169,168,219,230,50,215,27,139,106,138,43,11,116,53,165,222,252,158,130,150,34,127,77,127,176,200,18,138,251,101,68,89,190,138,200,59,158,24,141,213,196,104,90,166,17,163,105,209,68,224,111,35,210,251,46,162,44,167,34,202,34,139,136,31,32,240,158,126,9,243,4,110,3,225,56,91,208,125,126,229,159,244,125,41,49,186,188,101,17,229,171,139,192,245,17,229,109,143,160,143,21,113,100,127,115,224,211,160,176,151,113,7,217,60,8,78,44,85,131,120,0,64,83,11,222,31,236,113,4,2,14,175,29,118,57,88,183,13,118,2,245,50,28,46,237,15,150,226,139,91,190,65,230,178,209,241,109,65,191,219,97,101,120,54,148,2,0,53,203,240,9,93,41,141,72,153,223,92,85,85,48,232,203,110,173,52,245,25,154,138,139,77,21,77,165,92,133,94,95,82,210,24,240,103,55,53,48,205,57,118,142,171,176,115,205,61,21,168,147,243,203,34,244,149,243,72,0,239,144,24,73,67,234,235,18,134,98,63,150,176,38,2,79,142,248,62,49,34,124,60,189,166,166,170,202,231,51,85,102,21,27,170,45,13,172,61,191,160,162,169,58,232,181,219,43,115,74,117,109,126,91,67,105,69,127,109,126,118,79,69,141,174,0,149,177,229,2,156,158,180,191,227,124,18,16,202,152,207,4,216,21,65,30,159,34,190,96,164,44,2,237,18,150,246,88,72,120,174,136,165,248,101,248,16,114,40,124,74,68,252,169,17,241,165,61,23,168,191,187,88,123,109,23,219,54,224,168,238,51,151,91,170,45,37,21,53,197,45,5,205,193,252,222,174,220,250,128,81,159,213,84,155,93,104,142,96,83,73,113,75,160,190,50,59,80,207,20,118,85,23,215,54,182,6,74,89,151,165,57,191,89,215,16,40,182,57,11,91,7,205,5,221,70,61,95,84,218,143,77,242,96,237,242,17,218,38,132,225,169,226,58,187,132,151,68,132,47,141,8,111,22,249,44,225,14,113,221,92,194,157,226,94,245,243,161,144,129,1,182,39,200,122,173,236,175,123,32,16,23,86,58,28,54,27,195,51,103,249,3,96,172,86,95,208,203,227,53,30,143,195,203,251,250,188,44,39,70,26,195,3,0,219,207,90,131,188,195,107,239,144,98,226,159,14,134,179,7,209,57,252,0,207,88,93,29,221,172,195,222,205,143,227,22,224,172,101,161,192,217,254,0,44,110,159,213,213,17,112,251,120,252,100,99,120,22,63,241,14,15,139,100,28,142,237,9,58,56,214,214,17,112,216,189,12,31,228,216,0,199,50,54,159,215,61,128,94,177,54,137,200,145,247,65,111,68,136,195,214,197,178,1,169,20,46,118,32,16,78,151,159,99,59,44,184,228,1,191,47,192,143,0,142,237,224,5,190,140,14,30,253,106,132,46,188,142,213,203,114,1,135,207,123,22,15,3,110,159,61,208,193,115,65,175,48,192,217,220,62,123,135,135,13,4,24,59,27,176,250,60,254,32,207,118,4,189,14,62,208,97,245,121,3,65,15,107,195,14,6,58,194,106,52,194,59,194,217,219,83,61,14,27,92,178,20,6,88,183,120,50,205,202,184,221,172,13,118,214,177,129,160,155,207,203,11,122,251,56,198,159,156,210,9,125,94,200,120,97,103,17,199,117,226,225,60,82,118,202,201,118,213,180,228,86,149,54,56,235,245,131,188,174,167,139,211,85,183,150,6,7,217,202,150,174,218,170,220,82,189,161,175,184,190,145,215,85,249,241,38,183,3,5,163,199,156,243,73,32,108,204,9,165,3,197,125,23,35,227,201,72,30,137,98,152,132,117,162,222,39,225,108,81,239,147,112,126,68,120,137,248,141,132,43,196,253,108,18,94,33,134,71,240,164,50,191,177,173,162,187,174,191,166,56,171,165,209,159,95,224,244,27,90,7,27,42,236,149,86,171,179,173,187,161,190,176,42,183,53,216,196,212,244,245,251,240,248,242,81,225,232,125,118,231,145,64,104,105,140,115,88,217,50,143,159,177,242,35,233,45,18,203,47,225,84,113,174,150,112,154,136,67,251,106,86,4,121,41,76,19,17,87,27,17,119,110,4,158,18,241,253,212,136,240,105,34,46,101,2,221,144,199,94,92,34,29,109,196,20,99,239,26,25,191,71,147,233,102,2,221,22,206,215,231,77,203,76,215,101,165,235,36,175,30,226,193,162,204,98,53,58,61,221,38,238,195,182,186,125,129,32,199,66,135,183,215,231,98,109,144,99,173,65,46,224,232,101,221,3,208,199,65,166,139,103,57,104,97,5,49,197,198,249,252,126,214,38,246,174,94,134,115,48,94,126,95,49,62,63,197,7,253,110,86,122,9,0,56,92,140,207,144,121,217,62,126,192,63,18,242,93,49,150,97,132,206,43,189,140,41,17,229,40,111,208,3,75,240,57,44,15,227,7,169,37,248,108,164,52,178,155,74,240,57,42,41,77,76,9,0,165,37,152,134,21,126,212,189,81,255,236,20,211,20,243,113,7,89,0,248,18,188,70,142,142,148,49,28,199,12,0,176,73,124,23,224,57,161,140,96,71,137,26,233,172,33,207,29,176,179,115,87,9,150,183,36,153,10,121,221,16,190,246,251,28,94,30,118,238,47,25,125,102,204,225,229,89,187,16,19,0,112,172,68,141,108,222,161,51,105,62,159,155,21,134,18,65,78,44,29,29,198,64,49,148,129,152,156,96,150,62,104,52,116,25,13,192,188,111,219,94,160,186,110,242,137,11,240,84,150,180,28,255,182,226,223,229,91,241,239,166,231,240,175,243,39,244,59,188,49,93,144,91,193,235,19,172,232,119,227,59,215,160,95,246,213,87,133,95,216,177,147,20,250,250,177,222,210,28,225,247,214,237,211,61,249,0,44,255,108,71,230,173,249,0,108,155,253,252,238,183,243,1,48,204,255,222,21,83,0,134,63,202,25,120,206,92,0,118,30,186,184,217,208,91,0,246,87,219,61,123,239,45,0,75,175,236,60,218,242,113,193,242,45,143,246,207,122,96,114,97,205,241,79,222,62,58,189,162,240,170,183,170,228,7,79,12,23,254,80,254,241,139,100,218,163,133,143,220,248,238,64,65,255,23,133,87,146,201,169,11,55,195,162,108,74,255,216,119,247,53,20,145,27,79,31,237,121,247,178,162,117,19,230,100,124,190,96,79,145,230,157,127,254,247,35,221,119,69,95,108,217,153,219,186,44,165,56,233,65,229,166,227,151,119,20,79,241,202,30,125,244,241,63,22,239,120,169,88,251,233,29,251,139,169,161,67,95,220,240,250,233,226,245,85,47,114,76,126,86,201,167,112,224,224,207,19,186,75,102,56,154,11,30,159,114,83,201,67,183,36,46,124,227,181,127,148,204,42,223,241,221,165,235,21,165,183,183,63,247,77,138,117,105,233,231,211,166,231,252,119,21,87,202,236,252,232,249,254,239,239,40,29,216,63,245,135,183,255,114,184,180,114,245,193,214,125,199,19,202,110,106,47,56,241,152,171,184,108,95,86,195,87,183,203,135,202,218,119,62,242,240,130,141,15,149,5,246,223,178,83,247,217,103,101,91,243,94,86,174,185,112,70,249,245,182,53,47,196,205,168,45,223,115,234,131,222,127,48,23,151,103,174,254,211,164,146,39,158,40,95,230,253,192,237,126,228,68,249,107,47,77,218,116,233,199,73,21,230,147,211,156,255,154,214,86,113,247,210,154,79,116,53,219,42,38,86,29,109,91,102,123,190,162,185,243,198,111,170,86,255,92,225,121,156,246,222,114,56,163,178,240,219,103,143,30,253,151,181,114,242,131,223,206,186,240,232,181,149,51,118,248,111,15,206,58,88,121,37,211,117,169,131,163,170,190,71,14,87,76,85,220,79,91,63,125,222,226,173,42,249,37,55,238,201,83,183,86,77,27,220,255,247,148,167,222,169,186,249,218,188,98,126,87,108,181,237,230,163,247,238,223,156,95,189,244,197,15,222,126,34,189,175,58,38,247,79,91,28,255,221,85,125,103,193,7,63,174,155,249,73,245,149,219,223,12,222,250,231,196,21,143,254,173,108,226,230,202,202,21,9,147,226,190,122,251,129,117,43,18,175,75,184,243,192,140,191,174,88,121,230,173,215,159,185,245,203,21,215,61,115,241,39,143,21,105,106,214,102,44,120,127,222,53,141,53,29,191,156,168,61,126,242,15,53,51,110,52,254,113,242,135,123,106,44,133,244,79,215,79,254,190,230,162,70,217,95,137,149,11,107,61,141,207,37,124,220,223,89,187,127,161,161,105,218,53,219,107,7,179,247,222,123,100,247,75,181,238,189,45,175,168,18,65,221,139,223,164,63,125,197,12,67,93,238,253,79,120,56,173,163,238,197,214,148,168,120,215,205,117,179,14,253,141,253,215,173,111,212,37,85,39,63,243,231,205,202,250,251,152,255,220,191,229,254,101,245,49,171,155,255,61,37,45,80,191,162,253,190,99,171,126,186,179,222,250,240,33,75,240,135,15,234,103,251,95,92,21,245,196,132,134,121,149,185,143,110,238,46,105,72,191,249,210,91,239,207,95,221,176,250,185,237,243,238,43,251,75,67,251,119,63,123,167,30,254,103,67,160,231,241,63,204,254,227,204,198,99,197,15,39,126,251,126,109,227,173,83,59,15,31,175,187,164,241,229,217,253,111,220,251,249,147,141,23,76,92,100,123,197,255,77,99,220,161,236,165,167,15,204,107,154,80,189,225,192,210,229,43,155,94,81,255,227,230,249,202,43,155,78,111,223,87,146,89,254,66,211,210,188,199,91,119,239,248,111,83,87,210,196,199,191,191,37,179,121,248,223,83,230,7,94,182,53,127,116,236,198,227,241,167,174,107,222,242,208,179,223,167,44,123,189,249,248,170,172,192,35,85,116,139,43,27,108,211,48,185,45,47,228,131,239,28,127,243,181,60,153,50,108,250,228,141,63,183,44,52,236,220,247,222,254,67,45,217,230,210,254,132,95,226,90,247,38,167,125,249,69,123,65,235,55,220,79,183,207,51,244,183,222,183,181,55,62,195,124,127,235,129,105,247,56,158,58,246,73,235,5,59,39,61,255,213,173,83,218,86,236,159,246,253,157,155,171,218,244,179,50,127,46,237,91,223,182,38,105,40,103,198,228,199,218,110,74,91,41,179,188,247,85,219,250,147,45,5,171,149,218,149,127,94,156,177,125,199,31,154,86,110,137,94,252,183,130,180,45,43,175,249,231,243,245,229,59,246,174,92,10,255,122,172,157,250,97,101,213,93,159,106,13,27,23,181,103,150,189,246,167,157,122,166,125,232,125,243,147,165,107,255,212,190,178,110,194,23,211,143,188,220,62,16,168,248,135,255,21,176,170,185,230,67,121,213,105,195,42,207,209,63,149,126,180,212,185,234,249,251,87,165,237,234,218,185,42,56,253,81,83,243,240,155,171,38,48,159,200,61,59,163,46,188,119,168,42,169,144,94,126,225,219,239,119,166,53,202,248,11,15,76,248,91,255,61,242,187,47,92,219,252,121,98,99,233,145,11,31,184,186,38,61,251,242,137,29,43,119,31,29,88,239,47,237,224,190,92,53,245,207,91,214,116,44,120,56,239,248,103,83,30,238,248,166,35,202,117,228,131,207,59,254,253,216,43,69,205,111,205,234,252,174,238,230,205,77,183,215,117,62,180,224,210,244,93,213,151,118,222,248,77,114,94,179,246,169,78,242,154,214,141,189,217,255,233,124,238,164,111,222,155,207,206,103,190,251,229,149,244,203,2,237,76,255,234,11,158,202,222,127,37,243,118,251,214,212,130,188,125,76,140,225,225,31,223,216,255,11,115,41,120,125,112,227,42,157,229,110,176,241,186,207,30,97,45,111,130,207,206,204,214,222,96,217,8,143,119,212,127,255,186,229,246,99,95,228,220,165,151,89,15,222,250,89,81,221,218,60,235,222,139,31,112,253,113,171,223,170,183,223,80,220,255,240,109,214,211,203,243,91,154,62,122,215,122,115,119,202,143,217,169,106,219,190,103,191,229,11,114,10,109,253,15,103,214,77,42,26,176,53,125,180,187,171,245,234,7,108,198,24,227,71,63,62,245,169,173,96,107,193,161,224,125,83,217,73,129,134,234,55,14,85,179,95,189,248,157,122,99,201,6,246,216,207,186,201,236,180,199,89,166,127,77,219,211,115,190,102,151,170,182,254,244,246,27,218,174,152,215,254,242,215,3,155,154,187,182,174,235,56,122,198,121,121,215,207,15,62,249,245,17,203,179,93,166,27,157,95,92,243,203,15,93,151,20,202,62,91,253,68,170,253,205,242,185,15,92,241,29,99,191,108,214,87,109,127,233,185,218,254,101,210,157,223,204,142,59,96,159,216,167,108,126,99,19,209,253,206,246,151,83,149,95,102,119,199,230,157,202,121,153,117,117,151,22,158,182,220,52,231,150,238,182,183,158,250,229,98,251,91,221,15,149,223,55,104,223,27,237,120,160,122,215,174,143,30,95,238,104,179,188,243,206,212,207,121,199,55,121,175,198,30,129,247,56,222,46,220,217,189,185,225,35,71,76,211,254,252,251,29,147,156,91,93,131,111,76,219,88,230,12,200,91,75,225,103,107,157,202,219,114,210,12,199,31,118,70,95,126,177,137,248,242,152,179,242,196,29,151,236,157,55,199,149,217,148,252,221,181,125,245,174,39,93,122,221,218,198,77,174,123,228,107,79,125,232,124,218,181,208,230,187,240,21,242,91,87,246,82,149,113,205,115,11,220,235,99,174,120,110,213,35,171,220,127,127,209,116,253,19,219,174,114,239,251,121,223,242,127,25,94,116,231,60,254,211,182,185,228,41,247,220,192,13,121,77,26,189,231,203,21,249,47,221,123,119,151,231,159,159,94,245,100,98,195,14,143,255,181,197,217,87,60,242,119,79,204,179,127,120,246,33,141,220,187,149,75,203,154,125,207,98,239,117,246,147,71,234,202,123,188,107,215,253,114,205,231,59,110,247,30,97,254,187,90,67,191,239,77,93,189,251,235,237,159,168,125,189,59,92,11,243,102,20,249,182,111,144,63,170,180,12,250,150,78,72,234,41,90,253,160,239,64,162,231,213,171,119,28,245,173,109,223,63,188,251,185,105,254,131,185,171,95,111,156,94,227,47,216,180,163,240,75,184,209,223,112,207,115,147,231,167,252,205,255,175,237,134,27,124,129,227,254,132,15,192,222,121,119,205,237,105,154,100,214,101,92,213,210,227,106,189,242,212,19,127,189,162,231,211,119,6,63,52,232,159,235,57,124,249,180,196,103,79,255,216,83,255,205,205,55,112,167,211,184,55,127,40,184,69,241,140,133,187,236,187,237,151,189,228,189,134,187,87,247,223,47,47,42,127,149,83,117,12,5,46,175,38,3,175,246,174,124,61,243,19,99,96,93,3,71,63,117,189,59,240,58,255,162,246,175,31,221,18,160,235,6,238,253,180,229,237,192,37,119,52,95,61,243,184,138,159,180,255,135,15,122,130,102,126,234,32,223,248,218,63,130,252,77,215,254,253,139,117,37,247,242,214,51,207,234,31,138,249,152,95,242,76,96,237,7,43,38,7,85,15,212,28,121,243,207,229,65,187,231,42,21,123,199,112,112,143,178,175,250,244,193,71,130,223,188,60,233,147,83,212,23,193,183,79,87,222,183,38,31,246,110,89,182,179,101,118,125,67,111,70,245,254,175,63,179,95,214,251,36,51,232,60,178,247,153,222,201,171,183,220,186,232,221,111,123,219,118,100,108,238,61,152,220,231,223,240,75,90,3,213,209,55,95,255,212,142,73,150,63,246,61,184,230,171,231,174,203,219,223,215,126,211,231,134,229,101,167,251,126,126,86,173,217,255,111,125,255,227,223,54,164,228,221,109,239,191,61,243,158,135,55,253,241,198,126,251,133,229,254,236,161,127,244,19,63,180,31,200,159,161,24,88,159,197,175,157,248,201,146,1,221,206,187,50,42,99,185,129,165,251,175,90,124,243,182,59,6,170,6,251,162,95,52,28,30,240,239,250,67,215,201,157,9,131,91,154,211,134,23,71,21,15,250,238,51,117,254,97,243,69,131,172,123,238,144,49,231,161,193,181,37,169,51,232,139,63,27,188,176,245,71,77,209,63,167,95,244,254,53,121,217,95,30,172,185,232,31,75,47,35,255,73,93,124,81,241,229,139,54,28,41,124,226,162,74,211,47,15,169,92,39,46,234,144,15,222,244,218,197,73,67,63,92,58,181,56,255,206,214,161,255,54,28,116,93,166,220,54,100,90,248,220,190,123,163,159,31,122,241,187,192,227,77,177,63,15,253,244,205,182,174,93,53,25,171,23,95,51,125,143,235,42,235,234,232,165,154,7,229,125,215,174,174,220,146,210,190,127,251,107,171,31,252,241,186,220,83,51,169,53,59,130,96,211,146,163,57,107,168,63,130,123,42,62,240,172,249,100,229,242,242,21,247,220,186,230,61,238,245,153,159,54,188,179,102,219,86,250,232,140,133,177,107,159,120,119,189,183,54,47,127,109,202,182,185,47,127,182,191,119,109,22,191,107,201,156,139,118,173,221,185,255,203,139,191,61,240,241,218,255,119,254,24,5,133,93,60,32,85,171,6,12,0,224,22,2,111,160,148,240,62,2,27,69,36,252,22,129,149,13,9,191,66,96,69,79,194,7,9,124,112,84,194,243,201,209,241,151,145,216,165,35,241,43,255,0,32,128,249,218,59,246,2,21,65,0,243,238,59,247,2,213,101,80,74,228,14,10,159,72,250,221,150,148,40,241,5,182,164,140,31,225,215,194,255,143,255,101,112,193,0,111,205,96,45,122,163,62,215,104,201,206,54,90,217,46,93,102,151,37,71,151,197,100,153,186,178,108,58,163,37,215,100,50,102,154,50,187,244,198,140,179,253,33,98,165,32,157,11,252,222,164,198,115,228,1,166,52,170,145,22,127,90,134,27,84,56,214,132,225,104,249,232,112,1,107,198,60,49,140,22,85,28,104,119,18,215,33,121,205,72,246,178,125,29,110,214,155,114,160,65,141,86,17,206,208,216,235,143,168,117,250,188,208,237,240,56,120,200,246,91,89,214,198,218,130,35,254,26,89,175,13,250,186,96,55,219,15,241,241,103,158,99,28,110,65,11,11,169,106,129,145,87,62,143,135,113,251,188,44,116,179,140,77,120,19,8,114,156,207,206,32,95,34,97,137,32,85,14,186,216,1,232,9,6,120,104,97,97,151,195,235,224,89,152,108,247,241,176,154,169,22,148,224,69,25,105,14,111,87,74,196,114,126,136,50,33,54,239,19,226,50,208,27,244,88,88,78,200,3,109,20,11,132,167,44,105,117,86,159,151,231,124,238,17,186,97,114,123,48,51,51,51,51,77,248,209,21,167,192,46,129,95,176,175,219,225,102,161,159,225,144,145,64,138,45,81,33,158,25,71,62,96,177,34,42,230,29,238,58,70,250,24,7,73,8,23,61,68,127,167,182,51,244,140,202,22,66,14,27,235,229,71,190,75,237,20,184,209,185,186,243,172,87,171,194,94,229,117,22,173,40,62,139,120,148,240,88,1,184,84,99,132,120,161,207,226,100,173,252,88,145,220,142,0,15,25,30,186,29,94,22,66,171,207,29,244,120,33,24,241,144,52,179,5,107,214,243,90,240,138,129,84,114,126,192,207,230,193,212,145,186,3,0,148,182,224,213,3,201,170,50,250,91,111,208,237,30,253,61,223,162,70,30,89,254,223,13,244,200,63,42,234,151,59,90,212,232,20,255,135,4,246,28,36,225,79,68,47,100,18,254,87,68,248,127,8,188,210,45,225,31,196,129,31,90,25,239,2,212,24,57,214,207,177,1,161,122,109,144,9,64,6,150,51,189,76,189,149,115,248,121,177,181,72,188,172,105,85,163,21,45,198,45,76,64,3,16,123,2,96,109,225,171,234,85,255,139,252,72,235,99,2,158,52,139,195,107,179,179,222,48,155,188,180,187,127,87,171,26,116,137,43,142,113,34,13,210,24,43,45,224,226,149,160,200,5,92,216,89,237,243,178,226,2,110,168,173,224,21,102,187,143,115,12,10,195,140,192,123,236,183,0,63,226,222,228,97,61,62,110,224,236,225,168,203,225,102,131,222,64,208,239,247,113,60,107,243,249,89,14,251,187,69,238,155,185,160,159,103,109,146,25,0,183,90,222,231,131,110,223,72,63,22,82,240,50,30,86,120,239,97,188,3,66,155,118,5,172,156,47,16,72,179,177,189,14,43,139,222,8,221,140,67,31,218,88,198,230,246,89,93,120,201,28,173,32,10,105,64,75,48,48,192,177,216,122,141,0,122,139,178,99,56,59,43,160,192,64,128,103,61,104,104,98,66,99,108,128,101,93,2,123,130,94,225,41,148,158,215,7,3,188,143,99,236,44,12,248,25,43,219,199,9,195,226,32,203,249,120,135,135,181,9,195,140,84,4,27,195,51,210,51,114,166,43,244,84,161,72,194,144,204,184,89,232,101,249,62,31,231,194,116,118,51,94,155,59,156,28,183,207,231,23,138,231,240,218,28,28,139,61,31,227,105,32,153,77,183,167,195,192,128,7,113,64,248,46,69,104,131,105,62,175,123,0,134,165,224,227,66,180,122,88,155,35,232,193,9,249,184,1,228,187,9,121,228,115,8,141,60,244,30,187,116,10,193,145,122,235,243,5,221,54,136,172,42,172,151,119,240,3,80,106,247,108,191,35,192,7,44,156,207,197,122,161,223,225,103,165,82,217,124,125,94,113,67,49,118,21,213,203,56,220,2,31,165,151,14,47,12,6,88,33,200,234,243,122,81,251,17,31,132,28,25,11,106,58,82,106,97,254,189,187,125,1,62,28,135,69,18,250,46,63,10,119,5,3,172,205,207,114,200,168,236,243,66,27,235,117,176,54,177,12,66,222,104,82,65,199,104,92,14,175,13,251,6,38,196,191,185,0,0,209,188,130,60,166,73,86,108,97,142,175,112,120,109,43,2,194,52,51,218,155,90,13,0,160,54,204,3,93,157,48,190,36,251,2,184,223,192,80,255,122,112,21,30,87,143,89,70,123,189,10,240,54,212,175,253,140,215,97,117,97,193,230,205,85,120,229,187,134,196,227,89,227,72,215,42,8,6,120,159,7,187,142,30,69,71,61,250,46,172,15,175,16,122,239,138,32,191,162,171,10,245,218,17,167,207,69,190,174,178,145,126,105,22,251,101,165,35,192,55,248,124,149,62,175,93,244,223,92,44,246,201,6,159,175,138,241,14,84,10,61,178,64,232,145,108,160,16,117,201,64,161,216,9,139,66,157,80,136,147,31,12,12,212,137,93,80,120,22,222,9,41,11,253,175,56,212,92,107,133,238,87,36,246,190,106,31,95,47,118,187,122,220,132,139,131,110,119,179,208,217,218,88,206,215,32,244,181,21,65,94,36,172,144,225,25,241,17,251,67,16,186,87,53,110,57,66,6,165,168,111,141,100,85,233,243,249,235,88,198,182,194,235,30,24,121,91,40,53,251,106,31,95,36,244,141,178,128,57,252,221,8,104,22,122,67,190,80,80,51,238,5,69,168,19,228,163,78,80,227,240,75,121,23,250,250,188,102,155,141,19,34,75,173,95,192,101,222,198,0,91,237,227,11,164,118,95,16,106,178,102,220,236,197,4,26,71,90,121,169,47,192,135,193,145,24,117,66,155,15,135,168,201,215,132,154,124,33,106,241,213,62,190,88,104,233,35,93,58,16,180,90,217,64,160,43,232,70,171,244,9,162,117,90,45,254,77,20,113,172,56,159,76,22,219,180,74,124,22,254,226,197,176,137,162,69,217,36,90,114,166,136,223,70,137,59,36,212,226,187,105,226,247,177,226,9,55,161,63,205,16,223,169,69,139,220,100,49,143,68,241,59,149,152,190,121,149,26,100,174,82,131,217,171,212,32,110,149,26,156,110,87,131,47,219,213,224,221,118,53,56,208,174,6,79,183,171,193,221,237,106,112,99,187,26,92,213,254,255,99,237,138,65,171,230,162,240,215,246,111,121,253,251,176,31,109,71,133,128,75,75,125,33,201,107,181,8,14,130,46,214,169,72,193,220,120,239,203,203,187,190,62,136,201,35,201,179,86,43,138,163,29,156,68,92,196,14,46,226,32,184,10,210,161,56,56,185,234,82,186,138,155,131,110,146,151,68,30,206,14,135,36,112,14,225,124,231,222,115,191,3,135,115,137,251,30,177,229,17,215,61,98,221,35,214,60,98,206,35,190,8,226,64,16,175,5,241,66,16,79,5,177,39,136,123,130,232,8,98,93,16,23,4,97,9,226,164,32,22,4,241,203,37,190,185,196,87,151,56,116,137,183,46,241,202,37,158,184,196,35,151,216,118,137,142,91,112,170,10,203,217,82,230,202,239,10,15,150,62,253,95,250,87,61,235,35,49,56,81,250,95,225,93,43,109,103,74,169,240,173,151,250,181,210,166,94,254,115,126,68,183,194,112,178,124,111,182,136,211,45,98,174,69,76,180,136,31,138,56,86,196,103,69,28,42,226,189,34,222,40,98,95,17,207,20,241,88,17,15,21,145,42,162,171,136,77,69,92,82,196,89,69,24,138,88,80,196,180,34,198,20,241,83,18,223,37,113,44,137,79,146,248,32,137,119,146,216,151,196,115,73,236,73,226,129,36,250,146,184,33,137,13,73,64,18,151,37,113,94,18,171,146,88,148,196,149,116,51,231,34,195,105,177,71,237,2,215,42,79,94,245,239,238,24,189,40,205,134,183,12,108,249,169,209,79,244,237,94,60,72,195,29,163,173,243,67,40,238,165,113,164,59,5,239,253,71,157,144,113,20,104,21,232,48,108,216,166,189,246,23,247,178,2,66,230,177,156,40,214,120,162,117,148,37,126,148,25,121,213,4,188,12,10,46,93,233,237,14,167,186,94,60,250,120,128,153,177,107,216,157,238,39,113,103,16,232,36,29,175,133,126,212,29,248,93,61,246,223,198,32,205,80,239,39,113,190,77,117,167,209,222,153,152,28,86,184,167,108,243,156,109,218,198,226,159,74,215,112,44,167,217,176,214,26,86,115,105,106,219,15,147,65,58,101,153,78,211,108,214,71,105,227,188,101,58,166,109,89,198,162,179,98,173,234,192,105,175,44,225,204,108,150,39,226,76,221,212,69,7,194,248,242,236,173,34,121,55,186,97,220,246,195,116,185,150,246,186,81,67,223,201,126,7,0,0,255,255,69,251,74,199]);
diff --git a/metaplex/token-metadata/Cargo.lock b/metaplex/token-metadata/Cargo.lock
index 39c73a5..71d658d 100644
--- a/metaplex/token-metadata/Cargo.lock
+++ b/metaplex/token-metadata/Cargo.lock
@@ -124,6 +124,12 @@ dependencies = [
"tinyvec",
]
+[[package]]
+name = "bumpalo"
+version = "3.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
+
[[package]]
name = "bytes"
version = "1.5.0"
@@ -145,6 +151,16 @@ dependencies = [
"num-traits",
]
+[[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 = "either"
version = "1.9.0"
@@ -240,6 +256,22 @@ dependencies = [
"either",
]
+[[package]]
+name = "itoa"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
+
+[[package]]
+name = "js-sys"
+version = "0.3.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
+dependencies = [
+ "once_cell",
+ "wasm-bindgen",
+]
+
[[package]]
name = "lazy_static"
version = "1.4.0"
@@ -503,6 +535,18 @@ dependencies = [
"windows-sys",
]
+[[package]]
+name = "rustversion"
+version = "1.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
+
+[[package]]
+name = "ryu"
+version = "1.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd"
+
[[package]]
name = "serde"
version = "1.0.192"
@@ -512,6 +556,17 @@ dependencies = [
"serde_derive",
]
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
[[package]]
name = "serde_derive"
version = "1.0.192"
@@ -523,6 +578,17 @@ dependencies = [
"syn 2.0.39",
]
+[[package]]
+name = "serde_json"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0652c533506ad7a2e353cce269330d6afd8bdfb6d75e0ace5b35aacbd7b9e9"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
[[package]]
name = "substreams"
version = "0.5.12"
@@ -596,11 +662,16 @@ dependencies = [
"bs58 0.5.0",
"bytes",
"chrono",
+ "console_error_panic_hook",
"num-bigint",
"prost",
+ "serde",
+ "serde-wasm-bindgen",
+ "serde_json",
"substreams",
"substreams-solana",
"substreams-solana-program-instructions",
+ "wasm-bindgen",
]
[[package]]
@@ -728,6 +799,66 @@ version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "serde",
+ "serde_json",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
+dependencies = [
+ "bumpalo",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+dependencies = [
+ "unicode-ident",
+]
+
[[package]]
name = "which"
version = "4.4.2"
diff --git a/metaplex/token-metadata/Cargo.toml b/metaplex/token-metadata/Cargo.toml
index 2f6f2cb..2de6bdb 100644
--- a/metaplex/token-metadata/Cargo.toml
+++ b/metaplex/token-metadata/Cargo.toml
@@ -4,7 +4,7 @@ version = "1.0.0"
edition = "2021"
[lib]
-name = "substreams"
+name = "metaplex_token_metadata"
crate-type = ["cdylib"]
[dependencies]
@@ -18,6 +18,11 @@ bs58 = "0.5.0"
base64 = "0.21.5"
borsh = { version = "0.10.3"}
chrono = { version = "0.4", features = [ "std" ], default-features = false }
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+wasm-bindgen = { version = "0.2", features = ["serde-serialize"] }
+serde-wasm-bindgen = "0.5"
+console_error_panic_hook = "0.1"
[profile.release]
lto = true
diff --git a/metaplex/token-metadata/Makefile b/metaplex/token-metadata/Makefile
index bee2d04..81310f1 100644
--- a/metaplex/token-metadata/Makefile
+++ b/metaplex/token-metadata/Makefile
@@ -14,4 +14,13 @@ protogen:
.PHONY: package
package:
- substreams pack ./substreams.yaml
\ No newline at end of file
+ substreams pack ./substreams.yaml
+
+.PHONY wasm_pack:
+wasm_pack:
+ wasm-pack build --no-typescript --target no-modules
+
+.PHONY convert_and_gcloud_upload:
+convert_and_gcloud_upload:
+ go build utils/convert.go && mv convert utils/convert
+ utils/script.sh metaplex_token_metadata
\ No newline at end of file
diff --git a/metaplex/token-metadata/index.html b/metaplex/token-metadata/index.html
new file mode 100644
index 0000000..b6da2c0
--- /dev/null
+++ b/metaplex/token-metadata/index.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+ hello-wasm example
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/metaplex/token-metadata/proto/main.proto b/metaplex/token-metadata/proto/main.proto
index ac88098..9131a76 100644
--- a/metaplex/token-metadata/proto/main.proto
+++ b/metaplex/token-metadata/proto/main.proto
@@ -3,12 +3,12 @@ syntax = "proto2";
package sf.solana.block_meta.v1;
message PbApproveUseAuthorityArgsLayout {
- required uint64 numberOfUses = 1;
+ required string numberOfUses = 1;
}
message PbBurnArgsLayout {
required string name = 1;
- required uint64 amount = 2;
+ required string amount = 2;
}
message PbCreatorLayout {
@@ -24,13 +24,14 @@ message PbCollectionLayout {
message PbUsesLayout {
required string useMethod = 1;
- required uint64 remaining = 2;
- required uint64 total = 3;
+ required string remaining = 2;
+ required string total = 3;
}
message PbCollectionDetailsLayout {
required string name = 1;
- required uint64 size = 2;
+ optional string size = 2;
+ repeated uint32 padding = 3;
}
message PbAssetDataLayout {
@@ -50,7 +51,7 @@ message PbAssetDataLayout {
message PbPrintSupplyLayout {
required string name = 1;
- optional uint64 val = 2;
+ optional string val = 2;
}
message PbCreateArgsLayout {
@@ -61,7 +62,7 @@ message PbCreateArgsLayout {
}
message PbCreateMasterEditionArgsLayout {
- optional uint64 maxSupply = 1;
+ optional string maxSupply = 1;
}
message PbDataLayout {
@@ -115,7 +116,7 @@ message PbPayloadTypeLayout {
optional string valPubKey = 2;
optional PbSeedsVecLayout valSeedsVec = 3;
optional PbLeafInfoLayout valLeafInfo = 4;
- optional uint64 valInt64 = 5;
+ optional string valInt64 = 5;
}
message PbMapItemLayout {
@@ -134,7 +135,7 @@ message PbAuthorizationDataLayout {
message PbDelegateArgsLayout {
required string name = 1;
optional PbAuthorizationDataLayout authorization_data = 2;
- optional uint64 amount = 3;
+ optional string amount = 3;
optional string locked_address = 4;
}
@@ -155,16 +156,16 @@ message PbMigrateArgsLayout {
message PbMintArgsLayout {
required string name = 1;
- optional uint64 amount = 2;
+ optional string amount = 2;
optional PbAuthorizationDataLayout authorization_data = 3;
}
message PbMintNewEditionFromMasterEditionViaTokenArgsLayout {
- required uint64 edition = 1;
+ required string edition = 1;
}
message PbMintPrintingTokensViaTokenArgsLayout {
- required uint64 supply = 1;
+ required string supply = 1;
}
message PbRevokeArgsLayout {
@@ -172,30 +173,30 @@ message PbRevokeArgsLayout {
}
message PbSetCollectionSizeArgsLayout {
- required uint64 size = 1;
+ required string size = 1;
}
message PbReservationLayout {
required string address = 1;
- required uint64 spotsRemaining = 2;
- required uint64 totalSpots = 3;
+ required string spotsRemaining = 2;
+ required string totalSpots = 3;
}
message PbSetReservationListArgsLayout {
repeated PbReservationLayout reservations = 1;
- optional uint64 totalReservationSpots = 2;
- required uint64 offset = 3;
- required uint64 totalSpotOffset = 4;
+ optional string totalReservationSpots = 2;
+ required string offset = 3;
+ required string totalSpotOffset = 4;
}
message PbTransferArgsLayout {
required string name = 1;
- optional uint64 amount = 2;
+ optional string amount = 2;
optional PbAuthorizationDataLayout authorization_data = 3;
}
message PbTransferOutOfEscrowArgsLayout {
- required uint64 amount = 1;
+ required string amount = 1;
}
message PbUnlockArgsLayout {
@@ -256,7 +257,7 @@ message PbUseArgsLayout {
}
message PbUtilizeArgsLayout {
- required uint64 numberOfUses = 1;
+ required string numberOfUses = 1;
}
message PbVerificationArgsLayout {
diff --git a/metaplex/token-metadata/src/instructions/structs.rs b/metaplex/token-metadata/src/instructions/structs.rs
index 0ec3de5..e2e67a1 100644
--- a/metaplex/token-metadata/src/instructions/structs.rs
+++ b/metaplex/token-metadata/src/instructions/structs.rs
@@ -57,6 +57,7 @@ pub enum TokenStandardLayout {
Fungible,
NonFungibleEdition,
ProgrammableNonFungible,
+ ProgrammableNonFungibleEdition,
}
impl TokenStandardLayout {
@@ -79,6 +80,9 @@ impl TokenStandardLayout {
TokenStandardLayout::ProgrammableNonFungible => {
result = "ProgrammableNonFungible".to_string();
}
+ TokenStandardLayout::ProgrammableNonFungibleEdition => {
+ result = "ProgrammableNonFungibleEdition".to_string();
+ }
}
return result;
@@ -134,43 +138,45 @@ impl UsesLayout {
pub fn to_proto_struct(&self) -> PbUsesLayout {
PbUsesLayout {
use_method: self.useMethod.to_proto_struct(),
- remaining: self.remaining,
- total: self.total,
+ remaining: self.remaining.to_string(),
+ total: self.total.to_string(),
}
}
}
-#[derive(BorshDeserialize, Debug, Default)]
-pub enum CollectionDetailsLayoutName {
- #[default]
- V1,
+#[derive(BorshDeserialize, Debug)]
+pub enum CollectionDetailsLayout {
+ V1 { size: u64 },
+ V2 { padding: [u8; 8] },
}
-impl CollectionDetailsLayoutName {
- pub fn to_proto_struct(&self) -> String {
- let mut result = "".to_string();
-
- match self {
- CollectionDetailsLayoutName::V1 => {
- result = "V1".to_string();
- }
- }
-
- result
+impl Default for CollectionDetailsLayout {
+ fn default() -> Self {
+ CollectionDetailsLayout::V1 { size: 0 }
}
}
-#[derive(BorshDeserialize, Debug, Default)]
-pub struct CollectionDetailsLayout {
- pub name: CollectionDetailsLayoutName,
- pub size: u64,
-}
-
impl CollectionDetailsLayout {
pub fn to_proto_struct(&self) -> PbCollectionDetailsLayout {
+ let mut name: String = "".to_string();
+ let mut size: Option = None;
+ let mut padding: Vec = vec![];
+
+ match self {
+ CollectionDetailsLayout::V1 { size: _size } => {
+ name = "V1".to_string();
+ size = Some(_size.to_string());
+ }
+ CollectionDetailsLayout::V2 { padding: _padding } => {
+ name = "V2".to_string();
+ padding = _padding.iter().map(|x| *x as u32).collect();
+ }
+ }
+
PbCollectionDetailsLayout {
- name: self.name.to_proto_struct(),
- size: self.size,
+ name: name,
+ size: size,
+ padding: padding.to_vec(),
}
}
}
@@ -311,7 +317,7 @@ impl PayloadTypeLayout {
let mut val_pub_key = None;
let mut val_seeds_vec = None;
let mut val_leaf_info = None;
- let mut val_int64 = None;
+ let mut val_int64: Option = None;
match &self.name {
PayloadTypeLayoutName::Pubkey { val: value } => {
@@ -328,7 +334,7 @@ impl PayloadTypeLayout {
}
PayloadTypeLayoutName::Number { val: value } => {
name = "Number".to_string();
- val_int64 = Some(*value);
+ val_int64 = Some(value.to_string());
}
}
@@ -453,7 +459,7 @@ pub struct PrintSupplyLayout {
impl PrintSupplyLayout {
pub fn to_proto_struct(&self) -> PbPrintSupplyLayout {
let mut name: String = "Zero".to_string();
- let mut val = None;
+ let mut val: Option = None;
match &self.name {
PrintSupplyLayoutName::Zero => {
@@ -461,7 +467,7 @@ impl PrintSupplyLayout {
}
PrintSupplyLayoutName::Limited { val: value } => {
name = "Limited".to_string();
- val = Some(*value);
+ val = Some(value.to_string());
}
PrintSupplyLayoutName::Unlimited => {
name = "Unlimited".to_string();
@@ -674,8 +680,12 @@ pub struct CreateMasterEditionArgsLayout {
impl CreateMasterEditionArgsLayout {
pub fn to_proto_struct(&self) -> PbCreateMasterEditionArgsLayout {
+ let mut max_supply: Option = None;
+ if self.maxSupply.is_some() {
+ max_supply = Some(self.maxSupply.unwrap().to_string());
+ }
PbCreateMasterEditionArgsLayout {
- max_supply: self.maxSupply,
+ max_supply: max_supply,
}
}
}
@@ -691,8 +701,8 @@ impl ReservationLayout {
pub fn to_proto_struct(&self) -> PbReservationLayout {
PbReservationLayout {
address: self.address.to_proto_struct(),
- spots_remaining: self.spotsRemaining,
- total_spots: self.totalSpots,
+ spots_remaining: self.spotsRemaining.to_string(),
+ total_spots: self.totalSpots.to_string(),
}
}
}
@@ -713,12 +723,16 @@ impl SetReservationListArgsLayout {
reservations.push(x.to_proto_struct());
}
}
+ let mut total_reservation_spots: Option = None;
+ if self.totalReservationSpots.is_some() {
+ total_reservation_spots = Some(self.totalReservationSpots.unwrap().to_string());
+ }
PbSetReservationListArgsLayout {
reservations: reservations,
- total_reservation_spots: self.totalReservationSpots,
- offset: self.offset,
- total_spot_offset: self.totalSpotOffset,
+ total_reservation_spots: total_reservation_spots,
+ offset: self.offset.to_string(),
+ total_spot_offset: self.totalSpotOffset.to_string(),
}
}
}
@@ -731,7 +745,7 @@ pub struct MintPrintingTokensViaTokenArgsLayout {
impl MintPrintingTokensViaTokenArgsLayout {
pub fn to_proto_struct(&self) -> PbMintPrintingTokensViaTokenArgsLayout {
PbMintPrintingTokensViaTokenArgsLayout {
- supply: self.supply,
+ supply: self.supply.to_string(),
}
}
}
@@ -744,7 +758,7 @@ pub struct MintNewEditionFromMasterEditionViaTokenArgsLayout {
impl MintNewEditionFromMasterEditionViaTokenArgsLayout {
pub fn to_proto_struct(&self) -> PbMintNewEditionFromMasterEditionViaTokenArgsLayout {
PbMintNewEditionFromMasterEditionViaTokenArgsLayout {
- edition: self.edition,
+ edition: self.edition.to_string(),
}
}
}
@@ -843,7 +857,7 @@ pub struct UtilizeArgsLayout {
impl UtilizeArgsLayout {
pub fn to_proto_struct(&self) -> PbUtilizeArgsLayout {
PbUtilizeArgsLayout {
- number_of_uses: self.numberOfUses,
+ number_of_uses: self.numberOfUses.to_string(),
}
}
}
@@ -856,7 +870,7 @@ pub struct ApproveUseAuthorityArgsLayout {
impl ApproveUseAuthorityArgsLayout {
pub fn to_proto_struct(&self) -> PbApproveUseAuthorityArgsLayout {
PbApproveUseAuthorityArgsLayout {
- number_of_uses: self.numberOfUses,
+ number_of_uses: self.numberOfUses.to_string(),
}
}
}
@@ -890,7 +904,9 @@ pub struct SetCollectionSizeArgsLayout {
impl SetCollectionSizeArgsLayout {
pub fn to_proto_struct(&self) -> PbSetCollectionSizeArgsLayout {
- PbSetCollectionSizeArgsLayout { size: self.size }
+ PbSetCollectionSizeArgsLayout {
+ size: self.size.to_string(),
+ }
}
}
@@ -902,7 +918,7 @@ pub struct TransferOutOfEscrowArgsLayout {
impl TransferOutOfEscrowArgsLayout {
pub fn to_proto_struct(&self) -> PbTransferOutOfEscrowArgsLayout {
PbTransferOutOfEscrowArgsLayout {
- amount: self.amount,
+ amount: self.amount.to_string(),
}
}
}
@@ -937,7 +953,7 @@ impl BurnArgsLayout {
PbBurnArgsLayout {
name: name,
- amount: amount.unwrap(),
+ amount: amount.unwrap_or_default().to_string(),
}
}
}
@@ -996,7 +1012,7 @@ pub struct MintArgsLayout {
impl MintArgsLayout {
pub fn to_proto_struct(&self) -> PbMintArgsLayout {
let mut name = "".to_string();
- let mut amount: Option = None;
+ let mut amount: Option = None;
let mut authorization_data = None;
match &self.name {
@@ -1005,7 +1021,7 @@ impl MintArgsLayout {
authorization_data: auth_data,
} => {
name = "V1".to_string();
- amount = Some(*amt);
+ amount = Some(amt.to_string());
if auth_data.is_some() {
authorization_data = Some(auth_data.as_ref().unwrap().to_proto_struct());
}
@@ -1067,6 +1083,9 @@ pub enum DelegateArgsLayoutName {
ProgrammableConfigItemV1 {
authorization_data: Option,
},
+ PrintDelegateV1 {
+ authorization_data: Option,
+ },
}
impl Default for DelegateArgsLayoutName {
@@ -1086,7 +1105,7 @@ impl DelegateArgsLayout {
pub fn to_proto_struct(&self) -> PbDelegateArgsLayout {
let mut name = "".to_string();
let mut authorization_data = None;
- let mut amount: Option = None;
+ let mut amount: Option