diff --git a/geyser-plugin-runner/.gitignore b/geyser-plugin-runner/.gitignore new file mode 100644 index 00000000..c8cc50d1 --- /dev/null +++ b/geyser-plugin-runner/.gitignore @@ -0,0 +1,2 @@ +/target +.cargo diff --git a/geyser-plugin-runner/.vscode/settings.json b/geyser-plugin-runner/.vscode/settings.json new file mode 100644 index 00000000..5f44014d --- /dev/null +++ b/geyser-plugin-runner/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "rust-analyzer.linkedProjects": ["./demo-plugin/Cargo.toml"] +} diff --git a/geyser-plugin-runner/Cargo.lock b/geyser-plugin-runner/Cargo.lock new file mode 100644 index 00000000..dd8328ae --- /dev/null +++ b/geyser-plugin-runner/Cargo.lock @@ -0,0 +1,7220 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array", +] + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if 1.0.0", + "cipher", + "cpufeatures", + "opaque-debug", +] + +[[package]] +name = "aes-gcm-siv" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589c637f0e68c877bbd59a4599bbe849cac8e5f3e4b5a3ebae8f528cd218dcdc" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "polyval", + "subtle", + "zeroize", +] + +[[package]] +name = "ahash" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +dependencies = [ + "getrandom 0.2.11", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if 1.0.0", + "getrandom 0.2.11", + "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 = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "arc-swap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools", + "num-bigint 0.4.4", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.4", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint 0.4.4", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "ascii" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" + +[[package]] +name = "asn1-rs" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-compression" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc2d0cfb2a7388d34f590e76686704c494ed7aaceed62ee1ba35cbf363abc2a5" +dependencies = [ + "brotli", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "async-mutex" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "async-trait" +version = "0.1.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "autotools" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" +dependencies = [ + "cc", +] + +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding 2.3.1", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[package]] +name = "backoff" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +dependencies = [ + "futures-core", + "getrandom 0.2.11", + "instant", + "pin-project-lite", + "rand 0.8.5", + "tokio", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base-x" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "prettyplease 0.2.15", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.39", +] + +[[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" +dependencies = [ + "serde", +] + +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] +name = "blake3" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if 1.0.0", + "constant_time_eq", + "digest 0.10.7", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "borsh" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +dependencies = [ + "borsh-derive 0.9.3", + "hashbrown 0.11.2", +] + +[[package]] +name = "borsh" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +dependencies = [ + "borsh-derive 0.10.3", + "hashbrown 0.13.2", +] + +[[package]] +name = "borsh" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9897ef0f1bd2362169de6d7e436ea2237dc1085d7d1e4db75f4be34d86f309d1" +dependencies = [ + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +dependencies = [ + "borsh-derive-internal 0.9.3", + "borsh-schema-derive-internal 0.9.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +dependencies = [ + "borsh-derive-internal 0.10.3", + "borsh-schema-derive-internal 0.10.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +dependencies = [ + "proc-macro2", + "quote", + "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.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +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 = "brotli" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[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 = "bstr" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" +dependencies = [ + "feature-probe", + "serde", +] + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "byteorder" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "caps" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" +dependencies = [ + "libc", + "thiserror", +] + +[[package]] +name = "cbor" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e56053652b4b5c0ded5ae6183c7cd547ad2dd6bcce149658bef052a4995533bd" +dependencies = [ + "byteorder 0.5.3", + "rustc-serialize", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "chrono" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.48.5", +] + +[[package]] +name = "chrono-humanize" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799627e6b4d27827a814e837b9d8a504832086081806d45b1afa34dc982b023b" +dependencies = [ + "chrono", +] + +[[package]] +name = "cid" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "472ac98592f38dfd48f188d5713a328422ed22fa39eb52b8bca495370134762a" +dependencies = [ + "core2", + "multibase", + "multihash", + "unsigned-varint 0.8.0", +] + +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + +[[package]] +name = "clang-sys" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap 0.11.0", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +dependencies = [ + "atty", + "bitflags 1.3.2", + "clap_lex", + "indexmap 1.9.3", + "once_cell", + "strsim 0.10.0", + "termcolor", + "textwrap 0.16.0", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "combine" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +dependencies = [ + "ascii", + "byteorder 1.5.0", + "either", + "memchr", + "unreachable", +] + +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.45.0", +] + +[[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 1.0.0", + "wasm-bindgen", +] + +[[package]] +name = "console_log" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f" +dependencies = [ + "log", + "web-sys", +] + +[[package]] +name = "const-oid" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + +[[package]] +name = "core_affinity" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8a03115cc34fb0d7c321dd154a3914b3ca082ccc5c11d91bf7117dbbe7171f" +dependencies = [ + "kernel32-sys", + "libc", + "num_cpus", + "winapi 0.2.8", +] + +[[package]] +name = "cpufeatures" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c3242926edf34aec4ac3a77108ad4854bffaa2e4ddc1824124ce59231302d5" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "crossbeam-utils", + "memoffset 0.9.0", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" +dependencies = [ + "byteorder 1.5.0", + "digest 0.9.0", + "rand_core 0.5.1", + "serde", + "subtle", + "zeroize", +] + +[[package]] +name = "darling" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.39", +] + +[[package]] +name = "darling_macro" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "dashmap" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +dependencies = [ + "cfg-if 1.0.0", + "num_cpus", + "rayon", +] + +[[package]] +name = "data-encoding" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" + +[[package]] +name = "data-encoding-macro" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c01c06f5f429efdf2bae21eb67c28b3df3cf85b7dd2d8ef09c0838dac5d33e" +dependencies = [ + "data-encoding", + "data-encoding-macro-internal", +] + +[[package]] +name = "data-encoding-macro-internal" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0047d07f2c89b17dd631c80450d69841a6b5d7fb17278cbc43d7e4cfcf2576f3" +dependencies = [ + "data-encoding", + "syn 1.0.109", +] + +[[package]] +name = "demo-rust-ipld-car" +version = "0.1.0" +dependencies = [ + "base64 0.21.5", + "bincode", + "borsh 1.2.1", + "bs58 0.5.0", + "byteorder 1.5.0", + "bytes", + "cbor", + "cid", + "crc", + "crossbeam-channel", + "fnv", + "hex", + "integer-encoding", + "multihash", + "prost", + "serde", + "serde_cbor", + "serde_json", + "solana-accounts-db", + "solana-entry", + "solana-geyser-plugin-manager", + "solana-ledger", + "solana-program", + "solana-rpc", + "solana-sdk", + "solana-storage-proto", + "solana-transaction-status", + "zstd 0.13.0", +] + +[[package]] +name = "der" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" +dependencies = [ + "const-oid", +] + +[[package]] +name = "der-parser" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +dependencies = [ + "asn1-rs", + "displaydoc", + "nom", + "num-bigint 0.4.4", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "deranged" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivation-path" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "dialoguer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" +dependencies = [ + "console", + "shell-words", + "tempfile", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", + "subtle", +] + +[[package]] +name = "dir-diff" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2860407d7d7e2e004bb2128510ad9e8d669e76fa005ccf567977b5d71b8b4a0b" +dependencies = [ + "walkdir", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if 1.0.0", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "dlopen2" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi 0.3.9", +] + +[[package]] +name = "dlopen2_derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "eager" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abe71d579d1812060163dff96056261deb5bf6729b100fa2e36a68b9649ba3d3" + +[[package]] +name = "ed25519" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-dalek-bip32" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" +dependencies = [ + "derivation-path", + "ed25519-dalek", + "hmac 0.12.1", + "sha2 0.10.8", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "enum-iterator" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7add3873b5dd076766ee79c8e406ad1a472c385476b9e38849f8eec24f1be689" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "fast-math" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2465292146cdfc2011350fe3b1c616ac83cf0faeedb33463ba1c332ed8948d66" +dependencies = [ + "ieee754", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "feature-probe" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding 2.3.1", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "futures" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" + +[[package]] +name = "futures" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-executor" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-macro" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures 0.1.31", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "serde", + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "goauth" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8af59a261bcf42f45d1b261232847b9b850ba0a1419d6100698246fb66e9240" +dependencies = [ + "arc-swap", + "futures 0.3.29", + "log", + "reqwest", + "serde", + "serde_derive", + "serde_json", + "simpl", + "smpl_jwt", + "time", + "tokio", +] + +[[package]] +name = "goblin" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7666983ed0dd8d21a6f6576ee00053ca0926fb281a5522577a4dbd0f1b54143" +dependencies = [ + "log", + "plain", + "scroll", +] + +[[package]] +name = "h2" +version = "0.3.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 2.1.0", + "slab", + "tokio", + "tokio-util 0.7.10", + "tracing", +] + +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder 1.5.0", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.7", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.7", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.6", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "headers" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +dependencies = [ + "base64 0.21.5", + "bytes", + "headers-core", + "http", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "histogram" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cb882ccb290b8646e554b157ab0b71e64e8d5bef775cd66b6531e52d302669" + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", +] + +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-proxy" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca815a891b24fdfb243fa3239c86154392b0953ee584aa1a2a1f66d20cbe75cc" +dependencies = [ + "bytes", + "futures 0.3.29", + "headers", + "http", + "hyper", + "hyper-tls", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ieee754" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9007da9cacbd3e6343da136e98b0d2df013f553d35bdec8b518f07bea768e19c" + +[[package]] +name = "im" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "rayon", + "serde", + "sized-chunks", + "typenum", + "version_check", +] + +[[package]] +name = "index_list" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70891286cb8e844fdfcf1178b47569699f9e20b5ecc4b45a6240a64771444638" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", + "rayon", +] + +[[package]] +name = "indicatif" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "integer-encoding" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924df4f0e24e2e7f9cdd90babb0b96f93b20f3ecfa949ea9e6613756b8c8e1bf" + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[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.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + +[[package]] +name = "jsonrpc-client-transports" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b99d4207e2a04fb4581746903c2bb7eb376f88de9c699d0f3e10feeac0cd3a" +dependencies = [ + "derive_more", + "futures 0.3.29", + "jsonrpc-core", + "jsonrpc-pubsub", + "log", + "serde", + "serde_json", + "url 1.7.2", +] + +[[package]] +name = "jsonrpc-core" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f7f76aef2d054868398427f6c54943cf3d1caa9a7ec7d0c38d69df97a965eb" +dependencies = [ + "futures 0.3.29", + "futures-executor", + "futures-util", + "log", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "jsonrpc-core-client" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b51da17abecbdab3e3d4f26b01c5ec075e88d3abe3ab3b05dc9aa69392764ec0" +dependencies = [ + "futures 0.3.29", + "jsonrpc-client-transports", +] + +[[package]] +name = "jsonrpc-derive" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b939a78fa820cdfcb7ee7484466746a7377760970f6f9c6fe19f9edcc8a38d2" +dependencies = [ + "proc-macro-crate 0.1.5", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "jsonrpc-http-server" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1dea6e07251d9ce6a552abfb5d7ad6bc290a4596c8dcc3d795fae2bbdc1f3ff" +dependencies = [ + "futures 0.3.29", + "hyper", + "jsonrpc-core", + "jsonrpc-server-utils", + "log", + "net2", + "parking_lot 0.11.2", + "unicase", +] + +[[package]] +name = "jsonrpc-pubsub" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240f87695e6c6f62fb37f05c02c04953cf68d6408b8c1c89de85c7a0125b1011" +dependencies = [ + "futures 0.3.29", + "jsonrpc-core", + "lazy_static", + "log", + "parking_lot 0.11.2", + "rand 0.7.3", + "serde", +] + +[[package]] +name = "jsonrpc-server-utils" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4fdea130485b572c39a460d50888beb00afb3e35de23ccd7fad8ff19f0e0d4" +dependencies = [ + "bytes", + "futures 0.3.29", + "globset", + "jsonrpc-core", + "lazy_static", + "log", + "tokio", + "tokio-stream", + "tokio-util 0.6.10", + "unicase", +] + +[[package]] +name = "keccak" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if 1.0.0", + "winapi 0.3.9", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "librocksdb-sys" +version = "0.11.0+8.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" +dependencies = [ + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "lz4-sys", +] + +[[package]] +name = "libsecp256k1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" +dependencies = [ + "arrayref", + "base64 0.12.3", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libz-sys" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "light-poseidon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" +dependencies = [ + "ark-bn254", + "ark-ff", + "num-bigint 0.4.4", + "thiserror", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "lru" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "lz4" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" +dependencies = [ + "libc", + "lz4-sys", +] + +[[package]] +name = "lz4-sys" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder 1.5.0", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + +[[package]] +name = "modular-bitfield" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a53d79ba8304ac1c4f9eb3b9d281f21f7be9d4626f72ce7df4ad8fbde4f38a74" +dependencies = [ + "modular-bitfield-impl", + "static_assertions", +] + +[[package]] +name = "modular-bitfield-impl" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "multibase" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" +dependencies = [ + "base-x", + "data-encoding", + "data-encoding-macro", +] + +[[package]] +name = "multihash" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "076d548d76a0e2a0d4ab471d0b1c36c577786dfc4471242035d97a12a735c492" +dependencies = [ + "core2", + "unsigned-varint 0.7.2", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "net2" +version = "0.2.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b13b648036a2339d06de780866fbdfda0dde886de7b3af2ddeba8b14f4ee34ac" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if 1.0.0", + "libc", + "memoffset 0.7.1", + "pin-utils", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" +dependencies = [ + "num-bigint 0.2.6", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[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-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[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-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" +dependencies = [ + "autocfg", + "num-bigint 0.2.6", + "num-integer", + "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_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.3", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive 0.6.1", +] + +[[package]] +name = "num_enum" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683751d591e6d81200c39fb0d1032608b77724f34114db54f571ff1317b337c0" +dependencies = [ + "num_enum_derive 0.7.1", +] + +[[package]] +name = "num_enum_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[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 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +dependencies = [ + "asn1-rs", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl" +version = "0.10.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b8419dc8cc6d866deb801274bba2e6f8f6108c1bb7fcc10ee5ab864931dbb45" +dependencies = [ + "bitflags 2.4.1", + "cfg-if 1.0.0", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-src" +version = "300.2.1+3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fe476c29791a5ca0d1273c697e96085bbabbbea2ef7afd5617e78a4b40332d3" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3eaad34cdd97d81de97964fc7f29e2d104f483840d906ef56daa1912338460b" +dependencies = [ + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "os_str_bytes" +version = "6.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" + +[[package]] +name = "ouroboros" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1358bd1558bd2a083fed428ffeda486fbfb323e698cdda7794259d592ca72db" +dependencies = [ + "aliasable", + "ouroboros_macro", +] + +[[package]] +name = "ouroboros_macro" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7" +dependencies = [ + "Inflector", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.9", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi 0.3.9", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall 0.4.1", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "percentage" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd23b938276f14057220b707937bcb42fa76dda7560e57a2da30cb52d557937" +dependencies = [ + "num", +] + +[[package]] +name = "pest" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "pest_meta" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.8", +] + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.1.0", +] + +[[package]] +name = "pin-project" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" +dependencies = [ + "der", + "spki", + "zeroize", +] + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettyplease" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "prettyplease" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +dependencies = [ + "proc-macro2", + "syn 2.0.39", +] + +[[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 = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +dependencies = [ + "bytes", + "heck", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease 0.1.25", + "prost", + "prost-types", + "regex", + "syn 1.0.109", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf-src" +version = "1.1.0+21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7ac8852baeb3cc6fb83b93646fb93c0ffe5d14bf138c945ceb4b9948ee0e3c1" +dependencies = [ + "autotools", +] + +[[package]] +name = "qstring" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding 2.3.1", +] + +[[package]] +name = "qualifier_attr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "quinn" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" +dependencies = [ + "bytes", + "rand 0.8.5", + "ring 0.16.20", + "rustc-hash", + "rustls", + "rustls-native-certs", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" +dependencies = [ + "bytes", + "libc", + "socket2 0.5.5", + "tracing", + "windows-sys 0.48.0", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.11", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rcgen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +dependencies = [ + "pem", + "ring 0.16.20", + "time", + "yasna", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[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 = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom 0.2.11", + "libredox", + "thiserror", +] + +[[package]] +name = "reed-solomon-erasure" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7263373d500d4d4f505d43a2a662d475a894aa94503a1ee28e9188b5f3960d4f" +dependencies = [ + "cc", + "libc", + "libm", + "lru", + "parking_lot 0.11.2", + "smallvec", + "spin 0.9.8", +] + +[[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 = "reqwest" +version = "0.11.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" +dependencies = [ + "async-compression", + "base64 0.21.5", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding 2.3.1", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tokio-util 0.7.10", + "tower-service", + "url 2.5.0", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 0.25.3", + "winreg", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "ring" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +dependencies = [ + "cc", + "getrandom 0.2.11", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.48.0", +] + +[[package]] +name = "rocksdb" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rpassword" +version = "7.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" +dependencies = [ + "libc", + "rtoolbox", + "windows-sys 0.48.0", +] + +[[package]] +name = "rtoolbox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-serialize" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe834bc780604f4674073badbad26d7219cadfb4a2275802db12cbae17498401" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + +[[package]] +name = "rustix" +version = "0.38.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "log", + "ring 0.17.7", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.5", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.7", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scroll" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.7", + "untrusted 0.9.0", +] + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + +[[package]] +name = "serde" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_cbor" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +dependencies = [ + "half", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[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 = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" +dependencies = [ + "serde", + "serde_with_macros", +] + +[[package]] +name = "serde_with_macros" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "serde_yaml" +version = "0.9.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c" +dependencies = [ + "indexmap 2.1.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "keccak", + "opaque-debug", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" + +[[package]] +name = "simpl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a30f10c911c0355f80f1c2faa8096efc4a58cdf8590b954d5b395efa071c711" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" + +[[package]] +name = "smpl_jwt" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b6ff8c21c74ce7744643a7cddbb02579a44f1f77e4316bff1ddb741aca8ac9" +dependencies = [ + "base64 0.13.1", + "log", + "openssl", + "serde", + "serde_derive", + "serde_json", + "simpl", + "time", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "soketto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +dependencies = [ + "base64 0.13.1", + "bytes", + "futures 0.3.29", + "httparse", + "log", + "rand 0.8.5", + "sha-1", +] + +[[package]] +name = "solana-account-decoder" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dfb3f9d8fd0e48700e30b968c166ce29861a2f3d7cdb827e20279307284bcaf" +dependencies = [ + "Inflector", + "base64 0.21.5", + "bincode", + "bs58 0.4.0", + "bv", + "lazy_static", + "serde", + "serde_derive", + "serde_json", + "solana-config-program", + "solana-sdk", + "spl-token", + "spl-token-2022", + "spl-token-metadata-interface", + "thiserror", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "solana-accounts-db" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9b1f9a58870fd8c01b056f7fa950fe3d8151f8c36c1ef4edb28a70b445f0c5" +dependencies = [ + "arrayref", + "bincode", + "blake3", + "bv", + "bytemuck", + "byteorder 1.5.0", + "bzip2", + "crossbeam-channel", + "dashmap", + "flate2", + "fnv", + "fs-err", + "im", + "index_list", + "itertools", + "lazy_static", + "log", + "lz4", + "memmap2", + "modular-bitfield", + "num-derive 0.3.3", + "num-traits", + "num_cpus", + "num_enum 0.6.1", + "ouroboros", + "percentage", + "qualifier_attr", + "rand 0.8.5", + "rayon", + "regex", + "rustc_version", + "serde", + "serde_derive", + "solana-bucket-map", + "solana-config-program", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-measure", + "solana-metrics", + "solana-program-runtime", + "solana-rayon-threadlimit", + "solana-sdk", + "solana-stake-program", + "solana-system-program", + "solana-vote-program", + "static_assertions", + "strum", + "strum_macros", + "tar", + "tempfile", + "thiserror", +] + +[[package]] +name = "solana-address-lookup-table-program" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bacd09260bedf17807a21f4056fd8e2ce1ce4c764b7e0d88444fa7facddcd92" +dependencies = [ + "bincode", + "bytemuck", + "log", + "num-derive 0.3.3", + "num-traits", + "rustc_version", + "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-program", + "solana-program-runtime", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-bloom" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e74438fd5d2641a0d87064298efe30d40692930e289225e4e7f5e1d1b0eeeb1" +dependencies = [ + "bv", + "fnv", + "log", + "rand 0.8.5", + "rayon", + "rustc_version", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk", +] + +[[package]] +name = "solana-bpf-loader-program" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79c6f479f8b103c173d5dbaebe65842d3870e27af092e8fcc956002d3b1bd368" +dependencies = [ + "bincode", + "byteorder 1.5.0", + "libsecp256k1", + "log", + "scopeguard", + "solana-measure", + "solana-program-runtime", + "solana-sdk", + "solana-zk-token-sdk", + "solana_rbpf", + "thiserror", +] + +[[package]] +name = "solana-bucket-map" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f28e4c2f6a37e52e62fa313d2a5d21610c0ebf1d274b5d2b978ce697867eef9" +dependencies = [ + "bv", + "bytemuck", + "log", + "memmap2", + "modular-bitfield", + "num_enum 0.6.1", + "rand 0.8.5", + "solana-measure", + "solana-sdk", + "tempfile", +] + +[[package]] +name = "solana-clap-utils" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de071e128d5117f1910db065cdba0e2e62e90b81049d33385af31b12123a828a" +dependencies = [ + "chrono", + "clap 2.34.0", + "rpassword", + "solana-remote-wallet", + "solana-sdk", + "thiserror", + "tiny-bip39", + "uriparse", + "url 2.5.0", +] + +[[package]] +name = "solana-cli-config" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f376a41d4f05645ca006b25fcf6f913e111cb1132615f2ab8505aa58734fa938" +dependencies = [ + "dirs-next", + "lazy_static", + "serde", + "serde_derive", + "serde_yaml", + "solana-clap-utils", + "solana-sdk", + "url 2.5.0", +] + +[[package]] +name = "solana-client" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c0df9db1894912f31bc7283b8a34409fa9ed781ce7bee017ec452ab1bb16af0" +dependencies = [ + "async-trait", + "bincode", + "dashmap", + "futures 0.3.29", + "futures-util", + "indexmap 2.1.0", + "indicatif", + "log", + "quinn", + "rayon", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-pubsub-client", + "solana-quic-client", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-rpc-client-nonce-utils", + "solana-sdk", + "solana-streamer", + "solana-thin-client", + "solana-tpu-client", + "solana-udp-client", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-compute-budget-program" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8a90bb70e06f6f27f58bbf404a786011e60d3a24467131520facc600347cc5" +dependencies = [ + "solana-program-runtime", + "solana-sdk", +] + +[[package]] +name = "solana-config-program" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523254e042bb14e04ff64d2689568b3c65a076ce974ba2b493a58dce73250ab2" +dependencies = [ + "bincode", + "chrono", + "serde", + "serde_derive", + "solana-program-runtime", + "solana-sdk", +] + +[[package]] +name = "solana-connection-cache" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f2dbe09fec7507e30e90409a0a209b8132c00158b53c21f30680804209c3cbc" +dependencies = [ + "async-trait", + "bincode", + "crossbeam-channel", + "futures-util", + "indexmap 2.1.0", + "log", + "rand 0.8.5", + "rayon", + "rcgen", + "solana-measure", + "solana-metrics", + "solana-sdk", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-cost-model" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8357bb2de4c4a3977111cb5eb894a5d8ad0e95bef98338f61360bd5556ddfde" +dependencies = [ + "lazy_static", + "log", + "rustc_version", + "solana-address-lookup-table-program", + "solana-bpf-loader-program", + "solana-compute-budget-program", + "solana-config-program", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-loader-v4-program", + "solana-metrics", + "solana-program-runtime", + "solana-sdk", + "solana-stake-program", + "solana-system-program", + "solana-vote-program", +] + +[[package]] +name = "solana-entry" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a48790f29998b6d106d524ebeb60853bde6fa284b58fd54dff1e7d8ef654d24b" +dependencies = [ + "bincode", + "crossbeam-channel", + "dlopen2", + "lazy_static", + "log", + "rand 0.8.5", + "rayon", + "serde", + "solana-measure", + "solana-merkle-tree", + "solana-metrics", + "solana-perf", + "solana-rayon-threadlimit", + "solana-sdk", +] + +[[package]] +name = "solana-faucet" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbc9172d25e5fe97155a48a532b232b758ddf25d822b3f11362a091992fbb29" +dependencies = [ + "bincode", + "byteorder 1.5.0", + "clap 2.34.0", + "crossbeam-channel", + "log", + "serde", + "serde_derive", + "solana-clap-utils", + "solana-cli-config", + "solana-logger", + "solana-metrics", + "solana-sdk", + "solana-version", + "spl-memo", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-frozen-abi" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13254cef276fed902b40c355ea08dcb7a7b8b02fb5ee6585255c3bfcf6b075d4" +dependencies = [ + "ahash 0.8.6", + "blake3", + "block-buffer 0.10.4", + "bs58 0.4.0", + "bv", + "byteorder 1.5.0", + "cc", + "either", + "generic-array", + "im", + "lazy_static", + "log", + "memmap2", + "rustc_version", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "sha2 0.10.8", + "solana-frozen-abi-macro", + "subtle", + "thiserror", +] + +[[package]] +name = "solana-frozen-abi-macro" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "014b1a6df0cfd712fbe71a244bf9b46eb513b85569b7abb156cf8c0bf62d33d9" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.39", +] + +[[package]] +name = "solana-geyser-plugin-interface" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b178c50176c3d9edf527ac396bd3b111fd81ebb1ac62ec3bbdddb042b34778" +dependencies = [ + "log", + "solana-sdk", + "solana-transaction-status", + "thiserror", +] + +[[package]] +name = "solana-geyser-plugin-manager" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabe9fc31b60ef343f2e89bb9d5118132a72b2be53faeb002975807a98ade3bd" +dependencies = [ + "bs58 0.4.0", + "crossbeam-channel", + "json5", + "jsonrpc-core", + "jsonrpc-server-utils", + "libloading", + "log", + "serde_json", + "solana-accounts-db", + "solana-entry", + "solana-geyser-plugin-interface", + "solana-ledger", + "solana-measure", + "solana-metrics", + "solana-rpc", + "solana-runtime", + "solana-sdk", + "solana-transaction-status", + "thiserror", +] + +[[package]] +name = "solana-gossip" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501f090c47748c0c252e48e38573a98e2b44f4a27bafee53ace8d143b8a0274" +dependencies = [ + "assert_matches", + "bincode", + "bv", + "clap 2.34.0", + "crossbeam-channel", + "flate2", + "indexmap 2.1.0", + "itertools", + "log", + "lru", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "solana-bloom", + "solana-clap-utils", + "solana-client", + "solana-entry", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-ledger", + "solana-logger", + "solana-measure", + "solana-metrics", + "solana-net-utils", + "solana-perf", + "solana-rayon-threadlimit", + "solana-runtime", + "solana-sdk", + "solana-streamer", + "solana-thin-client", + "solana-tpu-client", + "solana-version", + "solana-vote", + "solana-vote-program", + "static_assertions", + "thiserror", +] + +[[package]] +name = "solana-ledger" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "febb7598ec8003fe39b05a7473b7f034778532d1ab6acba7bedcd42d630c6320" +dependencies = [ + "assert_matches", + "bincode", + "bitflags 2.4.1", + "byteorder 1.5.0", + "chrono", + "chrono-humanize", + "crossbeam-channel", + "dashmap", + "fs_extra", + "futures 0.3.29", + "itertools", + "lazy_static", + "libc", + "log", + "lru", + "num_cpus", + "num_enum 0.6.1", + "prost", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "reed-solomon-erasure", + "rocksdb", + "rustc_version", + "scopeguard", + "serde", + "serde_bytes", + "sha2 0.10.8", + "solana-account-decoder", + "solana-accounts-db", + "solana-bpf-loader-program", + "solana-cost-model", + "solana-entry", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-measure", + "solana-metrics", + "solana-perf", + "solana-program-runtime", + "solana-rayon-threadlimit", + "solana-runtime", + "solana-sdk", + "solana-stake-program", + "solana-storage-bigtable", + "solana-storage-proto", + "solana-transaction-status", + "solana-vote", + "solana-vote-program", + "spl-token", + "spl-token-2022", + "static_assertions", + "strum", + "strum_macros", + "tempfile", + "thiserror", + "tokio", + "tokio-stream", + "trees", +] + +[[package]] +name = "solana-loader-v4-program" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d560b493c43c117b82c9b74e2c1af1042c10c20f08d57b7afcfc7cc2d50316" +dependencies = [ + "log", + "solana-measure", + "solana-program-runtime", + "solana-sdk", + "solana_rbpf", +] + +[[package]] +name = "solana-logger" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff989403134b2d4370efe7f22b6d1ebc68ce36cabcdbd71aa580f25cb646940" +dependencies = [ + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "solana-measure" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1bd01cdb6732954879f4b6ccd2b584f76cd236727f65a75c435d59e8a6a5550" +dependencies = [ + "log", + "solana-sdk", +] + +[[package]] +name = "solana-merkle-tree" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee3f7e938255eef223ee7fdd11475f5477756e057aef47ee6de1fac8fea345e" +dependencies = [ + "fast-math", + "solana-program", +] + +[[package]] +name = "solana-metrics" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1463ae104c95dfce7ef00a7695c3862d0b13c2b9b843cbf12d7f75aa2f7d2060" +dependencies = [ + "crossbeam-channel", + "gethostname", + "lazy_static", + "log", + "reqwest", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-net-utils" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33fafc429f86ae85651b863c952cdd4d5696d79d196b1a11dffb4812a3d84bf" +dependencies = [ + "bincode", + "clap 3.2.25", + "crossbeam-channel", + "log", + "nix", + "rand 0.8.5", + "serde", + "serde_derive", + "socket2 0.5.5", + "solana-logger", + "solana-sdk", + "solana-version", + "tokio", + "url 2.5.0", +] + +[[package]] +name = "solana-perf" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9ae29a08ac17c4fc109ead4f9a46e731c22039d59091794f7e2e3c3f4966d3" +dependencies = [ + "ahash 0.8.6", + "bincode", + "bv", + "caps", + "curve25519-dalek", + "dlopen2", + "fnv", + "lazy_static", + "libc", + "log", + "nix", + "rand 0.8.5", + "rayon", + "rustc_version", + "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-metrics", + "solana-rayon-threadlimit", + "solana-sdk", + "solana-vote-program", +] + +[[package]] +name = "solana-poh" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8b9c9cacc8c10d41f55630380916174b69f73306b45bd02c9e0d59dc7569d9f" +dependencies = [ + "core_affinity", + "crossbeam-channel", + "log", + "solana-entry", + "solana-ledger", + "solana-measure", + "solana-metrics", + "solana-runtime", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-program" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c40a96d667a1b535d1ab952a0c5419b2243bb9bdf07e1517e03bc0e906f9517" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "base64 0.21.5", + "bincode", + "bitflags 2.4.1", + "blake3", + "borsh 0.10.3", + "borsh 0.9.3", + "bs58 0.4.0", + "bv", + "bytemuck", + "cc", + "console_error_panic_hook", + "console_log", + "curve25519-dalek", + "getrandom 0.2.11", + "itertools", + "js-sys", + "lazy_static", + "libc", + "libsecp256k1", + "light-poseidon", + "log", + "memoffset 0.9.0", + "num-bigint 0.4.4", + "num-derive 0.3.3", + "num-traits", + "parking_lot 0.12.1", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk-macro", + "thiserror", + "tiny-bip39", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "solana-program-runtime" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "160b0f515c668994492b001384d0ad9fea1db17a3ffbdbd2e8876223815f7994" +dependencies = [ + "base64 0.21.5", + "bincode", + "eager", + "enum-iterator", + "itertools", + "libc", + "log", + "num-derive 0.3.3", + "num-traits", + "percentage", + "rand 0.8.5", + "rustc_version", + "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-measure", + "solana-metrics", + "solana-sdk", + "solana_rbpf", + "thiserror", +] + +[[package]] +name = "solana-pubsub-client" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae49d815c04ac70bb69d7e5814ffbac2317655e287cea1a6f7693e2ca4f03c25" +dependencies = [ + "crossbeam-channel", + "futures-util", + "log", + "reqwest", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-rpc-client-api", + "solana-sdk", + "thiserror", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tungstenite", + "url 2.5.0", +] + +[[package]] +name = "solana-quic-client" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747c0517af60235334290eda1729cca02439b4424562e29e8d34a8e35f05b051" +dependencies = [ + "async-mutex", + "async-trait", + "futures 0.3.29", + "itertools", + "lazy_static", + "log", + "quinn", + "quinn-proto", + "rcgen", + "rustls", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-net-utils", + "solana-rpc-client-api", + "solana-sdk", + "solana-streamer", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-rayon-threadlimit" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60dbbad06f9217a4d97a7a770605427cc4f831a0898eb495e8e3c76c77aa8dee" +dependencies = [ + "lazy_static", + "num_cpus", +] + +[[package]] +name = "solana-remote-wallet" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bad36a91d36dd90ddb417aac0875625f9b0604244f0620214d54b0dca335e51" +dependencies = [ + "console", + "dialoguer", + "log", + "num-derive 0.3.3", + "num-traits", + "parking_lot 0.12.1", + "qstring", + "semver", + "solana-sdk", + "thiserror", + "uriparse", +] + +[[package]] +name = "solana-rpc" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ad9d6b1bd9ededfd93fd079ec21b3ae40467025efd2ac5aaba2a12b4a2673a" +dependencies = [ + "base64 0.21.5", + "bincode", + "bs58 0.4.0", + "crossbeam-channel", + "dashmap", + "itertools", + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "jsonrpc-http-server", + "jsonrpc-pubsub", + "libc", + "log", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "soketto", + "solana-account-decoder", + "solana-accounts-db", + "solana-client", + "solana-entry", + "solana-faucet", + "solana-gossip", + "solana-ledger", + "solana-measure", + "solana-metrics", + "solana-perf", + "solana-poh", + "solana-rayon-threadlimit", + "solana-rpc-client-api", + "solana-runtime", + "solana-sdk", + "solana-send-transaction-service", + "solana-stake-program", + "solana-storage-bigtable", + "solana-streamer", + "solana-tpu-client", + "solana-transaction-status", + "solana-version", + "solana-vote", + "solana-vote-program", + "spl-token", + "spl-token-2022", + "stream-cancel", + "thiserror", + "tokio", + "tokio-util 0.6.10", +] + +[[package]] +name = "solana-rpc-client" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc4c4ae512d462aac5e1b2f8b35520c596046464dfb1d99a5a84d7353e28734f" +dependencies = [ + "async-trait", + "base64 0.21.5", + "bincode", + "bs58 0.4.0", + "indicatif", + "log", + "reqwest", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-rpc-client-api", + "solana-sdk", + "solana-transaction-status", + "solana-version", + "solana-vote-program", + "tokio", +] + +[[package]] +name = "solana-rpc-client-api" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3f88c5eeb31f5d673c317fef8504213a63f39249f5e23d9a06aad400faa234e" +dependencies = [ + "base64 0.21.5", + "bs58 0.4.0", + "jsonrpc-core", + "reqwest", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-sdk", + "solana-transaction-status", + "solana-version", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "solana-rpc-client-nonce-utils" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d529f8d1770108fefdcff2b488a538b2a1d4e6e50cec00f7a59d24ffd8027475" +dependencies = [ + "clap 2.34.0", + "solana-clap-utils", + "solana-rpc-client", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-runtime" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "592ac66c8972895b4768c4c89c288cf0933312347dcd1e05752bdba9285c7239" +dependencies = [ + "arrayref", + "base64 0.21.5", + "bincode", + "blake3", + "bv", + "bytemuck", + "byteorder 1.5.0", + "bzip2", + "crossbeam-channel", + "dashmap", + "dir-diff", + "flate2", + "fnv", + "fs-err", + "im", + "index_list", + "itertools", + "lazy_static", + "log", + "lru", + "lz4", + "memmap2", + "modular-bitfield", + "num-derive 0.3.3", + "num-traits", + "num_cpus", + "num_enum 0.6.1", + "ouroboros", + "percentage", + "qualifier_attr", + "rand 0.8.5", + "rayon", + "regex", + "rustc_version", + "serde", + "serde_derive", + "serde_json", + "siphasher", + "solana-accounts-db", + "solana-address-lookup-table-program", + "solana-bpf-loader-program", + "solana-bucket-map", + "solana-compute-budget-program", + "solana-config-program", + "solana-cost-model", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-loader-v4-program", + "solana-measure", + "solana-metrics", + "solana-perf", + "solana-program-runtime", + "solana-rayon-threadlimit", + "solana-sdk", + "solana-stake-program", + "solana-system-program", + "solana-version", + "solana-vote", + "solana-vote-program", + "solana-zk-token-proof-program", + "solana-zk-token-sdk", + "static_assertions", + "strum", + "strum_macros", + "symlink", + "tar", + "tempfile", + "thiserror", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "solana-sdk" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36a6cb8dad48a10d3948cc474d132070f72a8ee794e92aa8beef8c1d1f270df6" +dependencies = [ + "assert_matches", + "base64 0.21.5", + "bincode", + "bitflags 2.4.1", + "borsh 0.10.3", + "bs58 0.4.0", + "bytemuck", + "byteorder 1.5.0", + "chrono", + "derivation-path", + "digest 0.10.7", + "ed25519-dalek", + "ed25519-dalek-bip32", + "generic-array", + "hmac 0.12.1", + "itertools", + "js-sys", + "lazy_static", + "libsecp256k1", + "log", + "memmap2", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.6.1", + "pbkdf2 0.11.0", + "qstring", + "qualifier_attr", + "rand 0.7.3", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "serde_with", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-logger", + "solana-program", + "solana-sdk-macro", + "thiserror", + "uriparse", + "wasm-bindgen", +] + +[[package]] +name = "solana-sdk-macro" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac96537196d5d8d30ca242b44ddb3faed1a81b5e43375774ac8c9ea633bec647" +dependencies = [ + "bs58 0.4.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.39", +] + +[[package]] +name = "solana-send-transaction-service" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9dde93f3399c85536c2096b95e7132c37adaedb163dbb8f987f87c59c42d654" +dependencies = [ + "crossbeam-channel", + "log", + "solana-client", + "solana-measure", + "solana-metrics", + "solana-runtime", + "solana-sdk", + "solana-tpu-client", +] + +[[package]] +name = "solana-stake-program" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b60bfecab165cc25682cf106fa9c3c61ad00e862a20dc9c883a06ef725389a" +dependencies = [ + "bincode", + "log", + "rustc_version", + "solana-config-program", + "solana-program-runtime", + "solana-sdk", + "solana-vote-program", +] + +[[package]] +name = "solana-storage-bigtable" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ac23bcf62d3026f5a792db07f7069d4d73b57ce15c1f661c901485dd3653c7" +dependencies = [ + "backoff", + "bincode", + "bytes", + "bzip2", + "enum-iterator", + "flate2", + "futures 0.3.29", + "goauth", + "http", + "hyper", + "hyper-proxy", + "log", + "openssl", + "prost", + "prost-types", + "serde", + "serde_derive", + "smpl_jwt", + "solana-metrics", + "solana-sdk", + "solana-storage-proto", + "solana-transaction-status", + "thiserror", + "tokio", + "tonic", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "solana-storage-proto" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ce03f4fbc21c000deffabb3b01754639f1a6a5b6ade9b20463b206a55ceb57d" +dependencies = [ + "bincode", + "bs58 0.4.0", + "prost", + "protobuf-src", + "serde", + "solana-account-decoder", + "solana-sdk", + "solana-transaction-status", + "tonic-build", +] + +[[package]] +name = "solana-streamer" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c37dc4175375dd81229085fd24a2eca3d63e8d6f43cdbc64da19f4636b2151" +dependencies = [ + "async-channel", + "bytes", + "crossbeam-channel", + "futures-util", + "histogram", + "indexmap 2.1.0", + "itertools", + "libc", + "log", + "nix", + "pem", + "percentage", + "pkcs8", + "quinn", + "quinn-proto", + "rand 0.8.5", + "rcgen", + "rustls", + "solana-metrics", + "solana-perf", + "solana-sdk", + "thiserror", + "tokio", + "x509-parser", +] + +[[package]] +name = "solana-system-program" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a5413757317247a3f72ef5ba636da0d554001738aa3409808d383dc20075fd5" +dependencies = [ + "bincode", + "log", + "serde", + "serde_derive", + "solana-program-runtime", + "solana-sdk", +] + +[[package]] +name = "solana-thin-client" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d41e0b567c7cebc05bbd6026e96d32304cf5ab666c1650f03f655ccc4b5d8f" +dependencies = [ + "bincode", + "log", + "rayon", + "solana-connection-cache", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-sdk", +] + +[[package]] +name = "solana-tpu-client" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6768221008a057f27b2c2302cfdcf4a86de163dcecde3907b465852a82405fe" +dependencies = [ + "async-trait", + "bincode", + "futures-util", + "indexmap 2.1.0", + "indicatif", + "log", + "rayon", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-pubsub-client", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-sdk", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-transaction-status" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a416174efedbee5ca44328a3cf4cac85b776b8b9dd11064d5df1c7fef19bb12d" +dependencies = [ + "Inflector", + "base64 0.21.5", + "bincode", + "borsh 0.10.3", + "bs58 0.4.0", + "lazy_static", + "log", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-sdk", + "spl-associated-token-account", + "spl-memo", + "spl-token", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "solana-udp-client" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9530bc6fc1d65ce4a8cf3880b2c1e88a3a0b9f080e2a4883f94e9d587c3deb7" +dependencies = [ + "async-trait", + "solana-connection-cache", + "solana-net-utils", + "solana-sdk", + "solana-streamer", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-version" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7bdf3d61eb03d66e8b25bc6abfe1999b1eb431d7f670a3b94f0eb26a93ddfcc" +dependencies = [ + "log", + "rustc_version", + "semver", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk", +] + +[[package]] +name = "solana-vote" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5754493ad5c6db5a080c6fc742c31aa1348bba6a693487611d6b7fe33e420313" +dependencies = [ + "crossbeam-channel", + "itertools", + "log", + "rustc_version", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk", + "solana-vote-program", + "thiserror", +] + +[[package]] +name = "solana-vote-program" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b47e77253625fa4b21ba756a0c79557d86ee218ce7bf6d91425b1c183c64d14" +dependencies = [ + "bincode", + "log", + "num-derive 0.3.3", + "num-traits", + "rustc_version", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-metrics", + "solana-program", + "solana-program-runtime", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-zk-token-proof-program" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d79995c615c8d23aeca718f2d54293361ca1195375e41f05677cc262e8445abd" +dependencies = [ + "bytemuck", + "num-derive 0.3.3", + "num-traits", + "solana-program-runtime", + "solana-sdk", + "solana-zk-token-sdk", +] + +[[package]] +name = "solana-zk-token-sdk" +version = "1.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "087463ead46bb098b61b571b641a86dcbec22a4d29ac222ca6f6eddcc8330031" +dependencies = [ + "aes-gcm-siv", + "base64 0.21.5", + "bincode", + "bytemuck", + "byteorder 1.5.0", + "curve25519-dalek", + "getrandom 0.1.16", + "itertools", + "lazy_static", + "merlin", + "num-derive 0.3.3", + "num-traits", + "rand 0.7.3", + "serde", + "serde_json", + "sha3 0.9.1", + "solana-program", + "solana-sdk", + "subtle", + "thiserror", + "zeroize", +] + +[[package]] +name = "solana_rbpf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d457cc2ba742c120492a64b7fa60e22c575e891f6b55039f4d736568fb112a3" +dependencies = [ + "byteorder 1.5.0", + "combine", + "goblin", + "hash32", + "libc", + "log", + "rand 0.8.5", + "rustc-demangle", + "scroll", + "thiserror", + "winapi 0.3.9", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "spl-associated-token-account" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385e31c29981488f2820b2022d8e731aae3b02e6e18e2fd854e4c9a94dc44fc3" +dependencies = [ + "assert_matches", + "borsh 0.10.3", + "num-derive 0.4.1", + "num-traits", + "solana-program", + "spl-token", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "spl-discriminator" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cce5d563b58ef1bb2cdbbfe0dfb9ffdc24903b10ae6a4df2d8f425ece375033f" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator-derive", +] + +[[package]] +name = "spl-discriminator-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fadbefec4f3c678215ca72bd71862697bb06b41fd77c0088902dd3203354387b" +dependencies = [ + "quote", + "spl-discriminator-syn", + "syn 2.0.39", +] + +[[package]] +name = "spl-discriminator-syn" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e5f2044ca42c8938d54d1255ce599c79a1ffd86b677dfab695caa20f9ffc3f2" +dependencies = [ + "proc-macro2", + "quote", + "sha2 0.10.8", + "syn 2.0.39", + "thiserror", +] + +[[package]] +name = "spl-memo" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f180b03318c3dbab3ef4e1e4d46d5211ae3c780940dd0a28695aba4b59a75a" +dependencies = [ + "solana-program", +] + +[[package]] +name = "spl-pod" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2881dddfca792737c0706fa0175345ab282b1b0879c7d877bad129645737c079" +dependencies = [ + "borsh 0.10.3", + "bytemuck", + "solana-program", + "solana-zk-token-sdk", + "spl-program-error", +] + +[[package]] +name = "spl-program-error" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "249e0318493b6bcf27ae9902600566c689b7dfba9f1bdff5893e92253374e78c" +dependencies = [ + "num-derive 0.4.1", + "num-traits", + "solana-program", + "spl-program-error-derive", + "thiserror", +] + +[[package]] +name = "spl-program-error-derive" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5269c8e868da17b6552ef35a51355a017bd8e0eae269c201fef830d35fa52c" +dependencies = [ + "proc-macro2", + "quote", + "sha2 0.10.8", + "syn 2.0.39", +] + +[[package]] +name = "spl-tlv-account-resolution" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "062e148d3eab7b165582757453632ffeef490c02c86a48bfdb4988f63eefb3b9" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] + +[[package]] +name = "spl-token" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08459ba1b8f7c1020b4582c4edf0f5c7511a5e099a7a97570c9698d4f2337060" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.6.1", + "solana-program", + "thiserror", +] + +[[package]] +name = "spl-token-2022" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4abf34a65ba420584a0c35f3903f8d727d1f13ababbdc3f714c6b065a686e86" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.4.1", + "num-traits", + "num_enum 0.7.1", + "solana-program", + "solana-zk-token-sdk", + "spl-memo", + "spl-pod", + "spl-token", + "spl-token-metadata-interface", + "spl-transfer-hook-interface", + "spl-type-length-value", + "thiserror", +] + +[[package]] +name = "spl-token-metadata-interface" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f" +dependencies = [ + "borsh 0.10.3", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] + +[[package]] +name = "spl-transfer-hook-interface" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "051d31803f873cabe71aec3c1b849f35248beae5d19a347d93a5c9cccc5d5a9b" +dependencies = [ + "arrayref", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-tlv-account-resolution", + "spl-type-length-value", +] + +[[package]] +name = "spl-type-length-value" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a468e6f6371f9c69aae760186ea9f1a01c2908351b06a5e0026d21cfc4d7ecac" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stream-cancel" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0a9eb2715209fb8cc0d942fcdff45674bfc9f0090a0d897e85a22955ad159b" +dependencies = [ + "futures-core", + "pin-project", + "tokio", +] + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "symlink" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" + +[[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.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tar" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if 1.0.0", + "fastrand", + "redox_syscall 0.4.1", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "termcolor" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + +[[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.39", +] + +[[package]] +name = "time" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +dependencies = [ + "deranged", + "itoa", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +dependencies = [ + "time-core", +] + +[[package]] +name = "tiny-bip39" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +dependencies = [ + "anyhow", + "hmac 0.8.1", + "once_cell", + "pbkdf2 0.4.0", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.9", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + +[[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 = "tokio" +version = "1.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot 0.12.1", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.5.5", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls", + "tokio", + "tokio-rustls", + "tungstenite", + "webpki-roots 0.25.3", +] + +[[package]] +name = "tokio-util" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[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.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tonic" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.21.5", + "bytes", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-timeout", + "percent-encoding 2.3.1", + "pin-project", + "prost", + "rustls-pemfile", + "tokio", + "tokio-rustls", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tonic-build" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07" +dependencies = [ + "prettyplease 0.1.25", + "proc-macro2", + "prost-build", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util 0.7.10", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "trees" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de5f738ceab88e2491a94ddc33c3feeadfa95fedc60363ef110845df12f3878" + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder 1.5.0", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.8.5", + "rustls", + "sha1", + "thiserror", + "url 2.5.0", + "utf-8", + "webpki-roots 0.24.0", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +dependencies = [ + "void", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b" + +[[package]] +name = "unsigned-varint" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" + +[[package]] +name = "unsigned-varint" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "uriparse" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff" +dependencies = [ + "fnv", + "lazy_static", +] + +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +dependencies = [ + "idna 0.1.5", + "matches", + "percent-encoding 1.0.1", +] + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna 0.5.0", + "percent-encoding 2.3.1", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" + +[[package]] +name = "web-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" +dependencies = [ + "rustls-webpki", +] + +[[package]] +name = "webpki-roots" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" + +[[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 = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c830786f7720c2fd27a1a0e27a709dbd3c4d009b56d098fc742d4f4eab91fe2" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if 1.0.0", + "windows-sys 0.48.0", +] + +[[package]] +name = "x509-parser" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" +dependencies = [ + "asn1-rs", + "base64 0.13.1", + "data-encoding", + "der-parser", + "lazy_static", + "nom", + "oid-registry", + "rusticata-macros", + "thiserror", + "time", +] + +[[package]] +name = "xattr" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7dae5072fe1f8db8f8d29059189ac175196e410e40ba42d5d4684ae2f750995" +dependencies = [ + "libc", + "linux-raw-sys", + "rustix", +] + +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time", +] + +[[package]] +name = "zerocopy" +version = "0.7.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "zeroize" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe 5.0.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" +dependencies = [ + "zstd-safe 7.0.0", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-safe" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.9+zstd.1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/geyser-plugin-runner/Cargo.toml b/geyser-plugin-runner/Cargo.toml new file mode 100644 index 00000000..fe8499ec --- /dev/null +++ b/geyser-plugin-runner/Cargo.toml @@ -0,0 +1,37 @@ +[package] +name = "demo-rust-ipld-car" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +cbor = "0.4.1" +byteorder = "1.4.3" +base64 = "0.21.5" +serde = { version = "1.0.188", features = ["derive"] } +serde_cbor = "0.11" +serde_json = "1.0.108" +integer-encoding = "4.0.0" +bs58 = "0.5.0" +hex = "0.4.3" +cid = "0.11.0" +multihash = "0.19.1" +solana-sdk = "1.17.7" +bincode = "1.3.3" +crc = "3.0.1" +fnv = "1.0.7" +solana-storage-proto = "1.17.10" +bytes = "1.5.0" +"solana-transaction-status" = "1.17.10" +prost ="0.11.9" +zstd = "0.13.0" +# for geyser: +solana-geyser-plugin-manager = "1.17.7" +crossbeam-channel = "0.5.8" +solana-rpc = "1.17.7" +borsh = "1.2.1" +solana-program = "1.17.7" +solana-ledger = "1.17.7" +solana-entry = "1.17.7" +solana-accounts-db = "1.17.7" diff --git a/geyser-plugin-runner/Makefile b/geyser-plugin-runner/Makefile new file mode 100644 index 00000000..2ffb5ccc --- /dev/null +++ b/geyser-plugin-runner/Makefile @@ -0,0 +1,10 @@ +DEFAULT := plugin + +# Path: Makefile +plugin: + @echo "Building plugin..." + @cd demo-plugin && cargo build --release --lib --target=x86_64-unknown-linux-gnu --target-dir=target +faithful: + @echo "Building rust faithful..." + @cargo build --release --target-dir=target + \ No newline at end of file diff --git a/geyser-plugin-runner/README.md b/geyser-plugin-runner/README.md new file mode 100644 index 00000000..f66273b3 --- /dev/null +++ b/geyser-plugin-runner/README.md @@ -0,0 +1,19 @@ +# yellowstone-faithful-rust + +This is a Rust implementation of the [Yellowstone Faithful](https://github.com/rpcpool/yellowstone-faithful) project. + +Right now, it only supports reading a CAR file dumping the contents to a Geyser plugin. + +## Usage + +```bash +# Modify and build the geyser plugin +cd demo-plugin +cargo build --release --lib --target=x86_64-unknown-linux-gnu --target-dir=target + +# Modify the [plugin config json file](demo-plugin/src/plugin-config.json) +# The important part is the `libpath` field, which should point to the built plugin (absolute path). +nano demo-plugin/src/plugin-config.json + +# Run the demo +cargo run /path/to/epoch-NNN.car demo-plugin/src/plugin-config.json diff --git a/geyser-plugin-runner/demo-plugin/.gitignore b/geyser-plugin-runner/demo-plugin/.gitignore new file mode 100644 index 00000000..e420ee4b --- /dev/null +++ b/geyser-plugin-runner/demo-plugin/.gitignore @@ -0,0 +1 @@ +target/* diff --git a/geyser-plugin-runner/demo-plugin/Cargo.lock b/geyser-plugin-runner/demo-plugin/Cargo.lock new file mode 100644 index 00000000..fdebd949 --- /dev/null +++ b/geyser-plugin-runner/demo-plugin/Cargo.lock @@ -0,0 +1,7284 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array", +] + +[[package]] +name = "aes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +dependencies = [ + "cfg-if 1.0.0", + "cipher", + "cpufeatures", + "opaque-debug", +] + +[[package]] +name = "aes-gcm-siv" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589c637f0e68c877bbd59a4599bbe849cac8e5f3e4b5a3ebae8f528cd218dcdc" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "polyval", + "subtle", + "zeroize", +] + +[[package]] +name = "ahash" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +dependencies = [ + "getrandom 0.2.11", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if 1.0.0", + "getrandom 0.2.11", + "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 = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "arc-swap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools", + "num-bigint 0.4.4", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.4", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint 0.4.4", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "ascii" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" + +[[package]] +name = "asn1-rs" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror", + "time", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-compression" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc2d0cfb2a7388d34f590e76686704c494ed7aaceed62ee1ba35cbf363abc2a5" +dependencies = [ + "brotli", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "async-mutex" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "async-trait" +version = "0.1.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "autotools" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" +dependencies = [ + "cc", +] + +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding 2.3.1", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[package]] +name = "backoff" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +dependencies = [ + "futures-core", + "getrandom 0.2.11", + "instant", + "pin-project-lite", + "rand 0.8.5", + "tokio", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "prettyplease 0.2.15", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.39", +] + +[[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" +dependencies = [ + "serde", +] + +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] +name = "blake3" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if 1.0.0", + "constant_time_eq", + "digest 0.10.7", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "borsh" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +dependencies = [ + "borsh-derive 0.9.3", + "hashbrown 0.11.2", +] + +[[package]] +name = "borsh" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" +dependencies = [ + "borsh-derive 0.10.3", + "hashbrown 0.13.2", +] + +[[package]] +name = "borsh-derive" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +dependencies = [ + "borsh-derive-internal 0.9.3", + "borsh-schema-derive-internal 0.9.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" +dependencies = [ + "borsh-derive-internal 0.10.3", + "borsh-schema-derive-internal 0.10.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +dependencies = [ + "proc-macro2", + "quote", + "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.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +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 = "brotli" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + +[[package]] +name = "bstr" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" +dependencies = [ + "feature-probe", + "serde", +] + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "caps" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" +dependencies = [ + "libc", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[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 = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.48.5", +] + +[[package]] +name = "chrono-humanize" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799627e6b4d27827a814e837b9d8a504832086081806d45b1afa34dc982b023b" +dependencies = [ + "chrono", +] + +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + +[[package]] +name = "clang-sys" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading 0.7.4", +] + +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap 0.11.0", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +dependencies = [ + "atty", + "bitflags 1.3.2", + "clap_lex", + "indexmap 1.9.3", + "once_cell", + "strsim 0.10.0", + "termcolor", + "textwrap 0.16.0", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "combine" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +dependencies = [ + "ascii", + "byteorder", + "either", + "memchr", + "unreachable", +] + +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.45.0", +] + +[[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 1.0.0", + "wasm-bindgen", +] + +[[package]] +name = "console_log" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f" +dependencies = [ + "log", + "web-sys", +] + +[[package]] +name = "const-oid" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core_affinity" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8a03115cc34fb0d7c321dd154a3914b3ca082ccc5c11d91bf7117dbbe7171f" +dependencies = [ + "kernel32-sys", + "libc", + "num_cpus", + "winapi 0.2.8", +] + +[[package]] +name = "cpufeatures" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "crossbeam-utils", + "memoffset 0.9.0", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "ctr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "serde", + "subtle", + "zeroize", +] + +[[package]] +name = "darling" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.39", +] + +[[package]] +name = "darling_macro" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "dashmap" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +dependencies = [ + "cfg-if 1.0.0", + "num_cpus", + "rayon", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if 1.0.0", + "hashbrown 0.14.3", + "lock_api", + "once_cell", + "parking_lot_core 0.9.9", +] + +[[package]] +name = "data-encoding" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" + +[[package]] +name = "demo-plugin" +version = "0.1.0" +dependencies = [ + "libc", + "libloading 0.8.1", + "serial_test", + "socket2 0.5.5", + "solana-account-decoder", + "solana-core", + "solana-geyser-plugin-interface", + "solana-local-cluster", + "solana-net-utils", + "solana-streamer", + "tempfile", +] + +[[package]] +name = "der" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" +dependencies = [ + "const-oid", +] + +[[package]] +name = "der-parser" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +dependencies = [ + "asn1-rs", + "displaydoc", + "nom", + "num-bigint 0.4.4", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "deranged" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivation-path" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "dialoguer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" +dependencies = [ + "console", + "shell-words", + "tempfile", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", + "subtle", +] + +[[package]] +name = "dir-diff" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2860407d7d7e2e004bb2128510ad9e8d669e76fa005ccf567977b5d71b8b4a0b" +dependencies = [ + "walkdir", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if 1.0.0", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "dlopen2" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi 0.3.9", +] + +[[package]] +name = "dlopen2_derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cbae11b3de8fce2a456e8ea3dada226b35fe791f0dc1d360c0941f0bb681f3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "eager" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abe71d579d1812060163dff96056261deb5bf6729b100fa2e36a68b9649ba3d3" + +[[package]] +name = "ed25519" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "ed25519-dalek-bip32" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" +dependencies = [ + "derivation-path", + "ed25519-dalek", + "hmac 0.12.1", + "sha2 0.10.8", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "enum-iterator" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7add3873b5dd076766ee79c8e406ad1a472c385476b9e38849f8eec24f1be689" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "etcd-client" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4b0ea5ef6dc2388a4b1669fa32097249bc03a15417b97cb75e38afb309e4a89" +dependencies = [ + "http", + "prost", + "tokio", + "tokio-stream", + "tonic", + "tonic-build", + "tower", + "tower-service", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "fast-math" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2465292146cdfc2011350fe3b1c616ac83cf0faeedb33463ba1c332ed8948d66" +dependencies = [ + "ieee754", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "feature-probe" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding 2.3.1", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "futures" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" + +[[package]] +name = "futures" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-executor" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-macro" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures 0.1.31", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "serde", + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "goauth" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8af59a261bcf42f45d1b261232847b9b850ba0a1419d6100698246fb66e9240" +dependencies = [ + "arc-swap", + "futures 0.3.29", + "log", + "reqwest", + "serde", + "serde_derive", + "serde_json", + "simpl", + "smpl_jwt", + "time", + "tokio", +] + +[[package]] +name = "goblin" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7666983ed0dd8d21a6f6576ee00053ca0926fb281a5522577a4dbd0f1b54143" +dependencies = [ + "log", + "plain", + "scroll", +] + +[[package]] +name = "h2" +version = "0.3.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 2.1.0", + "slab", + "tokio", + "tokio-util 0.7.10", + "tracing", +] + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.7", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.7", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.6", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "headers" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" +dependencies = [ + "base64 0.21.5", + "bytes", + "headers-core", + "http", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +dependencies = [ + "http", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "histogram" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cb882ccb290b8646e554b157ab0b71e64e8d5bef775cd66b6531e52d302669" + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", +] + +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-proxy" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca815a891b24fdfb243fa3239c86154392b0953ee584aa1a2a1f66d20cbe75cc" +dependencies = [ + "bytes", + "futures 0.3.29", + "headers", + "http", + "hyper", + "hyper-tls", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ieee754" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9007da9cacbd3e6343da136e98b0d2df013f553d35bdec8b518f07bea768e19c" + +[[package]] +name = "im" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "rayon", + "serde", + "sized-chunks", + "typenum", + "version_check", +] + +[[package]] +name = "index_list" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70891286cb8e844fdfcf1178b47569699f9e20b5ecc4b45a6240a64771444638" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", + "rayon", +] + +[[package]] +name = "indicatif" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[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 = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + +[[package]] +name = "jsonrpc-client-transports" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b99d4207e2a04fb4581746903c2bb7eb376f88de9c699d0f3e10feeac0cd3a" +dependencies = [ + "derive_more", + "futures 0.3.29", + "jsonrpc-core", + "jsonrpc-pubsub", + "log", + "serde", + "serde_json", + "url 1.7.2", +] + +[[package]] +name = "jsonrpc-core" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f7f76aef2d054868398427f6c54943cf3d1caa9a7ec7d0c38d69df97a965eb" +dependencies = [ + "futures 0.3.29", + "futures-executor", + "futures-util", + "log", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "jsonrpc-core-client" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b51da17abecbdab3e3d4f26b01c5ec075e88d3abe3ab3b05dc9aa69392764ec0" +dependencies = [ + "futures 0.3.29", + "jsonrpc-client-transports", +] + +[[package]] +name = "jsonrpc-derive" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b939a78fa820cdfcb7ee7484466746a7377760970f6f9c6fe19f9edcc8a38d2" +dependencies = [ + "proc-macro-crate 0.1.5", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "jsonrpc-http-server" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1dea6e07251d9ce6a552abfb5d7ad6bc290a4596c8dcc3d795fae2bbdc1f3ff" +dependencies = [ + "futures 0.3.29", + "hyper", + "jsonrpc-core", + "jsonrpc-server-utils", + "log", + "net2", + "parking_lot 0.11.2", + "unicase", +] + +[[package]] +name = "jsonrpc-pubsub" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240f87695e6c6f62fb37f05c02c04953cf68d6408b8c1c89de85c7a0125b1011" +dependencies = [ + "futures 0.3.29", + "jsonrpc-core", + "lazy_static", + "log", + "parking_lot 0.11.2", + "rand 0.7.3", + "serde", +] + +[[package]] +name = "jsonrpc-server-utils" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4fdea130485b572c39a460d50888beb00afb3e35de23ccd7fad8ff19f0e0d4" +dependencies = [ + "bytes", + "futures 0.3.29", + "globset", + "jsonrpc-core", + "lazy_static", + "log", + "tokio", + "tokio-stream", + "tokio-util 0.6.10", + "unicase", +] + +[[package]] +name = "keccak" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if 1.0.0", + "winapi 0.3.9", +] + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if 1.0.0", + "windows-sys 0.48.0", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "librocksdb-sys" +version = "0.11.0+8.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" +dependencies = [ + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "lz4-sys", +] + +[[package]] +name = "libsecp256k1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" +dependencies = [ + "arrayref", + "base64 0.12.3", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libz-sys" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "light-poseidon" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5b439809cdfc0d86ecc7317f1724df13dfa665df48991b79e90e689411451f7" +dependencies = [ + "ark-bn254", + "ark-ff", + "thiserror", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "lru" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "lz4" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" +dependencies = [ + "libc", + "lz4-sys", +] + +[[package]] +name = "lz4-sys" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "min-max-heap" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2687e6cf9c00f48e9284cf9fd15f2ef341d03cc7743abf9df4c5f07fdee50b18" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + +[[package]] +name = "modular-bitfield" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a53d79ba8304ac1c4f9eb3b9d281f21f7be9d4626f72ce7df4ad8fbde4f38a74" +dependencies = [ + "modular-bitfield-impl", + "static_assertions", +] + +[[package]] +name = "modular-bitfield-impl" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a7d5f7076603ebc68de2dc6a650ec331a062a13abaa346975be747bbfa4b789" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "net2" +version = "0.2.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b13b648036a2339d06de780866fbdfda0dde886de7b3af2ddeba8b14f4ee34ac" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if 1.0.0", + "libc", + "memoffset 0.7.1", + "pin-utils", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" +dependencies = [ + "num-bigint 0.2.6", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[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-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[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-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" +dependencies = [ + "autocfg", + "num-bigint 0.2.6", + "num-integer", + "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_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.3", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive 0.6.1", +] + +[[package]] +name = "num_enum" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683751d591e6d81200c39fb0d1032608b77724f34114db54f571ff1317b337c0" +dependencies = [ + "num_enum_derive 0.7.1", +] + +[[package]] +name = "num_enum_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[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.1", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +dependencies = [ + "asn1-rs", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl" +version = "0.10.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b8419dc8cc6d866deb801274bba2e6f8f6108c1bb7fcc10ee5ab864931dbb45" +dependencies = [ + "bitflags 2.4.1", + "cfg-if 1.0.0", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-src" +version = "300.1.6+3.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439fac53e092cd7442a3660c85dde4643ab3b5bd39040912388dcdabf6b88085" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3eaad34cdd97d81de97964fc7f29e2d104f483840d906ef56daa1912338460b" +dependencies = [ + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "os_str_bytes" +version = "6.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" + +[[package]] +name = "ouroboros" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1358bd1558bd2a083fed428ffeda486fbfb323e698cdda7794259d592ca72db" +dependencies = [ + "aliasable", + "ouroboros_macro", +] + +[[package]] +name = "ouroboros_macro" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7" +dependencies = [ + "Inflector", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.9", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi 0.3.9", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall 0.4.1", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "percentage" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd23b938276f14057220b707937bcb42fa76dda7560e57a2da30cb52d557937" +dependencies = [ + "num", +] + +[[package]] +name = "pest" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "pest_meta" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.8", +] + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.1.0", +] + +[[package]] +name = "pin-project" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" +dependencies = [ + "der", + "spki", + "zeroize", +] + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + +[[package]] +name = "polyval" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettyplease" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "prettyplease" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +dependencies = [ + "proc-macro2", + "syn 2.0.39", +] + +[[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 = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +dependencies = [ + "bytes", + "heck", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease 0.1.25", + "prost", + "prost-types", + "regex", + "syn 1.0.109", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "prost-types" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost", +] + +[[package]] +name = "protobuf-src" +version = "1.1.0+21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7ac8852baeb3cc6fb83b93646fb93c0ffe5d14bf138c945ceb4b9948ee0e3c1" +dependencies = [ + "autotools", +] + +[[package]] +name = "qstring" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding 2.3.1", +] + +[[package]] +name = "qualifier_attr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "quinn" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" +dependencies = [ + "bytes", + "rand 0.8.5", + "ring 0.16.20", + "rustc-hash", + "rustls", + "rustls-native-certs", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" +dependencies = [ + "bytes", + "libc", + "socket2 0.5.5", + "tracing", + "windows-sys 0.48.0", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.11", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rcgen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +dependencies = [ + "pem", + "ring 0.16.20", + "time", + "yasna", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[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 = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom 0.2.11", + "libredox", + "thiserror", +] + +[[package]] +name = "reed-solomon-erasure" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7263373d500d4d4f505d43a2a662d475a894aa94503a1ee28e9188b5f3960d4f" +dependencies = [ + "cc", + "libc", + "libm", + "lru", + "parking_lot 0.11.2", + "smallvec", + "spin 0.9.8", +] + +[[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 = "reqwest" +version = "0.11.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" +dependencies = [ + "async-compression", + "base64 0.21.5", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding 2.3.1", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tokio-util 0.7.10", + "tower-service", + "url 2.5.0", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 0.25.3", + "winreg", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "ring" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +dependencies = [ + "cc", + "getrandom 0.2.11", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.48.0", +] + +[[package]] +name = "rocksdb" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rolling-file" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8395b4f860856b740f20a296ea2cd4d823e81a2658cf05ef61be22916026a906" +dependencies = [ + "chrono", +] + +[[package]] +name = "rpassword" +version = "7.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" +dependencies = [ + "libc", + "rtoolbox", + "windows-sys 0.48.0", +] + +[[package]] +name = "rtoolbox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + +[[package]] +name = "rustix" +version = "0.38.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9470c4bf8246c8daf25f9598dca807fb6510347b1e1cfa55749113850c79d88a" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9" +dependencies = [ + "log", + "ring 0.17.7", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.5", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.7", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scroll" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.7", + "untrusted 0.9.0", +] + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + +[[package]] +name = "serde" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[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 = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" +dependencies = [ + "serde", + "serde_with_macros", +] + +[[package]] +name = "serde_with_macros" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "serde_yaml" +version = "0.9.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c" +dependencies = [ + "indexmap 2.1.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serial_test" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e56dd856803e253c8f298af3f4d7eb0ae5e23a737252cd90bb4f3b435033b2d" +dependencies = [ + "dashmap 5.5.3", + "futures 0.3.29", + "lazy_static", + "log", + "parking_lot 0.12.1", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "keccak", + "opaque-debug", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" + +[[package]] +name = "simpl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a30f10c911c0355f80f1c2faa8096efc4a58cdf8590b954d5b395efa071c711" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" + +[[package]] +name = "smpl_jwt" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b6ff8c21c74ce7744643a7cddbb02579a44f1f77e4316bff1ddb741aca8ac9" +dependencies = [ + "base64 0.13.1", + "log", + "openssl", + "serde", + "serde_derive", + "serde_json", + "simpl", + "time", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "soketto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +dependencies = [ + "base64 0.13.1", + "bytes", + "futures 0.3.29", + "httparse", + "log", + "rand 0.8.5", + "sha-1", +] + +[[package]] +name = "solana-account-decoder" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c57851cbacad3aee1fd741c69d92606f7a0dd59a38cfd2086ecd3e88f22573b" +dependencies = [ + "Inflector", + "base64 0.21.5", + "bincode", + "bs58", + "bv", + "lazy_static", + "serde", + "serde_derive", + "serde_json", + "solana-config-program", + "solana-sdk", + "spl-token", + "spl-token-2022", + "spl-token-metadata-interface", + "thiserror", + "zstd", +] + +[[package]] +name = "solana-accounts-db" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4c2e7762315d6e7e9d10f9b27137ec380d23153f1f74859d4b806c476002276" +dependencies = [ + "arrayref", + "bincode", + "blake3", + "bv", + "bytemuck", + "byteorder", + "bzip2", + "crossbeam-channel", + "dashmap 4.0.2", + "flate2", + "fnv", + "fs-err", + "im", + "index_list", + "itertools", + "lazy_static", + "log", + "lz4", + "memmap2", + "modular-bitfield", + "num-derive 0.3.3", + "num-traits", + "num_cpus", + "num_enum 0.6.1", + "ouroboros", + "percentage", + "qualifier_attr", + "rand 0.8.5", + "rayon", + "regex", + "rustc_version", + "serde", + "serde_derive", + "solana-bucket-map", + "solana-config-program", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-measure", + "solana-metrics", + "solana-program-runtime", + "solana-rayon-threadlimit", + "solana-sdk", + "solana-stake-program", + "solana-system-program", + "solana-vote-program", + "static_assertions", + "strum", + "strum_macros", + "tar", + "tempfile", + "thiserror", +] + +[[package]] +name = "solana-address-lookup-table-program" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a90b9c115640d7c60dab80b62669e0266411d204c4556ae683296546bfef44bd" +dependencies = [ + "bincode", + "bytemuck", + "log", + "num-derive 0.3.3", + "num-traits", + "rustc_version", + "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-program", + "solana-program-runtime", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-bloom" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f897ff5974f8c5e1129607557a40717c2b88cc583d8b68fc4015677031fbaf3e" +dependencies = [ + "bv", + "fnv", + "log", + "rand 0.8.5", + "rayon", + "rustc_version", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk", +] + +[[package]] +name = "solana-bpf-loader-program" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c79a4bc8ad61cab9505fa9e5929fefdb56c8501d651e0b2990e78e42bca4bcbe" +dependencies = [ + "bincode", + "byteorder", + "libsecp256k1", + "log", + "scopeguard", + "solana-measure", + "solana-program-runtime", + "solana-sdk", + "solana-zk-token-sdk", + "solana_rbpf", + "thiserror", +] + +[[package]] +name = "solana-bucket-map" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "920a78e9cfc4203a6ce6287c06481a39e48878fdac9d201cba60e5b624d94965" +dependencies = [ + "bv", + "bytemuck", + "log", + "memmap2", + "modular-bitfield", + "num_enum 0.6.1", + "rand 0.8.5", + "solana-measure", + "solana-sdk", + "tempfile", +] + +[[package]] +name = "solana-clap-utils" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d11f2dd9318c681cbe8b3f078afa3ba29da5e7eeabf0ef2218b26dcb31ec648" +dependencies = [ + "chrono", + "clap 2.34.0", + "rpassword", + "solana-remote-wallet", + "solana-sdk", + "thiserror", + "tiny-bip39", + "uriparse", + "url 2.5.0", +] + +[[package]] +name = "solana-cli-config" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6342ea7b5cdbde3e19ab4ea66f1d23e06b198f43bf83154c54b372d4f0fb7f19" +dependencies = [ + "dirs-next", + "lazy_static", + "serde", + "serde_derive", + "serde_yaml", + "solana-clap-utils", + "solana-sdk", + "url 2.5.0", +] + +[[package]] +name = "solana-client" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d316162f5ea30c890b1817cfc65544e98c6f039489652b3d5be1d0a2955f171" +dependencies = [ + "async-trait", + "bincode", + "dashmap 4.0.2", + "futures 0.3.29", + "futures-util", + "indexmap 2.1.0", + "indicatif", + "log", + "quinn", + "rayon", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-pubsub-client", + "solana-quic-client", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-rpc-client-nonce-utils", + "solana-sdk", + "solana-streamer", + "solana-thin-client", + "solana-tpu-client", + "solana-udp-client", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-compute-budget-program" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45f672921426a094472fed7d9942db4d36c9e3d421b1613c76c01f637a575ad3" +dependencies = [ + "solana-program-runtime", + "solana-sdk", +] + +[[package]] +name = "solana-config-program" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae983cd8c0179bae1c1fd861f779ad47390e1fc3490bda2c29de114c2c55a40" +dependencies = [ + "bincode", + "chrono", + "serde", + "serde_derive", + "solana-program-runtime", + "solana-sdk", +] + +[[package]] +name = "solana-connection-cache" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18e467e1963e6efde75b6c9cd2e22d27448c026fe2b5d76b5b1e7cfcb7f54ea" +dependencies = [ + "async-trait", + "bincode", + "crossbeam-channel", + "futures-util", + "indexmap 2.1.0", + "log", + "rand 0.8.5", + "rayon", + "rcgen", + "solana-measure", + "solana-metrics", + "solana-sdk", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-core" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "535aff3f69df5de2702e24375e10e7837ecaddad5d483c963be803fc2f12a7c4" +dependencies = [ + "base64 0.21.5", + "bincode", + "bs58", + "bytes", + "chrono", + "crossbeam-channel", + "dashmap 4.0.2", + "eager", + "etcd-client", + "futures 0.3.29", + "histogram", + "itertools", + "lazy_static", + "log", + "lru", + "min-max-heap", + "num_enum 0.6.1", + "quinn", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "rcgen", + "rolling-file", + "rustc_version", + "rustls", + "serde", + "serde_bytes", + "serde_derive", + "solana-accounts-db", + "solana-bloom", + "solana-client", + "solana-cost-model", + "solana-entry", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-geyser-plugin-manager", + "solana-gossip", + "solana-ledger", + "solana-measure", + "solana-metrics", + "solana-net-utils", + "solana-perf", + "solana-poh", + "solana-program-runtime", + "solana-quic-client", + "solana-rayon-threadlimit", + "solana-rpc", + "solana-rpc-client-api", + "solana-runtime", + "solana-sdk", + "solana-send-transaction-service", + "solana-streamer", + "solana-tpu-client", + "solana-transaction-status", + "solana-turbine", + "solana-version", + "solana-vote", + "solana-vote-program", + "strum", + "strum_macros", + "sys-info", + "sysctl", + "tempfile", + "thiserror", + "tokio", + "trees", +] + +[[package]] +name = "solana-cost-model" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4f0a79c35de607d220b35905aa9538d02f476b405d44ec24f42423b1ebaec37" +dependencies = [ + "lazy_static", + "log", + "rustc_version", + "solana-address-lookup-table-program", + "solana-bpf-loader-program", + "solana-compute-budget-program", + "solana-config-program", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-loader-v4-program", + "solana-metrics", + "solana-program-runtime", + "solana-sdk", + "solana-stake-program", + "solana-system-program", + "solana-vote-program", +] + +[[package]] +name = "solana-entry" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593d2ec1e4c64ff1c99d853351342b1dedaf34f5f1170358f82b9e459d419bf" +dependencies = [ + "bincode", + "crossbeam-channel", + "dlopen2", + "lazy_static", + "log", + "rand 0.8.5", + "rayon", + "serde", + "solana-measure", + "solana-merkle-tree", + "solana-metrics", + "solana-perf", + "solana-rayon-threadlimit", + "solana-sdk", +] + +[[package]] +name = "solana-faucet" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "203eaf76a8a171d906ba882fa3838fcb723f7b1d2294573995671e5423e4e52b" +dependencies = [ + "bincode", + "byteorder", + "clap 2.34.0", + "crossbeam-channel", + "log", + "serde", + "serde_derive", + "solana-clap-utils", + "solana-cli-config", + "solana-logger", + "solana-metrics", + "solana-sdk", + "solana-version", + "spl-memo", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-frozen-abi" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0471865f0908c886919844396b7a87c329216736ac61ca074b55237f18afef17" +dependencies = [ + "ahash 0.8.6", + "blake3", + "block-buffer 0.10.4", + "bs58", + "bv", + "byteorder", + "cc", + "either", + "generic-array", + "im", + "lazy_static", + "log", + "memmap2", + "rustc_version", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "sha2 0.10.8", + "solana-frozen-abi-macro", + "subtle", + "thiserror", +] + +[[package]] +name = "solana-frozen-abi-macro" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb3b5a47af7ec7ce5698d6dea597be93567bac7b0f4845b0c31472dd43bb835" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.39", +] + +[[package]] +name = "solana-geyser-plugin-interface" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31a7abb518e610c626f875c61424586e89c93a28df0f5b8feac8902d53decef0" +dependencies = [ + "log", + "solana-sdk", + "solana-transaction-status", + "thiserror", +] + +[[package]] +name = "solana-geyser-plugin-manager" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8cf39299f463ab9db613f221ada2e6391a95d333416de665f85ceffc19df4db" +dependencies = [ + "bs58", + "crossbeam-channel", + "json5", + "jsonrpc-core", + "jsonrpc-server-utils", + "libloading 0.7.4", + "log", + "serde_json", + "solana-accounts-db", + "solana-entry", + "solana-geyser-plugin-interface", + "solana-ledger", + "solana-measure", + "solana-metrics", + "solana-rpc", + "solana-runtime", + "solana-sdk", + "solana-transaction-status", + "thiserror", +] + +[[package]] +name = "solana-gossip" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "263d1dca50a7c0e62efc17fcc05b7a024d8fbf32873df14aaac50001a356df10" +dependencies = [ + "assert_matches", + "bincode", + "bv", + "clap 2.34.0", + "crossbeam-channel", + "flate2", + "indexmap 2.1.0", + "itertools", + "log", + "lru", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "solana-bloom", + "solana-clap-utils", + "solana-client", + "solana-entry", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-ledger", + "solana-logger", + "solana-measure", + "solana-metrics", + "solana-net-utils", + "solana-perf", + "solana-rayon-threadlimit", + "solana-runtime", + "solana-sdk", + "solana-streamer", + "solana-thin-client", + "solana-tpu-client", + "solana-version", + "solana-vote", + "solana-vote-program", + "static_assertions", + "thiserror", +] + +[[package]] +name = "solana-ledger" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2321c4222c31ce1bb9cf145154613f036d9f30648734da3665b0200b30ae1985" +dependencies = [ + "assert_matches", + "bincode", + "bitflags 2.4.1", + "byteorder", + "chrono", + "chrono-humanize", + "crossbeam-channel", + "dashmap 4.0.2", + "fs_extra", + "futures 0.3.29", + "itertools", + "lazy_static", + "libc", + "log", + "lru", + "num_cpus", + "num_enum 0.6.1", + "prost", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "reed-solomon-erasure", + "rocksdb", + "rustc_version", + "scopeguard", + "serde", + "serde_bytes", + "sha2 0.10.8", + "solana-account-decoder", + "solana-accounts-db", + "solana-bpf-loader-program", + "solana-cost-model", + "solana-entry", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-measure", + "solana-metrics", + "solana-perf", + "solana-program-runtime", + "solana-rayon-threadlimit", + "solana-runtime", + "solana-sdk", + "solana-stake-program", + "solana-storage-bigtable", + "solana-storage-proto", + "solana-transaction-status", + "solana-vote", + "solana-vote-program", + "spl-token", + "spl-token-2022", + "static_assertions", + "strum", + "strum_macros", + "tempfile", + "thiserror", + "tokio", + "tokio-stream", + "trees", +] + +[[package]] +name = "solana-loader-v4-program" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3ff7c219f5cb6ddb894edb1fdd553e0fb3210885616553fa0f30348160d47d" +dependencies = [ + "log", + "solana-measure", + "solana-program-runtime", + "solana-sdk", + "solana_rbpf", +] + +[[package]] +name = "solana-local-cluster" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1215cefeb4e9a00235f087329678558f011046c53310dea551a34bd163446fd3" +dependencies = [ + "crossbeam-channel", + "itertools", + "log", + "rand 0.8.5", + "rayon", + "solana-accounts-db", + "solana-client", + "solana-config-program", + "solana-core", + "solana-entry", + "solana-gossip", + "solana-ledger", + "solana-logger", + "solana-pubsub-client", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-runtime", + "solana-sdk", + "solana-stake-program", + "solana-streamer", + "solana-thin-client", + "solana-tpu-client", + "solana-turbine", + "solana-vote", + "solana-vote-program", + "static_assertions", + "tempfile", + "trees", +] + +[[package]] +name = "solana-logger" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fee96bc0434660926b0052bd9e1ea62a251cd7fd17c043aa5d2d3db3f7e0316" +dependencies = [ + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "solana-measure" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cc1ffedbb774b61d214005805e884167cf0d0f3b35db8d4582007c27e05075" +dependencies = [ + "log", + "solana-sdk", +] + +[[package]] +name = "solana-merkle-tree" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54d420d308108489ece5b4c5e7554027f102a0af3a6472689eef1fad405dae7e" +dependencies = [ + "fast-math", + "solana-program", +] + +[[package]] +name = "solana-metrics" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4c986a6e37dc11b2432372852598e847564833ba1fa346d584ccc2da324ec5" +dependencies = [ + "crossbeam-channel", + "gethostname", + "lazy_static", + "log", + "reqwest", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-net-utils" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5f614d5a13aa5d4c3e5a43c0caedcdd2ceabfe3b991e4abd41d7ae8eea6d115" +dependencies = [ + "bincode", + "clap 3.2.25", + "crossbeam-channel", + "log", + "nix", + "rand 0.8.5", + "serde", + "serde_derive", + "socket2 0.5.5", + "solana-logger", + "solana-sdk", + "solana-version", + "tokio", + "url 2.5.0", +] + +[[package]] +name = "solana-perf" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc1c6f6b65656963ce6128a9884c11e63ffd5794e4a68270f2561b0929ba324d" +dependencies = [ + "ahash 0.8.6", + "bincode", + "bv", + "caps", + "curve25519-dalek", + "dlopen2", + "fnv", + "lazy_static", + "libc", + "log", + "nix", + "rand 0.8.5", + "rayon", + "rustc_version", + "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-metrics", + "solana-rayon-threadlimit", + "solana-sdk", + "solana-vote-program", +] + +[[package]] +name = "solana-poh" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a53952715d13d8d64847d8af7d2b810ddf3206b49915ed81cec6312bcac7b3a1" +dependencies = [ + "core_affinity", + "crossbeam-channel", + "log", + "solana-entry", + "solana-ledger", + "solana-measure", + "solana-metrics", + "solana-runtime", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-program" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d372d3108d05267b0f446935939f6ec586504f2443becc855b46ee64745ebce5" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "base64 0.21.5", + "bincode", + "bitflags 2.4.1", + "blake3", + "borsh 0.10.3", + "borsh 0.9.3", + "bs58", + "bv", + "bytemuck", + "cc", + "console_error_panic_hook", + "console_log", + "curve25519-dalek", + "getrandom 0.2.11", + "itertools", + "js-sys", + "lazy_static", + "libc", + "libsecp256k1", + "light-poseidon", + "log", + "memoffset 0.9.0", + "num-bigint 0.4.4", + "num-derive 0.3.3", + "num-traits", + "parking_lot 0.12.1", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk-macro", + "thiserror", + "tiny-bip39", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "solana-program-runtime" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e37ea8d22ad176709008203e5d3a258bd4ff030aad47e944399172f00490dc" +dependencies = [ + "base64 0.21.5", + "bincode", + "eager", + "enum-iterator", + "itertools", + "libc", + "log", + "num-derive 0.3.3", + "num-traits", + "percentage", + "rand 0.8.5", + "rustc_version", + "serde", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-measure", + "solana-metrics", + "solana-sdk", + "solana_rbpf", + "thiserror", +] + +[[package]] +name = "solana-pubsub-client" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ee9e7730350d311e999109674f4c1b4158400ecfa31913589919307f994f813" +dependencies = [ + "crossbeam-channel", + "futures-util", + "log", + "reqwest", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-rpc-client-api", + "solana-sdk", + "thiserror", + "tokio", + "tokio-stream", + "tokio-tungstenite", + "tungstenite", + "url 2.5.0", +] + +[[package]] +name = "solana-quic-client" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0534fc5453fb89f90eec8013e012d79730fa406b7630ef71feeb95145ac30095" +dependencies = [ + "async-mutex", + "async-trait", + "futures 0.3.29", + "itertools", + "lazy_static", + "log", + "quinn", + "quinn-proto", + "rcgen", + "rustls", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-net-utils", + "solana-rpc-client-api", + "solana-sdk", + "solana-streamer", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-rayon-threadlimit" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ab186881386606c5dd082d97f3cd164576f61ef79fd18ab6873e81e9608b2af" +dependencies = [ + "lazy_static", + "num_cpus", +] + +[[package]] +name = "solana-remote-wallet" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e38824e5bbd2bd65bc3d7578bd37f3a7a7a2ff8ac43a309ba20214ae6d0d8fda" +dependencies = [ + "console", + "dialoguer", + "log", + "num-derive 0.3.3", + "num-traits", + "parking_lot 0.12.1", + "qstring", + "semver", + "solana-sdk", + "thiserror", + "uriparse", +] + +[[package]] +name = "solana-rpc" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "493de000de0fe394e34e2f88304bc9fea722f9c71f10f08e30cda03e9a6f328c" +dependencies = [ + "base64 0.21.5", + "bincode", + "bs58", + "crossbeam-channel", + "dashmap 4.0.2", + "itertools", + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "jsonrpc-http-server", + "jsonrpc-pubsub", + "libc", + "log", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "soketto", + "solana-account-decoder", + "solana-accounts-db", + "solana-client", + "solana-entry", + "solana-faucet", + "solana-gossip", + "solana-ledger", + "solana-measure", + "solana-metrics", + "solana-perf", + "solana-poh", + "solana-rayon-threadlimit", + "solana-rpc-client-api", + "solana-runtime", + "solana-sdk", + "solana-send-transaction-service", + "solana-stake-program", + "solana-storage-bigtable", + "solana-streamer", + "solana-tpu-client", + "solana-transaction-status", + "solana-version", + "solana-vote", + "solana-vote-program", + "spl-token", + "spl-token-2022", + "stream-cancel", + "thiserror", + "tokio", + "tokio-util 0.6.10", +] + +[[package]] +name = "solana-rpc-client" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36a828fddf62d58f8447e170364020136e4e8687b4fe656e5c96419699f2f3e3" +dependencies = [ + "async-trait", + "base64 0.21.5", + "bincode", + "bs58", + "indicatif", + "log", + "reqwest", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-rpc-client-api", + "solana-sdk", + "solana-transaction-status", + "solana-version", + "solana-vote-program", + "tokio", +] + +[[package]] +name = "solana-rpc-client-api" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bf775aaf72c4dad9bac432dc2960658de64413035aabccb1acf5a108169d129" +dependencies = [ + "base64 0.21.5", + "bs58", + "jsonrpc-core", + "reqwest", + "semver", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-sdk", + "solana-transaction-status", + "solana-version", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "solana-rpc-client-nonce-utils" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0baef3e634d36408c8b54daa2fd7e4c2a2671c38f11cd0187a8a7187334c914" +dependencies = [ + "clap 2.34.0", + "solana-clap-utils", + "solana-rpc-client", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-runtime" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335c8863f4b789e64bbb0c0821ffd19c7c22ca547e2366b3ca332f379971f43b" +dependencies = [ + "arrayref", + "base64 0.21.5", + "bincode", + "blake3", + "bv", + "bytemuck", + "byteorder", + "bzip2", + "crossbeam-channel", + "dashmap 4.0.2", + "dir-diff", + "flate2", + "fnv", + "fs-err", + "im", + "index_list", + "itertools", + "lazy_static", + "log", + "lru", + "lz4", + "memmap2", + "modular-bitfield", + "num-derive 0.3.3", + "num-traits", + "num_cpus", + "num_enum 0.6.1", + "ouroboros", + "percentage", + "qualifier_attr", + "rand 0.8.5", + "rayon", + "regex", + "rustc_version", + "serde", + "serde_derive", + "serde_json", + "siphasher", + "solana-accounts-db", + "solana-address-lookup-table-program", + "solana-bpf-loader-program", + "solana-bucket-map", + "solana-compute-budget-program", + "solana-config-program", + "solana-cost-model", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-loader-v4-program", + "solana-measure", + "solana-metrics", + "solana-perf", + "solana-program-runtime", + "solana-rayon-threadlimit", + "solana-sdk", + "solana-stake-program", + "solana-system-program", + "solana-version", + "solana-vote", + "solana-vote-program", + "solana-zk-token-proof-program", + "solana-zk-token-sdk", + "static_assertions", + "strum", + "strum_macros", + "symlink", + "tar", + "tempfile", + "thiserror", + "zstd", +] + +[[package]] +name = "solana-sdk" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddb28240a4d5b202d0b14de75c6ee3227cff5764d2d64505a42a2a505da35d65" +dependencies = [ + "assert_matches", + "base64 0.21.5", + "bincode", + "bitflags 2.4.1", + "borsh 0.10.3", + "bs58", + "bytemuck", + "byteorder", + "chrono", + "derivation-path", + "digest 0.10.7", + "ed25519-dalek", + "ed25519-dalek-bip32", + "generic-array", + "hmac 0.12.1", + "itertools", + "js-sys", + "lazy_static", + "libsecp256k1", + "log", + "memmap2", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.6.1", + "pbkdf2 0.11.0", + "qstring", + "qualifier_attr", + "rand 0.7.3", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "serde_with", + "sha2 0.10.8", + "sha3 0.10.8", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-logger", + "solana-program", + "solana-sdk-macro", + "thiserror", + "uriparse", + "wasm-bindgen", +] + +[[package]] +name = "solana-sdk-macro" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3114364d2fe8c0238abd0b39c6ff1cfb180d8a30d5127b57a8d022a38dce648" +dependencies = [ + "bs58", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.39", +] + +[[package]] +name = "solana-send-transaction-service" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f47b1f20cd05231adb0015bb8054e4f3165b9fb78e46d84b73e55bbe707a32d6" +dependencies = [ + "crossbeam-channel", + "log", + "solana-client", + "solana-measure", + "solana-metrics", + "solana-runtime", + "solana-sdk", + "solana-tpu-client", +] + +[[package]] +name = "solana-stake-program" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "818586909cf835a75ce12db8bfb11853c794e835623c0df0b56937dbb8c8cd63" +dependencies = [ + "bincode", + "log", + "rustc_version", + "solana-config-program", + "solana-program-runtime", + "solana-sdk", + "solana-vote-program", +] + +[[package]] +name = "solana-storage-bigtable" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a4d586bf88086ed7966b4fd91d804ae8847951adbbf4d3b60a29217776fad16" +dependencies = [ + "backoff", + "bincode", + "bytes", + "bzip2", + "enum-iterator", + "flate2", + "futures 0.3.29", + "goauth", + "http", + "hyper", + "hyper-proxy", + "log", + "openssl", + "prost", + "prost-types", + "serde", + "serde_derive", + "smpl_jwt", + "solana-metrics", + "solana-sdk", + "solana-storage-proto", + "solana-transaction-status", + "thiserror", + "tokio", + "tonic", + "zstd", +] + +[[package]] +name = "solana-storage-proto" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f15d622c63f2c24978482f1d3c6d85ccb80c7012342b9ff0887d3ebea361f8c" +dependencies = [ + "bincode", + "bs58", + "prost", + "protobuf-src", + "serde", + "solana-account-decoder", + "solana-sdk", + "solana-transaction-status", + "tonic-build", +] + +[[package]] +name = "solana-streamer" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637c82d6281a4bfcb2f5db829419772e3cd3d3390d78c8c65722cd167803a182" +dependencies = [ + "async-channel", + "bytes", + "crossbeam-channel", + "futures-util", + "histogram", + "indexmap 2.1.0", + "itertools", + "libc", + "log", + "nix", + "pem", + "percentage", + "pkcs8", + "quinn", + "quinn-proto", + "rand 0.8.5", + "rcgen", + "rustls", + "solana-metrics", + "solana-perf", + "solana-sdk", + "thiserror", + "tokio", + "x509-parser", +] + +[[package]] +name = "solana-system-program" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "646a6192dfdcb08cfbc97358563f5abd0dc12be4532a3fc6b8bc436422cb4521" +dependencies = [ + "bincode", + "log", + "serde", + "serde_derive", + "solana-program-runtime", + "solana-sdk", +] + +[[package]] +name = "solana-thin-client" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "610b7d1078aa7f7ac0ac0a67096155e6798292979a55338ad67726b7c3d5d1f2" +dependencies = [ + "bincode", + "log", + "rayon", + "solana-connection-cache", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-sdk", +] + +[[package]] +name = "solana-tpu-client" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e2d658b274a44d020ef0b5db3d2a80bf36ca34b21c57350da3f94e46a16981" +dependencies = [ + "async-trait", + "bincode", + "futures-util", + "indexmap 2.1.0", + "indicatif", + "log", + "rayon", + "solana-connection-cache", + "solana-measure", + "solana-metrics", + "solana-pubsub-client", + "solana-rpc-client", + "solana-rpc-client-api", + "solana-sdk", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-transaction-status" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c13d2307ae468e8254b960d140e0722d862b3128d099629e891d679b4803177" +dependencies = [ + "Inflector", + "base64 0.21.5", + "bincode", + "borsh 0.10.3", + "bs58", + "lazy_static", + "log", + "serde", + "serde_derive", + "serde_json", + "solana-account-decoder", + "solana-sdk", + "spl-associated-token-account", + "spl-memo", + "spl-token", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "solana-turbine" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e53c449c805b0a215868b665f798173559ce7c69c35ff2092ce0eeea59e4a76f" +dependencies = [ + "bincode", + "bytes", + "crossbeam-channel", + "futures 0.3.29", + "itertools", + "log", + "lru", + "quinn", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rayon", + "rcgen", + "rustls", + "solana-entry", + "solana-gossip", + "solana-ledger", + "solana-measure", + "solana-metrics", + "solana-perf", + "solana-poh", + "solana-quic-client", + "solana-rayon-threadlimit", + "solana-rpc", + "solana-rpc-client-api", + "solana-runtime", + "solana-sdk", + "solana-streamer", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-udp-client" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "939c45de8568c86929b9363433f9a2953b1af5a1c7a702f86e32cb5604fe65f5" +dependencies = [ + "async-trait", + "solana-connection-cache", + "solana-net-utils", + "solana-sdk", + "solana-streamer", + "thiserror", + "tokio", +] + +[[package]] +name = "solana-version" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a080aebd217b1288b113d60ec154401533a92b5dc042ea73a084063afc2f360" +dependencies = [ + "log", + "rustc_version", + "semver", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk", +] + +[[package]] +name = "solana-vote" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc37ae1dd8c5a9740d119403f879081b35223c26f12c42b355ea199f88e31131" +dependencies = [ + "crossbeam-channel", + "itertools", + "log", + "rustc_version", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk", + "solana-vote-program", + "thiserror", +] + +[[package]] +name = "solana-vote-program" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a827394150b18c10062d832e5cadb8cca60c2e2ad674e89528127cf3b9a2dda5" +dependencies = [ + "bincode", + "log", + "num-derive 0.3.3", + "num-traits", + "rustc_version", + "serde", + "serde_derive", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-metrics", + "solana-program", + "solana-program-runtime", + "solana-sdk", + "thiserror", +] + +[[package]] +name = "solana-zk-token-proof-program" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f59a9d888d243a704121901526d283406f8956a1ff23ac209f667cd460cd8075" +dependencies = [ + "bytemuck", + "num-derive 0.3.3", + "num-traits", + "solana-program-runtime", + "solana-sdk", + "solana-zk-token-sdk", +] + +[[package]] +name = "solana-zk-token-sdk" +version = "1.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a71694b99cdf5e2a55f38ba27868234abf91b5e52cdb042b11c3c91399f9d8a" +dependencies = [ + "aes-gcm-siv", + "base64 0.21.5", + "bincode", + "bytemuck", + "byteorder", + "curve25519-dalek", + "getrandom 0.1.16", + "itertools", + "lazy_static", + "merlin", + "num-derive 0.3.3", + "num-traits", + "rand 0.7.3", + "serde", + "serde_json", + "sha3 0.9.1", + "solana-program", + "solana-sdk", + "subtle", + "thiserror", + "zeroize", +] + +[[package]] +name = "solana_rbpf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d457cc2ba742c120492a64b7fa60e22c575e891f6b55039f4d736568fb112a3" +dependencies = [ + "byteorder", + "combine", + "goblin", + "hash32", + "libc", + "log", + "rand 0.8.5", + "rustc-demangle", + "scroll", + "thiserror", + "winapi 0.3.9", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "spl-associated-token-account" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385e31c29981488f2820b2022d8e731aae3b02e6e18e2fd854e4c9a94dc44fc3" +dependencies = [ + "assert_matches", + "borsh 0.10.3", + "num-derive 0.4.1", + "num-traits", + "solana-program", + "spl-token", + "spl-token-2022", + "thiserror", +] + +[[package]] +name = "spl-discriminator" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cce5d563b58ef1bb2cdbbfe0dfb9ffdc24903b10ae6a4df2d8f425ece375033f" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator-derive", +] + +[[package]] +name = "spl-discriminator-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fadbefec4f3c678215ca72bd71862697bb06b41fd77c0088902dd3203354387b" +dependencies = [ + "quote", + "spl-discriminator-syn", + "syn 2.0.39", +] + +[[package]] +name = "spl-discriminator-syn" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e5f2044ca42c8938d54d1255ce599c79a1ffd86b677dfab695caa20f9ffc3f2" +dependencies = [ + "proc-macro2", + "quote", + "sha2 0.10.8", + "syn 2.0.39", + "thiserror", +] + +[[package]] +name = "spl-memo" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f180b03318c3dbab3ef4e1e4d46d5211ae3c780940dd0a28695aba4b59a75a" +dependencies = [ + "solana-program", +] + +[[package]] +name = "spl-pod" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2881dddfca792737c0706fa0175345ab282b1b0879c7d877bad129645737c079" +dependencies = [ + "borsh 0.10.3", + "bytemuck", + "solana-program", + "solana-zk-token-sdk", + "spl-program-error", +] + +[[package]] +name = "spl-program-error" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "249e0318493b6bcf27ae9902600566c689b7dfba9f1bdff5893e92253374e78c" +dependencies = [ + "num-derive 0.4.1", + "num-traits", + "solana-program", + "spl-program-error-derive", + "thiserror", +] + +[[package]] +name = "spl-program-error-derive" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5269c8e868da17b6552ef35a51355a017bd8e0eae269c201fef830d35fa52c" +dependencies = [ + "proc-macro2", + "quote", + "sha2 0.10.8", + "syn 2.0.39", +] + +[[package]] +name = "spl-tlv-account-resolution" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "062e148d3eab7b165582757453632ffeef490c02c86a48bfdb4988f63eefb3b9" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] + +[[package]] +name = "spl-token" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08459ba1b8f7c1020b4582c4edf0f5c7511a5e099a7a97570c9698d4f2337060" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.6.1", + "solana-program", + "thiserror", +] + +[[package]] +name = "spl-token-2022" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4abf34a65ba420584a0c35f3903f8d727d1f13ababbdc3f714c6b065a686e86" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.4.1", + "num-traits", + "num_enum 0.7.1", + "solana-program", + "solana-zk-token-sdk", + "spl-memo", + "spl-pod", + "spl-token", + "spl-token-metadata-interface", + "spl-transfer-hook-interface", + "spl-type-length-value", + "thiserror", +] + +[[package]] +name = "spl-token-metadata-interface" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f" +dependencies = [ + "borsh 0.10.3", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", +] + +[[package]] +name = "spl-transfer-hook-interface" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "051d31803f873cabe71aec3c1b849f35248beae5d19a347d93a5c9cccc5d5a9b" +dependencies = [ + "arrayref", + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-tlv-account-resolution", + "spl-type-length-value", +] + +[[package]] +name = "spl-type-length-value" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a468e6f6371f9c69aae760186ea9f1a01c2908351b06a5e0026d21cfc4d7ecac" +dependencies = [ + "bytemuck", + "solana-program", + "spl-discriminator", + "spl-pod", + "spl-program-error", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stream-cancel" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0a9eb2715209fb8cc0d942fcdff45674bfc9f0090a0d897e85a22955ad159b" +dependencies = [ + "futures-core", + "pin-project", + "tokio", +] + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "symlink" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" + +[[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.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "sys-info" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b3a0d0aba8bf96a0e1ddfdc352fc53b3df7f39318c71854910c3c4b024ae52c" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "sysctl" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225e483f02d0ad107168dc57381a8a40c3aeea6abe47f37506931f861643cfa8" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "libc", + "thiserror", + "walkdir", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tar" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if 1.0.0", + "fastrand", + "redox_syscall 0.4.1", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "termcolor" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + +[[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.39", +] + +[[package]] +name = "time" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +dependencies = [ + "deranged", + "itoa", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +dependencies = [ + "time-core", +] + +[[package]] +name = "tiny-bip39" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +dependencies = [ + "anyhow", + "hmac 0.8.1", + "once_cell", + "pbkdf2 0.4.0", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.9", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + +[[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 = "tokio" +version = "1.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot 0.12.1", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.5.5", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls", + "tokio", + "tokio-rustls", + "tungstenite", + "webpki-roots 0.25.3", +] + +[[package]] +name = "tokio-util" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tonic" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64 0.21.5", + "bytes", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-timeout", + "percent-encoding 2.3.1", + "pin-project", + "prost", + "rustls-pemfile", + "tokio", + "tokio-rustls", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tonic-build" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07" +dependencies = [ + "prettyplease 0.1.25", + "proc-macro2", + "prost-build", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand 0.8.5", + "slab", + "tokio", + "tokio-util 0.7.10", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "trees" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de5f738ceab88e2491a94ddc33c3feeadfa95fedc60363ef110845df12f3878" + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.8.5", + "rustls", + "sha1", + "thiserror", + "url 2.5.0", + "utf-8", + "webpki-roots 0.24.0", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +dependencies = [ + "void", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "uriparse" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff" +dependencies = [ + "fnv", + "lazy_static", +] + +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +dependencies = [ + "idna 0.1.5", + "matches", + "percent-encoding 1.0.1", +] + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna 0.5.0", + "percent-encoding 2.3.1", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" + +[[package]] +name = "web-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" +dependencies = [ + "rustls-webpki", +] + +[[package]] +name = "webpki-roots" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" + +[[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 = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e87b8dfbe3baffbe687eef2e164e32286eff31a5ee16463ce03d991643ec94" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if 1.0.0", + "windows-sys 0.48.0", +] + +[[package]] +name = "x509-parser" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" +dependencies = [ + "asn1-rs", + "base64 0.13.1", + "data-encoding", + "der-parser", + "lazy_static", + "nom", + "oid-registry", + "rusticata-macros", + "thiserror", + "time", +] + +[[package]] +name = "xattr" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985" +dependencies = [ + "libc", +] + +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time", +] + +[[package]] +name = "zerocopy" +version = "0.7.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d075cf85bbb114e933343e087b92f2146bac0d55b534cbb8188becf0039948e" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86cd5ca076997b97ef09d3ad65efe811fa68c9e874cb636ccb211223a813b0c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "zeroize" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.9+zstd.1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/geyser-plugin-runner/demo-plugin/Cargo.toml b/geyser-plugin-runner/demo-plugin/Cargo.toml new file mode 100644 index 00000000..f31fe4ac --- /dev/null +++ b/geyser-plugin-runner/demo-plugin/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "demo-plugin" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +solana-geyser-plugin-interface = "1.17.7" + +[dev-dependencies] +libc = "0.2.134" +libloading = "0.8.1" +serial_test = "2.0.0" +socket2 = { version = "0.5.5", features = ["all"] } + +solana-account-decoder = { version = "1.17.3" } +solana-core = { version = "1.17.3" } +solana-local-cluster = { version = "1.17.3" } +solana-net-utils = { version = "1.17.3" } +solana-streamer = { version = "1.17.3" } +tempfile = "3.3.0" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[lib] +crate-type = ["cdylib", "rlib"] diff --git a/geyser-plugin-runner/demo-plugin/src/lib.rs b/geyser-plugin-runner/demo-plugin/src/lib.rs new file mode 100644 index 00000000..4af276a6 --- /dev/null +++ b/geyser-plugin-runner/demo-plugin/src/lib.rs @@ -0,0 +1,177 @@ +use solana_geyser_plugin_interface::geyser_plugin_interface::{ + GeyserPlugin, ReplicaAccountInfoVersions, ReplicaBlockInfoVersions, ReplicaEntryInfoVersions, + ReplicaTransactionInfoVersions, Result, SlotStatus, +}; + +#[no_mangle] +#[allow(improper_ctypes_definitions)] +/// # Safety +/// +/// This function returns the GeyserPluginPostgres pointer as trait GeyserPlugin. +pub unsafe extern "C" fn _create_plugin() -> *mut dyn GeyserPlugin { + let plugin = GeyserPluginDemo::new(); + let plugin: Box = Box::new(plugin); + Box::into_raw(plugin) +} + +#[derive(Default)] +pub struct GeyserPluginDemo {} + +impl GeyserPluginDemo { + pub fn new() -> Self { + Self::default() + } +} + +impl std::fmt::Debug for GeyserPluginDemo { + fn fmt(&self, _: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Ok(()) + } +} + +fn green_bg(s: &str) -> String { + // green BG, black FG + format!("\x1b[42;30m{}\x1b[0m", s) +} + +fn blue_bg(s: &str) -> String { + // blue BG, black FG + format!("\x1b[44;30m{}\x1b[0m", s) +} + +fn cyan_bg(s: &str) -> String { + // cyan BG, black FG + format!("\x1b[46;30m{}\x1b[0m", s) +} + +fn white_bg(s: &str) -> String { + // white BG, black FG + format!("\x1b[47;30m{}\x1b[0m", s) +} + +fn purple_bg(s: &str) -> String { + // purple BG, black FG + format!("\x1b[45;30m{}\x1b[0m", s) +} + +const BANNER: &str = "::plugin::"; + +impl GeyserPlugin for GeyserPluginDemo { + fn name(&self) -> &'static str { + "plugin::GeyserPluginDemo" + } + + fn on_load(&mut self, config_file: &str) -> Result<()> { + println!( + "{} Loading plugin: {:?} from config_file {:?}", + green_bg(BANNER), + self.name(), + config_file + ); + Ok(()) + } + + fn on_unload(&mut self) { + println!("{} Unloading plugin: {:?}", green_bg(BANNER), self.name()); + } + + fn notify_end_of_startup(&self) -> Result<()> { + println!( + "{} Notifying the end of startup for accounts notifications", + green_bg(BANNER), + ); + Ok(()) + } + + /// Check if the plugin is interested in account data + /// Default is true -- if the plugin is not interested in + /// account data, please return false. + fn account_data_notifications_enabled(&self) -> bool { + false + } + + /// Check if the plugin is interested in transaction data + fn transaction_notifications_enabled(&self) -> bool { + true + } + + fn entry_notifications_enabled(&self) -> bool { + true + } + + fn update_account( + &self, + _account: ReplicaAccountInfoVersions, + slot: u64, + _is_startup: bool, + ) -> Result<()> { + // NOTE: account updates are NOT supported in old-faithful. + println!("{} Updating account at slot {:?}", green_bg(BANNER), slot); + Ok(()) + } + + fn notify_entry(&self, _entry: ReplicaEntryInfoVersions) -> Result<()> { + println!( + "{} Received ENTRY: {:?}", + blue_bg(BANNER), + match _entry { + ReplicaEntryInfoVersions::V0_0_1(entry_info) => entry_info, + }, + ); + Ok(()) + } + + fn notify_transaction( + &self, + _transaction_info: ReplicaTransactionInfoVersions, + slot: u64, + ) -> Result<()> { + println!( + "{} Received TRANSACTION at slot {:?}, signature {:?}", + cyan_bg(BANNER), + slot, + match _transaction_info { + ReplicaTransactionInfoVersions::V0_0_1(transaction_info) => { + transaction_info.signature + } + ReplicaTransactionInfoVersions::V0_0_2(transaction_info) => { + transaction_info.signature + } + } + ); + Ok(()) + } + + fn update_slot_status( + &self, + slot: u64, + _parent: Option, + status: SlotStatus, + ) -> Result<()> { + println!( + "{} Updating slot {:?} with status {:?}", + purple_bg(BANNER), + slot, + status + ); + Ok(()) + } + + fn notify_block_metadata(&self, _block_info: ReplicaBlockInfoVersions) -> Result<()> { + println!( + "{} Notifying block metadata: slot {}, blocktime {:?}", + white_bg(BANNER), + match _block_info { + ReplicaBlockInfoVersions::V0_0_1(block_info) => block_info.slot, + ReplicaBlockInfoVersions::V0_0_2(block_info) => block_info.slot, + ReplicaBlockInfoVersions::V0_0_3(block_info) => block_info.slot, + }, + match _block_info { + ReplicaBlockInfoVersions::V0_0_1(block_info) => block_info.block_time, + ReplicaBlockInfoVersions::V0_0_2(block_info) => block_info.block_time, + ReplicaBlockInfoVersions::V0_0_3(block_info) => block_info.block_time, + }, + ); + Ok(()) + } +} diff --git a/geyser-plugin-runner/demo-plugin/src/plugin-config.json b/geyser-plugin-runner/demo-plugin/src/plugin-config.json new file mode 100644 index 00000000..d6cc6e39 --- /dev/null +++ b/geyser-plugin-runner/demo-plugin/src/plugin-config.json @@ -0,0 +1,14 @@ +{ + "libpath": "/path/to/demo-plugin/target/x86_64-unknown-linux-gnu/release/libdemo_plugin.so", + "host": "demo", + "user": "solana", + "port": 5433, + "threads": 20, + "batch_size": 20, + "panic_on_db_errors": true, + "accounts_selector": { + "accounts": [ + "*" + ] + } +} diff --git a/geyser-plugin-runner/src/README.md b/geyser-plugin-runner/src/README.md new file mode 100644 index 00000000..433134c5 --- /dev/null +++ b/geyser-plugin-runner/src/README.md @@ -0,0 +1,6 @@ + +# + +```bash +cargo build --release --lib --target=x86_64-unknown-linux-gnu --target-dir=target +``` diff --git a/geyser-plugin-runner/src/block.rs b/geyser-plugin-runner/src/block.rs new file mode 100644 index 00000000..d22fd412 --- /dev/null +++ b/geyser-plugin-runner/src/block.rs @@ -0,0 +1,1256 @@ +use cid::Cid; +use serde_cbor; +use serde_json; + +use std::error::Error; + +use std::vec::Vec; + +use crate::node::Kind; + +// type ( +// List__Shredding []Shredding +// Block struct { +// Kind int +// Slot int +// Shredding List__Shredding +// Entries List__Link +// Meta SlotMeta +// Rewards datamodel.Link +// } +// ) +#[derive(Clone, PartialEq, Eq, Hash, Debug)] +pub struct Block { + pub kind: u64, + pub slot: u64, + pub shredding: Vec, + pub entries: Vec, + pub meta: SlotMeta, + pub rewards: Cid, +} + +impl Block { + pub fn from_bytes(data: Vec) -> Result> { + let decoded_data: serde_cbor::Value = serde_cbor::from_slice(&data).unwrap(); + let block = Block::from_cbor(decoded_data)?; + return Ok(block); + } + + // from serde_cbor::Value + pub fn from_cbor(val: serde_cbor::Value) -> Result> { + let mut block = Block { + kind: 0, + slot: 0, + shredding: vec![], + entries: vec![], + meta: SlotMeta { + parent_slot: 0, + blocktime: 0, + block_height: None, + }, + rewards: Cid::try_from( + vec![ + 1, 113, 18, 32, 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, 131, + 220, 232, 143, 20, 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, 38, 84, + 106, 225, + ] + .as_slice(), + ) + .unwrap(), + }; + + if let serde_cbor::Value::Array(array) = val { + // println!("Kind: {:?}", array[0]); + if let serde_cbor::Value::Integer(kind) = array[0] { + // println!("Kind: {:?}", Kind::from_u64(kind as u64).unwrap().to_string()); + block.kind = kind as u64; + + if kind as u64 != Kind::Block as u64 { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!( + "Wrong kind for Block. Expected {:?}, got {:?}", + Kind::Block, + kind + ), + ))); + } + } + if let serde_cbor::Value::Integer(slot) = array[1] { + block.slot = slot as u64; + } + + if let serde_cbor::Value::Array(shredding) = &array[2] { + for shred in shredding { + if let serde_cbor::Value::Array(shred) = shred { + block + .shredding + .push(Shredding::from_cbor(serde_cbor::Value::Array( + shred.clone(), + ))); + } + } + } + + if let serde_cbor::Value::Array(entries) = &array[3] { + for entry in entries { + if let serde_cbor::Value::Bytes(entry) = entry { + block + .entries + .push(Cid::try_from(entry[1..].to_vec()).unwrap()); + } + } + } + + if let serde_cbor::Value::Array(meta) = &array[4] { + block.meta = SlotMeta::from_cbor(serde_cbor::Value::Array(meta.clone())); + } + + if let serde_cbor::Value::Bytes(rewards) = &array[5] { + block.rewards = Cid::try_from(rewards[1..].to_vec()).unwrap(); + } + } + return Ok(block); + } + + pub fn to_json(&self) -> serde_json::Value { + let mut shredding = vec![]; + for shred in &self.shredding { + shredding.push(shred.to_json()); + } + + let mut entries = vec![]; + for entry in &self.entries { + entries.push(serde_json::json!({ + "/": entry.to_string() + })); + } + + let mut map = serde_json::Map::new(); + map.insert("kind".to_string(), serde_json::Value::from(self.kind)); + map.insert("slot".to_string(), serde_json::Value::from(self.slot)); + map.insert("shredding".to_string(), serde_json::Value::from(shredding)); + map.insert("entries".to_string(), serde_json::Value::from(entries)); + map.insert( + "meta".to_string(), + serde_json::Value::from(self.meta.to_json()), + ); + map.insert( + "rewards".to_string(), + serde_json::Value::from(serde_json::json!({ + "/": self.rewards.to_string() + })), + ); + + return serde_json::Value::from(map); + } +} + +#[cfg(test)] +mod block_tests { + use super::*; + + #[test] + fn test_block() { + let block = Block { + kind: 2, + slot: 1, + shredding: vec![Shredding { + entry_end_idx: 1, + shred_end_idx: 1, + }], + entries: vec![Cid::try_from( + vec![ + 1, 113, 18, 32, 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, 131, + 220, 232, 143, 20, 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, 38, 84, + 106, 225, + ] + .as_slice(), + ) + .unwrap()], + meta: SlotMeta { + parent_slot: 1, + blocktime: 1, + block_height: Some(1), + }, + rewards: Cid::try_from( + vec![ + 1, 113, 18, 32, 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, 131, + 220, 232, 143, 20, 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, 38, 84, + 106, 225, + ] + .as_slice(), + ) + .unwrap(), + }; + let json = block.to_json(); + + let wanted_json = serde_json::json!({ + "kind": 2, + "slot": 1, + "shredding": [ + { + "entry_end_idx": 1, + "shred_end_idx": 1 + } + ], + "entries": [ + { + "/":"bafyreibysst7x3lvzdrllbspoob5z2epcrb6bmzqqlcxxysvku4cmvdk4e" + } + ], + "meta": { + "parent_slot": 1, + "blocktime": 1, + "block_height": 1 + }, + "rewards":{ + "/":"bafyreibysst7x3lvzdrllbspoob5z2epcrb6bmzqqlcxxysvku4cmvdk4e" + } + }); + + assert_eq!(json, wanted_json); + } + + #[test] + fn test_decoding() { + { + let raw = vec![ + 134, 2, 9, 152, 67, 130, 0, 0, 130, 1, 1, 130, 2, 2, 130, 3, 3, 130, 4, 4, 130, 5, + 5, 130, 6, 6, 130, 7, 7, 130, 8, 8, 130, 9, 9, 130, 10, 10, 130, 11, 11, 130, 12, + 12, 130, 13, 13, 130, 14, 14, 130, 15, 15, 130, 16, 16, 130, 17, 17, 130, 18, 18, + 130, 19, 19, 130, 20, 20, 130, 21, 21, 130, 22, 22, 130, 23, 23, 130, 24, 24, 24, + 24, 130, 24, 25, 24, 25, 130, 24, 26, 24, 26, 130, 24, 27, 24, 27, 130, 24, 28, 24, + 28, 130, 24, 29, 24, 29, 130, 24, 30, 24, 30, 130, 24, 31, 24, 31, 130, 24, 32, 24, + 32, 130, 24, 33, 24, 33, 130, 24, 34, 24, 34, 130, 24, 35, 24, 35, 130, 24, 36, 24, + 36, 130, 24, 37, 24, 37, 130, 24, 38, 24, 38, 130, 24, 39, 24, 39, 130, 24, 40, 24, + 40, 130, 24, 41, 24, 41, 130, 24, 42, 24, 42, 130, 24, 43, 24, 43, 130, 24, 44, 24, + 44, 130, 24, 45, 24, 45, 130, 24, 46, 24, 46, 130, 24, 47, 24, 47, 130, 24, 48, 24, + 48, 130, 24, 49, 24, 49, 130, 24, 50, 24, 50, 130, 24, 51, 24, 51, 130, 24, 52, 24, + 52, 130, 24, 53, 24, 53, 130, 24, 54, 24, 54, 130, 24, 55, 24, 55, 130, 24, 56, 24, + 56, 130, 24, 57, 24, 57, 130, 24, 58, 24, 58, 130, 24, 59, 24, 59, 130, 24, 60, 24, + 60, 130, 24, 61, 24, 61, 130, 24, 62, 24, 62, 130, 24, 63, 24, 63, 130, 24, 64, 24, + 64, 130, 24, 65, 24, 65, 130, 24, 66, 24, 66, 152, 67, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 142, 112, 223, 218, 72, 167, 75, 214, 119, 159, 221, 221, 95, 85, 63, 18, + 215, 24, 68, 99, 59, 85, 68, 224, 9, 62, 238, 241, 7, 64, 192, 109, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 222, 44, 58, 205, 116, 63, 223, 136, 103, 18, 244, 73, 229, + 58, 156, 137, 74, 122, 206, 161, 158, 71, 170, 178, 214, 209, 227, 140, 42, 40, + 172, 110, 216, 42, 88, 37, 0, 1, 113, 18, 32, 191, 90, 248, 22, 27, 109, 170, 180, + 221, 154, 210, 250, 216, 65, 14, 204, 165, 180, 73, 97, 83, 8, 89, 55, 33, 52, 166, + 139, 162, 230, 13, 30, 216, 42, 88, 37, 0, 1, 113, 18, 32, 230, 237, 139, 160, 103, + 51, 163, 5, 237, 132, 47, 164, 232, 13, 60, 202, 168, 244, 154, 75, 226, 4, 201, + 106, 33, 126, 74, 69, 243, 62, 49, 2, 216, 42, 88, 37, 0, 1, 113, 18, 32, 38, 243, + 249, 67, 34, 234, 14, 98, 245, 145, 15, 160, 22, 73, 104, 213, 81, 184, 99, 161, + 131, 82, 170, 37, 123, 209, 243, 135, 145, 51, 65, 178, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 41, 157, 189, 75, 207, 215, 80, 168, 245, 87, 178, 171, 45, 31, 15, 8, 215, + 15, 120, 125, 176, 241, 30, 157, 154, 200, 197, 10, 8, 158, 129, 207, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 187, 213, 183, 163, 192, 193, 211, 142, 109, 46, 56, 41, + 181, 145, 13, 103, 212, 186, 30, 19, 149, 216, 120, 136, 208, 209, 125, 178, 84, + 252, 80, 190, 216, 42, 88, 37, 0, 1, 113, 18, 32, 126, 145, 212, 103, 128, 117, 35, + 120, 73, 130, 186, 30, 12, 87, 12, 112, 66, 232, 141, 83, 173, 119, 86, 37, 40, 44, + 136, 163, 217, 238, 73, 1, 216, 42, 88, 37, 0, 1, 113, 18, 32, 253, 123, 185, 68, + 243, 220, 77, 248, 192, 137, 161, 48, 150, 231, 241, 51, 15, 91, 75, 5, 214, 39, + 69, 1, 190, 31, 137, 66, 138, 16, 157, 9, 216, 42, 88, 37, 0, 1, 113, 18, 32, 222, + 42, 204, 102, 8, 90, 149, 178, 78, 3, 136, 116, 98, 29, 193, 195, 30, 106, 237, 83, + 201, 13, 125, 7, 150, 16, 151, 4, 215, 15, 129, 60, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 129, 19, 114, 187, 189, 37, 48, 79, 64, 88, 50, 65, 20, 1, 184, 132, 104, 23, + 45, 47, 199, 85, 12, 169, 85, 11, 61, 227, 166, 8, 172, 54, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 100, 89, 51, 50, 44, 192, 88, 117, 164, 141, 191, 64, 185, 174, 3, + 226, 60, 146, 104, 125, 107, 151, 42, 8, 46, 182, 38, 212, 7, 110, 169, 220, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 167, 186, 233, 29, 120, 195, 145, 42, 32, 164, 3, + 249, 242, 107, 252, 36, 113, 183, 12, 117, 11, 166, 97, 1, 110, 75, 82, 2, 44, 127, + 103, 186, 216, 42, 88, 37, 0, 1, 113, 18, 32, 57, 23, 172, 97, 230, 155, 0, 168, + 90, 59, 232, 55, 56, 63, 253, 46, 66, 132, 143, 135, 129, 177, 195, 203, 123, 102, + 71, 18, 201, 209, 87, 170, 216, 42, 88, 37, 0, 1, 113, 18, 32, 52, 49, 202, 86, 44, + 134, 175, 19, 161, 64, 87, 138, 213, 236, 236, 49, 69, 68, 205, 80, 222, 42, 48, + 229, 243, 135, 80, 21, 94, 119, 184, 239, 216, 42, 88, 37, 0, 1, 113, 18, 32, 5, + 247, 30, 254, 223, 250, 48, 234, 133, 205, 238, 162, 210, 123, 59, 125, 20, 213, + 83, 150, 181, 2, 67, 215, 252, 137, 64, 22, 110, 241, 71, 30, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 149, 253, 132, 66, 75, 81, 106, 175, 36, 84, 140, 115, 50, 168, + 202, 64, 209, 38, 168, 158, 152, 3, 187, 224, 60, 42, 183, 113, 143, 197, 62, 67, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 180, 228, 42, 116, 143, 156, 86, 53, 148, 144, + 14, 233, 128, 192, 54, 45, 43, 48, 20, 178, 23, 44, 88, 35, 148, 203, 88, 113, 38, + 94, 185, 75, 216, 42, 88, 37, 0, 1, 113, 18, 32, 150, 76, 138, 71, 216, 10, 225, + 103, 247, 147, 140, 71, 102, 50, 20, 95, 72, 215, 217, 72, 141, 241, 11, 255, 71, + 20, 180, 23, 230, 252, 157, 211, 216, 42, 88, 37, 0, 1, 113, 18, 32, 224, 97, 149, + 29, 111, 43, 27, 8, 128, 96, 200, 95, 219, 223, 70, 55, 120, 3, 42, 22, 94, 58, + 160, 69, 195, 185, 72, 205, 18, 152, 205, 176, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 57, 112, 68, 7, 123, 67, 97, 103, 227, 160, 214, 81, 206, 255, 123, 156, 187, 177, + 33, 101, 191, 134, 63, 200, 41, 40, 209, 118, 204, 55, 144, 67, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 238, 69, 207, 7, 233, 117, 207, 4, 225, 248, 215, 162, 254, 45, 8, + 131, 19, 20, 152, 155, 159, 62, 142, 208, 164, 246, 221, 25, 28, 97, 97, 209, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 111, 64, 66, 31, 214, 131, 232, 53, 66, 112, 1, 115, + 58, 201, 41, 108, 213, 252, 253, 239, 128, 67, 238, 14, 21, 115, 42, 200, 102, 110, + 7, 35, 216, 42, 88, 37, 0, 1, 113, 18, 32, 188, 174, 54, 151, 21, 158, 226, 199, + 27, 109, 3, 32, 232, 13, 88, 131, 36, 243, 91, 95, 220, 123, 186, 122, 64, 111, + 142, 235, 139, 228, 4, 78, 216, 42, 88, 37, 0, 1, 113, 18, 32, 187, 152, 69, 125, + 29, 74, 232, 247, 97, 175, 164, 181, 253, 66, 208, 216, 90, 40, 61, 201, 135, 9, + 27, 165, 69, 142, 218, 226, 51, 123, 158, 97, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 234, 98, 199, 95, 219, 46, 130, 100, 75, 180, 228, 145, 130, 237, 78, 191, 209, 9, + 3, 193, 124, 78, 119, 240, 0, 189, 143, 92, 223, 119, 236, 0, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 200, 117, 71, 254, 24, 62, 146, 234, 45, 109, 34, 155, 39, 215, + 139, 234, 78, 183, 137, 178, 32, 125, 50, 161, 170, 119, 217, 201, 220, 195, 210, + 96, 216, 42, 88, 37, 0, 1, 113, 18, 32, 73, 235, 53, 110, 131, 8, 102, 2, 127, 230, + 137, 52, 137, 85, 169, 8, 188, 185, 193, 137, 161, 183, 134, 118, 198, 232, 213, + 69, 100, 72, 110, 241, 216, 42, 88, 37, 0, 1, 113, 18, 32, 70, 203, 245, 218, 177, + 27, 128, 241, 138, 84, 175, 184, 35, 18, 4, 147, 84, 62, 193, 31, 149, 255, 11, + 181, 192, 110, 130, 233, 153, 145, 48, 223, 216, 42, 88, 37, 0, 1, 113, 18, 32, 58, + 235, 107, 195, 10, 103, 106, 255, 156, 196, 8, 220, 219, 141, 155, 170, 160, 68, + 19, 167, 19, 225, 219, 59, 21, 156, 203, 0, 210, 44, 201, 128, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 42, 254, 9, 4, 50, 84, 189, 205, 235, 223, 174, 117, 75, 254, 189, + 223, 229, 193, 181, 202, 84, 115, 131, 98, 92, 185, 21, 12, 128, 91, 247, 43, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 174, 47, 130, 64, 103, 169, 126, 186, 24, 110, 243, + 43, 169, 150, 87, 109, 74, 56, 163, 209, 14, 89, 244, 174, 102, 164, 93, 80, 11, + 162, 127, 13, 216, 42, 88, 37, 0, 1, 113, 18, 32, 4, 110, 4, 201, 102, 75, 173, + 233, 189, 245, 49, 27, 41, 97, 21, 122, 95, 123, 193, 190, 249, 52, 177, 182, 206, + 73, 202, 35, 79, 208, 131, 204, 216, 42, 88, 37, 0, 1, 113, 18, 32, 251, 150, 119, + 179, 54, 215, 18, 141, 45, 55, 253, 46, 40, 60, 6, 168, 156, 40, 81, 97, 224, 23, + 107, 17, 176, 113, 217, 198, 12, 110, 218, 229, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 27, 56, 24, 31, 64, 167, 101, 145, 43, 99, 198, 176, 105, 170, 148, 179, 13, 116, + 112, 161, 129, 125, 128, 200, 192, 52, 191, 13, 126, 100, 112, 148, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 17, 10, 10, 215, 134, 196, 216, 102, 56, 205, 69, 82, 130, + 163, 251, 128, 169, 173, 3, 211, 33, 3, 238, 181, 122, 238, 120, 113, 97, 70, 199, + 99, 216, 42, 88, 37, 0, 1, 113, 18, 32, 237, 123, 204, 246, 34, 231, 16, 91, 211, + 15, 208, 97, 180, 11, 52, 189, 245, 41, 240, 50, 2, 12, 125, 120, 53, 186, 233, 91, + 54, 17, 38, 149, 216, 42, 88, 37, 0, 1, 113, 18, 32, 71, 142, 165, 172, 99, 10, 26, + 145, 252, 179, 149, 202, 37, 0, 172, 86, 124, 111, 231, 84, 117, 227, 246, 7, 25, + 161, 94, 209, 145, 59, 56, 92, 216, 42, 88, 37, 0, 1, 113, 18, 32, 166, 215, 77, + 118, 191, 128, 29, 103, 204, 171, 89, 172, 154, 190, 11, 61, 236, 65, 174, 175, + 154, 183, 98, 248, 24, 105, 28, 14, 102, 52, 154, 48, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 61, 113, 170, 240, 141, 6, 123, 196, 179, 199, 85, 202, 244, 164, 240, 73, + 214, 239, 120, 220, 190, 170, 246, 237, 21, 181, 165, 243, 52, 145, 50, 31, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 210, 6, 19, 252, 30, 228, 240, 216, 151, 30, 238, + 110, 232, 138, 226, 161, 13, 76, 16, 112, 92, 225, 77, 112, 147, 219, 80, 157, 179, + 166, 32, 46, 216, 42, 88, 37, 0, 1, 113, 18, 32, 52, 187, 78, 14, 51, 155, 212, + 239, 28, 10, 109, 255, 248, 151, 42, 194, 126, 23, 219, 193, 74, 83, 187, 173, 79, + 65, 77, 246, 166, 8, 115, 174, 216, 42, 88, 37, 0, 1, 113, 18, 32, 178, 156, 206, + 197, 235, 161, 91, 255, 135, 191, 3, 55, 182, 181, 195, 35, 35, 148, 173, 90, 2, + 214, 25, 199, 116, 114, 166, 70, 195, 23, 12, 166, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 123, 139, 182, 186, 35, 12, 35, 2, 128, 170, 49, 41, 206, 192, 65, 40, 155, 16, + 26, 230, 215, 43, 47, 172, 235, 74, 198, 248, 20, 163, 132, 60, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 167, 176, 224, 66, 172, 151, 119, 165, 11, 96, 114, 201, 45, 206, + 176, 18, 164, 125, 108, 166, 25, 157, 91, 143, 194, 196, 163, 148, 132, 17, 132, + 89, 216, 42, 88, 37, 0, 1, 113, 18, 32, 203, 127, 128, 210, 101, 109, 57, 82, 7, + 114, 7, 91, 37, 254, 29, 197, 147, 246, 10, 240, 200, 31, 105, 2, 66, 145, 216, + 143, 225, 126, 138, 141, 216, 42, 88, 37, 0, 1, 113, 18, 32, 18, 13, 7, 205, 8, + 128, 9, 231, 61, 187, 118, 223, 154, 75, 189, 205, 156, 44, 148, 254, 102, 227, + 205, 184, 159, 122, 29, 142, 12, 223, 8, 206, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 5, 170, 131, 140, 66, 52, 31, 153, 17, 139, 250, 148, 178, 145, 79, 213, 249, 219, + 120, 154, 240, 81, 20, 156, 206, 95, 110, 42, 140, 180, 237, 125, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 214, 157, 222, 158, 17, 235, 127, 230, 232, 60, 224, 107, 250, + 118, 138, 76, 173, 78, 59, 53, 27, 60, 201, 221, 24, 15, 9, 176, 213, 87, 170, 254, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 156, 137, 136, 61, 164, 161, 151, 133, 2, 65, + 181, 28, 250, 233, 85, 71, 103, 225, 136, 245, 202, 81, 205, 42, 185, 146, 223, 13, + 207, 36, 153, 89, 216, 42, 88, 37, 0, 1, 113, 18, 32, 2, 120, 83, 19, 218, 40, 184, + 108, 244, 186, 234, 225, 21, 15, 1, 24, 179, 238, 198, 133, 187, 25, 234, 213, 202, + 36, 233, 23, 42, 158, 95, 244, 216, 42, 88, 37, 0, 1, 113, 18, 32, 250, 18, 165, + 159, 37, 23, 14, 27, 105, 174, 76, 62, 29, 146, 188, 87, 190, 61, 139, 141, 173, + 255, 233, 23, 184, 116, 122, 174, 225, 162, 188, 220, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 76, 174, 108, 234, 137, 243, 117, 254, 234, 82, 251, 101, 44, 233, 88, 31, + 249, 104, 13, 213, 165, 231, 87, 24, 192, 176, 139, 247, 1, 130, 204, 253, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 111, 99, 204, 160, 107, 77, 144, 34, 129, 148, 225, 75, + 1, 233, 33, 158, 127, 16, 53, 149, 207, 113, 153, 157, 174, 180, 160, 18, 37, 22, + 229, 12, 216, 42, 88, 37, 0, 1, 113, 18, 32, 115, 178, 238, 147, 6, 170, 64, 14, + 91, 37, 140, 110, 211, 187, 157, 189, 162, 191, 198, 198, 193, 124, 71, 154, 36, + 122, 36, 244, 189, 120, 93, 148, 216, 42, 88, 37, 0, 1, 113, 18, 32, 33, 131, 47, + 150, 208, 179, 218, 31, 40, 77, 141, 70, 134, 83, 59, 6, 111, 36, 43, 252, 97, 218, + 77, 149, 27, 39, 122, 91, 190, 148, 60, 18, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 227, 83, 22, 175, 13, 39, 47, 83, 7, 248, 45, 60, 165, 133, 7, 169, 35, 110, 131, + 239, 133, 213, 94, 195, 203, 161, 173, 160, 162, 18, 74, 134, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 120, 254, 54, 81, 56, 46, 139, 240, 186, 184, 114, 38, 36, 38, 23, + 172, 69, 223, 238, 175, 59, 162, 225, 242, 64, 198, 175, 131, 132, 220, 156, 118, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 23, 138, 118, 75, 69, 204, 52, 177, 68, 125, + 170, 58, 246, 63, 72, 184, 200, 117, 177, 51, 40, 163, 36, 214, 71, 102, 64, 172, + 162, 117, 23, 55, 216, 42, 88, 37, 0, 1, 113, 18, 32, 130, 168, 161, 182, 131, 200, + 99, 15, 197, 125, 233, 217, 200, 203, 246, 39, 201, 115, 173, 229, 128, 127, 224, + 143, 73, 49, 239, 145, 71, 54, 24, 9, 216, 42, 88, 37, 0, 1, 113, 18, 32, 108, 202, + 24, 19, 2, 115, 66, 161, 228, 224, 141, 239, 184, 170, 55, 175, 141, 184, 93, 172, + 194, 223, 242, 11, 186, 53, 156, 89, 130, 125, 127, 34, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 176, 122, 175, 15, 112, 202, 24, 10, 220, 236, 188, 59, 185, 1, 155, 174, + 168, 121, 81, 183, 106, 236, 252, 30, 124, 194, 4, 24, 133, 115, 9, 239, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 44, 242, 54, 30, 20, 235, 97, 110, 45, 103, 237, 31, + 111, 220, 51, 2, 7, 29, 251, 12, 231, 137, 44, 3, 53, 167, 190, 212, 248, 21, 32, + 20, 216, 42, 88, 37, 0, 1, 113, 18, 32, 155, 19, 144, 21, 40, 30, 161, 117, 209, + 52, 207, 22, 157, 89, 140, 151, 26, 0, 6, 173, 2, 53, 219, 153, 146, 42, 45, 222, + 75, 0, 254, 116, 216, 42, 88, 37, 0, 1, 113, 18, 32, 167, 159, 144, 28, 221, 200, + 5, 102, 79, 55, 233, 5, 176, 167, 205, 152, 70, 50, 32, 82, 232, 224, 36, 80, 234, + 203, 205, 213, 169, 108, 113, 167, 216, 42, 88, 37, 0, 1, 113, 18, 32, 232, 44, + 255, 23, 170, 107, 235, 86, 160, 91, 215, 88, 189, 111, 57, 241, 149, 58, 74, 104, + 143, 65, 92, 40, 247, 22, 214, 98, 40, 172, 233, 96, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 56, 133, 167, 54, 128, 82, 53, 103, 203, 183, 120, 225, 62, 216, 196, 16, + 104, 6, 236, 116, 93, 133, 170, 228, 44, 66, 64, 120, 152, 240, 189, 74, 131, 8, 0, + 246, 216, 42, 69, 0, 1, 85, 0, 0, + ]; + let as_json_raw = serde_json::json!({"kind":2,"slot":9,"shredding":[{"entry_end_idx":0,"shred_end_idx":0},{"entry_end_idx":1,"shred_end_idx":1},{"entry_end_idx":2,"shred_end_idx":2},{"entry_end_idx":3,"shred_end_idx":3},{"entry_end_idx":4,"shred_end_idx":4},{"entry_end_idx":5,"shred_end_idx":5},{"entry_end_idx":6,"shred_end_idx":6},{"entry_end_idx":7,"shred_end_idx":7},{"entry_end_idx":8,"shred_end_idx":8},{"entry_end_idx":9,"shred_end_idx":9},{"entry_end_idx":10,"shred_end_idx":10},{"entry_end_idx":11,"shred_end_idx":11},{"entry_end_idx":12,"shred_end_idx":12},{"entry_end_idx":13,"shred_end_idx":13},{"entry_end_idx":14,"shred_end_idx":14},{"entry_end_idx":15,"shred_end_idx":15},{"entry_end_idx":16,"shred_end_idx":16},{"entry_end_idx":17,"shred_end_idx":17},{"entry_end_idx":18,"shred_end_idx":18},{"entry_end_idx":19,"shred_end_idx":19},{"entry_end_idx":20,"shred_end_idx":20},{"entry_end_idx":21,"shred_end_idx":21},{"entry_end_idx":22,"shred_end_idx":22},{"entry_end_idx":23,"shred_end_idx":23},{"entry_end_idx":24,"shred_end_idx":24},{"entry_end_idx":25,"shred_end_idx":25},{"entry_end_idx":26,"shred_end_idx":26},{"entry_end_idx":27,"shred_end_idx":27},{"entry_end_idx":28,"shred_end_idx":28},{"entry_end_idx":29,"shred_end_idx":29},{"entry_end_idx":30,"shred_end_idx":30},{"entry_end_idx":31,"shred_end_idx":31},{"entry_end_idx":32,"shred_end_idx":32},{"entry_end_idx":33,"shred_end_idx":33},{"entry_end_idx":34,"shred_end_idx":34},{"entry_end_idx":35,"shred_end_idx":35},{"entry_end_idx":36,"shred_end_idx":36},{"entry_end_idx":37,"shred_end_idx":37},{"entry_end_idx":38,"shred_end_idx":38},{"entry_end_idx":39,"shred_end_idx":39},{"entry_end_idx":40,"shred_end_idx":40},{"entry_end_idx":41,"shred_end_idx":41},{"entry_end_idx":42,"shred_end_idx":42},{"entry_end_idx":43,"shred_end_idx":43},{"entry_end_idx":44,"shred_end_idx":44},{"entry_end_idx":45,"shred_end_idx":45},{"entry_end_idx":46,"shred_end_idx":46},{"entry_end_idx":47,"shred_end_idx":47},{"entry_end_idx":48,"shred_end_idx":48},{"entry_end_idx":49,"shred_end_idx":49},{"entry_end_idx":50,"shred_end_idx":50},{"entry_end_idx":51,"shred_end_idx":51},{"entry_end_idx":52,"shred_end_idx":52},{"entry_end_idx":53,"shred_end_idx":53},{"entry_end_idx":54,"shred_end_idx":54},{"entry_end_idx":55,"shred_end_idx":55},{"entry_end_idx":56,"shred_end_idx":56},{"entry_end_idx":57,"shred_end_idx":57},{"entry_end_idx":58,"shred_end_idx":58},{"entry_end_idx":59,"shred_end_idx":59},{"entry_end_idx":60,"shred_end_idx":60},{"entry_end_idx":61,"shred_end_idx":61},{"entry_end_idx":62,"shred_end_idx":62},{"entry_end_idx":63,"shred_end_idx":63},{"entry_end_idx":64,"shred_end_idx":64},{"entry_end_idx":65,"shred_end_idx":65},{"entry_end_idx":66,"shred_end_idx":66}],"entries":[{"/":"bafyreieoodp5usfhjplhph653vpvkpys24meiyz3kvcoacj653yqoqganu"},{"/":"bafyreig6fq5m25b736egoexujhstvhejjj5m5im6i6vlfvwr4ogcukfmny"},{"/":"bafyreif7ll4bmg3nvk2n3gws7lmecdwmuw2esyktbbmtoijuu2f2fzqndy"},{"/":"bafyreihg5wf2azztumc63bbputua2pgkvd2jus7catewuil6jjc7gprrai"},{"/":"bafyreibg6p4ugixkbzrpleipuales2gvkg4ghimdkkvck66r6odzcm2bwi"},{"/":"bafyreibjtw6uxt6xkcupkv5svmwr6dyi24hxq7nq6epj3gwiyufarhubz4"},{"/":"bafyreif32w32hqgb2ohg2lryfg2zcdlh2s5b4e4v3b4irugrpwzfj7cqxy"},{"/":"bafyreid6shkgpadven4etav2dygfoddqilui2u5no5lckkbmrcr5t3sjae"},{"/":"bafyreih5po4uj464jx4mbcnbgclop4jtb5nuwbowe5cqdpq7rfbiuee5be"},{"/":"bafyreig6flggmcc2swze4a4iorrb3qoddzvo2u6jbv6qpfqqs4cnod4bhq"},{"/":"bafyreiebcnzlxpjfgbhuawbsiekadoeenals2l6hkugksvilhxr2mcfmgy"},{"/":"bafyreideleztelgalb22jdn7ic424a7chsjgq7lls4vaqlvwe3kao3vj3q"},{"/":"bafyreifhxlur26gdsevcbjad7hzgx7beog3qy5iluzqqc3slkibcy73hxi"},{"/":"bafyreibzc6wgdzu3acufuo7ig44d77joikci7b4bwhb4w63gi4jmtukxvi"},{"/":"bafyreibughffmlegv4j2cqcxrlk6z3brivcm2ug6fiyol44hkakv455y54"},{"/":"bafyreiaf64pp5x72gdviltpouljhwo35ctkvhfvvajb5p7ejialg54khdy"},{"/":"bafyreiev7wcees2rnkxsivemomzkrssa2etkrhuyao56apbkw5yy7rj6im"},{"/":"bafyreifu4qvhjd44ky2zjeao5gamanrnfmybjmqxfrmchfgllbysmxvzjm"},{"/":"bafyreiewjsfepwak4ft7pe4mi5tdefc7jdl5ssen6ef76ryuwql6n7e52m"},{"/":"bafyreihamgkr23zldmeiaygil7n56rrxpabsufs6hkqelq5zjdgrfggnwa"},{"/":"bafyreibzobcao62dmft6higwkhhp6644xoysczn7qy74qkji2f3myn4qim"},{"/":"bafyreihoixhqp2lvz4cod6gxul7c2cedcmkjrg47h2hnbjhw3umryylb2e"},{"/":"bafyreidpibbb7vud5a2ue4abom5msklm2x6p334aipxa4fltflegm3qhem"},{"/":"bafyreif4vy3jofm64ldrw3idedua2wedetzvwx64po5huqdpr3vyxzaejy"},{"/":"bafyreif3tbcx2hkk5d3wdl5ewx6ufugyliud3smhben2krmo3lrdg646me"},{"/":"bafyreihkmldv7wzoqjsexnhesgbo2tv72eeqhql4jz37aaf5r5on657maa"},{"/":"bafyreigiovd74gb6slvc23jctmt5pc7kj23ytmrapuzkdktx3he5zq6sma"},{"/":"bafyreicj5m2w5ayimybh7zujgsevlkiixs44dcnbw6dhnrxi2vcwisdo6e"},{"/":"bafyreicgzp25vmi3qdyyuvfpxarrebetkq7mch4v74f3lqdoqluztejq34"},{"/":"bafyreib25nv4gcthnl7zzrai3tny3g5kubcbhjyt4hntwfm4zmanelgjqa"},{"/":"bafyreibk7yeqimsuxxg6xx5oovf75po74xa3lssuoobwexfzcugiaw7xfm"},{"/":"bafyreifof6beaz5jp25bq3xtfouzmv3nji4khuiolh2k4zvelviaxit7bu"},{"/":"bafyreiaenycmszslvxu335jrdmuwcfl2l554dpxzgsy3ntsjziru7uedzq"},{"/":"bafyreih3sz33gnwxckgs2n75fyudybvitqufcypac5vrdmdr3hday3w24u"},{"/":"bafyreia3hamb6qfhmwiswy6gwbu2vfftbv2hbimbpwamrqbux4gx4zdqsq"},{"/":"bafyreiarbifnpbwe3btdrtkfkkbkh64avgwqhuzbapxlk6xopbywcrwhmm"},{"/":"bafyreihnppgpmixhcbn5gd6qmg2awnf56uu7amqcbr6xqnn25fntmejgsu"},{"/":"bafyreichr2s2yyykdki7zm4vzisqblcwprx6ovdv4p3aognbl3izcozylq"},{"/":"bafyreifg25gxnp4advt4zk2zvsnl4cz55ra25l42w5rpqgdjdqhgmne2ga"},{"/":"bafyreib5ogvpbdigppclhr2vzl2kj4cj23xxrxf6vl3o2fnvuxztjejsd4"},{"/":"bafyreigsayj7yhxe6dmjohxon3uivyvbbvgba4c44fgxbe63kco3hjrafy"},{"/":"bafyreibuxnha4m432txryctn774jokwcpyl5xqkkko522t2bjx3kmcdtvy"},{"/":"bafyreifstthml25blp7yppydg63llqzdeokk2wqc2ym4o5dsuzdmgfymuy"},{"/":"bafyreid3ro3luiymembibkrrfhhmaqjitmibvzwxfmx2z22ky34bji4ehq"},{"/":"bafyreifhwdqeflexo6sqwydszew45masur6wzjqztvny7qweuokiiemele"},{"/":"bafyreiglp6anezlnhfjao4qhlms74hofsp3av4gid5uqequr3ch6c7ukru"},{"/":"bafyreiasbud42ceabhtt3o3w36nexpontqwjj7tg4pg3rh32dwhazxyizy"},{"/":"bafyreiafvkbyyqrud6mrdc72sszjct6v7hnxrgxqkekjzts7nyviznhnpu"},{"/":"bafyreigwtxpj4eplp7toqphanp5hncsmvvhdwni3hte52gapbgynkv5k7y"},{"/":"bafyreie4rged3jfbs6cqeqnvdt5osvkhm7qyr5okkhgsvoms34g46jezle"},{"/":"bafyreiacpbjrhwrixbwpjoxk4ekq6aiywpxmnbn3dhvnlsre5elsvhs76q"},{"/":"bafyreih2cksz6jixbynwtlsmhyozfpcxxy6yxdnn77urpodupkxodiv43q"},{"/":"bafyreicmvzwovcptox7ouux3muwoswa77fua3vnf45lrrqfqrp3qdawm7u"},{"/":"bafyreidpmpgka22nsaridfhbjma6sim6p4idlfopogmz3lvuuajckfxfbq"},{"/":"bafyreidtwlxjgbvkiahfwjmmn3j3xhn5uk74nrwbprdzujd2et2l26c5sq"},{"/":"bafyreibbqmxznuft3ipsqtmni2dfgoygn4scx7db3jgzkgzhpjn35fb4ci"},{"/":"bafyreihdkmlk6djhf5jqp6bnhssykb5jenxih34f2vpmhs5bvwqkeeskqy"},{"/":"bafyreidy7y3fcoborpylvodseyscmf5mixp65lz3ulq7eqggv6byjxe4oy"},{"/":"bafyreiaxrj3ewromgsyui7nkhl3d6sfyzb23cmziumsnmr3gicwke5ixg4"},{"/":"bafyreiecvcq3na6immh4k7pj3hemx5rhzfz23zmap7qi6sjr56iuonqybe"},{"/":"bafyreidmzimbgattikq6jyen564kun5prw4f3lgc37zaxorvtrmye7l7ei"},{"/":"bafyreifqpkxq64gkdafnz3f4ho4qdg5ovb4vdn3k5t6b47gcaqmik4yj54"},{"/":"bafyreibm6i3b4fhlmfxc2z7nd5x5ymyca4o7wdhhrewagnnhx3kpqfjacq"},{"/":"bafyreie3coibkka6uf25cngpc2ovtdexdiaanlicgxnzterkfxpewah6oq"},{"/":"bafyreifht6ibzxoiavte6n7jawykptmyiyzcauxi4asfb2wlzxk2s3dru4"},{"/":"bafyreihift7rpktl5nlkaw6xlc6w6oprsu5eu2epifocr5yw2zrcrlhjma"},{"/":"bafyreibyqwttnacsgvt4xn3y4e7nrraqnadoy5c5qwvoilccib4jr4f5ji"}],"meta":{"parent_slot":8,"blocktime":0,"block_height":null},"rewards":{"/":"bafkqaaa"}}); + + let block = Block::from_bytes(raw).unwrap(); + let as_json = block.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 134, 2, 26, 1, 1, 20, 146, 152, 85, 130, 0, 0, 130, 1, 1, 130, 2, 2, 130, 3, 3, + 130, 4, 4, 130, 5, 5, 130, 6, 6, 130, 7, 7, 130, 8, 8, 130, 9, 9, 130, 10, 10, 130, + 11, 11, 130, 12, 12, 130, 13, 13, 130, 14, 14, 130, 15, 32, 130, 16, 32, 130, 17, + 32, 130, 18, 32, 130, 19, 15, 130, 20, 16, 130, 21, 17, 130, 22, 18, 130, 23, 19, + 130, 24, 24, 20, 130, 24, 25, 21, 130, 24, 26, 22, 130, 24, 27, 23, 130, 24, 28, + 24, 24, 130, 24, 29, 24, 25, 130, 24, 30, 24, 26, 130, 24, 31, 24, 27, 130, 24, 32, + 24, 28, 130, 24, 33, 24, 29, 130, 24, 34, 24, 30, 130, 24, 35, 32, 130, 24, 36, 24, + 31, 130, 24, 37, 32, 130, 24, 38, 32, 130, 24, 39, 32, 130, 24, 40, 32, 130, 24, + 41, 32, 130, 24, 42, 32, 130, 24, 43, 32, 130, 24, 44, 24, 34, 130, 24, 45, 32, + 130, 24, 46, 32, 130, 24, 47, 32, 130, 24, 48, 32, 130, 24, 49, 32, 130, 24, 50, + 32, 130, 24, 51, 32, 130, 24, 52, 24, 37, 130, 24, 53, 32, 130, 24, 54, 32, 130, + 24, 55, 32, 130, 24, 56, 24, 39, 130, 24, 57, 24, 40, 130, 24, 58, 24, 41, 130, 24, + 59, 24, 42, 130, 24, 60, 24, 43, 130, 24, 61, 24, 44, 130, 24, 62, 24, 45, 130, 24, + 63, 32, 130, 24, 64, 24, 46, 130, 24, 65, 24, 47, 130, 24, 66, 24, 48, 130, 24, 67, + 24, 49, 130, 24, 68, 24, 50, 130, 24, 69, 24, 51, 130, 24, 70, 24, 52, 130, 24, 71, + 24, 53, 130, 24, 72, 24, 54, 130, 24, 73, 24, 55, 130, 24, 74, 24, 56, 130, 24, 75, + 24, 57, 130, 24, 76, 24, 58, 130, 24, 77, 24, 59, 130, 24, 78, 24, 60, 130, 24, 79, + 24, 61, 130, 24, 80, 24, 62, 130, 24, 81, 24, 63, 130, 24, 82, 24, 64, 130, 24, 83, + 24, 65, 130, 24, 84, 24, 66, 152, 85, 216, 42, 88, 37, 0, 1, 113, 18, 32, 122, 123, + 74, 114, 57, 157, 37, 129, 246, 3, 37, 54, 199, 66, 64, 223, 46, 192, 12, 76, 145, + 226, 95, 242, 254, 34, 224, 171, 156, 18, 2, 233, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 223, 199, 135, 101, 178, 25, 226, 104, 168, 209, 103, 229, 141, 67, 216, 208, + 255, 99, 47, 109, 77, 223, 252, 100, 185, 186, 239, 80, 220, 95, 146, 75, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 150, 251, 13, 166, 191, 42, 166, 60, 199, 181, 89, 0, + 31, 220, 176, 217, 123, 31, 161, 57, 71, 104, 88, 119, 27, 78, 98, 219, 195, 220, + 53, 130, 216, 42, 88, 37, 0, 1, 113, 18, 32, 92, 120, 74, 237, 100, 136, 205, 207, + 193, 211, 53, 4, 94, 254, 150, 5, 167, 142, 164, 60, 100, 134, 83, 67, 11, 111, 76, + 36, 23, 248, 224, 166, 216, 42, 88, 37, 0, 1, 113, 18, 32, 15, 61, 88, 170, 3, 206, + 63, 187, 57, 101, 144, 170, 35, 28, 230, 0, 1, 6, 220, 192, 211, 79, 231, 173, 116, + 252, 4, 57, 164, 233, 117, 220, 216, 42, 88, 37, 0, 1, 113, 18, 32, 72, 131, 60, + 44, 209, 228, 113, 149, 133, 145, 72, 230, 161, 143, 61, 25, 121, 217, 248, 12, 67, + 8, 122, 207, 186, 67, 222, 27, 171, 211, 158, 115, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 6, 70, 152, 201, 230, 211, 113, 169, 240, 40, 163, 190, 198, 224, 137, 76, 101, + 7, 27, 90, 99, 168, 57, 95, 205, 255, 30, 141, 96, 203, 44, 156, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 51, 37, 164, 233, 163, 68, 185, 117, 61, 39, 122, 155, 226, 190, + 131, 14, 92, 72, 145, 109, 6, 241, 4, 30, 161, 88, 147, 54, 92, 106, 43, 93, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 59, 98, 242, 71, 81, 238, 140, 194, 240, 173, 66, 8, + 150, 243, 80, 228, 191, 254, 253, 75, 253, 226, 220, 107, 250, 108, 210, 1, 241, + 164, 203, 161, 216, 42, 88, 37, 0, 1, 113, 18, 32, 13, 111, 41, 100, 249, 98, 104, + 237, 62, 131, 155, 179, 218, 203, 178, 89, 242, 19, 88, 14, 48, 191, 126, 52, 173, + 36, 238, 7, 125, 148, 57, 234, 216, 42, 88, 37, 0, 1, 113, 18, 32, 98, 206, 136, + 134, 130, 183, 33, 62, 237, 241, 10, 218, 139, 239, 6, 100, 95, 104, 100, 161, 138, + 164, 192, 13, 70, 89, 72, 162, 237, 14, 19, 218, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 213, 182, 141, 33, 245, 141, 39, 215, 187, 36, 50, 17, 26, 85, 30, 146, 193, + 83, 181, 54, 73, 114, 254, 251, 22, 133, 63, 84, 202, 212, 84, 208, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 26, 128, 103, 145, 201, 39, 91, 85, 224, 54, 243, 145, 206, + 244, 78, 104, 143, 174, 235, 221, 186, 211, 43, 242, 238, 61, 105, 239, 216, 247, + 193, 142, 216, 42, 88, 37, 0, 1, 113, 18, 32, 82, 15, 83, 226, 178, 231, 60, 112, + 115, 72, 229, 118, 243, 181, 233, 130, 50, 60, 80, 248, 128, 121, 254, 6, 150, 163, + 56, 21, 12, 89, 67, 179, 216, 42, 88, 37, 0, 1, 113, 18, 32, 120, 82, 20, 126, 60, + 21, 10, 110, 187, 194, 85, 233, 104, 241, 186, 33, 251, 99, 10, 242, 228, 38, 14, + 112, 36, 89, 251, 89, 176, 254, 60, 95, 216, 42, 88, 37, 0, 1, 113, 18, 32, 50, + 133, 226, 75, 251, 29, 236, 250, 208, 216, 38, 149, 158, 173, 79, 119, 65, 157, + 249, 182, 92, 77, 109, 211, 4, 175, 20, 22, 37, 108, 252, 86, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 58, 34, 228, 117, 98, 189, 226, 210, 222, 247, 186, 146, 222, 166, + 108, 85, 236, 122, 216, 212, 195, 103, 84, 155, 125, 35, 1, 217, 172, 241, 221, + 225, 216, 42, 88, 37, 0, 1, 113, 18, 32, 101, 207, 104, 6, 46, 78, 208, 118, 40, + 250, 44, 80, 107, 56, 213, 174, 169, 36, 206, 149, 0, 253, 32, 215, 156, 233, 48, + 7, 74, 217, 156, 105, 216, 42, 88, 37, 0, 1, 113, 18, 32, 0, 158, 219, 39, 72, 69, + 8, 234, 88, 170, 13, 178, 17, 161, 122, 70, 88, 177, 233, 21, 142, 117, 207, 75, + 32, 233, 84, 115, 156, 137, 110, 41, 216, 42, 88, 37, 0, 1, 113, 18, 32, 89, 55, + 39, 33, 78, 157, 63, 167, 145, 68, 44, 165, 50, 65, 160, 54, 188, 90, 118, 182, + 180, 212, 253, 152, 34, 187, 208, 12, 62, 160, 236, 165, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 29, 170, 117, 212, 168, 89, 62, 142, 241, 19, 148, 165, 109, 86, 96, + 180, 170, 72, 35, 69, 143, 171, 171, 219, 193, 21, 193, 92, 139, 95, 139, 43, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 227, 153, 37, 185, 38, 148, 174, 246, 39, 8, 211, + 49, 25, 143, 183, 221, 207, 169, 8, 76, 52, 212, 232, 156, 188, 69, 132, 237, 47, + 65, 100, 253, 216, 42, 88, 37, 0, 1, 113, 18, 32, 144, 23, 245, 3, 236, 85, 113, + 143, 85, 186, 11, 50, 37, 130, 45, 179, 136, 248, 233, 123, 146, 82, 127, 32, 92, + 36, 239, 95, 242, 220, 43, 195, 216, 42, 88, 37, 0, 1, 113, 18, 32, 96, 106, 105, + 36, 234, 1, 252, 92, 96, 141, 173, 247, 62, 186, 195, 63, 0, 150, 149, 99, 47, 72, + 63, 227, 212, 83, 105, 47, 250, 149, 88, 174, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 171, 172, 93, 167, 224, 207, 180, 39, 215, 54, 166, 250, 120, 16, 244, 132, 28, 9, + 59, 7, 216, 64, 94, 155, 107, 58, 111, 168, 249, 252, 55, 230, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 31, 142, 97, 73, 145, 219, 203, 177, 203, 179, 3, 54, 78, 99, 59, + 151, 71, 173, 65, 10, 80, 121, 56, 32, 249, 38, 156, 121, 174, 162, 109, 116, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 51, 247, 187, 90, 97, 11, 71, 69, 246, 160, 27, 26, + 236, 154, 62, 83, 139, 28, 123, 194, 233, 168, 140, 183, 103, 244, 160, 41, 203, + 182, 105, 144, 216, 42, 88, 37, 0, 1, 113, 18, 32, 167, 106, 72, 148, 160, 245, 11, + 82, 117, 72, 248, 89, 61, 25, 85, 1, 228, 63, 41, 121, 40, 150, 254, 236, 160, 136, + 172, 220, 188, 91, 208, 119, 216, 42, 88, 37, 0, 1, 113, 18, 32, 134, 18, 85, 138, + 177, 67, 114, 167, 246, 37, 254, 162, 137, 47, 178, 61, 14, 51, 185, 92, 34, 199, + 85, 85, 113, 89, 135, 108, 100, 157, 148, 181, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 201, 163, 8, 169, 94, 149, 229, 55, 41, 178, 187, 162, 37, 172, 164, 70, 159, 199, + 105, 46, 102, 39, 107, 39, 140, 125, 212, 145, 52, 249, 123, 233, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 173, 237, 245, 0, 199, 33, 18, 164, 184, 142, 121, 138, 122, 57, + 114, 186, 217, 65, 243, 7, 132, 60, 62, 147, 152, 176, 18, 160, 170, 215, 5, 15, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 149, 70, 110, 103, 201, 239, 40, 100, 16, 48, + 79, 114, 10, 42, 28, 41, 53, 219, 181, 116, 57, 24, 39, 82, 188, 78, 176, 222, 70, + 174, 215, 47, 216, 42, 88, 37, 0, 1, 113, 18, 32, 127, 99, 35, 88, 213, 72, 7, 245, + 49, 240, 184, 88, 215, 202, 83, 105, 31, 249, 86, 130, 177, 0, 135, 45, 188, 69, + 172, 226, 63, 223, 66, 247, 216, 42, 88, 37, 0, 1, 113, 18, 32, 38, 88, 200, 51, + 45, 26, 150, 229, 51, 24, 80, 113, 10, 117, 204, 131, 117, 29, 83, 152, 236, 42, + 81, 182, 45, 127, 160, 255, 4, 157, 24, 180, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 53, 150, 217, 80, 13, 116, 254, 233, 125, 55, 245, 158, 173, 100, 89, 88, 75, 40, + 243, 196, 115, 247, 54, 208, 93, 189, 231, 84, 64, 190, 254, 204, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 135, 207, 251, 143, 122, 222, 191, 20, 105, 133, 40, 170, 204, + 32, 183, 11, 28, 133, 70, 126, 251, 78, 195, 126, 223, 192, 6, 92, 147, 14, 172, + 190, 216, 42, 88, 37, 0, 1, 113, 18, 32, 162, 71, 235, 16, 77, 230, 9, 12, 180, + 216, 116, 92, 67, 140, 234, 20, 189, 123, 201, 139, 95, 140, 146, 134, 145, 125, + 187, 94, 178, 152, 52, 50, 216, 42, 88, 37, 0, 1, 113, 18, 32, 187, 251, 2, 188, + 71, 58, 90, 46, 11, 165, 103, 240, 103, 38, 100, 148, 101, 27, 167, 170, 56, 127, + 6, 158, 114, 104, 188, 157, 253, 216, 83, 186, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 83, 2, 123, 140, 22, 74, 99, 54, 46, 82, 169, 163, 99, 250, 5, 195, 77, 168, 3, + 146, 16, 59, 19, 27, 38, 85, 138, 9, 195, 122, 82, 206, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 214, 88, 25, 42, 68, 59, 249, 156, 153, 212, 39, 192, 182, 119, 214, 228, + 151, 34, 184, 100, 242, 149, 220, 30, 253, 187, 157, 201, 191, 94, 145, 183, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 226, 43, 149, 125, 121, 88, 14, 69, 197, 225, 81, + 95, 140, 119, 14, 125, 252, 18, 64, 207, 49, 114, 177, 190, 117, 168, 17, 160, 50, + 148, 57, 93, 216, 42, 88, 37, 0, 1, 113, 18, 32, 60, 32, 6, 130, 227, 124, 97, 180, + 127, 180, 201, 217, 219, 122, 88, 125, 139, 243, 227, 52, 163, 113, 21, 165, 212, + 183, 41, 134, 215, 216, 129, 82, 216, 42, 88, 37, 0, 1, 113, 18, 32, 86, 147, 140, + 244, 205, 153, 245, 93, 211, 135, 232, 53, 175, 112, 184, 138, 16, 125, 40, 92, + 165, 1, 161, 28, 67, 176, 43, 242, 163, 120, 218, 109, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 156, 79, 8, 116, 99, 52, 194, 70, 82, 110, 235, 59, 109, 32, 243, 17, 143, + 245, 55, 28, 55, 176, 77, 204, 199, 17, 119, 161, 253, 174, 213, 191, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 34, 72, 121, 167, 211, 53, 118, 58, 79, 222, 13, 246, 26, + 44, 43, 226, 14, 178, 35, 251, 239, 209, 74, 180, 50, 177, 200, 150, 240, 248, 24, + 15, 216, 42, 88, 37, 0, 1, 113, 18, 32, 218, 155, 101, 88, 140, 62, 175, 150, 121, + 145, 63, 32, 113, 248, 154, 87, 73, 30, 53, 236, 31, 147, 207, 99, 184, 137, 1, 36, + 157, 185, 157, 73, 216, 42, 88, 37, 0, 1, 113, 18, 32, 247, 107, 40, 50, 239, 187, + 154, 141, 100, 132, 195, 216, 228, 26, 184, 172, 81, 81, 220, 121, 153, 147, 191, + 31, 14, 78, 75, 18, 246, 72, 177, 190, 216, 42, 88, 37, 0, 1, 113, 18, 32, 155, 92, + 19, 54, 224, 110, 253, 79, 64, 59, 40, 42, 152, 18, 13, 74, 199, 26, 52, 213, 215, + 203, 27, 161, 22, 49, 151, 249, 6, 87, 86, 210, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 3, 208, 125, 0, 70, 115, 123, 243, 70, 65, 224, 234, 104, 172, 252, 125, 78, 6, + 148, 187, 38, 77, 168, 59, 230, 234, 123, 157, 87, 204, 240, 158, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 52, 16, 34, 49, 198, 23, 45, 135, 44, 79, 31, 12, 158, 62, 129, + 222, 42, 150, 12, 22, 3, 171, 110, 17, 71, 96, 17, 21, 155, 46, 239, 1, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 206, 213, 118, 64, 248, 128, 49, 185, 36, 23, 151, 230, + 2, 94, 140, 137, 147, 108, 32, 134, 233, 223, 108, 183, 8, 15, 64, 201, 71, 130, + 119, 111, 216, 42, 88, 37, 0, 1, 113, 18, 32, 15, 248, 26, 72, 52, 41, 91, 197, 22, + 168, 207, 148, 146, 79, 161, 114, 220, 250, 251, 173, 103, 86, 130, 179, 223, 42, + 253, 187, 148, 131, 126, 229, 216, 42, 88, 37, 0, 1, 113, 18, 32, 237, 44, 110, 52, + 166, 167, 161, 147, 18, 178, 86, 164, 129, 46, 2, 99, 113, 117, 54, 238, 110, 66, + 26, 130, 12, 145, 70, 74, 138, 66, 170, 169, 216, 42, 88, 37, 0, 1, 113, 18, 32, 8, + 168, 83, 32, 16, 214, 72, 37, 137, 2, 230, 146, 195, 141, 137, 92, 252, 32, 87, + 115, 106, 145, 6, 14, 98, 42, 253, 29, 119, 211, 86, 248, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 134, 61, 208, 23, 174, 89, 190, 96, 141, 220, 31, 223, 65, 188, 253, + 168, 147, 127, 239, 226, 45, 209, 29, 161, 155, 103, 186, 8, 25, 30, 193, 176, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 97, 84, 196, 115, 197, 152, 154, 152, 254, 13, 128, + 12, 101, 0, 231, 17, 132, 230, 165, 228, 245, 113, 192, 46, 246, 55, 243, 224, 199, + 65, 45, 172, 216, 42, 88, 37, 0, 1, 113, 18, 32, 0, 11, 140, 225, 11, 199, 240, 2, + 142, 58, 114, 10, 212, 77, 113, 127, 175, 85, 11, 160, 129, 250, 181, 100, 202, + 135, 159, 248, 149, 219, 6, 194, 216, 42, 88, 37, 0, 1, 113, 18, 32, 172, 216, 141, + 170, 42, 151, 99, 192, 16, 153, 175, 183, 181, 147, 82, 57, 101, 29, 238, 61, 112, + 186, 188, 54, 132, 102, 150, 46, 160, 112, 79, 24, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 108, 100, 30, 50, 183, 158, 20, 65, 91, 17, 250, 127, 47, 73, 87, 64, 211, 252, + 208, 29, 250, 254, 103, 32, 93, 197, 182, 223, 113, 108, 135, 205, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 19, 160, 4, 201, 167, 133, 197, 92, 198, 16, 88, 70, 6, 129, + 173, 73, 228, 196, 89, 221, 238, 40, 8, 120, 228, 138, 162, 5, 161, 116, 220, 40, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 102, 168, 30, 1, 178, 198, 210, 235, 92, 7, 64, + 16, 7, 238, 161, 0, 174, 170, 250, 230, 33, 189, 97, 128, 72, 5, 217, 90, 50, 230, + 22, 185, 216, 42, 88, 37, 0, 1, 113, 18, 32, 25, 112, 166, 249, 17, 140, 58, 221, + 42, 242, 207, 181, 42, 37, 133, 203, 71, 242, 246, 168, 204, 4, 178, 0, 228, 250, + 172, 235, 134, 248, 97, 9, 216, 42, 88, 37, 0, 1, 113, 18, 32, 13, 203, 191, 226, + 38, 174, 196, 63, 120, 26, 10, 197, 63, 208, 197, 235, 59, 31, 254, 165, 115, 27, + 105, 64, 224, 150, 138, 3, 145, 21, 97, 10, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 234, 245, 91, 72, 14, 61, 10, 199, 168, 7, 247, 174, 74, 142, 73, 33, 62, 36, 132, + 98, 143, 200, 167, 181, 63, 244, 120, 105, 38, 34, 149, 24, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 8, 188, 225, 135, 95, 184, 97, 213, 195, 41, 87, 49, 227, 22, 5, 248, + 249, 74, 134, 69, 139, 105, 129, 155, 33, 83, 119, 146, 57, 97, 236, 245, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 24, 61, 177, 172, 55, 70, 252, 76, 47, 117, 237, 110, + 225, 5, 83, 129, 149, 39, 19, 54, 12, 171, 76, 68, 113, 214, 21, 33, 209, 40, 175, + 239, 216, 42, 88, 37, 0, 1, 113, 18, 32, 111, 22, 71, 60, 72, 33, 160, 169, 93, 42, + 158, 72, 31, 8, 137, 170, 99, 225, 123, 174, 175, 85, 200, 65, 81, 175, 220, 61, + 179, 180, 31, 227, 216, 42, 88, 37, 0, 1, 113, 18, 32, 110, 250, 62, 222, 165, 71, + 73, 111, 211, 68, 96, 0, 216, 194, 85, 239, 210, 11, 123, 223, 216, 224, 43, 84, + 180, 78, 184, 248, 162, 86, 82, 62, 216, 42, 88, 37, 0, 1, 113, 18, 32, 117, 175, + 216, 37, 55, 130, 113, 232, 40, 12, 30, 18, 162, 207, 123, 244, 160, 185, 123, 67, + 169, 94, 110, 147, 28, 20, 91, 247, 185, 26, 87, 205, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 101, 53, 32, 23, 192, 109, 108, 166, 245, 50, 238, 130, 81, 251, 26, 185, + 184, 203, 202, 93, 6, 189, 36, 241, 156, 70, 15, 107, 8, 14, 86, 27, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 121, 169, 16, 70, 166, 44, 47, 14, 102, 23, 15, 245, 179, + 18, 3, 34, 159, 82, 217, 111, 168, 33, 228, 84, 128, 69, 97, 15, 40, 111, 67, 7, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 63, 120, 160, 25, 148, 180, 206, 235, 217, 48, + 103, 253, 40, 237, 57, 51, 228, 196, 171, 92, 186, 49, 13, 179, 252, 93, 98, 249, + 49, 29, 30, 231, 216, 42, 88, 37, 0, 1, 113, 18, 32, 194, 228, 8, 192, 110, 90, + 230, 116, 11, 197, 23, 136, 46, 201, 217, 69, 202, 227, 222, 74, 18, 165, 160, 220, + 161, 47, 77, 247, 37, 3, 68, 27, 216, 42, 88, 37, 0, 1, 113, 18, 32, 157, 244, 42, + 44, 26, 161, 194, 120, 127, 27, 211, 222, 42, 224, 71, 67, 243, 139, 169, 245, 114, + 149, 197, 87, 73, 241, 214, 217, 50, 59, 147, 17, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 245, 216, 51, 181, 228, 138, 120, 6, 67, 48, 5, 17, 155, 228, 157, 226, 183, 1, + 99, 27, 248, 122, 162, 74, 33, 30, 76, 229, 161, 151, 90, 199, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 8, 110, 132, 86, 70, 161, 22, 110, 23, 246, 188, 96, 29, 14, 190, + 40, 202, 107, 151, 215, 191, 111, 216, 42, 108, 27, 244, 218, 220, 197, 13, 171, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 149, 9, 201, 150, 180, 187, 143, 135, 198, 130, + 86, 46, 44, 51, 83, 186, 71, 160, 98, 49, 197, 101, 75, 169, 177, 27, 87, 156, 115, + 222, 151, 4, 216, 42, 88, 37, 0, 1, 113, 18, 32, 245, 7, 50, 88, 35, 9, 87, 232, + 127, 106, 219, 96, 61, 230, 152, 131, 164, 251, 190, 54, 105, 10, 251, 142, 195, + 144, 115, 215, 225, 108, 109, 216, 216, 42, 88, 37, 0, 1, 113, 18, 32, 67, 133, 63, + 186, 212, 152, 36, 251, 92, 232, 172, 110, 230, 208, 238, 27, 144, 255, 216, 249, + 51, 117, 111, 249, 60, 221, 147, 195, 128, 134, 95, 89, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 55, 92, 100, 149, 54, 128, 187, 76, 1, 173, 166, 170, 75, 220, 152, 22, + 122, 158, 244, 7, 128, 84, 158, 237, 187, 58, 184, 100, 206, 216, 214, 178, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 243, 69, 37, 41, 217, 99, 190, 142, 226, 43, 229, + 204, 62, 229, 216, 102, 61, 212, 12, 50, 173, 24, 17, 221, 54, 51, 197, 96, 127, + 132, 30, 182, 216, 42, 88, 37, 0, 1, 113, 18, 32, 77, 172, 104, 205, 81, 196, 208, + 227, 180, 26, 60, 45, 204, 252, 205, 112, 121, 129, 160, 158, 50, 194, 94, 63, 124, + 207, 215, 247, 38, 6, 122, 40, 216, 42, 88, 37, 0, 1, 113, 18, 32, 121, 148, 200, + 145, 213, 156, 30, 39, 148, 132, 40, 125, 91, 199, 36, 216, 173, 187, 160, 56, 57, + 197, 105, 218, 88, 44, 38, 52, 100, 106, 112, 160, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 165, 43, 186, 23, 97, 54, 197, 248, 248, 251, 136, 163, 52, 103, 252, 184, 173, + 193, 87, 7, 133, 76, 120, 221, 63, 33, 231, 181, 189, 76, 88, 97, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 204, 125, 16, 158, 191, 16, 122, 0, 179, 91, 31, 163, 26, 230, + 3, 81, 154, 115, 32, 50, 7, 79, 175, 150, 104, 113, 188, 128, 240, 99, 49, 79, 131, + 26, 1, 1, 20, 145, 0, 246, 216, 42, 69, 0, 1, 85, 0, 0, + ]; + let as_json_raw = serde_json::json!({"kind":2,"slot":16848018,"shredding":[{"entry_end_idx":0,"shred_end_idx":0},{"entry_end_idx":1,"shred_end_idx":1},{"entry_end_idx":2,"shred_end_idx":2},{"entry_end_idx":3,"shred_end_idx":3},{"entry_end_idx":4,"shred_end_idx":4},{"entry_end_idx":5,"shred_end_idx":5},{"entry_end_idx":6,"shred_end_idx":6},{"entry_end_idx":7,"shred_end_idx":7},{"entry_end_idx":8,"shred_end_idx":8},{"entry_end_idx":9,"shred_end_idx":9},{"entry_end_idx":10,"shred_end_idx":10},{"entry_end_idx":11,"shred_end_idx":11},{"entry_end_idx":12,"shred_end_idx":12},{"entry_end_idx":13,"shred_end_idx":13},{"entry_end_idx":14,"shred_end_idx":14},{"entry_end_idx":15,"shred_end_idx":-1},{"entry_end_idx":16,"shred_end_idx":-1},{"entry_end_idx":17,"shred_end_idx":-1},{"entry_end_idx":18,"shred_end_idx":-1},{"entry_end_idx":19,"shred_end_idx":15},{"entry_end_idx":20,"shred_end_idx":16},{"entry_end_idx":21,"shred_end_idx":17},{"entry_end_idx":22,"shred_end_idx":18},{"entry_end_idx":23,"shred_end_idx":19},{"entry_end_idx":24,"shred_end_idx":20},{"entry_end_idx":25,"shred_end_idx":21},{"entry_end_idx":26,"shred_end_idx":22},{"entry_end_idx":27,"shred_end_idx":23},{"entry_end_idx":28,"shred_end_idx":24},{"entry_end_idx":29,"shred_end_idx":25},{"entry_end_idx":30,"shred_end_idx":26},{"entry_end_idx":31,"shred_end_idx":27},{"entry_end_idx":32,"shred_end_idx":28},{"entry_end_idx":33,"shred_end_idx":29},{"entry_end_idx":34,"shred_end_idx":30},{"entry_end_idx":35,"shred_end_idx":-1},{"entry_end_idx":36,"shred_end_idx":31},{"entry_end_idx":37,"shred_end_idx":-1},{"entry_end_idx":38,"shred_end_idx":-1},{"entry_end_idx":39,"shred_end_idx":-1},{"entry_end_idx":40,"shred_end_idx":-1},{"entry_end_idx":41,"shred_end_idx":-1},{"entry_end_idx":42,"shred_end_idx":-1},{"entry_end_idx":43,"shred_end_idx":-1},{"entry_end_idx":44,"shred_end_idx":34},{"entry_end_idx":45,"shred_end_idx":-1},{"entry_end_idx":46,"shred_end_idx":-1},{"entry_end_idx":47,"shred_end_idx":-1},{"entry_end_idx":48,"shred_end_idx":-1},{"entry_end_idx":49,"shred_end_idx":-1},{"entry_end_idx":50,"shred_end_idx":-1},{"entry_end_idx":51,"shred_end_idx":-1},{"entry_end_idx":52,"shred_end_idx":37},{"entry_end_idx":53,"shred_end_idx":-1},{"entry_end_idx":54,"shred_end_idx":-1},{"entry_end_idx":55,"shred_end_idx":-1},{"entry_end_idx":56,"shred_end_idx":39},{"entry_end_idx":57,"shred_end_idx":40},{"entry_end_idx":58,"shred_end_idx":41},{"entry_end_idx":59,"shred_end_idx":42},{"entry_end_idx":60,"shred_end_idx":43},{"entry_end_idx":61,"shred_end_idx":44},{"entry_end_idx":62,"shred_end_idx":45},{"entry_end_idx":63,"shred_end_idx":-1},{"entry_end_idx":64,"shred_end_idx":46},{"entry_end_idx":65,"shred_end_idx":47},{"entry_end_idx":66,"shred_end_idx":48},{"entry_end_idx":67,"shred_end_idx":49},{"entry_end_idx":68,"shred_end_idx":50},{"entry_end_idx":69,"shred_end_idx":51},{"entry_end_idx":70,"shred_end_idx":52},{"entry_end_idx":71,"shred_end_idx":53},{"entry_end_idx":72,"shred_end_idx":54},{"entry_end_idx":73,"shred_end_idx":55},{"entry_end_idx":74,"shred_end_idx":56},{"entry_end_idx":75,"shred_end_idx":57},{"entry_end_idx":76,"shred_end_idx":58},{"entry_end_idx":77,"shred_end_idx":59},{"entry_end_idx":78,"shred_end_idx":60},{"entry_end_idx":79,"shred_end_idx":61},{"entry_end_idx":80,"shred_end_idx":62},{"entry_end_idx":81,"shred_end_idx":63},{"entry_end_idx":82,"shred_end_idx":64},{"entry_end_idx":83,"shred_end_idx":65},{"entry_end_idx":84,"shred_end_idx":66}],"entries":[{"/":"bafyreid2pnfheom5ewa7mazfg3dueqg7f3aayter4jp7f7rc4cvzyeqc5e"},{"/":"bafyreig7y6dwlmqz4jukrulh4wguhwgq75rs63kn376gjon255inyx4sjm"},{"/":"bafyreiew7mg2npzkuy6mpnkzaap5zmgzpmp2cokhnbmhog2omln4hxbvqi"},{"/":"bafyreic4pbfo2zeizxh4duzvarpp5fqfu6hkipdeqzjugc3pjqsbp6hauy"},{"/":"bafyreiaphvmkua6oh65tszmqvirrzzqaaednzqgtj7t225h4aq42j2lv3q"},{"/":"bafyreiciqm6czupeogkyleki42qy6pizphm7qdcdbb5m7osd3yn2xu46om"},{"/":"bafyreiagi2mmtzwtogu7akfdx3dobckmmudrwwtdva4v7tp7d2gwbszmtq"},{"/":"bafyreibtewsoti2exf2t2j32tprl5ayolrejc3ig6ecb5ikysm3fy2rllu"},{"/":"bafyreib3mlzeouportbpblkcbclpguhex77p2s754logx6tm2ia7djglue"},{"/":"bafyreiann4uwj6lcndwt5a43wpnmxmsz6ijvqdrqx57djlje5ydx3fbz5i"},{"/":"bafyreidcz2einavxee7o34ik3kf66btel5ugjimkutaa2rszjcro2dqt3i"},{"/":"bafyreigvw2gsd5mne7l3wjbscenfkhusyfj3knsjol7pwfufh5kmvvcu2a"},{"/":"bafyreia2qbtzdsjhlnk6anxtshhpittir6xoxxn22mv7f3r5nhx5r56bry"},{"/":"bafyreicsb5j6fmxhhryhgshfo3z3l2mcgi6fb6eaph7anfvdhakqywkdwm"},{"/":"bafyreidykikh4pavbjxlxqsv5fupdorb7nrqv4xeeyhhajcz7nm3b7r4l4"},{"/":"bafyreibsqxrex6y55t5nbwbgswpk2t3xigo7tns4jvw5gbfpcqlck3h4ky"},{"/":"bafyreib2elshkyv54ljn5552slpkm3cv5r5nrvgdm5kjw7jdahm2z4o54e"},{"/":"bafyreidfz5uamlso2b3cr6rmkbvtrvnovesm5fia7uqnphhjgaduvwm4ne"},{"/":"bafyreiaat3nsoscfbdvfrkqnwii2c6sglcy6sfmooxhuwihjkrzzzclofe"},{"/":"bafyreiczg4tsctu5h6tzcrbmuuzedibwxrnhnnvu2t6zqiv32agd5ihmuu"},{"/":"bafyreia5vj25jkczh2hpce4uuvwvmyfuvjecgrmpvov5xqivyfoiwx4lfm"},{"/":"bafyreihdtes3sjuuv33cocgtgemy7n65z6uqqtbu2tujzpcfqtws6qle7u"},{"/":"bafyreieqc72qh3cvoghvloqlgisyelntrd4os64skj7saxbe55p7fxblym"},{"/":"bafyreidanjusj2qb7rogbdnn647lvqz7acljkyzpja76hvctnex7vfkyvy"},{"/":"bafyreiflvro2pygpwqt5onvg7j4bb5eedqetwb6yibpjw2z2n6upt7bx4y"},{"/":"bafyreia7rzquteo3zoy4xmydgzhggo4xi6wuccsqpe4cb6jgtr425itnoq"},{"/":"bafyreibt665vuyili5c7nia3dlwjupstrmohxqxjvcgloz7uuau4xntjsa"},{"/":"bafyreifhnjejjihvbnjhkshyle6rsvib4q7ss6jis37ozieivtolyw6qo4"},{"/":"bafyreiegcjkyvmkdokt7mjp6ukes7mr5byz3sxbcy5kvk4kzq5wgjhmuwu"},{"/":"bafyreigjumeksxuv4u3stmv3uis2zjcgt7dwsltge5vspdd52sitj6l35e"},{"/":"bafyreifn5x2qbrzbckslrdtzrj5ds4v23fa7gb4ehq7jhgfqckqkvvyfb4"},{"/":"bafyreievizxgpsppfbsbamcpoifcuhbjgxn3k5bzdatvfpcowdpenlwxf4"},{"/":"bafyreid7mmrvrvkia72td4fyldl4uu3jd74vnavracds3pcfvtrd7x2c64"},{"/":"bafyreibgldedgli2s3stggcqoefhltedouovhghmfji3mll7ud7qjhiywq"},{"/":"bafyreibvs3mvadlu73ux2n7vt2wwiwkyjmuphrdt643naxn545kebpx6zq"},{"/":"bafyreiehz75y66w6x4kgtbjivlgcbnyldscum7x3j3bx5x6aazojgdvmxy"},{"/":"bafyreifci7vratpgbegljwdulrbyz2quxv54tc27rsjinel5xnplfgbugi"},{"/":"bafyreif37mblyrz2lixaxjlh6btsmzeumun2pkryp4dj44tixso73wctxi"},{"/":"bafyreictaj5yyfskmm3c4uvjunr7ubodjwuaheqqhmjrwjsvrie4g6sszy"},{"/":"bafyreigwlamsurb37gojtvbhyc3hpvxes4rlqzhssxob57n3txe36xurw4"},{"/":"bafyreihcfokx26kybzc4lykrl6ghodt57qjebtzroky345nicgqdffbzlu"},{"/":"bafyreib4eadify34mg2h7ngj3hnxuwd5rpz6gnfdoek2lvfxfgdnpwebki"},{"/":"bafyreicwsogpjtmz6vo5hb7igwxxboekcb6sqxffagqryq5qfpzkg6g2nu"},{"/":"bafyreie4j4ehiyzuyjdfe3xlhnwsb4yrr72tohbxwbg4zryro6q73lwvx4"},{"/":"bafyreibcjb42puzvoy5e7xqn6yncyk7cb2zch67p2fflimvrzclpb6ayb4"},{"/":"bafyreig2tnsvrdb6v6lhtej7eby7rgsxjepdl3a7sphwhoejaesj3om5je"},{"/":"bafyreihxnmudf353tkgwjbgd3dsbvofmkfi5y6mzso7r6dsojmjpmsfrxy"},{"/":"bafyreie3lqjtnydo7vhuaozifkmbedkky4ndjvoxzmn2cfrrs74qmv2w2i"},{"/":"bafyreiad2b6qarttppzumqpa5jukz7d5jydjjozgjwudxzxkpoovpthqty"},{"/":"bafyreibucarddrqxfwdsyty7bspd5ao6fklayfqdvnxbcr3acekzwlxpae"},{"/":"bafyreigo2v3eb6eagg4sif4x4ybf5dejsnwcbbxj35wlocapideupatxn4"},{"/":"bafyreiap7aneqnbjlpcrnkgpssje7ils3t5pxllhk2blhxzk7w5zja364u"},{"/":"bafyreihnfrxdjjvhugjrfmswusas4atdof2tn3toiiniederizfiuqvkve"},{"/":"bafyreiaivbjsaegwjasysaxgslby3ck47qqfo43kseda4yrk7uoxpu2w7a"},{"/":"bafyreieghxibplszxzqi3xa735a3z7nisn767yrn2eo2dg3hxiebshwbwa"},{"/":"bafyreidbktchhrmytkmp4dmabrsqbzyrqttklzhvohac55rx6pqmoqjnvq"},{"/":"bafyreiaabogocc6h6abi4otsblke24l7v5kqxieb7k2wjsuht74jlwygyi"},{"/":"bafyreifm3cg2ukuxmpabbgnpw62zgurzmuo64plqxk6dnbdgsyxka4cpda"},{"/":"bafyreidmmqpdfn46cravwep2p4xusv2a2p6nahp27ztsaxofw3pxc3ehzu"},{"/":"bafyreiatuacmtj4fyvommecyiydidlkj4tcftxpofaehrzekuic2c5g4fa"},{"/":"bafyreidgvapadmwg2lvvyb2acad65iiav2vpvzrbxvqyasaf3fndfzqwxe"},{"/":"bafyreiazoctpsemmhlosv4wpwuvclboli7zpnkgmaszabzh2vtvyn6dbbe"},{"/":"bafyreianzo76ejvoyq7xqgqkyu75brplhmp75jltdnuubyewribzcflbbi"},{"/":"bafyreihk6vnuqdr5bld2qb7xvzfi4sjbhysiiyupzct3kp7upbusmiuvda"},{"/":"bafyreiaixtqyox5ymhk4gkkxghrrmbpy7ffimrmlngazwikto6jdsypm6u"},{"/":"bafyreiayhwy2yn2g7rgc65pnn3qqku4bsutrgnqmvngei4owcuq5ckfp54"},{"/":"bafyreidpczdtysbbucuv2ku6japqrcnkmpqxxlvpkxeecunp3q63hna74m"},{"/":"bafyreido7i7n5jkhjfx5grdaadmmevpp2ifxxx6y4avvjncoxd4kevsshy"},{"/":"bafyreidvv7mckn4cohucqda6ckrm667uuc4xwq5jlzxjghaulp33sgsxzu"},{"/":"bafyreidfguqbpqdnnstpkmxoqji7wgvzxdf4uxigxuspdhcgb5vqqdswdm"},{"/":"bafyreidzveienjrmf4hgmfyp6wzreazct5jns35iehsfjacfmehsq32da4"},{"/":"bafyreib7pcqbtffuz3v5smdh7uuo2ojt4tckwxf2geg3h7c5ml4tchi644"},{"/":"bafyreigc4qema3s24z2axrixraxmtwkfzlr54sqsuwqnzijpjx3ska2edm"},{"/":"bafyreie56qvcygvbyj4h6g6t3yvoar2d6of2t5lssxcvospr23mteo4tce"},{"/":"bafyreihv3az3lzekpadegmafcgn6jhpcw4awgg7ypkreuii6jts2df22y4"},{"/":"bafyreiain2cfmrvbczxbp5v4maoq5prizjvzpv57n7mcu3a36tnnzrinvm"},{"/":"bafyreievbheznnf3r6d4naswfywdgu52i6qgemofmvf2tmi3k6ohhxuxaq"},{"/":"bafyreihva4zfqiyjk7uh62w3ma66ngedut534ntjbl5y5q4qopl6c3dn3a"},{"/":"bafyreicdqu73vveyet5vz2fmn3tnb3q3sd75r6jtovx7spg5spbybbs7le"},{"/":"bafyreibxlrsjknuaxngadlngvjf5zgawpkppib4akspo3oz2xbsm5wgwwi"},{"/":"bafyreihtiusstwldx2hoek7fzq7olwdghxkaymvndai52nrtyvqh7ba6wy"},{"/":"bafyreicnvrum2uoe2dr3igr4fxgpztlqpga2bhrsyjpd67gp273smbt2fa"},{"/":"bafyreidzstejdvm4dytzjbbipvn4ojgyvw52aobzyvu5uwbmey2gi2tqua"},{"/":"bafyreifffo5boyjwyx4pr64ium2gp7fyvxavob4fjr4n2pzb46232tcyme"},{"/":"bafyreigmpuij5pyqpialgwy7umnoma2rtjzsamqhj6xzm2drxsapayzrj4"}],"meta":{"parent_slot":16848017,"blocktime":0,"block_height":null},"rewards":{"/":"bafkqaaa"}}); + + let block = Block::from_bytes(raw).unwrap(); + let as_json = block.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 134, 2, 26, 1, 1, 20, 145, 152, 71, 130, 0, 0, 130, 1, 1, 130, 2, 2, 130, 3, 3, + 130, 4, 4, 130, 5, 5, 130, 6, 6, 130, 7, 7, 130, 8, 8, 130, 9, 9, 130, 10, 10, 130, + 11, 11, 130, 12, 12, 130, 13, 13, 130, 14, 14, 130, 15, 15, 130, 16, 16, 130, 17, + 17, 130, 18, 18, 130, 19, 19, 130, 20, 20, 130, 21, 21, 130, 22, 22, 130, 23, 23, + 130, 24, 24, 24, 24, 130, 24, 25, 24, 25, 130, 24, 26, 24, 26, 130, 24, 27, 24, 27, + 130, 24, 28, 24, 28, 130, 24, 29, 24, 29, 130, 24, 30, 24, 30, 130, 24, 31, 24, 31, + 130, 24, 32, 24, 32, 130, 24, 33, 24, 33, 130, 24, 34, 24, 34, 130, 24, 35, 24, 35, + 130, 24, 36, 24, 36, 130, 24, 37, 24, 37, 130, 24, 38, 24, 38, 130, 24, 39, 24, 39, + 130, 24, 40, 24, 40, 130, 24, 41, 24, 41, 130, 24, 42, 24, 42, 130, 24, 43, 32, + 130, 24, 44, 24, 43, 130, 24, 45, 24, 44, 130, 24, 46, 24, 45, 130, 24, 47, 24, 46, + 130, 24, 48, 24, 47, 130, 24, 49, 24, 48, 130, 24, 50, 24, 49, 130, 24, 51, 24, 50, + 130, 24, 52, 24, 51, 130, 24, 53, 24, 52, 130, 24, 54, 24, 53, 130, 24, 55, 24, 54, + 130, 24, 56, 24, 55, 130, 24, 57, 24, 56, 130, 24, 58, 24, 57, 130, 24, 59, 24, 58, + 130, 24, 60, 24, 59, 130, 24, 61, 24, 60, 130, 24, 62, 24, 61, 130, 24, 63, 24, 62, + 130, 24, 64, 24, 63, 130, 24, 65, 24, 64, 130, 24, 66, 32, 130, 24, 67, 32, 130, + 24, 68, 24, 66, 130, 24, 69, 32, 130, 24, 70, 24, 67, 152, 71, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 107, 252, 222, 154, 111, 35, 208, 59, 51, 242, 164, 209, 19, 93, + 195, 151, 8, 21, 113, 155, 9, 169, 86, 184, 131, 179, 29, 78, 184, 80, 35, 225, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 3, 171, 25, 222, 40, 222, 210, 215, 214, 101, + 160, 177, 137, 107, 237, 223, 179, 12, 168, 138, 239, 112, 169, 173, 207, 107, 28, + 197, 179, 20, 195, 138, 216, 42, 88, 37, 0, 1, 113, 18, 32, 75, 228, 66, 84, 61, + 73, 66, 46, 131, 238, 68, 236, 81, 97, 19, 89, 166, 36, 253, 110, 64, 73, 212, 32, + 214, 159, 81, 188, 115, 62, 207, 159, 216, 42, 88, 37, 0, 1, 113, 18, 32, 17, 132, + 44, 89, 230, 253, 72, 110, 89, 138, 24, 237, 67, 178, 57, 176, 176, 44, 6, 6, 121, + 122, 160, 132, 115, 242, 169, 46, 5, 44, 211, 57, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 160, 191, 212, 184, 148, 79, 224, 18, 105, 189, 60, 42, 198, 85, 227, 123, 232, + 113, 32, 79, 123, 68, 1, 14, 72, 165, 138, 87, 42, 129, 170, 34, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 210, 121, 100, 244, 231, 209, 39, 196, 34, 23, 46, 77, 223, 107, + 8, 43, 237, 165, 133, 235, 4, 37, 61, 74, 218, 192, 208, 225, 73, 227, 160, 148, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 113, 54, 73, 45, 146, 105, 171, 213, 222, 240, + 168, 115, 214, 165, 255, 63, 142, 41, 37, 211, 241, 200, 113, 193, 7, 2, 244, 244, + 85, 20, 204, 234, 216, 42, 88, 37, 0, 1, 113, 18, 32, 61, 128, 39, 21, 174, 130, + 209, 67, 213, 227, 166, 226, 151, 16, 213, 130, 113, 36, 64, 13, 115, 148, 199, 57, + 255, 86, 61, 201, 74, 60, 228, 201, 216, 42, 88, 37, 0, 1, 113, 18, 32, 18, 194, + 173, 195, 240, 52, 93, 24, 103, 176, 41, 96, 97, 141, 216, 48, 67, 83, 27, 14, 88, + 141, 217, 55, 98, 100, 2, 104, 13, 251, 4, 118, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 133, 19, 111, 12, 239, 83, 78, 251, 154, 221, 123, 64, 201, 127, 215, 206, 182, + 199, 233, 201, 31, 184, 84, 90, 116, 88, 205, 227, 204, 232, 239, 66, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 6, 152, 238, 9, 148, 161, 124, 80, 185, 41, 75, 142, 197, + 59, 232, 16, 35, 203, 97, 125, 188, 132, 240, 188, 20, 16, 24, 29, 212, 207, 0, + 146, 216, 42, 88, 37, 0, 1, 113, 18, 32, 86, 72, 222, 206, 54, 198, 0, 254, 13, 55, + 50, 95, 97, 142, 23, 184, 194, 244, 100, 69, 63, 64, 71, 177, 208, 245, 39, 112, + 231, 161, 44, 155, 216, 42, 88, 37, 0, 1, 113, 18, 32, 212, 202, 79, 77, 154, 238, + 160, 20, 67, 140, 191, 223, 29, 201, 201, 237, 211, 15, 203, 38, 87, 149, 154, 39, + 135, 87, 28, 139, 51, 145, 107, 237, 216, 42, 88, 37, 0, 1, 113, 18, 32, 42, 91, + 105, 231, 33, 144, 186, 211, 34, 220, 247, 250, 132, 170, 28, 52, 182, 81, 150, 19, + 73, 138, 154, 49, 204, 23, 162, 27, 242, 139, 254, 243, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 15, 109, 161, 89, 99, 214, 164, 101, 91, 179, 49, 152, 31, 218, 152, 116, + 246, 142, 61, 68, 123, 43, 182, 129, 199, 194, 1, 40, 142, 87, 224, 117, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 167, 163, 224, 246, 152, 137, 116, 51, 197, 237, 223, + 106, 26, 125, 80, 183, 253, 0, 65, 112, 70, 250, 45, 220, 81, 120, 191, 159, 42, + 49, 179, 199, 216, 42, 88, 37, 0, 1, 113, 18, 32, 102, 112, 182, 218, 234, 240, 88, + 198, 112, 241, 117, 223, 28, 224, 78, 52, 204, 159, 118, 33, 81, 99, 84, 159, 150, + 45, 199, 202, 183, 28, 212, 104, 216, 42, 88, 37, 0, 1, 113, 18, 32, 97, 4, 122, + 35, 45, 165, 154, 152, 38, 42, 89, 185, 168, 198, 59, 13, 107, 46, 162, 143, 119, + 27, 12, 170, 201, 181, 163, 129, 181, 39, 247, 149, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 106, 235, 11, 52, 211, 189, 226, 123, 107, 90, 53, 128, 69, 77, 59, 40, 222, + 100, 217, 71, 93, 205, 39, 3, 230, 107, 46, 100, 75, 51, 175, 161, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 216, 253, 139, 219, 231, 67, 111, 245, 47, 135, 191, 100, 230, + 209, 180, 24, 21, 105, 133, 10, 48, 43, 78, 98, 13, 107, 55, 35, 108, 102, 227, 52, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 127, 166, 21, 216, 72, 137, 183, 166, 240, 232, + 115, 94, 243, 179, 181, 211, 56, 220, 107, 45, 145, 244, 70, 203, 182, 51, 241, 49, + 3, 72, 84, 228, 216, 42, 88, 37, 0, 1, 113, 18, 32, 139, 253, 171, 228, 222, 205, + 246, 158, 68, 131, 173, 78, 143, 90, 52, 18, 169, 21, 252, 111, 244, 155, 182, 72, + 14, 197, 91, 179, 122, 157, 16, 151, 216, 42, 88, 37, 0, 1, 113, 18, 32, 18, 177, + 245, 208, 225, 13, 137, 109, 122, 42, 246, 107, 203, 41, 234, 58, 67, 183, 232, + 200, 152, 123, 141, 30, 66, 172, 210, 73, 37, 196, 240, 118, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 180, 158, 72, 213, 233, 193, 35, 87, 71, 188, 75, 156, 245, 87, 154, + 55, 220, 73, 154, 69, 221, 186, 10, 226, 124, 126, 167, 214, 199, 185, 32, 92, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 65, 136, 38, 74, 95, 230, 158, 11, 9, 67, 9, 103, + 244, 194, 120, 96, 175, 132, 77, 103, 170, 17, 141, 243, 179, 70, 62, 144, 163, + 232, 29, 99, 216, 42, 88, 37, 0, 1, 113, 18, 32, 192, 55, 92, 235, 203, 52, 85, + 154, 167, 18, 28, 40, 14, 41, 100, 228, 8, 91, 187, 129, 208, 145, 224, 128, 136, + 80, 194, 55, 81, 7, 52, 200, 216, 42, 88, 37, 0, 1, 113, 18, 32, 214, 214, 109, 94, + 100, 240, 86, 6, 162, 251, 234, 66, 223, 160, 186, 47, 114, 225, 208, 145, 129, 9, + 5, 193, 242, 250, 80, 102, 245, 237, 118, 181, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 85, 243, 183, 201, 57, 81, 131, 12, 230, 162, 194, 102, 187, 0, 169, 73, 29, 50, + 112, 249, 26, 158, 46, 252, 239, 228, 193, 217, 59, 49, 224, 75, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 53, 45, 54, 21, 94, 37, 66, 152, 40, 240, 188, 135, 73, 193, + 103, 214, 2, 118, 225, 31, 119, 14, 168, 167, 212, 28, 228, 137, 190, 53, 152, 72, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 249, 57, 100, 166, 186, 203, 208, 173, 56, 131, + 89, 43, 196, 201, 210, 61, 8, 138, 252, 81, 173, 107, 140, 160, 165, 49, 140, 166, + 36, 27, 249, 68, 216, 42, 88, 37, 0, 1, 113, 18, 32, 57, 187, 192, 199, 176, 248, + 207, 112, 157, 63, 58, 122, 49, 48, 194, 187, 11, 168, 221, 9, 104, 110, 197, 196, + 43, 120, 172, 182, 106, 175, 148, 195, 216, 42, 88, 37, 0, 1, 113, 18, 32, 249, 71, + 28, 84, 93, 255, 105, 45, 28, 197, 221, 85, 218, 109, 222, 198, 194, 237, 56, 169, + 56, 55, 121, 179, 169, 105, 172, 144, 169, 113, 150, 146, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 183, 46, 96, 185, 74, 143, 6, 236, 211, 28, 65, 65, 244, 126, 236, + 199, 211, 111, 163, 82, 58, 121, 118, 78, 64, 221, 238, 189, 17, 130, 91, 224, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 168, 58, 236, 198, 186, 213, 77, 70, 85, 205, 211, + 185, 8, 131, 144, 2, 6, 74, 45, 82, 210, 51, 209, 81, 108, 196, 179, 73, 233, 191, + 184, 104, 216, 42, 88, 37, 0, 1, 113, 18, 32, 211, 156, 98, 214, 121, 20, 191, 242, + 95, 185, 186, 19, 224, 6, 232, 72, 164, 243, 228, 186, 146, 236, 170, 229, 241, 30, + 190, 106, 207, 97, 173, 147, 216, 42, 88, 37, 0, 1, 113, 18, 32, 4, 10, 230, 30, + 83, 114, 84, 188, 113, 159, 27, 56, 34, 183, 159, 196, 93, 7, 108, 241, 67, 153, + 108, 122, 138, 190, 1, 229, 46, 1, 96, 210, 216, 42, 88, 37, 0, 1, 113, 18, 32, 65, + 17, 1, 175, 210, 132, 132, 120, 164, 45, 172, 214, 211, 64, 214, 77, 67, 195, 184, + 1, 170, 105, 240, 78, 217, 133, 233, 180, 153, 161, 160, 24, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 187, 21, 27, 143, 162, 205, 13, 112, 235, 209, 48, 203, 186, 32, 14, + 194, 205, 252, 232, 180, 214, 76, 238, 77, 206, 198, 105, 216, 18, 208, 189, 99, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 218, 245, 42, 212, 140, 0, 18, 175, 120, 159, + 163, 178, 228, 32, 131, 240, 48, 214, 55, 166, 135, 122, 33, 189, 74, 208, 241, + 162, 112, 9, 75, 3, 216, 42, 88, 37, 0, 1, 113, 18, 32, 217, 40, 182, 185, 124, + 151, 131, 33, 168, 13, 104, 51, 80, 92, 78, 52, 46, 108, 52, 142, 52, 119, 35, 92, + 138, 49, 207, 91, 144, 183, 86, 218, 216, 42, 88, 37, 0, 1, 113, 18, 32, 1, 105, + 111, 61, 213, 126, 126, 107, 148, 172, 155, 145, 112, 89, 26, 244, 255, 34, 80, 81, + 110, 159, 35, 151, 182, 120, 156, 6, 26, 214, 255, 27, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 255, 240, 227, 199, 124, 121, 116, 19, 213, 194, 138, 153, 126, 177, 25, + 87, 15, 209, 118, 250, 42, 156, 192, 213, 126, 115, 3, 231, 85, 234, 35, 98, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 222, 236, 232, 155, 62, 245, 183, 121, 97, 110, 114, + 81, 235, 124, 200, 39, 228, 214, 117, 220, 12, 98, 12, 131, 148, 58, 187, 13, 203, + 8, 108, 175, 216, 42, 88, 37, 0, 1, 113, 18, 32, 79, 149, 212, 92, 183, 183, 109, + 136, 206, 85, 160, 57, 235, 4, 131, 98, 66, 181, 126, 194, 84, 158, 50, 185, 182, + 12, 148, 106, 130, 105, 23, 102, 216, 42, 88, 37, 0, 1, 113, 18, 32, 87, 156, 51, + 39, 67, 129, 57, 181, 238, 125, 188, 86, 156, 188, 104, 193, 59, 89, 180, 141, 46, + 123, 63, 228, 105, 17, 36, 172, 138, 58, 224, 34, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 179, 122, 138, 124, 237, 124, 113, 65, 233, 212, 222, 176, 79, 127, 76, 143, + 29, 143, 106, 190, 95, 145, 194, 14, 224, 150, 8, 30, 83, 198, 253, 21, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 192, 2, 217, 158, 73, 39, 33, 111, 94, 222, 37, 160, + 165, 239, 27, 165, 80, 151, 17, 0, 104, 37, 82, 212, 141, 242, 253, 68, 250, 255, + 132, 187, 216, 42, 88, 37, 0, 1, 113, 18, 32, 47, 166, 152, 189, 43, 243, 69, 85, + 78, 227, 139, 37, 83, 208, 180, 26, 246, 23, 118, 27, 222, 95, 175, 43, 150, 13, + 222, 178, 143, 70, 162, 170, 216, 42, 88, 37, 0, 1, 113, 18, 32, 201, 122, 116, 49, + 182, 202, 55, 211, 123, 161, 58, 145, 110, 0, 168, 178, 108, 153, 214, 40, 172, 10, + 80, 229, 183, 182, 24, 4, 113, 36, 245, 85, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 215, 11, 36, 198, 68, 102, 19, 45, 18, 92, 58, 5, 188, 159, 114, 242, 112, 32, 239, + 159, 244, 152, 236, 47, 170, 192, 105, 172, 182, 153, 131, 149, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 250, 14, 184, 132, 127, 91, 45, 10, 165, 76, 204, 6, 4, 227, 105, + 141, 236, 121, 152, 23, 217, 96, 13, 25, 115, 18, 89, 221, 38, 15, 109, 218, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 130, 106, 3, 0, 30, 62, 101, 116, 88, 241, 74, 105, + 76, 243, 246, 27, 68, 91, 125, 160, 187, 18, 159, 137, 212, 43, 173, 240, 83, 20, + 138, 216, 216, 42, 88, 37, 0, 1, 113, 18, 32, 178, 27, 13, 79, 67, 124, 217, 124, + 6, 105, 128, 187, 141, 39, 155, 103, 222, 167, 130, 49, 210, 252, 132, 53, 178, + 239, 95, 241, 73, 180, 12, 188, 216, 42, 88, 37, 0, 1, 113, 18, 32, 32, 53, 250, + 54, 186, 119, 212, 131, 102, 41, 223, 25, 225, 18, 152, 34, 238, 4, 27, 231, 7, + 155, 4, 8, 148, 49, 250, 138, 45, 195, 189, 191, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 105, 95, 254, 194, 29, 242, 71, 15, 226, 53, 42, 233, 18, 112, 54, 31, 159, + 175, 207, 55, 212, 75, 167, 93, 11, 150, 149, 35, 242, 106, 214, 44, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 235, 70, 135, 167, 105, 125, 103, 82, 255, 80, 14, 51, 173, + 99, 56, 226, 171, 59, 136, 87, 83, 169, 210, 233, 106, 244, 243, 175, 194, 22, 235, + 222, 216, 42, 88, 37, 0, 1, 113, 18, 32, 101, 68, 189, 131, 179, 135, 171, 189, + 211, 51, 71, 86, 50, 65, 94, 29, 202, 244, 208, 245, 183, 7, 17, 118, 170, 38, 116, + 108, 200, 208, 168, 139, 216, 42, 88, 37, 0, 1, 113, 18, 32, 58, 116, 115, 165, + 222, 224, 155, 192, 22, 206, 56, 59, 213, 243, 216, 221, 111, 133, 203, 129, 146, + 0, 94, 253, 87, 144, 212, 138, 186, 178, 71, 143, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 219, 255, 86, 133, 250, 1, 8, 14, 82, 99, 168, 227, 70, 88, 101, 4, 48, 176, + 226, 9, 236, 177, 153, 49, 186, 12, 108, 102, 173, 117, 232, 206, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 159, 39, 86, 38, 227, 25, 177, 39, 63, 49, 104, 199, 45, 220, + 95, 80, 131, 108, 255, 30, 186, 228, 103, 116, 159, 11, 212, 240, 84, 67, 196, 206, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 55, 35, 228, 18, 125, 175, 109, 213, 134, 194, + 29, 48, 32, 64, 141, 101, 237, 223, 26, 21, 62, 143, 202, 94, 197, 161, 101, 193, + 57, 137, 87, 210, 216, 42, 88, 37, 0, 1, 113, 18, 32, 218, 215, 230, 182, 25, 179, + 163, 166, 244, 59, 62, 193, 243, 128, 82, 18, 30, 86, 121, 124, 159, 208, 156, 238, + 170, 16, 247, 253, 162, 101, 49, 57, 216, 42, 88, 37, 0, 1, 113, 18, 32, 43, 203, + 122, 214, 61, 210, 1, 203, 134, 235, 144, 213, 139, 226, 142, 193, 231, 194, 56, + 50, 33, 144, 24, 254, 39, 199, 223, 107, 113, 179, 95, 10, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 99, 189, 219, 0, 65, 165, 50, 130, 155, 145, 223, 113, 74, 192, 179, + 178, 127, 214, 247, 127, 84, 133, 99, 236, 202, 209, 20, 17, 137, 134, 106, 28, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 48, 199, 183, 142, 158, 89, 189, 81, 17, 58, + 154, 68, 150, 33, 101, 25, 111, 5, 103, 120, 172, 104, 179, 58, 132, 144, 172, 193, + 105, 209, 43, 108, 216, 42, 88, 37, 0, 1, 113, 18, 32, 47, 230, 201, 236, 32, 173, + 83, 93, 186, 13, 23, 55, 6, 41, 96, 151, 51, 229, 139, 98, 50, 33, 194, 26, 173, + 215, 247, 84, 143, 241, 251, 112, 216, 42, 88, 37, 0, 1, 113, 18, 32, 222, 243, + 209, 213, 13, 112, 138, 32, 233, 147, 109, 154, 225, 100, 95, 171, 218, 179, 177, + 51, 192, 57, 83, 90, 104, 49, 143, 52, 119, 33, 44, 148, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 185, 94, 193, 214, 59, 75, 191, 79, 29, 162, 155, 89, 5, 9, 66, 178, + 252, 248, 74, 149, 114, 0, 82, 33, 139, 125, 37, 115, 240, 145, 3, 230, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 28, 45, 35, 112, 249, 244, 79, 11, 6, 223, 209, 63, 107, + 71, 111, 13, 78, 208, 17, 40, 80, 193, 212, 178, 137, 254, 105, 28, 81, 111, 254, + 228, 216, 42, 88, 37, 0, 1, 113, 18, 32, 7, 51, 122, 191, 60, 43, 3, 167, 75, 242, + 242, 189, 252, 159, 91, 44, 143, 41, 156, 187, 2, 34, 66, 37, 197, 150, 67, 121, + 137, 83, 70, 60, 216, 42, 88, 37, 0, 1, 113, 18, 32, 176, 20, 97, 203, 228, 164, + 173, 213, 20, 74, 112, 200, 247, 84, 230, 46, 207, 236, 194, 172, 90, 14, 54, 26, + 228, 62, 76, 229, 64, 42, 99, 107, 131, 26, 1, 1, 20, 144, 0, 246, 216, 42, 69, 0, + 1, 85, 0, 0, + ]; + let as_json_raw = serde_json::json!({"kind":2,"slot":16848017,"shredding":[{"entry_end_idx":0,"shred_end_idx":0},{"entry_end_idx":1,"shred_end_idx":1},{"entry_end_idx":2,"shred_end_idx":2},{"entry_end_idx":3,"shred_end_idx":3},{"entry_end_idx":4,"shred_end_idx":4},{"entry_end_idx":5,"shred_end_idx":5},{"entry_end_idx":6,"shred_end_idx":6},{"entry_end_idx":7,"shred_end_idx":7},{"entry_end_idx":8,"shred_end_idx":8},{"entry_end_idx":9,"shred_end_idx":9},{"entry_end_idx":10,"shred_end_idx":10},{"entry_end_idx":11,"shred_end_idx":11},{"entry_end_idx":12,"shred_end_idx":12},{"entry_end_idx":13,"shred_end_idx":13},{"entry_end_idx":14,"shred_end_idx":14},{"entry_end_idx":15,"shred_end_idx":15},{"entry_end_idx":16,"shred_end_idx":16},{"entry_end_idx":17,"shred_end_idx":17},{"entry_end_idx":18,"shred_end_idx":18},{"entry_end_idx":19,"shred_end_idx":19},{"entry_end_idx":20,"shred_end_idx":20},{"entry_end_idx":21,"shred_end_idx":21},{"entry_end_idx":22,"shred_end_idx":22},{"entry_end_idx":23,"shred_end_idx":23},{"entry_end_idx":24,"shred_end_idx":24},{"entry_end_idx":25,"shred_end_idx":25},{"entry_end_idx":26,"shred_end_idx":26},{"entry_end_idx":27,"shred_end_idx":27},{"entry_end_idx":28,"shred_end_idx":28},{"entry_end_idx":29,"shred_end_idx":29},{"entry_end_idx":30,"shred_end_idx":30},{"entry_end_idx":31,"shred_end_idx":31},{"entry_end_idx":32,"shred_end_idx":32},{"entry_end_idx":33,"shred_end_idx":33},{"entry_end_idx":34,"shred_end_idx":34},{"entry_end_idx":35,"shred_end_idx":35},{"entry_end_idx":36,"shred_end_idx":36},{"entry_end_idx":37,"shred_end_idx":37},{"entry_end_idx":38,"shred_end_idx":38},{"entry_end_idx":39,"shred_end_idx":39},{"entry_end_idx":40,"shred_end_idx":40},{"entry_end_idx":41,"shred_end_idx":41},{"entry_end_idx":42,"shred_end_idx":42},{"entry_end_idx":43,"shred_end_idx":-1},{"entry_end_idx":44,"shred_end_idx":43},{"entry_end_idx":45,"shred_end_idx":44},{"entry_end_idx":46,"shred_end_idx":45},{"entry_end_idx":47,"shred_end_idx":46},{"entry_end_idx":48,"shred_end_idx":47},{"entry_end_idx":49,"shred_end_idx":48},{"entry_end_idx":50,"shred_end_idx":49},{"entry_end_idx":51,"shred_end_idx":50},{"entry_end_idx":52,"shred_end_idx":51},{"entry_end_idx":53,"shred_end_idx":52},{"entry_end_idx":54,"shred_end_idx":53},{"entry_end_idx":55,"shred_end_idx":54},{"entry_end_idx":56,"shred_end_idx":55},{"entry_end_idx":57,"shred_end_idx":56},{"entry_end_idx":58,"shred_end_idx":57},{"entry_end_idx":59,"shred_end_idx":58},{"entry_end_idx":60,"shred_end_idx":59},{"entry_end_idx":61,"shred_end_idx":60},{"entry_end_idx":62,"shred_end_idx":61},{"entry_end_idx":63,"shred_end_idx":62},{"entry_end_idx":64,"shred_end_idx":63},{"entry_end_idx":65,"shred_end_idx":64},{"entry_end_idx":66,"shred_end_idx":-1},{"entry_end_idx":67,"shred_end_idx":-1},{"entry_end_idx":68,"shred_end_idx":66},{"entry_end_idx":69,"shred_end_idx":-1},{"entry_end_idx":70,"shred_end_idx":67}],"entries":[{"/":"bafyreidl7tpju3zd2a5th4ve2ejv3q4xbakxdgyjvfllra5tdvhlqubd4e"},{"/":"bafyreiadvmm54kg62ll5mznawgewx3o7wmgkrcxpocu23t3ldtc3gfgdri"},{"/":"bafyreicl4rbfipkjiixih3se5riwce2zuysp23sajhkcbvu7kg6hgpwpt4"},{"/":"bafyreiarqqwftzx5jbxftcqy5vb3eonqwawambtzpkqii47svexaklgthe"},{"/":"bafyreifax7klrfcp4ajgtpj4fldfly335bysat33iqaq4sffrjlsvankei"},{"/":"bafyreigspfspjz6re7ccefzojxpwwcbl5wsyl2yeeu6uvwwa2dquty5asq"},{"/":"bafyreidrgzes3etjvpk554fioplkl7z7ryuslu7rzby4cbyc6t2fkfgm5i"},{"/":"bafyreib5qatrlluc2fb5ly5g4klrbvmcoeseadltstdtt72whxeuupheze"},{"/":"bafyreiasykw4h4bulumgpmbjmbqy3wbqinjrwdsyrxmtoyteajua36yeoy"},{"/":"bafyreiefcnxqz32tj35zvxl3idex7v6ow3d6tsi7xbkfu5cyzxr4z2hpii"},{"/":"bafyreiagtdxatffbprilskklr3ctx2aqepfwc7n4qtylyfaqdao5jtyasi"},{"/":"bafyreicwjdpm4nwgad7a2nzsl5qy4f5yyl2girj7ibd3duhve5yopijmtm"},{"/":"bafyreiguzjhu3gxouakehdf734o4tspn2mh4wjsxswncpb2xdsfthell5u"},{"/":"bafyreibklnu6oimqxljsfxhx7kckuhbuwzizme2jrknddtaxuin7fc766m"},{"/":"bafyreiapnwqvsy6wursvxmzrtap5vgdu62hd2rd3fo3idr6caeui4v7aou"},{"/":"bafyreifhupqpngejoqz4l3o7ninh2ufx7uaec4cg7iw5yulyx6psumnty4"},{"/":"bafyreidgoc3nv2xqlddhb4lv34ooatruzspxmikrmnkj7frny7flohguna"},{"/":"bafyreidbar5cglnftkmcmkszxgummoynnmxkfd3xdmgkvsnvuoa3kj7xsu"},{"/":"bafyreidk5mftju554j5wwwrvqbcu2ozi3zsnsr25zutqhztlfzsewm5pue"},{"/":"bafyreigy7wf5xz2dn72s7b57mttndnaycvuykcrqfnhgedllg4rwyzxdgq"},{"/":"bafyreid7uyk5qsejw6tpb2dtl3z3hnothdogwlmr6rdmxnrt6eyqgscu4q"},{"/":"bafyreiel7wv6jxwn62peja5nj2hvunasvek7y37uto3eqdwflozxvhiqs4"},{"/":"bafyreiaswh25byinrfwxukxwnpfst2r2io36rseypogr4qvm2jeslrhqoy"},{"/":"bafyreifutzenl2obenluppcltt2vpgrx3rezuro5xifoe7d6u7lmpojalq"},{"/":"bafyreicbrateux7gtyfqsqyjm72me6dav6ce2z5kcgg7hm2gh2ikh2a5mm"},{"/":"bafyreigag5ooxszukwnkoeq4fahcszhebbn3xaoqshqibccqyi3vcbzuza"},{"/":"bafyreigw2zwv4zhqkydkf67kilp2borpolq5bembbec4d4x2kbtpl3lwwu"},{"/":"bafyreicv6o34sokrqmgoniwcm25qbkkjduzhb6i2tyxpz37eyhmtwmpajm"},{"/":"bafyreibvfu3bkxrfikmcr4f4q5e4cz6waj3och3xb2ukpva44se34nmyja"},{"/":"bafyreihzhfsknowl2cwtra2zfpcmtur5bcfpyunnnogkbjjrrstcig7ziq"},{"/":"bafyreibzxpampmhyz5yj2pz2piytbqv3boun2clin3c4ik3yvs3gvl4uym"},{"/":"bafyreihzi4ofixp7newrzro5kxng3xwgylwtrkjyg543hkljvsiks4mwsi"},{"/":"bafyreifxfzqlssupa3wnghcbih2h53gh2nx2gur2pf3e4qg5526rdas34a"},{"/":"bafyreifihlwmnowvjvdfltotxeeiheacazfc2uwsgpivc3gewne6tp5yna"},{"/":"bafyreigttrrnm6iux7zf7on2cpqan2ciutz6jous5svol4i6xzvm6ynnsm"},{"/":"bafyreiaebltb4u3sks6hdhy3harlph6eludwz4kdtfwhvcv6ahss4ala2i"},{"/":"bafyreicbcea27uueqr4kilnm23jubvsnipb3qanknhye5wmf5g2jtinada"},{"/":"bafyreif3cuny7iwnbvyoxujqzo5cadwczx6orngwjtxe3twgnhmbfuf5mm"},{"/":"bafyreig26uvnjdaackxxrh5dwlscba7qgdldpjuhpiq32swq6grhacklam"},{"/":"bafyreigzfc3ls7exqmq2qdlignifytrufzwdjdruo4rvzcrrz5nzbn2w3i"},{"/":"bafyreiabnfxt3vl6pzvzjle3sfyfsgxu74rfaulot4rzpntytqdbvvx7dm"},{"/":"bafyreih76dr4o7dzoqj5lquktf7lcgkxb7ixn6rkttank7ttaptvl2rdmi"},{"/":"bafyreig65tujwpxvw54wc3tskhvxzsbh4tlhlxammigihfb2xmg4wcdmv4"},{"/":"bafyreicpsxkfzn5xnwem4vnahhvqja3cik2x5qsutyzltnqmsrvie2ixmy"},{"/":"bafyreicxtqzsoq4bhg2647n4k2oly2gbhnm3jdjopm76i2ireswiuoxaei"},{"/":"bafyreiftpkfhz3l4ofa6tvg6wbhx6tepdwhwvps7shba5yewbapfhrx5cu"},{"/":"bafyreigaalmz4sjhefxv5xrfucs66g5fkclrcadievjnjdps7vcpv74exm"},{"/":"bafyreibpu2ml2k7tivku5y4levj5bna26ylxmg66l6xsxfqn32zi6rvcvi"},{"/":"bafyreigjpj2ddnwkg7jxxij2sfxabkfsnsm5mkfmbjioln5wdachcjhvku"},{"/":"bafyreigxbmsmmrdgcmwrexb2aw6j64xsoaqo7h7utdwc7kwangwlngmdsu"},{"/":"bafyreih2b24ii723fufkktgmaycog2mn5r4zqf6zmagrs4yslhosmd3n3i"},{"/":"bafyreiecnibqahr6mv2fr4kknfgph5q3irnx3if3ckpytvblvxyfgfek3a"},{"/":"bafyreifsdmgu6q343f6am2maxogspg3h32tyemos7scdlmxpl7yutnamxq"},{"/":"bafyreibagx5dnotx2sbwmko7dhqrfgbc5ycbxzyhtmcarfbr7kfc3q55x4"},{"/":"bafyreidjl77mehpsi4h6enjk5ejhanq7t6x46n6ujotv2c4wsur7e2wwfq"},{"/":"bafyreihli2d2o2l5m5jp6uaogowwgohcvm5yqv2tvhjos2xu6ox4efxl3y"},{"/":"bafyreidfis6yhm4hvo65gm2hkyzecxq5zl2nb5nxa4ixnkrgorwmrufirm"},{"/":"bafyreib2orz2lxxatpabntryhpk7hwg5n6c4xamsabpp2v4q2sflvmshr4"},{"/":"bafyreig375lil6qbbahfey5i4ndfqziegcyoecpmwgmtdoqmnrtk25pizy"},{"/":"bafyreie7e5lcnyyzwett6mliy4w5yx2qqnwp6hv24rtxjhyl2tyfiq6ezy"},{"/":"bafyreibxepsbe7npnxkynqq5gaqebdlf5xprufj6r7ff5rnbmxattckx2i"},{"/":"bafyreig227tlmgntuotpioz6yhzyauqsdzlhs7e72coo5kqq6762ezjrhe"},{"/":"bafyreiblzn5nmposahfyn24q2wf6fdwb47bdqmrbsamp4j6h35vxdm27bi"},{"/":"bafyreiddxxnqaqnfgkbjxeo7offmbm5sp7lpo72uqvr6zswrcqiytbtkdq"},{"/":"bafyreibqy63y5hszxvircou2islcczizn4cwo6fmncztvbeqvtawtujlnq"},{"/":"bafyreibp43e6yifnkno3udixg4dcsyexgpsywyrsehbbvlox65ki74p3oa"},{"/":"bafyreig66pi5kdlqriqote3ntlqwix5l3kz3cm6ahfjvu2brr42hoijmsq"},{"/":"bafyreifzl3a5mo2lx5hr3iu3lecqsqvs7t4evflsabjcdc35evz7beid4y"},{"/":"bafyreia4furxb6puj4fqnx6rh5vuo3ynj3ibckcqyhklfcp6neofc3764q"},{"/":"bafyreiahgn5l6pblaotux4xsxx6j6wzmr4uzzoycejbclrmwin4ysu2ghq"},{"/":"bafyreifqcrq4xzfevxkristqzd3vjzroz7wmflc2by3bvzb6jtsuaktdnm"}],"meta":{"parent_slot":16848016,"blocktime":0,"block_height":null},"rewards":{"/":"bafkqaaa"}}); + + let block = Block::from_bytes(raw).unwrap(); + let as_json = block.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 134, 2, 26, 1, 1, 20, 139, 152, 125, 130, 0, 0, 130, 1, 1, 130, 2, 2, 130, 3, 3, + 130, 4, 4, 130, 5, 5, 130, 6, 6, 130, 7, 7, 130, 8, 8, 130, 9, 9, 130, 10, 10, 130, + 11, 11, 130, 12, 32, 130, 13, 32, 130, 14, 13, 130, 15, 32, 130, 16, 14, 130, 17, + 32, 130, 18, 32, 130, 19, 15, 130, 20, 32, 130, 21, 32, 130, 22, 17, 130, 23, 32, + 130, 24, 24, 32, 130, 24, 25, 32, 130, 24, 26, 19, 130, 24, 27, 32, 130, 24, 28, + 32, 130, 24, 29, 32, 130, 24, 30, 32, 130, 24, 31, 21, 130, 24, 32, 32, 130, 24, + 33, 22, 130, 24, 34, 23, 130, 24, 35, 24, 24, 130, 24, 36, 24, 25, 130, 24, 37, 24, + 26, 130, 24, 38, 24, 27, 130, 24, 39, 24, 28, 130, 24, 40, 24, 29, 130, 24, 41, 24, + 30, 130, 24, 42, 24, 31, 130, 24, 43, 24, 32, 130, 24, 44, 24, 33, 130, 24, 45, 24, + 34, 130, 24, 46, 24, 35, 130, 24, 47, 24, 36, 130, 24, 48, 24, 37, 130, 24, 49, 24, + 38, 130, 24, 50, 24, 39, 130, 24, 51, 24, 40, 130, 24, 52, 24, 41, 130, 24, 53, 24, + 42, 130, 24, 54, 24, 43, 130, 24, 55, 24, 44, 130, 24, 56, 24, 45, 130, 24, 57, 24, + 46, 130, 24, 58, 24, 47, 130, 24, 59, 24, 48, 130, 24, 60, 24, 49, 130, 24, 61, 24, + 50, 130, 24, 62, 24, 51, 130, 24, 63, 24, 52, 130, 24, 64, 24, 53, 130, 24, 65, 24, + 54, 130, 24, 66, 24, 55, 130, 24, 67, 24, 56, 130, 24, 68, 24, 57, 130, 24, 69, 24, + 58, 130, 24, 70, 24, 59, 130, 24, 71, 24, 60, 130, 24, 72, 24, 61, 130, 24, 73, 24, + 62, 130, 24, 74, 24, 63, 130, 24, 75, 24, 64, 130, 24, 76, 32, 130, 24, 77, 32, + 130, 24, 78, 24, 65, 130, 24, 79, 32, 130, 24, 80, 32, 130, 24, 81, 32, 130, 24, + 82, 24, 67, 130, 24, 83, 32, 130, 24, 84, 24, 68, 130, 24, 85, 24, 69, 130, 24, 86, + 32, 130, 24, 87, 32, 130, 24, 88, 32, 130, 24, 89, 32, 130, 24, 90, 32, 130, 24, + 91, 32, 130, 24, 92, 32, 130, 24, 93, 24, 72, 130, 24, 94, 32, 130, 24, 95, 32, + 130, 24, 96, 32, 130, 24, 97, 32, 130, 24, 98, 32, 130, 24, 99, 32, 130, 24, 100, + 32, 130, 24, 101, 24, 75, 130, 24, 102, 32, 130, 24, 103, 32, 130, 24, 104, 32, + 130, 24, 105, 32, 130, 24, 106, 32, 130, 24, 107, 32, 130, 24, 108, 32, 130, 24, + 109, 24, 78, 130, 24, 110, 32, 130, 24, 111, 32, 130, 24, 112, 32, 130, 24, 113, + 32, 130, 24, 114, 32, 130, 24, 115, 32, 130, 24, 116, 32, 130, 24, 117, 24, 81, + 130, 24, 118, 32, 130, 24, 119, 24, 82, 130, 24, 120, 24, 83, 130, 24, 121, 24, 84, + 130, 24, 122, 24, 85, 130, 24, 123, 24, 86, 130, 24, 124, 24, 87, 152, 125, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 168, 90, 96, 28, 166, 12, 75, 77, 65, 77, 199, 68, + 24, 166, 121, 198, 97, 190, 248, 223, 175, 135, 251, 2, 225, 126, 194, 106, 3, 194, + 190, 107, 216, 42, 88, 37, 0, 1, 113, 18, 32, 125, 42, 117, 221, 162, 250, 9, 249, + 34, 127, 175, 51, 16, 136, 129, 10, 81, 243, 209, 164, 157, 36, 252, 133, 254, 189, + 200, 157, 74, 144, 135, 156, 216, 42, 88, 37, 0, 1, 113, 18, 32, 172, 3, 110, 57, + 14, 244, 207, 13, 248, 56, 72, 218, 30, 215, 228, 119, 140, 32, 237, 40, 26, 93, + 19, 122, 30, 245, 154, 57, 50, 190, 208, 144, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 212, 226, 197, 124, 122, 31, 148, 10, 237, 142, 179, 52, 165, 130, 134, 117, 249, + 2, 84, 63, 177, 69, 228, 105, 10, 93, 186, 174, 101, 56, 227, 131, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 174, 72, 188, 5, 89, 161, 3, 57, 11, 29, 166, 209, 20, 220, 6, + 198, 61, 45, 224, 136, 228, 40, 158, 240, 255, 227, 178, 185, 13, 223, 219, 229, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 18, 36, 88, 186, 233, 215, 61, 131, 6, 198, 83, + 190, 174, 92, 138, 246, 33, 174, 33, 132, 58, 239, 213, 59, 92, 55, 126, 177, 225, + 197, 116, 65, 216, 42, 88, 37, 0, 1, 113, 18, 32, 188, 209, 113, 209, 17, 115, 153, + 142, 38, 83, 190, 72, 174, 184, 75, 55, 34, 8, 220, 18, 28, 111, 122, 221, 24, 43, + 103, 66, 2, 45, 137, 158, 216, 42, 88, 37, 0, 1, 113, 18, 32, 209, 35, 105, 206, + 42, 65, 3, 209, 235, 166, 179, 101, 43, 206, 4, 219, 143, 160, 226, 100, 163, 153, + 61, 43, 15, 92, 122, 126, 23, 84, 62, 78, 216, 42, 88, 37, 0, 1, 113, 18, 32, 73, + 80, 130, 98, 46, 40, 36, 102, 108, 125, 215, 170, 233, 5, 227, 128, 201, 250, 195, + 116, 190, 181, 183, 168, 142, 125, 108, 138, 212, 219, 179, 127, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 95, 244, 6, 124, 253, 138, 205, 204, 5, 4, 188, 170, 23, 109, + 36, 174, 191, 81, 230, 252, 68, 107, 121, 32, 108, 81, 207, 187, 239, 178, 146, + 192, 216, 42, 88, 37, 0, 1, 113, 18, 32, 144, 68, 18, 59, 223, 33, 202, 103, 56, + 99, 197, 77, 127, 23, 208, 69, 105, 69, 247, 105, 249, 19, 71, 255, 205, 131, 169, + 104, 28, 99, 197, 178, 216, 42, 88, 37, 0, 1, 113, 18, 32, 152, 239, 78, 106, 187, + 210, 165, 195, 54, 1, 228, 230, 251, 204, 159, 116, 158, 184, 211, 122, 161, 24, + 178, 208, 136, 0, 7, 188, 35, 196, 164, 41, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 161, 232, 17, 191, 192, 200, 170, 174, 78, 37, 71, 188, 159, 252, 95, 233, 31, 119, + 167, 237, 60, 110, 19, 165, 223, 2, 95, 180, 17, 138, 5, 9, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 172, 77, 75, 83, 197, 75, 136, 132, 88, 38, 191, 220, 13, 243, 171, + 33, 203, 174, 183, 234, 235, 15, 226, 31, 91, 214, 49, 149, 101, 106, 223, 132, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 220, 44, 4, 21, 175, 68, 11, 104, 229, 203, 6, + 198, 197, 166, 48, 241, 213, 214, 67, 19, 13, 200, 52, 38, 149, 136, 170, 20, 156, + 180, 187, 28, 216, 42, 88, 37, 0, 1, 113, 18, 32, 227, 197, 176, 153, 24, 85, 43, + 195, 20, 109, 101, 168, 63, 158, 184, 53, 84, 20, 153, 244, 114, 31, 71, 227, 183, + 230, 202, 217, 28, 18, 120, 211, 216, 42, 88, 37, 0, 1, 113, 18, 32, 36, 18, 143, + 109, 77, 102, 226, 161, 183, 98, 218, 62, 67, 33, 23, 185, 135, 28, 1, 54, 226, + 148, 96, 173, 27, 202, 120, 166, 229, 251, 57, 85, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 43, 208, 181, 155, 225, 254, 67, 158, 231, 193, 43, 21, 104, 63, 96, 113, 82, + 64, 228, 193, 13, 177, 110, 242, 42, 69, 110, 58, 80, 124, 70, 188, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 238, 86, 7, 23, 233, 34, 22, 192, 134, 57, 90, 53, 37, 28, + 119, 66, 134, 201, 184, 67, 46, 224, 119, 0, 111, 92, 208, 76, 38, 129, 105, 208, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 180, 164, 200, 211, 45, 99, 81, 41, 50, 151, + 182, 86, 45, 11, 116, 173, 118, 140, 240, 138, 7, 75, 160, 174, 38, 234, 36, 89, + 88, 228, 14, 100, 216, 42, 88, 37, 0, 1, 113, 18, 32, 83, 25, 110, 20, 220, 82, + 135, 201, 242, 15, 10, 184, 78, 67, 100, 199, 126, 24, 200, 8, 7, 176, 102, 194, + 139, 196, 36, 101, 207, 213, 128, 57, 216, 42, 88, 37, 0, 1, 113, 18, 32, 136, 69, + 192, 116, 72, 119, 45, 43, 244, 166, 99, 39, 52, 141, 32, 64, 128, 202, 66, 115, + 94, 67, 58, 55, 64, 155, 218, 45, 108, 87, 190, 38, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 148, 25, 210, 153, 130, 154, 193, 89, 68, 23, 108, 235, 137, 147, 146, 236, 70, + 61, 172, 75, 104, 128, 48, 254, 166, 6, 168, 145, 232, 209, 214, 235, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 255, 149, 191, 225, 110, 170, 130, 253, 219, 105, 255, 233, + 44, 145, 198, 55, 39, 199, 161, 161, 39, 62, 76, 110, 174, 37, 85, 131, 120, 182, + 25, 16, 216, 42, 88, 37, 0, 1, 113, 18, 32, 160, 84, 188, 48, 49, 134, 5, 95, 225, + 169, 28, 123, 151, 110, 91, 171, 92, 96, 189, 19, 17, 146, 70, 37, 55, 147, 206, + 207, 194, 251, 44, 116, 216, 42, 88, 37, 0, 1, 113, 18, 32, 82, 154, 188, 118, 97, + 29, 80, 186, 130, 123, 28, 179, 109, 139, 80, 216, 105, 88, 185, 49, 208, 253, 93, + 223, 50, 211, 14, 224, 10, 37, 35, 50, 216, 42, 88, 37, 0, 1, 113, 18, 32, 34, 226, + 73, 91, 0, 223, 23, 133, 161, 73, 174, 182, 180, 250, 98, 143, 22, 236, 251, 138, + 179, 190, 179, 174, 254, 0, 52, 167, 66, 63, 217, 102, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 18, 80, 27, 167, 101, 249, 102, 98, 37, 94, 39, 196, 192, 82, 31, 153, 106, + 252, 152, 58, 205, 199, 21, 89, 11, 14, 188, 131, 205, 38, 227, 84, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 85, 29, 137, 255, 201, 192, 204, 45, 197, 4, 222, 37, 222, + 252, 129, 208, 56, 180, 25, 125, 100, 44, 72, 116, 5, 66, 130, 207, 9, 133, 202, + 95, 216, 42, 88, 37, 0, 1, 113, 18, 32, 44, 221, 110, 155, 75, 238, 244, 26, 245, + 46, 200, 133, 61, 76, 47, 68, 55, 179, 87, 197, 174, 157, 7, 251, 52, 28, 156, 12, + 85, 48, 237, 86, 216, 42, 88, 37, 0, 1, 113, 18, 32, 203, 18, 46, 47, 176, 155, + 166, 251, 219, 10, 63, 189, 73, 63, 244, 70, 182, 150, 175, 218, 116, 70, 180, 181, + 3, 133, 192, 103, 195, 61, 52, 167, 216, 42, 88, 37, 0, 1, 113, 18, 32, 62, 40, + 115, 20, 69, 239, 225, 166, 28, 233, 169, 36, 219, 196, 29, 193, 33, 15, 84, 56, + 19, 72, 220, 12, 123, 194, 181, 115, 202, 27, 213, 149, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 219, 174, 215, 54, 91, 186, 180, 147, 73, 22, 159, 198, 232, 78, 148, 146, + 29, 72, 94, 247, 223, 138, 109, 44, 123, 228, 93, 114, 127, 216, 237, 27, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 225, 227, 50, 74, 252, 37, 43, 47, 221, 23, 10, 66, 239, + 120, 209, 74, 66, 240, 158, 187, 69, 181, 193, 213, 141, 144, 113, 95, 206, 236, + 12, 14, 216, 42, 88, 37, 0, 1, 113, 18, 32, 67, 141, 206, 50, 124, 160, 195, 109, + 164, 239, 59, 104, 55, 120, 39, 122, 125, 146, 203, 243, 106, 183, 14, 23, 6, 150, + 55, 99, 16, 92, 235, 123, 216, 42, 88, 37, 0, 1, 113, 18, 32, 108, 189, 181, 6, + 219, 188, 161, 228, 217, 94, 250, 181, 226, 105, 79, 75, 209, 96, 196, 107, 176, + 88, 17, 50, 166, 169, 135, 82, 61, 176, 205, 102, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 67, 69, 58, 110, 31, 121, 190, 164, 217, 218, 84, 31, 250, 189, 181, 212, 96, + 67, 22, 218, 27, 139, 157, 253, 239, 241, 193, 27, 152, 71, 129, 207, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 34, 56, 202, 95, 207, 140, 114, 48, 48, 233, 140, 183, 81, + 49, 144, 203, 123, 222, 126, 138, 176, 73, 28, 181, 119, 103, 245, 208, 145, 204, + 244, 105, 216, 42, 88, 37, 0, 1, 113, 18, 32, 86, 5, 60, 38, 196, 140, 240, 41, + 249, 56, 80, 106, 39, 147, 17, 18, 200, 98, 103, 186, 155, 171, 87, 52, 112, 22, + 120, 229, 141, 111, 105, 222, 216, 42, 88, 37, 0, 1, 113, 18, 32, 121, 196, 231, + 226, 165, 93, 61, 28, 179, 195, 130, 228, 95, 147, 184, 94, 70, 20, 79, 81, 214, + 94, 188, 122, 53, 21, 199, 52, 221, 161, 17, 41, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 146, 61, 165, 230, 166, 199, 188, 185, 120, 159, 185, 219, 201, 79, 35, 121, + 38, 203, 36, 4, 241, 26, 7, 47, 206, 160, 68, 172, 209, 218, 56, 239, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 244, 198, 40, 185, 188, 195, 231, 229, 113, 79, 154, 215, + 211, 238, 176, 72, 212, 107, 253, 29, 104, 155, 117, 127, 199, 10, 106, 49, 201, + 136, 160, 13, 216, 42, 88, 37, 0, 1, 113, 18, 32, 158, 201, 72, 217, 23, 209, 84, + 74, 103, 91, 120, 142, 43, 81, 33, 210, 159, 67, 18, 186, 197, 105, 10, 47, 37, + 215, 100, 86, 235, 138, 26, 233, 216, 42, 88, 37, 0, 1, 113, 18, 32, 179, 65, 175, + 132, 109, 145, 111, 112, 8, 238, 207, 142, 73, 230, 119, 214, 92, 110, 82, 13, 44, + 236, 104, 102, 99, 64, 8, 202, 64, 207, 98, 135, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 121, 226, 92, 148, 183, 218, 73, 68, 3, 29, 75, 167, 14, 189, 124, 43, 18, 193, + 164, 160, 27, 191, 77, 0, 0, 9, 28, 162, 226, 18, 227, 194, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 25, 41, 183, 237, 185, 81, 32, 141, 83, 51, 130, 170, 38, 221, 160, + 104, 205, 200, 106, 201, 47, 19, 112, 217, 160, 5, 50, 8, 250, 215, 113, 76, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 69, 167, 112, 152, 12, 33, 164, 233, 151, 193, 116, + 50, 141, 14, 45, 239, 216, 78, 224, 180, 77, 55, 204, 131, 253, 176, 38, 193, 60, + 87, 161, 106, 216, 42, 88, 37, 0, 1, 113, 18, 32, 158, 8, 109, 5, 221, 13, 190, 87, + 159, 228, 58, 109, 26, 80, 92, 0, 249, 34, 18, 232, 60, 63, 97, 212, 97, 9, 87, + 109, 52, 156, 166, 125, 216, 42, 88, 37, 0, 1, 113, 18, 32, 17, 129, 110, 239, 11, + 54, 215, 219, 249, 251, 232, 161, 164, 231, 17, 50, 201, 11, 243, 32, 42, 143, 131, + 8, 92, 15, 245, 218, 233, 106, 161, 57, 216, 42, 88, 37, 0, 1, 113, 18, 32, 22, 7, + 51, 25, 194, 200, 128, 41, 38, 123, 166, 55, 48, 247, 231, 194, 149, 241, 147, 135, + 156, 143, 166, 48, 1, 25, 245, 227, 101, 251, 207, 1, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 149, 18, 208, 177, 153, 113, 140, 219, 55, 182, 165, 8, 121, 35, 216, 227, + 112, 135, 159, 142, 185, 214, 233, 204, 213, 228, 235, 140, 155, 53, 71, 141, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 32, 37, 37, 127, 175, 217, 101, 27, 143, 47, 192, + 40, 223, 232, 131, 140, 138, 240, 61, 150, 210, 192, 74, 116, 68, 235, 68, 58, 61, + 22, 153, 174, 216, 42, 88, 37, 0, 1, 113, 18, 32, 106, 243, 230, 189, 146, 33, 240, + 183, 33, 151, 146, 225, 234, 59, 184, 37, 32, 209, 168, 80, 212, 182, 104, 83, 75, + 0, 202, 172, 114, 169, 174, 57, 216, 42, 88, 37, 0, 1, 113, 18, 32, 164, 59, 41, + 32, 62, 218, 182, 154, 173, 92, 4, 18, 84, 68, 79, 102, 143, 96, 53, 171, 148, 45, + 217, 233, 167, 227, 128, 55, 79, 186, 52, 41, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 167, 163, 186, 13, 81, 49, 225, 43, 130, 45, 157, 31, 233, 5, 173, 246, 50, 128, + 242, 77, 25, 165, 47, 128, 50, 140, 238, 159, 29, 229, 125, 14, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 56, 161, 22, 122, 6, 194, 166, 63, 87, 185, 79, 66, 124, 112, 5, + 83, 48, 18, 108, 136, 168, 127, 182, 39, 105, 41, 66, 72, 147, 120, 245, 50, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 16, 79, 116, 45, 110, 208, 114, 46, 87, 232, 27, + 172, 25, 225, 202, 112, 13, 223, 129, 57, 229, 254, 185, 56, 242, 75, 177, 104, 90, + 170, 20, 163, 216, 42, 88, 37, 0, 1, 113, 18, 32, 118, 45, 246, 62, 251, 0, 98, 0, + 94, 74, 82, 157, 146, 50, 28, 246, 94, 27, 98, 97, 172, 179, 200, 122, 114, 0, 239, + 227, 0, 218, 85, 140, 216, 42, 88, 37, 0, 1, 113, 18, 32, 20, 163, 54, 50, 67, 87, + 116, 78, 116, 99, 138, 232, 235, 120, 250, 59, 87, 49, 47, 92, 0, 53, 70, 117, 106, + 9, 58, 94, 162, 46, 73, 207, 216, 42, 88, 37, 0, 1, 113, 18, 32, 157, 222, 244, 8, + 201, 203, 227, 28, 200, 52, 110, 87, 59, 111, 73, 183, 219, 136, 231, 122, 217, 98, + 248, 17, 55, 92, 13, 193, 96, 33, 78, 221, 216, 42, 88, 37, 0, 1, 113, 18, 32, 77, + 105, 127, 145, 43, 92, 51, 62, 146, 49, 240, 60, 247, 70, 137, 32, 234, 4, 133, + 148, 240, 68, 151, 216, 214, 95, 82, 226, 166, 42, 18, 227, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 3, 6, 19, 112, 130, 51, 131, 110, 151, 115, 239, 231, 12, 99, 234, + 215, 186, 144, 231, 113, 209, 228, 83, 82, 110, 85, 67, 20, 161, 199, 125, 255, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 234, 90, 149, 221, 100, 13, 34, 67, 217, 72, + 43, 220, 251, 233, 160, 110, 239, 156, 222, 98, 114, 168, 174, 64, 3, 133, 100, + 223, 8, 185, 130, 121, 216, 42, 88, 37, 0, 1, 113, 18, 32, 147, 247, 191, 37, 195, + 162, 135, 198, 15, 138, 36, 248, 95, 155, 202, 58, 52, 173, 213, 86, 150, 217, 12, + 96, 114, 223, 6, 238, 192, 56, 153, 91, 216, 42, 88, 37, 0, 1, 113, 18, 32, 64, + 179, 68, 155, 124, 57, 41, 88, 10, 121, 236, 64, 109, 126, 220, 167, 201, 19, 209, + 65, 126, 133, 58, 34, 54, 162, 143, 249, 94, 59, 6, 132, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 192, 228, 216, 176, 153, 81, 131, 73, 249, 62, 87, 139, 161, 125, 121, + 70, 172, 186, 109, 180, 10, 218, 131, 165, 47, 35, 9, 3, 232, 96, 195, 21, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 187, 24, 211, 28, 45, 82, 174, 51, 23, 99, 190, 72, 95, + 144, 79, 142, 170, 85, 135, 157, 98, 205, 215, 179, 165, 218, 12, 76, 185, 152, + 143, 59, 216, 42, 88, 37, 0, 1, 113, 18, 32, 138, 40, 4, 210, 161, 208, 178, 75, + 39, 87, 72, 43, 118, 77, 233, 63, 108, 148, 217, 240, 131, 66, 75, 109, 55, 191, + 92, 46, 113, 94, 140, 206, 216, 42, 88, 37, 0, 1, 113, 18, 32, 84, 68, 202, 54, + 159, 123, 21, 248, 185, 203, 44, 198, 125, 115, 158, 231, 69, 141, 236, 89, 134, + 15, 108, 147, 161, 179, 73, 79, 84, 78, 85, 54, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 143, 158, 60, 215, 167, 168, 26, 7, 151, 183, 166, 160, 169, 75, 170, 3, 43, 95, + 159, 144, 60, 181, 130, 5, 191, 131, 160, 207, 250, 134, 133, 174, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 58, 75, 153, 197, 110, 178, 215, 85, 241, 20, 0, 78, 202, 104, + 198, 56, 129, 150, 116, 26, 162, 157, 160, 197, 238, 139, 208, 30, 174, 200, 149, + 2, 216, 42, 88, 37, 0, 1, 113, 18, 32, 49, 125, 210, 205, 212, 215, 212, 254, 117, + 212, 89, 248, 200, 91, 208, 180, 148, 56, 146, 167, 64, 248, 96, 5, 246, 65, 0, + 237, 112, 131, 246, 72, 216, 42, 88, 37, 0, 1, 113, 18, 32, 42, 180, 254, 227, 82, + 246, 192, 218, 14, 11, 104, 46, 228, 77, 181, 159, 231, 17, 41, 82, 61, 177, 59, + 103, 71, 112, 63, 253, 10, 141, 226, 253, 216, 42, 88, 37, 0, 1, 113, 18, 32, 152, + 250, 19, 126, 190, 179, 125, 167, 229, 78, 133, 212, 165, 135, 131, 158, 105, 62, + 200, 190, 162, 32, 9, 176, 22, 210, 5, 143, 152, 142, 53, 47, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 8, 2, 28, 195, 152, 52, 109, 15, 35, 195, 15, 174, 140, 65, 100, + 16, 98, 224, 30, 205, 234, 90, 148, 59, 133, 227, 32, 38, 72, 50, 127, 58, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 227, 234, 225, 58, 191, 165, 213, 151, 98, 28, 229, 152, + 94, 236, 177, 200, 184, 210, 147, 249, 149, 123, 241, 222, 104, 213, 210, 217, 92, + 101, 124, 68, 216, 42, 88, 37, 0, 1, 113, 18, 32, 46, 183, 146, 198, 100, 14, 12, + 140, 41, 22, 251, 134, 171, 1, 215, 187, 7, 176, 119, 203, 69, 94, 56, 129, 37, + 178, 170, 13, 71, 87, 198, 59, 216, 42, 88, 37, 0, 1, 113, 18, 32, 60, 243, 131, + 11, 63, 60, 116, 240, 39, 123, 215, 186, 187, 13, 39, 94, 191, 193, 180, 54, 115, + 195, 13, 69, 107, 188, 146, 196, 213, 242, 80, 28, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 232, 63, 21, 142, 8, 222, 34, 47, 194, 255, 34, 26, 172, 219, 184, 215, 32, 50, + 237, 66, 225, 112, 48, 27, 215, 255, 210, 175, 54, 9, 219, 224, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 223, 104, 84, 39, 186, 176, 255, 11, 147, 169, 187, 78, 98, 204, + 99, 131, 195, 149, 31, 109, 35, 126, 153, 34, 123, 78, 42, 223, 117, 193, 107, 60, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 134, 91, 133, 181, 11, 187, 125, 157, 161, 127, + 212, 65, 57, 99, 54, 137, 168, 210, 71, 127, 90, 148, 164, 21, 71, 139, 30, 87, 94, + 35, 195, 249, 216, 42, 88, 37, 0, 1, 113, 18, 32, 229, 225, 53, 41, 226, 86, 143, + 21, 227, 247, 145, 80, 201, 248, 206, 143, 74, 30, 50, 240, 200, 139, 45, 25, 60, + 42, 138, 227, 112, 242, 58, 36, 216, 42, 88, 37, 0, 1, 113, 18, 32, 136, 165, 157, + 187, 17, 165, 47, 202, 220, 224, 12, 77, 105, 194, 65, 143, 109, 117, 65, 243, 115, + 207, 15, 122, 124, 45, 171, 40, 41, 142, 243, 189, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 150, 27, 53, 58, 176, 114, 160, 217, 57, 197, 116, 119, 111, 145, 157, 80, 101, + 249, 234, 202, 58, 16, 100, 204, 179, 41, 200, 189, 179, 118, 209, 59, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 102, 172, 106, 134, 138, 247, 31, 120, 245, 175, 23, 30, + 135, 40, 83, 182, 4, 250, 238, 225, 237, 7, 111, 74, 37, 228, 192, 254, 242, 211, + 42, 64, 216, 42, 88, 37, 0, 1, 113, 18, 32, 13, 148, 211, 28, 164, 87, 44, 130, 22, + 17, 206, 37, 249, 11, 143, 70, 221, 1, 72, 109, 228, 48, 177, 167, 90, 70, 51, 35, + 3, 16, 29, 212, 216, 42, 88, 37, 0, 1, 113, 18, 32, 14, 217, 244, 64, 68, 174, 103, + 237, 62, 117, 181, 207, 165, 162, 106, 172, 16, 49, 87, 4, 222, 207, 225, 54, 48, + 141, 0, 33, 24, 2, 207, 254, 216, 42, 88, 37, 0, 1, 113, 18, 32, 56, 123, 3, 170, + 86, 20, 144, 49, 33, 226, 221, 233, 41, 187, 56, 96, 124, 234, 211, 17, 148, 92, + 19, 55, 155, 155, 107, 156, 192, 47, 21, 68, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 132, 141, 62, 132, 87, 6, 121, 213, 227, 59, 94, 226, 56, 10, 191, 75, 88, 81, 247, + 65, 178, 241, 214, 73, 39, 38, 25, 186, 34, 87, 143, 100, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 152, 30, 253, 122, 6, 186, 225, 121, 115, 132, 108, 93, 130, 159, 152, + 164, 123, 189, 108, 82, 55, 22, 88, 242, 40, 134, 32, 55, 122, 204, 220, 44, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 186, 233, 51, 107, 113, 192, 227, 166, 127, 182, 71, + 218, 70, 73, 154, 120, 251, 217, 245, 21, 115, 173, 115, 197, 112, 187, 177, 244, + 68, 234, 250, 192, 216, 42, 88, 37, 0, 1, 113, 18, 32, 221, 199, 67, 208, 159, 100, + 86, 43, 117, 147, 3, 36, 197, 103, 80, 82, 45, 194, 59, 81, 116, 134, 97, 178, 175, + 84, 205, 207, 169, 254, 178, 39, 216, 42, 88, 37, 0, 1, 113, 18, 32, 124, 56, 198, + 65, 129, 44, 15, 1, 38, 117, 8, 169, 202, 68, 216, 49, 34, 86, 217, 226, 229, 36, + 16, 58, 133, 186, 253, 239, 18, 22, 90, 129, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 68, 127, 58, 68, 110, 203, 74, 222, 96, 68, 94, 8, 199, 14, 129, 190, 232, 220, + 117, 12, 142, 140, 48, 23, 176, 27, 139, 113, 58, 121, 193, 216, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 246, 3, 148, 180, 192, 243, 147, 114, 155, 53, 229, 92, 44, 89, + 204, 30, 105, 232, 82, 155, 205, 181, 67, 232, 58, 195, 89, 255, 24, 66, 67, 25, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 33, 187, 1, 118, 170, 102, 67, 25, 170, 21, + 223, 222, 227, 134, 12, 225, 251, 183, 128, 138, 63, 255, 44, 87, 216, 12, 12, 231, + 160, 193, 197, 204, 216, 42, 88, 37, 0, 1, 113, 18, 32, 79, 116, 36, 143, 190, 133, + 96, 213, 102, 30, 149, 245, 53, 127, 93, 127, 154, 88, 237, 105, 186, 66, 168, 177, + 99, 110, 177, 138, 181, 249, 214, 217, 216, 42, 88, 37, 0, 1, 113, 18, 32, 7, 222, + 146, 167, 127, 138, 38, 233, 202, 97, 127, 92, 30, 232, 233, 61, 114, 75, 255, 144, + 162, 110, 255, 176, 104, 88, 27, 3, 255, 206, 199, 90, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 212, 206, 161, 16, 20, 104, 21, 90, 163, 93, 189, 158, 140, 41, 169, 173, + 232, 83, 204, 36, 122, 2, 22, 188, 213, 202, 139, 7, 255, 198, 16, 221, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 174, 32, 24, 188, 27, 251, 210, 222, 52, 233, 230, 191, + 151, 99, 204, 75, 123, 125, 29, 92, 142, 231, 45, 191, 6, 97, 148, 194, 62, 82, 54, + 40, 216, 42, 88, 37, 0, 1, 113, 18, 32, 192, 127, 166, 32, 146, 74, 168, 232, 196, + 206, 21, 113, 144, 39, 198, 216, 167, 48, 25, 155, 195, 103, 13, 141, 17, 144, 93, + 88, 65, 184, 104, 71, 216, 42, 88, 37, 0, 1, 113, 18, 32, 21, 175, 147, 45, 241, + 68, 226, 219, 8, 47, 105, 46, 173, 120, 32, 121, 76, 128, 124, 141, 37, 5, 159, + 191, 205, 15, 36, 130, 1, 214, 236, 196, 216, 42, 88, 37, 0, 1, 113, 18, 32, 76, + 178, 54, 122, 12, 146, 127, 193, 131, 159, 54, 245, 199, 127, 25, 133, 227, 45, + 204, 223, 235, 57, 193, 53, 196, 109, 7, 205, 197, 114, 184, 73, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 163, 99, 155, 201, 6, 10, 38, 133, 217, 19, 200, 123, 65, 66, + 130, 77, 89, 135, 175, 143, 56, 215, 109, 224, 27, 113, 54, 84, 208, 26, 234, 217, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 66, 71, 98, 66, 158, 215, 32, 109, 57, 220, + 254, 240, 220, 169, 190, 220, 29, 229, 9, 39, 30, 234, 13, 229, 229, 167, 120, 249, + 45, 190, 3, 242, 216, 42, 88, 37, 0, 1, 113, 18, 32, 156, 56, 108, 146, 191, 241, + 208, 106, 85, 157, 43, 108, 16, 9, 114, 131, 131, 87, 112, 216, 211, 222, 213, 111, + 141, 6, 241, 77, 174, 153, 75, 214, 216, 42, 88, 37, 0, 1, 113, 18, 32, 66, 47, + 187, 80, 185, 62, 174, 184, 200, 183, 80, 145, 231, 162, 48, 48, 1, 29, 128, 163, + 206, 19, 226, 140, 113, 213, 73, 181, 60, 69, 51, 39, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 74, 86, 45, 74, 203, 84, 132, 89, 192, 0, 120, 168, 155, 146, 231, 195, 7, + 27, 137, 187, 156, 223, 93, 174, 5, 207, 16, 93, 255, 106, 126, 207, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 122, 205, 66, 216, 149, 177, 163, 180, 43, 200, 59, 207, + 198, 47, 174, 223, 196, 192, 211, 231, 21, 176, 237, 32, 250, 127, 42, 13, 213, 8, + 96, 242, 216, 42, 88, 37, 0, 1, 113, 18, 32, 188, 134, 245, 41, 252, 195, 47, 111, + 4, 111, 157, 41, 221, 219, 97, 136, 234, 179, 153, 21, 203, 110, 4, 117, 121, 23, + 151, 188, 227, 125, 180, 248, 216, 42, 88, 37, 0, 1, 113, 18, 32, 12, 146, 67, 135, + 102, 70, 167, 177, 140, 144, 188, 236, 4, 86, 168, 220, 70, 214, 23, 182, 1, 85, + 211, 89, 80, 127, 168, 157, 227, 60, 184, 131, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 174, 175, 49, 13, 119, 89, 229, 123, 38, 41, 151, 16, 124, 179, 192, 211, 228, 246, + 199, 91, 70, 139, 89, 111, 246, 216, 55, 244, 237, 149, 190, 48, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 186, 189, 5, 216, 17, 68, 133, 182, 94, 32, 98, 38, 64, 110, 19, + 90, 20, 21, 89, 171, 159, 161, 94, 139, 107, 228, 229, 85, 244, 234, 137, 223, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 234, 11, 80, 27, 220, 139, 21, 85, 216, 146, 153, + 105, 23, 125, 19, 105, 109, 189, 14, 239, 98, 139, 14, 1, 35, 116, 73, 105, 146, + 236, 55, 174, 216, 42, 88, 37, 0, 1, 113, 18, 32, 60, 120, 195, 48, 131, 215, 164, + 233, 109, 232, 70, 247, 245, 62, 178, 239, 36, 202, 122, 135, 49, 87, 159, 44, 91, + 239, 140, 242, 112, 189, 190, 136, 216, 42, 88, 37, 0, 1, 113, 18, 32, 69, 130, + 145, 215, 130, 174, 159, 112, 52, 16, 79, 198, 56, 51, 35, 28, 219, 24, 13, 56, + 139, 175, 76, 4, 55, 227, 66, 131, 34, 40, 185, 149, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 95, 135, 47, 121, 148, 35, 139, 56, 189, 124, 186, 111, 253, 200, 123, 22, + 50, 45, 68, 62, 216, 165, 101, 184, 187, 191, 105, 181, 140, 144, 162, 12, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 86, 227, 155, 184, 112, 128, 195, 17, 2, 10, 23, 227, + 151, 79, 227, 26, 24, 161, 8, 223, 89, 218, 88, 212, 197, 115, 34, 19, 168, 49, + 115, 79, 216, 42, 88, 37, 0, 1, 113, 18, 32, 252, 160, 116, 76, 247, 61, 13, 253, + 191, 229, 124, 228, 204, 225, 195, 249, 233, 180, 196, 221, 169, 80, 126, 73, 125, + 69, 253, 2, 196, 116, 130, 171, 216, 42, 88, 37, 0, 1, 113, 18, 32, 228, 114, 113, + 224, 174, 3, 239, 146, 122, 148, 107, 70, 112, 84, 206, 67, 225, 96, 36, 123, 76, + 55, 254, 110, 161, 142, 121, 81, 109, 150, 118, 38, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 142, 164, 68, 118, 167, 198, 158, 240, 108, 15, 128, 102, 25, 141, 238, 198, + 12, 190, 55, 253, 248, 41, 221, 45, 10, 238, 69, 4, 157, 165, 143, 177, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 160, 48, 131, 18, 116, 148, 175, 200, 174, 212, 75, 76, + 183, 61, 133, 230, 54, 53, 156, 239, 14, 75, 2, 158, 135, 109, 79, 189, 146, 130, + 108, 58, 216, 42, 88, 37, 0, 1, 113, 18, 32, 141, 13, 129, 217, 224, 151, 1, 201, + 102, 14, 225, 150, 153, 49, 169, 93, 114, 136, 216, 233, 195, 198, 64, 48, 17, 226, + 24, 194, 88, 96, 125, 165, 216, 42, 88, 37, 0, 1, 113, 18, 32, 190, 111, 54, 166, + 223, 172, 72, 223, 225, 74, 254, 79, 132, 93, 10, 167, 116, 89, 135, 210, 201, 247, + 87, 150, 147, 185, 83, 147, 183, 18, 214, 66, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 210, 34, 150, 170, 209, 5, 159, 27, 53, 142, 166, 13, 180, 212, 192, 131, 1, 123, + 24, 191, 210, 102, 115, 162, 84, 84, 98, 89, 181, 40, 181, 220, 131, 26, 1, 1, 20, + 138, 0, 246, 216, 42, 69, 0, 1, 85, 0, 0, + ]; + let as_json_raw = serde_json::json!({"kind":2,"slot":16848011,"shredding":[{"entry_end_idx":0,"shred_end_idx":0},{"entry_end_idx":1,"shred_end_idx":1},{"entry_end_idx":2,"shred_end_idx":2},{"entry_end_idx":3,"shred_end_idx":3},{"entry_end_idx":4,"shred_end_idx":4},{"entry_end_idx":5,"shred_end_idx":5},{"entry_end_idx":6,"shred_end_idx":6},{"entry_end_idx":7,"shred_end_idx":7},{"entry_end_idx":8,"shred_end_idx":8},{"entry_end_idx":9,"shred_end_idx":9},{"entry_end_idx":10,"shred_end_idx":10},{"entry_end_idx":11,"shred_end_idx":11},{"entry_end_idx":12,"shred_end_idx":-1},{"entry_end_idx":13,"shred_end_idx":-1},{"entry_end_idx":14,"shred_end_idx":13},{"entry_end_idx":15,"shred_end_idx":-1},{"entry_end_idx":16,"shred_end_idx":14},{"entry_end_idx":17,"shred_end_idx":-1},{"entry_end_idx":18,"shred_end_idx":-1},{"entry_end_idx":19,"shred_end_idx":15},{"entry_end_idx":20,"shred_end_idx":-1},{"entry_end_idx":21,"shred_end_idx":-1},{"entry_end_idx":22,"shred_end_idx":17},{"entry_end_idx":23,"shred_end_idx":-1},{"entry_end_idx":24,"shred_end_idx":-1},{"entry_end_idx":25,"shred_end_idx":-1},{"entry_end_idx":26,"shred_end_idx":19},{"entry_end_idx":27,"shred_end_idx":-1},{"entry_end_idx":28,"shred_end_idx":-1},{"entry_end_idx":29,"shred_end_idx":-1},{"entry_end_idx":30,"shred_end_idx":-1},{"entry_end_idx":31,"shred_end_idx":21},{"entry_end_idx":32,"shred_end_idx":-1},{"entry_end_idx":33,"shred_end_idx":22},{"entry_end_idx":34,"shred_end_idx":23},{"entry_end_idx":35,"shred_end_idx":24},{"entry_end_idx":36,"shred_end_idx":25},{"entry_end_idx":37,"shred_end_idx":26},{"entry_end_idx":38,"shred_end_idx":27},{"entry_end_idx":39,"shred_end_idx":28},{"entry_end_idx":40,"shred_end_idx":29},{"entry_end_idx":41,"shred_end_idx":30},{"entry_end_idx":42,"shred_end_idx":31},{"entry_end_idx":43,"shred_end_idx":32},{"entry_end_idx":44,"shred_end_idx":33},{"entry_end_idx":45,"shred_end_idx":34},{"entry_end_idx":46,"shred_end_idx":35},{"entry_end_idx":47,"shred_end_idx":36},{"entry_end_idx":48,"shred_end_idx":37},{"entry_end_idx":49,"shred_end_idx":38},{"entry_end_idx":50,"shred_end_idx":39},{"entry_end_idx":51,"shred_end_idx":40},{"entry_end_idx":52,"shred_end_idx":41},{"entry_end_idx":53,"shred_end_idx":42},{"entry_end_idx":54,"shred_end_idx":43},{"entry_end_idx":55,"shred_end_idx":44},{"entry_end_idx":56,"shred_end_idx":45},{"entry_end_idx":57,"shred_end_idx":46},{"entry_end_idx":58,"shred_end_idx":47},{"entry_end_idx":59,"shred_end_idx":48},{"entry_end_idx":60,"shred_end_idx":49},{"entry_end_idx":61,"shred_end_idx":50},{"entry_end_idx":62,"shred_end_idx":51},{"entry_end_idx":63,"shred_end_idx":52},{"entry_end_idx":64,"shred_end_idx":53},{"entry_end_idx":65,"shred_end_idx":54},{"entry_end_idx":66,"shred_end_idx":55},{"entry_end_idx":67,"shred_end_idx":56},{"entry_end_idx":68,"shred_end_idx":57},{"entry_end_idx":69,"shred_end_idx":58},{"entry_end_idx":70,"shred_end_idx":59},{"entry_end_idx":71,"shred_end_idx":60},{"entry_end_idx":72,"shred_end_idx":61},{"entry_end_idx":73,"shred_end_idx":62},{"entry_end_idx":74,"shred_end_idx":63},{"entry_end_idx":75,"shred_end_idx":64},{"entry_end_idx":76,"shred_end_idx":-1},{"entry_end_idx":77,"shred_end_idx":-1},{"entry_end_idx":78,"shred_end_idx":65},{"entry_end_idx":79,"shred_end_idx":-1},{"entry_end_idx":80,"shred_end_idx":-1},{"entry_end_idx":81,"shred_end_idx":-1},{"entry_end_idx":82,"shred_end_idx":67},{"entry_end_idx":83,"shred_end_idx":-1},{"entry_end_idx":84,"shred_end_idx":68},{"entry_end_idx":85,"shred_end_idx":69},{"entry_end_idx":86,"shred_end_idx":-1},{"entry_end_idx":87,"shred_end_idx":-1},{"entry_end_idx":88,"shred_end_idx":-1},{"entry_end_idx":89,"shred_end_idx":-1},{"entry_end_idx":90,"shred_end_idx":-1},{"entry_end_idx":91,"shred_end_idx":-1},{"entry_end_idx":92,"shred_end_idx":-1},{"entry_end_idx":93,"shred_end_idx":72},{"entry_end_idx":94,"shred_end_idx":-1},{"entry_end_idx":95,"shred_end_idx":-1},{"entry_end_idx":96,"shred_end_idx":-1},{"entry_end_idx":97,"shred_end_idx":-1},{"entry_end_idx":98,"shred_end_idx":-1},{"entry_end_idx":99,"shred_end_idx":-1},{"entry_end_idx":100,"shred_end_idx":-1},{"entry_end_idx":101,"shred_end_idx":75},{"entry_end_idx":102,"shred_end_idx":-1},{"entry_end_idx":103,"shred_end_idx":-1},{"entry_end_idx":104,"shred_end_idx":-1},{"entry_end_idx":105,"shred_end_idx":-1},{"entry_end_idx":106,"shred_end_idx":-1},{"entry_end_idx":107,"shred_end_idx":-1},{"entry_end_idx":108,"shred_end_idx":-1},{"entry_end_idx":109,"shred_end_idx":78},{"entry_end_idx":110,"shred_end_idx":-1},{"entry_end_idx":111,"shred_end_idx":-1},{"entry_end_idx":112,"shred_end_idx":-1},{"entry_end_idx":113,"shred_end_idx":-1},{"entry_end_idx":114,"shred_end_idx":-1},{"entry_end_idx":115,"shred_end_idx":-1},{"entry_end_idx":116,"shred_end_idx":-1},{"entry_end_idx":117,"shred_end_idx":81},{"entry_end_idx":118,"shred_end_idx":-1},{"entry_end_idx":119,"shred_end_idx":82},{"entry_end_idx":120,"shred_end_idx":83},{"entry_end_idx":121,"shred_end_idx":84},{"entry_end_idx":122,"shred_end_idx":85},{"entry_end_idx":123,"shred_end_idx":86},{"entry_end_idx":124,"shred_end_idx":87}],"entries":[{"/":"bafyreifiljqbzjqmjnguctohiqmkm6ogmg7prx5pq75qfyl6yjvahqv6nm"},{"/":"bafyreid5fj253ix2bh4se75pgmiiraikkhz5dje5et6il7v5zcouveehtq"},{"/":"bafyreifmanxdsdxuz4g7qoci3ipnpzdxrqqo2ka2lujxuhxvti4tfpwqsa"},{"/":"bafyreigu4lcxy6q7sqfo3dvtgssyfbtv7ebfip5rixsgscs5xkxgkohdqm"},{"/":"bafyreifojc6akwnbam4qwhng2eknybwghuw6bchefcppb77dwk4q3x634u"},{"/":"bafyreiasermlv2oxhwbqnrstx2xfzcxwegxcdbb257ktwxbxp2y6drluie"},{"/":"bafyreif42fy5celttghcmu56jcxlqszxeienyeq4n55n2gblm5baelmjty"},{"/":"bafyreigrenu44ksbapi6xjvtmuv44bg3r6qoezfdte6swd24pj7bovb6jy"},{"/":"bafyreicjkcbgelriertgy7oxvluqly4azh5mg5f6ww32rdt5nsfnjw5tp4"},{"/":"bafyreic76qdhz7mkzxgakbf4vilw2jfox5i6n7cenn4sa3crz6567musya"},{"/":"bafyreieqiqjdxxzbzjttqy6fjv7rpucfnfc7o2pzcnd77tmdvfubyy6fwi"},{"/":"bafyreiey55hgvo6suxbtmape4354zh3ut24ng6vbdcznbcaaa66chrfefe"},{"/":"bafyreifb5ai37qgivkxe4jkhxsp7yx7jd532p3j4nyj2lxycl62bdcqfbe"},{"/":"bafyreifmjvfvhrklrccfqjv73qg7hkzbzoxlp2xlb7rb6w6wggkwk2w7qq"},{"/":"bafyreig4fqcbll2ebnuolsygy3c2mmhr2xlegeynza2cnfmivikjznf3dq"},{"/":"bafyreihdywyjsgcvfpbri3lfva7z5obvkqkjt5dsd5d6hn7gzlmryety2m"},{"/":"bafyreibeckhw2tlg4kq3oyw2hzbscf5zq4oacnxcsrqk2g6kpctol6zzku"},{"/":"bafyreibl2c2zxyp6iopopqjlcvud6ydrkjaojqinwfxpeksfny5fa7cgxq"},{"/":"bafyreihokydrp2jcc3aimok2gusry52cq3e3qqzo4b3qa3242bgcnalj2a"},{"/":"bafyreifuutenglldkeutff5wkywqw5fno2gpbcqhjoqk4jxkermvrzaomq"},{"/":"bafyreictdfxbjxcsq7e7edykxbhegzghpymmqcahwbtmfc6eers47vmahe"},{"/":"bafyreieiixahisdxfuv7jjtde42i2icaqdfee426im5doqe33iwwyv56ey"},{"/":"bafyreieudhjjtau2yfmuif3m5oezhexmiy62ys3iqayp5jqgvci6ruow5m"},{"/":"bafyreih7sw76c3vkql65w2p75ewjdrrxe7d2dijhhzgg5lrfkwbxrnqzca"},{"/":"bafyreifaks6dammgavp6dki4polw4w5llrql2eyrsjdckn4tz3h4f6zmoq"},{"/":"bafyreicstk6hmyi5kc5ie6y4wnwywugynfmlsmoq7vo56mwtb3qaujjdgi"},{"/":"bafyreibc4jevwag7c6c2csnow22puyupc3wpxcvtx2z257qagstuep6zmy"},{"/":"bafyreiaskan2ozpzmzrckxrhytafeh4znl6jqowny4kvscyoxsb42jxdkq"},{"/":"bafyreicvdwe77soazqw4kbg6exppzaoqhc2bs7lefrehibkcqlhqtbokl4"},{"/":"bafyreibm3vxjws7o6qnpklwiqu6uyl2eg6zvprnotud7wna4tqgfkmhnky"},{"/":"bafyreiglcixc7me3u355wcr7xvet75cgw2lk7wtui22lka4fybt4gpjuu4"},{"/":"bafyreib6fbzrirpp4gtbz2njetn4ihobeehvioatjdoay66cwvz4ug6vsu"},{"/":"bafyreig3v3ltmw52wsjusfu7y3ue5fesdvef5567rjwsy67elvzh7whndm"},{"/":"bafyreihb4mzev7bffmx52fykilxxrukkilyj5o2fwxa5ldmqofp453amby"},{"/":"bafyreicdrxhde7faynw2j3z3na3xqj32pwjmx43kw4hbobuwg5rraxhlpm"},{"/":"bafyreidmxw2qnw54uhsnsxx2wxrgst2l2fqmi25qlaitfjvjq5jd3mgnmy"},{"/":"bafyreicdiu5g4h3zx2sntwsud75l3noumbbrnwq3roo7337ryenzqr4bz4"},{"/":"bafyreibchdff7t4moiydb2mmw5itdeglppph5cvqjeolk53h6xijdthune"},{"/":"bafyreicwau6cnrem6au7socqnitzgeiszbrgpou3vnlti4awpdsy233j3y"},{"/":"bafyreidzytt6fjk5huolhq4c4rpzhoc6iyke6uowl26hunivy42n3iirfe"},{"/":"bafyreieshws6njwhxs4xrh5z3peu6i3ze3fsibhrdids7tvaiswndwry54"},{"/":"bafyreihuyyultpgd47sxct4227j65mci2rv72hlitn2x7rykniy4tcfabu"},{"/":"bafyreie6zfensf6rkrfgow3yryvvciost5brfowfnefc6joxmrloxcq25e"},{"/":"bafyreiftigxyi3mrn5yar3wprze6m56wlrxfedjm5rugmy2abdfebt3cq4"},{"/":"bafyreidz4jojjn62jfcaghklu4hl27blcla2jia3x5gqaaajdsroeexdyi"},{"/":"bafyreiazfg363okrecgvgm4cvitn3idizxegvsjpcnyntiafgiepvv3rjq"},{"/":"bafyreicfu5yjqdbbutuzpqlugkgq4lpp3bhobncng7gih7nqe3atyv5bni"},{"/":"bafyreie6bbwqlxinxzlz7zb2nunfaxaa7erbf2b4h5q5iyijk5wtjhfgpu"},{"/":"bafyreiarqfxo6czw27n7t67iugsooejszef7gibkr6bqqxap6xnos2vbhe"},{"/":"bafyreiawa4zrtqwiqausm65gg4yppz6csxyzhb44r6tdaaiz6xrwl66pae"},{"/":"bafyreievclildglrrtntpnvfbb4shwhdocdz7dvz23u4zvpe5ogjwnkhru"},{"/":"bafyreibaeusx7l6zmuny6l6afdp6ra4mrlyd3fwsybfhirhliq5d2fuzvy"},{"/":"bafyreidk6ptl3erb6c3sdf4s4hvdxobfedi2quguwzufgsyazkwhfknohe"},{"/":"bafyreifehmusapw2w2nk2xaecjkeit3gr5qdlk4ufxm6tj7dqa3u7orufe"},{"/":"bafyreifhuo5a2ujr4evyelm5d7uqllpwgkapetizuuxyamum52pr3zl5by"},{"/":"bafyreibyuelhubwcuy7vpokpij6habktgajgzcfip63co2jjijejg6hvgi"},{"/":"bafyreiaqj52c23wqoixfp2a3vqm6dstqbxpycopf724tr4slwfufvkquum"},{"/":"bafyreidwfx3d56yamiaf4ssstwjdehhwlynweynmwpehu4qa57rqbwsvrq"},{"/":"bafyreiauum3deq2xorhhiy4k5dvxr6r3k4ys6xaagvdhk2qjhjpkelsjz4"},{"/":"bafyreie5332arsol4momqndok45w6snx3oeoo6wzml4bcn24bxawaiko3u"},{"/":"bafyreicnnf7zck24gm7jempqht3uncja5icilfhqisl5rvs7klrkmkqs4m"},{"/":"bafyreiadayjxbartqnxjo47p44ggh2wxxkioo4or4rjve3svimkkdr3574"},{"/":"bafyreihklkk52zanejb5ssbl3t56tido56on4ytsvcxeaa4fmtpqromcpe"},{"/":"bafyreiet667slq5cq7da7cre7bpzxsr2gsw5kvuw3egga4w7a3xmaoezlm"},{"/":"bafyreicawncjw7bzffmau6pmibwx5xfhzej5cql6qu5cenvcr74v4oygqq"},{"/":"bafyreiga4tmlbgkrqne7spsxroqx26kgvs5g3nak3kb2klzdbeb6qygdcu"},{"/":"bafyreif3ddjrylksvyzroy56jbpzat4ovjkyphlczxl3hjo2brgltgephm"},{"/":"bafyreiekfacnfioqwjfsov2ifn3e32j7nsknt4edijfw2n57lqxhcxumzy"},{"/":"bafyreicuitfdnh33cx4ltszmyz6xhhxhiwg6ywmgb5wjhintjfhvitsvgy"},{"/":"bafyreiepty6npj5ididzpn5gucuuxkqdfnpz7eb4wwbalp4dudh7vbufvy"},{"/":"bafyreib2jom4k3vs25k7cfaaj3fgrrryqglhigvctwqml3ul2apk5sevai"},{"/":"bafyreibrpxjm3vgx2t7hlvcz7defxufusq4jfj2a7bqal5sbadwxba7wja"},{"/":"bafyreibkwt7oguxwydna4c3if3se3nm744issur5we5wor3qh76qvdpc7u"},{"/":"bafyreiey7ijx5pvtpwt6ktuf2ssypa46ne7mrpvceae3afwsawhzrdrvf4"},{"/":"bafyreiaiaiomhgbunuhshqypv2geczaqmlqb5tpklkkdxbpdeateqmt7hi"},{"/":"bafyreihd5lqtvp5f2wlwehhftbpozmoixdjjh6mvppy542gv2lmvyzl4iq"},{"/":"bafyreibow6jmmzaobsgcsfx3q2vqdv53a6yhps2fly4icjnsviguov6ghm"},{"/":"bafyreib46obqwpz4otyco66xxk5q2j26x7a3inttymguk254slcnl4sqdq"},{"/":"bafyreihih4ky4cg6eix4f7zcdkwnxogxeazo2qxboaybxv772kxtmco34a"},{"/":"bafyreig7nbkcpovq74fzhkn3jzrmyy4dyokr63jdp2mse62oflpxlqllhq"},{"/":"bafyreiegloc3kc53pwo2c76uie4wgnujvdjeo722sssbkr4ldzlv4i6d7e"},{"/":"bafyreihf4e2styswr4k6h54rkde7rtupjipdf4girmwrspbkrlrxb4r2eq"},{"/":"bafyreieiuwo3wenff7fnzyamjvu4eqmpnv2ud43tz4hxu7bnvmuctdxtxu"},{"/":"bafyreiewdm2tvmdsudmttrluo5xzdhkqmx46vsr2cbsmzmzjzc63g5wrhm"},{"/":"bafyreidgvrvincxxd54pllyxd2dsqu5wat5o5ypna5xuujpeyd7pfuzkia"},{"/":"bafyreianstjrzjcxfsbbmeooex4qxd2g3uauq3pegcy2owsggmrqgea52q"},{"/":"bafyreiao3h2earfom7wt45nvz6s2e2vmcayvobg6z7qtmmenaaqrqawp7y"},{"/":"bafyreibypmb2uvqusaysdyw55eu3wodaptvngemulqjtpg43noomalyviq"},{"/":"bafyreieeru7iivygphk6go264i4avp2llbi7oqns6hlesjzgdg5cev4pmq"},{"/":"bafyreieyd36xubv24f4xhbdmlwbj7gfepo6wyurxczmpekegea3xvtg4fq"},{"/":"bafyreif25ezww4oa4oth7nsh3jdetgty7pm7kfltvvz4k4f3wh2ej2x2ya"},{"/":"bafyreig5y5b5bh3ekyvxleydetcwoucsfxbdwuluqzq3fl2uzxh2t7vse4"},{"/":"bafyreid4hddedajmb4asm5iivhfejwbrejlntyxfeqidvbn27xxrefs2qe"},{"/":"bafyreicep45ei3wljlpgarc6bddq5an65dohkdeorqybpma3rnytu6ob3a"},{"/":"bafyreihwaokljqhtsnzjwnpflqwftta6nhuffg6nwvb6qowdlh7rqqsdde"},{"/":"bafyreibbxmaxnktgimm2ufo733rymdhb7o3ybcr774wfpwambtt2bqofzq"},{"/":"bafyreicpoqsi7pufmdkwmhuv6u2x6xl7tjmo22n2ikulcy3owgfll6ow3e"},{"/":"bafyreiah32jko74ke3u4uyl7lqpor2j5ojf77efcn373a2cydmb77twhli"},{"/":"bafyreiguz2qrafdicvnkgxn5t2gctknn5bj4yjd2aillzvokrmd77rqq3u"},{"/":"bafyreifoeamlyg732lpdj2pgx6lwhtclpn6r2xeo44w36btbstbd4urwfa"},{"/":"bafyreigap6tcbeskvdumjtqvogicprwyu4ybtg6dm4gy2emqlvmedodii4"},{"/":"bafyreiavv6js34ke4lnqql3jf2wxqidzjsahzdjfawp37tipesbadvxmyq"},{"/":"bafyreicmwi3hudesp7ayhhzw6xdx6gmf4mw4zx7lhhatlrdna7g4k4vyje"},{"/":"bafyreifdmon4sbqke2c5se6ipnaufasnlgd27dzy25w6ag3rgzknagxk3e"},{"/":"bafyreicci5refhwxebwttxh66doktpw4dxsqsjy65ig6lznhpd4s3pqd6i"},{"/":"bafyreie4hbwjfp7r2bvflhjlnqias4udqnlxbwgt33kw7dig6fg25gkl2y"},{"/":"bafyreiccf65vboj6v24mrn2qsht2embqaeoybi6ocpriy4ovjg2tyrjte4"},{"/":"bafyreickkywuvs2uqrm4aadyvcnzfz6da4nyto4435o24bopcbo762t6z4"},{"/":"bafyreid2zvbnrfnruo2cxsb3z7dc7lw7ytanhzyvwdwsb6t7fig5kcda6i"},{"/":"bafyreif4q32st7gdf5xqi345fho5wymi5kzzsfolnychk6ixs66og7nu7a"},{"/":"bafyreiamsjbyozsgu6yyzef45qcfnkg4i3lbpnqbkxjvsud7vco6gpfyqm"},{"/":"bafyreifov4yq252z4v5smkmxcb6lhqgt4t3mow2grnmw75wyg72o3fn6ga"},{"/":"bafyreif2xuc5qekeqw3f4idcezag4e22cqkvtk47ufpiw27e4vk7j2uj34"},{"/":"bafyreihkbnibxxelcvk5reuznelx2e3jnw6q533crmhaci3ujfuzf3bxvy"},{"/":"bafyreib4pdbtba6xutuw32cg672t5mxpetfhvbzrk6psyw7prtzhbpn6ra"},{"/":"bafyreicfqki5pavot5ydiecpyy4dgiy43mma2oelv5gain7dikbsekfzsu"},{"/":"bafyreic7q4xxtfbdrm4l27f2n764q6ywgiwuipwyuvs3ro57ng2yzefcbq"},{"/":"bafyreicw4on3q4eaymiqecqx4olu7yy2dcqqrx2z3jmnjrlteij2qmltj4"},{"/":"bafyreih4ub2ez5z5bx637zl44tgodq7z5g2mjxnjkb7es7kf7ubmi5ecvm"},{"/":"bafyreiheojy6blqd56jhvfdlizyfjtsd4fqci62mg77g5imopfiw3ftwey"},{"/":"bafyreieourchnj6gt3ygyd4amymy33wgbs7dp7pyfhos2cxoiucj3jmpwe"},{"/":"bafyreifagcbre5euv7ek5vcljs3t3bpggy2zz3yojmbj5b3nj66zfatmhi"},{"/":"bafyreienbwa5tyexahewmdxbs2mtdkk5okenr2odyzadaepcddbfqyd5uu"},{"/":"bafyreif6n43knx5mjdp6csx6j6cf2cvhormypuwj65lzne5zkoj3oewwii"},{"/":"bafyreigseklkvuift4ntldvgbw2njqedaf5rrp6smzz2evcumjm3kkfv3q"}],"meta":{"parent_slot":16848010,"blocktime":0,"block_height":null},"rewards":{"/":"bafkqaaa"}}); + + let block = Block::from_bytes(raw).unwrap(); + let as_json = block.to_json(); + assert_eq!(as_json, as_json_raw); + } + } +} + +// type Shredding struct { +// EntryEndIdx int +// ShredEndIdx int +// } +#[derive(Clone, PartialEq, Eq, Hash, Debug)] +pub struct Shredding { + pub entry_end_idx: i64, + pub shred_end_idx: i64, +} + +impl Shredding { + // from serde_cbor::Value + pub fn from_cbor(val: serde_cbor::Value) -> Shredding { + let mut shredding = Shredding { + entry_end_idx: 0, + shred_end_idx: 0, + }; + + if let serde_cbor::Value::Array(array) = val { + // println!("Kind: {:?}", array[0]); + if let serde_cbor::Value::Integer(entry_end_idx) = array[0] { + // println!("Kind: {:?}", Kind::from_u64(kind as u64).unwrap().to_string()); + shredding.entry_end_idx = entry_end_idx as i64; + } + if let serde_cbor::Value::Integer(shred_end_idx) = array[1] { + shredding.shred_end_idx = shred_end_idx as i64; + } + } + return shredding; + } + + pub fn to_json(&self) -> serde_json::Value { + let mut map = serde_json::Map::new(); + map.insert( + "entry_end_idx".to_string(), + serde_json::Value::from(self.entry_end_idx), + ); + map.insert( + "shred_end_idx".to_string(), + serde_json::Value::from(self.shred_end_idx), + ); + + return serde_json::Value::from(map); + } +} + +#[cfg(test)] +mod shredding_tests { + use super::*; + + #[test] + fn test_shredding() { + let shredding = Shredding { + entry_end_idx: 1, + shred_end_idx: 1, + }; + let json = shredding.to_json(); + + let wanted_json = serde_json::json!({ + "entry_end_idx": 1, + "shred_end_idx": 1 + }); + + assert_eq!(json, wanted_json); + } +} + +// type SlotMeta struct { +// Parent_slot int +// Blocktime int +// Block_height **int +// } +#[derive(Clone, PartialEq, Eq, Hash, Debug)] +pub struct SlotMeta { + pub parent_slot: u64, + pub blocktime: u64, + pub block_height: Option, +} + +impl SlotMeta { + // from serde_cbor::Value + pub fn from_cbor(val: serde_cbor::Value) -> SlotMeta { + let mut slot_meta = SlotMeta { + parent_slot: 0, + blocktime: 0, + block_height: None, + }; + + if let serde_cbor::Value::Array(array) = val { + // println!("Kind: {:?}", array[0]); + if let serde_cbor::Value::Integer(parent_slot) = array[0] { + // println!("Kind: {:?}", Kind::from_u64(kind as u64).unwrap().to_string()); + slot_meta.parent_slot = parent_slot as u64; + } + if let serde_cbor::Value::Integer(blocktime) = array[1] { + slot_meta.blocktime = blocktime as u64; + } + if let serde_cbor::Value::Integer(block_height) = array[2] { + slot_meta.block_height = Some(block_height as u64); + } + } + return slot_meta; + } + + pub fn to_json(&self) -> serde_json::Value { + let mut map = serde_json::Map::new(); + map.insert( + "parent_slot".to_string(), + serde_json::Value::from(self.parent_slot), + ); + map.insert( + "blocktime".to_string(), + serde_json::Value::from(self.blocktime), + ); + if self.block_height == None { + map.insert("block_height".to_string(), serde_json::Value::Null); + } else { + map.insert( + "block_height".to_string(), + serde_json::Value::from(self.block_height), + ); + } + + return serde_json::Value::from(map); + } +} + +#[cfg(test)] +mod slot_meta_tests { + use super::*; + + #[test] + fn test_slot_meta() { + let slot_meta = SlotMeta { + parent_slot: 1, + blocktime: 1, + block_height: Some(1), + }; + let json = slot_meta.to_json(); + + let wanted_json = serde_json::json!({ + "parent_slot": 1, + "blocktime": 1, + "block_height": 1 + }); + + assert_eq!(json, wanted_json); + } +} diff --git a/geyser-plugin-runner/src/dataframe.rs b/geyser-plugin-runner/src/dataframe.rs new file mode 100644 index 00000000..ddebc7e4 --- /dev/null +++ b/geyser-plugin-runner/src/dataframe.rs @@ -0,0 +1,225 @@ +use cid::Cid; +use serde_cbor; +use serde_json; + +use std::error::Error; + +use std::vec::Vec; + +use crate::node::Kind; +use crate::utils::Buffer; + +// type DataFrame struct { +// Kind int +// Hash **int +// Index **int +// Total **int +// Data []uint8 +// Next **List__Link +// } +#[derive(Clone, PartialEq, Eq, Hash, Debug)] +pub struct DataFrame { + pub kind: u64, + pub hash: Option, + pub index: Option, + pub total: Option, + pub data: Buffer, + pub next: Option>, +} + +impl DataFrame { + pub fn from_bytes(data: Vec) -> Result> { + let decoded_data: serde_cbor::Value = serde_cbor::from_slice(&data).unwrap(); + let data_frame = DataFrame::from_cbor(decoded_data)?; + return Ok(data_frame); + } + // from serde_cbor::Value + pub fn from_cbor(val: serde_cbor::Value) -> Result> { + let mut data_frame = DataFrame { + kind: 0, + hash: None, + index: None, + total: None, + data: Buffer::new(), + next: None, + }; + + if let serde_cbor::Value::Array(array) = val { + // println!("Kind: {:?}", array[0]); + if let serde_cbor::Value::Integer(kind) = array[0] { + // println!("Kind: {:?}", Kind::from_u64(kind as u64).unwrap().to_string()); + data_frame.kind = kind as u64; + + if kind as u64 != Kind::DataFrame as u64 { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!( + "Wrong kind for DataFrame. Expected {:?}, got {:?}", + Kind::DataFrame, + kind + ), + ))); + } + } + if let serde_cbor::Value::Integer(hash) = array[1] { + data_frame.hash = Some(hash as u64); + } + if let serde_cbor::Value::Integer(index) = array[2] { + data_frame.index = Some(index as u64); + } + if let serde_cbor::Value::Integer(total) = array[3] { + data_frame.total = Some(total as u64); + } + if let serde_cbor::Value::Bytes(data) = &array[4] { + data_frame.data = Buffer::from_vec(data.clone()); + } + + if array.len() > 5 { + if let serde_cbor::Value::Array(next) = &array[5] { + if next.len() == 0 { + data_frame.next = None; + } else { + let mut nexts = vec![]; + for cid in next { + if let serde_cbor::Value::Bytes(cid) = cid { + nexts.push(Cid::try_from(cid[1..].to_vec()).unwrap()); + } + } + data_frame.next = Some(nexts); + } + } + } + } + return Ok(data_frame); + } + + pub fn to_json(&self) -> serde_json::Value { + let mut next = vec![]; + if let Some(nexts) = &self.next { + for cid in nexts { + next.push(serde_json::json!({ + "/": cid.to_string() + })); + } + } + + let mut map = serde_json::Map::new(); + map.insert("kind".to_string(), serde_json::Value::from(self.kind)); + if self.hash == None { + map.insert("hash".to_string(), serde_json::Value::Null); + } else { + let hash_as_string = format!("{}", self.hash.unwrap() as u64); + map.insert("hash".to_string(), serde_json::Value::from(hash_as_string)); + } + if self.index == None { + map.insert("index".to_string(), serde_json::Value::Null); + } else { + map.insert("index".to_string(), serde_json::Value::from(self.index)); + } + if self.total == None { + map.insert("total".to_string(), serde_json::Value::Null); + } else { + map.insert("total".to_string(), serde_json::Value::from(self.total)); + } + map.insert( + "data".to_string(), + serde_json::Value::from(self.data.to_string()), + ); + if next.len() == 0 { + map.insert("next".to_string(), serde_json::Value::Null); + } else { + map.insert("next".to_string(), serde_json::Value::from(next)); + } + + return serde_json::Value::from(map); + } +} + +#[cfg(test)] +mod data_frame_tests { + use super::*; + + #[test] + fn test_data_frame() { + let data_frame = DataFrame { + kind: 6, + hash: Some(1), + index: Some(1), + total: Some(1), + data: Buffer::from_vec(vec![1]), + next: Some(vec![Cid::try_from( + vec![ + 1, 113, 18, 32, 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, 131, + 220, 232, 143, 20, 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, 38, 84, + 106, 225, + ] + .as_slice(), + ) + .unwrap()]), + }; + let json = data_frame.to_json(); + + let wanted_json = serde_json::json!({ + "kind": 6, + "hash": "1", + "index": 1, + "total": 1, + "data": Buffer::from_vec(vec![1]).to_string(), + "next": [ + { + "/": "bafyreibysst7x3lvzdrllbspoob5z2epcrb6bmzqqlcxxysvku4cmvdk4e" + } + ] + }); + + assert_eq!(json, wanted_json); + } + + #[test] + fn test_decoding() { + { + let raw = vec![ + 134, 6, 59, 70, 48, 192, 168, 213, 38, 83, 193, 1, 2, 70, 32, 119, 111, 114, 108, + 100, 128, + ]; + let as_json_raw = serde_json::json!({"kind":6,"hash":"13388989860809387070","index":1,"total":2,"data":"IHdvcmxk","next":null}); + + let data_frame = DataFrame::from_bytes(raw).unwrap(); + let as_json = data_frame.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 134, 6, 27, 72, 172, 245, 101, 152, 189, 52, 248, 24, 26, 24, 28, 74, 178, 79, 233, + 101, 240, 6, 201, 17, 9, 14, 128, + ]; + let as_json_raw = serde_json::json!({"kind":6,"hash":"5236830283428082936","index":26,"total":28,"data":"sk/pZfAGyREJDg==","next":null}); + + let data_frame = DataFrame::from_bytes(raw).unwrap(); + let as_json = data_frame.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 134, 6, 27, 72, 172, 245, 101, 152, 189, 52, 248, 22, 24, 28, 74, 111, 237, 179, + 173, 165, 39, 99, 171, 113, 233, 133, 216, 42, 88, 37, 0, 1, 113, 18, 32, 122, 71, + 2, 134, 225, 132, 61, 186, 162, 255, 184, 29, 48, 1, 138, 64, 232, 195, 187, 20, 2, + 107, 96, 133, 253, 99, 212, 159, 214, 235, 31, 176, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 28, 140, 185, 170, 59, 82, 138, 35, 215, 213, 58, 142, 227, 82, 31, 146, 35, + 230, 167, 145, 243, 214, 187, 136, 224, 31, 202, 225, 146, 245, 229, 198, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 107, 199, 31, 114, 114, 251, 65, 56, 222, 108, 243, 54, + 182, 63, 194, 178, 61, 197, 69, 4, 128, 71, 62, 116, 222, 43, 105, 250, 14, 182, + 175, 60, 216, 42, 88, 37, 0, 1, 113, 18, 32, 87, 50, 255, 0, 149, 48, 182, 80, 100, + 55, 160, 92, 192, 112, 136, 95, 186, 77, 166, 159, 244, 11, 211, 12, 111, 235, 187, + 124, 29, 52, 146, 102, 216, 42, 88, 37, 0, 1, 113, 18, 32, 81, 216, 114, 215, 30, + 122, 54, 226, 139, 196, 54, 28, 133, 44, 128, 91, 199, 16, 47, 41, 137, 190, 214, + 97, 150, 108, 65, 242, 217, 51, 49, 79, + ]; + let as_json_raw = serde_json::json!({"kind":6,"hash":"5236830283428082936","index":22,"total":28,"data":"b+2zraUnY6tx6Q==","next":[{"/":"bafyreid2i4binymehw5kf75yduyadcsa5db3wfacnnqil7ld2sp5n2y7wa"},{"/":"bafyreia4rs42uo2srir5pvj2r3rveh4septkpept225yrya7zlqzf5pfyy"},{"/":"bafyreidly4pxe4x3ie4n43htg23d7qvshxcukbeai47hjxrlnh5a5nvphq"},{"/":"bafyreicxgl7qbfjqwzigin5altahbcc7xjg2nh7ubpjqy37lxn6b2nesmy"},{"/":"bafyreicr3bznoht2g3rixrbwdscszac3y4ic6kmjx3lgdftmihznsmzrj4"}]}); + + let data_frame = DataFrame::from_bytes(raw).unwrap(); + let as_json = data_frame.to_json(); + assert_eq!(as_json, as_json_raw); + } + } +} diff --git a/geyser-plugin-runner/src/entry.rs b/geyser-plugin-runner/src/entry.rs new file mode 100644 index 00000000..aa89b61a --- /dev/null +++ b/geyser-plugin-runner/src/entry.rs @@ -0,0 +1,225 @@ +use cid::Cid; +use serde_cbor; +use serde_json; + +use std::error::Error; + +use std::vec::Vec; + +use crate::node::Kind; +use crate::utils; + +use crate::utils::Hash; + +// type Entry struct { +// Kind int +// NumHashes int +// Hash []uint8 +// Transactions List__Link +// } +#[derive(Clone, PartialEq, Eq, Hash, Debug)] +pub struct Entry { + pub kind: u64, + pub num_hashes: u64, + pub hash: Hash, + pub transactions: Vec, +} + +impl Entry { + pub fn from_bytes(data: Vec) -> Result> { + let decoded_data: serde_cbor::Value = serde_cbor::from_slice(&data).unwrap(); + let entry = Entry::from_cbor(decoded_data)?; + return Ok(entry); + } + + // from serde_cbor::Value + pub fn from_cbor(val: serde_cbor::Value) -> Result> { + let mut entry = Entry { + kind: 0, + num_hashes: 0, + hash: utils::Hash(vec![]), + transactions: vec![], + }; + + if let serde_cbor::Value::Array(array) = val { + // println!("Kind: {:?}", array[0]); + if let serde_cbor::Value::Integer(kind) = array[0] { + // println!("Kind: {:?}", Kind::from_u64(kind as u64).unwrap().to_string()); + entry.kind = kind as u64; + + if kind as u64 != Kind::Entry as u64 { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!( + "Wrong kind for Entry. Expected {:?}, got {:?}", + Kind::Entry, + kind + ), + ))); + } + } + if let serde_cbor::Value::Integer(num_hashes) = array[1] { + entry.num_hashes = num_hashes as u64; + } + if let serde_cbor::Value::Bytes(hash) = &array[2] { + entry.hash = Hash(hash.to_vec()); + } + + if let serde_cbor::Value::Array(transactions) = &array[3] { + for transaction in transactions { + if let serde_cbor::Value::Bytes(transaction) = transaction { + entry + .transactions + .push(Cid::try_from(transaction[1..].to_vec()).unwrap()); + } + } + } + } + return Ok(entry); + } + + pub fn to_json(&self) -> serde_json::Value { + let mut transactions = vec![]; + for transaction in &self.transactions { + transactions.push(serde_json::json!({ + "/": transaction.to_string() + })); + } + + let mut map = serde_json::Map::new(); + map.insert("kind".to_string(), serde_json::Value::from(self.kind)); + map.insert( + "num_hashes".to_string(), + serde_json::Value::from(self.num_hashes), + ); + map.insert( + "hash".to_string(), + serde_json::Value::from(self.hash.clone().to_string()), + ); + if self.transactions.len() > 0 { + map.insert( + "transactions".to_string(), + serde_json::Value::from(transactions), + ); + } else { + map.insert("transactions".to_string(), serde_json::Value::Null); + } + + return serde_json::Value::from(map); + } +} + +#[cfg(test)] +mod entry_tests { + use super::*; + + #[test] + fn test_link() { + let _cid = Cid::try_from( + vec![ + 1, 113, 18, 32, 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, 131, 220, + 232, 143, 20, 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, 38, 84, 106, 225, + ] + .as_slice(), + ) + .unwrap(); + println!("Link: {:?}", _cid); + // base58 must be bafyreibysst7x3lvzdrllbspoob5z2epcrb6bmzqqlcxxysvku4cmvdk4e + assert_eq!( + _cid.to_string(), + "bafyreibysst7x3lvzdrllbspoob5z2epcrb6bmzqqlcxxysvku4cmvdk4e" + ); + } + + #[test] + fn test_entry() { + let entry = Entry { + kind: 1, + num_hashes: 1, + hash: Hash::from_vec(vec![ + 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, 131, 220, 232, 143, 20, + 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, 38, 84, 106, 225, + ]), + transactions: vec![Cid::try_from( + vec![ + 1, 113, 18, 32, 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, 131, + 220, 232, 143, 20, 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, 38, 84, + 106, 225, + ] + .as_slice(), + ) + .unwrap()], + }; + let json = entry.to_json(); + + let wanted_json = serde_json::json!({ + "kind": 1, + "num_hashes": 1, + "hash": Hash::from_vec(vec![ + 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, 131, 220, 232, 143, 20, + 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, 38, 84, 106, 225, + ]), + "transactions": [ + { + "/": "bafyreibysst7x3lvzdrllbspoob5z2epcrb6bmzqqlcxxysvku4cmvdk4e" + } + ] + }); + + assert_eq!(json, wanted_json); + } + + #[test] + fn test_decoding() { + { + let raw = vec![ + 132, 1, 25, 48, 212, 88, 32, 58, 67, 205, 130, 225, 64, 135, 55, 64, 253, 233, 36, + 218, 65, 37, 172, 48, 226, 254, 197, 235, 146, 52, 77, 187, 43, 180, 119, 105, 115, + 254, 236, 128, + ]; + let as_json_raw = serde_json::json!({"kind":1,"num_hashes":12500,"hash":"3a43cd82e140873740fde924da4125ac30e2fec5eb92344dbb2bb4776973feec","transactions":null}); + + let entry = Entry::from_bytes(raw).unwrap(); + let as_json = entry.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 132, 1, 25, 48, 212, 88, 32, 177, 44, 50, 78, 85, 251, 134, 28, 230, 239, 13, 49, + 94, 211, 17, 91, 234, 82, 246, 190, 200, 60, 240, 156, 152, 114, 199, 13, 230, 159, + 223, 234, 128, + ]; + let as_json_raw = serde_json::json!({"kind":1,"num_hashes":12500,"hash":"b12c324e55fb861ce6ef0d315ed3115bea52f6bec83cf09c9872c70de69fdfea","transactions":null}); + + let entry = Entry::from_bytes(raw).unwrap(); + let as_json = entry.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 132, 1, 25, 48, 212, 88, 32, 71, 92, 57, 208, 67, 29, 20, 121, 163, 95, 163, 73, + 158, 10, 141, 214, 228, 114, 37, 79, 95, 115, 68, 8, 168, 150, 169, 253, 165, 33, + 153, 149, 128, + ]; + let as_json_raw = serde_json::json!({"kind":1,"num_hashes":12500,"hash":"475c39d0431d1479a35fa3499e0a8dd6e472254f5f734408a896a9fda5219995","transactions":null}); + + let entry = Entry::from_bytes(raw).unwrap(); + let as_json = entry.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 132, 1, 25, 47, 147, 88, 32, 135, 179, 249, 90, 215, 133, 165, 232, 199, 181, 255, + 174, 68, 179, 124, 32, 12, 39, 213, 70, 72, 112, 84, 84, 137, 86, 12, 33, 122, 72, + 215, 152, 129, 216, 42, 88, 37, 0, 1, 113, 18, 32, 56, 148, 167, 251, 237, 117, + 200, 226, 181, 134, 79, 115, 131, 220, 232, 143, 20, 67, 224, 179, 48, 130, 197, + 123, 226, 85, 85, 56, 38, 84, 106, 225, + ]; + let as_json_raw = serde_json::json!({"kind":1,"num_hashes":12179,"hash":"87b3f95ad785a5e8c7b5ffae44b37c200c27d5464870545489560c217a48d798","transactions":[{"/":"bafyreibysst7x3lvzdrllbspoob5z2epcrb6bmzqqlcxxysvku4cmvdk4e"}]}); + + let entry = Entry::from_bytes(raw).unwrap(); + let as_json = entry.to_json(); + assert_eq!(as_json, as_json_raw); + } + } +} diff --git a/geyser-plugin-runner/src/epoch.rs b/geyser-plugin-runner/src/epoch.rs new file mode 100644 index 00000000..fd35ccb3 --- /dev/null +++ b/geyser-plugin-runner/src/epoch.rs @@ -0,0 +1,192 @@ +use cid::Cid; +use serde_cbor; +use serde_json; + +use std::error::Error; + +use std::vec::Vec; + +use crate::node::Kind; +// type ( +// Epoch struct { +// Kind int +// Epoch int +// Subsets List__Link +// } +// ) +#[derive(Clone, PartialEq, Eq, Hash, Debug)] +pub struct Epoch { + pub kind: u64, + pub epoch: u64, + pub subsets: Vec, +} + +impl Epoch { + pub fn from_bytes(data: Vec) -> Result> { + let decoded_data: serde_cbor::Value = serde_cbor::from_slice(&data).unwrap(); + let epoch = Epoch::from_cbor(decoded_data)?; + return Ok(epoch); + } + + pub fn from_cbor(val: serde_cbor::Value) -> Result> { + let mut epoch = Epoch { + kind: 0, + epoch: 0, + subsets: vec![], + }; + + if let serde_cbor::Value::Array(array) = val { + // println!("Kind: {:?}", array[0]); + if let serde_cbor::Value::Integer(kind) = array[0] { + // println!("Kind: {:?}", Kind::from_u64(kind as u64).unwrap().to_string()); + epoch.kind = kind as u64; + + if kind as u64 != Kind::Epoch as u64 { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!( + "Wrong kind for Epoch. Expected {:?}, got {:?}", + Kind::Epoch, + kind + ), + ))); + } + } + if let serde_cbor::Value::Integer(num) = array[1] { + epoch.epoch = num as u64; + } + + if let serde_cbor::Value::Array(subsets) = &array[2] { + for subset in subsets { + if let serde_cbor::Value::Bytes(subset) = subset { + epoch + .subsets + .push(Cid::try_from(subset[1..].to_vec()).unwrap()); + } + } + } + } + return Ok(epoch); + } + + pub fn to_json(&self) -> serde_json::Value { + let mut subsets = vec![]; + for subset in &self.subsets { + subsets.push(serde_json::json!({ + "/": subset.to_string() + })); + } + + let mut map = serde_json::Map::new(); + map.insert("kind".to_string(), serde_json::Value::from(self.kind)); + map.insert("epoch".to_string(), serde_json::Value::from(self.epoch)); + map.insert("subsets".to_string(), serde_json::Value::from(subsets)); + + return serde_json::Value::from(map); + } +} + +#[cfg(test)] +mod epoch_tests { + use super::*; + + #[test] + fn test_epoch() { + let epoch = Epoch { + kind: 4, + epoch: 1, + subsets: vec![Cid::try_from( + vec![ + 1, 113, 18, 32, 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, 131, + 220, 232, 143, 20, 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, 38, 84, + 106, 225, + ] + .as_slice(), + ) + .unwrap()], + }; + let json = epoch.to_json(); + + let wanted_json = serde_json::json!({ + "kind": 4, + "epoch": 1, + "subsets": [ + { + "/":"bafyreibysst7x3lvzdrllbspoob5z2epcrb6bmzqqlcxxysvku4cmvdk4e" + } + ] + }); + + assert_eq!(json, wanted_json); + } + + #[test] + fn test_decoding() { + { + let raw = vec![ + 131, 4, 24, 39, 146, 216, 42, 88, 37, 0, 1, 113, 18, 32, 18, 250, 194, 194, 248, + 17, 163, 227, 226, 73, 89, 102, 172, 193, 238, 225, 98, 252, 63, 160, 136, 37, 67, + 188, 140, 158, 246, 249, 42, 240, 176, 158, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 141, 232, 135, 32, 121, 0, 141, 52, 185, 135, 124, 244, 29, 48, 8, 213, 206, 34, + 160, 226, 133, 199, 250, 216, 46, 63, 127, 191, 1, 252, 193, 122, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 28, 215, 1, 242, 11, 99, 190, 187, 29, 134, 111, 71, 180, 38, + 21, 233, 62, 146, 194, 176, 177, 47, 189, 174, 236, 78, 241, 30, 91, 101, 180, 22, + 216, 42, 88, 37, 0, 1, 113, 18, 32, 40, 118, 5, 84, 62, 143, 201, 110, 0, 235, 217, + 129, 120, 11, 135, 230, 60, 125, 28, 234, 31, 191, 19, 194, 9, 122, 240, 60, 68, + 178, 205, 177, 216, 42, 88, 37, 0, 1, 113, 18, 32, 189, 201, 201, 183, 204, 13, + 123, 108, 88, 63, 194, 26, 9, 177, 227, 158, 134, 213, 8, 206, 47, 165, 31, 23, + 191, 49, 108, 157, 153, 213, 131, 88, 216, 42, 88, 37, 0, 1, 113, 18, 32, 254, 223, + 153, 91, 142, 34, 11, 130, 186, 51, 189, 26, 251, 67, 219, 147, 144, 19, 162, 83, + 8, 82, 172, 15, 113, 200, 248, 28, 88, 91, 74, 164, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 65, 102, 183, 74, 222, 146, 79, 191, 25, 96, 29, 218, 124, 17, 110, 46, 172, + 116, 33, 47, 27, 125, 80, 180, 164, 203, 127, 11, 28, 62, 206, 75, 216, 42, 88, 37, + 0, 1, 113, 18, 32, 167, 154, 154, 198, 222, 45, 240, 95, 86, 154, 251, 158, 68, 46, + 157, 230, 102, 187, 159, 103, 168, 114, 55, 109, 250, 44, 28, 71, 108, 82, 231, + 115, 216, 42, 88, 37, 0, 1, 113, 18, 32, 82, 71, 66, 71, 199, 27, 224, 128, 234, + 120, 160, 107, 143, 167, 64, 126, 207, 46, 72, 141, 134, 96, 90, 10, 157, 102, 84, + 129, 8, 99, 9, 56, 216, 42, 88, 37, 0, 1, 113, 18, 32, 10, 233, 51, 122, 206, 88, + 77, 159, 103, 28, 129, 195, 12, 115, 12, 107, 81, 146, 23, 193, 86, 41, 224, 121, + 37, 98, 65, 196, 222, 131, 123, 116, 216, 42, 88, 37, 0, 1, 113, 18, 32, 194, 151, + 126, 15, 113, 49, 181, 9, 67, 107, 40, 107, 192, 41, 213, 115, 233, 113, 14, 53, + 99, 130, 142, 127, 200, 225, 122, 46, 53, 48, 37, 56, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 193, 11, 88, 188, 64, 8, 137, 103, 83, 62, 200, 254, 126, 250, 47, 140, + 116, 207, 16, 125, 221, 216, 119, 137, 156, 177, 209, 164, 48, 77, 166, 136, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 161, 148, 55, 178, 229, 153, 194, 49, 141, 184, 223, + 219, 89, 53, 127, 213, 20, 255, 225, 254, 34, 26, 181, 198, 228, 166, 77, 8, 24, + 77, 68, 26, 216, 42, 88, 37, 0, 1, 113, 18, 32, 3, 144, 157, 93, 68, 243, 255, 185, + 75, 68, 156, 251, 18, 5, 206, 210, 83, 228, 52, 171, 254, 9, 69, 149, 9, 63, 91, + 217, 132, 15, 133, 42, 216, 42, 88, 37, 0, 1, 113, 18, 32, 124, 110, 193, 69, 202, + 85, 215, 41, 194, 150, 198, 245, 153, 132, 19, 9, 117, 110, 113, 30, 137, 231, 117, + 38, 211, 51, 154, 3, 125, 84, 52, 229, 216, 42, 88, 37, 0, 1, 113, 18, 32, 55, 34, + 35, 188, 88, 75, 147, 138, 231, 108, 17, 242, 53, 157, 170, 23, 90, 104, 245, 108, + 103, 181, 52, 108, 160, 67, 19, 245, 244, 196, 150, 170, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 254, 72, 218, 251, 250, 18, 126, 94, 125, 102, 99, 110, 13, 94, 112, + 18, 52, 62, 65, 106, 155, 128, 69, 146, 21, 78, 103, 244, 129, 7, 176, 189, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 44, 229, 44, 221, 134, 69, 72, 61, 15, 149, 152, 62, + 95, 52, 255, 190, 69, 44, 46, 188, 100, 36, 61, 165, 179, 54, 172, 131, 149, 143, + 143, 203, + ]; + let as_json_raw = serde_json::json!({"kind":4,"epoch":39,"subsets":[{"/":"bafyreias7lbmf6arupr6eskzm2wmd3xbml6d7ieievb3zde6634sv4fqty"},{"/":"bafyreien5cdsa6iaru2ltb346qotacgvzyrkbyufy75nqlr7p67qd7gbpi"},{"/":"bafyreia424a7ec3dx25r3btpi62cmfpjh2jmfmfrf66253co6epfwznucy"},{"/":"bafyreibioycvipupzfxab26zqf4axb7ghr6rz2q7x4j4ecl26a6ejmwnwe"},{"/":"bafyreif5zhe3ptanpnwfqp6cdie3dy46q3kqrtrpuuprppzrnsoztvmdla"},{"/":"bafyreih636mvxdrcboblum55dl5uhw4tsaj2euyikkwa64oi7aofqw2kuq"},{"/":"bafyreicbm23uvxusj67rsya53j6bc3rovr2ccly3pviljjglp4frypwojm"},{"/":"bafyreifhtknmnxrn6bpvngx3tzcc5hpgm25z6z5ioi3w36rmdrdwyuxhom"},{"/":"bafyreicsi5bepry34caou6fanoh2oqd6z4xerdmgmbnavhlgksaqqyyjha"},{"/":"bafyreiak5ezxvtsyjwpwohebymghgddlkgjbpqkwfhqhsjlcihcn5a33oq"},{"/":"bafyreigcs57a64jrwueug2zinpactvlt5fyq4nldqkhh7shbpixdkmbfha"},{"/":"bafyreigbbnmlyqairftvgpwi7z7pul4mothra7o53b3ythfr2gsdatngra"},{"/":"bafyreifbsq33fzmzyiyy3og73nmtk76vct76d7rcdk24nzfgjuebqtkedi"},{"/":"bafyreiadscov2rht764uwre47mjaltwskpsdjk76bfczkcj7lpmyid4ffi"},{"/":"bafyreid4n3aulssv24u4ffwg6wmyieyjovxhchuj452snuzttibx2vbu4u"},{"/":"bafyreibxeir3ywclsofoo3ar6i2z3kqxljupk3dhwu2gzicdcp27jrewvi"},{"/":"bafyreih6jdnpx6qspzph2ztdnygv44asgq7ec2u3qbczefkom72icb5qxu"},{"/":"bafyreibm4uwn3bsfja6q7fmyhzptj756iuwc5pdeeq62lmzwvsbzld4pzm"}]}); + + let epoch = Epoch::from_bytes(raw).unwrap(); + let json = epoch.to_json(); + + assert_eq!(json, as_json_raw); + } + { + let raw = vec![ + 131, 4, 24, 120, 130, 216, 42, 88, 37, 0, 1, 113, 18, 32, 89, 118, 15, 47, 211, + 244, 148, 72, 97, 22, 125, 223, 7, 22, 154, 131, 239, 74, 68, 115, 25, 83, 181, + 103, 188, 221, 74, 184, 171, 49, 248, 175, 216, 42, 88, 37, 0, 1, 113, 18, 32, 111, + 243, 18, 145, 137, 92, 10, 252, 113, 31, 191, 162, 236, 105, 154, 211, 177, 143, + 180, 173, 61, 180, 154, 155, 60, 244, 221, 131, 213, 154, 68, 70, + ]; + let as_json_raw = serde_json::json!({"kind":4,"epoch":120,"subsets":[{"/":"bafyreiczoyhs7u7usregcft534drngud55fei4yzko2wppg5jk4kwmpyv4"},{"/":"bafyreidp6mjjdck4bl6hch57ulwgtgwtwgh3jlj5wsnjwphu3wb5lgseiy"}]}); + + let epoch = Epoch::from_bytes(raw).unwrap(); + let json = epoch.to_json(); + + assert_eq!(json, as_json_raw); + } + } +} diff --git a/geyser-plugin-runner/src/main.rs b/geyser-plugin-runner/src/main.rs new file mode 100644 index 00000000..caf51aa3 --- /dev/null +++ b/geyser-plugin-runner/src/main.rs @@ -0,0 +1,291 @@ +#![recursion_limit = "512"] + +use solana_storage_proto; +use std::env::args; +use std::error::Error; + +use std::convert::TryInto; +use std::sync::RwLock; + +// geyser: +use core::panic; + +use crossbeam_channel::unbounded; +use solana_accounts_db::stake_rewards::RewardInfo; +use solana_geyser_plugin_manager::{self}; +use solana_rpc::optimistically_confirmed_bank_tracker::SlotNotification; +use solana_rpc::transaction_notifier_interface::TransactionNotifier; +use solana_sdk::reward_type::RewardType; + +use std::{convert::TryFrom, str::FromStr}; + +mod block; +mod dataframe; +mod entry; +mod epoch; +mod node; +mod rewards; +mod subset; +mod transaction; +mod utils; + +fn main() -> Result<(), Box> { + let file_path = args().nth(1).expect("no file given"); + let _started_at = std::time::Instant::now(); + let mut item_index = 0; + { + let mut reader = node::NodeReader::new(file_path.clone())?; + let header = reader.read_raw_header()?; + println!("Header bytes: {:?}", header); + + let geyser_config_files = &[std::path::PathBuf::from(args().nth(2).unwrap())]; + + let (confirmed_bank_sender, confirmed_bank_receiver) = unbounded(); + // drop(confirmed_bank_sender); + let service = + solana_geyser_plugin_manager::geyser_plugin_service::GeyserPluginService::new( + confirmed_bank_receiver, + geyser_config_files, + ) + .unwrap_or_else(|err| panic!("Failed to create GeyserPluginService, error: {:?}", err)); + + let transaction_notifier = service + .get_transaction_notifier() + .ok_or_else(|| panic!("Failed to get transaction notifier from GeyserPluginService")) + .unwrap(); + + let entry_notifier_maybe = service.get_entry_notifier(); + if entry_notifier_maybe.is_some() { + println!("Entry notifications enabled") + } else { + println!("None of the plugins have enabled entry notifications") + } + + let block_meta_notifier_maybe = service.get_block_metadata_notifier(); + + let mut todo_previous_blockhash = solana_sdk::hash::Hash::default(); + let mut todo_latest_entry_blockhash = solana_sdk::hash::Hash::default(); + loop { + let nodes = reader.read_until_block()?; + // println!("Nodes: {:?}", nodes.get_cids()); + let block = nodes.get_block()?; + println!("Slot: {:?}", block.slot); + // println!("Raw node: {:?}", raw_node); + let mut entry_index: usize = 0; + let mut this_block_executed_transaction_count: u64 = 0; + let mut this_block_entry_count: u64 = 0; + let mut this_block_rewards: solana_storage_proto::convert::generated::Rewards = + solana_storage_proto::convert::generated::Rewards::default(); + nodes.each(|node_with_cid| -> Result<(), Box> { + item_index += 1; + let node = node_with_cid.get_node(); + + match node { + node::Node::Transaction(transaction) => { + let parsed = transaction.as_parsed()?; + + { + let reassembled_metadata = + nodes.reassemble_dataframes(transaction.metadata.clone())?; + + let decompressed = utils::decompress_zstd(reassembled_metadata.clone())?; + + let metadata: solana_storage_proto::convert::generated::TransactionStatusMeta = + prost::Message::decode(decompressed.as_slice()).or_else(|err| { + Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Error decoding metadata: {:?}", err), + ))) + })?; + + + let as_native_metadata: solana_transaction_status::TransactionStatusMeta = + metadata.try_into()?; + + { + // TODO: use a real address loader + let dummy_address_loader = MessageAddressLoader::new(solana_sdk::pubkey::Pubkey::default()); + let sanitized_tx= match parsed.version() { + solana_sdk::transaction::TransactionVersion::Number(_)=> { + let message_hash = parsed.verify_and_hash_message()?; + let versioned_sanitized_tx= solana_sdk::transaction::SanitizedVersionedTransaction::try_from(parsed)?; + solana_sdk::transaction::SanitizedTransaction::try_new( + versioned_sanitized_tx, + message_hash, + false, + dummy_address_loader, + ) + }, + solana_sdk::transaction::TransactionVersion::Legacy(_legacy)=> { + solana_sdk::transaction::SanitizedTransaction::try_from_legacy_transaction( + parsed.into_legacy_transaction().unwrap() , + ) + }, + _ => { + panic!("___ not supported version"); + } + }; + if sanitized_tx.is_err() { + panic!( + "Failed to create SanitizedTransaction, error: {:?}", + sanitized_tx.err() + ); + } + let sanitized_tx = sanitized_tx.unwrap(); + + transaction_notifier + .try_write() + .unwrap() + .notify_transaction( + block.slot, + transaction.index.unwrap() as usize, + sanitized_tx.signature(), + &as_native_metadata, + &sanitized_tx, + ); + } + } + + // if parsed.version() + // == solana_sdk::transaction::TransactionVersion::Number(0) + // { + // return Ok(()); + // } + } + node::Node::Entry(_entry) => { + todo_latest_entry_blockhash = solana_sdk::hash::Hash::from(_entry.hash.to_bytes()); + this_block_executed_transaction_count += _entry.transactions.len() as u64; + this_block_entry_count += 1; + if entry_notifier_maybe.is_none() { + return Ok(()); + } + let entry_notifier = entry_notifier_maybe.as_ref().unwrap(); + // println!("___ Entry: {:?}", entry); + let entry_summary=solana_entry::entry::EntrySummary { + num_hashes: _entry.num_hashes, + hash: solana_sdk::hash::Hash::from(_entry.hash.to_bytes()), + num_transactions: _entry.transactions.len() as u64, + }; + + entry_notifier + .try_write() + .unwrap() + .notify_entry(block.slot, entry_index ,&entry_summary); + entry_index+=1; + } + node::Node::Block(_block) => { + // println!("___ Block: {:?}", block); + let notification = SlotNotification::Root((block.slot, block.meta.parent_slot)); + confirmed_bank_sender.send(notification).unwrap(); + + { + if block_meta_notifier_maybe.is_none() { + return Ok(()); + } + let rewards = RwLock::new(vec![]); + { + // convert this_block_rewards to rewards + for this_block_reward in this_block_rewards.rewards.iter() { + let reward: RewardInfo = RewardInfo{ + reward_type: match this_block_reward.reward_type { + 0 => RewardType::Fee, + 1 => RewardType::Rent, + 2 => RewardType::Staking, + 3 => RewardType::Voting, + _ => panic!("___ not supported reward type"), + }, + lamports: this_block_reward.lamports, + post_balance: this_block_reward.post_balance, + // commission is Option , but this_block_reward.commission is string + commission: match this_block_reward.commission.parse::() { + Ok(commission) => Some(commission), + Err(_err) => None, + }, + }; + rewards.write().unwrap().push((solana_sdk::pubkey::Pubkey::from_str(&this_block_reward.pubkey)?, reward.into())); + } + } + // if rewards.read().unwrap().len() > 0 { + // panic!("___ Rewards: {:?}", rewards.read().unwrap()); + // } + let block_meta_notifier = block_meta_notifier_maybe.as_ref().unwrap(); + block_meta_notifier + .try_write() + .unwrap() + .notify_block_metadata( + block.meta.parent_slot, + todo_previous_blockhash.to_string().as_str(), + block.slot, + todo_latest_entry_blockhash.to_string().as_str(), + &rewards, + Some(block.meta.blocktime as i64) , + block.meta.block_height, + this_block_executed_transaction_count, + this_block_entry_count, + ); + } + todo_previous_blockhash = todo_latest_entry_blockhash; + } + node::Node::Subset(_subset) => { + // println!("___ Subset: {:?}", subset); + } + node::Node::Epoch(epoch) => { + println!("___ Epoch: {:?}", epoch); + } + node::Node::Rewards(rewards) => { + println!("___ Rewards: {:?}", node_with_cid.get_cid()); + // println!("___ Next items: {:?}", rewards.data.next); + + if !rewards.is_complete() && false { + let reassembled = nodes.reassemble_dataframes(rewards.data.clone())?; + println!("___ reassembled: {:?}", reassembled.len()); + + let decompressed = utils::decompress_zstd(reassembled)?; + + this_block_rewards= prost::Message::decode(decompressed.as_slice()).or_else(|err| { + Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Error decoding rewards: {:?}", err), + ))) + })?; + } + } + node::Node::DataFrame(_) => { + println!("___ DataFrame: {:?}", node_with_cid.get_cid()); + } + } + return Ok(()); + })?; + } + } +} + +pub struct MessageAddressLoader { + pub address: solana_sdk::pubkey::Pubkey, +} + +impl MessageAddressLoader { + pub fn new(address: solana_sdk::pubkey::Pubkey) -> Self { + MessageAddressLoader { address } + } +} + +impl solana_sdk::message::AddressLoader for MessageAddressLoader { + fn load_addresses( + self, + _lookups: &[solana_sdk::message::v0::MessageAddressTableLookup], + ) -> Result + { + let loaded_addresses = solana_sdk::message::v0::LoadedAddresses::default(); + Ok(loaded_addresses) + } +} + +// implement clone for MessageAddressLoader +impl Clone for MessageAddressLoader { + fn clone(&self) -> Self { + MessageAddressLoader { + address: self.address, + } + } +} diff --git a/geyser-plugin-runner/src/node.rs b/geyser-plugin-runner/src/node.rs new file mode 100644 index 00000000..2510a031 --- /dev/null +++ b/geyser-plugin-runner/src/node.rs @@ -0,0 +1,593 @@ +use bytes::Buf; +use cid::Cid; +use core::hash::Hasher; +use crc::{Crc, CRC_64_GO_ISO}; +use fnv::FnvHasher; +use multihash; + +use serde_cbor; + +use std::error::Error; +use std::fs::File; +use std::io::{self, BufReader, Read}; +use std::vec::Vec; + +use crate::block; +use crate::dataframe; +use crate::entry; +use crate::epoch; +use crate::rewards; +use crate::subset; +use crate::transaction; +use crate::utils; + +pub struct NodeWithCid { + cid: Cid, + node: Node, +} + +impl NodeWithCid { + pub fn new(cid: Cid, node: Node) -> NodeWithCid { + NodeWithCid { cid, node } + } + + pub fn get_cid(&self) -> &Cid { + &self.cid + } + + pub fn get_node(&self) -> &Node { + &self.node + } +} + +pub struct NodesWithCids(pub Vec); + +impl NodesWithCids { + pub fn new() -> NodesWithCids { + NodesWithCids(vec![]) + } + + pub fn push(&mut self, node_with_cid: NodeWithCid) { + self.0.push(node_with_cid); + } + + pub fn len(&self) -> usize { + self.0.len() + } + + pub fn get(&self, index: usize) -> &NodeWithCid { + &self.0[index] + } + + pub fn get_by_cid(&self, cid: &Cid) -> Option<&NodeWithCid> { + for node_with_cid in &self.0 { + if node_with_cid.get_cid() == cid { + return Some(node_with_cid); + } + } + return None; + } + + pub fn reassemble_dataframes( + &self, + first_dataframe: dataframe::DataFrame, + ) -> Result, Box> { + let mut data = first_dataframe.data.to_vec(); + let mut next_arr = first_dataframe.next; + while next_arr.is_some() { + for next_cid in next_arr.clone().unwrap() { + let next_node = self.get_by_cid(&next_cid); + if next_node.is_none() { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Missing CID: {:?}", next_cid), + ))); + } + let next_node_un = next_node.unwrap(); + + if !next_node_un.get_node().is_dataframe() { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Expected DataFrame, got {:?}", next_node_un.get_node()), + ))); + } + + let next_dataframe = next_node_un.get_node().get_dataframe().unwrap(); + data.extend(next_dataframe.data.to_vec()); + next_arr = next_dataframe.next.clone(); + } + } + + if first_dataframe.hash.is_some() { + let wanted_hash = first_dataframe.hash.unwrap(); + verify_hash(data.clone(), wanted_hash)?; + } + return Ok(data); + } + + pub fn each(&self, mut f: F) -> Result<(), Box> + where + F: FnMut(&NodeWithCid) -> Result<(), Box>, + { + for node_with_cid in &self.0 { + f(node_with_cid)?; + } + return Ok(()); + } + + pub fn get_cids(&self) -> Vec { + let mut cids = vec![]; + for node_with_cid in &self.0 { + cids.push(node_with_cid.get_cid().clone()); + } + return cids; + } + + pub fn get_block(&self) -> Result<&block::Block, Box> { + // the last node should be a block + let last_node = self.0.last(); + if last_node.is_none() { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("No nodes"), + ))); + } + let last_node_un = last_node.unwrap(); + if !last_node_un.get_node().is_block() { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Expected Block, got {:?}", last_node_un.get_node()), + ))); + } + let block = last_node_un.get_node().get_block().unwrap(); + return Ok(block); + } +} + +pub fn verify_hash(data: Vec, hash: u64) -> Result<(), Box> { + let crc64 = checksum_crc64(&data); + if crc64 != hash { + // Maybe it's the legacy checksum function? + let fnv = checksum_fnv(&data); + if fnv != hash { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!( + "data hash mismatch: wanted {:?}, got crc64={:?}, fnv={:?}", + hash, + crc64, + fnv + ), + ))); + } + } + return Ok(()); +} + +fn checksum_crc64(data: &Vec) -> u64 { + let crc = Crc::::new(&CRC_64_GO_ISO); + let mut digest = crc.digest(); + digest.update(data); + let crc64 = digest.finalize(); + crc64 +} + +fn checksum_fnv(data: &Vec) -> u64 { + let mut hasher = FnvHasher::default(); + hasher.write(data); + let hash = hasher.finish(); + hash +} + +#[derive(Clone, PartialEq, Eq, Hash, Debug)] +pub enum Node { + Transaction(transaction::Transaction), + Entry(entry::Entry), + Block(block::Block), + Subset(subset::Subset), + Epoch(epoch::Epoch), + Rewards(rewards::Rewards), + DataFrame(dataframe::DataFrame), +} + +impl Node { + pub fn is_transaction(&self) -> bool { + match self { + Node::Transaction(_) => true, + _ => false, + } + } + pub fn is_entry(&self) -> bool { + match self { + Node::Entry(_) => true, + _ => false, + } + } + pub fn is_block(&self) -> bool { + match self { + Node::Block(_) => true, + _ => false, + } + } + pub fn is_subset(&self) -> bool { + match self { + Node::Subset(_) => true, + _ => false, + } + } + pub fn is_epoch(&self) -> bool { + match self { + Node::Epoch(_) => true, + _ => false, + } + } + pub fn is_rewards(&self) -> bool { + match self { + Node::Rewards(_) => true, + _ => false, + } + } + pub fn is_dataframe(&self) -> bool { + match self { + Node::DataFrame(_) => true, + _ => false, + } + } + + pub fn get_transaction(&self) -> Option<&transaction::Transaction> { + match self { + Node::Transaction(transaction) => Some(transaction), + _ => None, + } + } + pub fn get_entry(&self) -> Option<&entry::Entry> { + match self { + Node::Entry(entry) => Some(entry), + _ => None, + } + } + pub fn get_block(&self) -> Option<&block::Block> { + match self { + Node::Block(block) => Some(block), + _ => None, + } + } + pub fn get_subset(&self) -> Option<&subset::Subset> { + match self { + Node::Subset(subset) => Some(subset), + _ => None, + } + } + pub fn get_epoch(&self) -> Option<&epoch::Epoch> { + match self { + Node::Epoch(epoch) => Some(epoch), + _ => None, + } + } + pub fn get_rewards(&self) -> Option<&rewards::Rewards> { + match self { + Node::Rewards(rewards) => Some(rewards), + _ => None, + } + } + pub fn get_dataframe(&self) -> Option<&dataframe::DataFrame> { + match self { + Node::DataFrame(dataframe) => Some(dataframe), + _ => None, + } + } +} + +// parse_any_from_cbordata parses any CBOR data into either a Epoch, Subset, Block, Rewards, Entry, or Transaction +pub fn parse_any_from_cbordata(data: Vec) -> Result> { + let decoded_data: serde_cbor::Value = serde_cbor::from_slice(&data).unwrap(); + // Process the decoded data + // println!("Data: {:?}", decoded_data); + let cloned_data = decoded_data.clone(); + + // decoded_data is an serde_cbor.Array; print the kind, which is the first element of the array + if let serde_cbor::Value::Array(array) = decoded_data { + // println!("Kind: {:?}", array[0]); + if let serde_cbor::Value::Integer(kind) = array[0] { + // println!( + // "Kind: {:?}", + // Kind::from_u64(kind as u64).unwrap().to_string() + // ); + + // based on the kind, we can decode the rest of the data + match kind { + kind => match Kind::from_u64(kind as u64).unwrap() { + Kind::Transaction => { + let transaction = transaction::Transaction::from_cbor(cloned_data)?; + return Ok(Node::Transaction(transaction)); + } + Kind::Entry => { + let entry = entry::Entry::from_cbor(cloned_data)?; + return Ok(Node::Entry(entry)); + } + Kind::Block => { + let block = block::Block::from_cbor(cloned_data)?; + return Ok(Node::Block(block)); + } + Kind::Subset => { + let subset = subset::Subset::from_cbor(cloned_data)?; + return Ok(Node::Subset(subset)); + } + Kind::Epoch => { + let epoch = epoch::Epoch::from_cbor(cloned_data)?; + return Ok(Node::Epoch(epoch)); + } + Kind::Rewards => { + let rewards = rewards::Rewards::from_cbor(cloned_data)?; + return Ok(Node::Rewards(rewards)); + } + Kind::DataFrame => { + let dataframe = dataframe::DataFrame::from_cbor(cloned_data)?; + return Ok(Node::DataFrame(dataframe)); + } + unknown => { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Unknown type: {:?}", unknown), + ))) + } + }, + unknown => { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Unknown type: {:?}", unknown), + ))) + } + } + } + } + + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Unknown type"), + ))); +} + +pub enum Kind { + Transaction, + Entry, + Block, + Subset, + Epoch, + Rewards, + DataFrame, +} + +impl std::fmt::Debug for Kind { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("Kind") + .field("kind", &self.to_string()) + .finish() + } +} + +impl Kind { + pub fn from_u64(kind: u64) -> Option { + match kind { + 0 => Some(Kind::Transaction), + 1 => Some(Kind::Entry), + 2 => Some(Kind::Block), + 3 => Some(Kind::Subset), + 4 => Some(Kind::Epoch), + 5 => Some(Kind::Rewards), + 6 => Some(Kind::DataFrame), + _ => None, + } + } + + pub fn to_u64(&self) -> u64 { + match self { + Kind::Transaction => 0, + Kind::Entry => 1, + Kind::Block => 2, + Kind::Subset => 3, + Kind::Epoch => 4, + Kind::Rewards => 5, + Kind::DataFrame => 6, + } + } + + pub fn to_string(&self) -> String { + match self { + Kind::Transaction => "Transaction".to_string(), + Kind::Entry => "Entry".to_string(), + Kind::Block => "Block".to_string(), + Kind::Subset => "Subset".to_string(), + Kind::Epoch => "Epoch".to_string(), + Kind::Rewards => "Rewards".to_string(), + Kind::DataFrame => "DataFrame".to_string(), + } + } +} + +pub struct RawNode { + cid: Cid, + data: Vec, +} + +// Debug trait for RawNode +impl std::fmt::Debug for RawNode { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("RawNode") + .field("cid", &self.cid) + .field("data", &self.data) + .finish() + } +} + +impl RawNode { + pub fn new(cid: Cid, data: Vec) -> RawNode { + RawNode { cid, data } + } + + pub fn parse(&self) -> Result> { + let parsed = parse_any_from_cbordata(self.data.clone()); + if parsed.is_err() { + println!("Error: {:?}", parsed.err().unwrap()); + } else { + let node = parsed.unwrap(); + return Ok(node); + } + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Unknown type"), + ))); + } + + pub fn from_cursor(cursor: &mut io::Cursor>) -> Result> { + let cid_version = utils::read_uvarint(cursor)?; + // println!("CID version: {}", cid_version); + + let multicodec = utils::read_uvarint(cursor)?; + // println!("Multicodec: {}", multicodec); + + // Multihash hash function code. + let hash_function = utils::read_uvarint(cursor)?; + // println!("Hash function: {}", hash_function); + + // Multihash digest length. + let digest_length = utils::read_uvarint(cursor)?; + // println!("Digest length: {}", digest_length); + + if digest_length > 64 { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Digest length too long"), + ))); + } + + // reac actual digest + let mut digest = vec![0u8; digest_length as usize]; + cursor.read_exact(&mut digest)?; + + // the rest is the data + let mut data = vec![]; + cursor.read_to_end(&mut data)?; + + // println!("Data: {:?}", data); + + let ha = multihash::Multihash::wrap(hash_function, digest.as_slice())?; + + match cid_version { + 0 => { + let cid = Cid::new_v0(ha)?; + let raw_node = RawNode::new(cid, data); + return Ok(raw_node); + } + 1 => { + let cid = Cid::new_v1(multicodec, ha); + let raw_node = RawNode::new(cid, data); + return Ok(raw_node); + } + _ => { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Unknown CID version"), + ))); + } + } + } +} + +pub struct NodeReader { + reader: BufReader, + header: Vec, + item_index: u64, +} + +impl NodeReader { + pub fn new(file_path: String) -> Result> { + let file = File::open(file_path)?; + // create a buffered reader over the file + let MiB = 1024 * 1024; + let capacity = MiB * 8; + let reader = BufReader::with_capacity(capacity, file); + + let node_reader = NodeReader { + reader, + header: vec![], + item_index: 0, + }; + return Ok(node_reader); + } + + pub fn read_raw_header(&mut self) -> Result, Box> { + if self.header.len() > 0 { + return Ok(self.header.clone()); + }; + let header_length = utils::read_uvarint(&mut self.reader)?; + if header_length > 1024 { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Header length too long"), + ))); + } + let mut header = vec![0u8; header_length as usize]; + self.reader.read_exact(&mut header)?; + + self.header = header.clone(); + + let clone = header.clone(); + return Ok(clone.as_slice().to_owned()); + } + + pub fn next(&mut self) -> Result> { + if self.header.len() == 0 { + self.read_raw_header()?; + }; + + // println!("Item index: {}", item_index); + self.item_index += 1; + + // Read and decode the uvarint prefix (length of CID + data) + let section_size = utils::read_uvarint(&mut self.reader)?; + // println!("Section size: {}", section_size); + + if section_size > utils::MAX_ALLOWED_SECTION_SIZE as u64 { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!("Section size too long"), + ))); + } + + // read whole item + let mut item = vec![0u8; section_size as usize]; + self.reader.read_exact(&mut item)?; + + // dump item bytes as numbers + // println!("Item bytes: {:?}", item); + + // now create a cursor over the item + let mut cursor = io::Cursor::new(item); + + return RawNode::from_cursor(&mut cursor); + } + + pub fn next_parsed(&mut self) -> Result> { + let raw_node = self.next()?; + let cid = raw_node.cid.clone(); + return Ok(NodeWithCid::new(cid, raw_node.parse()?)); + } + + pub fn read_until_block(&mut self) -> Result> { + let mut nodes = NodesWithCids::new(); + loop { + let node = self.next_parsed()?; + if node.get_node().is_block() { + nodes.push(node); + break; + } + nodes.push(node); + } + return Ok(nodes); + } + + pub fn get_item_index(&self) -> u64 { + self.item_index + } +} diff --git a/geyser-plugin-runner/src/rewards.rs b/geyser-plugin-runner/src/rewards.rs new file mode 100644 index 00000000..990274d8 --- /dev/null +++ b/geyser-plugin-runner/src/rewards.rs @@ -0,0 +1,165 @@ +use serde_cbor; +use serde_json; +use std::error::Error; +use std::vec::Vec; + +use crate::dataframe; +use crate::node::Kind; +use crate::utils::Buffer; + +// type Rewards struct { +// Kind int +// Slot int +// Data DataFrame +// } +#[derive(Clone, PartialEq, Eq, Hash, Debug)] +pub struct Rewards { + pub kind: u64, + pub slot: u64, + pub data: dataframe::DataFrame, +} + +impl Rewards { + pub fn from_bytes(data: Vec) -> Result> { + let decoded_data: serde_cbor::Value = serde_cbor::from_slice(&data).unwrap(); + let rewards = Rewards::from_cbor(decoded_data)?; + return Ok(rewards); + } + + // from serde_cbor::Value + pub fn from_cbor(val: serde_cbor::Value) -> Result> { + let mut rewards = Rewards { + kind: 0, + slot: 0, + data: dataframe::DataFrame { + kind: 0, + hash: None, + index: None, + total: None, + data: Buffer::new(), + next: None, + }, + }; + + if let serde_cbor::Value::Array(array) = val { + // println!("Kind: {:?}", array[0]); + if let serde_cbor::Value::Integer(kind) = array[0] { + // println!("Kind: {:?}", Kind::from_u64(kind as u64).unwrap().to_string()); + rewards.kind = kind as u64; + + if kind as u64 != Kind::Rewards as u64 { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!( + "Wrong kind for Rewards. Expected {:?}, got {:?}", + Kind::Rewards, + kind + ), + ))); + } + } + if let serde_cbor::Value::Integer(slot) = array[1] { + rewards.slot = slot as u64; + } + + if let serde_cbor::Value::Array(data) = &array[2] { + rewards.data = + dataframe::DataFrame::from_cbor(serde_cbor::Value::Array(data.clone()))?; + } + } + return Ok(rewards); + } + + pub fn to_json(&self) -> serde_json::Value { + let mut map = serde_json::Map::new(); + map.insert("kind".to_string(), serde_json::Value::from(self.kind)); + map.insert("slot".to_string(), serde_json::Value::from(self.slot)); + map.insert( + "data".to_string(), + serde_json::Value::from(self.data.to_json()), + ); + + return serde_json::Value::from(map); + } + + /// Returns whether the rewards data is complete or is split into multiple dataframes. + pub fn is_complete(&self) -> bool { + return self.data.next.is_none() || self.data.next.as_ref().unwrap().len() == 0; + } +} + +#[cfg(test)] +mod rewards_tests { + use super::*; + use cid::Cid; + + #[test] + fn test_rewards() { + let rewards = Rewards { + kind: 5, + slot: 1, + data: dataframe::DataFrame { + kind: 6, + hash: Some(1), + index: Some(1), + total: Some(1), + data: Buffer::from_vec(vec![1]), + next: Some(vec![Cid::try_from( + vec![ + 1, 113, 18, 32, 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, + 131, 220, 232, 143, 20, 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, + 38, 84, 106, 225, + ] + .as_slice(), + ) + .unwrap()]), + }, + }; + let json = rewards.to_json(); + + let wanted_json = serde_json::json!({ + "kind": 5, + "slot": 1, + "data": { + "kind": 6, + "hash": "1", + "index": 1, + "total": 1, + "data": Buffer::from_vec(vec![1]).to_string(), + "next": [ + { + "/":"bafyreibysst7x3lvzdrllbspoob5z2epcrb6bmzqqlcxxysvku4cmvdk4e" + } + ] + } + }); + + assert_eq!(json, wanted_json); + } + + #[test] + fn test_decoding() { + { + let raw = vec![ + 131, 5, 26, 1, 1, 20, 132, 133, 6, 246, 246, 246, 85, 40, 181, 47, 253, 4, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 27, 219, 202, + ]; + let as_json_raw = serde_json::json!({"kind":5,"slot":16848004,"data":{"kind":6,"hash":null,"index":null,"total":null,"data":"KLUv/QQAQQAAAAAAAAAAAAC7G9vK","next":null}}); + + let rewards = Rewards::from_bytes(raw).unwrap(); + let as_json = rewards.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 131, 5, 26, 1, 1, 20, 132, 133, 6, 246, 246, 246, 85, 40, 181, 47, 253, 4, 0, 65, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 27, 219, 202, + ]; + let as_json_raw = serde_json::json!({"kind":5,"slot":16848004,"data":{"kind":6,"hash":null,"index":null,"total":null,"data":"KLUv/QQAQQAAAAAAAAAAAAC7G9vK","next":null}}); + + let rewards = Rewards::from_bytes(raw).unwrap(); + let as_json = rewards.to_json(); + assert_eq!(as_json, as_json_raw); + } + } +} diff --git a/geyser-plugin-runner/src/subset.rs b/geyser-plugin-runner/src/subset.rs new file mode 100644 index 00000000..656c8b9f --- /dev/null +++ b/geyser-plugin-runner/src/subset.rs @@ -0,0 +1,203 @@ +use cid::Cid; +use serde_cbor; +use serde_json; + +use std::error::Error; + +use std::vec::Vec; + +use crate::node::Kind; + +// type Subset struct { +// Kind int +// First int +// Last int +// Blocks List__Link +// } +#[derive(Clone, PartialEq, Eq, Hash, Debug)] +pub struct Subset { + pub kind: u64, + pub first: u64, + pub last: u64, + pub blocks: Vec, +} + +impl Subset { + pub fn from_bytes(data: Vec) -> Result> { + let decoded_data: serde_cbor::Value = serde_cbor::from_slice(&data).unwrap(); + let subset = Subset::from_cbor(decoded_data)?; + return Ok(subset); + } + + // from serde_cbor::Value + pub fn from_cbor(val: serde_cbor::Value) -> Result> { + let mut subset = Subset { + kind: 0, + first: 0, + last: 0, + blocks: vec![], + }; + + if let serde_cbor::Value::Array(array) = val { + // println!("Kind: {:?}", array[0]); + if let serde_cbor::Value::Integer(kind) = array[0] { + // println!("Kind: {:?}", Kind::from_u64(kind as u64).unwrap().to_string()); + subset.kind = kind as u64; + + if kind as u64 != Kind::Subset as u64 { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!( + "Wrong kind for Subset. Expected {:?}, got {:?}", + Kind::Subset, + kind + ), + ))); + } + } + if let serde_cbor::Value::Integer(first) = array[1] { + subset.first = first as u64; + } + if let serde_cbor::Value::Integer(last) = array[2] { + subset.last = last as u64; + } + + if let serde_cbor::Value::Array(blocks) = &array[3] { + for block in blocks { + if let serde_cbor::Value::Bytes(block) = block { + subset + .blocks + .push(Cid::try_from(block[1..].to_vec()).unwrap()); + } + } + } + } + return Ok(subset); + } + + pub fn to_json(&self) -> serde_json::Value { + let mut blocks = vec![]; + for block in &self.blocks { + blocks.push(serde_json::json!({ + "/": block.to_string() + })); + } + + let mut map = serde_json::Map::new(); + map.insert("kind".to_string(), serde_json::Value::from(self.kind)); + map.insert("first".to_string(), serde_json::Value::from(self.first)); + map.insert("last".to_string(), serde_json::Value::from(self.last)); + map.insert("blocks".to_string(), serde_json::Value::from(blocks)); + + return serde_json::Value::from(map); + } +} + +#[cfg(test)] +mod subset_tests { + use super::*; + + #[test] + fn test_subset() { + let subset = Subset { + kind: 3, + first: 1, + last: 1, + blocks: vec![Cid::try_from( + vec![ + 1, 113, 18, 32, 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, 131, + 220, 232, 143, 20, 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, 38, 84, + 106, 225, + ] + .as_slice(), + ) + .unwrap()], + }; + let json = subset.to_json(); + + let wanted_json = serde_json::json!({ + "kind": 3, + "first": 1, + "last": 1, + "blocks": [ + { + "/": "bafyreibysst7x3lvzdrllbspoob5z2epcrb6bmzqqlcxxysvku4cmvdk4e" + } + ] + }); + + assert_eq!(json, wanted_json); + } + + #[test] + fn test_decoding() { + { + let raw = vec![ + 132, 3, 26, 1, 1, 20, 132, 26, 1, 1, 147, 122, 153, 0, 10, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 171, 44, 101, 67, 48, 30, 181, 51, 44, 16, 143, 7, 188, 62, 233, 242, + 13, 126, 131, 177, 206, 83, 39, 8, 109, 55, 106, 108, 246, 68, 188, 190, 216, 42, + 88, 37, 0, 1, 113, 18, 32, 41, 103, 178, 93, 163, 133, 3, 197, 246, 123, 174, 32, + 44, 55, 75, 209, 111, 118, 185, 246, 174, 211, 209, 86, 127, 36, 135, 78, 84, 145, + 18, 85, 216, 42, 88, 37, 0, 1, 113, 18, 32, 232, 137, 216, 146, 217, 111, 118, 6, + 4, 157, 25, 149, 50, 252, 180, 133, 70, 107, 252, 167, 184, 118, 54, 192, 17, 117, + 244, 117, 94, 221, 62, 72, 216, 42, 88, 37, 0, 1, 113, 18, 32, 182, 156, 81, 7, 53, + 117, 125, 56, 128, 210, 171, 237, 59, 18, 203, 234, 249, 136, 0, 60, 135, 205, 75, + 201, 136, 124, 98, 31, 247, 190, 79, 178, 216, 42, 88, 37, 0, 1, 113, 18, 32, 74, + 107, 89, 189, 63, 4, 252, 112, 225, 250, 127, 136, 85, 96, 105, 120, 199, 245, 117, + 10, 136, 186, 254, 156, 106, 255, 174, 226, 238, 203, 204, 135, 216, 42, 88, 37, 0, + 1, 113, 18, 32, 214, 127, 219, 231, 172, 145, 78, 16, 140, 203, 97, 22, 73, 107, + 66, 148, 196, 198, 179, 23, 232, 248, 37, 26, 130, 217, 125, 157, 139, 158, 177, + 143, 216, 42, 88, 37, 0, 1, 113, 18, 32, 192, 86, 238, 92, 94, 208, 2, 251, 84, 19, + 151, 100, 51, 250, 211, 147, 58, 175, 70, 95, 60, 121, 151, 175, 210, 229, 75, 79, + 205, 205, 121, 156, 216, 42, 88, 37, 0, 1, 113, 18, 32, 184, 7, 130, 0, 219, 244, + 235, 51, 62, 197, 227, 138, 232, 12, 181, 199, 242, 62, 111, 121, 119, 183, 36, + 163, 252, 199, 123, 146, 181, 45, 244, 246, 216, 42, 88, 37, 0, 1, 113, 18, 32, + 192, 149, 98, 169, 203, 64, 51, 106, 5, 184, 40, 111, 120, 188, 103, 53, 51, 139, + 245, 36, 64, 250, 89, 30, 94, 151, 56, 78, 93, 98, 127, 81, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 99, 41, 78, 195, 237, 220, 74, 85, 77, 26, 11, 77, 20, 156, 11, 188, + 55, 107, 6, 92, 178, 153, 250, 123, 45, 136, 116, 133, 255, 68, 119, 36, + ]; + let as_json_raw = serde_json::json!({"kind":3,"first":16848004,"last":16880506,"blocks":[{"/":"bafyreiflfrsugma6wuzsyeepa66d52psbv7ihmookmtqq3jxnjwpmrf4xy"},{"/":"bafyreibjm6zf3i4fapc7m65oeawdos6rn53lt5vo2pivm7zeq5hfjeisku"},{"/":"bafyreihirhmjfwlpoydajhizsuzpznefizv7zj5yoy3maelv6r2v5xj6ja"},{"/":"bafyreifwtriqonlvpu4ibuvl5u5rfs7k7geaapehzvf4tcd4mip7ppspwi"},{"/":"bafyreicknnm32pye7ryod6t7rbkwa2lyy72xkcuixl7jy2x7v3ro5s6mq4"},{"/":"bafyreigwp7n6plerjyiizs3bczewwquuytdlgf7i7asrvawzpwoyxhvrr4"},{"/":"bafyreigak3xfyxwqal5vie4xmqz7vu4thkxumxz4pgl27uxfjnh43tlztq"},{"/":"bafyreifya6babw7u5mzt5rpdrluaznoh6i7g66lxw4skh7ghpojlklpu6y"},{"/":"bafyreigasvrkts2agnvalobin54lyzzvgof7kjca7jmr4xuxhbhf2yt7ke"},{"/":"bafyreiddffhmh3o4jjku2gqljukjyc54g5vqmxfsth5hwlmiosc76rdxeq"}]}); + + let decoded_data: serde_cbor::Value = serde_cbor::from_slice(&raw).unwrap(); + let subset = Subset::from_cbor(decoded_data).unwrap(); + let json = subset.to_json(); + + assert_eq!(json, as_json_raw); + } + { + let raw = vec![ + 132, 3, 26, 1, 1, 147, 123, 26, 1, 1, 246, 95, 153, 0, 10, 216, 42, 88, 37, 0, 1, + 113, 18, 32, 223, 228, 23, 242, 157, 150, 112, 152, 198, 153, 5, 80, 134, 58, 177, + 13, 31, 254, 64, 198, 244, 157, 217, 164, 27, 224, 31, 48, 23, 229, 249, 246, 216, + 42, 88, 37, 0, 1, 113, 18, 32, 170, 53, 139, 63, 239, 79, 17, 75, 50, 107, 250, + 202, 10, 114, 197, 236, 166, 204, 212, 82, 212, 202, 167, 38, 147, 121, 218, 10, + 109, 49, 139, 165, 216, 42, 88, 37, 0, 1, 113, 18, 32, 104, 170, 191, 229, 126, + 102, 195, 134, 213, 14, 28, 202, 214, 180, 166, 229, 55, 132, 95, 162, 139, 51, 67, + 64, 150, 153, 29, 135, 49, 60, 102, 210, 216, 42, 88, 37, 0, 1, 113, 18, 32, 147, + 241, 231, 210, 1, 141, 241, 243, 133, 161, 19, 215, 50, 22, 71, 228, 176, 144, 158, + 128, 97, 139, 93, 124, 19, 34, 88, 5, 170, 16, 82, 126, 216, 42, 88, 37, 0, 1, 113, + 18, 32, 192, 160, 241, 127, 94, 75, 241, 105, 177, 72, 216, 237, 143, 237, 80, 177, + 123, 26, 3, 163, 134, 55, 106, 220, 130, 6, 49, 75, 101, 58, 117, 185, 216, 42, 88, + 37, 0, 1, 113, 18, 32, 166, 236, 76, 71, 214, 207, 96, 6, 12, 152, 247, 133, 146, + 66, 134, 106, 60, 110, 55, 68, 158, 146, 183, 39, 119, 61, 169, 202, 220, 21, 138, + 175, 216, 42, 88, 37, 0, 1, 113, 18, 32, 146, 232, 166, 18, 68, 255, 198, 80, 234, + 182, 199, 222, 106, 110, 200, 154, 5, 118, 40, 137, 65, 79, 199, 11, 245, 148, 50, + 50, 146, 196, 11, 167, 216, 42, 88, 37, 0, 1, 113, 18, 32, 111, 158, 159, 7, 9, + 235, 182, 248, 10, 102, 143, 86, 160, 218, 165, 43, 54, 200, 227, 32, 218, 44, 36, + 230, 188, 245, 3, 105, 215, 208, 120, 17, 216, 42, 88, 37, 0, 1, 113, 18, 32, 217, + 14, 77, 61, 142, 65, 240, 89, 184, 245, 27, 16, 35, 37, 181, 40, 142, 86, 229, 219, + 16, 19, 4, 59, 9, 24, 132, 34, 167, 14, 14, 237, 216, 42, 88, 37, 0, 1, 113, 18, + 32, 12, 224, 20, 15, 97, 134, 22, 48, 186, 156, 15, 237, 105, 100, 54, 140, 176, + 70, 65, 237, 83, 95, 224, 201, 163, 83, 99, 226, 196, 143, 240, 63, + ]; + let as_json_raw = serde_json::json!({"kind":3,"first":16880507,"last":16905823,"blocks":[{"/":"bafyreig74ql7fhmwocmmngifkcddvmind77ebrxutxm2ig7ad4ybpzpz6y"},{"/":"bafyreifkgwft732pcffte272zifhfrpmu3gniuwuzktsne3z3ifg2mmluu"},{"/":"bafyreidivk76k7tgyodnkdq4zllljjxfg6cf7iulgnbubfuzdwdtcpdg2i"},{"/":"bafyreiet6ht5eamn6hzyliit24zbmr7ewcij5adbrnoxyezclac2uecspy"},{"/":"bafyreigaudyx6xsl6fu3csgy5wh62ufrpmnahi4gg5vnzaqggffwkotvxe"},{"/":"bafyreifg5rgepvwpmadazghxqwjefbtkhrxdore6sk3so5z5vhfnyfmkv4"},{"/":"bafyreies5ctberh7yziovnwh3zvg5se2av3crckbj7dqx5mugizjfralu4"},{"/":"bafyreidpt2pqocplw34auzupk2qnvjjlg3eogig2fqsonphvanu5pudyce"},{"/":"bafyreigzbzgt3dsb6bm3r5i3carslnjirzlolwyqcmcdwciyqqrkodqo5u"},{"/":"bafyreiam4aka6ymgcyylvhap5vuwinumwbded3ktl7qmti2tmprmjd7qh4"}]}); + + let decoded_data: serde_cbor::Value = serde_cbor::from_slice(&raw).unwrap(); + let subset = Subset::from_cbor(decoded_data).unwrap(); + let json = subset.to_json(); + + assert_eq!(json, as_json_raw); + } + } +} diff --git a/geyser-plugin-runner/src/transaction.rs b/geyser-plugin-runner/src/transaction.rs new file mode 100644 index 00000000..5612fbdc --- /dev/null +++ b/geyser-plugin-runner/src/transaction.rs @@ -0,0 +1,391 @@ +use bincode::deserialize; +use serde_cbor; +use serde_json; +use solana_sdk; +use std::error::Error; +use std::vec::Vec; + +use crate::dataframe::DataFrame; +use crate::node::Kind; +use crate::utils::Buffer; + +// type Transaction struct { +// Kind int +// Data DataFrame +// Metadata DataFrame +// Slot int +// Index **int +// } +#[derive(Clone, PartialEq, Eq, Hash, Debug)] +pub struct Transaction { + pub kind: u64, + pub data: DataFrame, + pub metadata: DataFrame, + pub slot: u64, + pub index: Option, +} + +impl Transaction { + pub fn from_bytes(data: Vec) -> Result> { + let decoded_data: serde_cbor::Value = serde_cbor::from_slice(&data).unwrap(); + let transaction = Transaction::from_cbor(decoded_data)?; + return Ok(transaction); + } + + // from serde_cbor::Value + pub fn from_cbor(val: serde_cbor::Value) -> Result> { + let mut transaction = Transaction { + kind: 0, + data: DataFrame { + kind: 0, + hash: None, + index: None, + total: None, + data: Buffer::new(), + next: None, + }, + metadata: DataFrame { + kind: 0, + hash: None, + index: None, + total: None, + data: Buffer::new(), + next: None, + }, + slot: 0, + index: None, + }; + + if let serde_cbor::Value::Array(array) = val { + // println!("Kind: {:?}", array[0]); + if let serde_cbor::Value::Integer(kind) = array[0] { + // println!("Kind: {:?}", Kind::from_u64(kind as u64).unwrap().to_string()); + transaction.kind = kind as u64; + + if kind as u64 != Kind::Transaction as u64 { + return Err(Box::new(std::io::Error::new( + std::io::ErrorKind::Other, + std::format!( + "Wrong kind for Transaction; expected {:?}, got {:?}", + Kind::Transaction, + kind + ), + ))); + } + } + + if let serde_cbor::Value::Array(data) = &array[1] { + transaction.data = DataFrame::from_cbor(serde_cbor::Value::Array(data.clone()))?; + } + + if let serde_cbor::Value::Array(metadata) = &array[2] { + transaction.metadata = + DataFrame::from_cbor(serde_cbor::Value::Array(metadata.clone()))?; + } + + if let serde_cbor::Value::Integer(slot) = array[3] { + transaction.slot = slot as u64; + } + + if let serde_cbor::Value::Integer(index) = array[4] { + transaction.index = Some(index as u64); + } + } + return Ok(transaction); + } + + pub fn to_json(&self) -> serde_json::Value { + let mut map = serde_json::Map::new(); + map.insert("kind".to_string(), serde_json::Value::from(self.kind)); + map.insert( + "data".to_string(), + serde_json::Value::from(self.data.to_json()), + ); + map.insert( + "metadata".to_string(), + serde_json::Value::from(self.metadata.to_json()), + ); + map.insert("slot".to_string(), serde_json::Value::from(self.slot)); + map.insert("index".to_string(), serde_json::Value::from(self.index)); + + return serde_json::Value::from(map); + } + + pub fn as_parsed( + &self, + ) -> Result> { + return Ok(deserialize(&self.data.data.to_vec())?); + } + + /// Returns whether the transaction dataframe is complete or is split into multiple dataframes. + pub fn is_complete_data(&self) -> bool { + return self.data.next.is_none() || self.data.next.as_ref().unwrap().len() == 0; + } + /// Returns whether the transaction metadata is complete or is split into multiple dataframes. + pub fn is_complete_metadata(&self) -> bool { + return self.metadata.next.is_none() || self.metadata.next.as_ref().unwrap().len() == 0; + } +} + +#[cfg(test)] +mod transaction_tests { + use super::*; + use cid::Cid; + + #[test] + fn test_transaction() { + let transaction = Transaction { + kind: 1, + data: DataFrame { + kind: 6, + hash: Some(1), + index: Some(1), + total: Some(1), + data: Buffer::from_vec(vec![1]), + next: Some(vec![Cid::try_from( + vec![ + 1, 113, 18, 32, 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, + 131, 220, 232, 143, 20, 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, + 38, 84, 106, 225, + ] + .as_slice(), + ) + .unwrap()]), + }, + metadata: DataFrame { + kind: 6, + hash: Some(1), + index: Some(1), + total: Some(1), + data: Buffer::from_vec(vec![1]), + next: Some(vec![Cid::try_from( + vec![ + 1, 113, 18, 32, 56, 148, 167, 251, 237, 117, 200, 226, 181, 134, 79, 115, + 131, 220, 232, 143, 20, 67, 224, 179, 48, 130, 197, 123, 226, 85, 85, 56, + 38, 84, 106, 225, + ] + .as_slice(), + ) + .unwrap()]), + }, + slot: 1, + index: Some(1), + }; + let json = transaction.to_json(); + + let wanted_json = serde_json::json!({ + "kind": 1, + "data": { + "kind": 6, + "hash": "1", + "index": 1, + "total": 1, + "data": Buffer::from_vec(vec![1]).to_string(), + "next": [{ + "/":"bafyreibysst7x3lvzdrllbspoob5z2epcrb6bmzqqlcxxysvku4cmvdk4e" + }] + }, + "metadata": { + "kind": 6, + "hash": "1", + "index": 1, + "total": 1, + "data": Buffer::from_vec(vec![1]).to_string(), + "next": [{ + "/":"bafyreibysst7x3lvzdrllbspoob5z2epcrb6bmzqqlcxxysvku4cmvdk4e" + }] + }, + "slot": 1, + "index": 1 + }); + + assert_eq!(json, wanted_json); + } + + #[test] + fn test_decoding() { + { + let raw = vec![ + 133, 0, 133, 6, 246, 246, 246, 89, 1, 74, 1, 134, 211, 49, 71, 74, 192, 231, 203, + 60, 87, 178, 248, 12, 50, 114, 214, 129, 182, 44, 219, 155, 48, 56, 26, 34, 169, + 31, 8, 254, 225, 154, 223, 40, 155, 190, 199, 41, 122, 237, 248, 217, 3, 163, 103, + 212, 255, 27, 131, 158, 213, 220, 233, 238, 101, 89, 148, 91, 44, 124, 121, 34, 29, + 19, 8, 1, 0, 3, 5, 5, 25, 184, 120, 214, 101, 64, 179, 24, 204, 134, 159, 34, 65, + 196, 27, 118, 194, 159, 13, 31, 33, 150, 62, 102, 171, 127, 138, 217, 198, 46, 167, + 5, 25, 184, 108, 163, 149, 211, 120, 201, 249, 2, 7, 70, 58, 37, 139, 66, 81, 204, + 62, 85, 3, 238, 187, 182, 56, 109, 100, 146, 228, 35, 74, 6, 167, 213, 23, 25, 47, + 10, 175, 198, 242, 101, 227, 251, 119, 204, 122, 218, 130, 197, 41, 208, 190, 59, + 19, 110, 45, 0, 85, 32, 0, 0, 0, 6, 167, 213, 23, 24, 199, 116, 201, 40, 86, 99, + 152, 105, 29, 94, 182, 139, 94, 184, 163, 155, 75, 109, 92, 115, 85, 91, 33, 0, 0, + 0, 0, 7, 97, 72, 29, 53, 116, 116, 187, 124, 77, 118, 36, 235, 211, 189, 179, 216, + 53, 94, 115, 209, 16, 67, 252, 13, 163, 83, 128, 0, 0, 0, 0, 182, 60, 207, 33, 158, + 150, 214, 144, 149, 162, 94, 67, 156, 12, 11, 6, 76, 240, 19, 151, 216, 246, 121, + 45, 88, 34, 202, 217, 240, 232, 241, 11, 1, 4, 4, 1, 2, 3, 0, 61, 2, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 125, 20, 1, 1, 0, 0, 0, 0, 126, 20, 1, 1, 0, 0, 0, 0, 242, 171, + 7, 179, 147, 12, 194, 246, 147, 38, 135, 62, 250, 65, 130, 82, 252, 134, 159, 218, + 29, 218, 191, 18, 122, 23, 147, 40, 41, 53, 184, 88, 0, 133, 6, 246, 246, 246, 88, + 59, 40, 181, 47, 253, 4, 0, 117, 1, 0, 34, 66, 7, 16, 208, 71, 1, 63, 61, 210, 40, + 159, 253, 19, 122, 41, 43, 143, 242, 125, 96, 156, 189, 165, 133, 94, 14, 17, 234, + 253, 193, 124, 5, 0, 167, 122, 8, 50, 94, 65, 214, 206, 28, 106, 40, 95, 237, 237, + 196, 226, 26, 1, 1, 20, 132, 0, + ]; + let as_json_raw = serde_json::json!({"kind":0,"data":{"kind":6,"hash":null,"index":null,"total":null,"data":"AYbTMUdKwOfLPFey+AwyctaBtizbmzA4GiKpHwj+4ZrfKJu+xyl67fjZA6Nn1P8bg57V3OnuZVmUWyx8eSIdEwgBAAMFBRm4eNZlQLMYzIafIkHEG3bCnw0fIZY+Zqt/itnGLqcFGbhso5XTeMn5AgdGOiWLQlHMPlUD7ru2OG1kkuQjSgan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAALY8zyGeltaQlaJeQ5wMCwZM8BOX2PZ5LVgiytnw6PELAQQEAQIDAD0CAAAAAgAAAAAAAAB9FAEBAAAAAH4UAQEAAAAA8qsHs5MMwvaTJoc++kGCUvyGn9od2r8SeheTKCk1uFgA","next":null},"metadata":{"kind":6,"hash":null,"index":null,"total":null,"data":"KLUv/QQAdQEAIkIHENBHAT890iif/RN6KSuP8n1gnL2lhV4OEer9wXwFAKd6CDJeQdbOHGooX+3txOI=","next":null},"slot":16848004,"index":0}); + + let transaction = Transaction::from_bytes(raw).unwrap(); + let as_json = transaction.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 133, 0, 133, 6, 246, 246, 246, 89, 1, 66, 1, 151, 159, 89, 187, 97, 25, 142, 3, + 174, 85, 157, 116, 102, 197, 178, 214, 246, 74, 226, 141, 31, 105, 16, 37, 67, 105, + 225, 141, 254, 92, 224, 101, 93, 67, 251, 238, 169, 227, 57, 40, 109, 130, 196, + 111, 38, 164, 190, 143, 138, 201, 237, 155, 1, 79, 81, 30, 199, 180, 46, 87, 224, + 244, 40, 10, 1, 0, 3, 5, 172, 22, 10, 112, 218, 101, 149, 13, 246, 88, 186, 12, 9, + 221, 143, 104, 189, 65, 202, 38, 214, 139, 78, 84, 16, 83, 141, 70, 208, 142, 246, + 211, 127, 174, 161, 97, 171, 234, 188, 35, 150, 54, 103, 237, 9, 22, 182, 119, 200, + 88, 156, 56, 108, 149, 249, 232, 100, 47, 132, 163, 172, 119, 226, 37, 6, 167, 213, + 23, 25, 47, 10, 175, 198, 242, 101, 227, 251, 119, 204, 122, 218, 130, 197, 41, + 208, 190, 59, 19, 110, 45, 0, 85, 32, 0, 0, 0, 6, 167, 213, 23, 24, 199, 116, 201, + 40, 86, 99, 152, 105, 29, 94, 182, 139, 94, 184, 163, 155, 75, 109, 92, 115, 85, + 91, 33, 0, 0, 0, 0, 7, 97, 72, 29, 53, 116, 116, 187, 124, 77, 118, 36, 235, 211, + 189, 179, 216, 53, 94, 115, 209, 16, 67, 252, 13, 163, 83, 128, 0, 0, 0, 0, 4, 201, + 29, 212, 80, 118, 182, 160, 37, 251, 217, 53, 53, 233, 25, 246, 252, 227, 101, 151, + 134, 14, 148, 250, 179, 200, 158, 39, 252, 116, 174, 37, 1, 4, 4, 1, 2, 3, 0, 53, + 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 127, 20, 1, 1, 0, 0, 0, 0, 34, 140, 235, 141, + 252, 67, 143, 16, 185, 136, 66, 108, 201, 186, 4, 240, 250, 90, 51, 224, 222, 196, + 82, 242, 30, 110, 233, 49, 110, 196, 49, 109, 0, 133, 6, 246, 246, 246, 88, 60, 40, + 181, 47, 253, 4, 0, 125, 1, 0, 34, 130, 7, 17, 224, 73, 1, 128, 250, 173, 82, 174, + 11, 170, 74, 29, 145, 65, 49, 190, 15, 10, 157, 189, 157, 100, 62, 2, 89, 226, 253, + 160, 124, 5, 0, 167, 122, 8, 50, 94, 65, 214, 206, 28, 106, 40, 95, 16, 123, 220, + 102, 26, 1, 1, 20, 132, 6, + ]; + let as_json_raw = serde_json::json!({"kind":0,"data":{"kind":6,"hash":null,"index":null,"total":null,"data":"AZefWbthGY4DrlWddGbFstb2SuKNH2kQJUNp4Y3+XOBlXUP77qnjOShtgsRvJqS+j4rJ7ZsBT1Eex7QuV+D0KAoBAAMFrBYKcNpllQ32WLoMCd2PaL1ByibWi05UEFONRtCO9tN/rqFhq+q8I5Y2Z+0JFrZ3yFicOGyV+ehkL4SjrHfiJQan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAATJHdRQdragJfvZNTXpGfb842WXhg6U+rPInif8dK4lAQQEAQIDADUCAAAAAQAAAAAAAAB/FAEBAAAAACKM6438Q48QuYhCbMm6BPD6WjPg3sRS8h5u6TFuxDFtAA==","next":null},"metadata":{"kind":6,"hash":null,"index":null,"total":null,"data":"KLUv/QQAfQEAIoIHEeBJAYD6rVKuC6pKHZFBMb4PCp29nWQ+Alni/aB8BQCneggyXkHWzhxqKF8Qe9xm","next":null},"slot":16848004,"index":6}); + + let transaction = Transaction::from_bytes(raw).unwrap(); + let as_json = transaction.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 133, 0, 133, 6, 246, 246, 246, 89, 1, 74, 1, 77, 56, 38, 7, 194, 192, 28, 222, 51, + 93, 37, 184, 107, 166, 11, 163, 39, 199, 194, 22, 136, 238, 106, 134, 241, 210, + 230, 111, 82, 132, 58, 57, 182, 245, 103, 20, 212, 127, 136, 207, 86, 78, 145, 44, + 95, 194, 150, 52, 180, 58, 22, 60, 38, 119, 51, 173, 193, 149, 101, 36, 50, 80, 53, + 14, 1, 0, 3, 5, 190, 70, 100, 24, 253, 30, 159, 110, 80, 154, 11, 229, 134, 11, 97, + 240, 128, 102, 162, 236, 119, 116, 81, 222, 200, 65, 22, 104, 192, 248, 4, 36, 238, + 79, 232, 183, 174, 31, 1, 233, 191, 201, 171, 51, 122, 73, 184, 10, 99, 218, 1, 71, + 77, 136, 192, 226, 244, 4, 5, 41, 165, 165, 43, 177, 6, 167, 213, 23, 25, 47, 10, + 175, 198, 242, 101, 227, 251, 119, 204, 122, 218, 130, 197, 41, 208, 190, 59, 19, + 110, 45, 0, 85, 32, 0, 0, 0, 6, 167, 213, 23, 24, 199, 116, 201, 40, 86, 99, 152, + 105, 29, 94, 182, 139, 94, 184, 163, 155, 75, 109, 92, 115, 85, 91, 33, 0, 0, 0, 0, + 7, 97, 72, 29, 53, 116, 116, 187, 124, 77, 118, 36, 235, 211, 189, 179, 216, 53, + 94, 115, 209, 16, 67, 252, 13, 163, 83, 128, 0, 0, 0, 0, 182, 60, 207, 33, 158, + 150, 214, 144, 149, 162, 94, 67, 156, 12, 11, 6, 76, 240, 19, 151, 216, 246, 121, + 45, 88, 34, 202, 217, 240, 232, 241, 11, 1, 4, 4, 1, 2, 3, 0, 61, 2, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 125, 20, 1, 1, 0, 0, 0, 0, 126, 20, 1, 1, 0, 0, 0, 0, 242, 171, + 7, 179, 147, 12, 194, 246, 147, 38, 135, 62, 250, 65, 130, 82, 252, 134, 159, 218, + 29, 218, 191, 18, 122, 23, 147, 40, 41, 53, 184, 88, 0, 133, 6, 246, 246, 246, 88, + 60, 40, 181, 47, 253, 4, 0, 125, 1, 0, 34, 130, 7, 17, 208, 71, 1, 15, 126, 161, + 171, 215, 190, 136, 255, 30, 141, 212, 35, 124, 31, 104, 156, 189, 29, 101, 78, + 130, 72, 235, 253, 160, 124, 5, 0, 167, 122, 8, 50, 94, 65, 214, 206, 28, 106, 40, + 95, 22, 54, 11, 168, 26, 1, 1, 20, 132, 8, + ]; + let as_json_raw = serde_json::json!({"kind":0,"data":{"kind":6,"hash":null,"index":null,"total":null,"data":"AU04JgfCwBzeM10luGumC6Mnx8IWiO5qhvHS5m9ShDo5tvVnFNR/iM9WTpEsX8KWNLQ6FjwmdzOtwZVlJDJQNQ4BAAMFvkZkGP0en25Qmgvlhgth8IBmoux3dFHeyEEWaMD4BCTuT+i3rh8B6b/JqzN6SbgKY9oBR02IwOL0BAUppaUrsQan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAALY8zyGeltaQlaJeQ5wMCwZM8BOX2PZ5LVgiytnw6PELAQQEAQIDAD0CAAAAAgAAAAAAAAB9FAEBAAAAAH4UAQEAAAAA8qsHs5MMwvaTJoc++kGCUvyGn9od2r8SeheTKCk1uFgA","next":null},"metadata":{"kind":6,"hash":null,"index":null,"total":null,"data":"KLUv/QQAfQEAIoIHEdBHAQ9+oavXvoj/Ho3UI3wfaJy9HWVOgkjr/aB8BQCneggyXkHWzhxqKF8WNguo","next":null},"slot":16848004,"index":8}); + + let transaction = Transaction::from_bytes(raw).unwrap(); + let as_json = transaction.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 133, 0, 133, 6, 246, 246, 246, 89, 1, 74, 1, 184, 225, 58, 101, 82, 111, 167, 65, + 53, 254, 197, 113, 213, 145, 193, 123, 203, 12, 233, 149, 120, 43, 195, 116, 126, + 44, 173, 8, 91, 41, 28, 35, 213, 132, 158, 203, 27, 161, 167, 40, 32, 77, 153, 112, + 239, 76, 170, 93, 5, 252, 225, 83, 56, 16, 16, 186, 219, 240, 67, 87, 114, 170, 53, + 0, 1, 0, 3, 5, 172, 22, 10, 112, 218, 101, 149, 13, 246, 88, 186, 12, 9, 221, 143, + 104, 189, 65, 202, 38, 214, 139, 78, 84, 16, 83, 141, 70, 208, 142, 246, 211, 127, + 174, 161, 97, 171, 234, 188, 35, 150, 54, 103, 237, 9, 22, 182, 119, 200, 88, 156, + 56, 108, 149, 249, 232, 100, 47, 132, 163, 172, 119, 226, 37, 6, 167, 213, 23, 25, + 47, 10, 175, 198, 242, 101, 227, 251, 119, 204, 122, 218, 130, 197, 41, 208, 190, + 59, 19, 110, 45, 0, 85, 32, 0, 0, 0, 6, 167, 213, 23, 24, 199, 116, 201, 40, 86, + 99, 152, 105, 29, 94, 182, 139, 94, 184, 163, 155, 75, 109, 92, 115, 85, 91, 33, 0, + 0, 0, 0, 7, 97, 72, 29, 53, 116, 116, 187, 124, 77, 118, 36, 235, 211, 189, 179, + 216, 53, 94, 115, 209, 16, 67, 252, 13, 163, 83, 128, 0, 0, 0, 0, 57, 115, 227, 48, + 194, 155, 131, 31, 63, 203, 14, 73, 55, 78, 216, 208, 56, 143, 65, 10, 35, 228, + 235, 242, 51, 40, 80, 80, 54, 239, 189, 3, 1, 4, 4, 1, 2, 3, 0, 61, 2, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 3, 64, 92, 84, 205, 196, 47, 165, + 30, 214, 130, 189, 56, 19, 137, 214, 2, 67, 245, 115, 151, 196, 222, 30, 118, 173, + 83, 211, 213, 98, 74, 1, 155, 141, 111, 94, 0, 0, 0, 0, 133, 6, 246, 246, 246, 64, + 1, 1, + ]; + let as_json_raw = serde_json::json!({"kind":0,"data":{"kind":6,"hash":null,"index":null,"total":null,"data":"AbjhOmVSb6dBNf7FcdWRwXvLDOmVeCvDdH4srQhbKRwj1YSeyxuhpyggTZlw70yqXQX84VM4EBC62/BDV3KqNQABAAMFrBYKcNpllQ32WLoMCd2PaL1ByibWi05UEFONRtCO9tN/rqFhq+q8I5Y2Z+0JFrZ3yFicOGyV+ehkL4SjrHfiJQan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAADlz4zDCm4MfP8sOSTdO2NA4j0EKI+Tr8jMoUFA2770DAQQEAQIDAD0CAAAAAQAAAAAAAAAAAAAAAAAAAKsDQFxUzcQvpR7Wgr04E4nWAkP1c5fE3h52rVPT1WJKAZuNb14AAAAA","next":null},"metadata":{"kind":6,"hash":null,"index":null,"total":null,"data":"","next":null},"slot":1,"index":1}); + + let transaction = Transaction::from_bytes(raw).unwrap(); + let as_json = transaction.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 133, 0, 133, 6, 246, 246, 246, 89, 1, 74, 1, 209, 218, 80, 205, 183, 226, 44, 58, + 188, 80, 169, 129, 20, 90, 23, 130, 239, 173, 189, 172, 2, 98, 168, 145, 31, 193, + 131, 54, 144, 44, 133, 91, 197, 203, 77, 135, 52, 132, 228, 140, 123, 66, 190, 138, + 193, 104, 202, 136, 198, 60, 159, 228, 136, 161, 97, 79, 183, 181, 202, 219, 184, + 16, 210, 2, 1, 0, 3, 5, 8, 174, 144, 179, 253, 128, 62, 129, 35, 232, 153, 1, 56, + 61, 76, 245, 77, 47, 140, 172, 72, 99, 201, 10, 175, 163, 76, 80, 69, 184, 105, + 195, 8, 174, 144, 179, 221, 8, 189, 75, 88, 135, 173, 62, 74, 163, 208, 136, 15, + 182, 90, 121, 92, 255, 108, 230, 47, 143, 61, 249, 76, 92, 69, 116, 6, 167, 213, + 23, 25, 47, 10, 175, 198, 242, 101, 227, 251, 119, 204, 122, 218, 130, 197, 41, + 208, 190, 59, 19, 110, 45, 0, 85, 32, 0, 0, 0, 6, 167, 213, 23, 24, 199, 116, 201, + 40, 86, 99, 152, 105, 29, 94, 182, 139, 94, 184, 163, 155, 75, 109, 92, 115, 85, + 91, 33, 0, 0, 0, 0, 7, 97, 72, 29, 53, 116, 116, 187, 124, 77, 118, 36, 235, 211, + 189, 179, 216, 53, 94, 115, 209, 16, 67, 252, 13, 163, 83, 128, 0, 0, 0, 0, 182, + 60, 207, 33, 158, 150, 214, 144, 149, 162, 94, 67, 156, 12, 11, 6, 76, 240, 19, + 151, 216, 246, 121, 45, 88, 34, 202, 217, 240, 232, 241, 11, 1, 4, 4, 1, 2, 3, 0, + 61, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 125, 20, 1, 1, 0, 0, 0, 0, 126, 20, 1, 1, + 0, 0, 0, 0, 242, 171, 7, 179, 147, 12, 194, 246, 147, 38, 135, 62, 250, 65, 130, + 82, 252, 134, 159, 218, 29, 218, 191, 18, 122, 23, 147, 40, 41, 53, 184, 88, 0, + 133, 6, 246, 246, 246, 88, 59, 40, 181, 47, 253, 4, 0, 117, 1, 0, 34, 66, 7, 16, + 224, 73, 1, 0, 168, 9, 24, 157, 82, 90, 181, 218, 67, 81, 191, 15, 2, 88, 125, 157, + 116, 39, 200, 140, 107, 127, 40, 31, 5, 0, 167, 122, 8, 50, 94, 65, 214, 206, 28, + 106, 40, 95, 143, 10, 67, 190, 26, 1, 1, 20, 132, 1, + ]; + let as_json_raw = serde_json::json!({"kind":0,"data":{"kind":6,"hash":null,"index":null,"total":null,"data":"AdHaUM234iw6vFCpgRRaF4Lvrb2sAmKokR/BgzaQLIVbxctNhzSE5Ix7Qr6KwWjKiMY8n+SIoWFPt7XK27gQ0gIBAAMFCK6Qs/2APoEj6JkBOD1M9U0vjKxIY8kKr6NMUEW4acMIrpCz3Qi9S1iHrT5Ko9CID7ZaeVz/bOYvjz35TFxFdAan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAALY8zyGeltaQlaJeQ5wMCwZM8BOX2PZ5LVgiytnw6PELAQQEAQIDAD0CAAAAAgAAAAAAAAB9FAEBAAAAAH4UAQEAAAAA8qsHs5MMwvaTJoc++kGCUvyGn9od2r8SeheTKCk1uFgA","next":null},"metadata":{"kind":6,"hash":null,"index":null,"total":null,"data":"KLUv/QQAdQEAIkIHEOBJAQCoCRidUlq12kNRvw8CWH2ddCfIjGt/KB8FAKd6CDJeQdbOHGooX48KQ74=","next":null},"slot":16848004,"index":1}); + + let transaction = Transaction::from_bytes(raw).unwrap(); + let as_json = transaction.to_json(); + assert_eq!(as_json, as_json_raw); + } + { + let raw = vec![ + 133, 0, 133, 6, 246, 246, 246, 89, 1, 82, 1, 7, 129, 215, 180, 55, 12, 107, 0, 191, + 100, 122, 6, 102, 204, 238, 233, 26, 95, 38, 50, 157, 117, 102, 175, 231, 40, 105, + 159, 211, 41, 252, 138, 221, 248, 201, 176, 68, 46, 213, 242, 96, 239, 1, 13, 247, + 199, 59, 15, 227, 127, 42, 144, 68, 138, 39, 148, 186, 108, 159, 69, 202, 35, 166, + 2, 1, 0, 3, 5, 25, 186, 124, 248, 30, 85, 38, 82, 76, 137, 213, 19, 241, 20, 187, + 124, 55, 101, 45, 215, 64, 18, 62, 67, 242, 195, 34, 238, 13, 131, 155, 166, 178, + 221, 184, 16, 109, 186, 103, 212, 50, 177, 183, 25, 134, 20, 39, 250, 37, 111, 219, + 217, 104, 215, 137, 162, 222, 110, 196, 196, 148, 168, 35, 45, 6, 167, 213, 23, 25, + 47, 10, 175, 198, 242, 101, 227, 251, 119, 204, 122, 218, 130, 197, 41, 208, 190, + 59, 19, 110, 45, 0, 85, 32, 0, 0, 0, 6, 167, 213, 23, 24, 199, 116, 201, 40, 86, + 99, 152, 105, 29, 94, 182, 139, 94, 184, 163, 155, 75, 109, 92, 115, 85, 91, 33, 0, + 0, 0, 0, 7, 97, 72, 29, 53, 116, 116, 187, 124, 77, 118, 36, 235, 211, 189, 179, + 216, 53, 94, 115, 209, 16, 67, 252, 13, 163, 83, 128, 0, 0, 0, 0, 4, 201, 29, 212, + 80, 118, 182, 160, 37, 251, 217, 53, 53, 233, 25, 246, 252, 227, 101, 151, 134, 14, + 148, 250, 179, 200, 158, 39, 252, 116, 174, 37, 1, 4, 4, 1, 2, 3, 0, 69, 2, 0, 0, + 0, 3, 0, 0, 0, 0, 0, 0, 0, 125, 20, 1, 1, 0, 0, 0, 0, 126, 20, 1, 1, 0, 0, 0, 0, + 127, 20, 1, 1, 0, 0, 0, 0, 34, 140, 235, 141, 252, 67, 143, 16, 185, 136, 66, 108, + 201, 186, 4, 240, 250, 90, 51, 224, 222, 196, 82, 242, 30, 110, 233, 49, 110, 196, + 49, 109, 0, 133, 6, 246, 246, 246, 88, 59, 40, 181, 47, 253, 4, 0, 117, 1, 0, 34, + 66, 7, 16, 224, 73, 1, 56, 247, 104, 106, 157, 235, 62, 6, 214, 24, 10, 249, 125, + 129, 88, 125, 153, 83, 62, 14, 137, 212, 126, 112, 31, 5, 0, 167, 122, 8, 50, 94, + 65, 214, 206, 28, 106, 40, 95, 20, 171, 252, 8, 26, 1, 1, 20, 132, 4, + ]; + let as_json_raw = serde_json::json!({"kind":0,"data":{"kind":6,"hash":null,"index":null,"total":null,"data":"AQeB17Q3DGsAv2R6BmbM7ukaXyYynXVmr+coaZ/TKfyK3fjJsEQu1fJg7wEN98c7D+N/KpBEiieUumyfRcojpgIBAAMFGbp8+B5VJlJMidUT8RS7fDdlLddAEj5D8sMi7g2Dm6ay3bgQbbpn1DKxtxmGFCf6JW/b2WjXiaLebsTElKgjLQan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAATJHdRQdragJfvZNTXpGfb842WXhg6U+rPInif8dK4lAQQEAQIDAEUCAAAAAwAAAAAAAAB9FAEBAAAAAH4UAQEAAAAAfxQBAQAAAAAijOuN/EOPELmIQmzJugTw+loz4N7EUvIebukxbsQxbQA=","next":null},"metadata":{"kind":6,"hash":null,"index":null,"total":null,"data":"KLUv/QQAdQEAIkIHEOBJATj3aGqd6z4G1hgK+X2BWH2ZUz4OidR+cB8FAKd6CDJeQdbOHGooXxSr/Ag=","next":null},"slot":16848004,"index":4}); + + let transaction = Transaction::from_bytes(raw).unwrap(); + let as_json = transaction.to_json(); + assert_eq!(as_json, as_json_raw); + } + } +} diff --git a/geyser-plugin-runner/src/utils.rs b/geyser-plugin-runner/src/utils.rs new file mode 100644 index 00000000..dd6589af --- /dev/null +++ b/geyser-plugin-runner/src/utils.rs @@ -0,0 +1,183 @@ +use std::error::Error; + +use std::io::{self, Read}; +use std::vec::Vec; + +const MAX_VARINT_LEN_64: usize = 10; + +pub fn read_uvarint(reader: &mut R) -> io::Result { + let mut x = 0u64; + let mut s = 0u32; + let mut buffer = [0u8; 1]; + for i in 0..MAX_VARINT_LEN_64 { + reader.read_exact(&mut buffer)?; + let b = buffer[0]; + if b < 0x80 { + if i == MAX_VARINT_LEN_64 - 1 && b > 1 { + return Err(io::Error::new( + io::ErrorKind::InvalidData, + "uvarint overflow", + )); + } + return Ok(x | ((b as u64) << s)); + } + x |= ((b & 0x7f) as u64) << s; + s += 7; + + if s > 63 { + return Err(io::Error::new( + io::ErrorKind::InvalidData, + "uvarint too long", + )); + } + } + Err(io::Error::new( + io::ErrorKind::InvalidData, + "uvarint overflow", + )) +} + +#[derive(Clone, PartialEq, Eq, Hash)] +pub struct Hash(pub Vec); + +// debug converts the hash to hex +impl std::fmt::Debug for Hash { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut hex = String::new(); + for byte in &self.0 { + hex.push_str(&format!("{:02x}", byte)); + } + write!(f, "{}", hex) + } +} + +// implement stringer for hash +impl std::fmt::Display for Hash { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut hex = String::new(); + for byte in &self.0 { + hex.push_str(&format!("{:02x}", byte)); + } + write!(f, "{}", hex) + } +} + +// implement serde serialization for hash +impl serde::Serialize for Hash { + fn serialize(&self, serializer: S) -> Result + where + S: serde::ser::Serializer, + { + let mut hex = String::new(); + for byte in &self.0 { + hex.push_str(&format!("{:02x}", byte)); + } + serializer.serialize_str(&hex) + } +} + +// implement serde deserialization for hash +impl<'de> serde::Deserialize<'de> for Hash { + fn deserialize(deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + let hex = String::deserialize(deserializer)?; + let mut bytes = vec![]; + for i in 0..hex.len() / 2 { + bytes.push(u8::from_str_radix(&hex[2 * i..2 * i + 2], 16).unwrap()); + } + Ok(Hash(bytes)) + } +} + +impl Hash { + pub fn to_vec(&self) -> Vec { + self.0.clone() + } + + pub fn from_vec(data: Vec) -> Hash { + Hash(data) + } + pub fn to_bytes(&self) -> [u8; 32] { + let mut bytes = [0u8; 32]; + for i in 0..32 { + bytes[i] = self.0[i]; + } + return bytes; + } +} + +#[derive(Clone, PartialEq, Eq, Hash)] +pub struct Buffer(Vec); + +impl Buffer { + pub fn new() -> Buffer { + Buffer(vec![]) + } + + pub fn write(&mut self, data: Vec) { + self.0.extend(data); + } + + pub fn read(&mut self, len: usize) -> Vec { + let mut data = vec![]; + for _ in 0..len { + data.push(self.0.remove(0)); + } + return data; + } + + pub fn len(&self) -> usize { + self.0.len() + } + + pub fn to_vec(&self) -> Vec { + self.0.clone() + } + + pub fn from_vec(data: Vec) -> Buffer { + Buffer(data) + } +} + +impl std::fmt::Debug for Buffer { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("Buffer").field("data", &self.0).finish() + } +} + +// base64 +impl std::fmt::Display for Buffer { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + base64::encode(&self.0).fmt(f) + } +} + +impl serde::Serialize for Buffer { + fn serialize(&self, serializer: S) -> Result + where + S: serde::ser::Serializer, + { + base64::encode(&self.0).serialize(serializer) + } +} + +impl<'de> serde::Deserialize<'de> for Buffer { + fn deserialize(deserializer: D) -> Result + where + D: serde::de::Deserializer<'de>, + { + let base64 = String::deserialize(deserializer)?; + Ok(Buffer(base64::decode(&base64).unwrap())) + } +} + +pub const MAX_ALLOWED_SECTION_SIZE: usize = 32 << 20; // 32MiB + +pub fn decompress_zstd(data: Vec) -> Result, Box> { + let mut decoder = zstd::Decoder::new(&data[..])?; + let mut decompressed = Vec::new(); + decoder.read_to_end(&mut decompressed)?; + return Ok(decompressed); +}