From 913da706b16b1f68b5cd6fad370487251d2e0176 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Thu, 26 Sep 2024 11:17:22 -0400 Subject: [PATCH] bump zkvm version to 1.1.1 --- .github/workflows/main.yml | 2 +- Cargo.lock | 211 ++++++++++++++++++++++--- contracts/artifacts/Blobstream0.json | 21 +-- contracts/src/ImageID.sol | 2 +- core/Cargo.toml | 2 +- light-client-guest/Cargo.toml | 2 +- light-client-guest/guest/Cargo.lock | 221 ++++++++++++++++++++++++--- light-client-guest/guest/Cargo.toml | 4 +- 8 files changed, 404 insertions(+), 61 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4695410..cc3770d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -67,7 +67,7 @@ jobs: - name: risczero toolchain install run: | cargo install cargo-binstall --version '=1.6.9' --locked - cargo binstall cargo-risczero --no-confirm --force + cargo binstall cargo-risczero@1.1.1 --no-confirm --force cargo risczero install # uses: risc0/risc0-ethereum/.github/actions/cargo-risczero-install@release-1.0 # with: diff --git a/Cargo.lock b/Cargo.lock index 1e37a99..e0faf56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1199,6 +1199,12 @@ dependencies = [ "thiserror", ] +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.9.0" @@ -1231,18 +1237,41 @@ dependencies = [ [[package]] name = "bonsai-sdk" -version = "0.9.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1553c9f015eb3fc4ff1bf2e142fceeb2256768a3c4d94a9486784a6c656484d" +checksum = "4db32b2f09c464c802dfdce859031ef5db920795614f74123d5d4e687412e8a9" dependencies = [ "duplicate", "maybe-async", "reqwest 0.12.7", - "risc0-groth16", "serde", "thiserror", ] +[[package]] +name = "borsh" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.75", + "syn_derive", +] + [[package]] name = "bs58" version = "0.5.1" @@ -1384,6 +1413,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.38" @@ -1552,6 +1587,17 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + [[package]] name = "cpufeatures" version = "0.2.13" @@ -2388,7 +2434,28 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared", + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.75", ] [[package]] @@ -2397,6 +2464,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -3180,6 +3253,29 @@ dependencies = [ "regex-automata 0.4.7", ] +[[package]] +name = "lazy-regex" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d8e41c97e6bc7ecb552016274b99fbb5d035e8de288c582d9b933af6677bfda" +dependencies = [ + "lazy-regex-proc_macros", + "once_cell", + "regex", +] + +[[package]] +name = "lazy-regex-proc_macros" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76e1d8b05d672c53cb9c7b920bbba8783845ae4f0b076e02a3db1d02c81b4163" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.75", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -3248,6 +3344,15 @@ dependencies = [ "hashbrown 0.14.5", ] +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "matchers" version = "0.1.0" @@ -3284,6 +3389,21 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "metal" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +dependencies = [ + "bitflags 2.6.0", + "block", + "core-graphics-types", + "foreign-types 0.5.0", + "log", + "objc", + "paste", +] + [[package]] name = "mime" version = "0.3.17" @@ -3410,6 +3530,15 @@ dependencies = [ "syn 2.0.75", ] +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + [[package]] name = "object" version = "0.36.3" @@ -3464,7 +3593,7 @@ checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ "bitflags 2.6.0", "cfg-if", - "foreign-types", + "foreign-types 0.3.2", "libc", "once_cell", "openssl-macros", @@ -4298,11 +4427,12 @@ dependencies = [ [[package]] name = "risc0-binfmt" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4003dd96f2e323dfef431b21a2aaddee1c6791fc32dea8eb2bff1b438bf5caf6" +checksum = "c3b6d127eccb95114a829312b554bf85d02315da251f268996a872d7dc71d455" dependencies = [ "anyhow", + "borsh", "elf", "risc0-zkp", "risc0-zkvm-platform", @@ -4312,14 +4442,15 @@ dependencies = [ [[package]] name = "risc0-build" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "452836a801f4c304c567f88855184f941d778d971cb94bee25b72d4255b56f09" +checksum = "2a0ab874b745a3352ed677a519fb0d788754100862b9d974ffe3ecfe15fdea5f" dependencies = [ "anyhow", "cargo_metadata", "dirs", "docker-generate", + "hex", "risc0-binfmt", "risc0-zkp", "risc0-zkvm-platform", @@ -4341,13 +4472,14 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c4154d2fbbde5af02a1c35c90340c2749044f5d5cd7834251b616ffa28d467" +checksum = "fc5faca1aeb1e635714074e22f16f53912e34c190bde831e8aa01f2d824f7702" dependencies = [ "anyhow", "bytemuck", "hex", + "metal", "risc0-core", "risc0-zkp", "tracing", @@ -4355,11 +4487,12 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce836e7c553e63cbd807d15925ba5dd641a80cdee7d123619eaa60bb555ab014" +checksum = "5559011c6a1e4f8671202cdc0adb3702907c240f847d4b646182a1ce9a95d335" dependencies = [ "anyhow", + "metal", "risc0-binfmt", "risc0-core", "risc0-zkp", @@ -4370,9 +4503,9 @@ dependencies = [ [[package]] name = "risc0-core" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "047cc26c68c092d664ded7488dcac0462d9e31190e1598a7820fe4246d313583" +checksum = "5dda94253849f0e31ce944211f5081a8d33133e79343e0b1defc0faa7a7ab987" dependencies = [ "bytemuck", "rand_core", @@ -4391,9 +4524,9 @@ dependencies = [ [[package]] name = "risc0-groth16" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3309c7acaf46ed3d21df3841185afd8ea4aab9fb63dbd1974694dfdae276970" +checksum = "3ef58e37beb097da5d313c220fd291c56308faeb7c8a6ddceee82f56f52b5841" dependencies = [ "anyhow", "ark-bn254", @@ -4411,17 +4544,19 @@ dependencies = [ [[package]] name = "risc0-zkp" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae55272541351a2391e5051519b33bfdf41f5648216827cc2cb94a49b6937380" +checksum = "f9e85591582355ecf9459c9bf2454e6c9095189ab47f17ed94b3ed47b138ec6d" dependencies = [ "anyhow", "blake2", + "borsh", "bytemuck", "cfg-if", "digest 0.10.7", "hex", "hex-literal", + "metal", "paste", "rand_core", "risc0-core", @@ -4433,20 +4568,22 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f234694d9dabc1172cf418b7a3ba65447caad15b994f450e9941d2a7cc89e045" +checksum = "b3f032d37abdcf6532d2a25aac32df976921f4a09d7acc72f70ce7d7c0bb4695" dependencies = [ "anyhow", "bincode", "bonsai-sdk", + "borsh", "bytemuck", "bytes", - "cfg-if", "getrandom", "hex", - "prost 0.12.6", + "lazy-regex", + "prost 0.13.1", "risc0-binfmt", + "risc0-build", "risc0-circuit-recursion", "risc0-circuit-rv32im", "risc0-core", @@ -4457,19 +4594,21 @@ dependencies = [ "semver 1.0.23", "serde", "sha2 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)", + "stability", "tempfile", "tracing", ] [[package]] name = "risc0-zkvm-platform" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16735dab52ae8bf0dc30df78fce901b674f469dfd7b5f5dfddd54caea22f14d5" +checksum = "f2284fecbc54d1274ea689387166c811e1d5dd8f51a407df322659eddec9c2fa" dependencies = [ "bytemuck", "getrandom", "libm", + "stability", ] [[package]] @@ -5118,6 +5257,16 @@ dependencies = [ "der", ] +[[package]] +name = "stability" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" +dependencies = [ + "quote", + "syn 2.0.75", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -5252,6 +5401,18 @@ dependencies = [ "syn 2.0.75", ] +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.75", +] + [[package]] name = "sync_wrapper" version = "0.1.2" diff --git a/contracts/artifacts/Blobstream0.json b/contracts/artifacts/Blobstream0.json index 63983a4..b3abdfa 100644 --- a/contracts/artifacts/Blobstream0.json +++ b/contracts/artifacts/Blobstream0.json @@ -412,13 +412,13 @@ ], "bytecode": { "linkReferences": {}, - "object": "0x60806040527f7c4d4662f341e9147ab7b60c4dedce832d331f65df62ee43b09abdff5d8283e36003553480156200003557600080fd5b50604051620013cd380380620013cd833981016040819052620000589162000167565b836001600160a01b0381166200008857604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200009381620000e3565b50600280546001600160a01b0319166001600160a01b039490941693909317909255600655600580546001600160401b0319166001600160401b03909216919091179055506001600455620001ce565b600180546001600160a01b0319169055620000fe8162000101565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fe57600080fd5b600080600080608085870312156200017e57600080fd5b84516200018b8162000151565b60208601519094506200019e8162000151565b6040860151606087015191945092506001600160401b0381168114620001c357600080fd5b939692955090935050565b6111ef80620001de6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063a7e4762911610097578063e405bbc311610066578063e405bbc3146101da578063e6679c2614610205578063ef3f7dd514610218578063f2fde38b1461022157600080fd5b8063a7e476291461019a578063c532514b146101ad578063ce0bb7e4146101c0578063e30c3978146101c957600080fd5b80636c4f6ba9116100d35780636c4f6ba914610162578063715018a61461017957806379ba5097146101815780638da5cb5b1461018957600080fd5b80631f3302a9146100fa57806323a4608b146101225780632b7ac3f314610137575b600080fd5b61010d610108366004610d94565b610234565b60405190151581526020015b60405180910390f35b610135610130366004610ed1565b6102a1565b005b60025461014a906001600160a01b031681565b6040516001600160a01b039091168152602001610119565b61016b60065481565b604051908152602001610119565b6101356102d1565b6101356102e5565b6000546001600160a01b031661014a565b6101356101a8366004610efd565b61032e565b6101356101bb366004610f5e565b61033b565b61016b60045481565b6001546001600160a01b031661014a565b6005546101ed906001600160401b031681565b6040516001600160401b039091168152602001610119565b610135610213366004610fde565b6105a7565b61016b60035481565b61013561022f366004610fde565b6105d1565b600083158061024557506004548410155b156102525750600061029a565b60008481526007602090815260408083205481518751818501529287015183830152815180840383018152606090930190915291906102949083908690610642565b50925050505b9392505050565b6102a9610743565b6006919091556005805467ffffffffffffffff19166001600160401b03909216919091179055565b6102d9610743565b6102e36000610770565b565b60015433906001600160a01b031681146103225760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b61032b81610770565b50565b610336610743565b600355565b600061034984860186610ffb565b60055460208201519192506001600160401b0390811691161161037f5760405163145ce5ff60e11b815260040160405180910390fd5b6006548151146103a2576040516352c6046360e01b815260040160405180910390fd5b600280546003546040516001600160a01b039092169263ab750e75928792879290916103d1908c908c9061106f565b602060405180830381855afa1580156103ee573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610411919061107f565b6040518563ffffffff1660e01b81526004016104309493929190611098565b60006040518083038186803b15801561044857600080fd5b505afa15801561045c573d6000803e3d6000fd5b50505060608201516020808401516005546004546040519081529394506001600160401b03918216939116917f34dd3689f5bd77a60a3ff2e09483dcab032fa2f1fd7227af3e24bed21beab1cb910160405180910390a46005546020828101516080840151604080516001600160401b03958616815294909216928401929092528201527f034c7608fd99db72330fdb1bcf6386af42ee9b6125664743942b942a8df4a3519060600160405180910390a16020818101516005805467ffffffffffffffff19166001600160401b03909216918217905560408084015160068190558151928352928201929092527f292f5abc3167175400fca463fa99530cda826ec53ec5eb1f3a2776006dacd75d910160405180910390a160608101516004805460009081526007602052604081209290925580549161059b836110ee565b91905055505050505050565b6105af610743565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6105d9610743565b600180546001600160a01b0383166001600160a01b0319909116811790915561060a6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080600184604001511161066a5783515115610665575060009050600161073b565b610690565b61067c84602001518560400151610789565b84515114610690575060009050600161073b565b83604001518460200151106106ab575060009050600261073b565b60006106b684610821565b8551519091506000036106e95784604001516001036106dc57851491506000905061073b565b600080925092505061073b565b60008061070487602001518860400151858a60000151610896565b9092509050600081600581111561071d5761071d611107565b146107305760009450925061073b915050565b508614925060009150505b935093915050565b6000546001600160a01b031633146102e35760405163118cdaa760e01b8152336004820152602401610319565b600180546001600160a01b031916905561032b81610a20565b60006001821161079b5750600061081b565b6107a482610a70565b6107b09061010061111d565b905060006107bf60018361111d565b6001901b90506001816107d2919061111d565b84116107de575061081b565b806001036107f057600191505061081b565b61080c6107fd828661111d565b610807838661111d565b610789565b610817906001611130565b9150505b92915050565b60006002600060f81b8360405160200161083c929190611173565b60408051601f198184030181529082905261085691611197565b602060405180830381855afa158015610873573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061081b919061107f565b600080846000036108ac57508290506003610a17565b846001036108d1578251156108c657508290506004610a17565b508290506000610a17565b82516000036108e557508290506005610a17565b60006108f086610a9d565b9050600061090d85600060018851610908919061111d565b610ade565b90506000828910156109915760006109278a858a86610896565b92509050600082600581111561093f5761093f611107565b1461095257508694509250610a17915050565b610982818860018a51610965919061111d565b81518110610975576109756111a3565b6020026020010151610c63565b60009550955050505050610a17565b60006109b16109a0858c61111d565b6109aa868c61111d565b8a86610896565b9250905060008260058111156109c9576109c9611107565b146109dc57508694509250610a17915050565b610a0c87600189516109ee919061111d565b815181106109fe576109fe6111a3565b602002602001015182610c63565b600095509550505050505b94509492505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81816001901b1015610a9157610a8a600182611130565b9050610a73565b61081b8161010061111d565b60006001821015610aad57600080fd5b6000610ab883610ce1565b90506000610ac760018361111d565b6001901b905083810361029a5760011c9392505050565b606081831115610b435760405162461bcd60e51b815260206004820152602a60248201527f496e76616c69642072616e67653a205f626567696e2069732067726561746572604482015269081d1a185b8817d95b9960b21b6064820152608401610319565b8351831180610b525750835182115b15610bb75760405162461bcd60e51b815260206004820152602f60248201527f496e76616c69642072616e67653a205f626567696e206f72205f656e6420617260448201526e65206f7574206f6620626f756e647360881b6064820152608401610319565b6000610bc3848461111d565b6001600160401b03811115610bda57610bda610d04565b604051908082528060200260200182016040528015610c03578160200160208202803683370190505b509050835b83811015610c5a57858181518110610c2257610c226111a3565b6020026020010151828683610c37919061111d565b81518110610c4757610c476111a3565b6020908102919091010152600101610c08565b50949350505050565b604051600160f81b6020820152602181018390526041810182905260009060029060610160408051601f1981840301815290829052610ca191611197565b602060405180830381855afa158015610cbe573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061029a919061107f565b6000805b821561081b5780610cf5816110ee565b915050600183901c9250610ce5565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610d3c57610d3c610d04565b60405290565b604051606081016001600160401b0381118282101715610d3c57610d3c610d04565b604051601f8201601f191681016001600160401b0381118282101715610d8c57610d8c610d04565b604052919050565b60008060008385036080811215610daa57600080fd5b8435935060206040601f1983011215610dc257600080fd5b610dca610d1a565b8682013581526040870135828201529350606086013591506001600160401b0380831115610df757600080fd5b9186019160608389031215610e0b57600080fd5b610e13610d42565b833582811115610e2257600080fd5b8401601f81018a13610e3357600080fd5b803583811115610e4557610e45610d04565b8060051b9350610e56858501610d64565b818152938201850193858101908c861115610e7057600080fd5b928601925b85841015610e8e57833582529286019290860190610e75565b80855250505050828401358382015260408401356040820152809450505050509250925092565b80356001600160401b0381168114610ecc57600080fd5b919050565b60008060408385031215610ee457600080fd5b82359150610ef460208401610eb5565b90509250929050565b600060208284031215610f0f57600080fd5b5035919050565b60008083601f840112610f2857600080fd5b5081356001600160401b03811115610f3f57600080fd5b602083019150836020828501011115610f5757600080fd5b9250929050565b60008060008060408587031215610f7457600080fd5b84356001600160401b0380821115610f8b57600080fd5b610f9788838901610f16565b90965094506020870135915080821115610fb057600080fd5b50610fbd87828801610f16565b95989497509550505050565b6001600160a01b038116811461032b57600080fd5b600060208284031215610ff057600080fd5b813561029a81610fc9565b600060a0828403121561100d57600080fd5b60405160a081018181106001600160401b038211171561102f5761102f610d04565b6040528235815261104260208401610eb5565b60208201526040830135604082015260608301356060820152608083013560808201528091505092915050565b8183823760009101908152919050565b60006020828403121561109157600080fd5b5051919050565b606081528360608201528385608083013760006080858301015260006080601f19601f870116830101905083602083015282604083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b600060018201611100576111006110d8565b5060010190565b634e487b7160e01b600052602160045260246000fd5b8181038181111561081b5761081b6110d8565b8082018082111561081b5761081b6110d8565b6000815160005b81811015611164576020818501810151868301520161114a565b50600093019283525090919050565b6001600160f81b031983168152600061118f6001830184611143565b949350505050565b600061029a8284611143565b634e487b7160e01b600052603260045260246000fdfea26469706673582212208546ce46f19cb37e225de6be3473073351863a83d49b42391fd630904825888e64736f6c63430008170033", - "sourceMap": "1137:5986:13:-:0;;;788:66:14;3198:54:13;;4060:413;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4178:6;-1:-1:-1;;;;;1273:26:8;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:8;;1350:1;1322:31;;;947:51:16;920:18;;1322:31:8;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;4200:8:13::1;:20:::0;;-1:-1:-1;;;;;;4200:20:13::1;-1:-1:-1::0;;;;;4200:20:13;;;::::1;::::0;;;::::1;::::0;;;4230:15:::1;:30:::0;4270:12:::1;:29:::0;;-1:-1:-1;;;;;;4270:29:13::1;-1:-1:-1::0;;;;;4270:29:13;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;4452:10:13::1;:14:::0;1137:5986;;1886:153:9;1975:13;1968:20;;-1:-1:-1;;;;;;1968:20:9;;;1998:34;2023:8;1998:24;:34::i;:::-;1886:153;:::o;2912:187:8:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:8;;;-1:-1:-1;;;;;;3020:17:8;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:131:16:-;-1:-1:-1;;;;;89:31:16;;79:42;;69:70;;135:1;132;125:12;150:646;272:6;280;288;296;349:3;337:9;328:7;324:23;320:33;317:53;;;366:1;363;356:12;317:53;398:9;392:16;417:31;442:5;417:31;:::i;:::-;517:2;502:18;;496:25;467:5;;-1:-1:-1;530:33:16;496:25;530:33;:::i;:::-;629:2;614:18;;608:25;678:2;663:18;;657:25;582:7;;-1:-1:-1;608:25:16;-1:-1:-1;;;;;;713:32:16;;701:45;;691:73;;760:1;757;750:12;691:73;150:646;;;;-1:-1:-1;150:646:16;;-1:-1:-1;;150:646:16:o;801:203::-;1137:5986:13;;;;;;" + "object": "0x60806040527fed3e428e1e19fc966ba2ca3e9f705c53af4af792740a70463da2073e217996b66003553480156200003557600080fd5b50604051620013cd380380620013cd833981016040819052620000589162000167565b836001600160a01b0381166200008857604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200009381620000e3565b50600280546001600160a01b0319166001600160a01b039490941693909317909255600655600580546001600160401b0319166001600160401b03909216919091179055506001600455620001ce565b600180546001600160a01b0319169055620000fe8162000101565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000fe57600080fd5b600080600080608085870312156200017e57600080fd5b84516200018b8162000151565b60208601519094506200019e8162000151565b6040860151606087015191945092506001600160401b0381168114620001c357600080fd5b939692955090935050565b6111ef80620001de6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063a7e4762911610097578063e405bbc311610066578063e405bbc3146101da578063e6679c2614610205578063ef3f7dd514610218578063f2fde38b1461022157600080fd5b8063a7e476291461019a578063c532514b146101ad578063ce0bb7e4146101c0578063e30c3978146101c957600080fd5b80636c4f6ba9116100d35780636c4f6ba914610162578063715018a61461017957806379ba5097146101815780638da5cb5b1461018957600080fd5b80631f3302a9146100fa57806323a4608b146101225780632b7ac3f314610137575b600080fd5b61010d610108366004610d94565b610234565b60405190151581526020015b60405180910390f35b610135610130366004610ed1565b6102a1565b005b60025461014a906001600160a01b031681565b6040516001600160a01b039091168152602001610119565b61016b60065481565b604051908152602001610119565b6101356102d1565b6101356102e5565b6000546001600160a01b031661014a565b6101356101a8366004610efd565b61032e565b6101356101bb366004610f5e565b61033b565b61016b60045481565b6001546001600160a01b031661014a565b6005546101ed906001600160401b031681565b6040516001600160401b039091168152602001610119565b610135610213366004610fde565b6105a7565b61016b60035481565b61013561022f366004610fde565b6105d1565b600083158061024557506004548410155b156102525750600061029a565b60008481526007602090815260408083205481518751818501529287015183830152815180840383018152606090930190915291906102949083908690610642565b50925050505b9392505050565b6102a9610743565b6006919091556005805467ffffffffffffffff19166001600160401b03909216919091179055565b6102d9610743565b6102e36000610770565b565b60015433906001600160a01b031681146103225760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b61032b81610770565b50565b610336610743565b600355565b600061034984860186610ffb565b60055460208201519192506001600160401b0390811691161161037f5760405163145ce5ff60e11b815260040160405180910390fd5b6006548151146103a2576040516352c6046360e01b815260040160405180910390fd5b600280546003546040516001600160a01b039092169263ab750e75928792879290916103d1908c908c9061106f565b602060405180830381855afa1580156103ee573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610411919061107f565b6040518563ffffffff1660e01b81526004016104309493929190611098565b60006040518083038186803b15801561044857600080fd5b505afa15801561045c573d6000803e3d6000fd5b50505060608201516020808401516005546004546040519081529394506001600160401b03918216939116917f34dd3689f5bd77a60a3ff2e09483dcab032fa2f1fd7227af3e24bed21beab1cb910160405180910390a46005546020828101516080840151604080516001600160401b03958616815294909216928401929092528201527f034c7608fd99db72330fdb1bcf6386af42ee9b6125664743942b942a8df4a3519060600160405180910390a16020818101516005805467ffffffffffffffff19166001600160401b03909216918217905560408084015160068190558151928352928201929092527f292f5abc3167175400fca463fa99530cda826ec53ec5eb1f3a2776006dacd75d910160405180910390a160608101516004805460009081526007602052604081209290925580549161059b836110ee565b91905055505050505050565b6105af610743565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6105d9610743565b600180546001600160a01b0383166001600160a01b0319909116811790915561060a6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080600184604001511161066a5783515115610665575060009050600161073b565b610690565b61067c84602001518560400151610789565b84515114610690575060009050600161073b565b83604001518460200151106106ab575060009050600261073b565b60006106b684610821565b8551519091506000036106e95784604001516001036106dc57851491506000905061073b565b600080925092505061073b565b60008061070487602001518860400151858a60000151610896565b9092509050600081600581111561071d5761071d611107565b146107305760009450925061073b915050565b508614925060009150505b935093915050565b6000546001600160a01b031633146102e35760405163118cdaa760e01b8152336004820152602401610319565b600180546001600160a01b031916905561032b81610a20565b60006001821161079b5750600061081b565b6107a482610a70565b6107b09061010061111d565b905060006107bf60018361111d565b6001901b90506001816107d2919061111d565b84116107de575061081b565b806001036107f057600191505061081b565b61080c6107fd828661111d565b610807838661111d565b610789565b610817906001611130565b9150505b92915050565b60006002600060f81b8360405160200161083c929190611173565b60408051601f198184030181529082905261085691611197565b602060405180830381855afa158015610873573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061081b919061107f565b600080846000036108ac57508290506003610a17565b846001036108d1578251156108c657508290506004610a17565b508290506000610a17565b82516000036108e557508290506005610a17565b60006108f086610a9d565b9050600061090d85600060018851610908919061111d565b610ade565b90506000828910156109915760006109278a858a86610896565b92509050600082600581111561093f5761093f611107565b1461095257508694509250610a17915050565b610982818860018a51610965919061111d565b81518110610975576109756111a3565b6020026020010151610c63565b60009550955050505050610a17565b60006109b16109a0858c61111d565b6109aa868c61111d565b8a86610896565b9250905060008260058111156109c9576109c9611107565b146109dc57508694509250610a17915050565b610a0c87600189516109ee919061111d565b815181106109fe576109fe6111a3565b602002602001015182610c63565b600095509550505050505b94509492505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81816001901b1015610a9157610a8a600182611130565b9050610a73565b61081b8161010061111d565b60006001821015610aad57600080fd5b6000610ab883610ce1565b90506000610ac760018361111d565b6001901b905083810361029a5760011c9392505050565b606081831115610b435760405162461bcd60e51b815260206004820152602a60248201527f496e76616c69642072616e67653a205f626567696e2069732067726561746572604482015269081d1a185b8817d95b9960b21b6064820152608401610319565b8351831180610b525750835182115b15610bb75760405162461bcd60e51b815260206004820152602f60248201527f496e76616c69642072616e67653a205f626567696e206f72205f656e6420617260448201526e65206f7574206f6620626f756e647360881b6064820152608401610319565b6000610bc3848461111d565b6001600160401b03811115610bda57610bda610d04565b604051908082528060200260200182016040528015610c03578160200160208202803683370190505b509050835b83811015610c5a57858181518110610c2257610c226111a3565b6020026020010151828683610c37919061111d565b81518110610c4757610c476111a3565b6020908102919091010152600101610c08565b50949350505050565b604051600160f81b6020820152602181018390526041810182905260009060029060610160408051601f1981840301815290829052610ca191611197565b602060405180830381855afa158015610cbe573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061029a919061107f565b6000805b821561081b5780610cf5816110ee565b915050600183901c9250610ce5565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610d3c57610d3c610d04565b60405290565b604051606081016001600160401b0381118282101715610d3c57610d3c610d04565b604051601f8201601f191681016001600160401b0381118282101715610d8c57610d8c610d04565b604052919050565b60008060008385036080811215610daa57600080fd5b8435935060206040601f1983011215610dc257600080fd5b610dca610d1a565b8682013581526040870135828201529350606086013591506001600160401b0380831115610df757600080fd5b9186019160608389031215610e0b57600080fd5b610e13610d42565b833582811115610e2257600080fd5b8401601f81018a13610e3357600080fd5b803583811115610e4557610e45610d04565b8060051b9350610e56858501610d64565b818152938201850193858101908c861115610e7057600080fd5b928601925b85841015610e8e57833582529286019290860190610e75565b80855250505050828401358382015260408401356040820152809450505050509250925092565b80356001600160401b0381168114610ecc57600080fd5b919050565b60008060408385031215610ee457600080fd5b82359150610ef460208401610eb5565b90509250929050565b600060208284031215610f0f57600080fd5b5035919050565b60008083601f840112610f2857600080fd5b5081356001600160401b03811115610f3f57600080fd5b602083019150836020828501011115610f5757600080fd5b9250929050565b60008060008060408587031215610f7457600080fd5b84356001600160401b0380821115610f8b57600080fd5b610f9788838901610f16565b90965094506020870135915080821115610fb057600080fd5b50610fbd87828801610f16565b95989497509550505050565b6001600160a01b038116811461032b57600080fd5b600060208284031215610ff057600080fd5b813561029a81610fc9565b600060a0828403121561100d57600080fd5b60405160a081018181106001600160401b038211171561102f5761102f610d04565b6040528235815261104260208401610eb5565b60208201526040830135604082015260608301356060820152608083013560808201528091505092915050565b8183823760009101908152919050565b60006020828403121561109157600080fd5b5051919050565b606081528360608201528385608083013760006080858301015260006080601f19601f870116830101905083602083015282604083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b600060018201611100576111006110d8565b5060010190565b634e487b7160e01b600052602160045260246000fd5b8181038181111561081b5761081b6110d8565b8082018082111561081b5761081b6110d8565b6000815160005b81811015611164576020818501810151868301520161114a565b50600093019283525090919050565b6001600160f81b031983168152600061118f6001830184611143565b949350505050565b600061029a8284611143565b634e487b7160e01b600052603260045260246000fdfea26469706673582212202f2a3c743a1539fcf5c6551eff9dd40ec912ca47ca37acd4cb43548c186c7cd664736f6c63430008170033", + "sourceMap": "1137:5986:13:-:0;;;788:66:14;3198:54:13;;4060:413;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4178:6;-1:-1:-1;;;;;1273:26:8;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:8;;1350:1;1322:31;;;947:51:17;920:18;;1322:31:8;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;4200:8:13::1;:20:::0;;-1:-1:-1;;;;;;4200:20:13::1;-1:-1:-1::0;;;;;4200:20:13;;;::::1;::::0;;;::::1;::::0;;;4230:15:::1;:30:::0;4270:12:::1;:29:::0;;-1:-1:-1;;;;;;4270:29:13::1;-1:-1:-1::0;;;;;4270:29:13;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;4452:10:13::1;:14:::0;1137:5986;;1886:153:9;1975:13;1968:20;;-1:-1:-1;;;;;;1968:20:9;;;1998:34;2023:8;1998:24;:34::i;:::-;1886:153;:::o;2912:187:8:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:8;;;-1:-1:-1;;;;;;3020:17:8;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:131:17:-;-1:-1:-1;;;;;89:31:17;;79:42;;69:70;;135:1;132;125:12;150:646;272:6;280;288;296;349:3;337:9;328:7;324:23;320:33;317:53;;;366:1;363;356:12;317:53;398:9;392:16;417:31;442:5;417:31;:::i;:::-;517:2;502:18;;496:25;467:5;;-1:-1:-1;530:33:17;496:25;530:33;:::i;:::-;629:2;614:18;;608:25;678:2;663:18;;657:25;582:7;;-1:-1:-1;608:25:17;-1:-1:-1;;;;;;713:32:17;;701:45;;691:73;;760:1;757;750:12;691:73;150:646;;;;-1:-1:-1;150:646:17;;-1:-1:-1;;150:646:17:o;801:203::-;1137:5986:13;;;;;;" }, "deployedBytecode": { "linkReferences": {}, - "object": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c8063a7e4762911610097578063e405bbc311610066578063e405bbc3146101da578063e6679c2614610205578063ef3f7dd514610218578063f2fde38b1461022157600080fd5b8063a7e476291461019a578063c532514b146101ad578063ce0bb7e4146101c0578063e30c3978146101c957600080fd5b80636c4f6ba9116100d35780636c4f6ba914610162578063715018a61461017957806379ba5097146101815780638da5cb5b1461018957600080fd5b80631f3302a9146100fa57806323a4608b146101225780632b7ac3f314610137575b600080fd5b61010d610108366004610d94565b610234565b60405190151581526020015b60405180910390f35b610135610130366004610ed1565b6102a1565b005b60025461014a906001600160a01b031681565b6040516001600160a01b039091168152602001610119565b61016b60065481565b604051908152602001610119565b6101356102d1565b6101356102e5565b6000546001600160a01b031661014a565b6101356101a8366004610efd565b61032e565b6101356101bb366004610f5e565b61033b565b61016b60045481565b6001546001600160a01b031661014a565b6005546101ed906001600160401b031681565b6040516001600160401b039091168152602001610119565b610135610213366004610fde565b6105a7565b61016b60035481565b61013561022f366004610fde565b6105d1565b600083158061024557506004548410155b156102525750600061029a565b60008481526007602090815260408083205481518751818501529287015183830152815180840383018152606090930190915291906102949083908690610642565b50925050505b9392505050565b6102a9610743565b6006919091556005805467ffffffffffffffff19166001600160401b03909216919091179055565b6102d9610743565b6102e36000610770565b565b60015433906001600160a01b031681146103225760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b61032b81610770565b50565b610336610743565b600355565b600061034984860186610ffb565b60055460208201519192506001600160401b0390811691161161037f5760405163145ce5ff60e11b815260040160405180910390fd5b6006548151146103a2576040516352c6046360e01b815260040160405180910390fd5b600280546003546040516001600160a01b039092169263ab750e75928792879290916103d1908c908c9061106f565b602060405180830381855afa1580156103ee573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610411919061107f565b6040518563ffffffff1660e01b81526004016104309493929190611098565b60006040518083038186803b15801561044857600080fd5b505afa15801561045c573d6000803e3d6000fd5b50505060608201516020808401516005546004546040519081529394506001600160401b03918216939116917f34dd3689f5bd77a60a3ff2e09483dcab032fa2f1fd7227af3e24bed21beab1cb910160405180910390a46005546020828101516080840151604080516001600160401b03958616815294909216928401929092528201527f034c7608fd99db72330fdb1bcf6386af42ee9b6125664743942b942a8df4a3519060600160405180910390a16020818101516005805467ffffffffffffffff19166001600160401b03909216918217905560408084015160068190558151928352928201929092527f292f5abc3167175400fca463fa99530cda826ec53ec5eb1f3a2776006dacd75d910160405180910390a160608101516004805460009081526007602052604081209290925580549161059b836110ee565b91905055505050505050565b6105af610743565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6105d9610743565b600180546001600160a01b0383166001600160a01b0319909116811790915561060a6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080600184604001511161066a5783515115610665575060009050600161073b565b610690565b61067c84602001518560400151610789565b84515114610690575060009050600161073b565b83604001518460200151106106ab575060009050600261073b565b60006106b684610821565b8551519091506000036106e95784604001516001036106dc57851491506000905061073b565b600080925092505061073b565b60008061070487602001518860400151858a60000151610896565b9092509050600081600581111561071d5761071d611107565b146107305760009450925061073b915050565b508614925060009150505b935093915050565b6000546001600160a01b031633146102e35760405163118cdaa760e01b8152336004820152602401610319565b600180546001600160a01b031916905561032b81610a20565b60006001821161079b5750600061081b565b6107a482610a70565b6107b09061010061111d565b905060006107bf60018361111d565b6001901b90506001816107d2919061111d565b84116107de575061081b565b806001036107f057600191505061081b565b61080c6107fd828661111d565b610807838661111d565b610789565b610817906001611130565b9150505b92915050565b60006002600060f81b8360405160200161083c929190611173565b60408051601f198184030181529082905261085691611197565b602060405180830381855afa158015610873573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061081b919061107f565b600080846000036108ac57508290506003610a17565b846001036108d1578251156108c657508290506004610a17565b508290506000610a17565b82516000036108e557508290506005610a17565b60006108f086610a9d565b9050600061090d85600060018851610908919061111d565b610ade565b90506000828910156109915760006109278a858a86610896565b92509050600082600581111561093f5761093f611107565b1461095257508694509250610a17915050565b610982818860018a51610965919061111d565b81518110610975576109756111a3565b6020026020010151610c63565b60009550955050505050610a17565b60006109b16109a0858c61111d565b6109aa868c61111d565b8a86610896565b9250905060008260058111156109c9576109c9611107565b146109dc57508694509250610a17915050565b610a0c87600189516109ee919061111d565b815181106109fe576109fe6111a3565b602002602001015182610c63565b600095509550505050505b94509492505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81816001901b1015610a9157610a8a600182611130565b9050610a73565b61081b8161010061111d565b60006001821015610aad57600080fd5b6000610ab883610ce1565b90506000610ac760018361111d565b6001901b905083810361029a5760011c9392505050565b606081831115610b435760405162461bcd60e51b815260206004820152602a60248201527f496e76616c69642072616e67653a205f626567696e2069732067726561746572604482015269081d1a185b8817d95b9960b21b6064820152608401610319565b8351831180610b525750835182115b15610bb75760405162461bcd60e51b815260206004820152602f60248201527f496e76616c69642072616e67653a205f626567696e206f72205f656e6420617260448201526e65206f7574206f6620626f756e647360881b6064820152608401610319565b6000610bc3848461111d565b6001600160401b03811115610bda57610bda610d04565b604051908082528060200260200182016040528015610c03578160200160208202803683370190505b509050835b83811015610c5a57858181518110610c2257610c226111a3565b6020026020010151828683610c37919061111d565b81518110610c4757610c476111a3565b6020908102919091010152600101610c08565b50949350505050565b604051600160f81b6020820152602181018390526041810182905260009060029060610160408051601f1981840301815290829052610ca191611197565b602060405180830381855afa158015610cbe573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061029a919061107f565b6000805b821561081b5780610cf5816110ee565b915050600183901c9250610ce5565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610d3c57610d3c610d04565b60405290565b604051606081016001600160401b0381118282101715610d3c57610d3c610d04565b604051601f8201601f191681016001600160401b0381118282101715610d8c57610d8c610d04565b604052919050565b60008060008385036080811215610daa57600080fd5b8435935060206040601f1983011215610dc257600080fd5b610dca610d1a565b8682013581526040870135828201529350606086013591506001600160401b0380831115610df757600080fd5b9186019160608389031215610e0b57600080fd5b610e13610d42565b833582811115610e2257600080fd5b8401601f81018a13610e3357600080fd5b803583811115610e4557610e45610d04565b8060051b9350610e56858501610d64565b818152938201850193858101908c861115610e7057600080fd5b928601925b85841015610e8e57833582529286019290860190610e75565b80855250505050828401358382015260408401356040820152809450505050509250925092565b80356001600160401b0381168114610ecc57600080fd5b919050565b60008060408385031215610ee457600080fd5b82359150610ef460208401610eb5565b90509250929050565b600060208284031215610f0f57600080fd5b5035919050565b60008083601f840112610f2857600080fd5b5081356001600160401b03811115610f3f57600080fd5b602083019150836020828501011115610f5757600080fd5b9250929050565b60008060008060408587031215610f7457600080fd5b84356001600160401b0380821115610f8b57600080fd5b610f9788838901610f16565b90965094506020870135915080821115610fb057600080fd5b50610fbd87828801610f16565b95989497509550505050565b6001600160a01b038116811461032b57600080fd5b600060208284031215610ff057600080fd5b813561029a81610fc9565b600060a0828403121561100d57600080fd5b60405160a081018181106001600160401b038211171561102f5761102f610d04565b6040528235815261104260208401610eb5565b60208201526040830135604082015260608301356060820152608083013560808201528091505092915050565b8183823760009101908152919050565b60006020828403121561109157600080fd5b5051919050565b606081528360608201528385608083013760006080858301015260006080601f19601f870116830101905083602083015282604083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b600060018201611100576111006110d8565b5060010190565b634e487b7160e01b600052602160045260246000fd5b8181038181111561081b5761081b6110d8565b8082018082111561081b5761081b6110d8565b6000815160005b81811015611164576020818501810151868301520161114a565b50600093019283525090919050565b6001600160f81b031983168152600061118f6001830184611143565b949350505050565b600061029a8284611143565b634e487b7160e01b600052603260045260246000fdfea26469706673582212208546ce46f19cb37e225de6be3473073351863a83d49b42391fd630904825888e64736f6c63430008170033", - "sourceMap": "1137:5986:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6679:442;;;;;;:::i;:::-;;:::i;:::-;;;2830:14:16;;2823:22;2805:41;;2793:2;2778:18;6679:442:13;;;;;;;;4578:180;;;;;;:::i;:::-;;:::i;:::-;;2846:33;;;;;-1:-1:-1;;;;;2846:33:13;;;;;;-1:-1:-1;;;;;3480:32:16;;;3462:51;;3450:2;3435:18;2846:33:13;3290:229:16;3806:30:13;;;;;;;;;3670:25:16;;;3658:2;3643:18;3806:30:13;3524:177:16;2293:101:8;;;:::i;2119:229:9:-;;;:::i;1638:85:8:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:8;1638:85;;4854:97:13;;;;;;:::i;:::-;;:::i;5226:1049::-;;;;;;:::i;:::-;;:::i;3413:25::-;;;;;;1232:99:9;1311:13;;-1:-1:-1;;;;;1311:13:9;1232:99;;3566:26:13;;;;;-1:-1:-1;;;;;3566:26:13;;;;;;-1:-1:-1;;;;;5517:31:16;;;5499:50;;5487:2;5472:18;3566:26:13;5355:200:16;5039:111:13;;;;;;:::i;:::-;;:::i;3198:54::-;;;;;;1524:178:9;;;;;;:::i;:::-;;:::i;6679:442:13:-;6836:4;6860:16;;;:45;;;6895:10;;6880:11;:25;;6860:45;6856:88;;;-1:-1:-1;6928:5:13;6921:12;;6856:88;6954:12;6969:24;;;:11;:24;;;;;;;;;7065:18;;6503:13:16;;7065:18:13;;;6485:32:16;6561:17;;;6555:24;6533:20;;;6526:54;7065:18:13;;;;;;;;;6458::16;;;;7065::13;;;6969:24;6954:12;7027:57;;6969:24;;7057:6;;7027:23;:57::i;:::-;-1:-1:-1;7004:80:13;-1:-1:-1;;;6679:442:13;;;;;;:::o;4578:180::-;1531:13:8;:11;:13::i;:::-;4682:15:13::1;:30:::0;;;;4722:12:::1;:29:::0;;-1:-1:-1;;4722:29:13::1;-1:-1:-1::0;;;;;4722:29:13;;::::1;::::0;;;::::1;::::0;;4578:180::o;2293:101:8:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2119:229:9:-;1311:13;;735:10:10;;-1:-1:-1;;;;;1311:13:9;2214:24;;2210:96;;2261:34;;-1:-1:-1;;;2261:34:9;;-1:-1:-1;;;;;3480:32:16;;2261:34:9;;;3462:51:16;3435:18;;2261:34:9;;;;;;;;2210:96;2315:26;2334:6;2315:18;:26::i;:::-;2161:187;2119:229::o;4854:97:13:-;1531:13:8;:11;:13::i;:::-;4926:7:13::1;:18:::0;4854:97::o;5226:1049::-;5317:29;5349:43;;;;5360:12;5349:43;:::i;:::-;5427:12;;5407:16;;;;5317:75;;-1:-1:-1;;;;;;5427:12:13;;;5407:32;;;5403:91;;5462:21;;-1:-1:-1;;;5462:21:13;;;;;;;;;;;5403:91;5535:15;;5507:24;;:43;5503:107;;5573:26;;-1:-1:-1;;;5573:26:13;;;;;;;;;;;5503:107;5619:8;;;5642:7;;5651:20;;-1:-1:-1;;;;;5619:8:13;;;;:15;;5635:5;;;;5642:7;;5651:20;;5658:12;;;;5651:20;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5619:53;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5753:17:13;;;;5735:16;;;;;5721:12;;5709:10;;5688:83;;3670:25:16;;;5753:17:13;;-1:-1:-1;;;;;;5688:83:13;;;;5721:12;;;5688:83;;3643:18:16;5688:83:13;;;;;;;5814:12;;5828:16;;;;;5846:22;;;;5786:83;;;-1:-1:-1;;;;;5814:12:13;;;8555:34:16;;8625:15;;;;8605:18;;;8598:43;;;;8657:18;;8650:34;5786:83:13;;8506:2:16;8491:18;5786:83:13;;;;;;;5935:16;;;;;5920:12;:31;;-1:-1:-1;;5920:31:13;-1:-1:-1;;;;;5920:31:13;;;;;;;;5979:20;;;;;5961:15;:38;;;6014:41;;8867:50:16;;;8933:18;;;8926:34;;;;6014:41:13;;8840:18:16;6014:41:13;;;;;;;6229:17;;;;6215:10;;;6203:23;;;;:11;:23;;;;;:43;;;;6256:12;;;;;;:::i;:::-;;;;;;5307:968;5226:1049;;;;:::o;5039:111::-;1531:13:8;:11;:13::i;:::-;5123:8:13::1;:20:::0;;-1:-1:-1;;;;;;5123:20:13::1;-1:-1:-1::0;;;;;5123:20:13;;;::::1;::::0;;;::::1;::::0;;5039:111::o;1524:178:9:-;1531:13:8;:11;:13::i;:::-;1613::9::1;:24:::0;;-1:-1:-1;;;;;1613:24:9;::::1;-1:-1:-1::0;;;;;;1613:24:9;;::::1;::::0;::::1;::::0;;;1677:7:::1;1684::8::0;1710:6;-1:-1:-1;;;;;1710:6:8;;1638:85;1677:7:9::1;-1:-1:-1::0;;;;;1652:43:9::1;;;;;;;;;;;1524:178:::0;:::o;1342:1444:6:-;1470:4;1476:10;1592:1;1573:5;:15;;;:20;1569:326;;1613:15;;:22;:27;1609:117;;-1:-1:-1;1668:5:6;;-1:-1:-1;1675:35:6;1660:51;;1609:117;1569:326;;;1772:45;1790:5;:9;;;1801:5;:15;;;1772:17;:45::i;:::-;1746:15;;:22;:71;1742:153;;-1:-1:-1;1841:5:6;;-1:-1:-1;1848:35:6;1833:51;;1742:153;1954:5;:15;;;1941:5;:9;;;:28;1937:98;;-1:-1:-1;1993:5:6;;-1:-1:-1;2000:23:6;1985:39;;1937:98;2131:14;2148:16;2159:4;2148:10;:16::i;:::-;2281:15;;:22;2131:33;;-1:-1:-1;2281:15:6;:27;2277:232;;2328:5;:15;;;2347:1;2328:20;2324:175;;2376:14;;;-1:-1:-1;2392:18:6;;-1:-1:-1;2368:43:6;;2324:175;2458:5;2465:18;2450:34;;;;;;;2324:175;2520:20;2542:16;2562:68;2578:5;:9;;;2589:5;:15;;;2606:6;2614:5;:15;;;2562;:68::i;:::-;2519:111;;-1:-1:-1;2519:111:6;-1:-1:-1;2654:18:6;2645:5;:27;;;;;;;;:::i;:::-;;2641:79;;2696:5;;-1:-1:-1;2703:5:6;-1:-1:-1;2688:21:6;;-1:-1:-1;;2688:21:6;2641:79;-1:-1:-1;2738:20:6;;;-1:-1:-1;2760:18:6;;-1:-1:-1;;1342:1444:6;;;;;;;:::o;1796:162:8:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:8;735:10:10;1855:23:8;1851:101;;1901:40;;-1:-1:-1;;;1901:40:8;;735:10:10;1901:40:8;;;3462:51:16;3435:18;;1901:40:8;3290:229:16;1886:153:9;1975:13;1968:20;;-1:-1:-1;;;;;;1968:20:9;;;1998:34;2023:8;1998:24;:34::i;936:1011:4:-;1009:18;1052:1;1039:9;:14;1035:125;;-1:-1:-1;1152:1:4;1145:8;;1035:125;1304:25;1319:9;1304:14;:25::i;:::-;1281:48;;245:3:2;1281:48:4;:::i;:::-;1268:61;-1:-1:-1;1394:28:4;1432:14;1445:1;1268:61;1432:14;:::i;:::-;1426:1;:21;;1394:54;;1567:1;1544:20;:24;;;;:::i;:::-;1537:3;:31;1533:412;;1580:17;;;1533:412;1711:20;1735:1;1711:25;1707:238;;1755:1;1748:8;;;;;1707:238;1859:79;1877:26;1883:20;1877:3;:26;:::i;:::-;1905:32;1917:20;1905:9;:32;:::i;:::-;1859:17;:79::i;:::-;1855:83;;:1;:83;:::i;:::-;1848:90;;;936:1011;;;;;:::o;868:140:7:-;921:14;952:53;340:4:2;976:21:7;;999:4;959:45;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;959:45:7;;;;;;;;;;952:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2983:1463:6:-;3132:7;3141:10;3171:9;3184:1;3171:14;3167:103;;-1:-1:-1;3209:8:6;;-1:-1:-1;3219:39:6;3201:58;;3167:103;3283:9;3296:1;3283:14;3279:206;;3317:16;;:21;3313:111;;-1:-1:-1;3366:8:6;;-1:-1:-1;3376:32:6;3358:51;;3313:111;-1:-1:-1;3445:8:6;;-1:-1:-1;3455:18:6;3437:37;;3279:206;3498:9;:16;3518:1;3498:21;3494:109;;-1:-1:-1;3543:8:6;;-1:-1:-1;3553:38:6;3535:57;;3494:109;3612:15;3630:25;3645:9;3630:14;:25::i;:::-;3612:43;;3665:30;3698:41;3704:9;3715:1;3737;3718:9;:16;:20;;;;:::i;:::-;3698:5;:41::i;:::-;3665:74;;3749:16;3785:7;3779:3;:13;3775:347;;;3808:16;3858:54;3874:3;3879:7;3888:8;3898:13;3858:15;:54::i;:::-;3838:74;-1:-1:-1;3838:74:6;-1:-1:-1;3939:18:6;3930:5;:27;;;;;;;;:::i;:::-;;3926:90;;-1:-1:-1;3985:8:6;;-1:-1:-1;3995:5:6;-1:-1:-1;3977:24:6;;-1:-1:-1;;3977:24:6;3926:90;4037:53;4048:8;4058:9;4087:1;4068:9;:16;:20;;;;:::i;:::-;4058:31;;;;;;;;:::i;:::-;;;;;;;4037:10;:53::i;:::-;4092:18;4029:82;;;;;;;;;;3775:347;4131:17;4179:76;4195:13;4201:7;4195:3;:13;:::i;:::-;4210:19;4222:7;4210:9;:19;:::i;:::-;4231:8;4241:13;4179:15;:76::i;:::-;4158:97;-1:-1:-1;4158:97:6;-1:-1:-1;4278:18:6;4269:5;:27;;;;;;;;:::i;:::-;;4265:82;;-1:-1:-1;4320:8:6;;-1:-1:-1;4330:5:6;-1:-1:-1;4312:24:6;;-1:-1:-1;;4312:24:6;4265:82;4364:54;4375:9;4404:1;4385:9;:16;:20;;;;:::i;:::-;4375:31;;;;;;;;:::i;:::-;;;;;;;4408:9;4364:10;:54::i;:::-;4420:18;4356:83;;;;;;;;2983:1463;;;;;;;;:::o;2912:187:8:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:8;;;-1:-1:-1;;;;;;3020:17:8;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;315:362:4:-;372:19;556:72;584:9;569:11;564:1;:16;;563:30;556:72;;;605:16;620:1;605:16;;:::i;:::-;;;556:72;;;640:34;663:11;245:3:2;640:34:4;:::i;2318:492::-;2367:7;2680:1;2675;:6;;2667:15;;;;;;2689:14;2706:11;2715:1;2706:8;:11::i;:::-;2689:28;-1:-1:-1;2723:9:4;2741:10;2750:1;2689:28;2741:10;:::i;:::-;2735:1;:17;;2723:29;;2767:1;2762;:6;2758:36;;2786:1;2780:7;2806:1;2318:492;-1:-1:-1;;;2318:492:4:o;4913:544:6:-;5005:16;5046:4;5037:6;:13;5033:96;;;5066:52;;-1:-1:-1;;;5066:52:6;;10769:2:16;5066:52:6;;;10751:21:16;10808:2;10788:18;;;10781:30;10847:34;10827:18;;;10820:62;-1:-1:-1;;;10898:18:16;;;10891:40;10948:19;;5066:52:6;10567:406:16;5033:96:6;5151:5;:12;5142:6;:21;:44;;;;5174:5;:12;5167:4;:19;5142:44;5138:132;;;5202:57;;-1:-1:-1;;;5202:57:6;;11180:2:16;5202:57:6;;;11162:21:16;11219:2;11199:18;;;11192:30;11258:34;11238:18;;;11231:62;-1:-1:-1;;;11309:18:16;;;11302:45;11364:19;;5202:57:6;10978:411:16;5138:132:6;5279:20;5316:13;5323:6;5316:4;:13;:::i;:::-;-1:-1:-1;;;;;5302:28:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5302:28:6;-1:-1:-1;5279:51:6;-1:-1:-1;5357:6:6;5340:91;5369:4;5365:1;:8;5340:91;;;5412:5;5418:1;5412:8;;;;;;;;:::i;:::-;;;;;;;5394:3;5402:6;5398:1;:10;;;;:::i;:::-;5394:15;;;;;;;;:::i;:::-;;;;;;;;;;:26;5375:3;;5340:91;;;-1:-1:-1;5447:3:6;4913:544;-1:-1:-1;;;;4913:544:6:o;415:157:7:-;516:52;;-1:-1:-1;;;516:52:7;;;11577:39:16;11632:11;;;11625:27;;;11668:12;;;11661:28;;;478:14:7;;509:60;;11705:12:16;;516:52:7;;;-1:-1:-1;;516:52:7;;;;;;;;;;509:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2078:159:4:-;2121:7;;2160:56;2167:6;;2160:56;;2185:7;;;;:::i;:::-;;;;2208:1;2202:7;;;;;2160:56;;14:127:16;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:257;218:4;212:11;;;250:17;;-1:-1:-1;;;;;282:34:16;;318:22;;;279:62;276:88;;;344:18;;:::i;:::-;380:4;373:24;146:257;:::o;408:251::-;480:2;474:9;522:2;510:15;;-1:-1:-1;;;;;540:34:16;;576:22;;;537:62;534:88;;;602:18;;:::i;664:275::-;735:2;729:9;800:2;781:13;;-1:-1:-1;;777:27:16;765:40;;-1:-1:-1;;;;;820:34:16;;856:22;;;817:62;814:88;;;882:18;;:::i;:::-;918:2;911:22;664:275;;-1:-1:-1;664:275:16:o;944:1716::-;1083:6;1091;1099;1143:9;1134:7;1130:23;1173:3;1169:2;1165:12;1162:32;;;1190:1;1187;1180:12;1162:32;1213:23;;;-1:-1:-1;1255:2:16;1291:4;-1:-1:-1;;1273:16:16;;1269:27;1266:47;;;1309:1;1306;1299:12;1266:47;1335:22;;:::i;:::-;1393:18;;;1380:32;1366:47;;1473:4;1458:20;;1445:34;1429:14;;;1422:58;1322:35;-1:-1:-1;1555:2:16;1540:18;;1527:32;;-1:-1:-1;;;;;;1608:14:16;;;1605:34;;;1635:1;1632;1625:12;1605:34;1658:22;;;;1714:2;1696:16;;;1692:25;1689:45;;;1730:1;1727;1720:12;1689:45;1758:22;;:::i;:::-;1818:2;1805:16;1846:2;1836:8;1833:16;1830:36;;;1862:1;1859;1852:12;1830:36;1885:17;;1933:4;1925:13;;1921:27;-1:-1:-1;1911:55:16;;1962:1;1959;1952:12;1911:55;1998:2;1985:16;2020:2;2016;2013:10;2010:36;;;2026:18;;:::i;:::-;2072:2;2069:1;2065:10;2055:20;;2095:28;2119:2;2115;2111:11;2095:28;:::i;:::-;2157:15;;;2227:11;;;2223:20;;;2188:12;;;;2255:19;;;2252:39;;;2287:1;2284;2277:12;2252:39;2311:11;;;;2331:142;2347:6;2342:3;2339:15;2331:142;;;2413:17;;2401:30;;2364:12;;;;2451;;;;2331:142;;;2498:5;2489:7;2482:22;;;;;2559:2;2555;2551:11;2538:25;2533:2;2524:7;2520:16;2513:51;2621:4;2617:2;2613:13;2600:27;2593:4;2584:7;2580:18;2573:55;2647:7;2637:17;;;;;;944:1716;;;;;:::o;2857:171::-;2924:20;;-1:-1:-1;;;;;2973:30:16;;2963:41;;2953:69;;3018:1;3015;3008:12;2953:69;2857:171;;;:::o;3033:252::-;3100:6;3108;3161:2;3149:9;3140:7;3136:23;3132:32;3129:52;;;3177:1;3174;3167:12;3129:52;3213:9;3200:23;3190:33;;3242:37;3275:2;3264:9;3260:18;3242:37;:::i;:::-;3232:47;;3033:252;;;;;:::o;3914:180::-;3973:6;4026:2;4014:9;4005:7;4001:23;3997:32;3994:52;;;4042:1;4039;4032:12;3994:52;-1:-1:-1;4065:23:16;;3914:180;-1:-1:-1;3914:180:16:o;4099:347::-;4150:8;4160:6;4214:3;4207:4;4199:6;4195:17;4191:27;4181:55;;4232:1;4229;4222:12;4181:55;-1:-1:-1;4255:20:16;;-1:-1:-1;;;;;4287:30:16;;4284:50;;;4330:1;4327;4320:12;4284:50;4367:4;4359:6;4355:17;4343:29;;4419:3;4412:4;4403:6;4395;4391:19;4387:30;4384:39;4381:59;;;4436:1;4433;4426:12;4381:59;4099:347;;;;;:::o;4451:717::-;4541:6;4549;4557;4565;4618:2;4606:9;4597:7;4593:23;4589:32;4586:52;;;4634:1;4631;4624:12;4586:52;4674:9;4661:23;-1:-1:-1;;;;;4744:2:16;4736:6;4733:14;4730:34;;;4760:1;4757;4750:12;4730:34;4799:58;4849:7;4840:6;4829:9;4825:22;4799:58;:::i;:::-;4876:8;;-1:-1:-1;4773:84:16;-1:-1:-1;4964:2:16;4949:18;;4936:32;;-1:-1:-1;4980:16:16;;;4977:36;;;5009:1;5006;4999:12;4977:36;;5048:60;5100:7;5089:8;5078:9;5074:24;5048:60;:::i;:::-;4451:717;;;;-1:-1:-1;5127:8:16;-1:-1:-1;;;;4451:717:16:o;5560:150::-;-1:-1:-1;;;;;5654:31:16;;5644:42;;5634:70;;5700:1;5697;5690:12;5715:292;5800:6;5853:2;5841:9;5832:7;5828:23;5824:32;5821:52;;;5869:1;5866;5859:12;5821:52;5908:9;5895:23;5927:50;5971:5;5927:50;:::i;6591:719::-;6683:6;6736:3;6724:9;6715:7;6711:23;6707:33;6704:53;;;6753:1;6750;6743:12;6704:53;6786:2;6780:9;6828:3;6820:6;6816:16;6898:6;6886:10;6883:22;-1:-1:-1;;;;;6850:10:16;6847:34;6844:62;6841:88;;;6909:18;;:::i;:::-;6945:2;6938:22;6984:23;;6969:39;;7041:37;7074:2;7059:18;;7041:37;:::i;:::-;7036:2;7028:6;7024:15;7017:62;7140:2;7129:9;7125:18;7112:32;7107:2;7099:6;7095:15;7088:57;7206:2;7195:9;7191:18;7178:32;7173:2;7165:6;7161:15;7154:57;7273:3;7262:9;7258:19;7245:33;7239:3;7231:6;7227:16;7220:59;7298:6;7288:16;;;6591:719;;;;:::o;7315:271::-;7498:6;7490;7485:3;7472:33;7454:3;7524:16;;7549:13;;;7524:16;7315:271;-1:-1:-1;7315:271:16:o;7591:184::-;7661:6;7714:2;7702:9;7693:7;7689:23;7685:32;7682:52;;;7730:1;7727;7720:12;7682:52;-1:-1:-1;7753:16:16;;7591:184;-1:-1:-1;7591:184:16:o;7780:535::-;7993:2;7982:9;7975:21;8032:6;8027:2;8016:9;8012:18;8005:34;8090:6;8082;8076:3;8065:9;8061:19;8048:49;8147:1;8141:3;8132:6;8121:9;8117:22;8113:32;8106:43;7956:4;8217:3;8210:2;8206:7;8201:2;8193:6;8189:15;8185:29;8174:9;8170:45;8166:55;8158:63;;8259:6;8252:4;8241:9;8237:20;8230:36;8302:6;8297:2;8286:9;8282:18;8275:34;7780:535;;;;;;;:::o;8971:127::-;9032:10;9027:3;9023:20;9020:1;9013:31;9063:4;9060:1;9053:15;9087:4;9084:1;9077:15;9103:135;9142:3;9163:17;;;9160:43;;9183:18;;:::i;:::-;-1:-1:-1;9230:1:16;9219:13;;9103:135::o;9243:127::-;9304:10;9299:3;9295:20;9292:1;9285:31;9335:4;9332:1;9325:15;9359:4;9356:1;9349:15;9375:128;9442:9;;;9463:11;;;9460:37;;;9477:18;;:::i;9508:125::-;9573:9;;;9594:10;;;9591:36;;;9607:18;;:::i;9638:322::-;9679:3;9717:5;9711:12;9741:1;9751:128;9765:6;9762:1;9759:13;9751:128;;;9862:4;9847:13;;;9843:24;;9837:31;9824:11;;;9817:52;9780:12;9751:128;;;-1:-1:-1;9934:1:16;9898:16;;9923:13;;;-1:-1:-1;9898:16:16;;9638:322;-1:-1:-1;9638:322:16:o;9965:271::-;-1:-1:-1;;;;;;10150:26:16;;10138:39;;10120:3;10193:37;10227:1;10218:11;;10210:6;10193:37;:::i;:::-;10186:44;9965:271;-1:-1:-1;;;;9965:271:16:o;10241:189::-;10370:3;10395:29;10420:3;10412:6;10395:29;:::i;10435:127::-;10496:10;10491:3;10487:20;10484:1;10477:31;10527:4;10524:1;10517:15;10551:4;10548:1;10541:15" + "object": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c8063a7e4762911610097578063e405bbc311610066578063e405bbc3146101da578063e6679c2614610205578063ef3f7dd514610218578063f2fde38b1461022157600080fd5b8063a7e476291461019a578063c532514b146101ad578063ce0bb7e4146101c0578063e30c3978146101c957600080fd5b80636c4f6ba9116100d35780636c4f6ba914610162578063715018a61461017957806379ba5097146101815780638da5cb5b1461018957600080fd5b80631f3302a9146100fa57806323a4608b146101225780632b7ac3f314610137575b600080fd5b61010d610108366004610d94565b610234565b60405190151581526020015b60405180910390f35b610135610130366004610ed1565b6102a1565b005b60025461014a906001600160a01b031681565b6040516001600160a01b039091168152602001610119565b61016b60065481565b604051908152602001610119565b6101356102d1565b6101356102e5565b6000546001600160a01b031661014a565b6101356101a8366004610efd565b61032e565b6101356101bb366004610f5e565b61033b565b61016b60045481565b6001546001600160a01b031661014a565b6005546101ed906001600160401b031681565b6040516001600160401b039091168152602001610119565b610135610213366004610fde565b6105a7565b61016b60035481565b61013561022f366004610fde565b6105d1565b600083158061024557506004548410155b156102525750600061029a565b60008481526007602090815260408083205481518751818501529287015183830152815180840383018152606090930190915291906102949083908690610642565b50925050505b9392505050565b6102a9610743565b6006919091556005805467ffffffffffffffff19166001600160401b03909216919091179055565b6102d9610743565b6102e36000610770565b565b60015433906001600160a01b031681146103225760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b61032b81610770565b50565b610336610743565b600355565b600061034984860186610ffb565b60055460208201519192506001600160401b0390811691161161037f5760405163145ce5ff60e11b815260040160405180910390fd5b6006548151146103a2576040516352c6046360e01b815260040160405180910390fd5b600280546003546040516001600160a01b039092169263ab750e75928792879290916103d1908c908c9061106f565b602060405180830381855afa1580156103ee573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610411919061107f565b6040518563ffffffff1660e01b81526004016104309493929190611098565b60006040518083038186803b15801561044857600080fd5b505afa15801561045c573d6000803e3d6000fd5b50505060608201516020808401516005546004546040519081529394506001600160401b03918216939116917f34dd3689f5bd77a60a3ff2e09483dcab032fa2f1fd7227af3e24bed21beab1cb910160405180910390a46005546020828101516080840151604080516001600160401b03958616815294909216928401929092528201527f034c7608fd99db72330fdb1bcf6386af42ee9b6125664743942b942a8df4a3519060600160405180910390a16020818101516005805467ffffffffffffffff19166001600160401b03909216918217905560408084015160068190558151928352928201929092527f292f5abc3167175400fca463fa99530cda826ec53ec5eb1f3a2776006dacd75d910160405180910390a160608101516004805460009081526007602052604081209290925580549161059b836110ee565b91905055505050505050565b6105af610743565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6105d9610743565b600180546001600160a01b0383166001600160a01b0319909116811790915561060a6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080600184604001511161066a5783515115610665575060009050600161073b565b610690565b61067c84602001518560400151610789565b84515114610690575060009050600161073b565b83604001518460200151106106ab575060009050600261073b565b60006106b684610821565b8551519091506000036106e95784604001516001036106dc57851491506000905061073b565b600080925092505061073b565b60008061070487602001518860400151858a60000151610896565b9092509050600081600581111561071d5761071d611107565b146107305760009450925061073b915050565b508614925060009150505b935093915050565b6000546001600160a01b031633146102e35760405163118cdaa760e01b8152336004820152602401610319565b600180546001600160a01b031916905561032b81610a20565b60006001821161079b5750600061081b565b6107a482610a70565b6107b09061010061111d565b905060006107bf60018361111d565b6001901b90506001816107d2919061111d565b84116107de575061081b565b806001036107f057600191505061081b565b61080c6107fd828661111d565b610807838661111d565b610789565b610817906001611130565b9150505b92915050565b60006002600060f81b8360405160200161083c929190611173565b60408051601f198184030181529082905261085691611197565b602060405180830381855afa158015610873573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061081b919061107f565b600080846000036108ac57508290506003610a17565b846001036108d1578251156108c657508290506004610a17565b508290506000610a17565b82516000036108e557508290506005610a17565b60006108f086610a9d565b9050600061090d85600060018851610908919061111d565b610ade565b90506000828910156109915760006109278a858a86610896565b92509050600082600581111561093f5761093f611107565b1461095257508694509250610a17915050565b610982818860018a51610965919061111d565b81518110610975576109756111a3565b6020026020010151610c63565b60009550955050505050610a17565b60006109b16109a0858c61111d565b6109aa868c61111d565b8a86610896565b9250905060008260058111156109c9576109c9611107565b146109dc57508694509250610a17915050565b610a0c87600189516109ee919061111d565b815181106109fe576109fe6111a3565b602002602001015182610c63565b600095509550505050505b94509492505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81816001901b1015610a9157610a8a600182611130565b9050610a73565b61081b8161010061111d565b60006001821015610aad57600080fd5b6000610ab883610ce1565b90506000610ac760018361111d565b6001901b905083810361029a5760011c9392505050565b606081831115610b435760405162461bcd60e51b815260206004820152602a60248201527f496e76616c69642072616e67653a205f626567696e2069732067726561746572604482015269081d1a185b8817d95b9960b21b6064820152608401610319565b8351831180610b525750835182115b15610bb75760405162461bcd60e51b815260206004820152602f60248201527f496e76616c69642072616e67653a205f626567696e206f72205f656e6420617260448201526e65206f7574206f6620626f756e647360881b6064820152608401610319565b6000610bc3848461111d565b6001600160401b03811115610bda57610bda610d04565b604051908082528060200260200182016040528015610c03578160200160208202803683370190505b509050835b83811015610c5a57858181518110610c2257610c226111a3565b6020026020010151828683610c37919061111d565b81518110610c4757610c476111a3565b6020908102919091010152600101610c08565b50949350505050565b604051600160f81b6020820152602181018390526041810182905260009060029060610160408051601f1981840301815290829052610ca191611197565b602060405180830381855afa158015610cbe573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061029a919061107f565b6000805b821561081b5780610cf5816110ee565b915050600183901c9250610ce5565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715610d3c57610d3c610d04565b60405290565b604051606081016001600160401b0381118282101715610d3c57610d3c610d04565b604051601f8201601f191681016001600160401b0381118282101715610d8c57610d8c610d04565b604052919050565b60008060008385036080811215610daa57600080fd5b8435935060206040601f1983011215610dc257600080fd5b610dca610d1a565b8682013581526040870135828201529350606086013591506001600160401b0380831115610df757600080fd5b9186019160608389031215610e0b57600080fd5b610e13610d42565b833582811115610e2257600080fd5b8401601f81018a13610e3357600080fd5b803583811115610e4557610e45610d04565b8060051b9350610e56858501610d64565b818152938201850193858101908c861115610e7057600080fd5b928601925b85841015610e8e57833582529286019290860190610e75565b80855250505050828401358382015260408401356040820152809450505050509250925092565b80356001600160401b0381168114610ecc57600080fd5b919050565b60008060408385031215610ee457600080fd5b82359150610ef460208401610eb5565b90509250929050565b600060208284031215610f0f57600080fd5b5035919050565b60008083601f840112610f2857600080fd5b5081356001600160401b03811115610f3f57600080fd5b602083019150836020828501011115610f5757600080fd5b9250929050565b60008060008060408587031215610f7457600080fd5b84356001600160401b0380821115610f8b57600080fd5b610f9788838901610f16565b90965094506020870135915080821115610fb057600080fd5b50610fbd87828801610f16565b95989497509550505050565b6001600160a01b038116811461032b57600080fd5b600060208284031215610ff057600080fd5b813561029a81610fc9565b600060a0828403121561100d57600080fd5b60405160a081018181106001600160401b038211171561102f5761102f610d04565b6040528235815261104260208401610eb5565b60208201526040830135604082015260608301356060820152608083013560808201528091505092915050565b8183823760009101908152919050565b60006020828403121561109157600080fd5b5051919050565b606081528360608201528385608083013760006080858301015260006080601f19601f870116830101905083602083015282604083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b600060018201611100576111006110d8565b5060010190565b634e487b7160e01b600052602160045260246000fd5b8181038181111561081b5761081b6110d8565b8082018082111561081b5761081b6110d8565b6000815160005b81811015611164576020818501810151868301520161114a565b50600093019283525090919050565b6001600160f81b031983168152600061118f6001830184611143565b949350505050565b600061029a8284611143565b634e487b7160e01b600052603260045260246000fdfea26469706673582212202f2a3c743a1539fcf5c6551eff9dd40ec912ca47ca37acd4cb43548c186c7cd664736f6c63430008170033", + "sourceMap": "1137:5986:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6679:442;;;;;;:::i;:::-;;:::i;:::-;;;2830:14:17;;2823:22;2805:41;;2793:2;2778:18;6679:442:13;;;;;;;;4578:180;;;;;;:::i;:::-;;:::i;:::-;;2846:33;;;;;-1:-1:-1;;;;;2846:33:13;;;;;;-1:-1:-1;;;;;3480:32:17;;;3462:51;;3450:2;3435:18;2846:33:13;3290:229:17;3806:30:13;;;;;;;;;3670:25:17;;;3658:2;3643:18;3806:30:13;3524:177:17;2293:101:8;;;:::i;2119:229:9:-;;;:::i;1638:85:8:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:8;1638:85;;4854:97:13;;;;;;:::i;:::-;;:::i;5226:1049::-;;;;;;:::i;:::-;;:::i;3413:25::-;;;;;;1232:99:9;1311:13;;-1:-1:-1;;;;;1311:13:9;1232:99;;3566:26:13;;;;;-1:-1:-1;;;;;3566:26:13;;;;;;-1:-1:-1;;;;;5517:31:17;;;5499:50;;5487:2;5472:18;3566:26:13;5355:200:17;5039:111:13;;;;;;:::i;:::-;;:::i;3198:54::-;;;;;;1524:178:9;;;;;;:::i;:::-;;:::i;6679:442:13:-;6836:4;6860:16;;;:45;;;6895:10;;6880:11;:25;;6860:45;6856:88;;;-1:-1:-1;6928:5:13;6921:12;;6856:88;6954:12;6969:24;;;:11;:24;;;;;;;;;7065:18;;6503:13:17;;7065:18:13;;;6485:32:17;6561:17;;;6555:24;6533:20;;;6526:54;7065:18:13;;;;;;;;;6458::17;;;;7065::13;;;6969:24;6954:12;7027:57;;6969:24;;7057:6;;7027:23;:57::i;:::-;-1:-1:-1;7004:80:13;-1:-1:-1;;;6679:442:13;;;;;;:::o;4578:180::-;1531:13:8;:11;:13::i;:::-;4682:15:13::1;:30:::0;;;;4722:12:::1;:29:::0;;-1:-1:-1;;4722:29:13::1;-1:-1:-1::0;;;;;4722:29:13;;::::1;::::0;;;::::1;::::0;;4578:180::o;2293:101:8:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2119:229:9:-;1311:13;;735:10:10;;-1:-1:-1;;;;;1311:13:9;2214:24;;2210:96;;2261:34;;-1:-1:-1;;;2261:34:9;;-1:-1:-1;;;;;3480:32:17;;2261:34:9;;;3462:51:17;3435:18;;2261:34:9;;;;;;;;2210:96;2315:26;2334:6;2315:18;:26::i;:::-;2161:187;2119:229::o;4854:97:13:-;1531:13:8;:11;:13::i;:::-;4926:7:13::1;:18:::0;4854:97::o;5226:1049::-;5317:29;5349:43;;;;5360:12;5349:43;:::i;:::-;5427:12;;5407:16;;;;5317:75;;-1:-1:-1;;;;;;5427:12:13;;;5407:32;;;5403:91;;5462:21;;-1:-1:-1;;;5462:21:13;;;;;;;;;;;5403:91;5535:15;;5507:24;;:43;5503:107;;5573:26;;-1:-1:-1;;;5573:26:13;;;;;;;;;;;5503:107;5619:8;;;5642:7;;5651:20;;-1:-1:-1;;;;;5619:8:13;;;;:15;;5635:5;;;;5642:7;;5651:20;;5658:12;;;;5651:20;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5619:53;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5753:17:13;;;;5735:16;;;;;5721:12;;5709:10;;5688:83;;3670:25:17;;;5753:17:13;;-1:-1:-1;;;;;;5688:83:13;;;;5721:12;;;5688:83;;3643:18:17;5688:83:13;;;;;;;5814:12;;5828:16;;;;;5846:22;;;;5786:83;;;-1:-1:-1;;;;;5814:12:13;;;8555:34:17;;8625:15;;;;8605:18;;;8598:43;;;;8657:18;;8650:34;5786:83:13;;8506:2:17;8491:18;5786:83:13;;;;;;;5935:16;;;;;5920:12;:31;;-1:-1:-1;;5920:31:13;-1:-1:-1;;;;;5920:31:13;;;;;;;;5979:20;;;;;5961:15;:38;;;6014:41;;8867:50:17;;;8933:18;;;8926:34;;;;6014:41:13;;8840:18:17;6014:41:13;;;;;;;6229:17;;;;6215:10;;;6203:23;;;;:11;:23;;;;;:43;;;;6256:12;;;;;;:::i;:::-;;;;;;5307:968;5226:1049;;;;:::o;5039:111::-;1531:13:8;:11;:13::i;:::-;5123:8:13::1;:20:::0;;-1:-1:-1;;;;;;5123:20:13::1;-1:-1:-1::0;;;;;5123:20:13;;;::::1;::::0;;;::::1;::::0;;5039:111::o;1524:178:9:-;1531:13:8;:11;:13::i;:::-;1613::9::1;:24:::0;;-1:-1:-1;;;;;1613:24:9;::::1;-1:-1:-1::0;;;;;;1613:24:9;;::::1;::::0;::::1;::::0;;;1677:7:::1;1684::8::0;1710:6;-1:-1:-1;;;;;1710:6:8;;1638:85;1677:7:9::1;-1:-1:-1::0;;;;;1652:43:9::1;;;;;;;;;;;1524:178:::0;:::o;1342:1444:6:-;1470:4;1476:10;1592:1;1573:5;:15;;;:20;1569:326;;1613:15;;:22;:27;1609:117;;-1:-1:-1;1668:5:6;;-1:-1:-1;1675:35:6;1660:51;;1609:117;1569:326;;;1772:45;1790:5;:9;;;1801:5;:15;;;1772:17;:45::i;:::-;1746:15;;:22;:71;1742:153;;-1:-1:-1;1841:5:6;;-1:-1:-1;1848:35:6;1833:51;;1742:153;1954:5;:15;;;1941:5;:9;;;:28;1937:98;;-1:-1:-1;1993:5:6;;-1:-1:-1;2000:23:6;1985:39;;1937:98;2131:14;2148:16;2159:4;2148:10;:16::i;:::-;2281:15;;:22;2131:33;;-1:-1:-1;2281:15:6;:27;2277:232;;2328:5;:15;;;2347:1;2328:20;2324:175;;2376:14;;;-1:-1:-1;2392:18:6;;-1:-1:-1;2368:43:6;;2324:175;2458:5;2465:18;2450:34;;;;;;;2324:175;2520:20;2542:16;2562:68;2578:5;:9;;;2589:5;:15;;;2606:6;2614:5;:15;;;2562;:68::i;:::-;2519:111;;-1:-1:-1;2519:111:6;-1:-1:-1;2654:18:6;2645:5;:27;;;;;;;;:::i;:::-;;2641:79;;2696:5;;-1:-1:-1;2703:5:6;-1:-1:-1;2688:21:6;;-1:-1:-1;;2688:21:6;2641:79;-1:-1:-1;2738:20:6;;;-1:-1:-1;2760:18:6;;-1:-1:-1;;1342:1444:6;;;;;;;:::o;1796:162:8:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:8;735:10:10;1855:23:8;1851:101;;1901:40;;-1:-1:-1;;;1901:40:8;;735:10:10;1901:40:8;;;3462:51:17;3435:18;;1901:40:8;3290:229:17;1886:153:9;1975:13;1968:20;;-1:-1:-1;;;;;;1968:20:9;;;1998:34;2023:8;1998:24;:34::i;936:1011:4:-;1009:18;1052:1;1039:9;:14;1035:125;;-1:-1:-1;1152:1:4;1145:8;;1035:125;1304:25;1319:9;1304:14;:25::i;:::-;1281:48;;245:3:2;1281:48:4;:::i;:::-;1268:61;-1:-1:-1;1394:28:4;1432:14;1445:1;1268:61;1432:14;:::i;:::-;1426:1;:21;;1394:54;;1567:1;1544:20;:24;;;;:::i;:::-;1537:3;:31;1533:412;;1580:17;;;1533:412;1711:20;1735:1;1711:25;1707:238;;1755:1;1748:8;;;;;1707:238;1859:79;1877:26;1883:20;1877:3;:26;:::i;:::-;1905:32;1917:20;1905:9;:32;:::i;:::-;1859:17;:79::i;:::-;1855:83;;:1;:83;:::i;:::-;1848:90;;;936:1011;;;;;:::o;868:140:7:-;921:14;952:53;340:4:2;976:21:7;;999:4;959:45;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;959:45:7;;;;;;;;;;952:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2983:1463:6:-;3132:7;3141:10;3171:9;3184:1;3171:14;3167:103;;-1:-1:-1;3209:8:6;;-1:-1:-1;3219:39:6;3201:58;;3167:103;3283:9;3296:1;3283:14;3279:206;;3317:16;;:21;3313:111;;-1:-1:-1;3366:8:6;;-1:-1:-1;3376:32:6;3358:51;;3313:111;-1:-1:-1;3445:8:6;;-1:-1:-1;3455:18:6;3437:37;;3279:206;3498:9;:16;3518:1;3498:21;3494:109;;-1:-1:-1;3543:8:6;;-1:-1:-1;3553:38:6;3535:57;;3494:109;3612:15;3630:25;3645:9;3630:14;:25::i;:::-;3612:43;;3665:30;3698:41;3704:9;3715:1;3737;3718:9;:16;:20;;;;:::i;:::-;3698:5;:41::i;:::-;3665:74;;3749:16;3785:7;3779:3;:13;3775:347;;;3808:16;3858:54;3874:3;3879:7;3888:8;3898:13;3858:15;:54::i;:::-;3838:74;-1:-1:-1;3838:74:6;-1:-1:-1;3939:18:6;3930:5;:27;;;;;;;;:::i;:::-;;3926:90;;-1:-1:-1;3985:8:6;;-1:-1:-1;3995:5:6;-1:-1:-1;3977:24:6;;-1:-1:-1;;3977:24:6;3926:90;4037:53;4048:8;4058:9;4087:1;4068:9;:16;:20;;;;:::i;:::-;4058:31;;;;;;;;:::i;:::-;;;;;;;4037:10;:53::i;:::-;4092:18;4029:82;;;;;;;;;;3775:347;4131:17;4179:76;4195:13;4201:7;4195:3;:13;:::i;:::-;4210:19;4222:7;4210:9;:19;:::i;:::-;4231:8;4241:13;4179:15;:76::i;:::-;4158:97;-1:-1:-1;4158:97:6;-1:-1:-1;4278:18:6;4269:5;:27;;;;;;;;:::i;:::-;;4265:82;;-1:-1:-1;4320:8:6;;-1:-1:-1;4330:5:6;-1:-1:-1;4312:24:6;;-1:-1:-1;;4312:24:6;4265:82;4364:54;4375:9;4404:1;4385:9;:16;:20;;;;:::i;:::-;4375:31;;;;;;;;:::i;:::-;;;;;;;4408:9;4364:10;:54::i;:::-;4420:18;4356:83;;;;;;;;2983:1463;;;;;;;;:::o;2912:187:8:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:8;;;-1:-1:-1;;;;;;3020:17:8;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;315:362:4:-;372:19;556:72;584:9;569:11;564:1;:16;;563:30;556:72;;;605:16;620:1;605:16;;:::i;:::-;;;556:72;;;640:34;663:11;245:3:2;640:34:4;:::i;2318:492::-;2367:7;2680:1;2675;:6;;2667:15;;;;;;2689:14;2706:11;2715:1;2706:8;:11::i;:::-;2689:28;-1:-1:-1;2723:9:4;2741:10;2750:1;2689:28;2741:10;:::i;:::-;2735:1;:17;;2723:29;;2767:1;2762;:6;2758:36;;2786:1;2780:7;2806:1;2318:492;-1:-1:-1;;;2318:492:4:o;4913:544:6:-;5005:16;5046:4;5037:6;:13;5033:96;;;5066:52;;-1:-1:-1;;;5066:52:6;;10769:2:17;5066:52:6;;;10751:21:17;10808:2;10788:18;;;10781:30;10847:34;10827:18;;;10820:62;-1:-1:-1;;;10898:18:17;;;10891:40;10948:19;;5066:52:6;10567:406:17;5033:96:6;5151:5;:12;5142:6;:21;:44;;;;5174:5;:12;5167:4;:19;5142:44;5138:132;;;5202:57;;-1:-1:-1;;;5202:57:6;;11180:2:17;5202:57:6;;;11162:21:17;11219:2;11199:18;;;11192:30;11258:34;11238:18;;;11231:62;-1:-1:-1;;;11309:18:17;;;11302:45;11364:19;;5202:57:6;10978:411:17;5138:132:6;5279:20;5316:13;5323:6;5316:4;:13;:::i;:::-;-1:-1:-1;;;;;5302:28:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5302:28:6;-1:-1:-1;5279:51:6;-1:-1:-1;5357:6:6;5340:91;5369:4;5365:1;:8;5340:91;;;5412:5;5418:1;5412:8;;;;;;;;:::i;:::-;;;;;;;5394:3;5402:6;5398:1;:10;;;;:::i;:::-;5394:15;;;;;;;;:::i;:::-;;;;;;;;;;:26;5375:3;;5340:91;;;-1:-1:-1;5447:3:6;4913:544;-1:-1:-1;;;;4913:544:6:o;415:157:7:-;516:52;;-1:-1:-1;;;516:52:7;;;11577:39:17;11632:11;;;11625:27;;;11668:12;;;11661:28;;;478:14:7;;509:60;;11705:12:17;;516:52:7;;;-1:-1:-1;;516:52:7;;;;;;;;;;509:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2078:159:4:-;2121:7;;2160:56;2167:6;;2160:56;;2185:7;;;;:::i;:::-;;;;2208:1;2202:7;;;;;2160:56;;14:127:17;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:257;218:4;212:11;;;250:17;;-1:-1:-1;;;;;282:34:17;;318:22;;;279:62;276:88;;;344:18;;:::i;:::-;380:4;373:24;146:257;:::o;408:251::-;480:2;474:9;522:2;510:15;;-1:-1:-1;;;;;540:34:17;;576:22;;;537:62;534:88;;;602:18;;:::i;664:275::-;735:2;729:9;800:2;781:13;;-1:-1:-1;;777:27:17;765:40;;-1:-1:-1;;;;;820:34:17;;856:22;;;817:62;814:88;;;882:18;;:::i;:::-;918:2;911:22;664:275;;-1:-1:-1;664:275:17:o;944:1716::-;1083:6;1091;1099;1143:9;1134:7;1130:23;1173:3;1169:2;1165:12;1162:32;;;1190:1;1187;1180:12;1162:32;1213:23;;;-1:-1:-1;1255:2:17;1291:4;-1:-1:-1;;1273:16:17;;1269:27;1266:47;;;1309:1;1306;1299:12;1266:47;1335:22;;:::i;:::-;1393:18;;;1380:32;1366:47;;1473:4;1458:20;;1445:34;1429:14;;;1422:58;1322:35;-1:-1:-1;1555:2:17;1540:18;;1527:32;;-1:-1:-1;;;;;;1608:14:17;;;1605:34;;;1635:1;1632;1625:12;1605:34;1658:22;;;;1714:2;1696:16;;;1692:25;1689:45;;;1730:1;1727;1720:12;1689:45;1758:22;;:::i;:::-;1818:2;1805:16;1846:2;1836:8;1833:16;1830:36;;;1862:1;1859;1852:12;1830:36;1885:17;;1933:4;1925:13;;1921:27;-1:-1:-1;1911:55:17;;1962:1;1959;1952:12;1911:55;1998:2;1985:16;2020:2;2016;2013:10;2010:36;;;2026:18;;:::i;:::-;2072:2;2069:1;2065:10;2055:20;;2095:28;2119:2;2115;2111:11;2095:28;:::i;:::-;2157:15;;;2227:11;;;2223:20;;;2188:12;;;;2255:19;;;2252:39;;;2287:1;2284;2277:12;2252:39;2311:11;;;;2331:142;2347:6;2342:3;2339:15;2331:142;;;2413:17;;2401:30;;2364:12;;;;2451;;;;2331:142;;;2498:5;2489:7;2482:22;;;;;2559:2;2555;2551:11;2538:25;2533:2;2524:7;2520:16;2513:51;2621:4;2617:2;2613:13;2600:27;2593:4;2584:7;2580:18;2573:55;2647:7;2637:17;;;;;;944:1716;;;;;:::o;2857:171::-;2924:20;;-1:-1:-1;;;;;2973:30:17;;2963:41;;2953:69;;3018:1;3015;3008:12;2953:69;2857:171;;;:::o;3033:252::-;3100:6;3108;3161:2;3149:9;3140:7;3136:23;3132:32;3129:52;;;3177:1;3174;3167:12;3129:52;3213:9;3200:23;3190:33;;3242:37;3275:2;3264:9;3260:18;3242:37;:::i;:::-;3232:47;;3033:252;;;;;:::o;3914:180::-;3973:6;4026:2;4014:9;4005:7;4001:23;3997:32;3994:52;;;4042:1;4039;4032:12;3994:52;-1:-1:-1;4065:23:17;;3914:180;-1:-1:-1;3914:180:17:o;4099:347::-;4150:8;4160:6;4214:3;4207:4;4199:6;4195:17;4191:27;4181:55;;4232:1;4229;4222:12;4181:55;-1:-1:-1;4255:20:17;;-1:-1:-1;;;;;4287:30:17;;4284:50;;;4330:1;4327;4320:12;4284:50;4367:4;4359:6;4355:17;4343:29;;4419:3;4412:4;4403:6;4395;4391:19;4387:30;4384:39;4381:59;;;4436:1;4433;4426:12;4381:59;4099:347;;;;;:::o;4451:717::-;4541:6;4549;4557;4565;4618:2;4606:9;4597:7;4593:23;4589:32;4586:52;;;4634:1;4631;4624:12;4586:52;4674:9;4661:23;-1:-1:-1;;;;;4744:2:17;4736:6;4733:14;4730:34;;;4760:1;4757;4750:12;4730:34;4799:58;4849:7;4840:6;4829:9;4825:22;4799:58;:::i;:::-;4876:8;;-1:-1:-1;4773:84:17;-1:-1:-1;4964:2:17;4949:18;;4936:32;;-1:-1:-1;4980:16:17;;;4977:36;;;5009:1;5006;4999:12;4977:36;;5048:60;5100:7;5089:8;5078:9;5074:24;5048:60;:::i;:::-;4451:717;;;;-1:-1:-1;5127:8:17;-1:-1:-1;;;;4451:717:17:o;5560:150::-;-1:-1:-1;;;;;5654:31:17;;5644:42;;5634:70;;5700:1;5697;5690:12;5715:292;5800:6;5853:2;5841:9;5832:7;5828:23;5824:32;5821:52;;;5869:1;5866;5859:12;5821:52;5908:9;5895:23;5927:50;5971:5;5927:50;:::i;6591:719::-;6683:6;6736:3;6724:9;6715:7;6711:23;6707:33;6704:53;;;6753:1;6750;6743:12;6704:53;6786:2;6780:9;6828:3;6820:6;6816:16;6898:6;6886:10;6883:22;-1:-1:-1;;;;;6850:10:17;6847:34;6844:62;6841:88;;;6909:18;;:::i;:::-;6945:2;6938:22;6984:23;;6969:39;;7041:37;7074:2;7059:18;;7041:37;:::i;:::-;7036:2;7028:6;7024:15;7017:62;7140:2;7129:9;7125:18;7112:32;7107:2;7099:6;7095:15;7088:57;7206:2;7195:9;7191:18;7178:32;7173:2;7165:6;7161:15;7154:57;7273:3;7262:9;7258:19;7245:33;7239:3;7231:6;7227:16;7220:59;7298:6;7288:16;;;6591:719;;;;:::o;7315:271::-;7498:6;7490;7485:3;7472:33;7454:3;7524:16;;7549:13;;;7524:16;7315:271;-1:-1:-1;7315:271:17:o;7591:184::-;7661:6;7714:2;7702:9;7693:7;7689:23;7685:32;7682:52;;;7730:1;7727;7720:12;7682:52;-1:-1:-1;7753:16:17;;7591:184;-1:-1:-1;7591:184:17:o;7780:535::-;7993:2;7982:9;7975:21;8032:6;8027:2;8016:9;8012:18;8005:34;8090:6;8082;8076:3;8065:9;8061:19;8048:49;8147:1;8141:3;8132:6;8121:9;8117:22;8113:32;8106:43;7956:4;8217:3;8210:2;8206:7;8201:2;8193:6;8189:15;8185:29;8174:9;8170:45;8166:55;8158:63;;8259:6;8252:4;8241:9;8237:20;8230:36;8302:6;8297:2;8286:9;8282:18;8275:34;7780:535;;;;;;;:::o;8971:127::-;9032:10;9027:3;9023:20;9020:1;9013:31;9063:4;9060:1;9053:15;9087:4;9084:1;9077:15;9103:135;9142:3;9163:17;;;9160:43;;9183:18;;:::i;:::-;-1:-1:-1;9230:1:17;9219:13;;9103:135::o;9243:127::-;9304:10;9299:3;9295:20;9292:1;9285:31;9335:4;9332:1;9325:15;9359:4;9356:1;9349:15;9375:128;9442:9;;;9463:11;;;9460:37;;;9477:18;;:::i;9508:125::-;9573:9;;;9594:10;;;9591:36;;;9607:18;;:::i;9638:322::-;9679:3;9717:5;9711:12;9741:1;9751:128;9765:6;9762:1;9759:13;9751:128;;;9862:4;9847:13;;;9843:24;;9837:31;9824:11;;;9817:52;9780:12;9751:128;;;-1:-1:-1;9934:1:17;9898:16;;9923:13;;;-1:-1:-1;9898:16:17;;9638:322;-1:-1:-1;9638:322:17:o;9965:271::-;-1:-1:-1;;;;;;10150:26:17;;10138:39;;10120:3;10193:37;10227:1;10218:11;;10210:6;10193:37;:::i;:::-;10186:44;9965:271;-1:-1:-1;;;;9965:271:17:o;10241:189::-;10370:3;10395:29;10420:3;10412:6;10395:29;:::i;10435:127::-;10496:10;10491:3;10487:20;10484:1;10477:31;10527:4;10524:1;10517:15;10551:4;10548:1;10541:15" }, "id": 13, "metadata": { @@ -916,13 +916,14 @@ "runs": 200 }, "remappings": [ + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "blobstream-contracts/=lib/blobstream-contracts/src/", "blobstream/=lib/blobstream-contracts/src/", "ds-test/=lib/blobstream-contracts/lib/ds-test/src/", - "erc4626-tests/=lib/blobstream-contracts/lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", + "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", - "openzeppelin-contracts-upgradeable/=lib/blobstream-contracts/lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "openzeppelin/=lib/openzeppelin-contracts/", "risc0-ethereum/=lib/risc0-ethereum/", @@ -1045,11 +1046,11 @@ ] }, "src/ImageID.sol": { - "keccak256": "0x9ba7ba033e7292f06f961aae6a8cef1adc3b923ece8aa487ce4286f45bfa6911", + "keccak256": "0xcfa9ac7522986705d4f558c9e6b0c49bdcbbf9f0357ada8261819b70cb4fe7cc", "license": "Apache-2.0", "urls": [ - "bzz-raw://d833f4fb12bee1b10a9cd04d96dbb60234e8c7b1c7576d51650cdb9e298a8ab7", - "dweb:/ipfs/QmSMK1aZQXorcwE5uuxuuew2d8TxEZ6pNB1nte2Ng8fvob" + "bzz-raw://88c7138a251da89fd86ae60b840ad2fee8c2d5c4d8918b5145e72fcef04bca0a", + "dweb:/ipfs/QmW6YKHjUk6jzrGGXxSn5oJNF3nGMDeQXZqyUNSa2zfxzZ" ] }, "src/RangeCommitment.sol": { @@ -1080,5 +1081,5 @@ "verifier()": "2b7ac3f3", "verifyAttestation(uint256,(uint256,bytes32),(bytes32[],uint256,uint256))": "1f3302a9" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"contract IRiscZeroVerifier\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_trustedHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_trustedHeight\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidTargetHeight\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrustedHeaderHash\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proofNonce\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"startBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"endBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"dataCommitment\",\"type\":\"bytes32\"}],\"name\":\"DataCommitmentStored\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"}],\"name\":\"HeadUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"trustedBlock\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"targetBlock\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorBitmap\",\"type\":\"uint256\"}],\"name\":\"ValidatorBitmapEquivocation\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageId\",\"type\":\"bytes32\"}],\"name\":\"adminSetImageId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_trustedHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_trustedHeight\",\"type\":\"uint64\"}],\"name\":\"adminSetTrustedState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRiscZeroVerifier\",\"name\":\"_verifier\",\"type\":\"address\"}],\"name\":\"adminSetVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"imageId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestHeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_commitBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_seal\",\"type\":\"bytes\"}],\"name\":\"updateRange\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"contract IRiscZeroVerifier\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_proofNonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"dataRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct DataRootTuple\",\"name\":\"_tuple\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"sideNodes\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"key\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numLeaves\",\"type\":\"uint256\"}],\"internalType\":\"struct BinaryMerkleProof\",\"name\":\"_proof\",\"type\":\"tuple\"}],\"name\":\"verifyAttestation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"DataCommitmentStored(uint256,uint64,uint64,bytes32)\":{\"params\":{\"dataCommitment\":\"The data commitment for the block range.\",\"endBlock\":\"The end block of the block range.\",\"proofNonce\":\"The nonce of the proof.\",\"startBlock\":\"The start block of the block range.\"}},\"ValidatorBitmapEquivocation(uint64,uint64,uint256)\":{\"params\":{\"targetBlock\":\"The target block of the block range.\",\"trustedBlock\":\"The trusted block of the block range.\",\"validatorBitmap\":\"The validator bitmap for the block range.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"verifyAttestation(uint256,(uint256,bytes32),(bytes32[],uint256,uint256))\":{\"params\":{\"_proof\":\"Binary Merkle tree proof that `tuple` is in the root at `_tupleRootNonce`.\",\"_proofNonce\":\"Nonce of the tuple root to prove against.\",\"_tuple\":\"Data root tuple to prove inclusion of.\"},\"returns\":{\"_0\":\"`true` is proof is valid, `false` otherwise.\"}}},\"stateVariables\":{\"latestBlockHash\":{\"details\":\"always update this in tandem with `latestHeight`\"},\"latestHeight\":{\"details\":\"this value is 64 bits as is the max for heights in Tendermint.\"}},\"title\":\"A starter application using RISC Zero.\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidTargetHeight()\":[{\"notice\":\"Target height for next batch was below the current height.\"}],\"InvalidTrustedHeaderHash()\":[{\"notice\":\"Trusted block hash does not equal the commitment from the new batch.\"}]},\"events\":{\"DataCommitmentStored(uint256,uint64,uint64,bytes32)\":{\"notice\":\"Data commitment stored for the block range [startBlock, endBlock) with proof nonce. NOTE: This event matches existing Blobstream contracts, for ease of integration.\"},\"HeadUpdate(uint64,bytes32)\":{\"notice\":\"Emits event with the new head update. NOTE: Matches existing Blobstream contract, for ease of integration.\"},\"ValidatorBitmapEquivocation(uint64,uint64,uint256)\":{\"notice\":\"Validator bitmap of the intersection of validators that signed off on both the trusted block and the new header. This event is emitted to allow for slashing equivocations. NOTE: This event matches existing Blobstream contracts, for ease of integration.\"}},\"kind\":\"user\",\"methods\":{\"adminSetImageId(bytes32)\":{\"notice\":\"Only the admin can update. Updates the image ID to verify proofs against.\"},\"adminSetTrustedState(bytes32,uint64)\":{\"notice\":\"Only the admin can update. Updates the trusted height and block hash to sync from.\"},\"adminSetVerifier(address)\":{\"notice\":\"Only the admin can update. Updates the verifier contract address.\"},\"constructor\":{\"notice\":\"Initialize the contract, binding it to a specified RISC Zero verifier.\"},\"imageId()\":{\"notice\":\"Image ID of the only zkVM binary to accept verification from. The image ID is similar to the address of a smart contract. It uniquely represents the logic of that guest program, ensuring that only proofs generated from a pre-defined guest program.\"},\"latestBlockHash()\":{\"notice\":\"The latest block hash validated.\"},\"latestHeight()\":{\"notice\":\"The latest height validated.\"},\"proofNonce()\":{\"notice\":\"nonce for mapping block ranges to block merkle roots. This value is used as the key to insert new roots in `merkleRoots`.\"},\"updateRange(bytes,bytes)\":{\"notice\":\"Validate a proof of a new header range, update state.\"},\"verifier()\":{\"notice\":\"RISC Zero verifier contract address.\"},\"verifyAttestation(uint256,(uint256,bytes32),(bytes32[],uint256,uint256))\":{\"notice\":\"Verify a Data Availability attestation. Method of IDAOracle from Blobstream contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Blobstream0.sol\":\"Blobstream0\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":blobstream-contracts/=lib/blobstream-contracts/src/\",\":blobstream/=lib/blobstream-contracts/src/\",\":ds-test/=lib/blobstream-contracts/lib/ds-test/src/\",\":erc4626-tests/=lib/blobstream-contracts/lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/blobstream-contracts/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/\",\":risc0-ethereum/=lib/risc0-ethereum/\",\":risc0/=lib/risc0-ethereum/contracts/src/\",\":tree/=lib/blobstream-contracts/src/lib/tree/\",\":verifier/=lib/blobstream-contracts/src/lib/verifier/\"]},\"sources\":{\"lib/blobstream-contracts/src/DataRootTuple.sol\":{\"keccak256\":\"0x0526597d14a6d7f258ec48e434a9b60c9a8781764a8f23c878d49926daeb5d1c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://06ee253f8d0f58dbe66c64cb5d2945182ba3bced088167472d8f953cec421916\",\"dweb:/ipfs/QmUF9jjr6bH3pPgjGAZqYhsUn7EevqU7kZn8RBqQ4EoU2w\"]},\"lib/blobstream-contracts/src/IDAOracle.sol\":{\"keccak256\":\"0xc35648b17d3587bc3a627f67a328874db536ee24c11b970c3c57226d69a32eec\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://362610301e6057d10777c84111d4bb43af53af75a488fb8ab8666a775302a3fc\",\"dweb:/ipfs/QmURgSTYhiguV1oCUARaTTWrpFHg5nMEtxhPVcpUDuEKq6\"]},\"lib/blobstream-contracts/src/lib/tree/Constants.sol\":{\"keccak256\":\"0x2050b2be8a739ce250cc5cea1556936c7937915b5d7fde269dd70e8e7eb660c4\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://946ea30d1001048a800f60bb24d2ab7ecf5f92ae2abd212f3f855e37a6840ce7\",\"dweb:/ipfs/QmW2PnhAB5h2eCCM6Vafg8ZUpBttjLTbBhtXjJh3SSrYEN\"]},\"lib/blobstream-contracts/src/lib/tree/Types.sol\":{\"keccak256\":\"0xa47e9e20fef88264acdf1fc6bc0b3bb9f23c7022f5de8d203a1014895a606958\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d480249b6adf8730bffcf26eed5902eb9fd1d56d11f931b35a9e19c6415b3f47\",\"dweb:/ipfs/QmPCrcMmQdNMYG232WxEg2zZRFvXQqdEZgwQNMaDJ2oNab\"]},\"lib/blobstream-contracts/src/lib/tree/Utils.sol\":{\"keccak256\":\"0x9760cb3ab3d4f412949b9be1bbdf5d9e7954cad44a94a4f7fe90fcffb86fe7fa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://06edf92a63d5b2c3459800acc6945071ee069be6df03b70f28440c5c732465aa\",\"dweb:/ipfs/QmU4LnS5ckxXpEBE82y5gfsNxn5gUQPh273nLrmfPP9pjD\"]},\"lib/blobstream-contracts/src/lib/tree/binary/BinaryMerkleProof.sol\":{\"keccak256\":\"0x9fb953284b455b544091f058fdb11ac73928093517333909c0744d9319410688\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://938230a60210345fe7cc661708c4fe0db663a5f5b5306f05fe4023b44f104b6e\",\"dweb:/ipfs/QmUvcJuDmwnbRzXX5qgV4Mckg6ujvMeo46SrTPvgpPhFSF\"]},\"lib/blobstream-contracts/src/lib/tree/binary/BinaryMerkleTree.sol\":{\"keccak256\":\"0x90dc9ac613014c2d3fcebbd23f2b5af67188b7de80b2ef853f20c91a14ce68fd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4dffcfb8911d174787b05d814c423ea368c6526e32d762576fb5109e517a185f\",\"dweb:/ipfs/QmRxYnjwkEANhqXkoNifG2kbGtEymyLRU5h2NyPTZ5wbSE\"]},\"lib/blobstream-contracts/src/lib/tree/binary/TreeHasher.sol\":{\"keccak256\":\"0x2f16501eac14f6e2a61de29d3aa10e3aaf8e0a594fc9cf8dc2d955bb2f6d54e0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://984a2e5d52cfdd38f2c597bddc4a2de8ad1e4dd9c81008376569a29c74fa963e\",\"dweb:/ipfs/QmaXhfHD58Jv4nSw3qw2hGwbDSPKDjFzPNYWm9Y4KWiigm\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0x08b074ae1b12e70ce24d1335086ec5a418934311a6771d9f61fe24d392050e12\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2fd900a8f8244fc0a49bae1ca1bd5815884f248a2306b8e7dc68011c25803b7\",\"dweb:/ipfs/Qmd4EaujSR74x7EqziRDfqgc6Tv2nzRQDSaxKXcU1ybxbA\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/risc0-ethereum/contracts/src/IRiscZeroVerifier.sol\":{\"keccak256\":\"0x19341f62c8fe3c0945ebffa4f25d49706ded741af98eaacb7ade824c947f61a4\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://5d443c7187fd565e25acdfd3df63f14421d06dda0839470cb475546f7c9908c0\",\"dweb:/ipfs/QmeaHPjKmGZBC15iiYKsDCY1k2UY3iYZiNB6Pdc8ow6aVX\"]},\"lib/risc0-ethereum/contracts/src/Util.sol\":{\"keccak256\":\"0x230a9a58bb2b0c68d4921ecc3672783f941890a2fa3a238dbe5188cfb7658b82\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://586cb5296c564761609ca8aaae5b1fbbdb19ab1e174f7197f602572d9e82b70c\",\"dweb:/ipfs/QmWxDmucSfg3Wgdk1rVcheDHwkziTsXWvKpKSCnxtpQBqg\"]},\"src/Blobstream0.sol\":{\"keccak256\":\"0x114437e96530e857a4f40ed866c0f441b5ddbcd4f7d7cc38ee9d615583d23b0d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://22583e0c77c103ce5cd398ab85d7c8e2d59507be08f8e8e9fad4cca8985f899b\",\"dweb:/ipfs/QmTRuKu5mjkjue3yDA5HSv1c29FwspJ2koEayfcacqFAph\"]},\"src/ImageID.sol\":{\"keccak256\":\"0x9ba7ba033e7292f06f961aae6a8cef1adc3b923ece8aa487ce4286f45bfa6911\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d833f4fb12bee1b10a9cd04d96dbb60234e8c7b1c7576d51650cdb9e298a8ab7\",\"dweb:/ipfs/QmSMK1aZQXorcwE5uuxuuew2d8TxEZ6pNB1nte2Ng8fvob\"]},\"src/RangeCommitment.sol\":{\"keccak256\":\"0x66fb6ad1bd00e6b4bb3d3e2a8a2c7c5c224257ff4fc34043d1e8bbd507a22c1a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9067a0704579a69248972a133be63dfe67dccb8797bc0c16358b7bde9188424d\",\"dweb:/ipfs/QmWDW5YoJ6Scfn9HRnpgwoVehvkdFoSi9p9FY86eLYh2X7\"]}},\"version\":1}" + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"contract IRiscZeroVerifier\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_trustedHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_trustedHeight\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidTargetHeight\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrustedHeaderHash\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proofNonce\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"startBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"endBlock\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"dataCommitment\",\"type\":\"bytes32\"}],\"name\":\"DataCommitmentStored\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"}],\"name\":\"HeadUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"trustedBlock\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"targetBlock\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorBitmap\",\"type\":\"uint256\"}],\"name\":\"ValidatorBitmapEquivocation\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageId\",\"type\":\"bytes32\"}],\"name\":\"adminSetImageId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_trustedHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_trustedHeight\",\"type\":\"uint64\"}],\"name\":\"adminSetTrustedState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRiscZeroVerifier\",\"name\":\"_verifier\",\"type\":\"address\"}],\"name\":\"adminSetVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"imageId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestHeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_commitBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_seal\",\"type\":\"bytes\"}],\"name\":\"updateRange\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"contract IRiscZeroVerifier\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_proofNonce\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"dataRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct DataRootTuple\",\"name\":\"_tuple\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"sideNodes\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"key\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"numLeaves\",\"type\":\"uint256\"}],\"internalType\":\"struct BinaryMerkleProof\",\"name\":\"_proof\",\"type\":\"tuple\"}],\"name\":\"verifyAttestation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"DataCommitmentStored(uint256,uint64,uint64,bytes32)\":{\"params\":{\"dataCommitment\":\"The data commitment for the block range.\",\"endBlock\":\"The end block of the block range.\",\"proofNonce\":\"The nonce of the proof.\",\"startBlock\":\"The start block of the block range.\"}},\"ValidatorBitmapEquivocation(uint64,uint64,uint256)\":{\"params\":{\"targetBlock\":\"The target block of the block range.\",\"trustedBlock\":\"The trusted block of the block range.\",\"validatorBitmap\":\"The validator bitmap for the block range.\"}}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"verifyAttestation(uint256,(uint256,bytes32),(bytes32[],uint256,uint256))\":{\"params\":{\"_proof\":\"Binary Merkle tree proof that `tuple` is in the root at `_tupleRootNonce`.\",\"_proofNonce\":\"Nonce of the tuple root to prove against.\",\"_tuple\":\"Data root tuple to prove inclusion of.\"},\"returns\":{\"_0\":\"`true` is proof is valid, `false` otherwise.\"}}},\"stateVariables\":{\"latestBlockHash\":{\"details\":\"always update this in tandem with `latestHeight`\"},\"latestHeight\":{\"details\":\"this value is 64 bits as is the max for heights in Tendermint.\"}},\"title\":\"A starter application using RISC Zero.\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidTargetHeight()\":[{\"notice\":\"Target height for next batch was below the current height.\"}],\"InvalidTrustedHeaderHash()\":[{\"notice\":\"Trusted block hash does not equal the commitment from the new batch.\"}]},\"events\":{\"DataCommitmentStored(uint256,uint64,uint64,bytes32)\":{\"notice\":\"Data commitment stored for the block range [startBlock, endBlock) with proof nonce. NOTE: This event matches existing Blobstream contracts, for ease of integration.\"},\"HeadUpdate(uint64,bytes32)\":{\"notice\":\"Emits event with the new head update. NOTE: Matches existing Blobstream contract, for ease of integration.\"},\"ValidatorBitmapEquivocation(uint64,uint64,uint256)\":{\"notice\":\"Validator bitmap of the intersection of validators that signed off on both the trusted block and the new header. This event is emitted to allow for slashing equivocations. NOTE: This event matches existing Blobstream contracts, for ease of integration.\"}},\"kind\":\"user\",\"methods\":{\"adminSetImageId(bytes32)\":{\"notice\":\"Only the admin can update. Updates the image ID to verify proofs against.\"},\"adminSetTrustedState(bytes32,uint64)\":{\"notice\":\"Only the admin can update. Updates the trusted height and block hash to sync from.\"},\"adminSetVerifier(address)\":{\"notice\":\"Only the admin can update. Updates the verifier contract address.\"},\"constructor\":{\"notice\":\"Initialize the contract, binding it to a specified RISC Zero verifier.\"},\"imageId()\":{\"notice\":\"Image ID of the only zkVM binary to accept verification from. The image ID is similar to the address of a smart contract. It uniquely represents the logic of that guest program, ensuring that only proofs generated from a pre-defined guest program.\"},\"latestBlockHash()\":{\"notice\":\"The latest block hash validated.\"},\"latestHeight()\":{\"notice\":\"The latest height validated.\"},\"proofNonce()\":{\"notice\":\"nonce for mapping block ranges to block merkle roots. This value is used as the key to insert new roots in `merkleRoots`.\"},\"updateRange(bytes,bytes)\":{\"notice\":\"Validate a proof of a new header range, update state.\"},\"verifier()\":{\"notice\":\"RISC Zero verifier contract address.\"},\"verifyAttestation(uint256,(uint256,bytes32),(bytes32[],uint256,uint256))\":{\"notice\":\"Verify a Data Availability attestation. Method of IDAOracle from Blobstream contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Blobstream0.sol\":\"Blobstream0\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":blobstream-contracts/=lib/blobstream-contracts/src/\",\":blobstream/=lib/blobstream-contracts/src/\",\":ds-test/=lib/blobstream-contracts/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/\",\":risc0-ethereum/=lib/risc0-ethereum/\",\":risc0/=lib/risc0-ethereum/contracts/src/\",\":tree/=lib/blobstream-contracts/src/lib/tree/\",\":verifier/=lib/blobstream-contracts/src/lib/verifier/\"]},\"sources\":{\"lib/blobstream-contracts/src/DataRootTuple.sol\":{\"keccak256\":\"0x0526597d14a6d7f258ec48e434a9b60c9a8781764a8f23c878d49926daeb5d1c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://06ee253f8d0f58dbe66c64cb5d2945182ba3bced088167472d8f953cec421916\",\"dweb:/ipfs/QmUF9jjr6bH3pPgjGAZqYhsUn7EevqU7kZn8RBqQ4EoU2w\"]},\"lib/blobstream-contracts/src/IDAOracle.sol\":{\"keccak256\":\"0xc35648b17d3587bc3a627f67a328874db536ee24c11b970c3c57226d69a32eec\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://362610301e6057d10777c84111d4bb43af53af75a488fb8ab8666a775302a3fc\",\"dweb:/ipfs/QmURgSTYhiguV1oCUARaTTWrpFHg5nMEtxhPVcpUDuEKq6\"]},\"lib/blobstream-contracts/src/lib/tree/Constants.sol\":{\"keccak256\":\"0x2050b2be8a739ce250cc5cea1556936c7937915b5d7fde269dd70e8e7eb660c4\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://946ea30d1001048a800f60bb24d2ab7ecf5f92ae2abd212f3f855e37a6840ce7\",\"dweb:/ipfs/QmW2PnhAB5h2eCCM6Vafg8ZUpBttjLTbBhtXjJh3SSrYEN\"]},\"lib/blobstream-contracts/src/lib/tree/Types.sol\":{\"keccak256\":\"0xa47e9e20fef88264acdf1fc6bc0b3bb9f23c7022f5de8d203a1014895a606958\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d480249b6adf8730bffcf26eed5902eb9fd1d56d11f931b35a9e19c6415b3f47\",\"dweb:/ipfs/QmPCrcMmQdNMYG232WxEg2zZRFvXQqdEZgwQNMaDJ2oNab\"]},\"lib/blobstream-contracts/src/lib/tree/Utils.sol\":{\"keccak256\":\"0x9760cb3ab3d4f412949b9be1bbdf5d9e7954cad44a94a4f7fe90fcffb86fe7fa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://06edf92a63d5b2c3459800acc6945071ee069be6df03b70f28440c5c732465aa\",\"dweb:/ipfs/QmU4LnS5ckxXpEBE82y5gfsNxn5gUQPh273nLrmfPP9pjD\"]},\"lib/blobstream-contracts/src/lib/tree/binary/BinaryMerkleProof.sol\":{\"keccak256\":\"0x9fb953284b455b544091f058fdb11ac73928093517333909c0744d9319410688\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://938230a60210345fe7cc661708c4fe0db663a5f5b5306f05fe4023b44f104b6e\",\"dweb:/ipfs/QmUvcJuDmwnbRzXX5qgV4Mckg6ujvMeo46SrTPvgpPhFSF\"]},\"lib/blobstream-contracts/src/lib/tree/binary/BinaryMerkleTree.sol\":{\"keccak256\":\"0x90dc9ac613014c2d3fcebbd23f2b5af67188b7de80b2ef853f20c91a14ce68fd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4dffcfb8911d174787b05d814c423ea368c6526e32d762576fb5109e517a185f\",\"dweb:/ipfs/QmRxYnjwkEANhqXkoNifG2kbGtEymyLRU5h2NyPTZ5wbSE\"]},\"lib/blobstream-contracts/src/lib/tree/binary/TreeHasher.sol\":{\"keccak256\":\"0x2f16501eac14f6e2a61de29d3aa10e3aaf8e0a594fc9cf8dc2d955bb2f6d54e0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://984a2e5d52cfdd38f2c597bddc4a2de8ad1e4dd9c81008376569a29c74fa963e\",\"dweb:/ipfs/QmaXhfHD58Jv4nSw3qw2hGwbDSPKDjFzPNYWm9Y4KWiigm\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0x08b074ae1b12e70ce24d1335086ec5a418934311a6771d9f61fe24d392050e12\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e2fd900a8f8244fc0a49bae1ca1bd5815884f248a2306b8e7dc68011c25803b7\",\"dweb:/ipfs/Qmd4EaujSR74x7EqziRDfqgc6Tv2nzRQDSaxKXcU1ybxbA\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"lib/risc0-ethereum/contracts/src/IRiscZeroVerifier.sol\":{\"keccak256\":\"0x19341f62c8fe3c0945ebffa4f25d49706ded741af98eaacb7ade824c947f61a4\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://5d443c7187fd565e25acdfd3df63f14421d06dda0839470cb475546f7c9908c0\",\"dweb:/ipfs/QmeaHPjKmGZBC15iiYKsDCY1k2UY3iYZiNB6Pdc8ow6aVX\"]},\"lib/risc0-ethereum/contracts/src/Util.sol\":{\"keccak256\":\"0x230a9a58bb2b0c68d4921ecc3672783f941890a2fa3a238dbe5188cfb7658b82\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://586cb5296c564761609ca8aaae5b1fbbdb19ab1e174f7197f602572d9e82b70c\",\"dweb:/ipfs/QmWxDmucSfg3Wgdk1rVcheDHwkziTsXWvKpKSCnxtpQBqg\"]},\"src/Blobstream0.sol\":{\"keccak256\":\"0x114437e96530e857a4f40ed866c0f441b5ddbcd4f7d7cc38ee9d615583d23b0d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://22583e0c77c103ce5cd398ab85d7c8e2d59507be08f8e8e9fad4cca8985f899b\",\"dweb:/ipfs/QmTRuKu5mjkjue3yDA5HSv1c29FwspJ2koEayfcacqFAph\"]},\"src/ImageID.sol\":{\"keccak256\":\"0xcfa9ac7522986705d4f558c9e6b0c49bdcbbf9f0357ada8261819b70cb4fe7cc\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://88c7138a251da89fd86ae60b840ad2fee8c2d5c4d8918b5145e72fcef04bca0a\",\"dweb:/ipfs/QmW6YKHjUk6jzrGGXxSn5oJNF3nGMDeQXZqyUNSa2zfxzZ\"]},\"src/RangeCommitment.sol\":{\"keccak256\":\"0x66fb6ad1bd00e6b4bb3d3e2a8a2c7c5c224257ff4fc34043d1e8bbd507a22c1a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9067a0704579a69248972a133be63dfe67dccb8797bc0c16358b7bde9188424d\",\"dweb:/ipfs/QmWDW5YoJ6Scfn9HRnpgwoVehvkdFoSi9p9FY86eLYh2X7\"]}},\"version\":1}" } \ No newline at end of file diff --git a/contracts/src/ImageID.sol b/contracts/src/ImageID.sol index 958447c..66fc65f 100644 --- a/contracts/src/ImageID.sol +++ b/contracts/src/ImageID.sol @@ -20,5 +20,5 @@ pragma solidity ^0.8.20; library ImageID { bytes32 public constant LIGHT_CLIENT_GUEST_ID = - bytes32(0x7c4d4662f341e9147ab7b60c4dedce832d331f65df62ee43b09abdff5d8283e3); + bytes32(0xed3e428e1e19fc966ba2ca3e9f705c53af4af792740a70463da2073e217996b6); } diff --git a/core/Cargo.toml b/core/Cargo.toml index a936ec6..6c7abeb 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -10,7 +10,7 @@ anyhow = "1.0" blobstream0-primitives = { path = "../primitives" } light-client-guest = { path = "../light-client-guest" } risc0-ethereum-contracts = { git = "https://github.com/risc0/risc0-ethereum", tag = "v1.0.0" } -risc0-zkvm = { version = "=1.0.5" } +risc0-zkvm = { version = "=1.1.1" } serde_bytes = "0.11" tendermint = { workspace = true } tendermint-light-client-verifier = { workspace = true } diff --git a/light-client-guest/Cargo.toml b/light-client-guest/Cargo.toml index 063e98b..72fd2e1 100644 --- a/light-client-guest/Cargo.toml +++ b/light-client-guest/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [build-dependencies] -risc0-build = { version = "=1.0.5" } +risc0-build = { version = "=1.1.1" } risc0-build-ethereum = { git = "https://github.com/risc0/risc0-ethereum", tag = "v1.0.0" } # Currently just used to format built artifact diff --git a/light-client-guest/guest/Cargo.lock b/light-client-guest/guest/Cargo.lock index 8582594..f53d954 100644 --- a/light-client-guest/guest/Cargo.lock +++ b/light-client-guest/guest/Cargo.lock @@ -778,6 +778,12 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "bitflags" version = "2.6.0" @@ -821,6 +827,12 @@ dependencies = [ "thiserror", ] +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.10.4" @@ -842,6 +854,30 @@ dependencies = [ "zeroize", ] +[[package]] +name = "borsh" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.75", + "syn_derive", +] + [[package]] name = "byte-slice-cast" version = "1.2.2" @@ -912,6 +948,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "const-hex" version = "1.12.0" @@ -931,6 +973,33 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[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.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + [[package]] name = "cpufeatures" version = "0.2.13" @@ -1254,6 +1323,33 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.75", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -1621,12 +1717,36 @@ dependencies = [ "hashbrown 0.14.5", ] +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "metal" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +dependencies = [ + "bitflags 2.6.0", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + [[package]] name = "miniz_oxide" version = "0.7.4" @@ -1701,6 +1821,15 @@ dependencies = [ "syn 2.0.75", ] +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + [[package]] name = "object" version = "0.36.3" @@ -1861,6 +1990,29 @@ dependencies = [ "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", + "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-macro-error-attr2" version = "2.0.0" @@ -1900,7 +2052,7 @@ checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" dependencies = [ "bit-set", "bit-vec", - "bitflags", + "bitflags 2.6.0", "lazy_static", "num-traits", "rand", @@ -2033,7 +2185,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ - "bitflags", + "bitflags 2.6.0", ] [[package]] @@ -2054,11 +2206,12 @@ dependencies = [ [[package]] name = "risc0-binfmt" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4003dd96f2e323dfef431b21a2aaddee1c6791fc32dea8eb2bff1b438bf5caf6" +checksum = "c3b6d127eccb95114a829312b554bf85d02315da251f268996a872d7dc71d455" dependencies = [ "anyhow", + "borsh", "elf", "risc0-zkp", "risc0-zkvm-platform", @@ -2068,13 +2221,14 @@ dependencies = [ [[package]] name = "risc0-circuit-recursion" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c4154d2fbbde5af02a1c35c90340c2749044f5d5cd7834251b616ffa28d467" +checksum = "fc5faca1aeb1e635714074e22f16f53912e34c190bde831e8aa01f2d824f7702" dependencies = [ "anyhow", "bytemuck", "hex", + "metal", "risc0-core", "risc0-zkp", "tracing", @@ -2082,11 +2236,12 @@ dependencies = [ [[package]] name = "risc0-circuit-rv32im" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce836e7c553e63cbd807d15925ba5dd641a80cdee7d123619eaa60bb555ab014" +checksum = "5559011c6a1e4f8671202cdc0adb3702907c240f847d4b646182a1ce9a95d335" dependencies = [ "anyhow", + "metal", "risc0-binfmt", "risc0-core", "risc0-zkp", @@ -2097,9 +2252,9 @@ dependencies = [ [[package]] name = "risc0-core" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "047cc26c68c092d664ded7488dcac0462d9e31190e1598a7820fe4246d313583" +checksum = "5dda94253849f0e31ce944211f5081a8d33133e79343e0b1defc0faa7a7ab987" dependencies = [ "bytemuck", "rand_core", @@ -2107,9 +2262,9 @@ dependencies = [ [[package]] name = "risc0-groth16" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3309c7acaf46ed3d21df3841185afd8ea4aab9fb63dbd1974694dfdae276970" +checksum = "3ef58e37beb097da5d313c220fd291c56308faeb7c8a6ddceee82f56f52b5841" dependencies = [ "anyhow", "ark-bn254", @@ -2127,17 +2282,19 @@ dependencies = [ [[package]] name = "risc0-zkp" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae55272541351a2391e5051519b33bfdf41f5648216827cc2cb94a49b6937380" +checksum = "f9e85591582355ecf9459c9bf2454e6c9095189ab47f17ed94b3ed47b138ec6d" dependencies = [ "anyhow", "blake2", + "borsh", "bytemuck", "cfg-if", "digest 0.10.7", "hex", "hex-literal", + "metal", "paste", "rand_core", "risc0-core", @@ -2149,13 +2306,13 @@ dependencies = [ [[package]] name = "risc0-zkvm" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f234694d9dabc1172cf418b7a3ba65447caad15b994f450e9941d2a7cc89e045" +checksum = "b3f032d37abdcf6532d2a25aac32df976921f4a09d7acc72f70ce7d7c0bb4695" dependencies = [ "anyhow", + "borsh", "bytemuck", - "cfg-if", "getrandom", "hex", "risc0-binfmt", @@ -2169,18 +2326,20 @@ dependencies = [ "semver 1.0.23", "serde", "sha2", + "stability", "tracing", ] [[package]] name = "risc0-zkvm-platform" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16735dab52ae8bf0dc30df78fce901b674f469dfd7b5f5dfddd54caea22f14d5" +checksum = "f2284fecbc54d1274ea689387166c811e1d5dd8f51a407df322659eddec9c2fa" dependencies = [ "bytemuck", "getrandom", "libm", + "stability", ] [[package]] @@ -2269,7 +2428,7 @@ version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", @@ -2457,6 +2616,16 @@ dependencies = [ "der", ] +[[package]] +name = "stability" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac" +dependencies = [ + "quote", + "syn 2.0.75", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -2534,6 +2703,18 @@ dependencies = [ "syn 2.0.75", ] +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.75", +] + [[package]] name = "tap" version = "1.0.1" diff --git a/light-client-guest/guest/Cargo.toml b/light-client-guest/guest/Cargo.toml index 723888a..6ffdc71 100644 --- a/light-client-guest/guest/Cargo.toml +++ b/light-client-guest/guest/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" [workspace] [dependencies] -risc0-zkvm = { version = "=1.0.5", default-features = false, features = ['std'] } +risc0-zkvm = { version = "=1.1.1", default-features = false, features = ['std'] } blobstream0-primitives = { path = "../../primitives" } alloy-sol-types = "0.8.2" # TODO this is pulling in ed25519 crate unaccelerated, look into if actually used. @@ -20,4 +20,4 @@ tendermint-light-client-verifier = { version = "0.39.1", default-features = fals sha2 = { git = "https://github.com/risc0/RustCrypto-hashes", tag = "sha2-v0.10.8-risczero.0" } # TODO switch to tag when finalized ed25519-consensus = { git = "https://github.com/risc0/ed25519-consensus", rev = "8a6d26d1fcd377f9322ba83d3732d04c157e4778" } -crypto-bigint = { git = "https://github.com/risc0/RustCrypto-crypto-bigint", tag = "v0.5.5-risczero.0" } \ No newline at end of file +crypto-bigint = { git = "https://github.com/risc0/RustCrypto-crypto-bigint", tag = "v0.5.5-risczero.0" }