diff --git a/Cargo.lock b/Cargo.lock index 53d3f37ab4b9..123e34b217c1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -122,8 +122,7 @@ dependencies = [ [[package]] name = "alloy-consensus" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a101d4d016f47f13890a74290fdd17b05dd175191d9337bc600791fb96e4dea8" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-eips", "alloy-primitives 0.8.14", @@ -142,8 +141,7 @@ dependencies = [ [[package]] name = "alloy-consensus-any" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa60357dda9a3d0f738f18844bd6d0f4a5924cc5cf00bfad2ff1369897966123" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-consensus", "alloy-eips", @@ -223,8 +221,7 @@ dependencies = [ [[package]] name = "alloy-eips" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6755b093afef5925f25079dd5a7c8d096398b804ba60cb5275397b06b31689" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-eip2930", "alloy-eip7702", @@ -244,8 +241,7 @@ dependencies = [ [[package]] name = "alloy-genesis" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeec8e6eab6e52b7c9f918748c9b811e87dbef7312a2e3a2ca1729a92966a6af" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-primitives 0.8.14", "alloy-serde 0.7.3", @@ -268,8 +264,7 @@ dependencies = [ [[package]] name = "alloy-json-rpc" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa077efe0b834bcd89ff4ba547f48fb081e4fdc3673dd7da1b295a2cf2bb7b7" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-primitives 0.8.14", "alloy-sol-types", @@ -282,8 +277,7 @@ dependencies = [ [[package]] name = "alloy-network" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "209a1882a08e21aca4aac6e2a674dc6fcf614058ef8cb02947d63782b1899552" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -307,8 +301,7 @@ dependencies = [ [[package]] name = "alloy-network-primitives" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20219d1ad261da7a6331c16367214ee7ded41d001fabbbd656fbf71898b2773" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-consensus", "alloy-eips", @@ -320,8 +313,7 @@ dependencies = [ [[package]] name = "alloy-node-bindings" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bffcf33dd319f21cd6f066d81cbdef0326d4bdaaf7cfe91110bc090707858e9f" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-genesis", "alloy-primitives 0.8.14", @@ -391,8 +383,7 @@ dependencies = [ [[package]] name = "alloy-provider" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eefa6f4c798ad01f9b4202d02cea75f5ec11fa180502f4701e2b47965a8c0bb" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-chains", "alloy-consensus", @@ -432,8 +423,7 @@ dependencies = [ [[package]] name = "alloy-pubsub" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac9a7210e0812b1d814118f426f57eb7fc260a419224dd1c76d169879c06907" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-json-rpc", "alloy-primitives 0.8.14", @@ -473,8 +463,7 @@ dependencies = [ [[package]] name = "alloy-rpc-client" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed30bf1041e84cabc5900f52978ca345dd9969f2194a945e6fdec25b0620705c" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-json-rpc", "alloy-primitives 0.8.14", @@ -498,8 +487,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab686b0fa475d2a4f5916c5f07797734a691ec58e44f0f55d4746ea39cbcefb" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-primitives 0.8.14", "alloy-rpc-types-engine", @@ -511,8 +499,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types-admin" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f0874a976ccdf83a178ad93b64bec5b8c91a47428d714d544ca70258acfa07b" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-genesis", "alloy-primitives 0.8.14", @@ -523,8 +510,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types-anvil" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d33bc190844626c08e21897736dbd7956ab323c09e6f141b118d1c8b7aff689e" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-primitives 0.8.14", "alloy-rpc-types-eth", @@ -535,8 +521,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200661999b6e235d9840be5d60a6e8ae2f0af9eb2a256dd378786744660e36ec" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", @@ -546,8 +531,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types-beacon" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc37861dc8cbf5da35d346139fbe6e03ee7823cc21138a2c4a590d3b0b4b24be" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-eips", "alloy-primitives 0.8.14", @@ -561,8 +545,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types-debug" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0294b553785eb3fa7fff2e8aec45e82817258e7e6c9365c034a90cb6baeebc9" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-primitives 0.8.14", "serde", @@ -571,8 +554,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types-engine" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d297268357e3eae834ddd6888b15f764cbc0f4b3be9265f5f6ec239013f3d68" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-consensus", "alloy-eips", @@ -592,8 +574,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0600b8b5e2dc0cab12cbf91b5a885c35871789fb7b3a57b434bd4fced5b7a8b" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -614,8 +595,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types-mev" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093d618d5a42808e7ae26062f415a1e816fc27d3d32662c6ed52d0871b154894" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-eips", "alloy-primitives 0.8.14", @@ -628,8 +608,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types-trace" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e073ab0e67429c60be281e181731132fd07d82e091c10c29ace6935101034bb" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-primitives 0.8.14", "alloy-rpc-types-eth", @@ -642,8 +621,7 @@ dependencies = [ [[package]] name = "alloy-rpc-types-txpool" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7435f6bfb93912f16d64bb61f4278fa698469e054784f477337ef87ec0b2527b" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-primitives 0.8.14", "alloy-rpc-types-eth", @@ -665,8 +643,7 @@ dependencies = [ [[package]] name = "alloy-serde" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afa753a97002a33b2ccb707d9f15f31c81b8c1b786c95b73cc62bb1d1fd0c3f" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-primitives 0.8.14", "arbitrary", @@ -677,8 +654,7 @@ dependencies = [ [[package]] name = "alloy-signer" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2cbff01a673936c2efd7e00d4c0e9a4dbbd6d600e2ce298078d33efbb19cd7" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-primitives 0.8.14", "async-trait", @@ -691,8 +667,7 @@ dependencies = [ [[package]] name = "alloy-signer-local" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6d988cb6cd7d2f428a74476515b1a6e901e08c796767f9f93311ab74005c8b" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-consensus", "alloy-network", @@ -779,8 +754,7 @@ dependencies = [ [[package]] name = "alloy-transport" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69d36982b9e46075ae6b792b0f84208c6c2c15ad49f6c500304616ef67b70e0" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-json-rpc", "base64 0.22.1", @@ -799,8 +773,7 @@ dependencies = [ [[package]] name = "alloy-transport-http" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e02ffd5d93ffc51d72786e607c97de3b60736ca3e636ead0ec1f7dce68ea3fd" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -814,8 +787,7 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6f8b87cb84bae6d81ae6604b37741c8116f84f9784a0ecc6038c302e679d23" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-json-rpc", "alloy-pubsub", @@ -833,8 +805,7 @@ dependencies = [ [[package]] name = "alloy-transport-ws" version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c085c4e1e7680b723ffc558f61a22c061ed3f70eb3436f93f3936779c59cec1" +source = "git+https://github.com/taikoxyz/alloy?branch=v0.7.3-taiko#e6f7ef1cc4a306d4798cde053d3eb99ee1821897" dependencies = [ "alloy-pubsub", "alloy-transport", @@ -9288,7 +9259,6 @@ dependencies = [ "jsonrpsee-types", "reth-primitives", "reth-primitives-traits", - "reth-taiko-engine-types", "serde", "serde_json", ] @@ -9538,6 +9508,7 @@ dependencies = [ "alloy-rpc-types-engine", "alloy-serde 0.1.4", "reth-taiko-primitives", + "secp256k1", "serde", "serde_json", "serde_with", @@ -9581,6 +9552,7 @@ dependencies = [ name = "reth-taiko-node" version = "1.1.4" dependencies = [ + "alloy-consensus", "alloy-primitives 0.8.14", "alloy-rpc-types-engine", "eyre", @@ -9590,7 +9562,6 @@ dependencies = [ "reth-network", "reth-node-builder", "reth-payload-builder", - "reth-payload-primitives", "reth-primitives", "reth-provider", "reth-rpc", @@ -9641,10 +9612,12 @@ dependencies = [ name = "reth-taiko-payload-validator" version = "1.1.4" dependencies = [ + "alloy-consensus", + "alloy-primitives 0.8.14", "alloy-rpc-types-engine", "reth-chainspec", - "reth-payload-validator", "reth-primitives", + "reth-rpc-types-compat", "reth-taiko-engine-types", ] diff --git a/Cargo.toml b/Cargo.toml index 8fb7a999f6b5..06a36e301bfe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -646,41 +646,40 @@ tikv-jemalloc-ctl = "0.6" tikv-jemallocator = "0.6" tracy-client = "0.17.3" -# [patch.crates-io] -# alloy-consensus = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-eips = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-genesis = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-json-rpc = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-network = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-network-primitives = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-node-bindings = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-provider = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-pubsub = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-rpc-client = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-rpc-types = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-rpc-types-admin = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-rpc-types-anvil = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-rpc-types-beacon = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-rpc-types-debug = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-rpc-types-engine = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-rpc-types-eth = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-rpc-types-mev = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-rpc-types-trace = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-rpc-types-txpool = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-serde = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-signer = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-signer-local = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-transport = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-transport-http = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-transport-ipc = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } -# alloy-transport-ws = { git = "https://github.com/alloy-rs/alloy", rev = "5492e40" } +[patch.crates-io] +alloy-consensus = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-eips = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-genesis = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-json-rpc = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-network = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-network-primitives = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-node-bindings = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-provider = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-pubsub = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-rpc-client = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-rpc-types = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-rpc-types-admin = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-rpc-types-anvil = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-rpc-types-beacon = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-rpc-types-debug = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-rpc-types-engine = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-rpc-types-eth = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-rpc-types-mev = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-rpc-types-trace = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-rpc-types-txpool = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-serde = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-signer = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-signer-local = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-transport = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-transport-http = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-transport-ipc = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } +alloy-transport-ws = { git = "https://github.com/taikoxyz/alloy", branch = "v0.7.3-taiko" } # op-alloy-consensus = { git = "https://github.com/alloy-rs/op-alloy", rev = "debfc29" } # op-alloy-network = { git = "https://github.com/alloy-rs/op-alloy", rev = "debfc29" } # op-alloy-rpc-types = { git = "https://github.com/alloy-rs/op-alloy", rev = "debfc29" } # op-alloy-rpc-types-engine = { git = "https://github.com/alloy-rs/op-alloy", rev = "debfc29" } -[patch.crates-io] revm = { git = "https://github.com/taikoxyz/revm.git", branch = "v50-taiko" } revm-interpreter = { git = "https://github.com/taikoxyz/revm.git", branch = "v50-taiko" } revm-precompile = { git = "https://github.com/taikoxyz/revm.git", branch = "v50-taiko" } diff --git a/DockerfileTaiko.cross b/DockerfileTaiko.cross new file mode 100644 index 000000000000..7f6e0a2c74db --- /dev/null +++ b/DockerfileTaiko.cross @@ -0,0 +1,15 @@ +# This image is meant to enable cross-architecture builds. +# It assumes the reth binary has already been compiled for `$TARGETPLATFORM` and is +# locatable in `./dist/bin/$TARGETARCH` +FROM --platform=$TARGETPLATFORM ubuntu:22.04 + +LABEL org.opencontainers.image.source=https://github.com/taikoxyz/taiko-reth +LABEL org.opencontainers.image.licenses="MIT OR Apache-2.0" + +# Filled by docker buildx +ARG TARGETARCH + +COPY ./dist/bin/$TARGETARCH/taiko-reth /usr/local/bin/taiko-reth + +EXPOSE 30303 30303/udp 9001 8545 8546 +ENTRYPOINT ["/usr/local/bin/taiko-reth"] diff --git a/Makefile b/Makefile index acc1a90b2f3e..60cd4f2e1dfa 100644 --- a/Makefile +++ b/Makefile @@ -32,6 +32,7 @@ EF_TESTS_DIR := ./testing/ef-tests/ethereum-tests # The docker image name DOCKER_IMAGE_NAME ?= ghcr.io/paradigmxyz/reth +TAIKO_DOCKER_IMAGE_NAME ?= us-docker.pkg.dev/evmchain/images/taiko-reth # Features in reth/op-reth binary crate other than "ethereum" and "optimism" BIN_OTHER_FEATURES := asm-keccak jemalloc jemalloc-prof min-error-logs min-warn-logs min-info-logs min-debug-logs min-trace-logs @@ -383,14 +384,36 @@ define taiko_docker_build_push mkdir -p $(BIN_DIR)/arm64 cp $(CARGO_TARGET_DIR)/aarch64-unknown-linux-gnu/$(PROFILE)/taiko-reth $(BIN_DIR)/arm64/taiko-reth - docker buildx build --file ./DockerfileOp.cross . \ + docker buildx build --file ./DockerfileTaiko.cross . \ --platform linux/amd64,linux/arm64 \ - --tag $(DOCKER_IMAGE_NAME):$(1) \ - --tag $(DOCKER_IMAGE_NAME):$(2) \ + --tag $(TAIKO_DOCKER_IMAGE_NAME):$(1) \ + --tag $(TAIKO_DOCKER_IMAGE_NAME):$(2) \ --provenance=false \ --push endef +# Note: Build docker image for testing +.PHONY: taiko-docker-build-latest +taiko-docker-build-latest: ## Build and push a cross-arch Docker image tagged with the latest git tag and `latest`. + $(call taiko_docker_build,$(GIT_TAG),latest) + +# Create a cross-arch Docker image with the given tags +define taiko_docker_build + $(MAKE) taiko-build-x86_64-unknown-linux-gnu + mkdir -p $(BIN_DIR)/amd64 + cp $(CARGO_TARGET_DIR)/x86_64-unknown-linux-gnu/$(PROFILE)/taiko-reth $(BIN_DIR)/amd64/taiko-reth + + # $(MAKE) taiko-build-aarch64-unknown-linux-gnu + # mkdir -p $(BIN_DIR)/arm64 + # cp $(CARGO_TARGET_DIR)/aarch64-unknown-linux-gnu/$(PROFILE)/taiko-reth $(BIN_DIR)/arm64/taiko-reth + + docker buildx build --file ./DockerfileTaiko.cross . \ + --platform linux/amd64,linux/arm64 \ + --tag $(TAIKO_DOCKER_IMAGE_NAME):$(1) \ + --tag $(TAIKO_DOCKER_IMAGE_NAME):$(2) \ + --provenance=false +endef + ##@ Other .PHONY: clean diff --git a/crates/blockchain-tree/src/blockchain_tree.rs b/crates/blockchain-tree/src/blockchain_tree.rs index d5c45f3522e6..7702194bb9a9 100644 --- a/crates/blockchain-tree/src/blockchain_tree.rs +++ b/crates/blockchain-tree/src/blockchain_tree.rs @@ -192,7 +192,10 @@ where if self.externals.provider_factory.provider()?.block_number(block.hash)?.is_some() { return Ok(Some(BlockStatus::Valid(BlockAttachment::Canonical))); } - return Ok(None); + return Err(BlockchainTreeError::PendingBlockIsFinalized { + last_finalized: last_finalized_block, + } + .into()); } // is block inside chain diff --git a/crates/consensus/beacon/src/engine/handle.rs b/crates/consensus/beacon/src/engine/handle.rs index 06bf1e389f1c..88f05bc5c806 100644 --- a/crates/consensus/beacon/src/engine/handle.rs +++ b/crates/consensus/beacon/src/engine/handle.rs @@ -72,24 +72,7 @@ where version: EngineApiMessageVersion, ) -> Result { Ok(self - .send_fork_choice_updated(state, payload_attrs, version, false) - .map_err(|_| BeaconForkChoiceUpdateError::EngineUnavailable) - .await?? - .await?) - } - - /// Sends a forkchoice update message to the beacon consensus engine and waits for a response. - /// - /// See also - /// For debug purposes. - pub async fn debug_fork_choice_updated( - &self, - state: ForkchoiceState, - payload_attrs: Option, - version: EngineApiMessageVersion, - ) -> Result { - Ok(self - .send_fork_choice_updated(state, payload_attrs, version, true) + .send_fork_choice_updated(state, payload_attrs, version) .map_err(|_| BeaconForkChoiceUpdateError::EngineUnavailable) .await?? .await?) @@ -102,7 +85,6 @@ where state: ForkchoiceState, payload_attrs: Option, version: EngineApiMessageVersion, - debug: bool, ) -> oneshot::Receiver> { let (tx, rx) = oneshot::channel(); let _ = self.to_engine.send(BeaconEngineMessage::ForkchoiceUpdated { @@ -110,7 +92,6 @@ where payload_attrs, tx, version, - debug, }); rx } diff --git a/crates/consensus/beacon/src/engine/mod.rs b/crates/consensus/beacon/src/engine/mod.rs index b2b6689927ff..889ca9cd9771 100644 --- a/crates/consensus/beacon/src/engine/mod.rs +++ b/crates/consensus/beacon/src/engine/mod.rs @@ -110,7 +110,6 @@ type PendingForkchoiceUpdate = ( Option, oneshot::Sender>, EngineApiMessageVersion, - bool, ); /// The beacon consensus engine is the driver that switches between historical and live sync. @@ -407,7 +406,6 @@ where make_canonical_result: Result, elapsed: Duration, version: EngineApiMessageVersion, - debug: bool, ) -> Result { match make_canonical_result { Ok(outcome) => { @@ -441,11 +439,6 @@ where // the CL requested to build a new payload on top of this new VALID head let head = outcome.into_header().unseal(); self.process_payload_attributes(attrs, head, state, version) - } else if debug && should_update_head { - OnForkChoiceUpdated::valid(self.on_failed_canonical_forkchoice_update( - &state, - CanonicalError::OptimisticTargetRevert(outcome.header().number), - )?) } else { OnForkChoiceUpdated::valid(PayloadStatus::new( PayloadStatusEnum::Valid, @@ -531,7 +524,6 @@ where attrs: Option<::PayloadAttributes>, tx: oneshot::Sender>, version: EngineApiMessageVersion, - debug: bool, ) { self.metrics.forkchoice_updated_messages.increment(1); self.blockchain.on_forkchoice_update_received(&state); @@ -548,14 +540,14 @@ where // running, since it requires exclusive access to the // database let replaced_pending = - self.pending_forkchoice_update.replace((state, attrs, tx, version, debug)); + self.pending_forkchoice_update.replace((state, attrs, tx, version)); warn!( target: "consensus::engine", hook = %hook.name(), head_block_hash = ?state.head_block_hash, safe_block_hash = ?state.safe_block_hash, finalized_block_hash = ?state.finalized_block_hash, - replaced_pending = ?replaced_pending.map(|(state, _, _, _, _)| state), + replaced_pending = ?replaced_pending.map(|(state, _, _, _)| state), "Hook is in progress, delaying forkchoice update. \ This may affect the performance of your node as a validator." ); @@ -566,7 +558,6 @@ where attrs, tx, version, - debug, }, ); } @@ -1202,7 +1193,7 @@ where // client software MUST respond with -38003: `Invalid payload attributes` and MUST NOT // begin a payload build process. In such an event, the forkchoiceState update MUST NOT // be rolled back. - if attrs.timestamp() <= head.timestamp { + if attrs.timestamp() < head.timestamp { return OnForkChoiceUpdated::invalid_payload_attributes() } @@ -1636,18 +1627,12 @@ where action: BlockchainTreeAction, ) -> RethResult { match action { - BlockchainTreeAction::MakeForkchoiceHeadCanonical { - state, - attrs, - tx, - version, - debug, - } => { + BlockchainTreeAction::MakeForkchoiceHeadCanonical { state, attrs, tx, version } => { let start = Instant::now(); let result = self.blockchain.make_canonical(state.head_block_hash); let elapsed = self.record_make_canonical_latency(start, &result); match self.on_forkchoice_updated_make_canonical_result( - state, attrs, result, elapsed, version, debug, + state, attrs, result, elapsed, version, ) { Ok(on_updated) => { trace!(target: "consensus::engine", status = ?on_updated, ?state, "Returning forkchoice status"); @@ -1883,8 +1868,7 @@ where // If the db write hook is no longer active and we have a pending forkchoice update, // process it first. if this.hooks.active_db_write_hook().is_none() { - if let Some((state, attrs, tx, version, debug)) = - this.pending_forkchoice_update.take() + if let Some((state, attrs, tx, version)) = this.pending_forkchoice_update.take() { this.set_blockchain_tree_action( BlockchainTreeAction::MakeForkchoiceHeadCanonical { @@ -1892,7 +1876,6 @@ where attrs, tx, version, - debug, }, ); continue @@ -1911,9 +1894,8 @@ where payload_attrs, tx, version, - debug, } => { - this.on_forkchoice_updated(state, payload_attrs, tx, version, debug); + this.on_forkchoice_updated(state, payload_attrs, tx, version); } BeaconEngineMessage::NewPayload { payload, sidecar, tx } => { match this.on_new_payload(payload, sidecar) { @@ -1987,7 +1969,6 @@ enum BlockchainTreeAction { state: ForkchoiceState, attrs: Option, version: EngineApiMessageVersion, - debug: bool, tx: oneshot::Sender>, }, InsertNewPayload { diff --git a/crates/engine/local/src/miner.rs b/crates/engine/local/src/miner.rs index 1408682c08d0..0dab324bc85a 100644 --- a/crates/engine/local/src/miner.rs +++ b/crates/engine/local/src/miner.rs @@ -167,7 +167,6 @@ where payload_attrs: None, tx, version: EngineApiMessageVersion::default(), - debug: false, })?; let res = rx.await??; @@ -195,7 +194,6 @@ where payload_attrs: Some(self.payload_attributes_builder.build(timestamp)), tx, version: EngineApiMessageVersion::default(), - debug: false, })?; let res = rx.await??.await?; diff --git a/crates/engine/local/src/service.rs b/crates/engine/local/src/service.rs index 57fdc0c254ea..0e75f01a2469 100644 --- a/crates/engine/local/src/service.rs +++ b/crates/engine/local/src/service.rs @@ -84,9 +84,13 @@ where V: EngineValidator>, { let chain_spec = provider.chain_spec(); - let engine_kind = + let mut engine_kind = if chain_spec.is_optimism() { EngineApiKind::OpStack } else { EngineApiKind::Ethereum }; + if chain_spec.is_taiko() { + engine_kind = EngineApiKind::Taiko + } + let persistence_handle = PersistenceHandle::::spawn_service(provider, pruner, sync_metrics_tx); let canonical_in_memory_state = blockchain_db.canonical_in_memory_state(); diff --git a/crates/engine/primitives/src/message.rs b/crates/engine/primitives/src/message.rs index d20ed38e3bab..c0cb7862313e 100644 --- a/crates/engine/primitives/src/message.rs +++ b/crates/engine/primitives/src/message.rs @@ -160,8 +160,6 @@ pub enum BeaconEngineMessage { version: EngineApiMessageVersion, /// The sender for returning forkchoice updated result. tx: oneshot::Sender>, - /// Debug mode flag. - debug: bool, }, /// Message with exchanged transition configuration. TransitionConfigurationExchanged, diff --git a/crates/engine/service/src/service.rs b/crates/engine/service/src/service.rs index 5dfe4184257b..36f5df06c92b 100644 --- a/crates/engine/service/src/service.rs +++ b/crates/engine/service/src/service.rs @@ -88,9 +88,13 @@ where where V: EngineValidator>, { - let engine_kind = + let mut engine_kind = if chain_spec.is_optimism() { EngineApiKind::OpStack } else { EngineApiKind::Ethereum }; + if chain_spec.is_taiko() { + engine_kind = EngineApiKind::Taiko + } + let downloader = BasicBlockDownloader::new(client, consensus.clone().as_consensus()); let persistence_handle = diff --git a/crates/engine/tree/src/engine.rs b/crates/engine/tree/src/engine.rs index 9fa0a8c1d214..97998795f014 100644 --- a/crates/engine/tree/src/engine.rs +++ b/crates/engine/tree/src/engine.rs @@ -226,6 +226,8 @@ pub enum EngineApiKind { Ethereum, /// The chain contains Optimism configuration. OpStack, + /// The chain contains Taiko configuration. + Taiko, } impl EngineApiKind { @@ -238,6 +240,11 @@ impl EngineApiKind { pub const fn is_opstack(&self) -> bool { matches!(self, Self::OpStack) } + + /// Returns true if this is the taiko variant + pub const fn is_taiko(&self) -> bool { + matches!(self, Self::Taiko) + } } /// The request variants that the engine API handler can receive. diff --git a/crates/engine/tree/src/tree/mod.rs b/crates/engine/tree/src/tree/mod.rs index 4458a242123f..fa75e1b2899d 100644 --- a/crates/engine/tree/src/tree/mod.rs +++ b/crates/engine/tree/src/tree/mod.rs @@ -1072,7 +1072,7 @@ where // For OpStack the proposers are allowed to reorg their own chain at will, so we need to // always trigger a new payload job if requested. - if self.engine_kind.is_opstack() { + if self.engine_kind.is_opstack() || self.engine_kind.is_taiko() { if let Some(attr) = attrs { debug!(target: "engine::tree", head = canonical_header.number(), "handling payload attributes for canonical head"); let updated = @@ -1243,7 +1243,6 @@ where payload_attrs, tx, version, - debug: _debug, } => { let mut output = self.on_forkchoice_updated(state, payload_attrs, version); diff --git a/crates/engine/util/src/engine_store.rs b/crates/engine/util/src/engine_store.rs index 25b29583b083..58726cf04617 100644 --- a/crates/engine/util/src/engine_store.rs +++ b/crates/engine/util/src/engine_store.rs @@ -69,7 +69,6 @@ impl EngineMessageStore { payload_attrs, tx: _tx, version: _version, - debug: _debug, } => { let filename = format!("{}-fcu-{}.json", timestamp, state.head_block_hash); fs::write( diff --git a/crates/engine/util/src/reorg.rs b/crates/engine/util/src/reorg.rs index 52ecdec5f783..bc196c76e489 100644 --- a/crates/engine/util/src/reorg.rs +++ b/crates/engine/util/src/reorg.rs @@ -215,7 +215,6 @@ where payload_attrs: None, tx: reorg_fcu_tx, version: EngineApiMessageVersion::default(), - debug: false, }, ]); *this.state = EngineReorgState::Reorg { queue }; @@ -227,7 +226,6 @@ where payload_attrs, tx, version, - debug: false, }), _, ) => { @@ -241,7 +239,6 @@ where payload_attrs, tx, version, - debug: false, }) } (item, _) => item, diff --git a/crates/engine/util/src/skip_fcu.rs b/crates/engine/util/src/skip_fcu.rs index 7d7ec550d50f..daa39ad572d9 100644 --- a/crates/engine/util/src/skip_fcu.rs +++ b/crates/engine/util/src/skip_fcu.rs @@ -49,7 +49,6 @@ where payload_attrs, tx, version, - debug, }) => { if this.skipped < this.threshold { *this.skipped += 1; @@ -63,7 +62,6 @@ where payload_attrs, tx, version, - debug, }) } next => next, diff --git a/crates/evm/execution-types/src/execute.rs b/crates/evm/execution-types/src/execute.rs index 98f728306690..2894d4b6e2f7 100644 --- a/crates/evm/execution-types/src/execute.rs +++ b/crates/evm/execution-types/src/execute.rs @@ -49,9 +49,19 @@ pub struct BlockExecutionOutput { impl BlockExecutionOutput { /// Remote the skipped transactions from the block. pub fn apply_skip(&self, block: &mut BlockWithSenders) { - for i in &self.skipped_list { - block.senders.remove(*i); - block.body.transactions.remove(*i); - } + retain_with_index(&mut block.senders, |i, _| !self.skipped_list.contains(&i)); + retain_with_index(&mut block.body.transactions, |i, _| !self.skipped_list.contains(&i)); } } + +fn retain_with_index(slice: &mut Vec, mut f: F) +where + F: FnMut(usize, &T) -> bool, +{ + let mut i = 0; + slice.retain(|x| { + let retain = f(i, x); + i += 1; + retain + }); +} diff --git a/crates/payload/primitives/src/lib.rs b/crates/payload/primitives/src/lib.rs index 523e6fb057a6..9f3442d407ae 100644 --- a/crates/payload/primitives/src/lib.rs +++ b/crates/payload/primitives/src/lib.rs @@ -9,6 +9,7 @@ #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] mod error; +use alloy_rpc_types_engine::PayloadId; pub use error::{ EngineObjectValidationError, InvalidPayloadAttributesError, PayloadBuilderError, VersionSpecificValidationError, @@ -39,6 +40,17 @@ pub trait PayloadTypes: Send + Sync + Unpin + core::fmt::Debug + Clone + 'static + Unpin; } +/// Validates the payload ID against the expected payload IDs. +pub fn validate_payload_id>( + id: PayloadId, + expected_vers: T, +) -> Result<(), EngineObjectValidationError> { + if !expected_vers.into_iter().any(|expected_ver| id.0[0] == expected_ver as u8) { + return Err(EngineObjectValidationError::UnsupportedFork); + } + Ok(()) +} + /// Validates the timestamp depending on the version called: /// /// * If V2, this ensures that the payload timestamp is pre-Cancun. diff --git a/crates/rpc/rpc-api/src/debug.rs b/crates/rpc/rpc-api/src/debug.rs index c2d1c605ff14..69693603311d 100644 --- a/crates/rpc/rpc-api/src/debug.rs +++ b/crates/rpc/rpc-api/src/debug.rs @@ -292,7 +292,7 @@ pub trait DebugApi { /// Sets the current head of the local chain by block number. Note, this is a destructive action /// and may severely damage your chain. Use with extreme caution. #[method(name = "setHead")] - async fn debug_set_head(&self, number: u64) -> RpcResult<()>; + async fn debug_set_head(&self, number: BlockNumberOrTag) -> RpcResult<()>; /// Sets the rate of mutex profiling. #[method(name = "setMutexProfileFraction")] diff --git a/crates/rpc/rpc-builder/src/lib.rs b/crates/rpc/rpc-builder/src/lib.rs index def7a7ed2960..fc25d45906c8 100644 --- a/crates/rpc/rpc-builder/src/lib.rs +++ b/crates/rpc/rpc-builder/src/lib.rs @@ -1865,7 +1865,13 @@ where ) .into_rpc() .into(), - RethRpcModule::Taiko => TaikoApi::new(eth_api.clone()).into_rpc().into(), + RethRpcModule::Taiko => TaikoApi::new( + self.eth.api.clone(), + self.blocking_pool_guard.clone(), + self.block_executor.clone(), + ) + .into_rpc() + .into(), RethRpcModule::Eth => { // merge all eth handlers let mut module = eth_api.clone().into_rpc(); diff --git a/crates/rpc/rpc-builder/tests/it/auth.rs b/crates/rpc/rpc-builder/tests/it/auth.rs index 20027dd574c5..f40c62c34450 100644 --- a/crates/rpc/rpc-builder/tests/it/auth.rs +++ b/crates/rpc/rpc-builder/tests/it/auth.rs @@ -26,6 +26,10 @@ where execution_payload: convert_block_to_payload_input_v2(block), tx_hash: Default::default(), withdrawals_hash: Default::default(), + blob_gas_used: Default::default(), + excess_blob_gas: Default::default(), + deposit_requests: Default::default(), + taiko_block: Default::default(), }, ) .await; diff --git a/crates/rpc/rpc-engine-api/src/engine_api.rs b/crates/rpc/rpc-engine-api/src/engine_api.rs index 95eeca66dd42..8c6f0d2854eb 100644 --- a/crates/rpc/rpc-engine-api/src/engine_api.rs +++ b/crates/rpc/rpc-engine-api/src/engine_api.rs @@ -21,8 +21,8 @@ use reth_engine_primitives::{EngineTypes, EngineValidator}; use reth_evm::provider::EvmEnvProvider; use reth_payload_builder::PayloadStore; use reth_payload_primitives::{ - validate_payload_timestamp, EngineApiMessageVersion, PayloadBuilderAttributes, - PayloadOrAttributes, + validate_payload_id, validate_payload_timestamp, EngineApiMessageVersion, + PayloadBuilderAttributes, PayloadOrAttributes, }; use reth_primitives::EthereumHardfork; use reth_rpc_api::EngineApiServer; @@ -179,7 +179,7 @@ where &self, payload: TaikoExecutionPayloadInputV2, ) -> EngineApiResult { - let TaikoExecutionPayloadInputV2 { execution_payload, tx_hash, withdrawals_hash } = payload; + let TaikoExecutionPayloadInputV2 { execution_payload, tx_hash, withdrawals_hash, .. } = payload; let payload = convert_payload_input_v2_to_payload(execution_payload); let payload = TaikoExecutionPayload::from((payload, tx_hash, withdrawals_hash)); let payload_or_attrs = @@ -375,6 +375,7 @@ where &self, payload_id: PayloadId, ) -> EngineApiResult { + validate_payload_id(payload_id, Some(EngineApiMessageVersion::V1))?; self.inner .payload_store .resolve(payload_id) @@ -399,6 +400,10 @@ where &self, payload_id: PayloadId, ) -> EngineApiResult { + validate_payload_id( + payload_id, + [EngineApiMessageVersion::V1, EngineApiMessageVersion::V2], + )?; // First we fetch the payload attributes to check the timestamp let attributes = self.get_payload_attributes(payload_id).await?; @@ -434,6 +439,7 @@ where &self, payload_id: PayloadId, ) -> EngineApiResult { + validate_payload_id(payload_id, Some(EngineApiMessageVersion::V3))?; // First we fetch the payload attributes to check the timestamp let attributes = self.get_payload_attributes(payload_id).await?; diff --git a/crates/rpc/rpc-server-types/src/module.rs b/crates/rpc/rpc-server-types/src/module.rs index 108e2f519bdd..21f7e5780f00 100644 --- a/crates/rpc/rpc-server-types/src/module.rs +++ b/crates/rpc/rpc-server-types/src/module.rs @@ -323,6 +323,7 @@ impl FromStr for RethRpcModule { "ots" => Self::Ots, "flashbots" => Self::Flashbots, "miner" => Self::Miner, + "taiko" => Self::Taiko, _ => return Err(ParseError::VariantNotFound), }) } diff --git a/crates/rpc/rpc-types-compat/Cargo.toml b/crates/rpc/rpc-types-compat/Cargo.toml index c5581489cef5..fadf51812c28 100644 --- a/crates/rpc/rpc-types-compat/Cargo.toml +++ b/crates/rpc/rpc-types-compat/Cargo.toml @@ -16,9 +16,6 @@ workspace = true reth-primitives.workspace = true reth-primitives-traits.workspace = true -# taiko -reth-taiko-engine-types.workspace = true - # ethereum alloy-eips.workspace = true alloy-primitives.workspace = true diff --git a/crates/rpc/rpc-types-compat/src/engine/payload.rs b/crates/rpc/rpc-types-compat/src/engine/payload.rs index a6acc5f0c4e9..163ac1bbf38d 100644 --- a/crates/rpc/rpc-types-compat/src/engine/payload.rs +++ b/crates/rpc/rpc-types-compat/src/engine/payload.rs @@ -9,15 +9,14 @@ use alloy_eips::{ use alloy_primitives::{B256, U256}; use alloy_rpc_types_engine::{ payload::{ExecutionPayloadBodyV1, ExecutionPayloadFieldV2}, - ExecutionPayload, ExecutionPayloadSidecar, ExecutionPayloadV1, ExecutionPayloadV2, - ExecutionPayloadV3, PayloadError, + ExecutionPayload, ExecutionPayloadInputV2, ExecutionPayloadSidecar, ExecutionPayloadV1, + ExecutionPayloadV2, ExecutionPayloadV3, PayloadError, }; use reth_primitives::{ proofs::{self}, Block, BlockBody, BlockExt, SealedBlock, TransactionSigned, }; use reth_primitives_traits::BlockBody as _; -use reth_taiko_engine_types::ExecutionPayloadInputV2; /// Converts [`ExecutionPayloadV1`] to [`Block`] pub fn try_payload_v1_to_block(payload: ExecutionPayloadV1) -> Result { diff --git a/crates/rpc/rpc/src/debug.rs b/crates/rpc/rpc/src/debug.rs index 82fba3d72b5b..ec4e5557d8a8 100644 --- a/crates/rpc/rpc/src/debug.rs +++ b/crates/rpc/rpc/src/debug.rs @@ -1113,7 +1113,7 @@ where Ok(()) } - async fn debug_set_head(&self, number: u64) -> RpcResult<()> { + async fn debug_set_head(&self, number: BlockNumberOrTag) -> RpcResult<()> { let block_hash = self .provider() .block_hash_for_id(number.into()) @@ -1121,9 +1121,10 @@ where .map_err(Into::into)? .ok_or_else(|| EthApiError::HeaderNotFound(number.into()))?; - self.inner + let _ = self + .inner .beacon_consensus - .debug_fork_choice_updated( + .fork_choice_updated( ForkchoiceState { head_block_hash: block_hash, safe_block_hash: block_hash, @@ -1135,7 +1136,18 @@ where .await .map_err(|op| internal_rpc_err(op.to_string())) .map_err(EthApiError::other)?; - sleep(Duration::from_secs(1)).await; + loop { + let block = self + .eth_api() + .block_with_senders(BlockNumberOrTag::Finalized.into()) + .await + .map_err(|op| internal_rpc_err(op.to_string())) + .map_err(EthApiError::other)?; + if block.is_some_and(|block| block.hash() == block_hash) { + break; + } + sleep(Duration::from_secs(1)).await; + } Ok(()) } diff --git a/crates/storage/errors/src/provider.rs b/crates/storage/errors/src/provider.rs index deef3b85b085..f5dbc331642c 100644 --- a/crates/storage/errors/src/provider.rs +++ b/crates/storage/errors/src/provider.rs @@ -138,11 +138,11 @@ pub enum ProviderError { InvalidStorageOutput, /// L1 origin error - #[display("not L1Origin found for block #{_0}")] + #[display("not found")] L1OriginNotFound(BlockNumber), /// Head L1 origin error - #[display("head L1Origin does not exist")] + #[display("not found")] HeadL1OriginNotFound, } diff --git a/crates/taiko/chainspec/res/genesis/internal_l2a.json b/crates/taiko/chainspec/res/genesis/internal_l2a.json index 24759cb84a54..4cdc32015742 100644 --- a/crates/taiko/chainspec/res/genesis/internal_l2a.json +++ b/crates/taiko/chainspec/res/genesis/internal_l2a.json @@ -1,369 +1,369 @@ { - "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266": { - "balance": "0x3782dace9d90000000" - }, - "0x70997970C51812dc3A010C7d01b50e0d17dc79C8": { - "balance": "0x3782dace9d90000000" - }, - "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC": { - "balance": "0x3782dace9d90000000" - }, - "0x90F79bf6EB2c4f870365E785982E1f101E93b906": { - "balance": "0x3782dace9d90000000" - }, - "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65": { - "balance": "0x3782dace9d90000000" - }, - "0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc": { - "balance": "0x3782dace9d90000000" - }, - "0x976EA74026E726554dB657fA54763abd0C3a0aa9": { - "balance": "0x3782dace9d90000000" - }, - "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955": { - "balance": "0x3782dace9d90000000" - }, - "0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f": { - "balance": "0x3782dace9d90000000" - }, - "0xa0Ee7A142d267C1f36714E4a8F75612F20a79720": { - "balance": "0x3782dace9d90000000" - }, - "0xBcd4042DE499D14e55001CcbB24a551F3b954096": { - "balance": "0x3782dace9d90000000" - }, - "0x71bE63f3384f5fb98995898A86B02Fb2426c5788": { - "balance": "0x3782dace9d90000000" - }, - "0xFABB0ac9d68B0B445fB7357272Ff202C5651694a": { - "balance": "0x3782dace9d90000000" - }, - "0x1CBd3b2770909D4e10f157cABC84C7264073C9Ec": { - "balance": "0x3782dace9d90000000" - }, - "0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097": { - "balance": "0x3782dace9d90000000" - }, - "0xcd3B766CCDd6AE721141F452C550Ca635964ce71": { - "balance": "0x3782dace9d90000000" - }, - "0x2546BcD3c84621e976D8185a91A922aE77ECEc30": { - "balance": "0x3782dace9d90000000" - }, - "0xbDA5747bFD65F08deb54cb465eB87D40e51B197E": { - "balance": "0x3782dace9d90000000" - }, - "0xdD2FD4581271e230360230F9337D5c0430Bf44C0": { - "balance": "0x3782dace9d90000000" - }, - "0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199": { - "balance": "0x3782dace9d90000000" - }, - "0x7D86687F980A56b832e9378952B738b614A99dc6": { - "balance": "0x3782dace9d90000000" - }, - "0x11e8F3eA3C6FcF12EcfF2722d75CEFC539c51a1C": { - "balance": "0x3782dace9d90000000" - }, - "0x9eAF5590f2c84912A08de97FA28d0529361Deb9E": { - "balance": "0x3782dace9d90000000" - }, - "0x1003ff39d25F2Ab16dBCc18EcE05a9B6154f65F4": { - "balance": "0x3782dace9d90000000" - }, - "0x4779d18931B35540F84b0cd0e9633855B84df7b8": { - "balance": "0x3782dace9d90000000" - }, - "0x1c87Bb9234aeC6aDc580EaE6C8B59558A4502220": { - "balance": "0x3782dace9d90000000" - }, - "0x0d803cdeEe5990f22C2a8DF10A695D2312dA26CC": { - "balance": "0x3782dace9d90000000" - }, - "0xAb707cb80e7de7C75d815B1A653433F3EEc44c74": { - "balance": "0x3782dace9d90000000" - }, - "0xe8B1ff302A740fD2C6e76B620d45508dAEc2DDFf": { - "balance": "0x3782dace9d90000000" - }, - "0xa0EC9eE47802CeB56eb58ce80F3E41630B771b04": { - "balance": "0x3782dace9d90000000" - }, - "0x042a63149117602129B6922ecFe3111168C2C323": { - "balance": "0x3782dace9d90000000" - }, - "0xA1196426b41627ae75Ea7f7409E074BE97367da2": { - "balance": "0x3782dace9d90000000" - }, - "0xE74cEf90b6CF1a77FEfAd731713e6f53e575C183": { - "balance": "0x3782dace9d90000000" - }, - "0x7Df8Efa6d6F1CB5C4f36315e0AcB82b02Ae8BA40": { - "balance": "0x3782dace9d90000000" - }, - "0x9E126C57330FA71556628e0aabd6B6B6783d99fA": { - "balance": "0x3782dace9d90000000" - }, - "0xcBDc0F9a4C38f1e010bD3B6e43598A55D1868c23": { - "balance": "0x3782dace9d90000000" - }, - "0xBc5BdceE96b1BC47822C74e6f64186fbA7d686be": { - "balance": "0x3782dace9d90000000" - }, - "0x0536896a5e38BbD59F3F369FF3682677965aBD19": { - "balance": "0x3782dace9d90000000" - }, - "0xFE0f143FcAD5B561b1eD2AC960278A2F23559Ef9": { - "balance": "0x3782dace9d90000000" - }, - "0x98D08079928FcCB30598c6C6382ABfd7dbFaA1cD": { - "balance": "0x3782dace9d90000000" - }, - "0x0167001000000000000000000000000000000006": { - "contractName": "SharedAddressManagerImpl", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" - }, - "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610300578063a86f9d9e1461031d578063d8f4648f1461033c578063e07baba61461035b578063e30c397814610391578063f2fde38b146103ae575f5ffd5b80635c975abb14610290578063715018a6146102b057806379ba5097146102c45780638456cb59146102d85780638abf6077146102ec575f5ffd5b80633ab76e9f116100ee5780633ab76e9f146102095780633eb6b8cf146102285780633f4ba83a146102475780634f1ef2861461025b57806352d1902d1461026e575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c65780633659cfe6146101ea575b5f5ffd5b348015610135575f5ffd5b5061013e6103cd565b005b34801561014b575f5ffd5b5061013e61015a36600461119f565b61047d565b34801561016a575f5ffd5b506101a96101793660046111d5565b6001600160401b03919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d1575f5ffd5b506101da610544565b60405190151581526020016101bd565b3480156101f5575f5ffd5b5061013e61020436600461119f565b61055c565b348015610214575f5ffd5b506097546101a9906001600160a01b031681565b348015610233575f5ffd5b506101a961024236600461120c565b610623565b348015610252575f5ffd5b5061013e610637565b61013e610269366004611259565b61064b565b348015610279575f5ffd5b50610282610700565b6040519081526020016101bd565b34801561029b575f5ffd5b506101da60c954610100900460ff1660021490565b3480156102bb575f5ffd5b5061013e6107b1565b3480156102cf575f5ffd5b5061013e6107c2565b3480156102e3575f5ffd5b5061013e610839565b3480156102f7575f5ffd5b506101a961084c565b34801561030b575f5ffd5b506033546001600160a01b03166101a9565b348015610328575f5ffd5b506101a961033736600461131c565b61085a565b348015610347575f5ffd5b5061013e610356366004611346565b61086d565b348015610366575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b0390911681526020016101bd565b34801561039c575f5ffd5b506065546001600160a01b03166101a9565b3480156103b9575f5ffd5b5061013e6103c836600461119f565b610949565b6103d56109ba565b5f54600290610100900460ff161580156103f557505f5460ff8083169116105b61041a5760405162461bcd60e51b815260040161041190611383565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff161580801561049b57505f54600160ff909116105b806104b45750303b1580156104b457505f5460ff166001145b6104d05760405162461bcd60e51b815260040161041190611383565b5f805460ff1916600117905580156104f1575f805461ff0019166101001790555b6104fb8230610a14565b8015610540575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261055360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000000061630036105a45760405162461bcd60e51b8152600401610411906113d1565b7f00000000000000000000000001670010000000000000000000000000000000066001600160a01b03166105d6610a53565b6001600160a01b0316146105fc5760405162461bcd60e51b81526004016104119061141d565b61060581610a6e565b604080515f8082526020820190925261062091839190610a76565b50565b5f61062f848484610be0565b949350505050565b61063f610c3c565b610649335f610ccc565b565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000000061630036106935760405162461bcd60e51b8152600401610411906113d1565b7f00000000000000000000000001670010000000000000000000000000000000066001600160a01b03166106c5610a53565b6001600160a01b0316146106eb5760405162461bcd60e51b81526004016104119061141d565b6106f482610a6e565b61054082826001610a76565b5f306001600160a01b037f0000000000000000000000000167001000000000000000000000000000000006161461079f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610411565b505f5160206115565f395f51905f5290565b6107b96109ba565b6106495f610ce5565b60655433906001600160a01b031681146108305760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610411565b61062081610ce5565b610841610cfe565b610649336001610ccc565b5f610855610a53565b905090565b5f610866468484610be0565b9392505050565b6108756109ba565b6001600160401b0383165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108c65760405163a883089360e01b815260040160405180910390fd5b6001600160401b0384165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109516109ba565b606580546001600160a01b0383166001600160a01b031990911681179091556109826033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610411565b806001600160a01b038116610a3c5760405163538ba4f960e01b815260040160405180910390fd5b610a4583610d6f565b610a4e82610dcd565b505050565b5f5160206115565f395f51905f52546001600160a01b031690565b6106206109ba565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610aa957610a4e83610e3d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b03575060408051601f3d908101601f19168201909252610b0091810190611469565b60015b610b665760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610411565b5f5160206115565f395f51905f528114610bd45760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610411565b50610a4e838383610ed8565b5f610beb8484610f02565b90508180610c0157506001600160a01b03811615155b84849091610c3357604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610411565b50509392505050565b610c5060c954610100900460ff1660021490565b610c6d5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561062081610fa4565b610d1260c954610100900460ff1660021490565b15610d305760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cc2565b5f54610100900460ff16610d955760405162461bcd60e51b815260040161041190611480565b610d9d610ff5565b610dbb6001600160a01b03821615610db55781610ce5565b33610ce5565b5060c9805461ff001916610100179055565b5f54610100900460ff16610df35760405162461bcd60e51b815260040161041190611480565b6001600160401b03461115610e1b5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381163b610eaa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610411565b5f5160206115565f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610ee18361101b565b5f82511180610eed5750805b15610a4e57610efc838361105a565b50505050565b6097545f906001600160a01b031680610f2e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f80573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062f91906114cb565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166106495760405162461bcd60e51b815260040161041190611480565b61102481610e3d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061086683836040518060600160405280602781526020016115766027913960605f5f856001600160a01b0316856040516110969190611508565b5f60405180830381855af49150503d805f81146110ce576040519150601f19603f3d011682016040523d82523d5f602084013e6110d3565b606091505b50915091506110e4868383876110ee565b9695505050505050565b6060831561115c5782515f03611155576001600160a01b0385163b6111555760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610411565b508161062f565b61062f83838151156111715781518083602001fd5b8060405162461bcd60e51b81526004016104119190611523565b6001600160a01b0381168114610620575f5ffd5b5f602082840312156111af575f5ffd5b81356108668161118b565b80356001600160401b03811681146111d0575f5ffd5b919050565b5f5f604083850312156111e6575f5ffd5b6111ef836111ba565b946020939093013593505050565b803580151581146111d0575f5ffd5b5f5f5f6060848603121561121e575f5ffd5b611227846111ba565b92506020840135915061123c604085016111fd565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561126a575f5ffd5b82356112758161118b565b915060208301356001600160401b0381111561128f575f5ffd5b8301601f8101851361129f575f5ffd5b80356001600160401b038111156112b8576112b8611245565b604051601f8201601f19908116603f011681016001600160401b03811182821017156112e6576112e6611245565b6040528181528282016020018710156112fd575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f6040838503121561132d575f5ffd5b8235915061133d602084016111fd565b90509250929050565b5f5f5f60608486031215611358575f5ffd5b611361846111ba565b92506020840135915060408401356113788161118b565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f60208284031215611479575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156114db575f5ffd5b81516108668161118b565b5f5b838110156115005781810151838201526020016114e8565b50505f910152565b5f82516115198184602087016114e6565b9190910192915050565b602081525f82518060208401526115418160408501602087016114e6565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201f510524c1800f97cbf3fac7303cbf789bb0b2861287601b3f10c325c89799f364736f6c634300081b0033", - "balance": "0x0" - }, - "0x1670010000000000000000000000000000000006": { - "contractName": "SharedAddressManager", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", - "0xc64d73fae391b0ac595df47d373c227e7f86156e3d98ea2db53384d097ed1368": "0x0000000000000000000000001670010000000000000000000000000000000001", - "0x874594376407a7a3ecea7d4704f3d74c6c46d5ebede74ed82e228810d8de14e8": "0x0000000000000000000000001670010000000000000000000000000000000002", - "0x2723bcf67bd1580da6815ff7d2e86d877ad3a715975e5ec695c979712859d633": "0x0000000000000000000000001670010000000000000000000000000000000003", - "0x0b9331c6e6848711b59bebda4cb38292225176ce8cfca5d6019d5b562dc3ed9e": "0x0000000000000000000000001670010000000000000000000000000000000004", - "0x30e0422248fc90822e500074357003173b9f5edac82e6cc3679f5f9b5ae0843a": "0x0000000000000000000000001670010000000000000000000000000000000005", - "0xfe44fe816c0baa33783639d99e595cb6de463e186ec113aaed043e42d2c4e279": "0x0000000000000000000000000167001000000000000000000000000000010096", - "0xd2d6c2a7f8afdb0440c97960518d1f1133dc92587d9c6884dbaff6290e06319c": "0x0000000000000000000000000167001000000000000000000000000000010097", - "0x6db8284aa664f2ba76ffc7a2219f82b728ba258e79df0e93d3eb45b5cb231a69": "0x0000000000000000000000000167001000000000000000000000000000010098", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000000006" - }, - "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", - "balance": "0x0" - }, - "0x0167001000000000000000000000000000000001": { - "contractName": "BridgeImpl", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" - }, - "code": "0x60806040526004361061021d575f3560e01c806382b5e8891161011e578063b8acae0e116100a8578063e07baba61161006d578063e07baba61461066b578063e30c3978146106a2578063eefbf17e146106bf578063f09a4016146106e5578063f2fde38b14610704575f5ffd5b8063b8acae0e146105af578063be880c81146105ce578063c012fa77146105e4578063d0496d6a14610603578063d1aaa5df1461064b575f5ffd5b80638e3881a9116100ee5780638e3881a9146104fe578063913b16cb1461053c5780639efc7a2e1461055b578063a730cdfb1461057a578063a86f9d9e14610590575f5ffd5b806382b5e8891461049a5780638456cb59146104b95780638abf6077146104cd5780638da5cb5b146104e1575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb146103ff57806360620c6b1461041f578063715018a61461043e57806379ba5097146104525780637cbadfaa14610466575f5ffd5b80633f4ba83a14610381578063422770fa146103955780634f1ef286146103b957806352d1902d146103cc5780635862f6e1146103e0575f5ffd5b80633075db56116101f05780633075db56146102ad5780633659cfe6146102d15780633ab76e9f146102f05780633c6cf473146103275780633eb6b8cf14610362575f5ffd5b80630432873c14610221578063069489a2146102425780631bdb0037146102565780632035065e14610280575b5f5ffd5b34801561022c575f5ffd5b5061024061023b366004612f9c565b610723565b005b34801561024d575f5ffd5b50610240610a21565b610269610264366004612fea565b610ad8565b604051610277929190613176565b60405180910390f35b34801561028b575f5ffd5b5061029f61029a36600461318e565b610e8e565b60405161027792919061324b565b3480156102b8575f5ffd5b506102c161134e565b6040519015158152602001610277565b3480156102dc575f5ffd5b506102406102eb36600461329a565b611366565b3480156102fb575f5ffd5b5060975461030f906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b348015610332575f5ffd5b506103556103413660046132b5565b60fc6020525f908152604090205460ff1681565b60405161027791906132cc565b34801561036d575f5ffd5b5061030f61037c3660046132f0565b61142d565b34801561038c575f5ffd5b50610240611443565b3480156103a0575f5ffd5b506103ab62030d4081565b604051908152602001610277565b6102406103c73660046133f3565b611457565b3480156103d7575f5ffd5b506103ab611510565b3480156103eb575f5ffd5b506102c16103fa36600461318e565b6115c2565b34801561040a575f5ffd5b506102c160c954610100900460ff1660021490565b34801561042a575f5ffd5b506102c1610439366004612fea565b61162d565b348015610449575f5ffd5b506102406116fb565b34801561045d575f5ffd5b5061024061170c565b348015610471575f5ffd5b506104856104803660046132b5565b611783565b60405163ffffffff9091168152602001610277565b3480156104a5575f5ffd5b506102406104b436600461329a565b6117a1565b3480156104c4575f5ffd5b50610240611821565b3480156104d8575f5ffd5b5061030f611834565b3480156104ec575f5ffd5b506033546001600160a01b031661030f565b348015610509575f5ffd5b5061051d61051836600461343f565b611842565b6040805192151583526001600160a01b03909116602083015201610277565b348015610547575f5ffd5b50610240610556366004612fea565b61186e565b348015610566575f5ffd5b5061024061057536600461318e565b611a5d565b348015610585575f5ffd5b506104856201d4c081565b34801561059b575f5ffd5b5061030f6105aa366004613458565b611d61565b3480156105ba575f5ffd5b506102c16105c936600461318e565b611d6d565b3480156105d9575f5ffd5b50610485620c350081565b3480156105ef575f5ffd5b506103ab6105fe36600461357b565b611dce565b34801561060e575f5ffd5b50610617611dfd565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610277565b348015610656575f5ffd5b506103ab6106653660046132b5565b60031890565b348015610676575f5ffd5b5060c9546201000090046001600160401b03165b6040516001600160401b039091168152602001610277565b3480156106ad575f5ffd5b506065546001600160a01b031661030f565b3480156106ca575f5ffd5b5060fb5461068a90600160401b90046001600160401b031681565b3480156106f0575f5ffd5b506102406106ff3660046135ac565b611ea4565b34801561070f575f5ffd5b5061024061071e36600461329a565b611f6b565b61073360e0830160c0840161343f565b46816001600160401b03161461075c57604051631c6c777560e31b815260040160405180910390fd5b61076c60a084016080850161343f565b6001600160401b038116158061078a575046816001600160401b0316145b156107a857604051631c6c777560e31b815260040160405180910390fd5b6107bc60c954610100900460ff1660021490565b156107da5760405163bae6e2a960e01b815260040160405180910390fd5b60026107e860c95460ff1690565b60ff16036108095760405163dfc60d8560e01b815260040160405180910390fd5b6108136002611fdc565b5f6108206105fe866135d8565b905061082d816001611ff2565b61083b856101200135612044565b610858576040516335856fbd60e21b815260040160405180910390fd5b5f61087d866108786d7369676e616c5f7365727669636560901b5f611d61565b6120e5565b156108c8576108c18661012001356188b860405180602001604052805f8152508960e00160208101906108b0919061329a565b6001600160a01b03169291906121dc565b9050610942565b6108d860608701604088016135e3565b63ffffffff1615806108e75750845b801561091557506108ff610100870160e0880161329a565b6001600160a01b0316336001600160a01b031614155b15610933576040516372b6e1c360e11b815260040160405180910390fd5b61093f86835a5f612219565b90505b80156109585761095382600261233d565b610a0f565b84156109f65761096982600361233d565b6109846d7369676e616c5f7365727669636560901b5f611d61565b60405163019b28af60e61b81526003841860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af11580156109cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f091906135fc565b50610a0f565b60405163161e3ead60e01b815260040160405180910390fd5b5050610a1b6001611fdc565b50505050565b610a296123fa565b5f54600290610100900460ff16158015610a4957505f5460ff8083169116105b610a6e5760405162461bcd60e51b8152600401610a6590613613565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610b3e60c0840160a0850161329a565b6001600160a01b038116610b655760405163538ba4f960e01b815260040160405180910390fd5b610b76610100850160e0860161329a565b6001600160a01b038116610b9d5760405163538ba4f960e01b815260040160405180910390fd5b610bad60e0860160c0870161343f565b6001600160401b0381161580610bcb575046816001600160401b0316145b15610be957604051631c6c777560e31b815260040160405180910390fd5b610bfd60c954610100900460ff1660021490565b15610c1b5760405163bae6e2a960e01b815260040160405180910390fd5b6002610c2960c95460ff1690565b60ff1603610c4a5760405163dfc60d8560e01b815260040160405180910390fd5b610c546002611fdc565b610c6460608701604088016135e3565b63ffffffff165f03610cac57610c80604087016020880161343f565b6001600160401b031615610ca75760405163c9f5178760e01b815260040160405180910390fd5b610cd4565b610cb586612454565b5f03610cd4576040516308c2ad5360e01b815260040160405180910390fd5b5f610ce861051860e0890160c08a0161343f565b50905080610d0957604051631c6c777560e31b815260040160405180910390fd5b34610d1a6040890160208a0161343f565b610d32906001600160401b03166101208a0135613675565b14610d5057604051634ac2abdf60e11b815260040160405180910390fd5b610d59876135d8565b60fb8054919650600160401b9091046001600160401b0316906008610d7d83613688565b82546101009290920a6001600160401b03818102199093169183160217909155908116865233606087015246166080860152610db885611dce565b9550857fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351786604051610dea91906136b2565b60405180910390a2610e0d6d7369676e616c5f7365727669636560901b5f611d61565b6001600160a01b03166366ca2bc0876040518263ffffffff1660e01b8152600401610e3a91815260200190565b6020604051808303815f875af1158015610e56573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e7a91906135fc565b5050610e866001611fdc565b505050915091565b5f5f610ea460c954610100900460ff1660021490565b15610ec25760405163bae6e2a960e01b815260040160405180910390fd5b6002610ed060c95460ff1690565b60ff1603610ef15760405163dfc60d8560e01b815260040160405180910390fd5b610efb6002611fdc565b5f5a905046610f1060e0880160c0890161343f565b6001600160401b031614610f3757604051631c6c777560e31b815260040160405180910390fd5b610f4760a087016080880161343f565b6001600160401b03161580610f73575046610f6860a088016080890161343f565b6001600160401b0316145b15610f9157604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610fc5610100880160e0890161329a565b6001600160a01b031633148015606083015261103457610feb60608801604089016135e3565b63ffffffff165f03611010576040516372b6e1c360e11b815260040160405180910390fd5b62030d4085111561103457604051631e3b03c960e01b815260040160405180910390fd5b5f6110416105fe896135d8565b905061104d815f611ff2565b5f6110696d7369676e616c5f7365727669636560901b5f611d61565b63ffffffff881660208501529050611093818361108c60a08d0160808e0161343f565b8b8b6124a7565b63ffffffff166040808501919091526110d2906110b5908b0160208c0161343f565b6110cd906001600160401b03166101208c0135613675565b612044565b6110ef576040516335856fbd60e21b815260040160405180910390fd5b5f6110fa8a836120e5565b156111135750600295506001945061012089013561115a565b5f8460600151611123575a61112c565b61112c8b612454565b905061113e8b85838860600151612219565b1561114f57600297505f9650611158565b60019750600296505b505b61116a60408b0160208c0161343f565b6001600160401b0316156112cb5761118860408b0160208c0161343f565b61119b906001600160401b031682613675565b9050836060015180156111c257506111b960608b0160408c016135e3565b63ffffffff1615155b156112cb57604084015163ffffffff16614e20025a6111ff6111e86101408e018e6136c4565b6020601f909101819004026101a00160041b919050565b63ffffffff9081168801919091036201d4c00181168087525f9183916112289183919061255216565b0390505f61123c60608e0160408f016135e3565b63ffffffff168d6020016020810190611255919061343f565b6001600160401b031683028161126d5761126d61370d565b0490505f48830290505f6112b18f602001602081019061128d919061343f565b6001600160401b0316848410156112a95784840160011c6112ab565b845b90612567565b958690039590506112c533826188b861257b565b50505050505b6112f3816188b86112e36101008e0160e08f0161329a565b6001600160a01b0316919061257b565b6112fd838861233d565b827f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8b8660405161132f9291906138a5565b60405180910390a250505050506113466001611fdc565b935093915050565b5f600261135d60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000000011630036113ae5760405162461bcd60e51b8152600401610a65906138f9565b7f00000000000000000000000001670010000000000000000000000000000000016001600160a01b03166113e06125be565b6001600160a01b0316146114065760405162461bcd60e51b8152600401610a6590613945565b61140f816125d9565b604080515f8082526020820190925261142a918391906125e1565b50565b5f61143984848461274b565b90505b9392505050565b61144b6127a7565b611455335f612837565b565b6001600160a01b037f000000000000000000000000016700100000000000000000000000000000000116300361149f5760405162461bcd60e51b8152600401610a65906138f9565b7f00000000000000000000000001670010000000000000000000000000000000016001600160a01b03166114d16125be565b6001600160a01b0316146114f75760405162461bcd60e51b8152600401610a6590613945565b611500826125d9565b61150c828260016125e1565b5050565b5f306001600160a01b037f000000000000000000000000016700100000000000000000000000000000000116146115af5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a65565b505f516020613b5f5f395f51905f525b90565b5f466115d460a086016080870161343f565b6001600160401b0316146115e957505f61143c565b6114396116076d7369676e616c5f7365727669636560901b5f611d61565b6116166106656105fe886135d8565b61162660e0880160c0890161343f565b86866128e4565b5f4661163f60a084016080850161343f565b6001600160401b03161461165457505f919050565b61166f6d7369676e616c5f7365727669636560901b5f611d61565b6001600160a01b03166332676bc63061168a6105fe866135d8565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156116d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f59190613991565b92915050565b6117036123fa565b6114555f612966565b60655433906001600160a01b0316811461177a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a65565b61142a81612966565b5f6116f5620c35006101a06020601f8601819004020160041b6139ac565b806001600160a01b0381166117c95760405163538ba4f960e01b815260040160405180910390fd5b6040516317066a5760e21b81523060048201526001600160a01b03831690635c19a95c906024015f604051808303815f87803b158015611807575f5ffd5b505af1158015611819573d5f5f3e3d5ffd5b505050505050565b61182961297f565b611455336001612837565b5f61183d6125be565b905090565b5f5f611859836562726964676560d01b600161142d565b6001600160a01b038116151594909350915050565b61187e60e0820160c0830161343f565b46816001600160401b0316146118a757604051631c6c777560e31b815260040160405180910390fd5b6118b760a083016080840161343f565b6001600160401b03811615806118d5575046816001600160401b0316145b156118f357604051631c6c777560e31b815260040160405180910390fd5b61190760c954610100900460ff1660021490565b156119255760405163bae6e2a960e01b815260040160405180910390fd5b600261193360c95460ff1690565b60ff16036119545760405163dfc60d8560e01b815260040160405180910390fd5b61195e6002611fdc565b61196f610100840160e0850161329a565b6001600160a01b0316336001600160a01b0316146119a0576040516372b6e1c360e11b815260040160405180910390fd5b5f6119ad6105fe856135d8565b90506119ba816001611ff2565b6119c581600361233d565b6119e06d7369676e616c5f7365727669636560901b5f611d61565b60405163019b28af60e61b81526003831860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af1158015611a28573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4c91906135fc565b5050611a586001611fdc565b505050565b611a6d60a084016080850161343f565b46816001600160401b031614611a9657604051631c6c777560e31b815260040160405180910390fd5b611aa660e0850160c0860161343f565b6001600160401b0381161580611ac4575046816001600160401b0316145b15611ae257604051631c6c777560e31b815260040160405180910390fd5b611af660c954610100900460ff1660021490565b15611b145760405163bae6e2a960e01b815260040160405180910390fd5b6002611b2260c95460ff1690565b60ff1603611b435760405163dfc60d8560e01b815260040160405180910390fd5b611b4d6002611fdc565b5f611b5a6105fe876135d8565b9050611b66815f611ff2565b5f611b826d7369676e616c5f7365727669636560901b5f611d61565b604051631933b5e360e11b8152306004820152602481018490529091506001600160a01b038216906332676bc690604401602060405180830381865afa158015611bce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf29190613991565b611c0f5760405163ab035ad560e01b815260040160405180910390fd5b611c2e8160038418611c2760e08b0160c08c0161343f565b89896124a7565b50611c3a82600461233d565b611c48876101200135612044565b611c65576040516335856fbd60e21b815260040160405180910390fd5b611c8e62bc399d60e11b611c7f60808a0160608b0161329a565b6001600160a01b0316906129f0565b15611d3257611cad8230611ca860a08b0160808c0161343f565b612ac0565b611cbd608088016060890161329a565b6001600160a01b0316630178733a88610120013589856040518463ffffffff1660e01b8152600401611cf09291906139c8565b5f604051808303818588803b158015611d07575f5ffd5b505af1158015611d19573d5f5f3e3d5ffd5b5050505050611d2d5f195f1b5f1980612ac0565b611d4e565b611d4e6101208801356188b86112e360c08b0160a08c0161329a565b5050611d5a6001611fdc565b5050505050565b5f61143c46848461274b565b5f46611d7f60e0860160c0870161343f565b6001600160401b031614611d9457505f61143c565b611439611db26d7369676e616c5f7365727669636560901b5f611d61565b611dbe6105fe876135d8565b61162660a088016080890161343f565b5f81604051602001611de091906139e9565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611e74604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611e86575080515f19145b156115bf57604051635ceed17360e01b815260040160405180910390fd5b5f54610100900460ff1615808015611ec257505f54600160ff909116105b80611edb5750303b158015611edb57505f5460ff166001145b611ef75760405162461bcd60e51b8152600401610a6590613613565b5f805460ff191660011790558015611f18575f805461ff0019166101001790555b611f228383612b15565b8015611a58575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b611f736123fa565b606580546001600160a01b0383166001600160a01b03199091168117909155611fa46033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b80600481111561200457612004613223565b5f83815260fc602052604090205460ff16600481111561202657612026613223565b1461150c576040516319d893ad60e21b815260040160405180910390fd5b5f5f6120616c38bab7ba30afb6b0b730b3b2b960991b6001611d61565b90506001600160a01b03811661207a5750600192915050565b6040516315c638fb60e31b81525f6004820152602481018490526001600160a01b0382169063ae31c7d8906044015f604051808303815f87803b1580156120bf575f5ffd5b505af19250505080156120d0575060015b6120dc57505f92915050565b50600192915050565b5f806120f96101208501610100860161329a565b6001600160a01b03160361210f575060016116f5565b306121226101208501610100860161329a565b6001600160a01b031603612138575060016116f5565b6001600160a01b0382166121546101208501610100860161329a565b6001600160a01b03160361216a575060016116f5565b600461217a6101408501856136c4565b9050101580156121b15750637f07c94760e01b61219b6101408501856136c4565b6121a491613a1f565b6001600160e01b03191614155b801561143c575061143c6121cd6101208501610100860161329a565b6001600160a01b03163b151590565b5f6001600160a01b03851661220457604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f3061222b608087016060880161329a565b6001600160a01b03160361224157612241613a57565b610120850135158015612261575061225d6101408601866136c4565b1590505b1561226e57506001612335565b825f0361227c57505f612335565b6122a084612290608088016060890161329a565b611ca860a0890160808a0161343f565b5f6122b36101208701610100880161329a565b90506101208601355f6122ca6101408901896136c4565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a90508515612324576123248188612b4f565b6123305f198080612ac0565b505050505b949350505050565b80600481111561234f5761234f613223565b5f83815260fc602052604090205460ff16600481111561237157612371613223565b0361238f576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff191660018360048111156123b9576123b9613223565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516123ee91906132cc565b60405180910390a25050565b6033546001600160a01b031633146114555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a65565b5f8061246e6124676101408501856136c4565b9050611783565b63ffffffff1690508061249f61248a60608601604087016135e3565b63ffffffff168361255290919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856124cc876562726964676560d01b5f61142d565b8887876040518663ffffffff1660e01b81526004016124ef959493929190613a6b565b6020604051808303815f875af1925050508015612529575060408051601f3d908101601f19168201909252612526918101906135fc565b60015b612546576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f818311612560578161143c565b5090919050565b5f818311612575578261143c565b50919050565b815f0361258757505050565b6125a183838360405180602001604052805f8152506121dc565b611a5857604051634c67134d60e11b815260040160405180910390fd5b5f516020613b5f5f395f51905f52546001600160a01b031690565b61142a6123fa565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561261457611a5883612b63565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561266e575060408051601f3d908101601f1916820190925261266b918101906135fc565b60015b6126d15760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a65565b5f516020613b5f5f395f51905f52811461273f5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a65565b50611a58838383612bfe565b5f6127568484612c22565b9050818061276c57506001600160a01b03811615155b8484909161279e57604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610a65565b50509392505050565b6127bb60c954610100900460ff1660021490565b6127d85760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6033546001600160a01b038381169116148061287f575061286a6d636861696e5f7761746368646f6760901b6001611d61565b6001600160a01b0316826001600160a01b0316145b15612888575050565b8080156128c257506128ad6e6272696467655f7761746368646f6760881b6001611d61565b6001600160a01b0316826001600160a01b0316145b156128cb575050565b604051630d85cccf60e11b815260040160405180910390fd5b5f856001600160a01b031663ce9d082085612909876562726964676560d01b5f61142d565b8887876040518663ffffffff1660e01b815260040161292c959493929190613a6b565b5f6040518083038186803b158015612942575f5ffd5b505afa925050508015612953575060015b61295e57505f612549565b506001612549565b606580546001600160a01b031916905561142a81612cc4565b61299360c954610100900460ff1660021490565b156129b15760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161282d565b6040516001600160e01b0319821660248201525f90819081906001600160a01b0386169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b17905251612a4c9190613aac565b5f60405180830381855afa9150503d805f8114612a84576040519150601f19603f3d011682016040523d82523d5f602084013e612a89565b606091505b5091509150818015612a9c575080516020145b15612ab85780806020019051810190612ab59190613991565b92505b505092915050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b806001600160a01b038116612b3d5760405163538ba4f960e01b815260040160405180910390fd5b612b4683612d15565b611a5882612d73565b612b5a603f82613ac7565b82101561150c57fe5b6001600160a01b0381163b612bd05760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a65565b5f516020613b5f5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b612c0783612de3565b5f82511180612c135750805b15611a5857610a1b8383612e22565b6097545f906001600160a01b031680612c4e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612ca0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123359190613ae6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16612d3b5760405162461bcd60e51b8152600401610a6590613b01565b612d43612e47565b612d616001600160a01b03821615612d5b5781612966565b33612966565b5060c9805461ff001916610100179055565b5f54610100900460ff16612d995760405162461bcd60e51b8152600401610a6590613b01565b6001600160401b03461115612dc15760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b612dec81612b63565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061143c8383604051806060016040528060278152602001613b7f60279139612e6d565b5f54610100900460ff166114555760405162461bcd60e51b8152600401610a6590613b01565b60605f5f856001600160a01b031685604051612e899190613aac565b5f60405180830381855af49150503d805f8114612ec1576040519150601f19603f3d011682016040523d82523d5f602084013e612ec6565b606091505b5091509150612ed786838387612ee1565b9695505050505050565b60608315612f4f5782515f03612f48576001600160a01b0385163b612f485760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a65565b5081612335565b6123358383815115612f645781518083602001fd5b8060405162461bcd60e51b8152600401610a659190613b4c565b5f6101608284031215612575575f5ffd5b801515811461142a575f5ffd5b5f5f60408385031215612fad575f5ffd5b82356001600160401b03811115612fc2575f5ffd5b612fce85828601612f7e565b9250506020830135612fdf81612f8f565b809150509250929050565b5f60208284031215612ffa575f5ffd5b81356001600160401b0381111561300f575f5ffd5b61233584828501612f7e565b5f5b8381101561303557818101518382015260200161301d565b50505f910152565b5f815180845261305481602086016020860161301b565b601f01601f19169290920160200192915050565b80516001600160401b031682525f602082015161309060208501826001600160401b03169052565b5060408201516130a8604085018263ffffffff169052565b5060608201516130c360608501826001600160a01b03169052565b5060808201516130de60808501826001600160401b03169052565b5060a08201516130f960a08501826001600160a01b03169052565b5060c082015161311460c08501826001600160401b03169052565b5060e082015161312f60e08501826001600160a01b03169052565b5061010082015161314c6101008501826001600160a01b03169052565b5061012082015161012084015261014082015161016061014085015261233561016085018261303d565b828152604060208201525f6114396040830184613068565b5f5f5f604084860312156131a0575f5ffd5b83356001600160401b038111156131b5575f5ffd5b6131c186828701612f7e565b93505060208401356001600160401b038111156131dc575f5ffd5b8401601f810186136131ec575f5ffd5b80356001600160401b03811115613201575f5ffd5b866020828401011115613212575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b6005811061324757613247613223565b9052565b604081016132598285613237565b6004831061326957613269613223565b8260208301529392505050565b6001600160a01b038116811461142a575f5ffd5b803561329581613276565b919050565b5f602082840312156132aa575f5ffd5b813561143c81613276565b5f602082840312156132c5575f5ffd5b5035919050565b602081016116f58284613237565b80356001600160401b0381168114613295575f5ffd5b5f5f5f60608486031215613302575f5ffd5b61330b846132da565b925060208401359150604084013561332281612f8f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b03811182821017156133645761336461332d565b60405290565b5f82601f830112613379575f5ffd5b81356001600160401b038111156133925761339261332d565b604051601f8201601f19908116603f011681016001600160401b03811182821017156133c0576133c061332d565b6040528181528382016020018510156133d7575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613404575f5ffd5b823561340f81613276565b915060208301356001600160401b03811115613429575f5ffd5b6134358582860161336a565b9150509250929050565b5f6020828403121561344f575f5ffd5b61143c826132da565b5f5f60408385031215613469575f5ffd5b823591506020830135612fdf81612f8f565b803563ffffffff81168114613295575f5ffd5b5f610160828403121561349f575f5ffd5b6134a7613341565b90506134b2826132da565b81526134c0602083016132da565b60208201526134d16040830161347b565b60408201526134e26060830161328a565b60608201526134f3608083016132da565b608082015261350460a0830161328a565b60a082015261351560c083016132da565b60c082015261352660e0830161328a565b60e0820152613538610100830161328a565b61010082015261012082810135908201526101408201356001600160401b03811115613562575f5ffd5b61356e8482850161336a565b6101408301525092915050565b5f6020828403121561358b575f5ffd5b81356001600160401b038111156135a0575f5ffd5b6123358482850161348e565b5f5f604083850312156135bd575f5ffd5b82356135c881613276565b91506020830135612fdf81613276565b5f6116f5368361348e565b5f602082840312156135f3575f5ffd5b61143c8261347b565b5f6020828403121561360c575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116f5576116f5613661565b5f6001600160401b0382166001600160401b0381036136a9576136a9613661565b60010192915050565b602081525f61143c6020830184613068565b5f5f8335601e198436030181126136d9575f5ffd5b8301803591506001600160401b038211156136f2575f5ffd5b602001915036819003821315613706575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e19843603018112613736575f5ffd5b83016020810192503590506001600160401b03811115613754575f5ffd5b803603821315613706575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6137a482613797836132da565b6001600160401b03169052565b5f6137b1602083016132da565b6001600160401b031660208401526137cb6040830161347b565b63ffffffff1660408401526137e26060830161328a565b6001600160a01b031660608401526137fc608083016132da565b6001600160401b0316608084015261381660a0830161328a565b6001600160a01b031660a084015261383060c083016132da565b6001600160401b031660c084015261384a60e0830161328a565b6001600160a01b031660e0840152613865610100830161328a565b6001600160a01b0316610100840152610120828101359084015261388d610140830183613721565b610160610140860152612ab561016086018284613762565b60a081525f6138b760a083018561378a565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f602082840312156139a1575f5ffd5b815161143c81612f8f565b63ffffffff81811683821601908111156116f5576116f5613661565b604081525f6139da604083018561378a565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f61143c6080830184613068565b80356001600160e01b03198116906004841015613a50576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f613aa1608083018486613762565b979650505050505050565b5f8251613abd81846020870161301b565b9190910192915050565b5f82613ae157634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613af6575f5ffd5b815161143c81613276565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b602081525f61143c602083018461303d56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206e61aad42c8b57a755963db756b535ddf30400977c2a5a7162959c1da600b0a664736f6c634300081b0033", - "balance": "0x0" - }, - "0x1670010000000000000000000000000000000001": { - "contractName": "Bridge", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670010000000000000000000000000000000006", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000000001" - }, - "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", - "balance": "0x033b258556117b43a1e00000" - }, - "0x0167001000000000000000000000000000000002": { - "contractName": "ERC20VaultImpl", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" - }, - "code": "0x6080604052600436106101ba575f3560e01c806367090ccf116100f25780639aa8605c11610092578063e07baba611610062578063e07baba6146104e3578063e30c397814610519578063f09a401614610536578063f2fde38b14610555575f5ffd5b80639aa8605c1461045e578063a86f9d9e1461048e578063b84d9ffe146104ad578063d56ad7ac146104cd575f5ffd5b80637f07c947116100cd5780637f07c947146104065780638456cb59146104195780638abf60771461042d5780638da5cb5b14610441575f5ffd5b806367090ccf1461039e578063715018a6146103de57806379ba5097146103f2575f5ffd5b80633659cfe61161015d5780633f4ba83a116101385780633f4ba83a146103435780634f1ef2861461035757806352d1902d1461036a5780635c975abb1461037e575f5ffd5b80633659cfe6146102e65780633ab76e9f146103055780633eb6b8cf14610324575f5ffd5b806306fdde031161019857806306fdde031461024c5780630e7eeb791461026c5780630ecd8be91461029b5780633075db56146102d2575f5ffd5b80630178733a146101be57806301ffc9a7146101d3578063066fe7b414610207575b5f5ffd5b6101d16101cc366004613350565b610574565b005b3480156101de575f5ffd5b506101f26101ed366004613396565b610702565b60405190151581526020015b60405180910390f35b348015610212575f5ffd5b5061023e6102213660046133d1565b61013060209081525f928352604080842090915290825290205481565b6040519081526020016101fe565b348015610257575f5ffd5b506a195c98cc8c17dd985d5b1d60aa1b61023e565b348015610277575f5ffd5b506101f26102863660046133ff565b61012f6020525f908152604090205460ff1681565b3480156102a6575f5ffd5b506102ba6102b536600461341a565b610752565b6040516001600160a01b0390911681526020016101fe565b3480156102dd575f5ffd5b506101f2610e60565b3480156102f1575f5ffd5b506101d16103003660046133ff565b610e78565b348015610310575f5ffd5b506097546102ba906001600160a01b031681565b34801561032f575f5ffd5b506102ba61033e366004613482565b610f48565b34801561034e575f5ffd5b506101d1610f5e565b6101d16103653660046135ca565b610f72565b348015610375575f5ffd5b5061023e611027565b348015610389575f5ffd5b506101f260c954610100900460ff1660021490565b3480156103a9575f5ffd5b506102ba6103b83660046133d1565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b3480156103e9575f5ffd5b506101d16110d8565b3480156103fd575f5ffd5b506101d16110e9565b6101d1610414366004613616565b611160565b348015610424575f5ffd5b506101d16112b0565b348015610438575f5ffd5b506102ba6112c3565b34801561044c575f5ffd5b506033546001600160a01b03166102ba565b348015610469575f5ffd5b5061047d6104783660046133ff565b6112d1565b6040516101fe9594939291906136cf565b348015610499575f5ffd5b506102ba6104a8366004613728565b611426565b6104c06104bb36600461374b565b611432565b6040516101fe9190613764565b3480156104d8575f5ffd5b5061023e6276a70081565b3480156104ee575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b0390911681526020016101fe565b348015610524575f5ffd5b506065546001600160a01b03166102ba565b348015610541575f5ffd5b506101d1610550366004613854565b611875565b348015610560575f5ffd5b506101d161056f3660046133ff565b611984565b61058860c954610100900460ff1660021490565b156105a65760405163bae6e2a960e01b815260040160405180910390fd5b60026105b460c95460ff1690565b60ff16036105d55760405163dfc60d8560e01b815260040160405180910390fd5b6105df60026119f5565b6105e7611a0b565b505f6105f7610140840184613870565b6106059160049082906138b9565b81019061061291906138e0565b90505f5f8280602001905181019061062a919061398c565b9350505091505f61064e838760a001602081019061064891906133ff565b84611b01565b905061067861012087013561066960c0890160a08a016133ff565b6001600160a01b031690611ba9565b61068860c0870160a088016133ff565b6001600160a01b0316857f3dea0f5955b148debf6212261e03bd80eaf8534bee43780452d16637dcc22dd5856020015184866040516106e8939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a3505050506106fe60016119f5565b5050565b5f6001600160e01b0319821662bc399d60e11b148061073157506001600160e01b03198216637f07c94760e01b145b8061074c57506001600160e01b031982166301ffc9a760e01b145b92915050565b5f61075b611bb4565b600261076960c95460ff1690565b60ff160361078a5760405163dfc60d8560e01b815260040160405180910390fd5b61079460026119f5565b6001600160a01b03821615806107ca57506001600160a01b038281165f90815261012d6020526040902054600160401b90041615155b806107dd57506001600160a01b0382163b155b156107fb5760405163dc63f98760e01b815260040160405180910390fd5b5f61080c60408501602086016133ff565b6001600160a01b0316148061083557504661082a6020850185613a80565b6001600160401b0316145b1561085357604051638257f7f560e01b815260040160405180910390fd5b6001600160a01b0382165f90815261012f602052604090205460ff161561088d576040516375c42fc160e01b815260040160405180910390fd5b5f6101308161089f6020870187613a80565b6001600160401b031681526020019081526020015f205f8560200160208101906108c991906133ff565b6001600160a01b0316815260208101919091526040015f205490506108f16276a70082613aaf565b4210156109115760405163231d35fb60e11b815260040160405180910390fd5b61012e5f6109226020870187613a80565b6001600160401b031681526020019081526020015f205f85602001602081019061094c91906133ff565b6001600160a01b03908116825260208201929092526040015f20541691508115610cb2576001600160a01b038281165f90815261012d60209081526040808320815160a08101835281546001600160401b0381168252600160401b810490961693810193909352600160e01b90940460ff1690820152600183018054929391926060840191906109db90613ac2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0790613ac2565b8015610a525780601f10610a2957610100808354040283529160200191610a52565b820191905f5260205f20905b815481529060010190602001808311610a3557829003601f168201915b50505050508152602001600282018054610a6b90613ac2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9790613ac2565b8015610ae25780601f10610ab957610100808354040283529160200191610ae2565b820191905f5260205f20905b815481529060010190602001808311610ac557829003601f168201915b505050505081525050905080604051602001610afe9190613b59565b6040516020818303038152906040528051906020012085604051602001610b259190613bdf565b6040516020818303038152906040528051906020012014610b5957604051632f9d1d7b60e11b815260040160405180910390fd5b6001600160a01b0383165f90815261012d6020526040812080546001600160e81b031916815590610b8d60018301826132f8565b610b9a600283015f6132f8565b50506001600160a01b0383165f81815261012f60205260409020805460ff19166001179055610bd09063b8f2e0c560e01b611c0e565b8015610bf15750610bf16001600160a01b03851663b8f2e0c560e01b611c0e565b15610cb05760405163b8f2e0c560e01b81526001600160a01b0385811660048301525f602483015284169063b8f2e0c5906044015f604051808303815f87803b158015610c3c575f5ffd5b505af1158015610c4e573d5f5f3e3d5ffd5b505060405163b8f2e0c560e01b81526001600160a01b038681166004830152600160248301528716925063b8f2e0c591506044015f604051808303815f87803b158015610c99575f5ffd5b505af1158015610cab573d5f5f3e3d5ffd5b505050505b505b6001600160a01b0383165f90815261012d602052604090208490610cd68282613d82565b5083905061012e5f610ceb6020880188613a80565b6001600160401b031681526020019081526020015f205f866020016020810190610d1591906133ff565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550426101305f865f016020810190610d6e9190613a80565b6001600160401b031681526020019081526020015f205f866020016020810190610d9891906133ff565b6001600160a01b03166001600160a01b031681526020019081526020015f2081905550836020016020810190610dce91906133ff565b6001600160a01b0316610de46020860186613a80565b6001600160401b03167f031d68e1805917560c34a5f55a7dd91bef98f911190ed02cdbb53caedae6c39d8486610e1d60608a018a613870565b610e2a60808c018c613870565b610e3a60608e0160408f01613e40565b604051610e4d9796959493929190613e5b565b60405180910390a35061074c60016119f5565b5f6002610e6f60c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000000002163003610ec95760405162461bcd60e51b8152600401610ec090613eb2565b60405180910390fd5b7f00000000000000000000000001670010000000000000000000000000000000026001600160a01b0316610efb611cde565b6001600160a01b031614610f215760405162461bcd60e51b8152600401610ec090613efe565b610f2a81611cf9565b604080515f80825260208201909252610f4591839190611d01565b50565b5f610f54848484611e6b565b90505b9392505050565b610f66611ec7565b610f70335f611f57565b565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000000002163003610fba5760405162461bcd60e51b8152600401610ec090613eb2565b7f00000000000000000000000001670010000000000000000000000000000000026001600160a01b0316610fec611cde565b6001600160a01b0316146110125760405162461bcd60e51b8152600401610ec090613efe565b61101b82611cf9565b6106fe82826001611d01565b5f306001600160a01b037f000000000000000000000000016700100000000000000000000000000000000216146110c65760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ec0565b505f5160206149de5f395f51905f5290565b6110e0611bb4565b610f705f611f5f565b60655433906001600160a01b031681146111575760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ec0565b610f4581611f5f565b61117460c954610100900460ff1660021490565b156111925760405163bae6e2a960e01b815260040160405180910390fd5b60026111a060c95460ff1690565b60ff16036111c15760405163dfc60d8560e01b815260040160405180910390fd5b6111cb60026119f5565b5f8080806111db85870187613f55565b93509350935093505f6111ec611f78565b90506111f783612097565b5f611203868585611b01565b90506112186001600160a01b03851634611ba9565b836001600160a01b0316856001600160a01b0316835f01517f75a051823424fc80e92556c41cb0ad977ae1dcb09c68a9c38acab86b11a69f8985604001518a60200151868960405161129894939291906001600160401b039490941684526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a45050505050506106fe60016119f5565b6112b86120d3565b610f70336001611f57565b5f6112cc611cde565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b84046001600160a01b031693600160e01b900460ff1692909161131990613ac2565b80601f016020809104026020016040519081016040528092919081815260200182805461134590613ac2565b80156113905780601f1061136757610100808354040283529160200191611390565b820191905f5260205f20905b81548152906001019060200180831161137357829003601f168201915b5050505050908060020180546113a590613ac2565b80601f01602080910402602001604051908101604052809291908181526020018280546113d190613ac2565b801561141c5780601f106113f35761010080835404028352916020019161141c565b820191905f5260205f20905b8154815290600101906020018083116113ff57829003601f168201915b5050505050905085565b5f610f57468484611e6b565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201929092526101408101919091526114a060c954610100900460ff1660021490565b156114be5760405163bae6e2a960e01b815260040160405180910390fd5b60026114cc60c95460ff1690565b60ff16036114ed5760405163dfc60d8560e01b815260040160405180910390fd5b6114f760026119f5565b8160c001355f0361151b57604051634299323b60e11b815260040160405180910390fd5b5f61152c60a08401608085016133ff565b6001600160a01b031603611553576040516303f8a7d360e01b815260040160405180910390fd5b61012f5f61156760a08501608086016133ff565b6001600160a01b0316815260208101919091526040015f205460ff16156115a1576040516375c42fc160e01b815260040160405180910390fd5b6115b16080830160608401613a80565b6001600160401b03163410156115da57604051630178ce0b60e31b815260040160405180910390fd5b5f5f5f6115e685612144565b6040805161016081019091525f8082529396509194509250602081016116126080890160608a01613a80565b6001600160401b0316815260200161163060c0890160a08a0161405a565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061166190890189613a80565b6001600160401b031681526020015f6001600160a01b031688602001602081019061168c91906133ff565b6001600160a01b0316036116a057336116b0565b6116b06040890160208a016133ff565b6001600160a01b031681526020908101906116e7906116d1908a018a613a80565b6a195c98cc8c17dd985d5b1d60aa1b5b5f610f48565b6001600160a01b031681526020016117056080890160608a01613a80565b611718906001600160401b031634614075565b815260200185905290505f6117366562726964676560d01b82611426565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b81526004016117629190613764565b5f6040518083038185885af115801561177d573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526117a59190810190614093565b965090506117b960608801604089016133ff565b6001600160a01b03168660a001516001600160a01b0316827f256f5c87f6ab8d238ac244067613227eb6e2cd65299121135d4f778e8581e03d875f01518b5f0160208101906118089190613a80565b89602001518d608001602081019061182091906133ff565b604080516001600160401b0395861681529390941660208401526001600160a01b03918216838501521660608201526080810189905290519081900360a00190a4505050505061187060016119f5565b919050565b5f54610100900460ff161580801561189357505f54600160ff909116105b806118ac5750303b1580156118ac57505f5460ff166001145b61190f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ec0565b5f805460ff191660011790558015611930575f805461ff0019166101001790555b61193a83836125de565b801561197f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61198c611bb4565b606580546001600160a01b0383166001600160a01b031990911681179091556119bd6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611a3c816001611426565b6001600160a01b0316336001600160a01b031614611a6d57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611aa9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611acd91906141b3565b60208101519092506001600160a01b03163314611afd57604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b031603611b3457506020830151611b2f6001600160a01b0382168484612618565b611b9f565b611b3d8461267b565b6040516340c10f1960e01b81526001600160a01b03858116600483015260248201859052919250908216906340c10f19906044015f604051808303815f87803b158015611b88575f5ffd5b505af1158015611b9a573d5f5f3e3d5ffd5b505050505b610f5781836126bd565b6106fe82825a61274c565b6033546001600160a01b03163314610f705760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ec0565b6040516001600160e01b0319821660248201525f90819081906001600160a01b0386169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b17905251611c6a919061421b565b5f60405180830381855afa9150503d805f8114611ca2576040519150601f19603f3d011682016040523d82523d5f602084013e611ca7565b606091505b5091509150818015611cba575080516020145b15611cd65780806020019051810190611cd39190614236565b92505b505092915050565b5f5160206149de5f395f51905f52546001600160a01b031690565b610f45611bb4565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611d345761197f8361278f565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611d8e575060408051601f3d908101601f19168201909252611d8b91810190614251565b60015b611df15760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ec0565b5f5160206149de5f395f51905f528114611e5f5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ec0565b5061197f83838361282a565b5f611e768484612854565b90508180611e8c57506001600160a01b03811615155b84849091611ebe57604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610ec0565b50509392505050565b611edb60c954610100900460ff1660021490565b611ef85760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6106fe611bb4565b606580546001600160a01b0319169055610f45816128fe565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611fa9816001611426565b6001600160a01b0316336001600160a01b031614611fda57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612016573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061203a91906141b3565b91505f61205a83604001516116e16a195c98cc8c17dd985d5b1d60aa1b90565b9050806001600160a01b031683602001516001600160a01b03161461209257604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b03811615806120b557506001600160a01b03811630145b15610f4557604051635b50f3f960e01b815260040160405180910390fd5b6120e760c954610100900460ff1660021490565b156121055760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611f4d565b6040805160a0810182525f8082526020820181905291810191909152606081810181905260808201819052905f8061012d8161218660a08801608089016133ff565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156123bc576040805160a08101825282546001600160401b0381168252600160401b81046001600160a01b03166020830152600160e01b900460ff16918101919091526001820180548391606084019161220690613ac2565b80601f016020809104026020016040519081016040528092919081815260200182805461223290613ac2565b801561227d5780601f106122545761010080835404028352916020019161227d565b820191905f5260205f20905b81548152906001019060200180831161226057829003601f168201915b5050505050815260200160028201805461229690613ac2565b80601f01602080910402602001604051908101604052809291908181526020018280546122c290613ac2565b801561230d5780601f106122e45761010080835404028352916020019161230d565b820191905f5260205f20905b8154815290600101906020018083116122f057829003601f168201915b505050505081525050925061234633308760c0013588608001602081019061233591906133ff565b6001600160a01b031692919061294f565b61235660a08601608087016133ff565b604051630852cd8d60e31b815260c087013560048201526001600160a01b0391909116906342966c68906024015f604051808303815f87803b15801561239a575f5ffd5b505af11580156123ac573d5f5f3e3d5ffd5b505050508460c00135915061255e565b6040518060a00160405280466001600160401b031681526020018660800160208101906123e991906133ff565b6001600160a01b0316815260200161240f61240a60a0890160808a016133ff565b612987565b60ff16815260200161242f61242a60a0890160808a016133ff565b612a3b565b815260200161244c61244760a0890160808a016133ff565b612ae5565b905292505f61246160a08701608088016133ff565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156124a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124cc9190614251565b90506124e76001600160a01b038316333060c08b013561294f565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa15801561252b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061254f9190614251565b6125599190614075565b935050505b30637f07c947843361257660608a0160408b016133ff565b8660405160200161258a9493929190614268565b60408051601f19818403018152908290526125a79160240161429d565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509350509193909250565b806001600160a01b0381166126065760405163538ba4f960e01b815260040160405180910390fd5b61260f83612b2b565b61197f82612b89565b6040516001600160a01b03831660248201526044810182905261197f90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612bf9565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b03908116855292529091205416806118705761074c82612ccc565b5f6126d96c38bab7ba30afb6b0b730b3b2b960991b6001611426565b90506001600160a01b0381161561197f576040516315c638fb60e31b81526001600160a01b0384811660048301526024820184905282169063ae31c7d8906044015f604051808303815f87803b158015612731575f5ffd5b505af1158015612743573d5f5f3e3d5ffd5b50505050505050565b815f0361275857505050565b61277283838360405180602001604052805f815250612ece565b61197f57604051634c67134d60e11b815260040160405180910390fd5b6001600160a01b0381163b6127fc5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ec0565b5f5160206149de5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b61283383612f0b565b5f8251118061283f5750805b1561197f5761284e8383612f4a565b50505050565b6097545f906001600160a01b03168061288057604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa1580156128d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f691906142af565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040516001600160a01b038085166024830152831660448201526064810182905261284e9085906323b872dd60e01b90608401612644565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f91829182916001600160a01b038616916129cc919061421b565b5f60405180830381855afa9150503d805f8114612a04576040519150601f19603f3d011682016040523d82523d5f602084013e612a09565b606091505b5091509150818015612a1c575080516020145b612a275760126128f6565b808060200190518101906128f691906142ca565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b03861691612a81919061421b565b5f60405180830381855afa9150503d805f8114612ab9576040519150601f19603f3d011682016040523d82523d5f602084013e612abe565b606091505b509150915081612adc5760405180602001604052805f8152506128f6565b6128f681612f6f565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b03861691612a81919061421b565b5f54610100900460ff16612b515760405162461bcd60e51b8152600401610ec0906142e5565b612b596130dc565b612b776001600160a01b03821615612b715781611f5f565b33611f5f565b5060c9805461ff001916610100179055565b5f54610100900460ff16612baf5760405162461bcd60e51b8152600401610ec0906142e5565b6001600160401b03461115612bd75760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f612c4d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131029092919063ffffffff16565b905080515f1480612c6d575080806020019051810190612c6d9190614236565b61197f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ec0565b5f5f612ce06033546001600160a01b031690565b60975460208501518551604080880151606089015160808a01519251612d1697966001600160a01b031695949390602401614330565b60408051601f198184030181529190526020810180516001600160e01b031663bb86ef9360e01b1790529050612d5c6c0627269646765645f657263323609c1b5f611426565b81604051612d699061332f565b612d7492919061439b565b604051809103905ff080158015612d8d573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d602090815260409182902087518154928901519389015160ff16600160e01b0260ff60e01b1994909516600160401b026001600160e01b03199093166001600160401b03909116179190911791909116919091178155606085015191935084916001820190612e0f90826143be565b5060808201516002820190612e2490826143be565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b0319168885169081179091559151885160608a015160808b0151848c01519451959850929095169516937fb6b427556e8cb0ebf9175da4bc48c64c4f56e44cfaf8c3ab5ebf8e2ea130907993612ec09391929190614478565b60405180910390a450919050565b5f6001600160a01b038516612ef657604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b612f148161278f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610f5783836040518060600160405280602781526020016149fe60279139613110565b60606040825110612f8e578180602001905181019061074c91906144b0565b81516020036130c9575f5b60208160ff16108015612fce5750828160ff1681518110612fbc57612fbc6144e1565b01602001516001600160f81b03191615155b15612fe55780612fdd816144f5565b915050612f99565b5f8160ff166001600160401b03811115613001576130016134c1565b6040519080825280601f01601f19166020018201604052801561302b576020820181803683370190505b5090505f91505b60208260ff161080156130675750838260ff1681518110613055576130556144e1565b01602001516001600160f81b03191615155b15610f5757838260ff1681518110613081576130816144e1565b602001015160f81c60f81b818360ff16815181106130a1576130a16144e1565b60200101906001600160f81b03191690815f1a905350816130c1816144f5565b925050613032565b505060408051602081019091525f815290565b5f54610100900460ff16610f705760405162461bcd60e51b8152600401610ec0906142e5565b6060610f5484845f85613184565b60605f5f856001600160a01b03168560405161312c919061421b565b5f60405180830381855af49150503d805f8114613164576040519150601f19603f3d011682016040523d82523d5f602084013e613169565b606091505b509150915061317a8683838761325b565b9695505050505050565b6060824710156131e55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ec0565b5f5f866001600160a01b03168587604051613200919061421b565b5f6040518083038185875af1925050503d805f811461323a576040519150601f19603f3d011682016040523d82523d5f602084013e61323f565b606091505b50915091506132508783838761325b565b979650505050505050565b606083156132c95782515f036132c2576001600160a01b0385163b6132c25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ec0565b50816128f6565b6128f683838151156132de5781518083602001fd5b8060405162461bcd60e51b8152600401610ec0919061429d565b50805461330490613ac2565b5f825580601f10613313575050565b601f0160209004905f5260205f2090810190610f45919061333c565b6104ca8061451483390190565b5b80821115611afd575f815560010161333d565b5f5f60408385031215613361575f5ffd5b82356001600160401b03811115613376575f5ffd5b83016101608186031215613388575f5ffd5b946020939093013593505050565b5f602082840312156133a6575f5ffd5b81356001600160e01b031981168114610f57575f5ffd5b6001600160a01b0381168114610f45575f5ffd5b5f5f604083850312156133e2575f5ffd5b8235915060208301356133f4816133bd565b809150509250929050565b5f6020828403121561340f575f5ffd5b8135610f57816133bd565b5f5f6040838503121561342b575f5ffd5b82356001600160401b03811115613440575f5ffd5b830160a08186031215613451575f5ffd5b915060208301356133f4816133bd565b6001600160401b0381168114610f45575f5ffd5b8015158114610f45575f5ffd5b5f5f5f60608486031215613494575f5ffd5b833561349f81613461565b92506020840135915060408401356134b681613475565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156134f7576134f76134c1565b60405290565b60405161016081016001600160401b03811182821017156134f7576134f76134c1565b604051601f8201601f191681016001600160401b0381118282101715613548576135486134c1565b604052919050565b5f6001600160401b03821115613568576135686134c1565b50601f01601f191660200190565b5f82601f830112613585575f5ffd5b8135602083015f61359d61359884613550565b613520565b90508281528583830111156135b0575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f604083850312156135db575f5ffd5b82356135e6816133bd565b915060208301356001600160401b03811115613600575f5ffd5b61360c85828601613576565b9150509250929050565b5f5f60208385031215613627575f5ffd5b82356001600160401b0381111561363c575f5ffd5b8301601f8101851361364c575f5ffd5b80356001600160401b03811115613661575f5ffd5b856020828401011115613672575f5ffd5b6020919091019590945092505050565b5f5b8381101561369c578181015183820152602001613684565b50505f910152565b5f81518084526136bb816020860160208601613682565b601f01601f19169290920160200192915050565b6001600160401b03861681526001600160a01b038516602082015260ff8416604082015260a0606082018190525f9061370a908301856136a4565b828103608084015261371c81856136a4565b98975050505050505050565b5f5f60408385031215613739575f5ffd5b8235915060208301356133f481613475565b5f60e082840312801561375c575f5ffd5b509092915050565b6020815261377e6020820183516001600160401b03169052565b5f602083015161379960408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526128f66101808401826136a4565b5f5f60408385031215613865575f5ffd5b8235613451816133bd565b5f5f8335601e19843603018112613885575f5ffd5b8301803591506001600160401b0382111561389e575f5ffd5b6020019150368190038213156138b2575f5ffd5b9250929050565b5f5f858511156138c7575f5ffd5b838611156138d3575f5ffd5b5050820193919092039150565b5f602082840312156138f0575f5ffd5b81356001600160401b03811115613905575f5ffd5b6128f684828501613576565b805161187081613461565b8051611870816133bd565b60ff81168114610f45575f5ffd5b805161187081613927565b5f82601f83011261394f575f5ffd5b8151602083015f61396261359884613550565b9050828152858383011115613975575f5ffd5b613983836020830184613682565b95945050505050565b5f5f5f5f6080858703121561399f575f5ffd5b84516001600160401b038111156139b4575f5ffd5b850160a081880312156139c5575f5ffd5b6139cd6134d5565b81516139d881613461565b815260208201516139e8816133bd565b60208201526139f960408301613935565b604082015260608201516001600160401b03811115613a16575f5ffd5b613a2289828501613940565b60608301525060808201516001600160401b03811115613a40575f5ffd5b613a4c89828501613940565b6080830152509450613a6290506020860161391c565b9250613a706040860161391c565b6060959095015193969295505050565b5f60208284031215613a90575f5ffd5b8135610f5781613461565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561074c5761074c613a9b565b600181811c90821680613ad657607f821691505b602082108103613af457634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160401b03815116825260018060a01b03602082015116602083015260ff60408201511660408301525f606082015160a06060850152613b4060a08501826136a4565b905060808301518482036080860152611cd382826136a4565b602081525f610f576020830184613afa565b803561187081613927565b5f5f8335601e19843603018112613b8b575f5ffd5b83016020810192503590506001600160401b03811115613ba9575f5ffd5b8036038213156138b2575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f8235613bef81613461565b6001600160401b0381166020840152506020830135613c0d816133bd565b6001600160a01b0316604083810191909152830135613c2b81613927565b60ff8116606084015250613c426060840184613b76565b60a06080850152613c5760c085018284613bb7565b915050613c676080850185613b76565b848303601f190160a086015261317a838284613bb7565b601f82111561197f57805f5260205f20601f840160051c81016020851015613ca35750805b601f840160051c820191505b81811015613cc2575f8155600101613caf565b5050505050565b6001600160401b03831115613ce057613ce06134c1565b613cf483613cee8354613ac2565b83613c7e565b5f601f841160018114613d25575f8515613d0e5750838201355b5f19600387901b1c1916600186901b178355613cc2565b5f83815260208120601f198716915b82811015613d545786850135825560209485019460019092019101613d34565b5086821015613d70575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135613d8d81613461565b6001600160401b03811690508154816001600160401b031982161783556020840135613db8816133bd565b6001600160e01b031991909116909117604091821b68010000000000000000600160e01b03161782555f90830135613def81613927565b825460ff60e01b191660e09190911b60ff60e01b1617825550613e156060830183613870565b613e23818360018601613cc9565b5050613e326080830183613870565b61284e818360028601613cc9565b5f60208284031215613e50575f5ffd5b8135610f5781613927565b6001600160a01b0388811682528716602082015260a0604082018190525f90613e879083018789613bb7565b8281036060840152613e9a818688613bb7565b91505060ff8316608083015298975050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b8035611870816133bd565b5f5f5f5f60808587031215613f68575f5ffd5b84356001600160401b03811115613f7d575f5ffd5b850160a08188031215613f8e575f5ffd5b613f966134d5565b8135613fa181613461565b81526020820135613fb1816133bd565b6020820152613fc260408301613b6b565b604082015260608201356001600160401b03811115613fdf575f5ffd5b613feb89828501613576565b60608301525060808201356001600160401b03811115614009575f5ffd5b61401589828501613576565b608083015250945061402b905060208601613f4a565b925061403960408601613f4a565b9396929550929360600135925050565b63ffffffff81168114610f45575f5ffd5b5f6020828403121561406a575f5ffd5b8135610f5781614049565b8181038181111561074c5761074c613a9b565b805161187081614049565b5f5f604083850312156140a4575f5ffd5b825160208401519092506001600160401b038111156140c1575f5ffd5b830161016081860312156140d3575f5ffd5b6140db6134fd565b6140e482613911565b81526140f260208301613911565b602082015261410360408301614088565b60408201526141146060830161391c565b606082015261412560808301613911565b608082015261413660a0830161391c565b60a082015261414760c08301613911565b60c082015261415860e0830161391c565b60e082015261416a610100830161391c565b61010082015261012082810151908201526101408201516001600160401b03811115614194575f5ffd5b6141a087828501613940565b6101408301525080925050509250929050565b5f60608284031280156141c4575f5ffd5b50604051606081016001600160401b03811182821017156141e7576141e76134c1565b6040528251815260208301516141fc816133bd565b6020820152604083015161420f81613461565b60408201529392505050565b5f825161422c818460208701613682565b9190910192915050565b5f60208284031215614246575f5ffd5b8151610f5781613475565b5f60208284031215614261575f5ffd5b5051919050565b608081525f61427a6080830187613afa565b6001600160a01b0395861660208401529390941660408201526060015292915050565b602081525f610f5760208301846136a4565b5f602082840312156142bf575f5ffd5b8151610f57816133bd565b5f602082840312156142da575f5ffd5b8151610f5781613927565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0388811682528781166020830152861660408201526001600160401b038516606082015260ff8416608082015260e060a082018190525f9061437b908301856136a4565b82810360c084015261438d81856136a4565b9a9950505050505050505050565b6001600160a01b03831681526040602082018190525f90610f54908301846136a4565b81516001600160401b038111156143d7576143d76134c1565b6143eb816143e58454613ac2565b84613c7e565b6020601f82116001811461441d575f83156144065750848201515b5f19600385901b1c1916600184901b178455613cc2565b5f84815260208120601f198516915b8281101561444c578785015182556020948501946001909201910161442c565b508482101561446957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f61448a60608301866136a4565b828103602084015261449c81866136a4565b91505060ff83166040830152949350505050565b5f602082840312156144c0575f5ffd5b81516001600160401b038111156144d5575f5ffd5b6128f684828501613940565b634e487b7160e01b5f52603260045260245ffd5b5f60ff821660ff810361450a5761450a613a9b565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122081cb565f479e4a5edf2c2fd18d805122a8190cec8f0969065a9660e524c17c9964736f6c634300081b0033", - "balance": "0x0" - }, - "0x1670010000000000000000000000000000000002": { - "contractName": "ERC20Vault", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000201", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670010000000000000000000000000000000006", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000000002" - }, - "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", - "balance": "0x0" - }, - "0x0167001000000000000000000000000000000003": { - "contractName": "ERC721VaultImpl", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" - }, - "code": "0x60806040526004361061017b575f3560e01c806367090ccf116100cd5780638da5cb5b11610087578063e07baba611610062578063e07baba614610449578063e30c39781461047f578063f09a40161461049c578063f2fde38b146104bb575f5ffd5b80638da5cb5b146103de5780639aa8605c146103fb578063a86f9d9e1461042a575f5ffd5b806367090ccf1461033b578063715018a61461037b57806379ba50971461038f5780637f07c947146103a35780638456cb59146103b65780638abf6077146103ca575f5ffd5b80633659cfe6116101385780633f4ba83a116101135780633f4ba83a146102e05780634f1ef286146102f457806352d1902d146103075780635c975abb1461031b575f5ffd5b80633659cfe61461026b5780633ab76e9f1461028a5780633eb6b8cf146102c1575f5ffd5b80630178733a1461017f57806301ffc9a71461019457806306fdde03146101c8578063150b7a02146101f35780631f59a830146102375780633075db5614610257575b5f5ffd5b61019261018d366004612930565b6104da565b005b34801561019f575f5ffd5b506101b36101ae366004612976565b61068d565b60405190151581526020015b60405180910390f35b3480156101d3575f5ffd5b506b195c98cdcc8c57dd985d5b1d60a21b5b6040519081526020016101bf565b3480156101fe575f5ffd5b5061021e61020d366004612a00565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101bf565b61024a610245366004612a6d565b6106dd565b6040516101bf9190612af1565b348015610262575f5ffd5b506101b3610b63565b348015610276575f5ffd5b50610192610285366004612be1565b610b7b565b348015610295575f5ffd5b506097546102a9906001600160a01b031681565b6040516001600160a01b0390911681526020016101bf565b3480156102cc575f5ffd5b506102a96102db366004612c28565b610c4b565b3480156102eb575f5ffd5b50610192610c61565b610192610302366004612d93565b610c75565b348015610312575f5ffd5b506101e5610d2a565b348015610326575f5ffd5b506101b360c954610100900460ff1660021490565b348015610346575f5ffd5b506102a9610355366004612ddf565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b348015610386575f5ffd5b50610192610ddb565b34801561039a575f5ffd5b50610192610dec565b6101926103b1366004612e0d565b610e63565b3480156103c1575f5ffd5b50610192610fcc565b3480156103d5575f5ffd5b506102a9610fdf565b3480156103e9575f5ffd5b506033546001600160a01b03166102a9565b348015610406575f5ffd5b5061041a610415366004612be1565b610fed565b6040516101bf9493929190612e4b565b348015610435575f5ffd5b506102a9610444366004612e9a565b611138565b348015610454575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b0390911681526020016101bf565b34801561048a575f5ffd5b506065546001600160a01b03166102a9565b3480156104a7575f5ffd5b506101926104b6366004612ebd565b611144565b3480156104c6575f5ffd5b506101926104d5366004612be1565b611253565b6104ee60c954610100900460ff1660021490565b1561050c5760405163bae6e2a960e01b815260040160405180910390fd5b600261051a60c95460ff1690565b60ff160361053b5760405163dfc60d8560e01b815260040160405180910390fd5b61054560026112c4565b61054d6112da565b505f61055d610140840184612ee9565b61056b916004908290612f2b565b8101906105789190612f52565b90505f5f82806020019051810190610590919061306c565b9350505091505f6105b4838760a00160208101906105ae9190612be1565b846113d0565b90506105de6101208701356105cf60c0890160a08a01612be1565b6001600160a01b031690611547565b6105ee60c0870160a08801612be1565b6001600160a01b0316857fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8560200151848687516001600160401b0381111561063957610639612c67565b604051908082528060200260200182016040528015610662578160200160208202803683370190505b5060405161067394939291906131ab565b60405180910390a35050505061068960016112c4565b5050565b5f6001600160e01b0319821662bc399d60e11b14806106bc57506001600160e01b03198216637f07c94760e01b145b806106d757506001600160e01b031982166301ffc9a760e01b145b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261074b60c954610100900460ff1660021490565b156107695760405163bae6e2a960e01b815260040160405180910390fd5b6107728261325f565b8060e00151518160c00151511461079c5760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107c7576040516303f8a7d360e01b815260040160405180910390fd5b60026107d560c95460ff1690565b60ff16036107f65760405163dfc60d8560e01b815260040160405180910390fd5b61080060026112c4565b6108106080840160608501613332565b6001600160401b031634101561083957604051630178ce0b60e31b815260040160405180910390fd5b5f5b61084860c085018561334d565b905081101561089c5761085e60e085018561334d565b8281811061086e5761086e613392565b905060200201355f1461089457604051634299323b60e11b815260040160405180910390fd5b60010161083b565b506108c76380ac58cd60e01b6108b860a0860160808701612be1565b6001600160a01b031690611552565b6108e457604051633ee915f560e11b815260040160405180910390fd5b5f5f6108ef85611622565b6040805161016081019091525f808252929450909250602081016109196080890160608a01613332565b6001600160401b0316815260200161093760c0890160a08a016133a6565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061096890890189613332565b6001600160401b031681526020015f6001600160a01b03168860200160208101906109939190612be1565b6001600160a01b0316036109a757336109b7565b6109b76040890160208a01612be1565b6001600160a01b031681526020908101906109ef906109d8908a018a613332565b6b195c98cdcc8c57dd985d5b1d60a21b5b5f610c4b565b6001600160a01b03168152602001610a0d6080890160608a01613332565b610a20906001600160401b0316346133d5565b815260200184905290505f610a3e6562726964676560d01b82611138565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a6a9190612af1565b5f6040518083038185885af1158015610a85573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610aad91908101906133f3565b96509050610ac16060880160408901612be1565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610b179190612be1565b610b2460c08f018f61334d565b8f8060e00190610b34919061334d565b604051610b479796959493929190613543565b60405180910390a450505050610b5d60016112c4565b50919050565b5f6002610b7260c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000000003163003610bcc5760405162461bcd60e51b8152600401610bc39061359f565b60405180910390fd5b7f00000000000000000000000001670010000000000000000000000000000000036001600160a01b0316610bfe611b04565b6001600160a01b031614610c245760405162461bcd60e51b8152600401610bc3906135eb565b610c2d81611b1f565b604080515f80825260208201909252610c4891839190611b27565b50565b5f610c57848484611c91565b90505b9392505050565b610c69611ced565b610c73335f611d7d565b565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000000003163003610cbd5760405162461bcd60e51b8152600401610bc39061359f565b7f00000000000000000000000001670010000000000000000000000000000000036001600160a01b0316610cef611b04565b6001600160a01b031614610d155760405162461bcd60e51b8152600401610bc3906135eb565b610d1e82611b1f565b61068982826001611b27565b5f306001600160a01b037f00000000000000000000000001670010000000000000000000000000000000031614610dc95760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610bc3565b505f51602061403f5f395f51905f5290565b610de3611d81565b610c735f611ddb565b60655433906001600160a01b03168114610e5a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610bc3565b610c4881611ddb565b610e7760c954610100900460ff1660021490565b15610e955760405163bae6e2a960e01b815260040160405180910390fd5b6002610ea360c95460ff1690565b60ff1603610ec45760405163dfc60d8560e01b815260040160405180910390fd5b610ece60026112c4565b5f808080610ede85870187613637565b93509350935093505f610eef611df4565b9050610efa83611f14565b5f610f068685856113d0565b9050610f1b6001600160a01b03851634611547565b836001600160a01b0316856001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518a6020015186898a516001600160401b03811115610f7957610f79612c67565b604051908082528060200260200182016040528015610fa2578160200160208202803683370190505b50604051610fb4959493929190613730565b60405180910390a450505050505061068960016112c4565b610fd4611f50565b610c73336001611d7d565b5f610fe8611b04565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b031692919061102b90613788565b80601f016020809104026020016040519081016040528092919081815260200182805461105790613788565b80156110a25780601f10611079576101008083540402835291602001916110a2565b820191905f5260205f20905b81548152906001019060200180831161108557829003601f168201915b5050505050908060020180546110b790613788565b80601f01602080910402602001604051908101604052809291908181526020018280546110e390613788565b801561112e5780601f106111055761010080835404028352916020019161112e565b820191905f5260205f20905b81548152906001019060200180831161111157829003601f168201915b5050505050905084565b5f610c5a468484611c91565b5f54610100900460ff161580801561116257505f54600160ff909116105b8061117b5750303b15801561117b57505f5460ff166001145b6111de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610bc3565b5f805460ff1916600117905580156111ff575f805461ff0019166101001790555b6112098383611fc1565b801561124e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61125b611d81565b606580546001600160a01b0383166001600160a01b0319909116811790915561128c6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b61130b816001611138565b6001600160a01b0316336001600160a01b03161461133c57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611378573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139c91906137ba565b60208101519092506001600160a01b031633146113cc57604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b031603611496575060208301515f5b825181101561149057816001600160a01b03166342842e0e308686858151811061141857611418613392565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015f604051808303815f87803b15801561146f575f5ffd5b505af1158015611481573d5f5f3e3d5ffd5b505050508060010190506113ec565b50610c5a565b61149f84611ffb565b90505f5b825181101561153f57816001600160a01b03166340c10f19858584815181106114ce576114ce613392565b60200260200101516040518363ffffffff1660e01b81526004016115079291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b15801561151e575f5ffd5b505af1158015611530573d5f5f3e3d5ffd5b505050508060010190506114a3565b509392505050565b61068982825a612042565b6040516001600160e01b0319821660248201525f90819081906001600160a01b0386169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516115ae9190613822565b5f60405180830381855afa9150503d805f81146115e6576040519150601f19603f3d011682016040523d82523d5f602084013e6115eb565b606091505b50915091508180156115fe575080516020145b1561161a5780806020019051810190611617919061383d565b92505b505092915050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d8161165860a0870160808801612be1565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b90041615611939576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b031660208201526001830180549192849290840191906116c990613788565b80601f01602080910402602001604051908101604052809291908181526020018280546116f590613788565b80156117405780601f1061171757610100808354040283529160200191611740565b820191905f5260205f20905b81548152906001019060200180831161172357829003601f168201915b5050505050815260200160028201805461175990613788565b80601f016020809104026020016040519081016040528092919081815260200182805461178590613788565b80156117d05780601f106117a7576101008083540402835291602001916117d0565b820191905f5260205f20905b8154815290600101906020018083116117b357829003601f168201915b50505050508152505091505f5b6117ea60c086018661334d565b90508110156119335761180360a0860160808701612be1565b6001600160a01b03166342842e0e333061182060c08a018a61334d565b8681811061183057611830613392565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611884575f5ffd5b505af1158015611896573d5f5f3e3d5ffd5b506118ab9250505060a0860160808701612be1565b6001600160a01b03166342966c686118c660c088018861334d565b848181106118d6576118d6613392565b905060200201356040518263ffffffff1660e01b81526004016118fb91815260200190565b5f604051808303815f87803b158015611912575f5ffd5b505af1158015611924573d5f5f3e3d5ffd5b505050508060010190506117dd565b50611a79565b6040518060800160405280466001600160401b031681526020018560800160208101906119669190612be1565b6001600160a01b0316815260200161198c61198760a0880160808901612be1565b612085565b81526020016119a96119a460a0880160808901612be1565b612137565b905291505f5b6119bc60c086018661334d565b9050811015611a77576119d560a0860160808701612be1565b6001600160a01b03166342842e0e33306119f260c08a018a61334d565b86818110611a0257611a02613392565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611a56575f5ffd5b505af1158015611a68573d5f5f3e3d5ffd5b505050508060010190506119af565b505b5030637f07c9478233611a926060880160408901612be1565b611a9f60c089018961334d565b604051602001611ab3959493929190613858565b60408051601f1981840301815290829052611ad0916024016138e9565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f51602061403f5f395f51905f52546001600160a01b031690565b610c48611d81565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611b5a5761124e8361217d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bb4575060408051601f3d908101601f19168201909252611bb1918101906138fb565b60015b611c175760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610bc3565b5f51602061403f5f395f51905f528114611c855760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610bc3565b5061124e838383612218565b5f611c9c8484612242565b90508180611cb257506001600160a01b03811615155b84849091611ce457604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610bc3565b50509392505050565b611d0160c954610100900460ff1660021490565b611d1e5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6106895b6033546001600160a01b03163314610c735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bc3565b606580546001600160a01b0319169055610c48816122e4565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611e25816001611138565b6001600160a01b0316336001600160a01b031614611e5657604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e92573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb691906137ba565b91505f611ed783604001516109e96b195c98cdcc8c57dd985d5b1d60a21b90565b9050806001600160a01b031683602001516001600160a01b031614611f0f57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611f3257506001600160a01b03811630145b15610c4857604051635b50f3f960e01b815260040160405180910390fd5b611f6460c954610100900460ff1660021490565b15611f825760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611d73565b806001600160a01b038116611fe95760405163538ba4f960e01b815260040160405180910390fd5b611ff283612335565b61124e82612393565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b039081168552925290912054168061203d576106d782612403565b919050565b815f0361204e57505050565b61206883838360405180602001604052805f8152506125de565b61124e57604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b038616916120cb9190613822565b5f60405180830381855afa9150503d805f8114612103576040519150601f19603f3d011682016040523d82523d5f602084013e612108565b606091505b5091509150816121265760405180602001604052805f81525061212f565b61212f8161261b565b949350505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b038616916120cb9190613822565b6001600160a01b0381163b6121ea5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610bc3565b5f51602061403f5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b61222183612788565b5f8251118061222d5750805b1561124e5761223c83836127c7565b50505050565b6097545f906001600160a01b03168061226e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa1580156122c0573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061212f9190613912565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661235b5760405162461bcd60e51b8152600401610bc39061392d565b6123636127ec565b6123816001600160a01b0382161561237b5781611ddb565b33611ddb565b5060c9805461ff001916610100179055565b5f54610100900460ff166123b95760405162461bcd60e51b8152600401610bc39061392d565b6001600160401b034611156123e15760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6124176033546001600160a01b031690565b609754602085015185516040808801516060890151915161244896956001600160a01b031694939290602401613978565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b179052905061248f6d627269646765645f65726337323160901b5f611138565b8160405161249c90612923565b6124a79291906139d9565b604051809103905ff0801580156124c0573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906125249082613a47565b50606082015160028201906125399082613a47565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b926125d09290613b01565b60405180910390a450919050565b5f6001600160a01b03851661260657604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b6060604082511061263a57818060200190518101906106d79190613b25565b8151602003612775575f5b60208160ff1610801561267a5750828160ff168151811061266857612668613392565b01602001516001600160f81b03191615155b15612691578061268981613b56565b915050612645565b5f8160ff166001600160401b038111156126ad576126ad612c67565b6040519080825280601f01601f1916602001820160405280156126d7576020820181803683370190505b5090505f91505b60208260ff161080156127135750838260ff168151811061270157612701613392565b01602001516001600160f81b03191615155b15610c5a57838260ff168151811061272d5761272d613392565b602001015160f81c60f81b818360ff168151811061274d5761274d613392565b60200101906001600160f81b03191690815f1a9053508161276d81613b56565b9250506126de565b505060408051602081019091525f815290565b6127918161217d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c5a838360405180606001604052806027815260200161405f60279139612812565b5f54610100900460ff16610c735760405162461bcd60e51b8152600401610bc39061392d565b60605f5f856001600160a01b03168560405161282e9190613822565b5f60405180830381855af49150503d805f8114612866576040519150601f19603f3d011682016040523d82523d5f602084013e61286b565b606091505b509150915061287c86838387612886565b9695505050505050565b606083156128f45782515f036128ed576001600160a01b0385163b6128ed5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bc3565b508161212f565b61212f83838151156129095781518083602001fd5b8060405162461bcd60e51b8152600401610bc391906138e9565b6104ca80613b7583390190565b5f5f60408385031215612941575f5ffd5b82356001600160401b03811115612956575f5ffd5b83016101608186031215612968575f5ffd5b946020939093013593505050565b5f60208284031215612986575f5ffd5b81356001600160e01b031981168114610c5a575f5ffd5b6001600160a01b0381168114610c48575f5ffd5b803561203d8161299d565b5f5f83601f8401126129cc575f5ffd5b5081356001600160401b038111156129e2575f5ffd5b6020830191508360208285010111156129f9575f5ffd5b9250929050565b5f5f5f5f5f60808688031215612a14575f5ffd5b8535612a1f8161299d565b94506020860135612a2f8161299d565b93506040860135925060608601356001600160401b03811115612a50575f5ffd5b612a5c888289016129bc565b969995985093965092949392505050565b5f60208284031215612a7d575f5ffd5b81356001600160401b03811115612a92575f5ffd5b82016101008185031215610c5a575f5ffd5b5f5b83811015612abe578181015183820152602001612aa6565b50505f910152565b5f8151808452612add816020860160208601612aa4565b601f01601f19169290920160200192915050565b60208152612b0b6020820183516001600160401b03169052565b5f6020830151612b2660408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b038116610120840152506101208301516101408301526101408301516101608084015261212f610180840182612ac6565b5f60208284031215612bf1575f5ffd5b8135610c5a8161299d565b6001600160401b0381168114610c48575f5ffd5b803561203d81612bfc565b8015158114610c48575f5ffd5b5f5f5f60608486031215612c3a575f5ffd5b8335612c4581612bfc565b9250602084013591506040840135612c5c81612c1b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612c9d57612c9d612c67565b60405290565b60405161010081016001600160401b0381118282101715612c9d57612c9d612c67565b60405161016081016001600160401b0381118282101715612c9d57612c9d612c67565b604051601f8201601f191681016001600160401b0381118282101715612d1157612d11612c67565b604052919050565b5f6001600160401b03821115612d3157612d31612c67565b50601f01601f191660200190565b5f82601f830112612d4e575f5ffd5b8135602083015f612d66612d6184612d19565b612ce9565b9050828152858383011115612d79575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612da4575f5ffd5b8235612daf8161299d565b915060208301356001600160401b03811115612dc9575f5ffd5b612dd585828601612d3f565b9150509250929050565b5f5f60408385031215612df0575f5ffd5b823591506020830135612e028161299d565b809150509250929050565b5f5f60208385031215612e1e575f5ffd5b82356001600160401b03811115612e33575f5ffd5b612e3f858286016129bc565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612e7d90830185612ac6565b8281036060840152612e8f8185612ac6565b979650505050505050565b5f5f60408385031215612eab575f5ffd5b823591506020830135612e0281612c1b565b5f5f60408385031215612ece575f5ffd5b8235612ed98161299d565b91506020830135612e028161299d565b5f5f8335601e19843603018112612efe575f5ffd5b8301803591506001600160401b03821115612f17575f5ffd5b6020019150368190038213156129f9575f5ffd5b5f5f85851115612f39575f5ffd5b83861115612f45575f5ffd5b5050820193919092039150565b5f60208284031215612f62575f5ffd5b81356001600160401b03811115612f77575f5ffd5b61212f84828501612d3f565b805161203d81612bfc565b805161203d8161299d565b5f82601f830112612fa8575f5ffd5b8151602083015f612fbb612d6184612d19565b9050828152858383011115612fce575f5ffd5b612fdc836020830184612aa4565b95945050505050565b5f6001600160401b03821115612ffd57612ffd612c67565b5060051b60200190565b5f82601f830112613016575f5ffd5b8151613024612d6182612fe5565b8082825260208201915060208360051b860101925085831115613045575f5ffd5b602085015b8381101561306257805183526020928301920161304a565b5095945050505050565b5f5f5f5f6080858703121561307f575f5ffd5b84516001600160401b03811115613094575f5ffd5b8501608081880312156130a5575f5ffd5b6130ad612c7b565b81516130b881612bfc565b815260208201516130c88161299d565b602082015260408201516001600160401b038111156130e5575f5ffd5b6130f189828501612f99565b60408301525060608201516001600160401b0381111561310f575f5ffd5b61311b89828501612f99565b6060830152509450613131905060208601612f8e565b925061313f60408601612f8e565b915060608501516001600160401b03811115613159575f5ffd5b61316587828801613007565b91505092959194509250565b5f8151808452602084019350602083015f5b828110156131a1578151865260209586019590910190600101613183565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f906131d690830185613171565b8281036060840152612e8f8185613171565b63ffffffff81168114610c48575f5ffd5b803561203d816131e8565b5f82601f830112613213575f5ffd5b8135613221612d6182612fe5565b8082825260208201915060208360051b860101925085831115613242575f5ffd5b602085015b83811015613062578035835260209283019201613247565b5f6101008236031215613270575f5ffd5b613278612ca3565b61328183612c10565b815261328f602084016129b1565b60208201526132a0604084016129b1565b60408201526132b160608401612c10565b60608201526132c2608084016129b1565b60808201526132d360a084016131f9565b60a082015260c08301356001600160401b038111156132f0575f5ffd5b6132fc36828601613204565b60c08301525060e08301356001600160401b0381111561331a575f5ffd5b61332636828601613204565b60e08301525092915050565b5f60208284031215613342575f5ffd5b8135610c5a81612bfc565b5f5f8335601e19843603018112613362575f5ffd5b8301803591506001600160401b0382111561337b575f5ffd5b6020019150600581901b36038213156129f9575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156133b6575f5ffd5b8135610c5a816131e8565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106d7576106d76133c1565b805161203d816131e8565b5f5f60408385031215613404575f5ffd5b825160208401519092506001600160401b03811115613421575f5ffd5b83016101608186031215613433575f5ffd5b61343b612cc6565b61344482612f83565b815261345260208301612f83565b6020820152613463604083016133e8565b604082015261347460608301612f8e565b606082015261348560808301612f83565b608082015261349660a08301612f8e565b60a08201526134a760c08301612f83565b60c08201526134b860e08301612f8e565b60e08201526134ca6101008301612f8e565b61010082015261012082810151908201526101408201516001600160401b038111156134f4575f5ffd5b61350087828501612f99565b6101408301525080925050509250929050565b8183525f6001600160fb1b0383111561352a575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f9061357e9083018688613513565b8281036080840152613591818587613513565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f6080858703121561364a575f5ffd5b84356001600160401b0381111561365f575f5ffd5b850160808188031215613670575f5ffd5b613678612c7b565b813561368381612bfc565b815260208201356136938161299d565b602082015260408201356001600160401b038111156136b0575f5ffd5b6136bc89828501612d3f565b60408301525060608201356001600160401b038111156136da575f5ffd5b6136e689828501612d3f565b60608301525094506136fc9050602086016129b1565b925061370a604086016129b1565b915060608501356001600160401b03811115613724575f5ffd5b61316587828801613204565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f9061376a90830185613171565b828103608084015261377c8185613171565b98975050505050505050565b600181811c9082168061379c57607f821691505b602082108103610b5d57634e487b7160e01b5f52602260045260245ffd5b5f60608284031280156137cb575f5ffd5b50604051606081016001600160401b03811182821017156137ee576137ee612c67565b6040528251815260208301516138038161299d565b6020820152604083015161381681612bfc565b60408201529392505050565b5f8251613833818460208701612aa4565b9190910192915050565b5f6020828403121561384d575f5ffd5b8151610c5a81612c1b565b608081526001600160401b03865116608082015260018060a01b0360208701511660a08201525f6040870151608060c0840152613899610100840182612ac6565b90506060880151607f198483030160e08501526138b68282612ac6565b6001600160a01b0389811660208701528816604086015291506138d69050565b828103606084015261377c818587613513565b602081525f610c5a6020830184612ac6565b5f6020828403121561390b575f5ffd5b5051919050565b5f60208284031215613922575f5ffd5b8151610c5a8161299d565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f906139ba90830185612ac6565b82810360a08401526139cc8185612ac6565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c5790830184612ac6565b601f82111561124e57805f5260205f20601f840160051c81016020851015613a215750805b601f840160051c820191505b81811015613a40575f8155600101613a2d565b5050505050565b81516001600160401b03811115613a6057613a60612c67565b613a7481613a6e8454613788565b846139fc565b6020601f821160018114613aa6575f8315613a8f5750848201515b5f19600385901b1c1916600184901b178455613a40565b5f84815260208120601f198516915b82811015613ad55787850151825560209485019460019092019101613ab5565b5084821015613af257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613b136040830185612ac6565b8281036020840152612fdc8185612ac6565b5f60208284031215613b35575f5ffd5b81516001600160401b03811115613b4a575f5ffd5b61212f84828501612f99565b5f60ff821660ff8103613b6b57613b6b6133c1565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203cd495f2fefd9f75bbedef71608a9c7ed2199e60f25d6a5d6d7c916d19d3a30364736f6c634300081b0033", - "balance": "0x0" - }, - "0x1670010000000000000000000000000000000003": { - "contractName": "ERC721Vault", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670010000000000000000000000000000000006", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000000003" - }, - "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", - "balance": "0x0" - }, - "0x0167001000000000000000000000000000000004": { - "contractName": "ERC1155VaultImpl", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" - }, - "code": "0x608060405260043610610195575f3560e01c8063715018a6116100e7578063a86f9d9e11610087578063e30c397811610062578063e30c39781461049d578063f09a4016146104ba578063f23a6e61146104d9578063f2fde38b14610505575f5ffd5b8063a86f9d9e14610401578063bc197c8114610420578063e07baba614610467575f5ffd5b80638456cb59116100c25780638456cb591461038d5780638abf6077146103a15780638da5cb5b146103b55780639aa8605c146103d2575f5ffd5b8063715018a61461035257806379ba5097146103665780637f07c9471461037a575f5ffd5b80633ab76e9f116101525780634f1ef2861161012d5780634f1ef286146102cb57806352d1902d146102de5780635c975abb146102f257806367090ccf14610312575f5ffd5b80633ab76e9f146102615780633eb6b8cf146102985780633f4ba83a146102b7575f5ffd5b80630178733a1461019957806301ffc9a7146101ae57806306fdde03146101e25780631f59a8301461020e5780633075db561461022e5780633659cfe614610242575b5f5ffd5b6101ac6101a73660046128ab565b610524565b005b3480156101b9575f5ffd5b506101cd6101c83660046128f1565b61069a565b60405190151581526020015b60405180910390f35b3480156101ed575f5ffd5b506c195c98cc4c4d4d57dd985d5b1d609a1b5b6040519081526020016101d9565b61022161021c366004612918565b6106b9565b6040516101d9919061299c565b348015610239575f5ffd5b506101cd610b40565b34801561024d575f5ffd5b506101ac61025c366004612aab565b610b58565b34801561026c575f5ffd5b50609754610280906001600160a01b031681565b6040516001600160a01b0390911681526020016101d9565b3480156102a3575f5ffd5b506102806102b2366004612af2565b610c28565b3480156102c2575f5ffd5b506101ac610c3c565b6101ac6102d9366004612c5d565b610c50565b3480156102e9575f5ffd5b50610200610d05565b3480156102fd575f5ffd5b506101cd60c954610100900460ff1660021490565b34801561031d575f5ffd5b5061028061032c366004612ca9565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b34801561035d575f5ffd5b506101ac610db6565b348015610371575f5ffd5b506101ac610dc7565b6101ac610388366004612d1b565b610e3e565b348015610398575f5ffd5b506101ac610f6a565b3480156103ac575f5ffd5b50610280610f7d565b3480156103c0575f5ffd5b506033546001600160a01b0316610280565b3480156103dd575f5ffd5b506103f16103ec366004612aab565b610f8b565b6040516101d99493929190612d59565b34801561040c575f5ffd5b5061028061041b366004612da8565b6110d6565b34801561042b575f5ffd5b5061044e61043a366004612e0b565b63bc197c8160e01b98975050505050505050565b6040516001600160e01b031990911681526020016101d9565b348015610472575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b0390911681526020016101d9565b3480156104a8575f5ffd5b506065546001600160a01b0316610280565b3480156104c5575f5ffd5b506101ac6104d4366004612ecb565b6110e9565b3480156104e4575f5ffd5b5061044e6104f3366004612ef7565b63f23a6e6160e01b9695505050505050565b348015610510575f5ffd5b506101ac61051f366004612aab565b611200565b61053860c954610100900460ff1660021490565b156105565760405163bae6e2a960e01b815260040160405180910390fd5b600261056460c95460ff1690565b60ff16036105855760405163dfc60d8560e01b815260040160405180910390fd5b61058f6002611271565b610597611287565b505f6105a7610140840184612f6d565b6105b5916004908290612faf565b8101906105c29190612fd6565b90505f5f5f838060200190518101906105db91906130f0565b94509450505092505f610602848860a00160208101906105fb9190612aab565b858561137d565b905061062c61012088013561061d60c08a0160a08b01612aab565b6001600160a01b03169061146c565b61063c60c0880160a08901612aab565b6001600160a01b0316867fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c866020015184878760405161067f9493929190613258565b60405180910390a350505050506106966001611271565b5050565b5f6106a482611477565b806106b357506106b3826114c6565b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261072760c954610100900460ff1660021490565b156107455760405163bae6e2a960e01b815260040160405180910390fd5b61074e8261330c565b8060e00151518160c0015151146107785760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107a3576040516303f8a7d360e01b815260040160405180910390fd5b60026107b160c95460ff1690565b60ff16036107d25760405163dfc60d8560e01b815260040160405180910390fd5b6107dc6002611271565b6107ec60808401606085016133df565b6001600160401b031634101561081557604051630178ce0b60e31b815260040160405180910390fd5b5f5b61082460e08501856133fa565b90508110156108785761083a60e08501856133fa565b8281811061084a5761084a61343f565b905060200201355f0361087057604051634299323b60e11b815260040160405180910390fd5b600101610817565b506108a3636cdb3d1360e11b61089460a0860160808701612aab565b6001600160a01b0316906114fa565b6108c057604051633ee915f560e11b815260040160405180910390fd5b5f5f6108cb856115ca565b6040805161016081019091525f808252929450909250602081016108f56080890160608a016133df565b6001600160401b0316815260200161091360c0890160a08a01613453565b63ffffffff1681525f60208083018290526040830191909152336060830152608090910190610944908901896133df565b6001600160401b031681526020015f6001600160a01b031688602001602081019061096f9190612aab565b6001600160a01b0316036109835733610993565b6109936040890160208a01612aab565b6001600160a01b031681526020908101906109cc906109b4908a018a6133df565b6c195c98cc4c4d4d57dd985d5b1d609a1b5b5f610c28565b6001600160a01b031681526020016109ea6080890160608a016133df565b6109fd906001600160401b031634613482565b815260200184905290505f610a1b6562726964676560d01b826110d6565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a47919061299c565b5f6040518083038185885af1158015610a62573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610a8a91908101906134a0565b96509050610a9e6060880160408901612aab565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610af49190612aab565b610b0160c08f018f6133fa565b8f8060e00190610b1191906133fa565b604051610b2497969594939291906135f0565b60405180910390a450505050610b3a6001611271565b50919050565b5f6002610b4f60c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000000004163003610ba95760405162461bcd60e51b8152600401610ba09061364c565b60405180910390fd5b7f00000000000000000000000001670010000000000000000000000000000000046001600160a01b0316610bdb611a8a565b6001600160a01b031614610c015760405162461bcd60e51b8152600401610ba090613698565b610c0a81611aa5565b604080515f80825260208201909252610c2591839190611aad565b50565b5f610c34848484611c17565b949350505050565b610c44611c73565b610c4e335f611d03565b565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000000004163003610c985760405162461bcd60e51b8152600401610ba09061364c565b7f00000000000000000000000001670010000000000000000000000000000000046001600160a01b0316610cca611a8a565b6001600160a01b031614610cf05760405162461bcd60e51b8152600401610ba090613698565b610cf982611aa5565b61069682826001611aad565b5f306001600160a01b037f00000000000000000000000001670010000000000000000000000000000000041614610da45760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ba0565b505f51602061421e5f395f51905f5290565b610dbe611d07565b610c4e5f611d61565b60655433906001600160a01b03168114610e355760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ba0565b610c2581611d61565b610e5260c954610100900460ff1660021490565b15610e705760405163bae6e2a960e01b815260040160405180910390fd5b6002610e7e60c95460ff1690565b60ff1603610e9f5760405163dfc60d8560e01b815260040160405180910390fd5b610ea96002611271565b5f80808080610eba868801886136e4565b945094509450945094505f610ecd611d7a565b9050610ed884611e9b565b5f610ee58786868661137d565b9050610efa6001600160a01b0386163461146c565b846001600160a01b0316866001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518b60200151868a8a604051610f51959493929190613805565b60405180910390a4505050505050506106966001611271565b610f72611ed7565b610c4e336001611d03565b5f610f86611a8a565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b0316929190610fc99061385d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff59061385d565b80156110405780601f1061101757610100808354040283529160200191611040565b820191905f5260205f20905b81548152906001019060200180831161102357829003601f168201915b5050505050908060020180546110559061385d565b80601f01602080910402602001604051908101604052809291908181526020018280546110819061385d565b80156110cc5780601f106110a3576101008083540402835291602001916110cc565b820191905f5260205f20905b8154815290600101906020018083116110af57829003601f168201915b5050505050905084565b5f6110e2468484611c17565b9392505050565b5f54610100900460ff161580801561110757505f54600160ff909116105b806111205750303b15801561112057505f5460ff166001145b6111835760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ba0565b5f805460ff1916600117905580156111a4575f805461ff0019166101001790555b6111ae8383611f48565b6111b6611f82565b80156111fb575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611208611d07565b606580546001600160a01b0383166001600160a01b031990911681179091556112396033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b6112b88160016110d6565b6001600160a01b0316336001600160a01b0316146112e957604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611325573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611349919061388f565b60208101519092506001600160a01b0316331461137957604051632583296b60e01b815260040160405180910390fd5b5090565b5f46855f01516001600160401b0316036113fb57506020840151604051631759616b60e11b81526001600160a01b03821690632eb2c2d6906113c99030908890889088906004016138f7565b5f604051808303815f87803b1580156113e0575f5ffd5b505af11580156113f2573d5f5f3e3d5ffd5b50505050610c34565b61140485611fa8565b60405163d81d0a1560e01b81529091506001600160a01b0382169063d81d0a159061143790879087908790600401613950565b5f604051808303815f87803b15801561144e575f5ffd5b505af1158015611460573d5f5f3e3d5ffd5b50505050949350505050565b61069682825a611fef565b5f6001600160e01b0319821662bc399d60e11b14806114a657506001600160e01b03198216637f07c94760e01b145b806106b357506001600160e01b031982166301ffc9a760e01b1492915050565b5f6001600160e01b03198216630271189760e51b14806106b357506301ffc9a760e01b6001600160e01b03198316146106b3565b6040516001600160e01b0319821660248201525f90819081906001600160a01b0386169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516115569190613985565b5f60405180830381855afa9150503d805f811461158e576040519150601f19603f3d011682016040523d82523d5f602084013e611593565b606091505b50915091508180156115a6575080516020145b156115c257808060200190518101906115bf91906139a0565b92505b505092915050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d8161160060a0870160808801612aab565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118f3576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b031660208201526001830180549192849290840191906116719061385d565b80601f016020809104026020016040519081016040528092919081815260200182805461169d9061385d565b80156116e85780601f106116bf576101008083540402835291602001916116e8565b820191905f5260205f20905b8154815290600101906020018083116116cb57829003601f168201915b505050505081526020016002820180546117019061385d565b80601f016020809104026020016040519081016040528092919081815260200182805461172d9061385d565b80156117785780601f1061174f57610100808354040283529160200191611778565b820191905f5260205f20905b81548152906001019060200180831161175b57829003601f168201915b50505050508152505091508360800160208101906117969190612aab565b6001600160a01b0316632eb2c2d633306117b360c08901896133fa565b6117c060e08b018b6133fa565b6040518763ffffffff1660e01b81526004016117e1969594939291906139bb565b5f604051808303815f87803b1580156117f8575f5ffd5b505af115801561180a573d5f5f3e3d5ffd5b505050505f5b61181d60c08601866133fa565b90508110156118ed5761183660a0860160808701612aab565b6001600160a01b031663b390c0ab61185160c08801886133fa565b848181106118615761186161343f565b90506020020135878060e0019061187891906133fa565b858181106118885761188861343f565b905060200201356040518363ffffffff1660e01b81526004016118b5929190918252602082015260400190565b5f604051808303815f87803b1580156118cc575f5ffd5b505af11580156118de573d5f5f3e3d5ffd5b50505050806001019050611810565b506119f0565b6040518060800160405280466001600160401b031681526020018560800160208101906119209190612aab565b6001600160a01b0316815260200161194661194160a0880160808901612aab565b612032565b815260200161196361195e60a0880160808901612aab565b6120dc565b9052915061197760a0850160808601612aab565b6001600160a01b0316632eb2c2d6333061199460c08901896133fa565b6119a160e08b018b6133fa565b6040518763ffffffff1660e01b81526004016119c2969594939291906139bb565b5f604051808303815f87803b1580156119d9575f5ffd5b505af11580156119eb573d5f5f3e3d5ffd5b505050505b5030637f07c9478233611a096060880160408901612aab565b611a1660c08901896133fa565b611a2360e08b018b6133fa565b604051602001611a399796959493929190613a18565b60408051601f1981840301815290829052611a5691602401613ac8565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f51602061421e5f395f51905f52546001600160a01b031690565b610c25611d07565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611ae0576111fb83612122565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b3a575060408051601f3d908101601f19168201909252611b3791810190613ada565b60015b611b9d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ba0565b5f51602061421e5f395f51905f528114611c0b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ba0565b506111fb8383836121bd565b5f611c2284846121e7565b90508180611c3857506001600160a01b03811615155b84849091611c6a57604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610ba0565b50509392505050565b611c8760c954610100900460ff1660021490565b611ca45760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6106965b6033546001600160a01b03163314610c4e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba0565b606580546001600160a01b0319169055610c2581612289565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611dab8160016110d6565b6001600160a01b0316336001600160a01b031614611ddc57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3c919061388f565b91505f611e5e83604001516109c66c195c98cc4c4d4d57dd985d5b1d609a1b90565b9050806001600160a01b031683602001516001600160a01b031614611e9657604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611eb957506001600160a01b03811630145b15610c2557604051635b50f3f960e01b815260040160405180910390fd5b611eeb60c954610100900460ff1660021490565b15611f095760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611cf9565b806001600160a01b038116611f705760405163538ba4f960e01b815260040160405180910390fd5b611f79836122da565b6111fb82612338565b5f54610100900460ff16610c4e5760405162461bcd60e51b8152600401610ba090613af1565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611fea576106b3826123a8565b919050565b815f03611ffb57505050565b61201583838360405180602001604052805f815250612584565b6111fb57604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b038616916120789190613985565b5f60405180830381855afa9150503d805f81146120b0576040519150601f19603f3d011682016040523d82523d5f602084013e6120b5565b606091505b5091509150816120d35760405180602001604052805f815250610c34565b610c34816125c1565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b038616916120789190613985565b6001600160a01b0381163b61218f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ba0565b5f51602061421e5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6121c68361272e565b5f825111806121d25750805b156111fb576121e1838361276d565b50505050565b6097545f906001600160a01b03168061221357604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612265573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c349190613b3c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166123005760405162461bcd60e51b8152600401610ba090613af1565b612308611f82565b6123266001600160a01b038216156123205781611d61565b33611d61565b5060c9805461ff001916610100179055565b5f54610100900460ff1661235e5760405162461bcd60e51b8152600401610ba090613af1565b6001600160401b034611156123865760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123bc6033546001600160a01b031690565b60975460208501518551604080880151606089015191516123ed96956001600160a01b031694939290602401613b57565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506124356e627269646765645f6572633131353560881b5f6110d6565b816040516124429061289e565b61244d929190613bb8565b604051809103905ff080158015612466573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124ca9082613c26565b50606082015160028201906124df9082613c26565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b926125769290613ce0565b60405180910390a450919050565b5f6001600160a01b0385166125ac57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606060408251106125e057818060200190518101906106b39190613d04565b815160200361271b575f5b60208160ff161080156126205750828160ff168151811061260e5761260e61343f565b01602001516001600160f81b03191615155b15612637578061262f81613d35565b9150506125eb565b5f8160ff166001600160401b0381111561265357612653612b31565b6040519080825280601f01601f19166020018201604052801561267d576020820181803683370190505b5090505f91505b60208260ff161080156126b95750838260ff16815181106126a7576126a761343f565b01602001516001600160f81b03191615155b156110e257838260ff16815181106126d3576126d361343f565b602001015160f81c60f81b818360ff16815181106126f3576126f361343f565b60200101906001600160f81b03191690815f1a9053508161271381613d35565b925050612684565b505060408051602081019091525f815290565b61273781612122565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606110e2838360405180606001604052806027815260200161423e6027913960605f5f856001600160a01b0316856040516127a99190613985565b5f60405180830381855af49150503d805f81146127e1576040519150601f19603f3d011682016040523d82523d5f602084013e6127e6565b606091505b50915091506127f786838387612801565b9695505050505050565b6060831561286f5782515f03612868576001600160a01b0385163b6128685760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ba0565b5081610c34565b610c3483838151156128845781518083602001fd5b8060405162461bcd60e51b8152600401610ba09190613ac8565b6104ca80613d5483390190565b5f5f604083850312156128bc575f5ffd5b82356001600160401b038111156128d1575f5ffd5b830161016081860312156128e3575f5ffd5b946020939093013593505050565b5f60208284031215612901575f5ffd5b81356001600160e01b0319811681146110e2575f5ffd5b5f60208284031215612928575f5ffd5b81356001600160401b0381111561293d575f5ffd5b820161010081850312156110e2575f5ffd5b5f5b83811015612969578181015183820152602001612951565b50505f910152565b5f815180845261298881602086016020860161294f565b601f01601f19169290920160200192915050565b602081526129b66020820183516001600160401b03169052565b5f60208301516129d160408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b0381166101208401525061012083015161014083015261014083015161016080840152610c34610180840182612971565b6001600160a01b0381168114610c25575f5ffd5b8035611fea81612a8c565b5f60208284031215612abb575f5ffd5b81356110e281612a8c565b6001600160401b0381168114610c25575f5ffd5b8035611fea81612ac6565b8015158114610c25575f5ffd5b5f5f5f60608486031215612b04575f5ffd5b8335612b0f81612ac6565b9250602084013591506040840135612b2681612ae5565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612b6757612b67612b31565b60405290565b60405161010081016001600160401b0381118282101715612b6757612b67612b31565b60405161016081016001600160401b0381118282101715612b6757612b67612b31565b604051601f8201601f191681016001600160401b0381118282101715612bdb57612bdb612b31565b604052919050565b5f6001600160401b03821115612bfb57612bfb612b31565b50601f01601f191660200190565b5f82601f830112612c18575f5ffd5b8135602083015f612c30612c2b84612be3565b612bb3565b9050828152858383011115612c43575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612c6e575f5ffd5b8235612c7981612a8c565b915060208301356001600160401b03811115612c93575f5ffd5b612c9f85828601612c09565b9150509250929050565b5f5f60408385031215612cba575f5ffd5b823591506020830135612ccc81612a8c565b809150509250929050565b5f5f83601f840112612ce7575f5ffd5b5081356001600160401b03811115612cfd575f5ffd5b602083019150836020828501011115612d14575f5ffd5b9250929050565b5f5f60208385031215612d2c575f5ffd5b82356001600160401b03811115612d41575f5ffd5b612d4d85828601612cd7565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612d8b90830185612971565b8281036060840152612d9d8185612971565b979650505050505050565b5f5f60408385031215612db9575f5ffd5b823591506020830135612ccc81612ae5565b5f5f83601f840112612ddb575f5ffd5b5081356001600160401b03811115612df1575f5ffd5b6020830191508360208260051b8501011115612d14575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612e22575f5ffd5b8835612e2d81612a8c565b97506020890135612e3d81612a8c565b965060408901356001600160401b03811115612e57575f5ffd5b612e638b828c01612dcb565b90975095505060608901356001600160401b03811115612e81575f5ffd5b612e8d8b828c01612dcb565b90955093505060808901356001600160401b03811115612eab575f5ffd5b612eb78b828c01612cd7565b999c989b5096995094979396929594505050565b5f5f60408385031215612edc575f5ffd5b8235612ee781612a8c565b91506020830135612ccc81612a8c565b5f5f5f5f5f5f60a08789031215612f0c575f5ffd5b8635612f1781612a8c565b95506020870135612f2781612a8c565b9450604087013593506060870135925060808701356001600160401b03811115612f4f575f5ffd5b612f5b89828a01612cd7565b979a9699509497509295939492505050565b5f5f8335601e19843603018112612f82575f5ffd5b8301803591506001600160401b03821115612f9b575f5ffd5b602001915036819003821315612d14575f5ffd5b5f5f85851115612fbd575f5ffd5b83861115612fc9575f5ffd5b5050820193919092039150565b5f60208284031215612fe6575f5ffd5b81356001600160401b03811115612ffb575f5ffd5b610c3484828501612c09565b8051611fea81612ac6565b8051611fea81612a8c565b5f82601f83011261302c575f5ffd5b8151602083015f61303f612c2b84612be3565b9050828152858383011115613052575f5ffd5b61306083602083018461294f565b95945050505050565b5f6001600160401b0382111561308157613081612b31565b5060051b60200190565b5f82601f83011261309a575f5ffd5b81516130a8612c2b82613069565b8082825260208201915060208360051b8601019250858311156130c9575f5ffd5b602085015b838110156130e65780518352602092830192016130ce565b5095945050505050565b5f5f5f5f5f60a08688031215613104575f5ffd5b85516001600160401b03811115613119575f5ffd5b86016080818903121561312a575f5ffd5b613132612b45565b815161313d81612ac6565b8152602082015161314d81612a8c565b602082015260408201516001600160401b0381111561316a575f5ffd5b6131768a82850161301d565b60408301525060608201516001600160401b03811115613194575f5ffd5b6131a08a82850161301d565b60608301525095506131b6905060208701613012565b93506131c460408701613012565b925060608601516001600160401b038111156131de575f5ffd5b6131ea8882890161308b565b92505060808601516001600160401b03811115613205575f5ffd5b6132118882890161308b565b9150509295509295909350565b5f8151808452602084019350602083015f5b8281101561324e578151865260209586019590910190600101613230565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f906132839083018561321e565b8281036060840152612d9d818561321e565b63ffffffff81168114610c25575f5ffd5b8035611fea81613295565b5f82601f8301126132c0575f5ffd5b81356132ce612c2b82613069565b8082825260208201915060208360051b8601019250858311156132ef575f5ffd5b602085015b838110156130e65780358352602092830192016132f4565b5f610100823603121561331d575f5ffd5b613325612b6d565b61332e83612ada565b815261333c60208401612aa0565b602082015261334d60408401612aa0565b604082015261335e60608401612ada565b606082015261336f60808401612aa0565b608082015261338060a084016132a6565b60a082015260c08301356001600160401b0381111561339d575f5ffd5b6133a9368286016132b1565b60c08301525060e08301356001600160401b038111156133c7575f5ffd5b6133d3368286016132b1565b60e08301525092915050565b5f602082840312156133ef575f5ffd5b81356110e281612ac6565b5f5f8335601e1984360301811261340f575f5ffd5b8301803591506001600160401b03821115613428575f5ffd5b6020019150600581901b3603821315612d14575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613463575f5ffd5b81356110e281613295565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106b3576106b361346e565b8051611fea81613295565b5f5f604083850312156134b1575f5ffd5b825160208401519092506001600160401b038111156134ce575f5ffd5b830161016081860312156134e0575f5ffd5b6134e8612b90565b6134f182613007565b81526134ff60208301613007565b602082015261351060408301613495565b604082015261352160608301613012565b606082015261353260808301613007565b608082015261354360a08301613012565b60a082015261355460c08301613007565b60c082015261356560e08301613012565b60e08201526135776101008301613012565b61010082015261012082810151908201526101408201516001600160401b038111156135a1575f5ffd5b6135ad8782850161301d565b6101408301525080925050509250929050565b8183525f6001600160fb1b038311156135d7575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f9061362b90830186886135c0565b828103608084015261363e8185876135c0565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f5f60a086880312156136f8575f5ffd5b85356001600160401b0381111561370d575f5ffd5b86016080818903121561371e575f5ffd5b613726612b45565b813561373181612ac6565b8152602082013561374181612a8c565b602082015260408201356001600160401b0381111561375e575f5ffd5b61376a8a828501612c09565b60408301525060608201356001600160401b03811115613788575f5ffd5b6137948a828501612c09565b60608301525095506137aa905060208701612aa0565b93506137b860408701612aa0565b925060608601356001600160401b038111156137d2575f5ffd5b6137de888289016132b1565b92505060808601356001600160401b038111156137f9575f5ffd5b613211888289016132b1565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f9061383f9083018561321e565b8281036080840152613851818561321e565b98975050505050505050565b600181811c9082168061387157607f821691505b602082108103610b3a57634e487b7160e01b5f52602260045260245ffd5b5f60608284031280156138a0575f5ffd5b50604051606081016001600160401b03811182821017156138c3576138c3612b31565b6040528251815260208301516138d881612a8c565b602082015260408301516138eb81612ac6565b60408201529392505050565b6001600160a01b0385811682528416602082015260a0604082018190525f906139229083018561321e565b8281036060840152613934818561321e565b83810360809094019390935250505f8152602001949350505050565b6001600160a01b03841681526060602082018190525f906139739083018561321e565b82810360408401526127f7818561321e565b5f825161399681846020870161294f565b9190910192915050565b5f602082840312156139b0575f5ffd5b81516110e281612ae5565b6001600160a01b0387811682528616602082015260a0604082018190525f906139e790830186886135c0565b82810360608401526139fa8185876135c0565b83810360809094019390935250505f81526020019695505050505050565b60a080825288516001600160401b03169082015260208801516001600160a01b031660c08201526040880151608060e08301525f90613a5b610120840182612971565b905060608a0151609f1984830301610100850152613a798282612971565b915050613a91602084018a6001600160a01b03169052565b6001600160a01b03881660408401528281036060840152613ab38187896135c0565b9050828103608084015261363e8185876135c0565b602081525f6110e26020830184612971565b5f60208284031215613aea575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215613b4c575f5ffd5b81516110e281612a8c565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f90613b9990830185612971565b82810360a0840152613bab8185612971565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c3490830184612971565b601f8211156111fb57805f5260205f20601f840160051c81016020851015613c005750805b601f840160051c820191505b81811015613c1f575f8155600101613c0c565b5050505050565b81516001600160401b03811115613c3f57613c3f612b31565b613c5381613c4d845461385d565b84613bdb565b6020601f821160018114613c85575f8315613c6e5750848201515b5f19600385901b1c1916600184901b178455613c1f565b5f84815260208120601f198516915b82811015613cb45787850151825560209485019460019092019101613c94565b5084821015613cd157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613cf26040830185612971565b82810360208401526130608185612971565b5f60208284031215613d14575f5ffd5b81516001600160401b03811115613d29575f5ffd5b610c348482850161301d565b5f60ff821660ff8103613d4a57613d4a61346e565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203e164d80a5bf888f120843fbb6a1d20044e55ebe0e054374c174b7a64300b39064736f6c634300081b0033", - "balance": "0x0" - }, - "0x1670010000000000000000000000000000000004": { - "contractName": "ERC1155Vault", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670010000000000000000000000000000000006", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000000004" - }, - "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", - "balance": "0x0" - }, - "0x0167001000000000000000000000000000010096": { - "contractName": "BridgedERC20", - "storage": {}, - "code": "0x608060405260043610610233575f3560e01c806370a0823111610129578063a77f1516116100a8578063dd62ed3e1161006d578063dd62ed3e14610684578063e07baba6146106a3578063e30c3978146106d9578063f12506c1146106f6578063f2fde38b1461070a575f5ffd5b8063a77f1516146105e7578063a86f9d9e14610608578063a9059cbb14610627578063b8f2e0c514610646578063bb86ef9314610665575f5ffd5b80638456cb59116100ee5780638456cb591461056f5780638abf6077146105835780638da5cb5b1461059757806395d89b41146105b4578063a457c2d7146105c8575f5ffd5b806370a08231146104d3578063715018a61461050757806379ba50971461051b5780637cf8ed0d1461052f5780637e4746341461054f575f5ffd5b806339509351116101b557806342966c681161017a57806342966c681461045757806349d12605146104765780634f1ef2861461048c57806352d1902d1461049f5780635c975abb146104b3575f5ffd5b806339509351146103af5780633ab76e9f146103ce5780633eb6b8cf146104055780633f4ba83a1461042457806340c10f1914610438575f5ffd5b806323b872dd116101fb57806323b872dd146102ea57806326afaadd146103095780633075db561461034d578063313ce567146103615780633659cfe61461038e575f5ffd5b806301ffc9a71461023757806306fdde031461026b578063095ea7b31461028c5780630ae74548146102ab57806318160ddd146102cc575b5f5ffd5b348015610242575f5ffd5b50610256610251366004612185565b610729565b60405190151581526020015b60405180910390f35b348015610276575f5ffd5b5061027f6107cb565b60405161026291906121ce565b348015610297575f5ffd5b506102566102a6366004612214565b61085b565b3480156102b6575f5ffd5b5061012f5461025690600160a01b900460ff1681565b3480156102d7575f5ffd5b5060fd545b604051908152602001610262565b3480156102f5575f5ffd5b5061025661030436600461223e565b610872565b348015610314575f5ffd5b5061032e61012d5461012e546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610262565b348015610358575f5ffd5b50610256610895565b34801561036c575f5ffd5b5061012d54600160a01b900460ff165b60405160ff9091168152602001610262565b348015610399575f5ffd5b506103ad6103a836600461227c565b6108ad565b005b3480156103ba575f5ffd5b506102566103c9366004612214565b61097d565b3480156103d9575f5ffd5b506097546103ed906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b348015610410575f5ffd5b506103ed61041f3660046122ab565b61099e565b34801561042f575f5ffd5b506103ad6109b2565b348015610443575f5ffd5b506103ad610452366004612214565b6109c6565b348015610462575f5ffd5b506103ad6104713660046122f1565b610ae0565b348015610481575f5ffd5b506102dc61012e5481565b6103ad61049a36600461231c565b610c1d565b3480156104aa575f5ffd5b506102dc610cd2565b3480156104be575f5ffd5b5061025660c954610100900460ff1660021490565b3480156104de575f5ffd5b506102dc6104ed36600461227c565b6001600160a01b03165f90815260fb602052604090205490565b348015610512575f5ffd5b506103ad610d83565b348015610526575f5ffd5b506103ad610d94565b34801561053a575f5ffd5b5061012d546103ed906001600160a01b031681565b34801561055a575f5ffd5b5061012f546103ed906001600160a01b031681565b34801561057a575f5ffd5b506103ad610e0b565b34801561058e575f5ffd5b506103ed610e1e565b3480156105a2575f5ffd5b506033546001600160a01b03166103ed565b3480156105bf575f5ffd5b5061027f610e2c565b3480156105d3575f5ffd5b506102566105e2366004612214565b610e3b565b3480156105f2575f5ffd5b5061012d5461037c90600160a01b900460ff1681565b348015610613575f5ffd5b506103ed6106223660046123df565b610eb5565b348015610632575f5ffd5b50610256610641366004612214565b610ec8565b348015610651575f5ffd5b506103ad610660366004612409565b610ed5565b348015610670575f5ffd5b506103ad61067f366004612477565b611052565b34801561068f575f5ffd5b506102dc61069e36600461253d565b611212565b3480156106ae575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b039091168152602001610262565b3480156106e4575f5ffd5b506065546001600160a01b03166103ed565b348015610701575f5ffd5b5061025661123c565b348015610715575f5ffd5b506103ad61072436600461227c565b611267565b5f6001600160e01b0319821663093e326b60e21b148061075957506001600160e01b0319821663bb86ef9360e01b145b8061077457506001600160e01b0319821663b8f2e0c560e01b145b8061078f57506001600160e01b031982166336372b0760e01b145b806107aa57506001600160e01b0319821663a219a02560e01b145b806107c557506001600160e01b031982166301ffc9a760e01b145b92915050565b606060fe80546107da90612574565b80601f016020809104026020016040519081016040528092919081815260200182805461080690612574565b80156108515780601f1061082857610100808354040283529160200191610851565b820191905f5260205f20905b81548152906001019060200180831161083457829003601f168201915b5050505050905090565b5f336108688185856112d8565b5060019392505050565b5f3361087f8582856113fb565b61088a858585611473565b506001949350505050565b5f60026108a460c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100961630036108fe5760405162461bcd60e51b81526004016108f5906125ac565b60405180910390fd5b7f00000000000000000000000001670010000000000000000000000000000100966001600160a01b0316610930611627565b6001600160a01b0316146109565760405162461bcd60e51b81526004016108f5906125f8565b61095f81611642565b604080515f8082526020820190925261097a9183919061164a565b50565b5f3361086881858561098f8383611212565b6109999190612644565b6112d8565b5f6109aa8484846117b4565b949350505050565b6109ba611810565b6109c4335f6118a0565b565b6109da60c954610100900460ff1660021490565b156109f85760405163bae6e2a960e01b815260040160405180910390fd5b6002610a0660c95460ff1690565b60ff1603610a275760405163dfc60d8560e01b815260040160405180910390fd5b610a3160026118a8565b610a3961123c565b15610a575760405163270bf77560e01b815260040160405180910390fd5b61012f546001600160a01b031633819003610abe57826001600160a01b0316816001600160a01b03167fe502aa3e015149f4b76a0b2b5394e3100903c4af27c3ddc98385395d3f55252684604051610ab191815260200190565b60405180910390a3610ac7565b610ac7336118be565b610ad18383611936565b50610adc60016118a8565b5050565b610af460c954610100900460ff1660021490565b15610b125760405163bae6e2a960e01b815260040160405180910390fd5b6002610b2060c95460ff1690565b60ff1603610b415760405163dfc60d8560e01b815260040160405180910390fd5b610b4b60026118a8565b610b5361123c565b15610c005761012f546040518281526001600160a01b0390911690339082907f638edf84937fb2534b47cac985ea84d6ea4f4076315b56ea1c784d26b87e2bcb9060200160405180910390a36040516340c10f1960e01b8152336004820152602481018390526001600160a01b038216906340c10f19906044015f604051808303815f87803b158015610be4575f5ffd5b505af1158015610bf6573d5f5f3e3d5ffd5b5050505050610c09565b610c09336118be565b610c133382611a00565b61097a60016118a8565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000010096163003610c655760405162461bcd60e51b81526004016108f5906125ac565b7f00000000000000000000000001670010000000000000000000000000000100966001600160a01b0316610c97611627565b6001600160a01b031614610cbd5760405162461bcd60e51b81526004016108f5906125f8565b610cc682611642565b610adc8282600161164a565b5f306001600160a01b037f00000000000000000000000001670010000000000000000000000000000100961614610d715760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108f5565b505f5160206128015f395f51905f5290565b610d8b611b3d565b6109c45f611b97565b60655433906001600160a01b03168114610e025760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016108f5565b61097a81611b97565b610e13611bb0565b6109c43360016118a0565b5f610e27611627565b905090565b606060ff80546107da90612574565b5f3381610e488286611212565b905083811015610ea85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108f5565b61088a82868684036112d8565b5f610ec14684846117b4565b9392505050565b5f33610868818585611473565b610ee960c954610100900460ff1660021490565b15610f075760405163bae6e2a960e01b815260040160405180910390fd5b6a195c98cc8c17dd985d5b1d60aa1b610f21816001610eb5565b6001600160a01b0316336001600160a01b031614610f5257604051630d85cccf60e11b815260040160405180910390fd5b6002610f6060c95460ff1690565b60ff1603610f815760405163dfc60d8560e01b815260040160405180910390fd5b610f8b60026118a8565b61012f546001600160a01b038481169116148015610fbc575061012f60149054906101000a900460ff161515821515145b15610fda5760405163c118d2f360e01b815260040160405180910390fd5b61012f80546001600160a01b0385166001600160a81b03199091168117600160a01b851515908102919091179092556040805191825260208201929092527fa6b6f959792843a48d9d03d13595f2de7c86ae0ce12ef0fa759dd911b205e565910160405180910390a161104d60016118a8565b505050565b5f54610100900460ff161580801561107057505f54600160ff909116105b806110895750303b15801561108957505f5460ff166001145b6110ec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108f5565b5f805460ff19166001179055801561110d575f805461ff0019166101001790555b6111178888611c21565b6111218a8a611c5d565b61119283838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611c9792505050565b61012d805461012e89905560ff8816600160a01b026001600160a81b03199091166001600160a01b038b16171790558015611206575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b039182165f90815260fc6020908152604080832093909416825291909152205490565b61012f545f906001600160a01b031615801590610e2757505061012f54600160a01b900460ff161590565b61126f611b3d565b606580546001600160a01b0383166001600160a01b031990911681179091556112a06033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b03831661133a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108f5565b6001600160a01b03821661139b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108f5565b6001600160a01b038381165f81815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6114068484611212565b90505f19811461146d57818110156114605760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108f5565b61146d84848484036112d8565b50505050565b6001600160a01b0383166114d75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108f5565b6001600160a01b0382166115395760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108f5565b611544838383611cc7565b6001600160a01b0383165f90815260fb6020526040902054818110156115bb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108f5565b6001600160a01b038085165f81815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061161a9086815260200190565b60405180910390a361146d565b5f5160206128015f395f51905f52546001600160a01b031690565b61097a611b3d565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561167d5761104d83611d02565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116d7575060408051601f3d908101601f191682019092526116d491810190612663565b60015b61173a5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108f5565b5f5160206128015f395f51905f5281146117a85760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108f5565b5061104d838383611d9d565b5f6117bf8484611dc1565b905081806117d557506001600160a01b03811615155b8484909161180757604051632b0d65db60e01b81526001600160401b03909216600483015260248201526044016108f5565b50509392505050565b61182460c954610100900460ff1660021490565b6118415760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610adc611b3d565b60c9805460ff191660ff92909216919091179055565b6a195c98cc8c17dd985d5b1d60aa1b6118df6033546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806119195750611904816001610eb5565b6001600160a01b0316336001600160a01b0316145b610adc57604051630d85cccf60e11b815260040160405180910390fd5b6001600160a01b03821661198c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108f5565b6119975f8383611cc7565b8060fd5f8282546119a89190612644565b90915550506001600160a01b0382165f81815260fb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216611a605760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108f5565b611a6b825f83611cc7565b6001600160a01b0382165f90815260fb602052604090205481811015611ade5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108f5565b6001600160a01b0383165f81815260fb60209081526040808320868603905560fd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6033546001600160a01b031633146109c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f5565b606580546001600160a01b031916905561097a81611e63565b611bc460c954610100900460ff1660021490565b15611be25760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611896565b6001600160a01b0382161580611c35575080155b80611c3f57504681145b15610adc5760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611c855760405163538ba4f960e01b815260040160405180910390fd5b611c8e83611eb4565b61104d82611f12565b5f54610100900460ff16611cbd5760405162461bcd60e51b81526004016108f59061267a565b610adc8282611f82565b611cdb60c954610100900460ff1660021490565b15611cf95760405163bae6e2a960e01b815260040160405180910390fd5b61104d82611fc1565b6001600160a01b0381163b611d6f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108f5565b5f5160206128015f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611da683611fea565b5f82511180611db25750805b1561104d5761146d8383612029565b6097545f906001600160a01b031680611ded57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e3f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109aa91906126c5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16611eda5760405162461bcd60e51b81526004016108f59061267a565b611ee261204e565b611f006001600160a01b03821615611efa5781611b97565b33611b97565b5060c9805461ff001916610100179055565b5f54610100900460ff16611f385760405162461bcd60e51b81526004016108f59061267a565b6001600160401b03461115611f605760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff16611fa85760405162461bcd60e51b81526004016108f59061267a565b60fe611fb4838261272b565b5060ff61104d828261272b565b306001600160a01b0382160361097a57604051630c292c9d60e21b815260040160405180910390fd5b611ff381611d02565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610ec1838360405180606001604052806027815260200161282160279139612074565b5f54610100900460ff166109c45760405162461bcd60e51b81526004016108f59061267a565b60605f5f856001600160a01b03168560405161209091906127e5565b5f60405180830381855af49150503d805f81146120c8576040519150601f19603f3d011682016040523d82523d5f602084013e6120cd565b606091505b50915091506120de868383876120e8565b9695505050505050565b606083156121565782515f0361214f576001600160a01b0385163b61214f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108f5565b50816109aa565b6109aa838381511561216b5781518083602001fd5b8060405162461bcd60e51b81526004016108f591906121ce565b5f60208284031215612195575f5ffd5b81356001600160e01b031981168114610ec1575f5ffd5b5f5b838110156121c65781810151838201526020016121ae565b50505f910152565b602081525f82518060208401526121ec8160408501602087016121ac565b601f01601f19169190910160400192915050565b6001600160a01b038116811461097a575f5ffd5b5f5f60408385031215612225575f5ffd5b823561223081612200565b946020939093013593505050565b5f5f5f60608486031215612250575f5ffd5b833561225b81612200565b9250602084013561226b81612200565b929592945050506040919091013590565b5f6020828403121561228c575f5ffd5b8135610ec181612200565b803580151581146122a6575f5ffd5b919050565b5f5f5f606084860312156122bd575f5ffd5b83356001600160401b03811681146122d3575f5ffd5b9250602084013591506122e860408501612297565b90509250925092565b5f60208284031215612301575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561232d575f5ffd5b823561233881612200565b915060208301356001600160401b03811115612352575f5ffd5b8301601f81018513612362575f5ffd5b80356001600160401b0381111561237b5761237b612308565b604051601f8201601f19908116603f011681016001600160401b03811182821017156123a9576123a9612308565b6040528181528282016020018710156123c0575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156123f0575f5ffd5b8235915061240060208401612297565b90509250929050565b5f5f6040838503121561241a575f5ffd5b823561242581612200565b915061240060208401612297565b5f5f83601f840112612443575f5ffd5b5081356001600160401b03811115612459575f5ffd5b602083019150836020828501011115612470575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f5f60e08a8c03121561248f575f5ffd5b893561249a81612200565b985060208a01356124aa81612200565b975060408a01356124ba81612200565b965060608a0135955060808a013560ff811681146124d6575f5ffd5b945060a08a01356001600160401b038111156124f0575f5ffd5b6124fc8c828d01612433565b90955093505060c08a01356001600160401b0381111561251a575f5ffd5b6125268c828d01612433565b915080935050809150509295985092959850929598565b5f5f6040838503121561254e575f5ffd5b823561255981612200565b9150602083013561256981612200565b809150509250929050565b600181811c9082168061258857607f821691505b6020821081036125a657634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b808201808211156107c557634e487b7160e01b5f52601160045260245ffd5b5f60208284031215612673575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156126d5575f5ffd5b8151610ec181612200565b601f82111561104d57805f5260205f20601f840160051c810160208510156127055750805b601f840160051c820191505b81811015612724575f8155600101612711565b5050505050565b81516001600160401b0381111561274457612744612308565b612758816127528454612574565b846126e0565b6020601f82116001811461278a575f83156127735750848201515b5f19600385901b1c1916600184901b178455612724565b5f84815260208120601f198516915b828110156127b95787850151825560209485019460019092019101612799565b50848210156127d657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516127f68184602087016121ac565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220217a3819e82070457abbbadebb33fc33a95ce341341171f04951c38aca59c1ee64736f6c634300081b0033", - "balance": "0x0" - }, - "0x0167001000000000000000000000000000010097": { - "contractName": "BridgedERC721", - "storage": {}, - "code": "0x608060405260043610610207575f3560e01c80636352211e11610113578063a22cb4651161009d578063e07baba61161006d578063e07baba6146105c3578063e30c3978146105f9578063e985e9c514610616578063ef8c4ae61461065e578063f2fde38b1461067d575f5ffd5b8063a22cb46514610547578063a86f9d9e14610566578063b88d4fde14610585578063c87b56dd146105a4575f5ffd5b80637cf8ed0d116100e35780637cf8ed0d146104ce5780638456cb59146104ee5780638abf6077146105025780638da5cb5b1461051657806395d89b4114610533575f5ffd5b80636352211e1461046857806370a0823114610487578063715018a6146104a657806379ba5097146104ba575f5ffd5b80633eb6b8cf1161019457806342966c681161016457806342966c68146103de57806349d12605146103fd5780634f1ef2861461042157806352d1902d146104345780635c975abb14610448575f5ffd5b80633eb6b8cf1461036d5780633f4ba83a1461038c57806340c10f19146103a057806342842e0e146103bf575f5ffd5b806323b872dd116101da57806323b872dd146102b857806326afaadd146102d75780633075db561461031b5780633659cfe61461032f5780633ab76e9f1461034e575f5ffd5b806301ffc9a71461020b57806306fdde031461023f578063081812fc14610260578063095ea7b314610297575b5f5ffd5b348015610216575f5ffd5b5061022a610225366004612542565b61069c565b60405190151581526020015b60405180910390f35b34801561024a575f5ffd5b506102536106e1565b60405161023691906125aa565b34801561026b575f5ffd5b5061027f61027a3660046125bc565b610772565b6040516001600160a01b039091168152602001610236565b3480156102a2575f5ffd5b506102b66102b13660046125e7565b610798565b005b3480156102c3575f5ffd5b506102b66102d2366004612611565b6108b1565b3480156102e2575f5ffd5b506102fc61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610236565b348015610326575f5ffd5b5061022a6108e2565b34801561033a575f5ffd5b506102b661034936600461264f565b6108fa565b348015610359575f5ffd5b5060975461027f906001600160a01b031681565b348015610378575f5ffd5b5061027f61038736600461267e565b6109c1565b348015610397575f5ffd5b506102b66109d5565b3480156103ab575f5ffd5b506102b66103ba3660046125e7565b6109e9565b3480156103ca575f5ffd5b506102b66103d9366004612611565b610ab4565b3480156103e9575f5ffd5b506102b66103f83660046125bc565b610ace565b348015610408575f5ffd5b506104136101605481565b604051908152602001610236565b6102b661042f366004612761565b610bcd565b34801561043f575f5ffd5b50610413610c82565b348015610453575f5ffd5b5061022a60c954610100900460ff1660021490565b348015610473575f5ffd5b5061027f6104823660046125bc565b610d33565b348015610492575f5ffd5b506104136104a136600461264f565b610d93565b3480156104b1575f5ffd5b506102b6610e18565b3480156104c5575f5ffd5b506102b6610e29565b3480156104d9575f5ffd5b5061015f5461027f906001600160a01b031681565b3480156104f9575f5ffd5b506102b6610ea0565b34801561050d575f5ffd5b5061027f610eb3565b348015610521575f5ffd5b506033546001600160a01b031661027f565b34801561053e575f5ffd5b50610253610ec1565b348015610552575f5ffd5b506102b66105613660046127ad565b610ed1565b348015610571575f5ffd5b5061027f6105803660046127e0565b610edc565b348015610590575f5ffd5b506102b661059f366004612801565b610eef565b3480156105af575f5ffd5b506102536105be3660046125bc565b610f27565b3480156105ce575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b039091168152602001610236565b348015610604575f5ffd5b506065546001600160a01b031661027f565b348015610621575f5ffd5b5061022a610630366004612868565b6001600160a01b039182165f9081526101326020908152604080832093909416825291909152205460ff1690565b348015610669575f5ffd5b506102b66106783660046128e3565b610f50565b348015610688575f5ffd5b506102b661069736600461264f565b611102565b5f6001600160e01b0319821663093e326b60e21b14806106cc57506001600160e01b031982166377c6257360e11b145b806106db57506106db82611173565b92915050565b606061012d80546106f190612990565b80601f016020809104026020016040519081016040528092919081815260200182805461071d90612990565b80156107685780601f1061073f57610100808354040283529160200191610768565b820191905f5260205f20905b81548152906001019060200180831161074b57829003601f168201915b5050505050905090565b5f61077c826111c2565b505f90815261013160205260409020546001600160a01b031690565b5f6107a282610d33565b9050806001600160a01b0316836001600160a01b0316036108145760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061083057506108308133610630565b6108a25760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161080b565b6108ac8383611221565b505050565b6108bb338261128f565b6108d75760405162461bcd60e51b815260040161080b906129c8565b6108ac83838361130c565b5f60026108f160c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100971630036109425760405162461bcd60e51b815260040161080b90612a15565b7f00000000000000000000000001670010000000000000000000000000000100976001600160a01b031661097461147e565b6001600160a01b03161461099a5760405162461bcd60e51b815260040161080b90612a61565b6109a381611499565b604080515f808252602082019092526109be918391906114a1565b50565b5f6109cd84848461160b565b949350505050565b6109dd611667565b6109e7335f6116f7565b565b6109fd60c954610100900460ff1660021490565b15610a1b5760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610a36816001610edc565b6001600160a01b0316336001600160a01b031614610a6757604051630d85cccf60e11b815260040160405180910390fd5b6002610a7560c95460ff1690565b60ff1603610a965760405163dfc60d8560e01b815260040160405180910390fd5b610aa060026116ff565b610aaa8383611715565b6108ac60016116ff565b6108ac83838360405180602001604052805f815250610eef565b610ae260c954610100900460ff1660021490565b15610b005760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610b1b816001610edc565b6001600160a01b0316336001600160a01b031614610b4c57604051630d85cccf60e11b815260040160405180910390fd5b6002610b5a60c95460ff1690565b60ff1603610b7b5760405163dfc60d8560e01b815260040160405180910390fd5b610b8560026116ff565b33610b8f83610d33565b6001600160a01b031614610bb65760405163358bf3d960e01b815260040160405180910390fd5b610bbf8261172e565b610bc960016116ff565b5050565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000010097163003610c155760405162461bcd60e51b815260040161080b90612a15565b7f00000000000000000000000001670010000000000000000000000000000100976001600160a01b0316610c4761147e565b6001600160a01b031614610c6d5760405162461bcd60e51b815260040161080b90612a61565b610c7682611499565b610bc9828260016114a1565b5f306001600160a01b037f00000000000000000000000001670010000000000000000000000000000100971614610d215760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161080b565b505f516020612e1e5f395f51905f5290565b5f81815261012f60205260408120546001600160a01b0316806106db5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161080b565b5f6001600160a01b038216610dfc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161080b565b506001600160a01b03165f908152610130602052604090205490565b610e206117d0565b6109e75f61182a565b60655433906001600160a01b03168114610e975760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161080b565b6109be8161182a565b610ea8611843565b6109e73360016116f7565b5f610ebc61147e565b905090565b606061012e80546106f190612990565b610bc93383836118b4565b5f610ee846848461160b565b9392505050565b610ef9338361128f565b610f155760405162461bcd60e51b815260040161080b906129c8565b610f2184848484611982565b50505050565b61015f54610160546060916106db916001600160a01b0390911690610f4b856119b5565b611a44565b5f54610100900460ff1615808015610f6e57505f54600160ff909116105b80610f875750303b158015610f8757505f5460ff166001145b610fea5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161080b565b5f805460ff19166001179055801561100b575f805461ff0019166101001790555b6110158787611a8e565b61101f8989611aca565b61109083838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611b0492505050565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905580156110f7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61110a6117d0565b606580546001600160a01b0383166001600160a01b0319909116811790915561113b6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b031982166380ac58cd60e01b14806111a357506001600160e01b03198216635b5e139f60e01b145b806106db57506301ffc9a760e01b6001600160e01b03198316146106db565b5f81815261012f60205260409020546001600160a01b03166109be5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161080b565b5f8181526101316020526040902080546001600160a01b0319166001600160a01b038416908117909155819061125682610d33565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f61129a83610d33565b9050806001600160a01b0316846001600160a01b031614806112e157506001600160a01b038082165f908152610132602090815260408083209388168352929052205460ff165b806109cd5750836001600160a01b03166112fa84610772565b6001600160a01b031614949350505050565b826001600160a01b031661131f82610d33565b6001600160a01b0316146113455760405162461bcd60e51b815260040161080b90612aad565b6001600160a01b0382166113a75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161080b565b6113b48383836001611b34565b826001600160a01b03166113c782610d33565b6001600160a01b0316146113ed5760405162461bcd60e51b815260040161080b90612aad565b5f8181526101316020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652610130855283862080545f190190559087168086528386208054600101905586865261012f90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f516020612e1e5f395f51905f52546001600160a01b031690565b6109be6117d0565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156114d4576108ac83611b74565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561152e575060408051601f3d908101601f1916820190925261152b91810190612af2565b60015b6115915760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161080b565b5f516020612e1e5f395f51905f5281146115ff5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161080b565b506108ac838383611c0f565b5f6116168484611c33565b9050818061162c57506001600160a01b03811615155b8484909161165e57604051632b0d65db60e01b81526001600160401b039092166004830152602482015260440161080b565b50509392505050565b61167b60c954610100900460ff1660021490565b6116985760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610bc96117d0565b60c9805460ff191660ff92909216919091179055565b610bc9828260405180602001604052805f815250611cd5565b5f61173882610d33565b9050611747815f846001611b34565b61175082610d33565b5f8381526101316020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552610130845282852080545f1901905587855261012f909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6033546001600160a01b031633146109e75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080b565b606580546001600160a01b03191690556109be81611d07565b61185760c954610100900460ff1660021490565b156118755760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016116ed565b816001600160a01b0316836001600160a01b0316036119155760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161080b565b6001600160a01b038381165f8181526101326020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61198d84848461130c565b61199984848484611d58565b610f215760405162461bcd60e51b815260040161080b90612b09565b60605f6119c183611e55565b60010190505f816001600160401b038111156119df576119df6126c4565b6040519080825280601f01601f191660200182016040528015611a09576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611a1357509392505050565b6060611a5a846001600160a01b03166014611f2c565b611a63846119b5565b83604051602001611a7693929190612b5b565b60405160208183030381529060405290509392505050565b6001600160a01b0382161580611aa2575080155b80611aac57504681145b15610bc95760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611af25760405163538ba4f960e01b815260040160405180910390fd5b611afb836120c1565b6108ac8261211f565b5f54610100900460ff16611b2a5760405162461bcd60e51b815260040161080b90612be3565b610bc9828261218f565b611b4860c954610100900460ff1660021490565b15611b665760405163bae6e2a960e01b815260040160405180910390fd5b611b6f836121d0565b610f21565b6001600160a01b0381163b611be15760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161080b565b5f516020612e1e5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611c18836121f9565b5f82511180611c245750805b156108ac57610f218383612238565b6097545f906001600160a01b031680611c5f57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611cb1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109cd9190612c2e565b611cdf838361225d565b611ceb5f848484611d58565b6108ac5760405162461bcd60e51b815260040161080b90612b09565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b0384163b15611e4a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d9b903390899088908890600401612c49565b6020604051808303815f875af1925050508015611dd5575060408051601f3d908101601f19168201909252611dd291810190612c7b565b60015b611e30573d808015611e02576040519150601f19603f3d011682016040523d82523d5f602084013e611e07565b606091505b5080515f03611e285760405162461bcd60e51b815260040161080b90612b09565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506109cd565b506001949350505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611e935772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611ebf576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611edd57662386f26fc10000830492506010015b6305f5e1008310611ef5576305f5e100830492506008015b6127108310611f0957612710830492506004015b60648310611f1b576064830492506002015b600a83106106db5760010192915050565b60605f611f3a836002612caa565b611f45906002612cc1565b6001600160401b03811115611f5c57611f5c6126c4565b6040519080825280601f01601f191660200182016040528015611f86576020820181803683370190505b509050600360fc1b815f81518110611fa057611fa0612cd4565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611fce57611fce612cd4565b60200101906001600160f81b03191690815f1a9053505f611ff0846002612caa565b611ffb906001612cc1565b90505b6001811115612072576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061202f5761202f612cd4565b1a60f81b82828151811061204557612045612cd4565b60200101906001600160f81b03191690815f1a90535060049490941c9361206b81612ce8565b9050611ffe565b508315610ee85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161080b565b5f54610100900460ff166120e75760405162461bcd60e51b815260040161080b90612be3565b6120ef6123f6565b61210d6001600160a01b03821615612107578161182a565b3361182a565b5060c9805461ff001916610100179055565b5f54610100900460ff166121455760405162461bcd60e51b815260040161080b90612be3565b6001600160401b0346111561216d5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff166121b55760405162461bcd60e51b815260040161080b90612be3565b61012d6121c28382612d48565b5061012e6108ac8282612d48565b306001600160a01b038216036109be57604051630c292c9d60e21b815260040160405180910390fd5b61220281611b74565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610ee88383604051806060016040528060278152602001612e3e6027913961241c565b6001600160a01b0382166122b35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161080b565b5f81815261012f60205260409020546001600160a01b0316156123185760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161080b565b6123255f83836001611b34565b5f81815261012f60205260409020546001600160a01b03161561238a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161080b565b6001600160a01b0382165f818152610130602090815260408083208054600101905584835261012f90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f54610100900460ff166109e75760405162461bcd60e51b815260040161080b90612be3565b60605f5f856001600160a01b0316856040516124389190612e02565b5f60405180830381855af49150503d805f8114612470576040519150601f19603f3d011682016040523d82523d5f602084013e612475565b606091505b509150915061248686838387612490565b9695505050505050565b606083156124fe5782515f036124f7576001600160a01b0385163b6124f75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161080b565b50816109cd565b6109cd83838151156125135781518083602001fd5b8060405162461bcd60e51b815260040161080b91906125aa565b6001600160e01b0319811681146109be575f5ffd5b5f60208284031215612552575f5ffd5b8135610ee88161252d565b5f5b8381101561257757818101518382015260200161255f565b50505f910152565b5f815180845261259681602086016020860161255d565b601f01601f19169290920160200192915050565b602081525f610ee8602083018461257f565b5f602082840312156125cc575f5ffd5b5035919050565b6001600160a01b03811681146109be575f5ffd5b5f5f604083850312156125f8575f5ffd5b8235612603816125d3565b946020939093013593505050565b5f5f5f60608486031215612623575f5ffd5b833561262e816125d3565b9250602084013561263e816125d3565b929592945050506040919091013590565b5f6020828403121561265f575f5ffd5b8135610ee8816125d3565b80358015158114612679575f5ffd5b919050565b5f5f5f60608486031215612690575f5ffd5b83356001600160401b03811681146126a6575f5ffd5b9250602084013591506126bb6040850161266a565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126126e7575f5ffd5b81356001600160401b03811115612700576127006126c4565b604051601f8201601f19908116603f011681016001600160401b038111828210171561272e5761272e6126c4565b604052818152838201602001851015612745575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215612772575f5ffd5b823561277d816125d3565b915060208301356001600160401b03811115612797575f5ffd5b6127a3858286016126d8565b9150509250929050565b5f5f604083850312156127be575f5ffd5b82356127c9816125d3565b91506127d76020840161266a565b90509250929050565b5f5f604083850312156127f1575f5ffd5b823591506127d76020840161266a565b5f5f5f5f60808587031215612814575f5ffd5b843561281f816125d3565b9350602085013561282f816125d3565b92506040850135915060608501356001600160401b03811115612850575f5ffd5b61285c878288016126d8565b91505092959194509250565b5f5f60408385031215612879575f5ffd5b8235612884816125d3565b91506020830135612894816125d3565b809150509250929050565b5f5f83601f8401126128af575f5ffd5b5081356001600160401b038111156128c5575f5ffd5b6020830191508360208285010111156128dc575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b0312156128fa575f5ffd5b8835612905816125d3565b97506020890135612915816125d3565b96506040890135612925816125d3565b95506060890135945060808901356001600160401b03811115612946575f5ffd5b6129528b828c0161289f565b90955093505060a08901356001600160401b03811115612970575f5ffd5b61297c8b828c0161289f565b999c989b5096995094979396929594505050565b600181811c908216806129a457607f821691505b6020821081036129c257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b5f60208284031215612b02575f5ffd5b5051919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6832ba3432b932bab69d60b91b81525f8451612b7e81600985016020890161255d565b600160fe1b6009918401918201528451612b9f81600a84016020890161255d565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b60018201528351612bd681601384016020880161255d565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612c3e575f5ffd5b8151610ee8816125d3565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906124869083018461257f565b5f60208284031215612c8b575f5ffd5b8151610ee88161252d565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176106db576106db612c96565b808201808211156106db576106db612c96565b634e487b7160e01b5f52603260045260245ffd5b5f81612cf657612cf6612c96565b505f190190565b601f8211156108ac57805f5260205f20601f840160051c81016020851015612d225750805b601f840160051c820191505b81811015612d41575f8155600101612d2e565b5050505050565b81516001600160401b03811115612d6157612d616126c4565b612d7581612d6f8454612990565b84612cfd565b6020601f821160018114612da7575f8315612d905750848201515b5f19600385901b1c1916600184901b178455612d41565b5f84815260208120601f198516915b82811015612dd65787850151825560209485019460019092019101612db6565b5084821015612df357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f8251612e1381846020870161255d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212208e7f20477658f6c21c4be2af9744b613a47f16bf810f8e2ba3e96632cba2471a64736f6c634300081b0033", - "balance": "0x0" - }, - "0x0167001000000000000000000000000000010098": { - "contractName": "BridgedERC1155", - "storage": {}, - "code": "0x6080604052600436106101e5575f3560e01c8063715018a611610108578063a86f9d9e1161009d578063e30c39781161006d578063e30c397814610568578063e985e9c514610585578063ef8c4ae6146105cd578063f242432a146105ec578063f2fde38b1461060b575f5ffd5b8063a86f9d9e146104d5578063b390c0ab146104f4578063d81d0a1514610513578063e07baba614610532575f5ffd5b80638abf6077116100d85780638abf6077146104715780638da5cb5b1461048557806395d89b41146104a2578063a22cb465146104b6575f5ffd5b8063715018a61461041557806379ba5097146104295780637cf8ed0d1461043d5780638456cb591461045d575f5ffd5b80633ab76e9f1161017e5780634e1273f41161014e5780634e1273f4146103a25780634f1ef286146103ce57806352d1902d146103e15780635c975abb146103f5575f5ffd5b80633ab76e9f146103225780633eb6b8cf146103595780633f4ba83a1461037857806349d126051461038c575f5ffd5b806326afaadd116101b957806326afaadd1461028a5780632eb2c2d6146102ce5780633075db56146102ef5780633659cfe614610303575f5ffd5b8062fdd58e146101e957806301ffc9a71461021b57806306fdde031461024a5780630e89341c1461026b575b5f5ffd5b3480156101f4575f5ffd5b506102086102033660046126ae565b61062a565b6040519081526020015b60405180910390f35b348015610226575f5ffd5b5061023a6102353660046126ed565b6106c4565b6040519015158152602001610212565b348015610255575f5ffd5b5061025e610703565b6040516102129190612755565b348015610276575f5ffd5b5061025e610285366004612767565b610790565b348015610295575f5ffd5b506102af61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610212565b3480156102d9575f5ffd5b506102ed6102e83660046128c0565b610823565b005b3480156102fa575f5ffd5b5061023a61086f565b34801561030e575f5ffd5b506102ed61031d366004612970565b610887565b34801561032d575f5ffd5b50609754610341906001600160a01b031681565b6040516001600160a01b039091168152602001610212565b348015610364575f5ffd5b5061034161037336600461299f565b61094e565b348015610383575f5ffd5b506102ed610962565b348015610397575f5ffd5b506102086101605481565b3480156103ad575f5ffd5b506103c16103bc3660046129e5565b610976565b6040516102129190612aee565b6102ed6103dc366004612b00565b610a95565b3480156103ec575f5ffd5b50610208610b4e565b348015610400575f5ffd5b5061023a60c954610100900460ff1660021490565b348015610420575f5ffd5b506102ed610c00565b348015610434575f5ffd5b506102ed610c11565b348015610448575f5ffd5b5061015f54610341906001600160a01b031681565b348015610468575f5ffd5b506102ed610c88565b34801561047c575f5ffd5b50610341610c9b565b348015610490575f5ffd5b506033546001600160a01b0316610341565b3480156104ad575f5ffd5b5061025e610ca9565b3480156104c1575f5ffd5b506102ed6104d0366004612b42565b610cb7565b3480156104e0575f5ffd5b506103416104ef366004612b75565b610cc2565b3480156104ff575f5ffd5b506102ed61050e366004612b96565b610cd5565b34801561051e575f5ffd5b506102ed61052d366004612bfd565b610da7565b34801561053d575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b039091168152602001610212565b348015610573575f5ffd5b506065546001600160a01b0316610341565b348015610590575f5ffd5b5061023a61059f366004612c7d565b6001600160a01b039182165f90815261012e6020908152604080832093909416825291909152205460ff1690565b3480156105d8575f5ffd5b506102ed6105e7366004612cf1565b610eeb565b3480156105f7575f5ffd5b506102ed610606366004612d9e565b61106b565b348015610616575f5ffd5b506102ed610625366004612970565b6110b0565b5f6001600160a01b0383166106995760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f81815261012d602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b03198216634d22606360e01b14806106f457506001600160e01b031982166377c6257360e11b145b806106be57506106be82611121565b610162805461071190612df5565b80601f016020809104026020016040519081016040528092919081815260200182805461073d90612df5565b80156107885780601f1061075f57610100808354040283529160200191610788565b820191905f5260205f20905b81548152906001019060200180831161076b57829003601f168201915b505050505081565b606061012f80546107a090612df5565b80601f01602080910402602001604051908101604052809291908181526020018280546107cc90612df5565b80156108175780601f106107ee57610100808354040283529160200191610817565b820191905f5260205f20905b8154815290600101906020018083116107fa57829003601f168201915b50505050509050919050565b6001600160a01b03851633148061083f575061083f853361059f565b61085b5760405162461bcd60e51b815260040161069090612e2d565b6108688585858585611170565b5050505050565b5f600261087e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100981630036108cf5760405162461bcd60e51b815260040161069090612e7b565b7f00000000000000000000000001670010000000000000000000000000000100986001600160a01b031661090161130b565b6001600160a01b0316146109275760405162461bcd60e51b815260040161069090612ec7565b61093081611326565b604080515f8082526020820190925261094b9183919061132e565b50565b5f61095a848484611498565b949350505050565b61096a6114f4565b610974335f611584565b565b606081518351146109db5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610690565b5f83516001600160401b038111156109f5576109f561277e565b604051908082528060200260200182016040528015610a1e578160200160208202803683370190505b5090505f5b8451811015610a8d57610a68858281518110610a4157610a41612f13565b6020026020010151858381518110610a5b57610a5b612f13565b602002602001015161062a565b828281518110610a7a57610a7a612f13565b6020908102919091010152600101610a23565b509392505050565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000010098163003610add5760405162461bcd60e51b815260040161069090612e7b565b7f00000000000000000000000001670010000000000000000000000000000100986001600160a01b0316610b0f61130b565b6001600160a01b031614610b355760405162461bcd60e51b815260040161069090612ec7565b610b3e82611326565b610b4a8282600161132e565b5050565b5f306001600160a01b037f00000000000000000000000001670010000000000000000000000000000100981614610bed5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610690565b505f5160206134ec5f395f51905f525b90565b610c08611588565b6109745f6115e2565b60655433906001600160a01b03168114610c7f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610690565b61094b816115e2565b610c906115fb565b610974336001611584565b5f610ca461130b565b905090565b610161805461071190612df5565b610b4a33838361166c565b5f610cce468484611498565b9392505050565b610ce960c954610100900460ff1660021490565b15610d075760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610d23816001610cc2565b6001600160a01b0316336001600160a01b031614610d5457604051630d85cccf60e11b815260040160405180910390fd5b6002610d6260c95460ff1690565b60ff1603610d835760405163dfc60d8560e01b815260040160405180910390fd5b610d8d600261174c565b610d98338484611762565b610da2600161174c565b505050565b610dbb60c954610100900460ff1660021490565b15610dd95760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610df5816001610cc2565b6001600160a01b0316336001600160a01b031614610e2657604051630d85cccf60e11b815260040160405180910390fd5b6002610e3460c95460ff1690565b60ff1603610e555760405163dfc60d8560e01b815260040160405180910390fd5b610e5f600261174c565b610ed9868686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284375f920182905250604080516020810190915290815292506118f6915050565b610ee3600161174c565b505050505050565b5f54610100900460ff1615808015610f0957505f54600160ff909116105b80610f225750303b158015610f2257505f5460ff166001145b610f855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610690565b5f805460ff191660011790558015610fa6575f805461ff0019166101001790555b610fb08787611a78565b610fba8989611ab4565b610fdb610fd6888860405180602001604052805f815250611aee565b611b38565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905561016161100b858783612f6b565b5061016261101a838583612f6b565b508015611060575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6001600160a01b0385163314806110875750611087853361059f565b6110a35760405162461bcd60e51b815260040161069090612e2d565b6108688585858585611b67565b6110b8611588565b606580546001600160a01b0383166001600160a01b031990911681179091556110e96033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b03198216636cdb3d1360e11b148061115157506001600160e01b031982166303a24d0760e21b145b806106be57506301ffc9a760e01b6001600160e01b03198316146106be565b81518351146111915760405162461bcd60e51b815260040161069090613024565b6001600160a01b0384166111b75760405162461bcd60e51b81526004016106909061306c565b336111c6818787878787611c96565b5f5b84518110156112a5575f8582815181106111e4576111e4612f13565b602002602001015190505f85838151811061120157611201612f13565b6020908102919091018101515f84815261012d835260408082206001600160a01b038e1683529093529190912054909150818110156112525760405162461bcd60e51b8152600401610690906130b1565b5f83815261012d602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061129190849061310f565b9091555050600190930192506111c8915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112f5929190613122565b60405180910390a4610ee3818787878787611cd6565b5f5160206134ec5f395f51905f52546001600160a01b031690565b61094b611588565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561136157610da283611e30565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113bb575060408051601f3d908101601f191682019092526113b89181019061314f565b60015b61141e5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610690565b5f5160206134ec5f395f51905f52811461148c5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610690565b50610da2838383611ecb565b5f6114a38484611ef5565b905081806114b957506001600160a01b03811615155b848490916114eb57604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610690565b50509392505050565b61150860c954610100900460ff1660021490565b6115255760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610b4a5b6033546001600160a01b031633146109745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610690565b606580546001600160a01b031916905561094b81611f97565b61160f60c954610100900460ff1660021490565b1561162d5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161157a565b816001600160a01b0316836001600160a01b0316036116df5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610690565b6001600160a01b038381165f81815261012e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60c9805460ff191660ff92909216919091179055565b6001600160a01b0383166117c45760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610690565b335f6117cf84611fe8565b90505f6117db84611fe8565b90506117f983875f858560405180602001604052805f815250611c96565b5f85815261012d602090815260408083206001600160a01b038a168452909152902054848110156118785760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610690565b5f86815261012d602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091525f90525b50505050505050565b6001600160a01b0384166119565760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610690565b81518351146119775760405162461bcd60e51b815260040161069090613024565b33611986815f87878787611c96565b5f5b8451811015611a12578381815181106119a3576119a3612f13565b602002602001015161012d5f8784815181106119c1576119c1612f13565b602002602001015181526020019081526020015f205f886001600160a01b03166001600160a01b031681526020019081526020015f205f828254611a05919061310f565b9091555050600101611988565b50846001600160a01b03165f6001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a62929190613122565b60405180910390a4610868815f87878787611cd6565b6001600160a01b0382161580611a8c575080155b80611a9657504681145b15610b4a5760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611adc5760405163538ba4f960e01b815260040160405180910390fd5b611ae583612031565b610da28261208f565b6060611b04846001600160a01b031660146120ff565b611b0d84612294565b83604051602001611b2093929190613166565b60405160208183030381529060405290509392505050565b5f54610100900460ff16611b5e5760405162461bcd60e51b8152600401610690906131ee565b61094b81612323565b6001600160a01b038416611b8d5760405162461bcd60e51b81526004016106909061306c565b335f611b9885611fe8565b90505f611ba485611fe8565b9050611bb4838989858589611c96565b5f86815261012d602090815260408083206001600160a01b038c16845290915290205485811015611bf75760405162461bcd60e51b8152600401610690906130b1565b5f87815261012d602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611c3690849061310f565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611060848a8a8a8a8a612352565b611caa60c954610100900460ff1660021490565b15611cc85760405163bae6e2a960e01b815260040160405180910390fd5b611cd18461240c565b610ee3565b6001600160a01b0384163b15610ee35760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611d1a9089908990889088908890600401613239565b6020604051808303815f875af1925050508015611d54575060408051601f3d908101601f19168201909252611d5191810190613296565b60015b611e0057611d606132b1565b806308c379a003611d995750611d746132c9565b80611d7f5750611d9b565b8060405162461bcd60e51b81526004016106909190612755565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610690565b6001600160e01b0319811663bc197c8160e01b146118ed5760405162461bcd60e51b815260040161069090613343565b6001600160a01b0381163b611e9d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610690565b5f5160206134ec5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611ed483612435565b5f82511180611ee05750805b15610da257611eef8383612474565b50505050565b6097545f906001600160a01b031680611f2157604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611f73573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095a919061338b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f8151811061202057612020612f13565b602090810291909101015292915050565b5f54610100900460ff166120575760405162461bcd60e51b8152600401610690906131ee565b61205f612499565b61207d6001600160a01b0382161561207757816115e2565b336115e2565b5060c9805461ff001916610100179055565b5f54610100900460ff166120b55760405162461bcd60e51b8152600401610690906131ee565b6001600160401b034611156120dd5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b60605f61210d8360026133a6565b61211890600261310f565b6001600160401b0381111561212f5761212f61277e565b6040519080825280601f01601f191660200182016040528015612159576020820181803683370190505b509050600360fc1b815f8151811061217357612173612f13565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106121a1576121a1612f13565b60200101906001600160f81b03191690815f1a9053505f6121c38460026133a6565b6121ce90600161310f565b90505b6001811115612245576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061220257612202612f13565b1a60f81b82828151811061221857612218612f13565b60200101906001600160f81b03191690815f1a90535060049490941c9361223e816133bd565b90506121d1565b508315610cce5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610690565b60605f6122a0836124bf565b60010190505f816001600160401b038111156122be576122be61277e565b6040519080825280601f01601f1916602001820160405280156122e8576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846122f257509392505050565b5f54610100900460ff166123495760405162461bcd60e51b8152600401610690906131ee565b61094b81612596565b6001600160a01b0384163b15610ee35760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061239690899089908890889088906004016133d2565b6020604051808303815f875af19250505080156123d0575060408051601f3d908101601f191682019092526123cd91810190613296565b60015b6123dc57611d606132b1565b6001600160e01b0319811663f23a6e6160e01b146118ed5760405162461bcd60e51b815260040161069090613343565b306001600160a01b0382160361094b57604051630c292c9d60e21b815260040160405180910390fd5b61243e81611e30565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610cce838360405180606001604052806027815260200161350c602791396125a3565b5f54610100900460ff166109745760405162461bcd60e51b8152600401610690906131ee565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106124fd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612529576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061254757662386f26fc10000830492506010015b6305f5e100831061255f576305f5e100830492506008015b612710831061257357612710830492506004015b60648310612585576064830492506002015b600a83106106be5760010192915050565b61012f610b4a8282613416565b60605f5f856001600160a01b0316856040516125bf91906134d0565b5f60405180830381855af49150503d805f81146125f7576040519150601f19603f3d011682016040523d82523d5f602084013e6125fc565b606091505b509150915061260d86838387612617565b9695505050505050565b606083156126855782515f0361267e576001600160a01b0385163b61267e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610690565b508161095a565b61095a8383815115611d7f5781518083602001fd5b6001600160a01b038116811461094b575f5ffd5b5f5f604083850312156126bf575f5ffd5b82356126ca8161269a565b946020939093013593505050565b6001600160e01b03198116811461094b575f5ffd5b5f602082840312156126fd575f5ffd5b8135610cce816126d8565b5f5b8381101561272257818101518382015260200161270a565b50505f910152565b5f8151808452612741816020860160208601612708565b601f01601f19169290920160200192915050565b602081525f610cce602083018461272a565b5f60208284031215612777575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b03811182821017156127b7576127b761277e565b6040525050565b5f6001600160401b038211156127d6576127d661277e565b5060051b60200190565b5f82601f8301126127ef575f5ffd5b81356127fa816127be565b6040516128078282612792565b80915082815260208101915060208360051b86010192508583111561282a575f5ffd5b602085015b8381101561284757803583526020928301920161282f565b5095945050505050565b5f82601f830112612860575f5ffd5b81356001600160401b038111156128795761287961277e565b604051612890601f8301601f191660200182612792565b8181528460208386010111156128a4575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a086880312156128d4575f5ffd5b85356128df8161269a565b945060208601356128ef8161269a565b935060408601356001600160401b03811115612909575f5ffd5b612915888289016127e0565b93505060608601356001600160401b03811115612930575f5ffd5b61293c888289016127e0565b92505060808601356001600160401b03811115612957575f5ffd5b61296388828901612851565b9150509295509295909350565b5f60208284031215612980575f5ffd5b8135610cce8161269a565b8035801515811461299a575f5ffd5b919050565b5f5f5f606084860312156129b1575f5ffd5b83356001600160401b03811681146129c7575f5ffd5b9250602084013591506129dc6040850161298b565b90509250925092565b5f5f604083850312156129f6575f5ffd5b82356001600160401b03811115612a0b575f5ffd5b8301601f81018513612a1b575f5ffd5b8035612a26816127be565b604051612a338282612792565b80915082815260208101915060208360051b850101925087831115612a56575f5ffd5b6020840193505b82841015612a81578335612a708161269a565b825260209384019390910190612a5d565b945050505060208301356001600160401b03811115612a9e575f5ffd5b612aaa858286016127e0565b9150509250929050565b5f8151808452602084019350602083015f5b82811015612ae4578151865260209586019590910190600101612ac6565b5093949350505050565b602081525f610cce6020830184612ab4565b5f5f60408385031215612b11575f5ffd5b8235612b1c8161269a565b915060208301356001600160401b03811115612b36575f5ffd5b612aaa85828601612851565b5f5f60408385031215612b53575f5ffd5b8235612b5e8161269a565b9150612b6c6020840161298b565b90509250929050565b5f5f60408385031215612b86575f5ffd5b82359150612b6c6020840161298b565b5f5f60408385031215612ba7575f5ffd5b50508035926020909101359150565b5f5f83601f840112612bc6575f5ffd5b5081356001600160401b03811115612bdc575f5ffd5b6020830191508360208260051b8501011115612bf6575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c11575f5ffd5b8535612c1c8161269a565b945060208601356001600160401b03811115612c36575f5ffd5b612c4288828901612bb6565b90955093505060408601356001600160401b03811115612c60575f5ffd5b612c6c88828901612bb6565b969995985093965092949392505050565b5f5f60408385031215612c8e575f5ffd5b8235612c998161269a565b91506020830135612ca98161269a565b809150509250929050565b5f5f83601f840112612cc4575f5ffd5b5081356001600160401b03811115612cda575f5ffd5b602083019150836020828501011115612bf6575f5ffd5b5f5f5f5f5f5f5f5f60c0898b031215612d08575f5ffd5b8835612d138161269a565b97506020890135612d238161269a565b96506040890135612d338161269a565b95506060890135945060808901356001600160401b03811115612d54575f5ffd5b612d608b828c01612cb4565b90955093505060a08901356001600160401b03811115612d7e575f5ffd5b612d8a8b828c01612cb4565b999c989b5096995094979396929594505050565b5f5f5f5f5f60a08688031215612db2575f5ffd5b8535612dbd8161269a565b94506020860135612dcd8161269a565b9350604086013592506060860135915060808601356001600160401b03811115612957575f5ffd5b600181811c90821680612e0957607f821691505b602082108103612e2757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b601f821115610da257805f5260205f20601f840160051c81016020851015612f4c5750805b601f840160051c820191505b81811015610868575f8155600101612f58565b6001600160401b03831115612f8257612f8261277e565b612f9683612f908354612df5565b83612f27565b5f601f841160018114612fc7575f8515612fb05750838201355b5f19600387901b1c1916600186901b178355610868565b5f83815260208120601f198716915b82811015612ff65786850135825560209485019460019092019101612fd6565b5086821015613012575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106be576106be6130fb565b604081525f6131346040830185612ab4565b82810360208401526131468185612ab4565b95945050505050565b5f6020828403121561315f575f5ffd5b5051919050565b6832ba3432b932bab69d60b91b81525f8451613189816009850160208901612708565b600160fe1b60099184019182015284516131aa81600a840160208901612708565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b600182015283516131e1816013840160208801612708565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190525f9061326490830186612ab4565b82810360608401526132768186612ab4565b9050828103608084015261328a818561272a565b98975050505050505050565b5f602082840312156132a6575f5ffd5b8151610cce816126d8565b5f60033d1115610bfd5760045f5f3e505f5160e01c90565b5f60443d10156132d65790565b6040513d600319016004823e80513d60248201116001600160401b03821117156132ff57505090565b80820180516001600160401b0381111561331a575050505090565b3d8401600319018282016020011115613334575050505090565b610a8d60208285010185612792565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b5f6020828403121561339b575f5ffd5b8151610cce8161269a565b80820281158282048414176106be576106be6130fb565b5f816133cb576133cb6130fb565b505f190190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f9061340b9083018461272a565b979650505050505050565b81516001600160401b0381111561342f5761342f61277e565b6134438161343d8454612df5565b84612f27565b6020601f821160018114613475575f831561345e5750848201515b5f19600385901b1c1916600184901b178455610868565b5f84815260208120601f198516915b828110156134a45787850151825560209485019460019092019101613484565b50848210156134c157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516134e1818460208701612708565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c61a0d82a4e192122d117e9aa6be00523577e93729686599c4b7a65f3e3ad5c264736f6c634300081b0033", - "balance": "0x0" - }, - "0x0167001000000000000000000000000000000005": { - "contractName": "SignalServiceImpl", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" - }, - "code": "0x6080604052600436106101c5575f3560e01c806379ba5097116100f2578063a86f9d9e11610092578063e30c397811610062578063e30c39781461052d578063f09a40161461054a578063f2fde38b14610569578063fe9fbb8014610588575f5ffd5b8063a86f9d9e1461048e578063ce9d0820146104ad578063dfc8ff1d146104cc578063e07baba61461050a575f5ffd5b80638da5cb5b116100cd5780638da5cb5b14610414578063910af6ed1461043157806391f3f74b146104505780639b527cfa1461046f575f5ffd5b806379ba5097146103d85780638456cb59146103ec5780638abf607714610400575f5ffd5b80633eb6b8cf1161016857806352d1902d1161013857806352d1902d146103715780635c975abb1461038557806366ca2bc0146103a5578063715018a6146103c4575f5ffd5b80633eb6b8cf146102fe5780633f4ba83a1461031d5780634f1ef286146103315780634f90a67414610344575f5ffd5b8063355bcc3d116101a3578063355bcc3d146102325780633659cfe6146102895780633ab76e9f146102a85780633ced0e08146102df575f5ffd5b80632d1fb389146101c95780633075db56146101ea57806332676bc614610213575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e3366004613523565b6105b6565b005b3480156101f5575f5ffd5b506101fe61065c565b60405190151581526020015b60405180910390f35b34801561021e575f5ffd5b506101fe61022d366004613556565b610674565b34801561023d575f5ffd5b5061027161024c366004613596565b60fb60209081525f92835260408084209091529082529020546001600160401b031681565b6040516001600160401b03909116815260200161020a565b348015610294575f5ffd5b506101e86102a33660046135b0565b61068a565b3480156102b3575f5ffd5b506097546102c7906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b3480156102ea575f5ffd5b506101fe6102f93660046135cb565b61075a565b348015610309575f5ffd5b506102c761031836600461360c565b6107a1565b348015610328575f5ffd5b506101e86107b7565b6101e861033f36600461371c565b6107cb565b34801561034f575f5ffd5b5061036361035e3660046135cb565b610884565b60405190815260200161020a565b34801561037c575f5ffd5b506103636108ca565b348015610390575f5ffd5b506101fe60c954610100900460ff1660021490565b3480156103b0575f5ffd5b506103636103bf366004613768565b61097b565b3480156103cf575f5ffd5b506101e8610987565b3480156103e3575f5ffd5b506101e8610998565b3480156103f7575f5ffd5b506101e8610a0f565b34801561040b575f5ffd5b506102c7610a22565b34801561041f575f5ffd5b506033546001600160a01b03166102c7565b34801561043c575f5ffd5b5061036361044b36600461377f565b610a30565b34801561045b575f5ffd5b5061036361046a366004613814565b610b0b565b34801561047a575f5ffd5b50610363610489366004613850565b610b76565b348015610499575f5ffd5b506102c76104a8366004613880565b610ba2565b3480156104b8575f5ffd5b506101e86104c736600461377f565b610bae565b3480156104d7575f5ffd5b506104eb6104e6366004613850565b610bc4565b604080516001600160401b03909316835260208301919091520161020a565b348015610515575f5ffd5b5060c9546201000090046001600160401b0316610271565b348015610538575f5ffd5b506065546001600160a01b03166102c7565b348015610555575f5ffd5b506101e86105643660046138a1565b610c58565b348015610574575f5ffd5b506101e86105833660046135b0565b610d67565b348015610593575f5ffd5b506101fe6105a23660046135b0565b60fc6020525f908152604090205460ff1681565b6105be610dd8565b6001600160a01b0382165f90815260fc602052604090205481151560ff9091161515036105fe576040516398f26f4560e01b815260040160405180910390fd5b6001600160a01b0382165f81815260fc6020908152604091829020805460ff191685151590811790915591519182527f4c0079b9bcd37cd5d29a13938effd97c881798cbc6bd52a3026a29d94b27d1bf910160405180910390a25050565b5f600261066b60c95460ff1690565b60ff1614905090565b5f61067f8383610e32565b151590505b92915050565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000000051630036106db5760405162461bcd60e51b81526004016106d2906138d8565b60405180910390fd5b7f00000000000000000000000001670010000000000000000000000000000000056001600160a01b031661070d610e94565b6001600160a01b0316146107335760405162461bcd60e51b81526004016106d290613924565b61073c81610eaf565b604080515f8082526020820190925261075791839190610eb7565b50565b5f8180820361077c5760405163ec73295960e01b815260040160405180910390fd5b5f610788878787610b76565b9050836107953083610e32565b14979650505050505050565b5f6107ad848484611021565b90505b9392505050565b6107bf61107d565b6107c9335f61110d565b565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000000051630036108135760405162461bcd60e51b81526004016106d2906138d8565b7f00000000000000000000000001670010000000000000000000000000000000056001600160a01b0316610845610e94565b6001600160a01b03161461086b5760405162461bcd60e51b81526004016106d290613924565b61087482610eaf565b61088082826001610eb7565b5050565b335f90815260fc602052604081205460ff166108b357604051631f67751f60e01b815260040160405180910390fd5b6108bf85858585611126565b90505b949350505050565b5f306001600160a01b037f000000000000000000000000016700100000000000000000000000000000000516146109695760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106d2565b505f516020613eb85f395f51905f5290565b5f610684338384611208565b61098f610dd8565b6107c95f6112e1565b60655433906001600160a01b03168114610a065760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106d2565b610757816112e1565b610a176112fa565b6107c933600161110d565b5f610a2b610e94565b905090565b5f610a4560c954610100900460ff1660021490565b15610a635760405163bae6e2a960e01b815260040160405180910390fd5b6002610a7160c95460ff1690565b60ff1603610a925760405163dfc60d8560e01b815260040160405180910390fd5b60c9805460ff191660021790555f610aaf8787878787600161136b565b90505f5b8151811015610af257610ade828281518110610ad157610ad1613970565b6020026020010151611827565b610ae89084613998565b9250600101610ab3565b505060c9805460ff191660011790555b95945050505050565b6040516514d251d3905360d21b60208201526001600160c01b031960c085901b1660268201526bffffffffffffffffffffffff19606084901b16602e820152604281018290525f906062015b6040516020818303038152906040528051906020012090509392505050565b604080516001600160401b03808616602083015291810184905290821660608201525f90608001610b57565b5f6107b0468484611021565b610bbc85858585855f61136b565b505050505050565b5f5f826001600160401b03165f03610c00576001600160401b038086165f90815260fb6020908152604080832088845290915290205416610c02565b825b91506001600160401b03821615610c50575f610c1f868685610b76565b9050610c2b3082610e32565b91505f829003610c4e5760405163738afa0560e01b815260040160405180910390fd5b505b935093915050565b5f54610100900460ff1615808015610c7657505f54600160ff909116105b80610c8f5750303b158015610c8f57505f5460ff166001145b610cf25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d2565b5f805460ff191660011790558015610d13575f805461ff0019166101001790555b610d1d838361196b565b8015610d62575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610d6f610dd8565b606580546001600160a01b0383166001600160a01b03199091168117909155610da06033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146107c95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d2565b5f826001600160a01b038116610e5b5760405163538ba4f960e01b815260040160405180910390fd5b825f819003610e7d5760405163ec73295960e01b815260040160405180910390fd5b5f610e89468787610b0b565b549695505050505050565b5f516020613eb85f395f51905f52546001600160a01b031690565b610757610dd8565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610eea57610d62836119a5565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610f44575060408051601f3d908101601f19168201909252610f41918101906139ab565b60015b610fa75760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106d2565b5f516020613eb85f395f51905f5281146110155760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106d2565b50610d62838383611a40565b5f61102c8484611a6a565b9050818061104257506001600160a01b03811615155b8484909161107457604051632b0d65db60e01b81526001600160401b03909216600483015260248201526044016106d2565b50509392505050565b61109160c954610100900460ff1660021490565b6110ae5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b5f611132858585610b76565b905061113f308284611208565b506001600160401b038581165f90815260fb60209081526040808320888452909152902054818516911610156111a9576001600160401b038581165f90815260fb602090815260408083208884529091529020805467ffffffffffffffff19169185169190911790555b83836001600160401b0316866001600160401b03167fde247c825b1fb2d7ff9e0e771cba6f9e757ad04479fcdc135d88ae91fd50b37d85856040516111f8929190918252602082015260400190565b60405180910390a4949350505050565b5f836001600160a01b0381166112315760405163538ba4f960e01b815260040160405180910390fd5b835f8190036112535760405163ec73295960e01b815260040160405180910390fd5b835f8190036112755760405163ec73295960e01b815260040160405180910390fd5b611280468888610b0b565b858155604080516001600160a01b038a16815260208101899052908101829052606081018790529094507f0ad2d108660a211f47bf7fb43a0443cae181624995d3d42b88ee6879d200e9739060800160405180910390a15050509392505050565b606580546001600160a01b031916905561075781611b0c565b61130e60c954610100900460ff1660021490565b1561132c5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611103565b6060856001600160a01b0381166113955760405163538ba4f960e01b815260040160405180910390fd5b855f8190036113b75760405163ec73295960e01b815260040160405180910390fd5b5f6113c486880188613a7f565b905080515f036113e757604051630b92daef60e21b815260040160405180910390fd5b5f600182516113f69190613bc5565b6001600160401b0381111561140d5761140d613645565b604051908082528060200260200182016040528015611436578160200160208202803683370190505b50905085156114c95781516001600160401b0381111561145857611458613645565b6040519080825280602002602001820160405280156114c557816020015b6114b26040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a081018290529060c082015290565b8152602001906001900390816114765790505b5094505b8a8a8a805f6114ea856d7369676e616c5f7365727669636560901b836107a1565b9050306001600160a01b0382160361151557604051637556223560e11b815260040160405180910390fd5b61154d6040805160c0810182525f80825260208201819052918101829052906060820190815260200160608152602001606081525090565b5f5f5f5f5b8b518110156117db578b818151811061156d5761156d613970565b602002602001015194505f5b818110156115d757855f01516001600160401b03168c82815181106115a0576115a0613970565b60200260200101516001600160401b0316036115cf576040516348362c2760e11b815260040160405180910390fd5b600101611579565b506115e68a8a8a8a898b611b5d565b93508a518114915081156116265784516001600160401b0316461461161e576040516338bf822760e21b815260040160405180910390fd5b3095506116d1565b845f01518b828151811061163c5761163c613970565b6001600160401b039283166020918202929092010152855116158061166a575084516001600160401b031646145b1561168857604051637556223560e11b815260040160405180910390fd5b84516116a6906d7369676e616c5f7365727669636560901b5f6107a1565b9550306001600160a01b038716036116d157604051637556223560e11b815260040160405180910390fd5b608085015151151592508f15611765576040518060e00160405280866040015181526020018581526020018b6001600160401b0316815260200186602001516001600160401b03168152602001841515815260200183151581526020018660600151600381111561174457611744613bd8565b8152508f828151811061175957611759613970565b60200260200101819052505b6117c08a84611794577fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf56117b6565b7f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1695b8760200151610b76565b604086015186519b5096995097509495508794600101611552565b508515806117f257506117ee3088610e32565b8614155b156118105760405163738afa0560e01b815260040160405180910390fd5b505050505050505050505050509695505050505050565b5f8060038360c00151600381111561184157611841613bd8565b1480611862575060028360c00151600381111561186057611860613bd8565b145b9050808015611872575082608001515b801561188057508260a00151155b156118c257600191506118c083604001517f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1698560600151865f0151611126565b505b5f60038460c0015160038111156118db576118db613bd8565b14806118fc575060018460c0015160038111156118fa576118fa613bd8565b145b9050808015611918575083608001518061191857508360a00151155b1561196457611928600184613998565b925061196284604001517fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf586606001518760200151611126565b505b5050919050565b806001600160a01b0381166119935760405163538ba4f960e01b815260040160405180910390fd5b61199c83611bfc565b610d6282611c5a565b6001600160a01b0381163b611a125760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106d2565b5f516020613eb85f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611a4983611cca565b5f82511180611a555750805b15610d6257611a648383611d09565b50505050565b6097545f906001600160a01b031680611a9657604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611ae8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c29190613bec565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f856001600160a01b038116611b865760405163538ba4f960e01b815260040160405180910390fd5b855f819003611ba85760405163ec73295960e01b815260040160405180910390fd5b855f819003611bca5760405163ec73295960e01b815260040160405180910390fd5b611bee866040015186611bde8d8d8d610b0b565b8a8a608001518b60a00151611d2e565b9a9950505050505050505050565b5f54610100900460ff16611c225760405162461bcd60e51b81526004016106d290613c07565b611c2a611e3b565b611c486001600160a01b03821615611c4257816112e1565b336112e1565b5060c9805461ff001916610100179055565b5f54610100900460ff16611c805760405162461bcd60e51b81526004016106d290613c07565b6001600160401b03461115611ca85760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b611cd3816119a5565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606107b08383604051806060016040528060278152602001613ed860279139611e61565b5f82515f14611dd6576040516bffffffffffffffffffffffff19606088901b1660208201525f90611d7290603401604051602081830303815290604052858a611ed5565b905080515f03611d9557604051630414cd5b60e31b815260040160405180910390fd5b5f611d9f82611eee565b9050611dc481600281518110611db757611db7613970565b6020026020010151611f01565b611dcd90613c52565b92505050611dd9565b50855b5f611e1086604051602001611df091815260200190565b60408051601f19818403018152919052611e0987611f80565b8585611f93565b905080611e3057604051638d9a4db360e01b815260040160405180910390fd5b509695505050505050565b5f54610100900460ff166107c95760405162461bcd60e51b81526004016106d290613c07565b60605f5f856001600160a01b031685604051611e7d9190613c9a565b5f60405180830381855af49150503d805f8114611eb5576040519150601f19603f3d011682016040523d82523d5f602084013e611eba565b606091505b5091509150611ecb86838387611fac565b9695505050505050565b60605f611ee185612024565b9050610b02818585612056565b6060610684611efc836128c4565b612916565b60605f5f5f611f0f85612a94565b919450925090505f816001811115611f2957611f29613bd8565b14611f47576040516307fe6cb960e21b815260040160405180910390fd5b611f518284613998565b855114611f7157604051630b8aa6f760e31b815260040160405180910390fd5b610b0285602001518484612d77565b6060610684611f8e83612e07565b612f1b565b5f5f611f9e86612024565b9050611ecb81868686612f73565b6060831561201a5782515f03612013576001600160a01b0385163b6120135760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106d2565b50816108c2565b6108c28383612f99565b6060818051906020012060405160200161204091815260200190565b6040516020818303038152906040529050919050565b60605f8451116120a05760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b60448201526064016106d2565b5f6120aa84612fc3565b90505f6120b6866130a6565b90505f846040516020016120cc91815260200190565b60408051601f1981840301815291905290505f805b845181101561286d575f8582815181106120fd576120fd613970565b60200260200101519050845183111561216f5760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b60648201526084016106d2565b825f0361220d57805180516020918201206040516121bc9261219692910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6122085760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016106d2565b612303565b80515160201161229357805180516020918201206040516122379261219692910190815260200190565b6122085760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b60648201526084016106d2565b8051845160208087019190912082519190920120146123035760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b60648201526084016106d2565b61230f60106001613998565b816020015151036124a757845183036124415761233c8160200151601081518110611db757611db7613970565b96505f8751116123b45760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016106d2565b600186516123c29190613bc5565b82146124365760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016106d2565b5050505050506107b0565b5f85848151811061245457612454613970565b602001015160f81c60f81b60f81c90505f82602001518260ff168151811061247e5761247e613970565b6020026020010151905061249181613107565b955061249e600186613998565b94505050612864565b60028160200151510361280b575f6124be8261312b565b90505f815f815181106124d3576124d3613970565b016020015160f81c90505f6124e9600283613cc9565b6124f4906002613cea565b90505f612504848360ff1661314e565b90505f6125118a8961314e565b90505f61251e8383613183565b9050808351146125965760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016106d2565b60ff8516600214806125ab575060ff85166003145b1561274b57808251146126265760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016106d2565b6126408760200151600181518110611db757611db7613970565b9c505f8d51116126b85760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016106d2565b60018c516126c69190613bc5565b881461273a5760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016106d2565b5050505050505050505050506107b0565b60ff8516158061275e575060ff85166001145b1561279d5761278a876020015160018151811061277d5761277d613970565b6020026020010151613107565b9950612796818a613998565b9850612800565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b60648201526084016106d2565b505050505050612864565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b60648201526084016106d2565b506001016120e1565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b60648201526084016106d2565b604080518082019091525f808252602082015281515f036128f857604051635ab458fb60e01b815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60605f5f5f61292485612a94565b91945092509050600181600181111561293f5761293f613bd8565b1461295d576040516325ce355f60e11b815260040160405180910390fd5b84516129698385613998565b1461298757604051630b8aa6f760e31b815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091525f808252602082015281526020019060019003908161299e5790505093505f835b8651811015612a88575f5f612a0d6040518060400160405280858c5f01516129f19190613bc5565b8152602001858c60200151612a069190613998565b9052612a94565b509150915060405180604001604052808383612a299190613998565b8152602001848b60200151612a3e9190613998565b815250888581518110612a5357612a53613970565b6020908102919091010152612a69600185613998565b9350612a758183613998565b612a7f9084613998565b925050506129c9565b50845250919392505050565b5f5f5f835f01515f03612aba57604051635ab458fb60e01b815260040160405180910390fd5b602084015180515f1a607f8111612adc575f60015f9450945094505050612d70565b60b78111612b71575f612af0608083613bc5565b905080875f015111612b15576040516366c9448560e01b815260040160405180910390fd5b6001838101516001600160f81b0319169082148015612b415750600160ff1b6001600160f81b03198216105b15612b5f5760405163babb01dd60e01b815260040160405180910390fd5b506001955093505f9250612d70915050565b60bf8111612c4f575f612b8560b783613bc5565b905080875f015111612baa576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612bda5760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612c095760405163babb01dd60e01b815260040160405180910390fd5b612c138184613998565b895111612c33576040516366c9448560e01b815260040160405180910390fd5b612c3e836001613998565b975095505f9450612d709350505050565b60f78111612c99575f612c6360c083613bc5565b905080875f015111612c88576040516366c9448560e01b815260040160405180910390fd5b600195509350849250612d70915050565b5f612ca560f783613bc5565b905080875f015111612cca576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612cfa5760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612d295760405163babb01dd60e01b815260040160405180910390fd5b612d338184613998565b895111612d53576040516366c9448560e01b815260040160405180910390fd5b612d5e836001613998565b9750955060019450612d709350505050565b9193909250565b6060816001600160401b03811115612d9157612d91613645565b6040519080825280601f01601f191660200182016040528015612dbb576020820181803683370190505b50905081156107b0575f612dcf8486613998565b9050602082015f5b84811015612def578281015182820152602001612dd7565b84811115612dfd575f858301525b5050509392505050565b60605f82604051602001612e1d91815260200190565b60408051601f1981840301815291905290505f5b6020811015612e6957818181518110612e4c57612e4c613970565b01602001516001600160f81b0319165f03612e6957600101612e31565b612e74816020613bc5565b6001600160401b03811115612e8b57612e8b613645565b6040519080825280601f01601f191660200182016040528015612eb5576020820181803683370190505b5092505f5b8351811015611962578282612ece81613d03565b935081518110612ee057612ee0613970565b602001015160f81c60f81b848281518110612efd57612efd613970565b60200101906001600160f81b03191690815f1a905350600101612eba565b606081516001148015612f4757506080825f81518110612f3d57612f3d613970565b016020015160f81c105b15612f50575090565b612f5c82516080613206565b82604051602001612040929190613d1b565b919050565b5f6108bf84612f83878686612056565b8051602091820120825192909101919091201490565b815115612fa95781518083602001fd5b8060405162461bcd60e51b81526004016106d29190613d49565b8051606090806001600160401b03811115612fe057612fe0613645565b60405190808252806020026020018201604052801561302557816020015b6040805180820190915260608082526020820152815260200190600190039081612ffe5790505b5091505f5b8181101561196457604051806040016040528085838151811061304f5761304f613970565b6020026020010151815260200161307e86848151811061307157613071613970565b6020026020010151611eee565b81525083828151811061309357613093613970565b602090810291909101015260010161302a565b606080604051905082518060011b603f8101601f191683016040528083525060208401602083015f5b838110156130fc578060011b8201818401515f1a8060041c8253600f8116600183015350506001016130cf565b509295945050505050565b60606020825f0151106131225761311d82611f01565b610684565b610684826133ab565b606061068461314983602001515f81518110611db757611db7613970565b6130a6565b60608251821061316c575060408051602081019091525f8152610684565b6107b0838384865161317e9190613bc5565b6133bf565b5f5f8251845110613195578251613198565b83515b90505b80821080156131ef57508282815181106131b7576131b7613970565b602001015160f81c60f81b6001600160f81b0319168483815181106131de576131de613970565b01602001516001600160f81b031916145b156131ff5781600101915061319b565b5092915050565b6060603883101561326a576040805160018082528183019092529060208201818036833701905050905061323a8284613d7b565b60f81b815f8151811061324f5761324f613970565b60200101906001600160f81b03191690815f1a905350610684565b5f60015b6132788186613d94565b1561329e578161328781613d03565b9250613297905061010082613da7565b905061326e565b6132a9826001613998565b6001600160401b038111156132c0576132c0613645565b6040519080825280601f01601f1916602001820160405280156132ea576020820181803683370190505b5092506132f78483613d7b565b613302906037613d7b565b60f81b835f8151811061331757613317613970565b60200101906001600160f81b03191690815f1a905350600190505b8181116133a3576101006133468284613bc5565b61335290610100613e99565b61335c9087613d94565b6133669190613ea4565b60f81b83828151811061337b5761337b613970565b60200101906001600160f81b03191690815f1a9053508061339b81613d03565b915050613332565b505092915050565b606061068482602001515f845f0151612d77565b60608182601f0110156134055760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d2565b8282840110156134485760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d2565b8183018451101561348f5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016106d2565b6060821580156134ad5760405191505f8252602082016040526134f7565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156134e65780518352602092830192016134ce565b5050858452601f01601f1916604052505b50949350505050565b6001600160a01b0381168114610757575f5ffd5b80358015158114612f6e575f5ffd5b5f5f60408385031215613534575f5ffd5b823561353f81613500565b915061354d60208401613514565b90509250929050565b5f5f60408385031215613567575f5ffd5b823561357281613500565b946020939093013593505050565b80356001600160401b0381168114612f6e575f5ffd5b5f5f604083850312156135a7575f5ffd5b61357283613580565b5f602082840312156135c0575f5ffd5b81356107b081613500565b5f5f5f5f608085870312156135de575f5ffd5b6135e785613580565b9350602085013592506135fc60408601613580565b9396929550929360600135925050565b5f5f5f6060848603121561361e575f5ffd5b61362784613580565b92506020840135915061363c60408501613514565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b038111828210171561367b5761367b613645565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136a9576136a9613645565b604052919050565b5f82601f8301126136c0575f5ffd5b81356001600160401b038111156136d9576136d9613645565b6136ec601f8201601f1916602001613681565b818152846020838601011115613700575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561372d575f5ffd5b823561373881613500565b915060208301356001600160401b03811115613752575f5ffd5b61375e858286016136b1565b9150509250929050565b5f60208284031215613778575f5ffd5b5035919050565b5f5f5f5f5f60808688031215613793575f5ffd5b61379c86613580565b945060208601356137ac81613500565b93506040860135925060608601356001600160401b038111156137cd575f5ffd5b8601601f810188136137dd575f5ffd5b80356001600160401b038111156137f2575f5ffd5b886020828401011115613803575f5ffd5b959894975092955050506020019190565b5f5f5f60608486031215613826575f5ffd5b61382f84613580565b9250602084013561383f81613500565b929592945050506040919091013590565b5f5f5f60608486031215613862575f5ffd5b61386b84613580565b92506020840135915061363c60408501613580565b5f5f60408385031215613891575f5ffd5b8235915061354d60208401613514565b5f5f604083850312156138b2575f5ffd5b82356138bd81613500565b915060208301356138cd81613500565b809150509250929050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561068457610684613984565b5f602082840312156139bb575f5ffd5b5051919050565b5f6001600160401b038211156139da576139da613645565b5060051b60200190565b803560048110612f6e575f5ffd5b5f82601f830112613a01575f5ffd5b8135613a14613a0f826139c2565b613681565b8082825260208201915060208360051b860101925085831115613a35575f5ffd5b602085015b83811015613a755780356001600160401b03811115613a57575f5ffd5b613a66886020838a01016136b1565b84525060209283019201613a3a565b5095945050505050565b5f60208284031215613a8f575f5ffd5b81356001600160401b03811115613aa4575f5ffd5b8201601f81018413613ab4575f5ffd5b8035613ac2613a0f826139c2565b8082825260208201915060208360051b850101925086831115613ae3575f5ffd5b602084015b83811015611e305780356001600160401b03811115613b05575f5ffd5b850160c0818a03601f19011215613b1a575f5ffd5b613b22613659565b613b2e60208301613580565b8152613b3c60408301613580565b602082015260608201356040820152613b57608083016139e4565b606082015260a08201356001600160401b03811115613b74575f5ffd5b613b838b6020838601016139f2565b60808301525060c08201356001600160401b03811115613ba1575f5ffd5b613bb08b6020838601016139f2565b60a08301525084525060209283019201613ae8565b8181038181111561068457610684613984565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215613bfc575f5ffd5b81516107b081613500565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b80516020808301519190811015613c72575f198160200360031b1b821691505b50919050565b5f5b83811015613c92578181015183820152602001613c7a565b50505f910152565b5f8251613cab818460208701613c78565b9190910192915050565b634e487b7160e01b5f52601260045260245ffd5b5f60ff831680613cdb57613cdb613cb5565b8060ff84160691505092915050565b60ff828116828216039081111561068457610684613984565b5f60018201613d1457613d14613984565b5060010190565b5f8351613d2c818460208801613c78565b835190830190613d40818360208801613c78565b01949350505050565b602081525f8251806020840152613d67816040850160208701613c78565b601f01601f19169190910160400192915050565b60ff818116838216019081111561068457610684613984565b5f82613da257613da2613cb5565b500490565b808202811582820484141761068457610684613984565b6001815b6001841115610c5057808504811115613ddd57613ddd613984565b6001841615613deb57908102905b60019390931c928002613dc2565b5f82613e0757506001610684565b81613e1357505f610684565b8160018114613e295760028114613e3357613e4f565b6001915050610684565b60ff841115613e4457613e44613984565b50506001821b610684565b5060208310610133831016604e8410600b8410161715613e72575081810a610684565b613e7e5f198484613dbe565b805f1904821115613e9157613e91613984565b029392505050565b5f6107b08383613df9565b5f82613eb257613eb2613cb5565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212204468b8adee6c324d6a7192cb1aada2b474837cf3f594d8153d9826cdf00171ee64736f6c634300081b0033", - "balance": "0x0" - }, - "0x1670010000000000000000000000000000000005": { - "contractName": "SignalService", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670010000000000000000000000000000000006", - "0xe3ad9bc7a782493ccba4f8a469cc3f9e8fb5647c2076401c8a7c4945a999c777": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000000005" - }, - "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", - "balance": "0x0" - }, - "0x0167001000000000000000000000000000010001": { - "contractName": "TaikoL2Impl", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" - }, - "code": "0x6080604052600436106101fc575f3560e01c80638456cb5911610113578063da69d3db1161009d578063e902461a1161006d578063e902461a146105b4578063ee82ac5e146105d3578063f2fde38b146105f2578063f940e38514610611578063fd85eb2d14610630575f5ffd5b8063da69d3db14610540578063dac5df781461055f578063e07baba614610574578063e30c397814610597575f5ffd5b8063a578781e116100e3578063a578781e1461047c578063a7137c0f146104a0578063a7e022d1146104c6578063a86f9d9e14610502578063b8c7b30c14610521575f5ffd5b80638456cb59146104125780638abf6077146104265780638da5cb5b1461043a5780639ee512f214610457575f5ffd5b80633eb6b8cf11610194578063539b8ade11610164578063539b8ade146103855780635950f9f1146103ab5780635c975abb146103ca578063715018a6146103ea57806379ba5097146103fe575f5ffd5b80633eb6b8cf1461031d5780633f4ba83a1461033c5780634f1ef2861461035057806352d1902d14610363575f5ffd5b806333d5ac9b116101cf57806333d5ac9b1461028d578063356aec04146102b35780633659cfe6146102c55780633ab76e9f146102e6575f5ffd5b806312622e5b14610200578063136dc4a81461023c5780632f9804731461025b5780633075db5614610279575b5f5ffd5b34801561020b575f5ffd5b5060fe5461021f906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b348015610247575f5ffd5b5061021f61025636600461259f565b61064f565b348015610266575f5ffd5b505f5b6040519015158152602001610233565b348015610284575f5ffd5b50610269610665565b348015610298575f5ffd5b5060fd5461021f90600160401b90046001600160401b031681565b3480156102be575f5ffd5b505f61021f565b3480156102d0575f5ffd5b506102e46102df3660046125f3565b61067d565b005b3480156102f1575f5ffd5b50609754610305906001600160a01b031681565b6040516001600160a01b039091168152602001610233565b348015610328575f5ffd5b5061030561033736600461261b565b61074d565b348015610347575f5ffd5b506102e4610759565b6102e461035e36600461266c565b61076d565b34801561036e575f5ffd5b50610377610826565b604051908152602001610233565b348015610390575f5ffd5b5060fd5461021f90600160801b90046001600160401b031681565b3480156103b6575f5ffd5b506102e46103c536600461272f565b6108d7565b3480156103d5575f5ffd5b5061026960c954610100900460ff1660021490565b3480156103f5575f5ffd5b506102e4610ae0565b348015610409575f5ffd5b506102e4610af1565b34801561041d575f5ffd5b506102e4610b68565b348015610431575f5ffd5b50610305610b7b565b348015610445575f5ffd5b506033546001600160a01b0316610305565b348015610462575f5ffd5b5061030571777735367b36bc9b61c50022d9d0700db4ec81565b348015610487575f5ffd5b5060fd54600160801b90046001600160401b031661021f565b3480156104ab575f5ffd5b5060fd5461021f90600160c01b90046001600160401b031681565b3480156104d1575f5ffd5b506104e56104e0366004612797565b610b89565b604080519283526001600160401b03909116602083015201610233565b34801561050d575f5ffd5b5061030561051c3660046127c8565b610c15565b34801561052c575f5ffd5b5060fd5461021f906001600160401b031681565b34801561054b575f5ffd5b506102e461055a3660046127f6565b610c2a565b34801561056a575f5ffd5b5061037760fc5481565b34801561057f575f5ffd5b5060c9546201000090046001600160401b031661021f565b3480156105a2575f5ffd5b506065546001600160a01b0316610305565b3480156105bf575f5ffd5b506104e56105ce36600461283e565b610cfa565b3480156105de575f5ffd5b506103776105ed366004612886565b610ddc565b3480156105fd575f5ffd5b506102e461060c3660046125f3565b610e14565b34801561061c575f5ffd5b506102e461062b36600461289d565b610e85565b34801561063b575f5ffd5b506102e461064a3660046128c9565b611042565b5f61065b8484846114ac565b90505b9392505050565b5f600261067460c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100011630036106ce5760405162461bcd60e51b81526004016106c59061290a565b60405180910390fd5b7f00000000000000000000000001670010000000000000000000000000000100016001600160a01b0316610700611570565b6001600160a01b0316146107265760405162461bcd60e51b81526004016106c590612956565b61072f8161158b565b604080515f8082526020820190925261074a91839190611593565b50565b5f61065b848484611702565b61076161175e565b61076b335f6117ee565b565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100011630036107b55760405162461bcd60e51b81526004016106c59061290a565b7f00000000000000000000000001670010000000000000000000000000000100016001600160a01b03166107e7611570565b6001600160a01b03161461080d5760405162461bcd60e51b81526004016106c590612956565b6108168261158b565b61082282826001611593565b5050565b5f306001600160a01b037f000000000000000000000000016700100000000000000000000000000001000116146108c55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106c5565b505f516020612be35f395f51905f5290565b5f54610100900460ff16158080156108f557505f54600160ff909116105b8061090e5750303b15801561090e57505f5460ff166001145b6109715760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106c5565b5f805460ff191660011790558015610992575f805461ff0019166101001790555b61099c85856117f6565b6001600160401b03831615806109ba575046836001600160401b0316145b156109d8576040516308279a2560e31b815260040160405180910390fd5b6001461115806109ee57506001600160401b0346115b15610a0c57604051638f972ecb60e01b815260040160405180910390fd5b4315610a565743600103610a3d575f610a266001436129b6565b5f81815260fb602052604090209040905550610a56565b604051635a0f9e4160e11b815260040160405180910390fd5b60fe80546001600160401b0380861667ffffffffffffffff199283161790925560fd805492851692909116919091179055610a9043611830565b5060fc558015610ad9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610ae86118c0565b61076b5f61191a565b60655433906001600160a01b03168114610b5f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106c5565b61074a8161191a565b610b70611933565b61076b3360016117ee565b5f610b84611570565b905090565b5f5f5f610baa60408051808201909152630393870081526008602082015290565b9050610c09816020015160ff16825f015163ffffffff16610bcb91906129c9565b60fd5483516001600160401b038083169263ffffffff90921691610bf891600160401b909104168a6129e0565b610c0291906129ff565b875f6119a4565b90969095509350505050565b5f610c21468484611702565b90505b92915050565b825f819003610c4c5760405163ec73295960e01b815260040160405180910390fd5b826001600160401b0316805f03610c765760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec14610ca857604051636494e9f760e01b815260040160405180910390fd5b6002610cb660c95460ff1690565b60ff1603610cd75760405163dfc60d8560e01b815260040160405180910390fd5b610ce16002611a2d565b604051631799c89b60e01b815260040160405180910390fd5b5f8080610d0d6060880160408901612a3f565b610d1d9063ffffffff16876129ff565b9050610d2f60a0880160808901612a3f565b63ffffffff1615801590610d605750610d4e60a0880160808901612a3f565b63ffffffff16816001600160401b0316115b15610d7e57610d7560a0880160808901612a3f565b63ffffffff1690505b5f610d8c6020890189612a58565b60ff16610d9f60608a0160408b01612a3f565b63ffffffff16610daf91906129c9565b9050610dcd81878488610dc860808e0160608f01612a78565b6119a4565b93509350505094509492505050565b5f438210610deb57505f919050565b43610df883610100612a91565b10610e0257504090565b505f90815260fb602052604090205490565b610e1c6118c0565b606580546001600160a01b0383166001600160a01b03199091168117909155610e4d6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b806001600160a01b038116610ead5760405163538ba4f960e01b815260040160405180910390fd5b610ec160c954610100900460ff1660021490565b15610edf5760405163bae6e2a960e01b815260040160405180910390fd5b693bb4ba34323930bbb2b960b11b610eff6033546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610f395750610f24816001610c15565b6001600160a01b0316336001600160a01b0316145b610f5657604051630d85cccf60e11b815260040160405180910390fd5b6002610f6460c95460ff1690565b60ff1603610f855760405163dfc60d8560e01b815260040160405180910390fd5b610f8f6002611a2d565b6001600160a01b038416610fb557610fb06001600160a01b03841647611a43565b611032565b6040516370a0823160e01b81523060048201526110329084906001600160a01b038716906370a0823190602401602060405180830381865afa158015610ffd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110219190612a28565b6001600160a01b0387169190611a4e565b61103c6001611a2d565b50505050565b825f8190036110645760405163ec73295960e01b815260040160405180910390fd5b846001600160401b0316805f0361108e5760405163ec73295960e01b815260040160405180910390fd5b61109e6060840160408501612a3f565b63ffffffff16805f036110c45760405163ec73295960e01b815260040160405180910390fd5b6110d16020850185612a58565b60ff16805f036110f45760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec1461112657604051636494e9f760e01b815260040160405180910390fd5b600261113460c95460ff1690565b60ff16036111555760405163dfc60d8560e01b815260040160405180910390fd5b61115f6002611a2d565b5f61116b6001436129b6565b90505f5f61117883611830565b915091508160fc541461119e5760405163d719258d60e01b815260040160405180910390fd5b60fc55505f6111b06020880188612a58565b60ff166111c36060890160408a01612a3f565b63ffffffff166111d391906129ff565b60fd549091506001600160401b03808316600160c01b909204161461126e5760fd54600160c01b90046001600160401b03161561124d5760fd5461122b906001600160401b0380821691600160c01b9004168361064f565b60fd805467ffffffffffffffff19166001600160401b03929092169190911790555b60fd80546001600160c01b0316600160c01b6001600160401b038416021790555b5060fd545f9081906112a890899061129690600160801b90046001600160401b0316426129b6565b60fd546001600160401b03168c610cfa565b915091506112b35f90565b1580156112c05750814814155b156112de576040516336d54d4f60e11b815260040160405180910390fd5b60fd805467ffffffffffffffff19166001600160401b039283161790819055600160401b90048116908b16111590506114035761132c6d7369676e616c5f7365727669636560901b5f610c15565b60fe546040516313e4299d60e21b81526001600160401b0391821660048201527f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1696024820152908b166044820152606481018a90526001600160a01b039190911690634f90a674906084016020604051808303815f875af11580156113b3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d79190612a28565b5060fd80546fffffffffffffffff00000000000000001916600160401b6001600160401b038c16021790555b5f81815260fb60205260409081902082409081905560fd80546001600160401b03428116600160801b0267ffffffffffffffff60801b1983168117909355935192937f41c3f410f5c8ac36bb46b1dccef0de0f964087c9e688795fa02ecfa2c20b3fe49361148e938693908316921691909117909182526001600160401b0316602082015260400190565b60405180910390a150506114a26001611a2d565b5050505050505050565b5f826001600160401b03165f036114c457508061065e565b670de0b6b3a76400005f6001600160401b03808616906114e6908616846129c9565b6114f09190612ab8565b905080158061150557506001600160ff1b0381115b1561152357604051636296f1b960e11b815260040160405180910390fd5b5f61152d82611aa0565b90505f828802828702015f81126001811461154c578582049250611550565b5f92505b506115649050816001600160401b03611cbd565b98975050505050505050565b5f516020612be35f395f51905f52546001600160a01b031690565b61074a6118c0565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156115cb576115c683611cd1565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611625575060408051601f3d908101601f1916820190925261162291810190612a28565b60015b6116885760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106c5565b5f516020612be35f395f51905f5281146116f65760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106c5565b506115c6838383611d6c565b5f61170d8484611d90565b9050818061172357506001600160a01b03811615155b8484909161175557604051632b0d65db60e01b81526001600160401b03909216600483015260248201526044016106c5565b50509392505050565b61177260c954610100900460ff1660021490565b61178f5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6108226118c0565b806001600160a01b03811661181e5760405163538ba4f960e01b815260040160405180910390fd5b61182783611e3a565b6115c682611e98565b5f5f61183a612564565b5f5b60ff8110801561184f5750806001018510155b15611880575f198186030180408360ff8306610100811061187257611872612acb565b60200201525060010161183c565b5046611fe08201526120008120925083408161189d60ff87612adf565b61010081106118ae576118ae612acb565b60200201526120009020919391925050565b6033546001600160a01b0316331461076b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106c5565b606580546001600160a01b031916905561074a81611f08565b61194760c954610100900460ff1660021490565b156119655760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016117e4565b5f80806119c063ffffffff86166001600160401b038916612a91565b9050856001600160401b031681116119d95760016119ec565b6119ec6001600160401b038716826129b6565b9050611a0b6001600160401b03611a0583878316611f59565b90611cbd565b9150611a20826001600160401b031689611f6e565b9250509550959350505050565b60c9805460ff191660ff92909216919091179055565b61082282825a611f9d565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526115c6908490611fe0565b6fffffffffffffffffffffffffffffffff811160071b81811c6001600160401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b175f8213611afc57631615e6385f526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d6c8c3f38e95a6b1ff2ab1c3b343619018302821d6d02384773bdf1ac5676facced60901901830290911d6cb9a025d814b29c212b8b1a07cd1901909102780a09507084cc699bb0e71ea869ffffffffffffffffffffffff190105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b5f818311611ccb5782610c21565b50919050565b6001600160a01b0381163b611d3e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106c5565b5f516020612be35f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611d75836120b3565b5f82511180611d815750805b156115c65761103c83836120f2565b6097545f906001600160a01b031680611dbc57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e0e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e329190612af2565b949350505050565b5f54610100900460ff16611e605760405162461bcd60e51b81526004016106c590612b0d565b611e68612117565b611e866001600160a01b03821615611e80578161191a565b3361191a565b5060c9805461ff001916610100179055565b5f54610100900460ff16611ebe5760405162461bcd60e51b81526004016106c590612b0d565b6001600160401b03461115611ee65760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f818311611f675781610c21565b5090919050565b5f5f82611f7b858561213d565b611f859190612ab8565b90508015611f935780611e32565b5060019392505050565b815f03611fa957505050565b611fc383838360405180602001604052805f8152506121b7565b6115c657604051634c67134d60e11b815260040160405180910390fd5b5f612034826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166121f49092919063ffffffff16565b905080515f14806120545750808060200190518101906120549190612b58565b6115c65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106c5565b6120bc81611cd1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c218383604051806060016040528060278152602001612c0360279139612202565b5f54610100900460ff1661076b5760405162461bcd60e51b81526004016106c590612b0d565b5f815f0361215e57604051636296f1b960e11b815260040160405180910390fd5b5f8261217285670de0b6b3a76400006129c9565b61217c9190612ab8565b9050680755bf798b4a1bf1e481111561219b5750680755bf798b4a1bf1e45b670de0b6b3a76400006121ad82612276565b611e329190612ab8565b5f6001600160a01b0385166121df57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606061065b84845f856123f0565b60605f5f856001600160a01b03168560405161221e9190612b95565b5f60405180830381855af49150503d805f8114612256576040519150601f19603f3d011682016040523d82523d5f602084013e61225b565b606091505b509150915061226c868383876124c7565b9695505050505050565b5f68023f2fa8f6da5b9d2819821361228d57919050565b680755bf798b4a1bf1e582126122aa5763a37bfec95f526004601cfd5b6503782dace9d9604e83901b0591505f60606bb17217f7d1cf79abc9e3b39884821b056001605f1b01901d6bb17217f7d1cf79abc9e3b39881029093036c240c330e9fb2d9cbaf0fd5aafb1981018102606090811d6d0277594991cfc85f6e2461837cd9018202811d6d1a521255e34f6a5061b25ef1c9c319018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d6e02c72388d9f74f51a9331fed693f1419018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084016d01d3967ed30fc4f89c02bab5708119010290911d6e0587f503bb6ea29d25fcb740196450019091026d360d7aeea093263ecc6e0ecb291760621b010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060824710156124515760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106c5565b5f5f866001600160a01b0316858760405161246c9190612b95565b5f6040518083038185875af1925050503d805f81146124a6576040519150601f19603f3d011682016040523d82523d5f602084013e6124ab565b606091505b50915091506124bc878383876124c7565b979650505050505050565b606083156125355782515f0361252e576001600160a01b0385163b61252e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106c5565b5081611e32565b611e32838381511561254a5781518083602001fd5b8060405162461bcd60e51b81526004016106c59190612bb0565b604051806120000160405280610100906020820280368337509192915050565b80356001600160401b038116811461259a575f5ffd5b919050565b5f5f5f606084860312156125b1575f5ffd5b6125ba84612584565b92506125c860208501612584565b91506125d660408501612584565b90509250925092565b6001600160a01b038116811461074a575f5ffd5b5f60208284031215612603575f5ffd5b813561065e816125df565b801515811461074a575f5ffd5b5f5f5f6060848603121561262d575f5ffd5b61263684612584565b925060208401359150604084013561264d8161260e565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561267d575f5ffd5b8235612688816125df565b915060208301356001600160401b038111156126a2575f5ffd5b8301601f810185136126b2575f5ffd5b80356001600160401b038111156126cb576126cb612658565b604051601f8201601f19908116603f011681016001600160401b03811182821017156126f9576126f9612658565b604052818152828201602001871015612710575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f60808587031215612742575f5ffd5b843561274d816125df565b9350602085013561275d816125df565b925061276b60408601612584565b915061277960608601612584565b905092959194509250565b803563ffffffff8116811461259a575f5ffd5b5f5f604083850312156127a8575f5ffd5b6127b183612584565b91506127bf60208401612784565b90509250929050565b5f5f604083850312156127d9575f5ffd5b8235915060208301356127eb8161260e565b809150509250929050565b5f5f5f5f60808587031215612809575f5ffd5b843593506020850135925061282060408601612584565b915061277960608601612784565b5f60a08284031215611ccb575f5ffd5b5f5f5f5f6101008587031215612852575f5ffd5b61285c868661282e565b935061286a60a08601612584565b925061287860c08601612584565b915061277960e08601612784565b5f60208284031215612896575f5ffd5b5035919050565b5f5f604083850312156128ae575f5ffd5b82356128b9816125df565b915060208301356127eb816125df565b5f5f5f5f61010085870312156128dd575f5ffd5b6128e685612584565b9350602085013592506128fb60408601612784565b9150612779866060870161282e565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610c2457610c246129a2565b8082028115828204841417610c2457610c246129a2565b6001600160401b038281168282160390811115610c2457610c246129a2565b6001600160401b038181168382160290811690818114612a2157612a216129a2565b5092915050565b5f60208284031215612a38575f5ffd5b5051919050565b5f60208284031215612a4f575f5ffd5b610c2182612784565b5f60208284031215612a68575f5ffd5b813560ff8116811461065e575f5ffd5b5f60208284031215612a88575f5ffd5b610c2182612584565b80820180821115610c2457610c246129a2565b634e487b7160e01b5f52601260045260245ffd5b5f82612ac657612ac6612aa4565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f82612aed57612aed612aa4565b500690565b5f60208284031215612b02575f5ffd5b815161065e816125df565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612b68575f5ffd5b815161065e8161260e565b5f5b83811015612b8d578181015183820152602001612b75565b50505f910152565b5f8251612ba6818460208701612b73565b9190910192915050565b602081525f8251806020840152612bce816040850160208701612b73565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209b86dccef61cd132ca45980c090fbd2b245465c5210ce7b53ab59fa4b3d9b3fc64736f6c634300081b0033", - "balance": "0x0" - }, - "0x1670010000000000000000000000000000010001": { - "contractName": "TaikoL2", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670010000000000000000000000000000010002", - "0x00000000000000000000000000000000000000000000000000000000000000fe": "0x0000000000000000000000000000000000000000000000000000000000007e7e", - "0x00000000000000000000000000000000000000000000000000000000000000fd": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x00000000000000000000000000000000000000000000000000000000000000fc": "0xf167b245aa70c0a5e2f44cd65a94f2b1c5c9e8c8ab059940e4bf1c47d7a39557", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000010001" - }, - "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", - "balance": "0x0" - }, - "0x0167001000000000000000000000000000010002": { - "contractName": "RollupAddressManagerImpl", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" - }, - "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610300578063a86f9d9e1461031d578063d8f4648f1461033c578063e07baba61461035b578063e30c397814610391578063f2fde38b146103ae575f5ffd5b80635c975abb14610290578063715018a6146102b057806379ba5097146102c45780638456cb59146102d85780638abf6077146102ec575f5ffd5b80633ab76e9f116100ee5780633ab76e9f146102095780633eb6b8cf146102285780633f4ba83a146102475780634f1ef2861461025b57806352d1902d1461026e575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c65780633659cfe6146101ea575b5f5ffd5b348015610135575f5ffd5b5061013e6103cd565b005b34801561014b575f5ffd5b5061013e61015a36600461119f565b61047d565b34801561016a575f5ffd5b506101a96101793660046111d5565b6001600160401b03919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d1575f5ffd5b506101da610544565b60405190151581526020016101bd565b3480156101f5575f5ffd5b5061013e61020436600461119f565b61055c565b348015610214575f5ffd5b506097546101a9906001600160a01b031681565b348015610233575f5ffd5b506101a961024236600461120c565b610623565b348015610252575f5ffd5b5061013e610637565b61013e610269366004611259565b61064b565b348015610279575f5ffd5b50610282610700565b6040519081526020016101bd565b34801561029b575f5ffd5b506101da60c954610100900460ff1660021490565b3480156102bb575f5ffd5b5061013e6107b1565b3480156102cf575f5ffd5b5061013e6107c2565b3480156102e3575f5ffd5b5061013e610839565b3480156102f7575f5ffd5b506101a961084c565b34801561030b575f5ffd5b506033546001600160a01b03166101a9565b348015610328575f5ffd5b506101a961033736600461131c565b61085a565b348015610347575f5ffd5b5061013e610356366004611346565b61086d565b348015610366575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b0390911681526020016101bd565b34801561039c575f5ffd5b506065546001600160a01b03166101a9565b3480156103b9575f5ffd5b5061013e6103c836600461119f565b610949565b6103d56109ba565b5f54600290610100900460ff161580156103f557505f5460ff8083169116105b61041a5760405162461bcd60e51b815260040161041190611383565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff161580801561049b57505f54600160ff909116105b806104b45750303b1580156104b457505f5460ff166001145b6104d05760405162461bcd60e51b815260040161041190611383565b5f805460ff1916600117905580156104f1575f805461ff0019166101001790555b6104fb8230610a14565b8015610540575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261055360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100021630036105a45760405162461bcd60e51b8152600401610411906113d1565b7f00000000000000000000000001670010000000000000000000000000000100026001600160a01b03166105d6610a53565b6001600160a01b0316146105fc5760405162461bcd60e51b81526004016104119061141d565b61060581610a6e565b604080515f8082526020820190925261062091839190610a76565b50565b5f61062f848484610be0565b949350505050565b61063f610c3c565b610649335f610ccc565b565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100021630036106935760405162461bcd60e51b8152600401610411906113d1565b7f00000000000000000000000001670010000000000000000000000000000100026001600160a01b03166106c5610a53565b6001600160a01b0316146106eb5760405162461bcd60e51b81526004016104119061141d565b6106f482610a6e565b61054082826001610a76565b5f306001600160a01b037f0000000000000000000000000167001000000000000000000000000000010002161461079f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610411565b505f5160206115565f395f51905f5290565b6107b96109ba565b6106495f610ce5565b60655433906001600160a01b031681146108305760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610411565b61062081610ce5565b610841610cfe565b610649336001610ccc565b5f610855610a53565b905090565b5f610866468484610be0565b9392505050565b6108756109ba565b6001600160401b0383165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108c65760405163a883089360e01b815260040160405180910390fd5b6001600160401b0384165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109516109ba565b606580546001600160a01b0383166001600160a01b031990911681179091556109826033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610411565b806001600160a01b038116610a3c5760405163538ba4f960e01b815260040160405180910390fd5b610a4583610d6f565b610a4e82610dcd565b505050565b5f5160206115565f395f51905f52546001600160a01b031690565b6106206109ba565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610aa957610a4e83610e3d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b03575060408051601f3d908101601f19168201909252610b0091810190611469565b60015b610b665760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610411565b5f5160206115565f395f51905f528114610bd45760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610411565b50610a4e838383610ed8565b5f610beb8484610f02565b90508180610c0157506001600160a01b03811615155b84849091610c3357604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610411565b50509392505050565b610c5060c954610100900460ff1660021490565b610c6d5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561062081610fa4565b610d1260c954610100900460ff1660021490565b15610d305760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cc2565b5f54610100900460ff16610d955760405162461bcd60e51b815260040161041190611480565b610d9d610ff5565b610dbb6001600160a01b03821615610db55781610ce5565b33610ce5565b5060c9805461ff001916610100179055565b5f54610100900460ff16610df35760405162461bcd60e51b815260040161041190611480565b6001600160401b03461115610e1b5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381163b610eaa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610411565b5f5160206115565f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610ee18361101b565b5f82511180610eed5750805b15610a4e57610efc838361105a565b50505050565b6097545f906001600160a01b031680610f2e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f80573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062f91906114cb565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166106495760405162461bcd60e51b815260040161041190611480565b61102481610e3d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061086683836040518060600160405280602781526020016115766027913960605f5f856001600160a01b0316856040516110969190611508565b5f60405180830381855af49150503d805f81146110ce576040519150601f19603f3d011682016040523d82523d5f602084013e6110d3565b606091505b50915091506110e4868383876110ee565b9695505050505050565b6060831561115c5782515f03611155576001600160a01b0385163b6111555760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610411565b508161062f565b61062f83838151156111715781518083602001fd5b8060405162461bcd60e51b81526004016104119190611523565b6001600160a01b0381168114610620575f5ffd5b5f602082840312156111af575f5ffd5b81356108668161118b565b80356001600160401b03811681146111d0575f5ffd5b919050565b5f5f604083850312156111e6575f5ffd5b6111ef836111ba565b946020939093013593505050565b803580151581146111d0575f5ffd5b5f5f5f6060848603121561121e575f5ffd5b611227846111ba565b92506020840135915061123c604085016111fd565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561126a575f5ffd5b82356112758161118b565b915060208301356001600160401b0381111561128f575f5ffd5b8301601f8101851361129f575f5ffd5b80356001600160401b038111156112b8576112b8611245565b604051601f8201601f19908116603f011681016001600160401b03811182821017156112e6576112e6611245565b6040528181528282016020018710156112fd575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f6040838503121561132d575f5ffd5b8235915061133d602084016111fd565b90509250929050565b5f5f5f60608486031215611358575f5ffd5b611361846111ba565b92506020840135915060408401356113788161118b565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f60208284031215611479575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156114db575f5ffd5b81516108668161118b565b5f5b838110156115005781810151838201526020016114e8565b50505f910152565b5f82516115198184602087016114e6565b9190910192915050565b602081525f82518060208401526115418160408501602087016114e6565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201f510524c1800f97cbf3fac7303cbf789bb0b2861287601b3f10c325c89799f364736f6c634300081b0033", - "balance": "0x0" - }, - "0x1670010000000000000000000000000000010002": { - "contractName": "RollupAddressManager", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", - "0xd8268ac552cc4e7bd87f3f4b36d055f134549289cc2d68715bd581a06ffb2631": "0x0000000000000000000000001670010000000000000000000000000000010001", - "0xc64d73fae391b0ac595df47d373c227e7f86156e3d98ea2db53384d097ed1368": "0x0000000000000000000000001670010000000000000000000000000000000001", - "0x30e0422248fc90822e500074357003173b9f5edac82e6cc3679f5f9b5ae0843a": "0x0000000000000000000000001670010000000000000000000000000000000005", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000010002" - }, - "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", - "balance": "0x0" - }, - "0x5dADBb58A8ACfCaec475a08bBB4054F8874A3A8b": { - "contractName": "LibNetwork", - "storage": {}, - "code": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220fa28e419f92948effce2eaec534c53f13c8015c95a6be7019674d64d2aac3ae164736f6c634300081b0033", - "balance": "0x0" - }, - "0x0167001000000000000000000000000000010099": { - "contractName": "RegularERC20", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x526567756c617245524332300000000000000000000000000000000000000018", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x52474c0000000000000000000000000000000000000000000000000000000006", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000002710000", - "0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x215be5d23550ceb1beff54fb579a765903ba2ccc85b6f79bcf9bda4e8cb86034": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x6d1035fce6503985ab075a4ff3f7ce2e57cd5a9c5e6a0589dccacfea7bcb0af4": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x2a95ee547cef07a2fff0a68144824a0d9ded35ed87da118a53e1cda4aca8b944": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x7fcecd2a720442e9bc0cf1a8a6976f9fbddf6b996dc0d78af7e94dadf360d579": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x18bbf5fcf8fe870ecff419c4677497c08b2e6a5431bb94541d06c9da3f308e55": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x6e3431b4e42570cb9e3d926eb26f9e54de2df536ae0741ae16350d17a6c16ddc": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0xdb302bf24b1ad5f23949da8e6b05747dc699499a995361a7bf40ec7204696d6f": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0xa1d47ef1a6916dfbe65888f77739da164feb3a9a6afc95ee57e8b3e85ea5e955": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x454340b1295f9ff1c0fb9192166d0215d33f84dc5f2dc3f3e5732a4b557186bf": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x6a3bb1dada7c82a99b4a02d16da3fda07cb31d8887b9b99ec829ab67fd7a817e": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x2fe2844d12634f5dce1e2be5be96b2ea1c573f8f25171997e2f4bd943dd32f92": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x3836a017087644fbf6925ae1aca14201ce898a35434d9dea9ebd03cea44e049a": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x1c7a29f5a750951acb14fdf82a876085914eb17f15a162b054a3d2f8c92e2451": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x271927a243b678b7a071f19b4051ef93b16e397066e3fdef5bba26527e34a1a1": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x4663d660b5d810c9ab2f6dc64af7ff84ebae28a72342391622649a7fe87c93d4": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x352c3281a58937f04ef7cc7b88f3456b6ffd47f52a321c253dc083fb53a3a114": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x6d5faa5f4e671e6fe47b0eab51c62f8cebf354e21e8fdccf8cdfc0293dd341a3": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x673de83553dc3a2c0f59aa7193de392a4530feb73b9d6cd4fcef68802b8195c1": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x8b6a7148182c39c1ca0b052292befa83d09344947c23e47b300314fa8c2b8f7d": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0xed4a23b4a030ee0d64ef69b276dee81d493e5efca01c0fa514e0c38f882af152": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x45124dfaa1716b8d229f646ff926377e17b887c2b2eab6a87ab0348ee1689eac": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x40f9c2870c16301e8614e56453fc5b838c4a153eb0b18c4c050efbf4f786518a": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0xbd55c9294669a294e0c8fd07e2c07738e95be0123b62b752d782fe317f25ca97": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x52c0eeeba21034a69ad7cfa70f75c6fd127acd4084a4da80f30cc7540bdf990b": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x843a9befd317bdcee99c42a3adf6d00b789224beda1485c7f6e7bf327755328e": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0xea09b20615ffad342fb450741e59ea6ba180fa93b8701b31fa639ef9ff50d2b0": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x39cd5e5ec54ce41a5f5b2c13ce7133998dfef654caacfb44d5c517700c217d36": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0xd46a4409ebc9fc47afedecdadc89dbc0d6f46be6bdb49fd822d5143daedc83f0": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x5735d6fad3ea4f2328a1557ff1be7570df3d4c2630b448c1b7fe2781d018beb0": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x509c640066f1872118ec768fcb985c7bf4476690788ac7e112ab072ca82ab219": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0xf9982658df503b792c55f860aefa42588712c9069523324d4b9ce4d9a10e2e9c": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x87d11160035f8424b7163a397fc780b278af3de5a6caa2cb71bb2b46825ce159": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x1dde801acf032acf4b3151b5edb82e0e4d872a54d9efbf3809d75efcbfa2bf8f": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x01aad34cdf9f8f5fca811e2fab1411b08778be71f547894fa0d9fafa5c1f60b2": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x65cee0cf3d643c3f3402a40ddebed72cec3dd6bac66974bff967dc0ef9e2faed": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0xaf6cadccd3f046eeb282ec0b08e44adbe45784a23f41d76b096ccb8e7f238e2b": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x2589e1958c4e4f4a5f777b0b92a3170cc21771a8d3580331a71232f8624f7628": "0x00000000000000000000000000000000000000000000000000000000000fa000", - "0x1f27de92fedf410197c8a09d0f2f03372d92b75c9889a6a61cf491395877fbcf": "0x00000000000000000000000000000000000000000000000000000000000fa000" - }, - "code": "0x608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c8063395093511161006e578063395093511461011f57806370a082311461013257806395d89b411461015a578063a457c2d714610162578063a9059cbb14610175578063dd62ed3e14610188575f5ffd5b806306fdde03146100aa578063095ea7b3146100c857806318160ddd146100eb57806323b872dd146100fd578063313ce56714610110575b5f5ffd5b6100b261019b565b6040516100bf919061068a565b60405180910390f35b6100db6100d63660046106f0565b61022b565b60405190151581526020016100bf565b6002545b6040519081526020016100bf565b6100db61010b366004610718565b610244565b604051601281526020016100bf565b6100db61012d3660046106f0565b610267565b6100ef610140366004610752565b6001600160a01b03165f9081526020819052604090205490565b6100b2610288565b6100db6101703660046106f0565b610297565b6100db6101833660046106f0565b610316565b6100ef610196366004610772565b610323565b6060600380546101aa906107a3565b80601f01602080910402602001604051908101604052809291908181526020018280546101d6906107a3565b80156102215780601f106101f857610100808354040283529160200191610221565b820191905f5260205f20905b81548152906001019060200180831161020457829003601f168201915b5050505050905090565b5f3361023881858561034d565b60019150505b92915050565b5f33610251858285610470565b61025c8585856104e8565b506001949350505050565b5f336102388185856102798383610323565b61028391906107db565b61034d565b6060600480546101aa906107a3565b5f33816102a48286610323565b9050838110156103095760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61025c828686840361034d565b5f336102388185856104e8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610300565b6001600160a01b0382166104105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610300565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61047b8484610323565b90505f1981146104e257818110156104d55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610300565b6104e2848484840361034d565b50505050565b6001600160a01b03831661054c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610300565b6001600160a01b0382166105ae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610300565b6001600160a01b0383165f90815260208190526040902054818110156106255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610300565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104e2565b602081525f82518060208401525f5b818110156106b65760208186018101516040868401015201610699565b505f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146106eb575f5ffd5b919050565b5f5f60408385031215610701575f5ffd5b61070a836106d5565b946020939093013593505050565b5f5f5f6060848603121561072a575f5ffd5b610733846106d5565b9250610741602085016106d5565b929592945050506040919091013590565b5f60208284031215610762575f5ffd5b61076b826106d5565b9392505050565b5f5f60408385031215610783575f5ffd5b61078c836106d5565b915061079a602084016106d5565b90509250929050565b600181811c908216806107b757607f821691505b6020821081036107d557634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561023e57634e487b7160e01b5f52601160045260245ffdfea2646970667358221220afb53222eb165673ba5dfc3c8883c6d8b4942e876e8c5b0c567a03996e20a58864736f6c634300081b0033", - "balance": "0x0" - } -} \ No newline at end of file + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266": { + "balance": "0x3782dace9d90000000" + }, + "0x70997970C51812dc3A010C7d01b50e0d17dc79C8": { + "balance": "0x3782dace9d90000000" + }, + "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC": { + "balance": "0x3782dace9d90000000" + }, + "0x90F79bf6EB2c4f870365E785982E1f101E93b906": { + "balance": "0x3782dace9d90000000" + }, + "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65": { + "balance": "0x3782dace9d90000000" + }, + "0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc": { + "balance": "0x3782dace9d90000000" + }, + "0x976EA74026E726554dB657fA54763abd0C3a0aa9": { + "balance": "0x3782dace9d90000000" + }, + "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955": { + "balance": "0x3782dace9d90000000" + }, + "0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f": { + "balance": "0x3782dace9d90000000" + }, + "0xa0Ee7A142d267C1f36714E4a8F75612F20a79720": { + "balance": "0x3782dace9d90000000" + }, + "0xBcd4042DE499D14e55001CcbB24a551F3b954096": { + "balance": "0x3782dace9d90000000" + }, + "0x71bE63f3384f5fb98995898A86B02Fb2426c5788": { + "balance": "0x3782dace9d90000000" + }, + "0xFABB0ac9d68B0B445fB7357272Ff202C5651694a": { + "balance": "0x3782dace9d90000000" + }, + "0x1CBd3b2770909D4e10f157cABC84C7264073C9Ec": { + "balance": "0x3782dace9d90000000" + }, + "0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097": { + "balance": "0x3782dace9d90000000" + }, + "0xcd3B766CCDd6AE721141F452C550Ca635964ce71": { + "balance": "0x3782dace9d90000000" + }, + "0x2546BcD3c84621e976D8185a91A922aE77ECEc30": { + "balance": "0x3782dace9d90000000" + }, + "0xbDA5747bFD65F08deb54cb465eB87D40e51B197E": { + "balance": "0x3782dace9d90000000" + }, + "0xdD2FD4581271e230360230F9337D5c0430Bf44C0": { + "balance": "0x3782dace9d90000000" + }, + "0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199": { + "balance": "0x3782dace9d90000000" + }, + "0x7D86687F980A56b832e9378952B738b614A99dc6": { + "balance": "0x3782dace9d90000000" + }, + "0x11e8F3eA3C6FcF12EcfF2722d75CEFC539c51a1C": { + "balance": "0x3782dace9d90000000" + }, + "0x9eAF5590f2c84912A08de97FA28d0529361Deb9E": { + "balance": "0x3782dace9d90000000" + }, + "0x1003ff39d25F2Ab16dBCc18EcE05a9B6154f65F4": { + "balance": "0x3782dace9d90000000" + }, + "0x4779d18931B35540F84b0cd0e9633855B84df7b8": { + "balance": "0x3782dace9d90000000" + }, + "0x1c87Bb9234aeC6aDc580EaE6C8B59558A4502220": { + "balance": "0x3782dace9d90000000" + }, + "0x0d803cdeEe5990f22C2a8DF10A695D2312dA26CC": { + "balance": "0x3782dace9d90000000" + }, + "0xAb707cb80e7de7C75d815B1A653433F3EEc44c74": { + "balance": "0x3782dace9d90000000" + }, + "0xe8B1ff302A740fD2C6e76B620d45508dAEc2DDFf": { + "balance": "0x3782dace9d90000000" + }, + "0xa0EC9eE47802CeB56eb58ce80F3E41630B771b04": { + "balance": "0x3782dace9d90000000" + }, + "0x042a63149117602129B6922ecFe3111168C2C323": { + "balance": "0x3782dace9d90000000" + }, + "0xA1196426b41627ae75Ea7f7409E074BE97367da2": { + "balance": "0x3782dace9d90000000" + }, + "0xE74cEf90b6CF1a77FEfAd731713e6f53e575C183": { + "balance": "0x3782dace9d90000000" + }, + "0x7Df8Efa6d6F1CB5C4f36315e0AcB82b02Ae8BA40": { + "balance": "0x3782dace9d90000000" + }, + "0x9E126C57330FA71556628e0aabd6B6B6783d99fA": { + "balance": "0x3782dace9d90000000" + }, + "0xcBDc0F9a4C38f1e010bD3B6e43598A55D1868c23": { + "balance": "0x3782dace9d90000000" + }, + "0xBc5BdceE96b1BC47822C74e6f64186fbA7d686be": { + "balance": "0x3782dace9d90000000" + }, + "0x0536896a5e38BbD59F3F369FF3682677965aBD19": { + "balance": "0x3782dace9d90000000" + }, + "0xFE0f143FcAD5B561b1eD2AC960278A2F23559Ef9": { + "balance": "0x3782dace9d90000000" + }, + "0x98D08079928FcCB30598c6C6382ABfd7dbFaA1cD": { + "balance": "0x3782dace9d90000000" + }, + "0x0167001000000000000000000000000000000006": { + "contractName": "SharedAddressManagerImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" + }, + "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610300578063a86f9d9e1461031d578063d8f4648f1461033c578063e07baba61461035b578063e30c397814610391578063f2fde38b146103ae575f5ffd5b80635c975abb14610290578063715018a6146102b057806379ba5097146102c45780638456cb59146102d85780638abf6077146102ec575f5ffd5b80633ab76e9f116100ee5780633ab76e9f146102095780633eb6b8cf146102285780633f4ba83a146102475780634f1ef2861461025b57806352d1902d1461026e575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c65780633659cfe6146101ea575b5f5ffd5b348015610135575f5ffd5b5061013e6103cd565b005b34801561014b575f5ffd5b5061013e61015a36600461119f565b61047d565b34801561016a575f5ffd5b506101a96101793660046111d5565b6001600160401b03919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d1575f5ffd5b506101da610544565b60405190151581526020016101bd565b3480156101f5575f5ffd5b5061013e61020436600461119f565b61055c565b348015610214575f5ffd5b506097546101a9906001600160a01b031681565b348015610233575f5ffd5b506101a961024236600461120c565b610623565b348015610252575f5ffd5b5061013e610637565b61013e610269366004611259565b61064b565b348015610279575f5ffd5b50610282610700565b6040519081526020016101bd565b34801561029b575f5ffd5b506101da60c954610100900460ff1660021490565b3480156102bb575f5ffd5b5061013e6107b1565b3480156102cf575f5ffd5b5061013e6107c2565b3480156102e3575f5ffd5b5061013e610839565b3480156102f7575f5ffd5b506101a961084c565b34801561030b575f5ffd5b506033546001600160a01b03166101a9565b348015610328575f5ffd5b506101a961033736600461131c565b61085a565b348015610347575f5ffd5b5061013e610356366004611346565b61086d565b348015610366575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b0390911681526020016101bd565b34801561039c575f5ffd5b506065546001600160a01b03166101a9565b3480156103b9575f5ffd5b5061013e6103c836600461119f565b610949565b6103d56109ba565b5f54600290610100900460ff161580156103f557505f5460ff8083169116105b61041a5760405162461bcd60e51b815260040161041190611383565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff161580801561049b57505f54600160ff909116105b806104b45750303b1580156104b457505f5460ff166001145b6104d05760405162461bcd60e51b815260040161041190611383565b5f805460ff1916600117905580156104f1575f805461ff0019166101001790555b6104fb8230610a14565b8015610540575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261055360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000000061630036105a45760405162461bcd60e51b8152600401610411906113d1565b7f00000000000000000000000001670010000000000000000000000000000000066001600160a01b03166105d6610a53565b6001600160a01b0316146105fc5760405162461bcd60e51b81526004016104119061141d565b61060581610a6e565b604080515f8082526020820190925261062091839190610a76565b50565b5f61062f848484610be0565b949350505050565b61063f610c3c565b610649335f610ccc565b565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000000061630036106935760405162461bcd60e51b8152600401610411906113d1565b7f00000000000000000000000001670010000000000000000000000000000000066001600160a01b03166106c5610a53565b6001600160a01b0316146106eb5760405162461bcd60e51b81526004016104119061141d565b6106f482610a6e565b61054082826001610a76565b5f306001600160a01b037f0000000000000000000000000167001000000000000000000000000000000006161461079f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610411565b505f5160206115565f395f51905f5290565b6107b96109ba565b6106495f610ce5565b60655433906001600160a01b031681146108305760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610411565b61062081610ce5565b610841610cfe565b610649336001610ccc565b5f610855610a53565b905090565b5f610866468484610be0565b9392505050565b6108756109ba565b6001600160401b0383165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108c65760405163a883089360e01b815260040160405180910390fd5b6001600160401b0384165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109516109ba565b606580546001600160a01b0383166001600160a01b031990911681179091556109826033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610411565b806001600160a01b038116610a3c5760405163538ba4f960e01b815260040160405180910390fd5b610a4583610d6f565b610a4e82610dcd565b505050565b5f5160206115565f395f51905f52546001600160a01b031690565b6106206109ba565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610aa957610a4e83610e3d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b03575060408051601f3d908101601f19168201909252610b0091810190611469565b60015b610b665760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610411565b5f5160206115565f395f51905f528114610bd45760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610411565b50610a4e838383610ed8565b5f610beb8484610f02565b90508180610c0157506001600160a01b03811615155b84849091610c3357604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610411565b50509392505050565b610c5060c954610100900460ff1660021490565b610c6d5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561062081610fa4565b610d1260c954610100900460ff1660021490565b15610d305760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cc2565b5f54610100900460ff16610d955760405162461bcd60e51b815260040161041190611480565b610d9d610ff5565b610dbb6001600160a01b03821615610db55781610ce5565b33610ce5565b5060c9805461ff001916610100179055565b5f54610100900460ff16610df35760405162461bcd60e51b815260040161041190611480565b6001600160401b03461115610e1b5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381163b610eaa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610411565b5f5160206115565f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610ee18361101b565b5f82511180610eed5750805b15610a4e57610efc838361105a565b50505050565b6097545f906001600160a01b031680610f2e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f80573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062f91906114cb565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166106495760405162461bcd60e51b815260040161041190611480565b61102481610e3d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061086683836040518060600160405280602781526020016115766027913960605f5f856001600160a01b0316856040516110969190611508565b5f60405180830381855af49150503d805f81146110ce576040519150601f19603f3d011682016040523d82523d5f602084013e6110d3565b606091505b50915091506110e4868383876110ee565b9695505050505050565b6060831561115c5782515f03611155576001600160a01b0385163b6111555760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610411565b508161062f565b61062f83838151156111715781518083602001fd5b8060405162461bcd60e51b81526004016104119190611523565b6001600160a01b0381168114610620575f5ffd5b5f602082840312156111af575f5ffd5b81356108668161118b565b80356001600160401b03811681146111d0575f5ffd5b919050565b5f5f604083850312156111e6575f5ffd5b6111ef836111ba565b946020939093013593505050565b803580151581146111d0575f5ffd5b5f5f5f6060848603121561121e575f5ffd5b611227846111ba565b92506020840135915061123c604085016111fd565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561126a575f5ffd5b82356112758161118b565b915060208301356001600160401b0381111561128f575f5ffd5b8301601f8101851361129f575f5ffd5b80356001600160401b038111156112b8576112b8611245565b604051601f8201601f19908116603f011681016001600160401b03811182821017156112e6576112e6611245565b6040528181528282016020018710156112fd575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f6040838503121561132d575f5ffd5b8235915061133d602084016111fd565b90509250929050565b5f5f5f60608486031215611358575f5ffd5b611361846111ba565b92506020840135915060408401356113788161118b565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f60208284031215611479575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156114db575f5ffd5b81516108668161118b565b5f5b838110156115005781810151838201526020016114e8565b50505f910152565b5f82516115198184602087016114e6565b9190910192915050565b602081525f82518060208401526115418160408501602087016114e6565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c7f05ce9711ed9d578d8b6db6831e3b98ae749a3ad958172933eaf0e1d0d180164736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670010000000000000000000000000000000006": { + "contractName": "SharedAddressManager", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", + "0xc64d73fae391b0ac595df47d373c227e7f86156e3d98ea2db53384d097ed1368": "0x0000000000000000000000001670010000000000000000000000000000000001", + "0x874594376407a7a3ecea7d4704f3d74c6c46d5ebede74ed82e228810d8de14e8": "0x0000000000000000000000001670010000000000000000000000000000000002", + "0x2723bcf67bd1580da6815ff7d2e86d877ad3a715975e5ec695c979712859d633": "0x0000000000000000000000001670010000000000000000000000000000000003", + "0x0b9331c6e6848711b59bebda4cb38292225176ce8cfca5d6019d5b562dc3ed9e": "0x0000000000000000000000001670010000000000000000000000000000000004", + "0x30e0422248fc90822e500074357003173b9f5edac82e6cc3679f5f9b5ae0843a": "0x0000000000000000000000001670010000000000000000000000000000000005", + "0xfe44fe816c0baa33783639d99e595cb6de463e186ec113aaed043e42d2c4e279": "0x0000000000000000000000000167001000000000000000000000000000010096", + "0xd2d6c2a7f8afdb0440c97960518d1f1133dc92587d9c6884dbaff6290e06319c": "0x0000000000000000000000000167001000000000000000000000000000010097", + "0x6db8284aa664f2ba76ffc7a2219f82b728ba258e79df0e93d3eb45b5cb231a69": "0x0000000000000000000000000167001000000000000000000000000000010098", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000000006" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167001000000000000000000000000000000001": { + "contractName": "BridgeImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" + }, + "code": "0x60806040526004361061021d575f3560e01c806382b5e8891161011e578063b8acae0e116100a8578063e07baba61161006d578063e07baba61461066b578063e30c3978146106a2578063eefbf17e146106bf578063f09a4016146106e5578063f2fde38b14610704575f5ffd5b8063b8acae0e146105af578063be880c81146105ce578063c012fa77146105e4578063d0496d6a14610603578063d1aaa5df1461064b575f5ffd5b80638e3881a9116100ee5780638e3881a9146104fe578063913b16cb1461053c5780639efc7a2e1461055b578063a730cdfb1461057a578063a86f9d9e14610590575f5ffd5b806382b5e8891461049a5780638456cb59146104b95780638abf6077146104cd5780638da5cb5b146104e1575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb146103ff57806360620c6b1461041f578063715018a61461043e57806379ba5097146104525780637cbadfaa14610466575f5ffd5b80633f4ba83a14610381578063422770fa146103955780634f1ef286146103b957806352d1902d146103cc5780635862f6e1146103e0575f5ffd5b80633075db56116101f05780633075db56146102ad5780633659cfe6146102d15780633ab76e9f146102f05780633c6cf473146103275780633eb6b8cf14610362575f5ffd5b80630432873c14610221578063069489a2146102425780631bdb0037146102565780632035065e14610280575b5f5ffd5b34801561022c575f5ffd5b5061024061023b366004612f9c565b610723565b005b34801561024d575f5ffd5b50610240610a21565b610269610264366004612fea565b610ad8565b604051610277929190613176565b60405180910390f35b34801561028b575f5ffd5b5061029f61029a36600461318e565b610e8e565b60405161027792919061324b565b3480156102b8575f5ffd5b506102c161134e565b6040519015158152602001610277565b3480156102dc575f5ffd5b506102406102eb36600461329a565b611366565b3480156102fb575f5ffd5b5060975461030f906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b348015610332575f5ffd5b506103556103413660046132b5565b60fc6020525f908152604090205460ff1681565b60405161027791906132cc565b34801561036d575f5ffd5b5061030f61037c3660046132f0565b61142d565b34801561038c575f5ffd5b50610240611443565b3480156103a0575f5ffd5b506103ab62030d4081565b604051908152602001610277565b6102406103c73660046133f3565b611457565b3480156103d7575f5ffd5b506103ab611510565b3480156103eb575f5ffd5b506102c16103fa36600461318e565b6115c2565b34801561040a575f5ffd5b506102c160c954610100900460ff1660021490565b34801561042a575f5ffd5b506102c1610439366004612fea565b61162d565b348015610449575f5ffd5b506102406116fb565b34801561045d575f5ffd5b5061024061170c565b348015610471575f5ffd5b506104856104803660046132b5565b611783565b60405163ffffffff9091168152602001610277565b3480156104a5575f5ffd5b506102406104b436600461329a565b6117a1565b3480156104c4575f5ffd5b50610240611821565b3480156104d8575f5ffd5b5061030f611834565b3480156104ec575f5ffd5b506033546001600160a01b031661030f565b348015610509575f5ffd5b5061051d61051836600461343f565b611842565b6040805192151583526001600160a01b03909116602083015201610277565b348015610547575f5ffd5b50610240610556366004612fea565b61186e565b348015610566575f5ffd5b5061024061057536600461318e565b611a5d565b348015610585575f5ffd5b506104856201d4c081565b34801561059b575f5ffd5b5061030f6105aa366004613458565b611d61565b3480156105ba575f5ffd5b506102c16105c936600461318e565b611d6d565b3480156105d9575f5ffd5b50610485620c350081565b3480156105ef575f5ffd5b506103ab6105fe36600461357b565b611dce565b34801561060e575f5ffd5b50610617611dfd565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610277565b348015610656575f5ffd5b506103ab6106653660046132b5565b60031890565b348015610676575f5ffd5b5060c9546201000090046001600160401b03165b6040516001600160401b039091168152602001610277565b3480156106ad575f5ffd5b506065546001600160a01b031661030f565b3480156106ca575f5ffd5b5060fb5461068a90600160401b90046001600160401b031681565b3480156106f0575f5ffd5b506102406106ff3660046135ac565b611ea4565b34801561070f575f5ffd5b5061024061071e36600461329a565b611f6b565b61073360e0830160c0840161343f565b46816001600160401b03161461075c57604051631c6c777560e31b815260040160405180910390fd5b61076c60a084016080850161343f565b6001600160401b038116158061078a575046816001600160401b0316145b156107a857604051631c6c777560e31b815260040160405180910390fd5b6107bc60c954610100900460ff1660021490565b156107da5760405163bae6e2a960e01b815260040160405180910390fd5b60026107e860c95460ff1690565b60ff16036108095760405163dfc60d8560e01b815260040160405180910390fd5b6108136002611fdc565b5f6108206105fe866135d8565b905061082d816001611ff2565b61083b856101200135612044565b610858576040516335856fbd60e21b815260040160405180910390fd5b5f61087d866108786d7369676e616c5f7365727669636560901b5f611d61565b6120e5565b156108c8576108c18661012001356188b860405180602001604052805f8152508960e00160208101906108b0919061329a565b6001600160a01b03169291906121dc565b9050610942565b6108d860608701604088016135e3565b63ffffffff1615806108e75750845b801561091557506108ff610100870160e0880161329a565b6001600160a01b0316336001600160a01b031614155b15610933576040516372b6e1c360e11b815260040160405180910390fd5b61093f86835a5f612219565b90505b80156109585761095382600261233d565b610a0f565b84156109f65761096982600361233d565b6109846d7369676e616c5f7365727669636560901b5f611d61565b60405163019b28af60e61b81526003841860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af11580156109cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f091906135fc565b50610a0f565b60405163161e3ead60e01b815260040160405180910390fd5b5050610a1b6001611fdc565b50505050565b610a296123fa565b5f54600290610100900460ff16158015610a4957505f5460ff8083169116105b610a6e5760405162461bcd60e51b8152600401610a6590613613565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610b3e60c0840160a0850161329a565b6001600160a01b038116610b655760405163538ba4f960e01b815260040160405180910390fd5b610b76610100850160e0860161329a565b6001600160a01b038116610b9d5760405163538ba4f960e01b815260040160405180910390fd5b610bad60e0860160c0870161343f565b6001600160401b0381161580610bcb575046816001600160401b0316145b15610be957604051631c6c777560e31b815260040160405180910390fd5b610bfd60c954610100900460ff1660021490565b15610c1b5760405163bae6e2a960e01b815260040160405180910390fd5b6002610c2960c95460ff1690565b60ff1603610c4a5760405163dfc60d8560e01b815260040160405180910390fd5b610c546002611fdc565b610c6460608701604088016135e3565b63ffffffff165f03610cac57610c80604087016020880161343f565b6001600160401b031615610ca75760405163c9f5178760e01b815260040160405180910390fd5b610cd4565b610cb586612454565b5f03610cd4576040516308c2ad5360e01b815260040160405180910390fd5b5f610ce861051860e0890160c08a0161343f565b50905080610d0957604051631c6c777560e31b815260040160405180910390fd5b34610d1a6040890160208a0161343f565b610d32906001600160401b03166101208a0135613675565b14610d5057604051634ac2abdf60e11b815260040160405180910390fd5b610d59876135d8565b60fb8054919650600160401b9091046001600160401b0316906008610d7d83613688565b82546101009290920a6001600160401b03818102199093169183160217909155908116865233606087015246166080860152610db885611dce565b9550857fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351786604051610dea91906136b2565b60405180910390a2610e0d6d7369676e616c5f7365727669636560901b5f611d61565b6001600160a01b03166366ca2bc0876040518263ffffffff1660e01b8152600401610e3a91815260200190565b6020604051808303815f875af1158015610e56573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e7a91906135fc565b5050610e866001611fdc565b505050915091565b5f5f610ea460c954610100900460ff1660021490565b15610ec25760405163bae6e2a960e01b815260040160405180910390fd5b6002610ed060c95460ff1690565b60ff1603610ef15760405163dfc60d8560e01b815260040160405180910390fd5b610efb6002611fdc565b5f5a905046610f1060e0880160c0890161343f565b6001600160401b031614610f3757604051631c6c777560e31b815260040160405180910390fd5b610f4760a087016080880161343f565b6001600160401b03161580610f73575046610f6860a088016080890161343f565b6001600160401b0316145b15610f9157604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610fc5610100880160e0890161329a565b6001600160a01b031633148015606083015261103457610feb60608801604089016135e3565b63ffffffff165f03611010576040516372b6e1c360e11b815260040160405180910390fd5b62030d4085111561103457604051631e3b03c960e01b815260040160405180910390fd5b5f6110416105fe896135d8565b905061104d815f611ff2565b5f6110696d7369676e616c5f7365727669636560901b5f611d61565b63ffffffff881660208501529050611093818361108c60a08d0160808e0161343f565b8b8b6124a7565b63ffffffff166040808501919091526110d2906110b5908b0160208c0161343f565b6110cd906001600160401b03166101208c0135613675565b612044565b6110ef576040516335856fbd60e21b815260040160405180910390fd5b5f6110fa8a836120e5565b156111135750600295506001945061012089013561115a565b5f8460600151611123575a61112c565b61112c8b612454565b905061113e8b85838860600151612219565b1561114f57600297505f9650611158565b60019750600296505b505b61116a60408b0160208c0161343f565b6001600160401b0316156112cb5761118860408b0160208c0161343f565b61119b906001600160401b031682613675565b9050836060015180156111c257506111b960608b0160408c016135e3565b63ffffffff1615155b156112cb57604084015163ffffffff16614e20025a6111ff6111e86101408e018e6136c4565b6020601f909101819004026101a00160041b919050565b63ffffffff9081168801919091036201d4c00181168087525f9183916112289183919061255216565b0390505f61123c60608e0160408f016135e3565b63ffffffff168d6020016020810190611255919061343f565b6001600160401b031683028161126d5761126d61370d565b0490505f48830290505f6112b18f602001602081019061128d919061343f565b6001600160401b0316848410156112a95784840160011c6112ab565b845b90612567565b958690039590506112c533826188b861257b565b50505050505b6112f3816188b86112e36101008e0160e08f0161329a565b6001600160a01b0316919061257b565b6112fd838861233d565b827f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8b8660405161132f9291906138a5565b60405180910390a250505050506113466001611fdc565b935093915050565b5f600261135d60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000000011630036113ae5760405162461bcd60e51b8152600401610a65906138f9565b7f00000000000000000000000001670010000000000000000000000000000000016001600160a01b03166113e06125be565b6001600160a01b0316146114065760405162461bcd60e51b8152600401610a6590613945565b61140f816125d9565b604080515f8082526020820190925261142a918391906125e1565b50565b5f61143984848461274b565b90505b9392505050565b61144b6127a7565b611455335f612837565b565b6001600160a01b037f000000000000000000000000016700100000000000000000000000000000000116300361149f5760405162461bcd60e51b8152600401610a65906138f9565b7f00000000000000000000000001670010000000000000000000000000000000016001600160a01b03166114d16125be565b6001600160a01b0316146114f75760405162461bcd60e51b8152600401610a6590613945565b611500826125d9565b61150c828260016125e1565b5050565b5f306001600160a01b037f000000000000000000000000016700100000000000000000000000000000000116146115af5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a65565b505f516020613b5f5f395f51905f525b90565b5f466115d460a086016080870161343f565b6001600160401b0316146115e957505f61143c565b6114396116076d7369676e616c5f7365727669636560901b5f611d61565b6116166106656105fe886135d8565b61162660e0880160c0890161343f565b86866128e4565b5f4661163f60a084016080850161343f565b6001600160401b03161461165457505f919050565b61166f6d7369676e616c5f7365727669636560901b5f611d61565b6001600160a01b03166332676bc63061168a6105fe866135d8565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156116d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f59190613991565b92915050565b6117036123fa565b6114555f612966565b60655433906001600160a01b0316811461177a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a65565b61142a81612966565b5f6116f5620c35006101a06020601f8601819004020160041b6139ac565b806001600160a01b0381166117c95760405163538ba4f960e01b815260040160405180910390fd5b6040516317066a5760e21b81523060048201526001600160a01b03831690635c19a95c906024015f604051808303815f87803b158015611807575f5ffd5b505af1158015611819573d5f5f3e3d5ffd5b505050505050565b61182961297f565b611455336001612837565b5f61183d6125be565b905090565b5f5f611859836562726964676560d01b600161142d565b6001600160a01b038116151594909350915050565b61187e60e0820160c0830161343f565b46816001600160401b0316146118a757604051631c6c777560e31b815260040160405180910390fd5b6118b760a083016080840161343f565b6001600160401b03811615806118d5575046816001600160401b0316145b156118f357604051631c6c777560e31b815260040160405180910390fd5b61190760c954610100900460ff1660021490565b156119255760405163bae6e2a960e01b815260040160405180910390fd5b600261193360c95460ff1690565b60ff16036119545760405163dfc60d8560e01b815260040160405180910390fd5b61195e6002611fdc565b61196f610100840160e0850161329a565b6001600160a01b0316336001600160a01b0316146119a0576040516372b6e1c360e11b815260040160405180910390fd5b5f6119ad6105fe856135d8565b90506119ba816001611ff2565b6119c581600361233d565b6119e06d7369676e616c5f7365727669636560901b5f611d61565b60405163019b28af60e61b81526003831860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af1158015611a28573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4c91906135fc565b5050611a586001611fdc565b505050565b611a6d60a084016080850161343f565b46816001600160401b031614611a9657604051631c6c777560e31b815260040160405180910390fd5b611aa660e0850160c0860161343f565b6001600160401b0381161580611ac4575046816001600160401b0316145b15611ae257604051631c6c777560e31b815260040160405180910390fd5b611af660c954610100900460ff1660021490565b15611b145760405163bae6e2a960e01b815260040160405180910390fd5b6002611b2260c95460ff1690565b60ff1603611b435760405163dfc60d8560e01b815260040160405180910390fd5b611b4d6002611fdc565b5f611b5a6105fe876135d8565b9050611b66815f611ff2565b5f611b826d7369676e616c5f7365727669636560901b5f611d61565b604051631933b5e360e11b8152306004820152602481018490529091506001600160a01b038216906332676bc690604401602060405180830381865afa158015611bce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf29190613991565b611c0f5760405163ab035ad560e01b815260040160405180910390fd5b611c2e8160038418611c2760e08b0160c08c0161343f565b89896124a7565b50611c3a82600461233d565b611c48876101200135612044565b611c65576040516335856fbd60e21b815260040160405180910390fd5b611c8e62bc399d60e11b611c7f60808a0160608b0161329a565b6001600160a01b0316906129f0565b15611d3257611cad8230611ca860a08b0160808c0161343f565b612ac0565b611cbd608088016060890161329a565b6001600160a01b0316630178733a88610120013589856040518463ffffffff1660e01b8152600401611cf09291906139c8565b5f604051808303818588803b158015611d07575f5ffd5b505af1158015611d19573d5f5f3e3d5ffd5b5050505050611d2d5f195f1b5f1980612ac0565b611d4e565b611d4e6101208801356188b86112e360c08b0160a08c0161329a565b5050611d5a6001611fdc565b5050505050565b5f61143c46848461274b565b5f46611d7f60e0860160c0870161343f565b6001600160401b031614611d9457505f61143c565b611439611db26d7369676e616c5f7365727669636560901b5f611d61565b611dbe6105fe876135d8565b61162660a088016080890161343f565b5f81604051602001611de091906139e9565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611e74604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611e86575080515f19145b156115bf57604051635ceed17360e01b815260040160405180910390fd5b5f54610100900460ff1615808015611ec257505f54600160ff909116105b80611edb5750303b158015611edb57505f5460ff166001145b611ef75760405162461bcd60e51b8152600401610a6590613613565b5f805460ff191660011790558015611f18575f805461ff0019166101001790555b611f228383612b15565b8015611a58575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b611f736123fa565b606580546001600160a01b0383166001600160a01b03199091168117909155611fa46033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b80600481111561200457612004613223565b5f83815260fc602052604090205460ff16600481111561202657612026613223565b1461150c576040516319d893ad60e21b815260040160405180910390fd5b5f5f6120616c38bab7ba30afb6b0b730b3b2b960991b6001611d61565b90506001600160a01b03811661207a5750600192915050565b6040516315c638fb60e31b81525f6004820152602481018490526001600160a01b0382169063ae31c7d8906044015f604051808303815f87803b1580156120bf575f5ffd5b505af19250505080156120d0575060015b6120dc57505f92915050565b50600192915050565b5f806120f96101208501610100860161329a565b6001600160a01b03160361210f575060016116f5565b306121226101208501610100860161329a565b6001600160a01b031603612138575060016116f5565b6001600160a01b0382166121546101208501610100860161329a565b6001600160a01b03160361216a575060016116f5565b600461217a6101408501856136c4565b9050101580156121b15750637f07c94760e01b61219b6101408501856136c4565b6121a491613a1f565b6001600160e01b03191614155b801561143c575061143c6121cd6101208501610100860161329a565b6001600160a01b03163b151590565b5f6001600160a01b03851661220457604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f3061222b608087016060880161329a565b6001600160a01b03160361224157612241613a57565b610120850135158015612261575061225d6101408601866136c4565b1590505b1561226e57506001612335565b825f0361227c57505f612335565b6122a084612290608088016060890161329a565b611ca860a0890160808a0161343f565b5f6122b36101208701610100880161329a565b90506101208601355f6122ca6101408901896136c4565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a90508515612324576123248188612b4f565b6123305f198080612ac0565b505050505b949350505050565b80600481111561234f5761234f613223565b5f83815260fc602052604090205460ff16600481111561237157612371613223565b0361238f576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff191660018360048111156123b9576123b9613223565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516123ee91906132cc565b60405180910390a25050565b6033546001600160a01b031633146114555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a65565b5f8061246e6124676101408501856136c4565b9050611783565b63ffffffff1690508061249f61248a60608601604087016135e3565b63ffffffff168361255290919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856124cc876562726964676560d01b5f61142d565b8887876040518663ffffffff1660e01b81526004016124ef959493929190613a6b565b6020604051808303815f875af1925050508015612529575060408051601f3d908101601f19168201909252612526918101906135fc565b60015b612546576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f818311612560578161143c565b5090919050565b5f818311612575578261143c565b50919050565b815f0361258757505050565b6125a183838360405180602001604052805f8152506121dc565b611a5857604051634c67134d60e11b815260040160405180910390fd5b5f516020613b5f5f395f51905f52546001600160a01b031690565b61142a6123fa565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561261457611a5883612b63565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561266e575060408051601f3d908101601f1916820190925261266b918101906135fc565b60015b6126d15760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a65565b5f516020613b5f5f395f51905f52811461273f5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a65565b50611a58838383612bfe565b5f6127568484612c22565b9050818061276c57506001600160a01b03811615155b8484909161279e57604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610a65565b50509392505050565b6127bb60c954610100900460ff1660021490565b6127d85760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6033546001600160a01b038381169116148061287f575061286a6d636861696e5f7761746368646f6760901b6001611d61565b6001600160a01b0316826001600160a01b0316145b15612888575050565b8080156128c257506128ad6e6272696467655f7761746368646f6760881b6001611d61565b6001600160a01b0316826001600160a01b0316145b156128cb575050565b604051630d85cccf60e11b815260040160405180910390fd5b5f856001600160a01b031663ce9d082085612909876562726964676560d01b5f61142d565b8887876040518663ffffffff1660e01b815260040161292c959493929190613a6b565b5f6040518083038186803b158015612942575f5ffd5b505afa925050508015612953575060015b61295e57505f612549565b506001612549565b606580546001600160a01b031916905561142a81612cc4565b61299360c954610100900460ff1660021490565b156129b15760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161282d565b6040516001600160e01b0319821660248201525f90819081906001600160a01b0386169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b17905251612a4c9190613aac565b5f60405180830381855afa9150503d805f8114612a84576040519150601f19603f3d011682016040523d82523d5f602084013e612a89565b606091505b5091509150818015612a9c575080516020145b15612ab85780806020019051810190612ab59190613991565b92505b505092915050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b806001600160a01b038116612b3d5760405163538ba4f960e01b815260040160405180910390fd5b612b4683612d15565b611a5882612d73565b612b5a603f82613ac7565b82101561150c57fe5b6001600160a01b0381163b612bd05760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a65565b5f516020613b5f5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b612c0783612de3565b5f82511180612c135750805b15611a5857610a1b8383612e22565b6097545f906001600160a01b031680612c4e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612ca0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123359190613ae6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16612d3b5760405162461bcd60e51b8152600401610a6590613b01565b612d43612e47565b612d616001600160a01b03821615612d5b5781612966565b33612966565b5060c9805461ff001916610100179055565b5f54610100900460ff16612d995760405162461bcd60e51b8152600401610a6590613b01565b6001600160401b03461115612dc15760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b612dec81612b63565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061143c8383604051806060016040528060278152602001613b7f60279139612e6d565b5f54610100900460ff166114555760405162461bcd60e51b8152600401610a6590613b01565b60605f5f856001600160a01b031685604051612e899190613aac565b5f60405180830381855af49150503d805f8114612ec1576040519150601f19603f3d011682016040523d82523d5f602084013e612ec6565b606091505b5091509150612ed786838387612ee1565b9695505050505050565b60608315612f4f5782515f03612f48576001600160a01b0385163b612f485760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a65565b5081612335565b6123358383815115612f645781518083602001fd5b8060405162461bcd60e51b8152600401610a659190613b4c565b5f6101608284031215612575575f5ffd5b801515811461142a575f5ffd5b5f5f60408385031215612fad575f5ffd5b82356001600160401b03811115612fc2575f5ffd5b612fce85828601612f7e565b9250506020830135612fdf81612f8f565b809150509250929050565b5f60208284031215612ffa575f5ffd5b81356001600160401b0381111561300f575f5ffd5b61233584828501612f7e565b5f5b8381101561303557818101518382015260200161301d565b50505f910152565b5f815180845261305481602086016020860161301b565b601f01601f19169290920160200192915050565b80516001600160401b031682525f602082015161309060208501826001600160401b03169052565b5060408201516130a8604085018263ffffffff169052565b5060608201516130c360608501826001600160a01b03169052565b5060808201516130de60808501826001600160401b03169052565b5060a08201516130f960a08501826001600160a01b03169052565b5060c082015161311460c08501826001600160401b03169052565b5060e082015161312f60e08501826001600160a01b03169052565b5061010082015161314c6101008501826001600160a01b03169052565b5061012082015161012084015261014082015161016061014085015261233561016085018261303d565b828152604060208201525f6114396040830184613068565b5f5f5f604084860312156131a0575f5ffd5b83356001600160401b038111156131b5575f5ffd5b6131c186828701612f7e565b93505060208401356001600160401b038111156131dc575f5ffd5b8401601f810186136131ec575f5ffd5b80356001600160401b03811115613201575f5ffd5b866020828401011115613212575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b6005811061324757613247613223565b9052565b604081016132598285613237565b6004831061326957613269613223565b8260208301529392505050565b6001600160a01b038116811461142a575f5ffd5b803561329581613276565b919050565b5f602082840312156132aa575f5ffd5b813561143c81613276565b5f602082840312156132c5575f5ffd5b5035919050565b602081016116f58284613237565b80356001600160401b0381168114613295575f5ffd5b5f5f5f60608486031215613302575f5ffd5b61330b846132da565b925060208401359150604084013561332281612f8f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b03811182821017156133645761336461332d565b60405290565b5f82601f830112613379575f5ffd5b81356001600160401b038111156133925761339261332d565b604051601f8201601f19908116603f011681016001600160401b03811182821017156133c0576133c061332d565b6040528181528382016020018510156133d7575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613404575f5ffd5b823561340f81613276565b915060208301356001600160401b03811115613429575f5ffd5b6134358582860161336a565b9150509250929050565b5f6020828403121561344f575f5ffd5b61143c826132da565b5f5f60408385031215613469575f5ffd5b823591506020830135612fdf81612f8f565b803563ffffffff81168114613295575f5ffd5b5f610160828403121561349f575f5ffd5b6134a7613341565b90506134b2826132da565b81526134c0602083016132da565b60208201526134d16040830161347b565b60408201526134e26060830161328a565b60608201526134f3608083016132da565b608082015261350460a0830161328a565b60a082015261351560c083016132da565b60c082015261352660e0830161328a565b60e0820152613538610100830161328a565b61010082015261012082810135908201526101408201356001600160401b03811115613562575f5ffd5b61356e8482850161336a565b6101408301525092915050565b5f6020828403121561358b575f5ffd5b81356001600160401b038111156135a0575f5ffd5b6123358482850161348e565b5f5f604083850312156135bd575f5ffd5b82356135c881613276565b91506020830135612fdf81613276565b5f6116f5368361348e565b5f602082840312156135f3575f5ffd5b61143c8261347b565b5f6020828403121561360c575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116f5576116f5613661565b5f6001600160401b0382166001600160401b0381036136a9576136a9613661565b60010192915050565b602081525f61143c6020830184613068565b5f5f8335601e198436030181126136d9575f5ffd5b8301803591506001600160401b038211156136f2575f5ffd5b602001915036819003821315613706575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e19843603018112613736575f5ffd5b83016020810192503590506001600160401b03811115613754575f5ffd5b803603821315613706575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6137a482613797836132da565b6001600160401b03169052565b5f6137b1602083016132da565b6001600160401b031660208401526137cb6040830161347b565b63ffffffff1660408401526137e26060830161328a565b6001600160a01b031660608401526137fc608083016132da565b6001600160401b0316608084015261381660a0830161328a565b6001600160a01b031660a084015261383060c083016132da565b6001600160401b031660c084015261384a60e0830161328a565b6001600160a01b031660e0840152613865610100830161328a565b6001600160a01b0316610100840152610120828101359084015261388d610140830183613721565b610160610140860152612ab561016086018284613762565b60a081525f6138b760a083018561378a565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f602082840312156139a1575f5ffd5b815161143c81612f8f565b63ffffffff81811683821601908111156116f5576116f5613661565b604081525f6139da604083018561378a565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f61143c6080830184613068565b80356001600160e01b03198116906004841015613a50576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f613aa1608083018486613762565b979650505050505050565b5f8251613abd81846020870161301b565b9190910192915050565b5f82613ae157634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613af6575f5ffd5b815161143c81613276565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b602081525f61143c602083018461303d56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212208f1ee3575833061eb334e638532a2bf98d9286a70bca4ab3eb1d88f5bc25656564736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670010000000000000000000000000000000001": { + "contractName": "Bridge", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670010000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000000001" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", + "balance": "0x033b258556117b43a1e00000" + }, + "0x0167001000000000000000000000000000000002": { + "contractName": "ERC20VaultImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" + }, + "code": "0x6080604052600436106101ba575f3560e01c806367090ccf116100f25780639aa8605c11610092578063e07baba611610062578063e07baba6146104e3578063e30c397814610519578063f09a401614610536578063f2fde38b14610555575f5ffd5b80639aa8605c1461045e578063a86f9d9e1461048e578063b84d9ffe146104ad578063d56ad7ac146104cd575f5ffd5b80637f07c947116100cd5780637f07c947146104065780638456cb59146104195780638abf60771461042d5780638da5cb5b14610441575f5ffd5b806367090ccf1461039e578063715018a6146103de57806379ba5097146103f2575f5ffd5b80633659cfe61161015d5780633f4ba83a116101385780633f4ba83a146103435780634f1ef2861461035757806352d1902d1461036a5780635c975abb1461037e575f5ffd5b80633659cfe6146102e65780633ab76e9f146103055780633eb6b8cf14610324575f5ffd5b806306fdde031161019857806306fdde031461024c5780630e7eeb791461026c5780630ecd8be91461029b5780633075db56146102d2575f5ffd5b80630178733a146101be57806301ffc9a7146101d3578063066fe7b414610207575b5f5ffd5b6101d16101cc366004613350565b610574565b005b3480156101de575f5ffd5b506101f26101ed366004613396565b610702565b60405190151581526020015b60405180910390f35b348015610212575f5ffd5b5061023e6102213660046133d1565b61013060209081525f928352604080842090915290825290205481565b6040519081526020016101fe565b348015610257575f5ffd5b506a195c98cc8c17dd985d5b1d60aa1b61023e565b348015610277575f5ffd5b506101f26102863660046133ff565b61012f6020525f908152604090205460ff1681565b3480156102a6575f5ffd5b506102ba6102b536600461341a565b610752565b6040516001600160a01b0390911681526020016101fe565b3480156102dd575f5ffd5b506101f2610e60565b3480156102f1575f5ffd5b506101d16103003660046133ff565b610e78565b348015610310575f5ffd5b506097546102ba906001600160a01b031681565b34801561032f575f5ffd5b506102ba61033e366004613482565b610f48565b34801561034e575f5ffd5b506101d1610f5e565b6101d16103653660046135ca565b610f72565b348015610375575f5ffd5b5061023e611027565b348015610389575f5ffd5b506101f260c954610100900460ff1660021490565b3480156103a9575f5ffd5b506102ba6103b83660046133d1565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b3480156103e9575f5ffd5b506101d16110d8565b3480156103fd575f5ffd5b506101d16110e9565b6101d1610414366004613616565b611160565b348015610424575f5ffd5b506101d16112b0565b348015610438575f5ffd5b506102ba6112c3565b34801561044c575f5ffd5b506033546001600160a01b03166102ba565b348015610469575f5ffd5b5061047d6104783660046133ff565b6112d1565b6040516101fe9594939291906136cf565b348015610499575f5ffd5b506102ba6104a8366004613728565b611426565b6104c06104bb36600461374b565b611432565b6040516101fe9190613764565b3480156104d8575f5ffd5b5061023e6276a70081565b3480156104ee575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b0390911681526020016101fe565b348015610524575f5ffd5b506065546001600160a01b03166102ba565b348015610541575f5ffd5b506101d1610550366004613854565b611875565b348015610560575f5ffd5b506101d161056f3660046133ff565b611984565b61058860c954610100900460ff1660021490565b156105a65760405163bae6e2a960e01b815260040160405180910390fd5b60026105b460c95460ff1690565b60ff16036105d55760405163dfc60d8560e01b815260040160405180910390fd5b6105df60026119f5565b6105e7611a0b565b505f6105f7610140840184613870565b6106059160049082906138b9565b81019061061291906138e0565b90505f5f8280602001905181019061062a919061398c565b9350505091505f61064e838760a001602081019061064891906133ff565b84611b01565b905061067861012087013561066960c0890160a08a016133ff565b6001600160a01b031690611ba9565b61068860c0870160a088016133ff565b6001600160a01b0316857f3dea0f5955b148debf6212261e03bd80eaf8534bee43780452d16637dcc22dd5856020015184866040516106e8939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a3505050506106fe60016119f5565b5050565b5f6001600160e01b0319821662bc399d60e11b148061073157506001600160e01b03198216637f07c94760e01b145b8061074c57506001600160e01b031982166301ffc9a760e01b145b92915050565b5f61075b611bb4565b600261076960c95460ff1690565b60ff160361078a5760405163dfc60d8560e01b815260040160405180910390fd5b61079460026119f5565b6001600160a01b03821615806107ca57506001600160a01b038281165f90815261012d6020526040902054600160401b90041615155b806107dd57506001600160a01b0382163b155b156107fb5760405163dc63f98760e01b815260040160405180910390fd5b5f61080c60408501602086016133ff565b6001600160a01b0316148061083557504661082a6020850185613a80565b6001600160401b0316145b1561085357604051638257f7f560e01b815260040160405180910390fd5b6001600160a01b0382165f90815261012f602052604090205460ff161561088d576040516375c42fc160e01b815260040160405180910390fd5b5f6101308161089f6020870187613a80565b6001600160401b031681526020019081526020015f205f8560200160208101906108c991906133ff565b6001600160a01b0316815260208101919091526040015f205490506108f16276a70082613aaf565b4210156109115760405163231d35fb60e11b815260040160405180910390fd5b61012e5f6109226020870187613a80565b6001600160401b031681526020019081526020015f205f85602001602081019061094c91906133ff565b6001600160a01b03908116825260208201929092526040015f20541691508115610cb2576001600160a01b038281165f90815261012d60209081526040808320815160a08101835281546001600160401b0381168252600160401b810490961693810193909352600160e01b90940460ff1690820152600183018054929391926060840191906109db90613ac2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0790613ac2565b8015610a525780601f10610a2957610100808354040283529160200191610a52565b820191905f5260205f20905b815481529060010190602001808311610a3557829003601f168201915b50505050508152602001600282018054610a6b90613ac2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9790613ac2565b8015610ae25780601f10610ab957610100808354040283529160200191610ae2565b820191905f5260205f20905b815481529060010190602001808311610ac557829003601f168201915b505050505081525050905080604051602001610afe9190613b59565b6040516020818303038152906040528051906020012085604051602001610b259190613bdf565b6040516020818303038152906040528051906020012014610b5957604051632f9d1d7b60e11b815260040160405180910390fd5b6001600160a01b0383165f90815261012d6020526040812080546001600160e81b031916815590610b8d60018301826132f8565b610b9a600283015f6132f8565b50506001600160a01b0383165f81815261012f60205260409020805460ff19166001179055610bd09063b8f2e0c560e01b611c0e565b8015610bf15750610bf16001600160a01b03851663b8f2e0c560e01b611c0e565b15610cb05760405163b8f2e0c560e01b81526001600160a01b0385811660048301525f602483015284169063b8f2e0c5906044015f604051808303815f87803b158015610c3c575f5ffd5b505af1158015610c4e573d5f5f3e3d5ffd5b505060405163b8f2e0c560e01b81526001600160a01b038681166004830152600160248301528716925063b8f2e0c591506044015f604051808303815f87803b158015610c99575f5ffd5b505af1158015610cab573d5f5f3e3d5ffd5b505050505b505b6001600160a01b0383165f90815261012d602052604090208490610cd68282613d82565b5083905061012e5f610ceb6020880188613a80565b6001600160401b031681526020019081526020015f205f866020016020810190610d1591906133ff565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550426101305f865f016020810190610d6e9190613a80565b6001600160401b031681526020019081526020015f205f866020016020810190610d9891906133ff565b6001600160a01b03166001600160a01b031681526020019081526020015f2081905550836020016020810190610dce91906133ff565b6001600160a01b0316610de46020860186613a80565b6001600160401b03167f031d68e1805917560c34a5f55a7dd91bef98f911190ed02cdbb53caedae6c39d8486610e1d60608a018a613870565b610e2a60808c018c613870565b610e3a60608e0160408f01613e40565b604051610e4d9796959493929190613e5b565b60405180910390a35061074c60016119f5565b5f6002610e6f60c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000000002163003610ec95760405162461bcd60e51b8152600401610ec090613eb2565b60405180910390fd5b7f00000000000000000000000001670010000000000000000000000000000000026001600160a01b0316610efb611cde565b6001600160a01b031614610f215760405162461bcd60e51b8152600401610ec090613efe565b610f2a81611cf9565b604080515f80825260208201909252610f4591839190611d01565b50565b5f610f54848484611e6b565b90505b9392505050565b610f66611ec7565b610f70335f611f57565b565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000000002163003610fba5760405162461bcd60e51b8152600401610ec090613eb2565b7f00000000000000000000000001670010000000000000000000000000000000026001600160a01b0316610fec611cde565b6001600160a01b0316146110125760405162461bcd60e51b8152600401610ec090613efe565b61101b82611cf9565b6106fe82826001611d01565b5f306001600160a01b037f000000000000000000000000016700100000000000000000000000000000000216146110c65760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ec0565b505f5160206149de5f395f51905f5290565b6110e0611bb4565b610f705f611f5f565b60655433906001600160a01b031681146111575760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ec0565b610f4581611f5f565b61117460c954610100900460ff1660021490565b156111925760405163bae6e2a960e01b815260040160405180910390fd5b60026111a060c95460ff1690565b60ff16036111c15760405163dfc60d8560e01b815260040160405180910390fd5b6111cb60026119f5565b5f8080806111db85870187613f55565b93509350935093505f6111ec611f78565b90506111f783612097565b5f611203868585611b01565b90506112186001600160a01b03851634611ba9565b836001600160a01b0316856001600160a01b0316835f01517f75a051823424fc80e92556c41cb0ad977ae1dcb09c68a9c38acab86b11a69f8985604001518a60200151868960405161129894939291906001600160401b039490941684526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a45050505050506106fe60016119f5565b6112b86120d3565b610f70336001611f57565b5f6112cc611cde565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b84046001600160a01b031693600160e01b900460ff1692909161131990613ac2565b80601f016020809104026020016040519081016040528092919081815260200182805461134590613ac2565b80156113905780601f1061136757610100808354040283529160200191611390565b820191905f5260205f20905b81548152906001019060200180831161137357829003601f168201915b5050505050908060020180546113a590613ac2565b80601f01602080910402602001604051908101604052809291908181526020018280546113d190613ac2565b801561141c5780601f106113f35761010080835404028352916020019161141c565b820191905f5260205f20905b8154815290600101906020018083116113ff57829003601f168201915b5050505050905085565b5f610f57468484611e6b565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201929092526101408101919091526114a060c954610100900460ff1660021490565b156114be5760405163bae6e2a960e01b815260040160405180910390fd5b60026114cc60c95460ff1690565b60ff16036114ed5760405163dfc60d8560e01b815260040160405180910390fd5b6114f760026119f5565b8160c001355f0361151b57604051634299323b60e11b815260040160405180910390fd5b5f61152c60a08401608085016133ff565b6001600160a01b031603611553576040516303f8a7d360e01b815260040160405180910390fd5b61012f5f61156760a08501608086016133ff565b6001600160a01b0316815260208101919091526040015f205460ff16156115a1576040516375c42fc160e01b815260040160405180910390fd5b6115b16080830160608401613a80565b6001600160401b03163410156115da57604051630178ce0b60e31b815260040160405180910390fd5b5f5f5f6115e685612144565b6040805161016081019091525f8082529396509194509250602081016116126080890160608a01613a80565b6001600160401b0316815260200161163060c0890160a08a0161405a565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061166190890189613a80565b6001600160401b031681526020015f6001600160a01b031688602001602081019061168c91906133ff565b6001600160a01b0316036116a057336116b0565b6116b06040890160208a016133ff565b6001600160a01b031681526020908101906116e7906116d1908a018a613a80565b6a195c98cc8c17dd985d5b1d60aa1b5b5f610f48565b6001600160a01b031681526020016117056080890160608a01613a80565b611718906001600160401b031634614075565b815260200185905290505f6117366562726964676560d01b82611426565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b81526004016117629190613764565b5f6040518083038185885af115801561177d573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526117a59190810190614093565b965090506117b960608801604089016133ff565b6001600160a01b03168660a001516001600160a01b0316827f256f5c87f6ab8d238ac244067613227eb6e2cd65299121135d4f778e8581e03d875f01518b5f0160208101906118089190613a80565b89602001518d608001602081019061182091906133ff565b604080516001600160401b0395861681529390941660208401526001600160a01b03918216838501521660608201526080810189905290519081900360a00190a4505050505061187060016119f5565b919050565b5f54610100900460ff161580801561189357505f54600160ff909116105b806118ac5750303b1580156118ac57505f5460ff166001145b61190f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ec0565b5f805460ff191660011790558015611930575f805461ff0019166101001790555b61193a83836125de565b801561197f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61198c611bb4565b606580546001600160a01b0383166001600160a01b031990911681179091556119bd6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611a3c816001611426565b6001600160a01b0316336001600160a01b031614611a6d57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611aa9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611acd91906141b3565b60208101519092506001600160a01b03163314611afd57604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b031603611b3457506020830151611b2f6001600160a01b0382168484612618565b611b9f565b611b3d8461267b565b6040516340c10f1960e01b81526001600160a01b03858116600483015260248201859052919250908216906340c10f19906044015f604051808303815f87803b158015611b88575f5ffd5b505af1158015611b9a573d5f5f3e3d5ffd5b505050505b610f5781836126bd565b6106fe82825a61274c565b6033546001600160a01b03163314610f705760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ec0565b6040516001600160e01b0319821660248201525f90819081906001600160a01b0386169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b17905251611c6a919061421b565b5f60405180830381855afa9150503d805f8114611ca2576040519150601f19603f3d011682016040523d82523d5f602084013e611ca7565b606091505b5091509150818015611cba575080516020145b15611cd65780806020019051810190611cd39190614236565b92505b505092915050565b5f5160206149de5f395f51905f52546001600160a01b031690565b610f45611bb4565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611d345761197f8361278f565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611d8e575060408051601f3d908101601f19168201909252611d8b91810190614251565b60015b611df15760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ec0565b5f5160206149de5f395f51905f528114611e5f5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ec0565b5061197f83838361282a565b5f611e768484612854565b90508180611e8c57506001600160a01b03811615155b84849091611ebe57604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610ec0565b50509392505050565b611edb60c954610100900460ff1660021490565b611ef85760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6106fe611bb4565b606580546001600160a01b0319169055610f45816128fe565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611fa9816001611426565b6001600160a01b0316336001600160a01b031614611fda57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612016573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061203a91906141b3565b91505f61205a83604001516116e16a195c98cc8c17dd985d5b1d60aa1b90565b9050806001600160a01b031683602001516001600160a01b03161461209257604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b03811615806120b557506001600160a01b03811630145b15610f4557604051635b50f3f960e01b815260040160405180910390fd5b6120e760c954610100900460ff1660021490565b156121055760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611f4d565b6040805160a0810182525f8082526020820181905291810191909152606081810181905260808201819052905f8061012d8161218660a08801608089016133ff565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156123bc576040805160a08101825282546001600160401b0381168252600160401b81046001600160a01b03166020830152600160e01b900460ff16918101919091526001820180548391606084019161220690613ac2565b80601f016020809104026020016040519081016040528092919081815260200182805461223290613ac2565b801561227d5780601f106122545761010080835404028352916020019161227d565b820191905f5260205f20905b81548152906001019060200180831161226057829003601f168201915b5050505050815260200160028201805461229690613ac2565b80601f01602080910402602001604051908101604052809291908181526020018280546122c290613ac2565b801561230d5780601f106122e45761010080835404028352916020019161230d565b820191905f5260205f20905b8154815290600101906020018083116122f057829003601f168201915b505050505081525050925061234633308760c0013588608001602081019061233591906133ff565b6001600160a01b031692919061294f565b61235660a08601608087016133ff565b604051630852cd8d60e31b815260c087013560048201526001600160a01b0391909116906342966c68906024015f604051808303815f87803b15801561239a575f5ffd5b505af11580156123ac573d5f5f3e3d5ffd5b505050508460c00135915061255e565b6040518060a00160405280466001600160401b031681526020018660800160208101906123e991906133ff565b6001600160a01b0316815260200161240f61240a60a0890160808a016133ff565b612987565b60ff16815260200161242f61242a60a0890160808a016133ff565b612a3b565b815260200161244c61244760a0890160808a016133ff565b612ae5565b905292505f61246160a08701608088016133ff565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156124a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124cc9190614251565b90506124e76001600160a01b038316333060c08b013561294f565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa15801561252b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061254f9190614251565b6125599190614075565b935050505b30637f07c947843361257660608a0160408b016133ff565b8660405160200161258a9493929190614268565b60408051601f19818403018152908290526125a79160240161429d565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509350509193909250565b806001600160a01b0381166126065760405163538ba4f960e01b815260040160405180910390fd5b61260f83612b2b565b61197f82612b89565b6040516001600160a01b03831660248201526044810182905261197f90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612bf9565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b03908116855292529091205416806118705761074c82612ccc565b5f6126d96c38bab7ba30afb6b0b730b3b2b960991b6001611426565b90506001600160a01b0381161561197f576040516315c638fb60e31b81526001600160a01b0384811660048301526024820184905282169063ae31c7d8906044015f604051808303815f87803b158015612731575f5ffd5b505af1158015612743573d5f5f3e3d5ffd5b50505050505050565b815f0361275857505050565b61277283838360405180602001604052805f815250612ece565b61197f57604051634c67134d60e11b815260040160405180910390fd5b6001600160a01b0381163b6127fc5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ec0565b5f5160206149de5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b61283383612f0b565b5f8251118061283f5750805b1561197f5761284e8383612f4a565b50505050565b6097545f906001600160a01b03168061288057604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa1580156128d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f691906142af565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040516001600160a01b038085166024830152831660448201526064810182905261284e9085906323b872dd60e01b90608401612644565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f91829182916001600160a01b038616916129cc919061421b565b5f60405180830381855afa9150503d805f8114612a04576040519150601f19603f3d011682016040523d82523d5f602084013e612a09565b606091505b5091509150818015612a1c575080516020145b612a275760126128f6565b808060200190518101906128f691906142ca565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b03861691612a81919061421b565b5f60405180830381855afa9150503d805f8114612ab9576040519150601f19603f3d011682016040523d82523d5f602084013e612abe565b606091505b509150915081612adc5760405180602001604052805f8152506128f6565b6128f681612f6f565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b03861691612a81919061421b565b5f54610100900460ff16612b515760405162461bcd60e51b8152600401610ec0906142e5565b612b596130dc565b612b776001600160a01b03821615612b715781611f5f565b33611f5f565b5060c9805461ff001916610100179055565b5f54610100900460ff16612baf5760405162461bcd60e51b8152600401610ec0906142e5565b6001600160401b03461115612bd75760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f612c4d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131029092919063ffffffff16565b905080515f1480612c6d575080806020019051810190612c6d9190614236565b61197f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ec0565b5f5f612ce06033546001600160a01b031690565b60975460208501518551604080880151606089015160808a01519251612d1697966001600160a01b031695949390602401614330565b60408051601f198184030181529190526020810180516001600160e01b031663bb86ef9360e01b1790529050612d5c6c0627269646765645f657263323609c1b5f611426565b81604051612d699061332f565b612d7492919061439b565b604051809103905ff080158015612d8d573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d602090815260409182902087518154928901519389015160ff16600160e01b0260ff60e01b1994909516600160401b026001600160e01b03199093166001600160401b03909116179190911791909116919091178155606085015191935084916001820190612e0f90826143be565b5060808201516002820190612e2490826143be565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b0319168885169081179091559151885160608a015160808b0151848c01519451959850929095169516937fb6b427556e8cb0ebf9175da4bc48c64c4f56e44cfaf8c3ab5ebf8e2ea130907993612ec09391929190614478565b60405180910390a450919050565b5f6001600160a01b038516612ef657604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b612f148161278f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610f5783836040518060600160405280602781526020016149fe60279139613110565b60606040825110612f8e578180602001905181019061074c91906144b0565b81516020036130c9575f5b60208160ff16108015612fce5750828160ff1681518110612fbc57612fbc6144e1565b01602001516001600160f81b03191615155b15612fe55780612fdd816144f5565b915050612f99565b5f8160ff166001600160401b03811115613001576130016134c1565b6040519080825280601f01601f19166020018201604052801561302b576020820181803683370190505b5090505f91505b60208260ff161080156130675750838260ff1681518110613055576130556144e1565b01602001516001600160f81b03191615155b15610f5757838260ff1681518110613081576130816144e1565b602001015160f81c60f81b818360ff16815181106130a1576130a16144e1565b60200101906001600160f81b03191690815f1a905350816130c1816144f5565b925050613032565b505060408051602081019091525f815290565b5f54610100900460ff16610f705760405162461bcd60e51b8152600401610ec0906142e5565b6060610f5484845f85613184565b60605f5f856001600160a01b03168560405161312c919061421b565b5f60405180830381855af49150503d805f8114613164576040519150601f19603f3d011682016040523d82523d5f602084013e613169565b606091505b509150915061317a8683838761325b565b9695505050505050565b6060824710156131e55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ec0565b5f5f866001600160a01b03168587604051613200919061421b565b5f6040518083038185875af1925050503d805f811461323a576040519150601f19603f3d011682016040523d82523d5f602084013e61323f565b606091505b50915091506132508783838761325b565b979650505050505050565b606083156132c95782515f036132c2576001600160a01b0385163b6132c25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ec0565b50816128f6565b6128f683838151156132de5781518083602001fd5b8060405162461bcd60e51b8152600401610ec0919061429d565b50805461330490613ac2565b5f825580601f10613313575050565b601f0160209004905f5260205f2090810190610f45919061333c565b6104ca8061451483390190565b5b80821115611afd575f815560010161333d565b5f5f60408385031215613361575f5ffd5b82356001600160401b03811115613376575f5ffd5b83016101608186031215613388575f5ffd5b946020939093013593505050565b5f602082840312156133a6575f5ffd5b81356001600160e01b031981168114610f57575f5ffd5b6001600160a01b0381168114610f45575f5ffd5b5f5f604083850312156133e2575f5ffd5b8235915060208301356133f4816133bd565b809150509250929050565b5f6020828403121561340f575f5ffd5b8135610f57816133bd565b5f5f6040838503121561342b575f5ffd5b82356001600160401b03811115613440575f5ffd5b830160a08186031215613451575f5ffd5b915060208301356133f4816133bd565b6001600160401b0381168114610f45575f5ffd5b8015158114610f45575f5ffd5b5f5f5f60608486031215613494575f5ffd5b833561349f81613461565b92506020840135915060408401356134b681613475565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156134f7576134f76134c1565b60405290565b60405161016081016001600160401b03811182821017156134f7576134f76134c1565b604051601f8201601f191681016001600160401b0381118282101715613548576135486134c1565b604052919050565b5f6001600160401b03821115613568576135686134c1565b50601f01601f191660200190565b5f82601f830112613585575f5ffd5b8135602083015f61359d61359884613550565b613520565b90508281528583830111156135b0575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f604083850312156135db575f5ffd5b82356135e6816133bd565b915060208301356001600160401b03811115613600575f5ffd5b61360c85828601613576565b9150509250929050565b5f5f60208385031215613627575f5ffd5b82356001600160401b0381111561363c575f5ffd5b8301601f8101851361364c575f5ffd5b80356001600160401b03811115613661575f5ffd5b856020828401011115613672575f5ffd5b6020919091019590945092505050565b5f5b8381101561369c578181015183820152602001613684565b50505f910152565b5f81518084526136bb816020860160208601613682565b601f01601f19169290920160200192915050565b6001600160401b03861681526001600160a01b038516602082015260ff8416604082015260a0606082018190525f9061370a908301856136a4565b828103608084015261371c81856136a4565b98975050505050505050565b5f5f60408385031215613739575f5ffd5b8235915060208301356133f481613475565b5f60e082840312801561375c575f5ffd5b509092915050565b6020815261377e6020820183516001600160401b03169052565b5f602083015161379960408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526128f66101808401826136a4565b5f5f60408385031215613865575f5ffd5b8235613451816133bd565b5f5f8335601e19843603018112613885575f5ffd5b8301803591506001600160401b0382111561389e575f5ffd5b6020019150368190038213156138b2575f5ffd5b9250929050565b5f5f858511156138c7575f5ffd5b838611156138d3575f5ffd5b5050820193919092039150565b5f602082840312156138f0575f5ffd5b81356001600160401b03811115613905575f5ffd5b6128f684828501613576565b805161187081613461565b8051611870816133bd565b60ff81168114610f45575f5ffd5b805161187081613927565b5f82601f83011261394f575f5ffd5b8151602083015f61396261359884613550565b9050828152858383011115613975575f5ffd5b613983836020830184613682565b95945050505050565b5f5f5f5f6080858703121561399f575f5ffd5b84516001600160401b038111156139b4575f5ffd5b850160a081880312156139c5575f5ffd5b6139cd6134d5565b81516139d881613461565b815260208201516139e8816133bd565b60208201526139f960408301613935565b604082015260608201516001600160401b03811115613a16575f5ffd5b613a2289828501613940565b60608301525060808201516001600160401b03811115613a40575f5ffd5b613a4c89828501613940565b6080830152509450613a6290506020860161391c565b9250613a706040860161391c565b6060959095015193969295505050565b5f60208284031215613a90575f5ffd5b8135610f5781613461565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561074c5761074c613a9b565b600181811c90821680613ad657607f821691505b602082108103613af457634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160401b03815116825260018060a01b03602082015116602083015260ff60408201511660408301525f606082015160a06060850152613b4060a08501826136a4565b905060808301518482036080860152611cd382826136a4565b602081525f610f576020830184613afa565b803561187081613927565b5f5f8335601e19843603018112613b8b575f5ffd5b83016020810192503590506001600160401b03811115613ba9575f5ffd5b8036038213156138b2575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f8235613bef81613461565b6001600160401b0381166020840152506020830135613c0d816133bd565b6001600160a01b0316604083810191909152830135613c2b81613927565b60ff8116606084015250613c426060840184613b76565b60a06080850152613c5760c085018284613bb7565b915050613c676080850185613b76565b848303601f190160a086015261317a838284613bb7565b601f82111561197f57805f5260205f20601f840160051c81016020851015613ca35750805b601f840160051c820191505b81811015613cc2575f8155600101613caf565b5050505050565b6001600160401b03831115613ce057613ce06134c1565b613cf483613cee8354613ac2565b83613c7e565b5f601f841160018114613d25575f8515613d0e5750838201355b5f19600387901b1c1916600186901b178355613cc2565b5f83815260208120601f198716915b82811015613d545786850135825560209485019460019092019101613d34565b5086821015613d70575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135613d8d81613461565b6001600160401b03811690508154816001600160401b031982161783556020840135613db8816133bd565b6001600160e01b031991909116909117604091821b68010000000000000000600160e01b03161782555f90830135613def81613927565b825460ff60e01b191660e09190911b60ff60e01b1617825550613e156060830183613870565b613e23818360018601613cc9565b5050613e326080830183613870565b61284e818360028601613cc9565b5f60208284031215613e50575f5ffd5b8135610f5781613927565b6001600160a01b0388811682528716602082015260a0604082018190525f90613e879083018789613bb7565b8281036060840152613e9a818688613bb7565b91505060ff8316608083015298975050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b8035611870816133bd565b5f5f5f5f60808587031215613f68575f5ffd5b84356001600160401b03811115613f7d575f5ffd5b850160a08188031215613f8e575f5ffd5b613f966134d5565b8135613fa181613461565b81526020820135613fb1816133bd565b6020820152613fc260408301613b6b565b604082015260608201356001600160401b03811115613fdf575f5ffd5b613feb89828501613576565b60608301525060808201356001600160401b03811115614009575f5ffd5b61401589828501613576565b608083015250945061402b905060208601613f4a565b925061403960408601613f4a565b9396929550929360600135925050565b63ffffffff81168114610f45575f5ffd5b5f6020828403121561406a575f5ffd5b8135610f5781614049565b8181038181111561074c5761074c613a9b565b805161187081614049565b5f5f604083850312156140a4575f5ffd5b825160208401519092506001600160401b038111156140c1575f5ffd5b830161016081860312156140d3575f5ffd5b6140db6134fd565b6140e482613911565b81526140f260208301613911565b602082015261410360408301614088565b60408201526141146060830161391c565b606082015261412560808301613911565b608082015261413660a0830161391c565b60a082015261414760c08301613911565b60c082015261415860e0830161391c565b60e082015261416a610100830161391c565b61010082015261012082810151908201526101408201516001600160401b03811115614194575f5ffd5b6141a087828501613940565b6101408301525080925050509250929050565b5f60608284031280156141c4575f5ffd5b50604051606081016001600160401b03811182821017156141e7576141e76134c1565b6040528251815260208301516141fc816133bd565b6020820152604083015161420f81613461565b60408201529392505050565b5f825161422c818460208701613682565b9190910192915050565b5f60208284031215614246575f5ffd5b8151610f5781613475565b5f60208284031215614261575f5ffd5b5051919050565b608081525f61427a6080830187613afa565b6001600160a01b0395861660208401529390941660408201526060015292915050565b602081525f610f5760208301846136a4565b5f602082840312156142bf575f5ffd5b8151610f57816133bd565b5f602082840312156142da575f5ffd5b8151610f5781613927565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0388811682528781166020830152861660408201526001600160401b038516606082015260ff8416608082015260e060a082018190525f9061437b908301856136a4565b82810360c084015261438d81856136a4565b9a9950505050505050505050565b6001600160a01b03831681526040602082018190525f90610f54908301846136a4565b81516001600160401b038111156143d7576143d76134c1565b6143eb816143e58454613ac2565b84613c7e565b6020601f82116001811461441d575f83156144065750848201515b5f19600385901b1c1916600184901b178455613cc2565b5f84815260208120601f198516915b8281101561444c578785015182556020948501946001909201910161442c565b508482101561446957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f61448a60608301866136a4565b828103602084015261449c81866136a4565b91505060ff83166040830152949350505050565b5f602082840312156144c0575f5ffd5b81516001600160401b038111156144d5575f5ffd5b6128f684828501613940565b634e487b7160e01b5f52603260045260245ffd5b5f60ff821660ff810361450a5761450a613a9b565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122077f7a6275dc65932675d7aceb6458f833179d28acd489d2ddcb502a26308325864736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670010000000000000000000000000000000002": { + "contractName": "ERC20Vault", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000201", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670010000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000000002" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167001000000000000000000000000000000003": { + "contractName": "ERC721VaultImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" + }, + "code": "0x60806040526004361061017b575f3560e01c806367090ccf116100cd5780638da5cb5b11610087578063e07baba611610062578063e07baba614610449578063e30c39781461047f578063f09a40161461049c578063f2fde38b146104bb575f5ffd5b80638da5cb5b146103de5780639aa8605c146103fb578063a86f9d9e1461042a575f5ffd5b806367090ccf1461033b578063715018a61461037b57806379ba50971461038f5780637f07c947146103a35780638456cb59146103b65780638abf6077146103ca575f5ffd5b80633659cfe6116101385780633f4ba83a116101135780633f4ba83a146102e05780634f1ef286146102f457806352d1902d146103075780635c975abb1461031b575f5ffd5b80633659cfe61461026b5780633ab76e9f1461028a5780633eb6b8cf146102c1575f5ffd5b80630178733a1461017f57806301ffc9a71461019457806306fdde03146101c8578063150b7a02146101f35780631f59a830146102375780633075db5614610257575b5f5ffd5b61019261018d366004612930565b6104da565b005b34801561019f575f5ffd5b506101b36101ae366004612976565b61068d565b60405190151581526020015b60405180910390f35b3480156101d3575f5ffd5b506b195c98cdcc8c57dd985d5b1d60a21b5b6040519081526020016101bf565b3480156101fe575f5ffd5b5061021e61020d366004612a00565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101bf565b61024a610245366004612a6d565b6106dd565b6040516101bf9190612af1565b348015610262575f5ffd5b506101b3610b63565b348015610276575f5ffd5b50610192610285366004612be1565b610b7b565b348015610295575f5ffd5b506097546102a9906001600160a01b031681565b6040516001600160a01b0390911681526020016101bf565b3480156102cc575f5ffd5b506102a96102db366004612c28565b610c4b565b3480156102eb575f5ffd5b50610192610c61565b610192610302366004612d93565b610c75565b348015610312575f5ffd5b506101e5610d2a565b348015610326575f5ffd5b506101b360c954610100900460ff1660021490565b348015610346575f5ffd5b506102a9610355366004612ddf565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b348015610386575f5ffd5b50610192610ddb565b34801561039a575f5ffd5b50610192610dec565b6101926103b1366004612e0d565b610e63565b3480156103c1575f5ffd5b50610192610fcc565b3480156103d5575f5ffd5b506102a9610fdf565b3480156103e9575f5ffd5b506033546001600160a01b03166102a9565b348015610406575f5ffd5b5061041a610415366004612be1565b610fed565b6040516101bf9493929190612e4b565b348015610435575f5ffd5b506102a9610444366004612e9a565b611138565b348015610454575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b0390911681526020016101bf565b34801561048a575f5ffd5b506065546001600160a01b03166102a9565b3480156104a7575f5ffd5b506101926104b6366004612ebd565b611144565b3480156104c6575f5ffd5b506101926104d5366004612be1565b611253565b6104ee60c954610100900460ff1660021490565b1561050c5760405163bae6e2a960e01b815260040160405180910390fd5b600261051a60c95460ff1690565b60ff160361053b5760405163dfc60d8560e01b815260040160405180910390fd5b61054560026112c4565b61054d6112da565b505f61055d610140840184612ee9565b61056b916004908290612f2b565b8101906105789190612f52565b90505f5f82806020019051810190610590919061306c565b9350505091505f6105b4838760a00160208101906105ae9190612be1565b846113d0565b90506105de6101208701356105cf60c0890160a08a01612be1565b6001600160a01b031690611547565b6105ee60c0870160a08801612be1565b6001600160a01b0316857fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8560200151848687516001600160401b0381111561063957610639612c67565b604051908082528060200260200182016040528015610662578160200160208202803683370190505b5060405161067394939291906131ab565b60405180910390a35050505061068960016112c4565b5050565b5f6001600160e01b0319821662bc399d60e11b14806106bc57506001600160e01b03198216637f07c94760e01b145b806106d757506001600160e01b031982166301ffc9a760e01b145b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261074b60c954610100900460ff1660021490565b156107695760405163bae6e2a960e01b815260040160405180910390fd5b6107728261325f565b8060e00151518160c00151511461079c5760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107c7576040516303f8a7d360e01b815260040160405180910390fd5b60026107d560c95460ff1690565b60ff16036107f65760405163dfc60d8560e01b815260040160405180910390fd5b61080060026112c4565b6108106080840160608501613332565b6001600160401b031634101561083957604051630178ce0b60e31b815260040160405180910390fd5b5f5b61084860c085018561334d565b905081101561089c5761085e60e085018561334d565b8281811061086e5761086e613392565b905060200201355f1461089457604051634299323b60e11b815260040160405180910390fd5b60010161083b565b506108c76380ac58cd60e01b6108b860a0860160808701612be1565b6001600160a01b031690611552565b6108e457604051633ee915f560e11b815260040160405180910390fd5b5f5f6108ef85611622565b6040805161016081019091525f808252929450909250602081016109196080890160608a01613332565b6001600160401b0316815260200161093760c0890160a08a016133a6565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061096890890189613332565b6001600160401b031681526020015f6001600160a01b03168860200160208101906109939190612be1565b6001600160a01b0316036109a757336109b7565b6109b76040890160208a01612be1565b6001600160a01b031681526020908101906109ef906109d8908a018a613332565b6b195c98cdcc8c57dd985d5b1d60a21b5b5f610c4b565b6001600160a01b03168152602001610a0d6080890160608a01613332565b610a20906001600160401b0316346133d5565b815260200184905290505f610a3e6562726964676560d01b82611138565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a6a9190612af1565b5f6040518083038185885af1158015610a85573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610aad91908101906133f3565b96509050610ac16060880160408901612be1565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610b179190612be1565b610b2460c08f018f61334d565b8f8060e00190610b34919061334d565b604051610b479796959493929190613543565b60405180910390a450505050610b5d60016112c4565b50919050565b5f6002610b7260c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000000003163003610bcc5760405162461bcd60e51b8152600401610bc39061359f565b60405180910390fd5b7f00000000000000000000000001670010000000000000000000000000000000036001600160a01b0316610bfe611b04565b6001600160a01b031614610c245760405162461bcd60e51b8152600401610bc3906135eb565b610c2d81611b1f565b604080515f80825260208201909252610c4891839190611b27565b50565b5f610c57848484611c91565b90505b9392505050565b610c69611ced565b610c73335f611d7d565b565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000000003163003610cbd5760405162461bcd60e51b8152600401610bc39061359f565b7f00000000000000000000000001670010000000000000000000000000000000036001600160a01b0316610cef611b04565b6001600160a01b031614610d155760405162461bcd60e51b8152600401610bc3906135eb565b610d1e82611b1f565b61068982826001611b27565b5f306001600160a01b037f00000000000000000000000001670010000000000000000000000000000000031614610dc95760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610bc3565b505f51602061403f5f395f51905f5290565b610de3611d81565b610c735f611ddb565b60655433906001600160a01b03168114610e5a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610bc3565b610c4881611ddb565b610e7760c954610100900460ff1660021490565b15610e955760405163bae6e2a960e01b815260040160405180910390fd5b6002610ea360c95460ff1690565b60ff1603610ec45760405163dfc60d8560e01b815260040160405180910390fd5b610ece60026112c4565b5f808080610ede85870187613637565b93509350935093505f610eef611df4565b9050610efa83611f14565b5f610f068685856113d0565b9050610f1b6001600160a01b03851634611547565b836001600160a01b0316856001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518a6020015186898a516001600160401b03811115610f7957610f79612c67565b604051908082528060200260200182016040528015610fa2578160200160208202803683370190505b50604051610fb4959493929190613730565b60405180910390a450505050505061068960016112c4565b610fd4611f50565b610c73336001611d7d565b5f610fe8611b04565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b031692919061102b90613788565b80601f016020809104026020016040519081016040528092919081815260200182805461105790613788565b80156110a25780601f10611079576101008083540402835291602001916110a2565b820191905f5260205f20905b81548152906001019060200180831161108557829003601f168201915b5050505050908060020180546110b790613788565b80601f01602080910402602001604051908101604052809291908181526020018280546110e390613788565b801561112e5780601f106111055761010080835404028352916020019161112e565b820191905f5260205f20905b81548152906001019060200180831161111157829003601f168201915b5050505050905084565b5f610c5a468484611c91565b5f54610100900460ff161580801561116257505f54600160ff909116105b8061117b5750303b15801561117b57505f5460ff166001145b6111de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610bc3565b5f805460ff1916600117905580156111ff575f805461ff0019166101001790555b6112098383611fc1565b801561124e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61125b611d81565b606580546001600160a01b0383166001600160a01b0319909116811790915561128c6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b61130b816001611138565b6001600160a01b0316336001600160a01b03161461133c57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611378573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139c91906137ba565b60208101519092506001600160a01b031633146113cc57604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b031603611496575060208301515f5b825181101561149057816001600160a01b03166342842e0e308686858151811061141857611418613392565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015f604051808303815f87803b15801561146f575f5ffd5b505af1158015611481573d5f5f3e3d5ffd5b505050508060010190506113ec565b50610c5a565b61149f84611ffb565b90505f5b825181101561153f57816001600160a01b03166340c10f19858584815181106114ce576114ce613392565b60200260200101516040518363ffffffff1660e01b81526004016115079291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b15801561151e575f5ffd5b505af1158015611530573d5f5f3e3d5ffd5b505050508060010190506114a3565b509392505050565b61068982825a612042565b6040516001600160e01b0319821660248201525f90819081906001600160a01b0386169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516115ae9190613822565b5f60405180830381855afa9150503d805f81146115e6576040519150601f19603f3d011682016040523d82523d5f602084013e6115eb565b606091505b50915091508180156115fe575080516020145b1561161a5780806020019051810190611617919061383d565b92505b505092915050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d8161165860a0870160808801612be1565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b90041615611939576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b031660208201526001830180549192849290840191906116c990613788565b80601f01602080910402602001604051908101604052809291908181526020018280546116f590613788565b80156117405780601f1061171757610100808354040283529160200191611740565b820191905f5260205f20905b81548152906001019060200180831161172357829003601f168201915b5050505050815260200160028201805461175990613788565b80601f016020809104026020016040519081016040528092919081815260200182805461178590613788565b80156117d05780601f106117a7576101008083540402835291602001916117d0565b820191905f5260205f20905b8154815290600101906020018083116117b357829003601f168201915b50505050508152505091505f5b6117ea60c086018661334d565b90508110156119335761180360a0860160808701612be1565b6001600160a01b03166342842e0e333061182060c08a018a61334d565b8681811061183057611830613392565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611884575f5ffd5b505af1158015611896573d5f5f3e3d5ffd5b506118ab9250505060a0860160808701612be1565b6001600160a01b03166342966c686118c660c088018861334d565b848181106118d6576118d6613392565b905060200201356040518263ffffffff1660e01b81526004016118fb91815260200190565b5f604051808303815f87803b158015611912575f5ffd5b505af1158015611924573d5f5f3e3d5ffd5b505050508060010190506117dd565b50611a79565b6040518060800160405280466001600160401b031681526020018560800160208101906119669190612be1565b6001600160a01b0316815260200161198c61198760a0880160808901612be1565b612085565b81526020016119a96119a460a0880160808901612be1565b612137565b905291505f5b6119bc60c086018661334d565b9050811015611a77576119d560a0860160808701612be1565b6001600160a01b03166342842e0e33306119f260c08a018a61334d565b86818110611a0257611a02613392565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611a56575f5ffd5b505af1158015611a68573d5f5f3e3d5ffd5b505050508060010190506119af565b505b5030637f07c9478233611a926060880160408901612be1565b611a9f60c089018961334d565b604051602001611ab3959493929190613858565b60408051601f1981840301815290829052611ad0916024016138e9565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f51602061403f5f395f51905f52546001600160a01b031690565b610c48611d81565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611b5a5761124e8361217d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611bb4575060408051601f3d908101601f19168201909252611bb1918101906138fb565b60015b611c175760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610bc3565b5f51602061403f5f395f51905f528114611c855760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610bc3565b5061124e838383612218565b5f611c9c8484612242565b90508180611cb257506001600160a01b03811615155b84849091611ce457604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610bc3565b50509392505050565b611d0160c954610100900460ff1660021490565b611d1e5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6106895b6033546001600160a01b03163314610c735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bc3565b606580546001600160a01b0319169055610c48816122e4565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611e25816001611138565b6001600160a01b0316336001600160a01b031614611e5657604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e92573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb691906137ba565b91505f611ed783604001516109e96b195c98cdcc8c57dd985d5b1d60a21b90565b9050806001600160a01b031683602001516001600160a01b031614611f0f57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611f3257506001600160a01b03811630145b15610c4857604051635b50f3f960e01b815260040160405180910390fd5b611f6460c954610100900460ff1660021490565b15611f825760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611d73565b806001600160a01b038116611fe95760405163538ba4f960e01b815260040160405180910390fd5b611ff283612335565b61124e82612393565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b039081168552925290912054168061203d576106d782612403565b919050565b815f0361204e57505050565b61206883838360405180602001604052805f8152506125de565b61124e57604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b038616916120cb9190613822565b5f60405180830381855afa9150503d805f8114612103576040519150601f19603f3d011682016040523d82523d5f602084013e612108565b606091505b5091509150816121265760405180602001604052805f81525061212f565b61212f8161261b565b949350505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b038616916120cb9190613822565b6001600160a01b0381163b6121ea5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610bc3565b5f51602061403f5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b61222183612788565b5f8251118061222d5750805b1561124e5761223c83836127c7565b50505050565b6097545f906001600160a01b03168061226e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa1580156122c0573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061212f9190613912565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661235b5760405162461bcd60e51b8152600401610bc39061392d565b6123636127ec565b6123816001600160a01b0382161561237b5781611ddb565b33611ddb565b5060c9805461ff001916610100179055565b5f54610100900460ff166123b95760405162461bcd60e51b8152600401610bc39061392d565b6001600160401b034611156123e15760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6124176033546001600160a01b031690565b609754602085015185516040808801516060890151915161244896956001600160a01b031694939290602401613978565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b179052905061248f6d627269646765645f65726337323160901b5f611138565b8160405161249c90612923565b6124a79291906139d9565b604051809103905ff0801580156124c0573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906125249082613a47565b50606082015160028201906125399082613a47565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b926125d09290613b01565b60405180910390a450919050565b5f6001600160a01b03851661260657604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b6060604082511061263a57818060200190518101906106d79190613b25565b8151602003612775575f5b60208160ff1610801561267a5750828160ff168151811061266857612668613392565b01602001516001600160f81b03191615155b15612691578061268981613b56565b915050612645565b5f8160ff166001600160401b038111156126ad576126ad612c67565b6040519080825280601f01601f1916602001820160405280156126d7576020820181803683370190505b5090505f91505b60208260ff161080156127135750838260ff168151811061270157612701613392565b01602001516001600160f81b03191615155b15610c5a57838260ff168151811061272d5761272d613392565b602001015160f81c60f81b818360ff168151811061274d5761274d613392565b60200101906001600160f81b03191690815f1a9053508161276d81613b56565b9250506126de565b505060408051602081019091525f815290565b6127918161217d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c5a838360405180606001604052806027815260200161405f60279139612812565b5f54610100900460ff16610c735760405162461bcd60e51b8152600401610bc39061392d565b60605f5f856001600160a01b03168560405161282e9190613822565b5f60405180830381855af49150503d805f8114612866576040519150601f19603f3d011682016040523d82523d5f602084013e61286b565b606091505b509150915061287c86838387612886565b9695505050505050565b606083156128f45782515f036128ed576001600160a01b0385163b6128ed5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bc3565b508161212f565b61212f83838151156129095781518083602001fd5b8060405162461bcd60e51b8152600401610bc391906138e9565b6104ca80613b7583390190565b5f5f60408385031215612941575f5ffd5b82356001600160401b03811115612956575f5ffd5b83016101608186031215612968575f5ffd5b946020939093013593505050565b5f60208284031215612986575f5ffd5b81356001600160e01b031981168114610c5a575f5ffd5b6001600160a01b0381168114610c48575f5ffd5b803561203d8161299d565b5f5f83601f8401126129cc575f5ffd5b5081356001600160401b038111156129e2575f5ffd5b6020830191508360208285010111156129f9575f5ffd5b9250929050565b5f5f5f5f5f60808688031215612a14575f5ffd5b8535612a1f8161299d565b94506020860135612a2f8161299d565b93506040860135925060608601356001600160401b03811115612a50575f5ffd5b612a5c888289016129bc565b969995985093965092949392505050565b5f60208284031215612a7d575f5ffd5b81356001600160401b03811115612a92575f5ffd5b82016101008185031215610c5a575f5ffd5b5f5b83811015612abe578181015183820152602001612aa6565b50505f910152565b5f8151808452612add816020860160208601612aa4565b601f01601f19169290920160200192915050565b60208152612b0b6020820183516001600160401b03169052565b5f6020830151612b2660408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b038116610120840152506101208301516101408301526101408301516101608084015261212f610180840182612ac6565b5f60208284031215612bf1575f5ffd5b8135610c5a8161299d565b6001600160401b0381168114610c48575f5ffd5b803561203d81612bfc565b8015158114610c48575f5ffd5b5f5f5f60608486031215612c3a575f5ffd5b8335612c4581612bfc565b9250602084013591506040840135612c5c81612c1b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612c9d57612c9d612c67565b60405290565b60405161010081016001600160401b0381118282101715612c9d57612c9d612c67565b60405161016081016001600160401b0381118282101715612c9d57612c9d612c67565b604051601f8201601f191681016001600160401b0381118282101715612d1157612d11612c67565b604052919050565b5f6001600160401b03821115612d3157612d31612c67565b50601f01601f191660200190565b5f82601f830112612d4e575f5ffd5b8135602083015f612d66612d6184612d19565b612ce9565b9050828152858383011115612d79575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612da4575f5ffd5b8235612daf8161299d565b915060208301356001600160401b03811115612dc9575f5ffd5b612dd585828601612d3f565b9150509250929050565b5f5f60408385031215612df0575f5ffd5b823591506020830135612e028161299d565b809150509250929050565b5f5f60208385031215612e1e575f5ffd5b82356001600160401b03811115612e33575f5ffd5b612e3f858286016129bc565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612e7d90830185612ac6565b8281036060840152612e8f8185612ac6565b979650505050505050565b5f5f60408385031215612eab575f5ffd5b823591506020830135612e0281612c1b565b5f5f60408385031215612ece575f5ffd5b8235612ed98161299d565b91506020830135612e028161299d565b5f5f8335601e19843603018112612efe575f5ffd5b8301803591506001600160401b03821115612f17575f5ffd5b6020019150368190038213156129f9575f5ffd5b5f5f85851115612f39575f5ffd5b83861115612f45575f5ffd5b5050820193919092039150565b5f60208284031215612f62575f5ffd5b81356001600160401b03811115612f77575f5ffd5b61212f84828501612d3f565b805161203d81612bfc565b805161203d8161299d565b5f82601f830112612fa8575f5ffd5b8151602083015f612fbb612d6184612d19565b9050828152858383011115612fce575f5ffd5b612fdc836020830184612aa4565b95945050505050565b5f6001600160401b03821115612ffd57612ffd612c67565b5060051b60200190565b5f82601f830112613016575f5ffd5b8151613024612d6182612fe5565b8082825260208201915060208360051b860101925085831115613045575f5ffd5b602085015b8381101561306257805183526020928301920161304a565b5095945050505050565b5f5f5f5f6080858703121561307f575f5ffd5b84516001600160401b03811115613094575f5ffd5b8501608081880312156130a5575f5ffd5b6130ad612c7b565b81516130b881612bfc565b815260208201516130c88161299d565b602082015260408201516001600160401b038111156130e5575f5ffd5b6130f189828501612f99565b60408301525060608201516001600160401b0381111561310f575f5ffd5b61311b89828501612f99565b6060830152509450613131905060208601612f8e565b925061313f60408601612f8e565b915060608501516001600160401b03811115613159575f5ffd5b61316587828801613007565b91505092959194509250565b5f8151808452602084019350602083015f5b828110156131a1578151865260209586019590910190600101613183565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f906131d690830185613171565b8281036060840152612e8f8185613171565b63ffffffff81168114610c48575f5ffd5b803561203d816131e8565b5f82601f830112613213575f5ffd5b8135613221612d6182612fe5565b8082825260208201915060208360051b860101925085831115613242575f5ffd5b602085015b83811015613062578035835260209283019201613247565b5f6101008236031215613270575f5ffd5b613278612ca3565b61328183612c10565b815261328f602084016129b1565b60208201526132a0604084016129b1565b60408201526132b160608401612c10565b60608201526132c2608084016129b1565b60808201526132d360a084016131f9565b60a082015260c08301356001600160401b038111156132f0575f5ffd5b6132fc36828601613204565b60c08301525060e08301356001600160401b0381111561331a575f5ffd5b61332636828601613204565b60e08301525092915050565b5f60208284031215613342575f5ffd5b8135610c5a81612bfc565b5f5f8335601e19843603018112613362575f5ffd5b8301803591506001600160401b0382111561337b575f5ffd5b6020019150600581901b36038213156129f9575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156133b6575f5ffd5b8135610c5a816131e8565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106d7576106d76133c1565b805161203d816131e8565b5f5f60408385031215613404575f5ffd5b825160208401519092506001600160401b03811115613421575f5ffd5b83016101608186031215613433575f5ffd5b61343b612cc6565b61344482612f83565b815261345260208301612f83565b6020820152613463604083016133e8565b604082015261347460608301612f8e565b606082015261348560808301612f83565b608082015261349660a08301612f8e565b60a08201526134a760c08301612f83565b60c08201526134b860e08301612f8e565b60e08201526134ca6101008301612f8e565b61010082015261012082810151908201526101408201516001600160401b038111156134f4575f5ffd5b61350087828501612f99565b6101408301525080925050509250929050565b8183525f6001600160fb1b0383111561352a575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f9061357e9083018688613513565b8281036080840152613591818587613513565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f6080858703121561364a575f5ffd5b84356001600160401b0381111561365f575f5ffd5b850160808188031215613670575f5ffd5b613678612c7b565b813561368381612bfc565b815260208201356136938161299d565b602082015260408201356001600160401b038111156136b0575f5ffd5b6136bc89828501612d3f565b60408301525060608201356001600160401b038111156136da575f5ffd5b6136e689828501612d3f565b60608301525094506136fc9050602086016129b1565b925061370a604086016129b1565b915060608501356001600160401b03811115613724575f5ffd5b61316587828801613204565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f9061376a90830185613171565b828103608084015261377c8185613171565b98975050505050505050565b600181811c9082168061379c57607f821691505b602082108103610b5d57634e487b7160e01b5f52602260045260245ffd5b5f60608284031280156137cb575f5ffd5b50604051606081016001600160401b03811182821017156137ee576137ee612c67565b6040528251815260208301516138038161299d565b6020820152604083015161381681612bfc565b60408201529392505050565b5f8251613833818460208701612aa4565b9190910192915050565b5f6020828403121561384d575f5ffd5b8151610c5a81612c1b565b608081526001600160401b03865116608082015260018060a01b0360208701511660a08201525f6040870151608060c0840152613899610100840182612ac6565b90506060880151607f198483030160e08501526138b68282612ac6565b6001600160a01b0389811660208701528816604086015291506138d69050565b828103606084015261377c818587613513565b602081525f610c5a6020830184612ac6565b5f6020828403121561390b575f5ffd5b5051919050565b5f60208284031215613922575f5ffd5b8151610c5a8161299d565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f906139ba90830185612ac6565b82810360a08401526139cc8185612ac6565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c5790830184612ac6565b601f82111561124e57805f5260205f20601f840160051c81016020851015613a215750805b601f840160051c820191505b81811015613a40575f8155600101613a2d565b5050505050565b81516001600160401b03811115613a6057613a60612c67565b613a7481613a6e8454613788565b846139fc565b6020601f821160018114613aa6575f8315613a8f5750848201515b5f19600385901b1c1916600184901b178455613a40565b5f84815260208120601f198516915b82811015613ad55787850151825560209485019460019092019101613ab5565b5084821015613af257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613b136040830185612ac6565b8281036020840152612fdc8185612ac6565b5f60208284031215613b35575f5ffd5b81516001600160401b03811115613b4a575f5ffd5b61212f84828501612f99565b5f60ff821660ff8103613b6b57613b6b6133c1565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207e39dacbb7484528efd5e950acf87382098029acc99bcdc0369d1fbf4ebb7bc964736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670010000000000000000000000000000000003": { + "contractName": "ERC721Vault", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670010000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000000003" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167001000000000000000000000000000000004": { + "contractName": "ERC1155VaultImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" + }, + "code": "0x608060405260043610610195575f3560e01c8063715018a6116100e7578063a86f9d9e11610087578063e30c397811610062578063e30c39781461049d578063f09a4016146104ba578063f23a6e61146104d9578063f2fde38b14610505575f5ffd5b8063a86f9d9e14610401578063bc197c8114610420578063e07baba614610467575f5ffd5b80638456cb59116100c25780638456cb591461038d5780638abf6077146103a15780638da5cb5b146103b55780639aa8605c146103d2575f5ffd5b8063715018a61461035257806379ba5097146103665780637f07c9471461037a575f5ffd5b80633ab76e9f116101525780634f1ef2861161012d5780634f1ef286146102cb57806352d1902d146102de5780635c975abb146102f257806367090ccf14610312575f5ffd5b80633ab76e9f146102615780633eb6b8cf146102985780633f4ba83a146102b7575f5ffd5b80630178733a1461019957806301ffc9a7146101ae57806306fdde03146101e25780631f59a8301461020e5780633075db561461022e5780633659cfe614610242575b5f5ffd5b6101ac6101a73660046128ab565b610524565b005b3480156101b9575f5ffd5b506101cd6101c83660046128f1565b61069a565b60405190151581526020015b60405180910390f35b3480156101ed575f5ffd5b506c195c98cc4c4d4d57dd985d5b1d609a1b5b6040519081526020016101d9565b61022161021c366004612918565b6106b9565b6040516101d9919061299c565b348015610239575f5ffd5b506101cd610b40565b34801561024d575f5ffd5b506101ac61025c366004612aab565b610b58565b34801561026c575f5ffd5b50609754610280906001600160a01b031681565b6040516001600160a01b0390911681526020016101d9565b3480156102a3575f5ffd5b506102806102b2366004612af2565b610c28565b3480156102c2575f5ffd5b506101ac610c3c565b6101ac6102d9366004612c5d565b610c50565b3480156102e9575f5ffd5b50610200610d05565b3480156102fd575f5ffd5b506101cd60c954610100900460ff1660021490565b34801561031d575f5ffd5b5061028061032c366004612ca9565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b34801561035d575f5ffd5b506101ac610db6565b348015610371575f5ffd5b506101ac610dc7565b6101ac610388366004612d1b565b610e3e565b348015610398575f5ffd5b506101ac610f6a565b3480156103ac575f5ffd5b50610280610f7d565b3480156103c0575f5ffd5b506033546001600160a01b0316610280565b3480156103dd575f5ffd5b506103f16103ec366004612aab565b610f8b565b6040516101d99493929190612d59565b34801561040c575f5ffd5b5061028061041b366004612da8565b6110d6565b34801561042b575f5ffd5b5061044e61043a366004612e0b565b63bc197c8160e01b98975050505050505050565b6040516001600160e01b031990911681526020016101d9565b348015610472575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b0390911681526020016101d9565b3480156104a8575f5ffd5b506065546001600160a01b0316610280565b3480156104c5575f5ffd5b506101ac6104d4366004612ecb565b6110e9565b3480156104e4575f5ffd5b5061044e6104f3366004612ef7565b63f23a6e6160e01b9695505050505050565b348015610510575f5ffd5b506101ac61051f366004612aab565b611200565b61053860c954610100900460ff1660021490565b156105565760405163bae6e2a960e01b815260040160405180910390fd5b600261056460c95460ff1690565b60ff16036105855760405163dfc60d8560e01b815260040160405180910390fd5b61058f6002611271565b610597611287565b505f6105a7610140840184612f6d565b6105b5916004908290612faf565b8101906105c29190612fd6565b90505f5f5f838060200190518101906105db91906130f0565b94509450505092505f610602848860a00160208101906105fb9190612aab565b858561137d565b905061062c61012088013561061d60c08a0160a08b01612aab565b6001600160a01b03169061146c565b61063c60c0880160a08901612aab565b6001600160a01b0316867fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c866020015184878760405161067f9493929190613258565b60405180910390a350505050506106966001611271565b5050565b5f6106a482611477565b806106b357506106b3826114c6565b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261072760c954610100900460ff1660021490565b156107455760405163bae6e2a960e01b815260040160405180910390fd5b61074e8261330c565b8060e00151518160c0015151146107785760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107a3576040516303f8a7d360e01b815260040160405180910390fd5b60026107b160c95460ff1690565b60ff16036107d25760405163dfc60d8560e01b815260040160405180910390fd5b6107dc6002611271565b6107ec60808401606085016133df565b6001600160401b031634101561081557604051630178ce0b60e31b815260040160405180910390fd5b5f5b61082460e08501856133fa565b90508110156108785761083a60e08501856133fa565b8281811061084a5761084a61343f565b905060200201355f0361087057604051634299323b60e11b815260040160405180910390fd5b600101610817565b506108a3636cdb3d1360e11b61089460a0860160808701612aab565b6001600160a01b0316906114fa565b6108c057604051633ee915f560e11b815260040160405180910390fd5b5f5f6108cb856115ca565b6040805161016081019091525f808252929450909250602081016108f56080890160608a016133df565b6001600160401b0316815260200161091360c0890160a08a01613453565b63ffffffff1681525f60208083018290526040830191909152336060830152608090910190610944908901896133df565b6001600160401b031681526020015f6001600160a01b031688602001602081019061096f9190612aab565b6001600160a01b0316036109835733610993565b6109936040890160208a01612aab565b6001600160a01b031681526020908101906109cc906109b4908a018a6133df565b6c195c98cc4c4d4d57dd985d5b1d609a1b5b5f610c28565b6001600160a01b031681526020016109ea6080890160608a016133df565b6109fd906001600160401b031634613482565b815260200184905290505f610a1b6562726964676560d01b826110d6565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a47919061299c565b5f6040518083038185885af1158015610a62573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610a8a91908101906134a0565b96509050610a9e6060880160408901612aab565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610af49190612aab565b610b0160c08f018f6133fa565b8f8060e00190610b1191906133fa565b604051610b2497969594939291906135f0565b60405180910390a450505050610b3a6001611271565b50919050565b5f6002610b4f60c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000000004163003610ba95760405162461bcd60e51b8152600401610ba09061364c565b60405180910390fd5b7f00000000000000000000000001670010000000000000000000000000000000046001600160a01b0316610bdb611a8a565b6001600160a01b031614610c015760405162461bcd60e51b8152600401610ba090613698565b610c0a81611aa5565b604080515f80825260208201909252610c2591839190611aad565b50565b5f610c34848484611c17565b949350505050565b610c44611c73565b610c4e335f611d03565b565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000000004163003610c985760405162461bcd60e51b8152600401610ba09061364c565b7f00000000000000000000000001670010000000000000000000000000000000046001600160a01b0316610cca611a8a565b6001600160a01b031614610cf05760405162461bcd60e51b8152600401610ba090613698565b610cf982611aa5565b61069682826001611aad565b5f306001600160a01b037f00000000000000000000000001670010000000000000000000000000000000041614610da45760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ba0565b505f51602061421e5f395f51905f5290565b610dbe611d07565b610c4e5f611d61565b60655433906001600160a01b03168114610e355760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ba0565b610c2581611d61565b610e5260c954610100900460ff1660021490565b15610e705760405163bae6e2a960e01b815260040160405180910390fd5b6002610e7e60c95460ff1690565b60ff1603610e9f5760405163dfc60d8560e01b815260040160405180910390fd5b610ea96002611271565b5f80808080610eba868801886136e4565b945094509450945094505f610ecd611d7a565b9050610ed884611e9b565b5f610ee58786868661137d565b9050610efa6001600160a01b0386163461146c565b846001600160a01b0316866001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518b60200151868a8a604051610f51959493929190613805565b60405180910390a4505050505050506106966001611271565b610f72611ed7565b610c4e336001611d03565b5f610f86611a8a565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b0316929190610fc99061385d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff59061385d565b80156110405780601f1061101757610100808354040283529160200191611040565b820191905f5260205f20905b81548152906001019060200180831161102357829003601f168201915b5050505050908060020180546110559061385d565b80601f01602080910402602001604051908101604052809291908181526020018280546110819061385d565b80156110cc5780601f106110a3576101008083540402835291602001916110cc565b820191905f5260205f20905b8154815290600101906020018083116110af57829003601f168201915b5050505050905084565b5f6110e2468484611c17565b9392505050565b5f54610100900460ff161580801561110757505f54600160ff909116105b806111205750303b15801561112057505f5460ff166001145b6111835760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ba0565b5f805460ff1916600117905580156111a4575f805461ff0019166101001790555b6111ae8383611f48565b6111b6611f82565b80156111fb575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611208611d07565b606580546001600160a01b0383166001600160a01b031990911681179091556112396033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b6112b88160016110d6565b6001600160a01b0316336001600160a01b0316146112e957604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611325573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611349919061388f565b60208101519092506001600160a01b0316331461137957604051632583296b60e01b815260040160405180910390fd5b5090565b5f46855f01516001600160401b0316036113fb57506020840151604051631759616b60e11b81526001600160a01b03821690632eb2c2d6906113c99030908890889088906004016138f7565b5f604051808303815f87803b1580156113e0575f5ffd5b505af11580156113f2573d5f5f3e3d5ffd5b50505050610c34565b61140485611fa8565b60405163d81d0a1560e01b81529091506001600160a01b0382169063d81d0a159061143790879087908790600401613950565b5f604051808303815f87803b15801561144e575f5ffd5b505af1158015611460573d5f5f3e3d5ffd5b50505050949350505050565b61069682825a611fef565b5f6001600160e01b0319821662bc399d60e11b14806114a657506001600160e01b03198216637f07c94760e01b145b806106b357506001600160e01b031982166301ffc9a760e01b1492915050565b5f6001600160e01b03198216630271189760e51b14806106b357506301ffc9a760e01b6001600160e01b03198316146106b3565b6040516001600160e01b0319821660248201525f90819081906001600160a01b0386169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516115569190613985565b5f60405180830381855afa9150503d805f811461158e576040519150601f19603f3d011682016040523d82523d5f602084013e611593565b606091505b50915091508180156115a6575080516020145b156115c257808060200190518101906115bf91906139a0565b92505b505092915050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d8161160060a0870160808801612aab565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118f3576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b031660208201526001830180549192849290840191906116719061385d565b80601f016020809104026020016040519081016040528092919081815260200182805461169d9061385d565b80156116e85780601f106116bf576101008083540402835291602001916116e8565b820191905f5260205f20905b8154815290600101906020018083116116cb57829003601f168201915b505050505081526020016002820180546117019061385d565b80601f016020809104026020016040519081016040528092919081815260200182805461172d9061385d565b80156117785780601f1061174f57610100808354040283529160200191611778565b820191905f5260205f20905b81548152906001019060200180831161175b57829003601f168201915b50505050508152505091508360800160208101906117969190612aab565b6001600160a01b0316632eb2c2d633306117b360c08901896133fa565b6117c060e08b018b6133fa565b6040518763ffffffff1660e01b81526004016117e1969594939291906139bb565b5f604051808303815f87803b1580156117f8575f5ffd5b505af115801561180a573d5f5f3e3d5ffd5b505050505f5b61181d60c08601866133fa565b90508110156118ed5761183660a0860160808701612aab565b6001600160a01b031663b390c0ab61185160c08801886133fa565b848181106118615761186161343f565b90506020020135878060e0019061187891906133fa565b858181106118885761188861343f565b905060200201356040518363ffffffff1660e01b81526004016118b5929190918252602082015260400190565b5f604051808303815f87803b1580156118cc575f5ffd5b505af11580156118de573d5f5f3e3d5ffd5b50505050806001019050611810565b506119f0565b6040518060800160405280466001600160401b031681526020018560800160208101906119209190612aab565b6001600160a01b0316815260200161194661194160a0880160808901612aab565b612032565b815260200161196361195e60a0880160808901612aab565b6120dc565b9052915061197760a0850160808601612aab565b6001600160a01b0316632eb2c2d6333061199460c08901896133fa565b6119a160e08b018b6133fa565b6040518763ffffffff1660e01b81526004016119c2969594939291906139bb565b5f604051808303815f87803b1580156119d9575f5ffd5b505af11580156119eb573d5f5f3e3d5ffd5b505050505b5030637f07c9478233611a096060880160408901612aab565b611a1660c08901896133fa565b611a2360e08b018b6133fa565b604051602001611a399796959493929190613a18565b60408051601f1981840301815290829052611a5691602401613ac8565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f51602061421e5f395f51905f52546001600160a01b031690565b610c25611d07565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611ae0576111fb83612122565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b3a575060408051601f3d908101601f19168201909252611b3791810190613ada565b60015b611b9d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ba0565b5f51602061421e5f395f51905f528114611c0b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ba0565b506111fb8383836121bd565b5f611c2284846121e7565b90508180611c3857506001600160a01b03811615155b84849091611c6a57604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610ba0565b50509392505050565b611c8760c954610100900460ff1660021490565b611ca45760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6106965b6033546001600160a01b03163314610c4e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba0565b606580546001600160a01b0319169055610c2581612289565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611dab8160016110d6565b6001600160a01b0316336001600160a01b031614611ddc57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3c919061388f565b91505f611e5e83604001516109c66c195c98cc4c4d4d57dd985d5b1d609a1b90565b9050806001600160a01b031683602001516001600160a01b031614611e9657604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611eb957506001600160a01b03811630145b15610c2557604051635b50f3f960e01b815260040160405180910390fd5b611eeb60c954610100900460ff1660021490565b15611f095760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611cf9565b806001600160a01b038116611f705760405163538ba4f960e01b815260040160405180910390fd5b611f79836122da565b6111fb82612338565b5f54610100900460ff16610c4e5760405162461bcd60e51b8152600401610ba090613af1565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611fea576106b3826123a8565b919050565b815f03611ffb57505050565b61201583838360405180602001604052805f815250612584565b6111fb57604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b038616916120789190613985565b5f60405180830381855afa9150503d805f81146120b0576040519150601f19603f3d011682016040523d82523d5f602084013e6120b5565b606091505b5091509150816120d35760405180602001604052805f815250610c34565b610c34816125c1565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b038616916120789190613985565b6001600160a01b0381163b61218f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ba0565b5f51602061421e5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6121c68361272e565b5f825111806121d25750805b156111fb576121e1838361276d565b50505050565b6097545f906001600160a01b03168061221357604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612265573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c349190613b3c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166123005760405162461bcd60e51b8152600401610ba090613af1565b612308611f82565b6123266001600160a01b038216156123205781611d61565b33611d61565b5060c9805461ff001916610100179055565b5f54610100900460ff1661235e5760405162461bcd60e51b8152600401610ba090613af1565b6001600160401b034611156123865760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123bc6033546001600160a01b031690565b60975460208501518551604080880151606089015191516123ed96956001600160a01b031694939290602401613b57565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506124356e627269646765645f6572633131353560881b5f6110d6565b816040516124429061289e565b61244d929190613bb8565b604051809103905ff080158015612466573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124ca9082613c26565b50606082015160028201906124df9082613c26565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b926125769290613ce0565b60405180910390a450919050565b5f6001600160a01b0385166125ac57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606060408251106125e057818060200190518101906106b39190613d04565b815160200361271b575f5b60208160ff161080156126205750828160ff168151811061260e5761260e61343f565b01602001516001600160f81b03191615155b15612637578061262f81613d35565b9150506125eb565b5f8160ff166001600160401b0381111561265357612653612b31565b6040519080825280601f01601f19166020018201604052801561267d576020820181803683370190505b5090505f91505b60208260ff161080156126b95750838260ff16815181106126a7576126a761343f565b01602001516001600160f81b03191615155b156110e257838260ff16815181106126d3576126d361343f565b602001015160f81c60f81b818360ff16815181106126f3576126f361343f565b60200101906001600160f81b03191690815f1a9053508161271381613d35565b925050612684565b505060408051602081019091525f815290565b61273781612122565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606110e2838360405180606001604052806027815260200161423e6027913960605f5f856001600160a01b0316856040516127a99190613985565b5f60405180830381855af49150503d805f81146127e1576040519150601f19603f3d011682016040523d82523d5f602084013e6127e6565b606091505b50915091506127f786838387612801565b9695505050505050565b6060831561286f5782515f03612868576001600160a01b0385163b6128685760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ba0565b5081610c34565b610c3483838151156128845781518083602001fd5b8060405162461bcd60e51b8152600401610ba09190613ac8565b6104ca80613d5483390190565b5f5f604083850312156128bc575f5ffd5b82356001600160401b038111156128d1575f5ffd5b830161016081860312156128e3575f5ffd5b946020939093013593505050565b5f60208284031215612901575f5ffd5b81356001600160e01b0319811681146110e2575f5ffd5b5f60208284031215612928575f5ffd5b81356001600160401b0381111561293d575f5ffd5b820161010081850312156110e2575f5ffd5b5f5b83811015612969578181015183820152602001612951565b50505f910152565b5f815180845261298881602086016020860161294f565b601f01601f19169290920160200192915050565b602081526129b66020820183516001600160401b03169052565b5f60208301516129d160408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b0381166101208401525061012083015161014083015261014083015161016080840152610c34610180840182612971565b6001600160a01b0381168114610c25575f5ffd5b8035611fea81612a8c565b5f60208284031215612abb575f5ffd5b81356110e281612a8c565b6001600160401b0381168114610c25575f5ffd5b8035611fea81612ac6565b8015158114610c25575f5ffd5b5f5f5f60608486031215612b04575f5ffd5b8335612b0f81612ac6565b9250602084013591506040840135612b2681612ae5565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612b6757612b67612b31565b60405290565b60405161010081016001600160401b0381118282101715612b6757612b67612b31565b60405161016081016001600160401b0381118282101715612b6757612b67612b31565b604051601f8201601f191681016001600160401b0381118282101715612bdb57612bdb612b31565b604052919050565b5f6001600160401b03821115612bfb57612bfb612b31565b50601f01601f191660200190565b5f82601f830112612c18575f5ffd5b8135602083015f612c30612c2b84612be3565b612bb3565b9050828152858383011115612c43575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612c6e575f5ffd5b8235612c7981612a8c565b915060208301356001600160401b03811115612c93575f5ffd5b612c9f85828601612c09565b9150509250929050565b5f5f60408385031215612cba575f5ffd5b823591506020830135612ccc81612a8c565b809150509250929050565b5f5f83601f840112612ce7575f5ffd5b5081356001600160401b03811115612cfd575f5ffd5b602083019150836020828501011115612d14575f5ffd5b9250929050565b5f5f60208385031215612d2c575f5ffd5b82356001600160401b03811115612d41575f5ffd5b612d4d85828601612cd7565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612d8b90830185612971565b8281036060840152612d9d8185612971565b979650505050505050565b5f5f60408385031215612db9575f5ffd5b823591506020830135612ccc81612ae5565b5f5f83601f840112612ddb575f5ffd5b5081356001600160401b03811115612df1575f5ffd5b6020830191508360208260051b8501011115612d14575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612e22575f5ffd5b8835612e2d81612a8c565b97506020890135612e3d81612a8c565b965060408901356001600160401b03811115612e57575f5ffd5b612e638b828c01612dcb565b90975095505060608901356001600160401b03811115612e81575f5ffd5b612e8d8b828c01612dcb565b90955093505060808901356001600160401b03811115612eab575f5ffd5b612eb78b828c01612cd7565b999c989b5096995094979396929594505050565b5f5f60408385031215612edc575f5ffd5b8235612ee781612a8c565b91506020830135612ccc81612a8c565b5f5f5f5f5f5f60a08789031215612f0c575f5ffd5b8635612f1781612a8c565b95506020870135612f2781612a8c565b9450604087013593506060870135925060808701356001600160401b03811115612f4f575f5ffd5b612f5b89828a01612cd7565b979a9699509497509295939492505050565b5f5f8335601e19843603018112612f82575f5ffd5b8301803591506001600160401b03821115612f9b575f5ffd5b602001915036819003821315612d14575f5ffd5b5f5f85851115612fbd575f5ffd5b83861115612fc9575f5ffd5b5050820193919092039150565b5f60208284031215612fe6575f5ffd5b81356001600160401b03811115612ffb575f5ffd5b610c3484828501612c09565b8051611fea81612ac6565b8051611fea81612a8c565b5f82601f83011261302c575f5ffd5b8151602083015f61303f612c2b84612be3565b9050828152858383011115613052575f5ffd5b61306083602083018461294f565b95945050505050565b5f6001600160401b0382111561308157613081612b31565b5060051b60200190565b5f82601f83011261309a575f5ffd5b81516130a8612c2b82613069565b8082825260208201915060208360051b8601019250858311156130c9575f5ffd5b602085015b838110156130e65780518352602092830192016130ce565b5095945050505050565b5f5f5f5f5f60a08688031215613104575f5ffd5b85516001600160401b03811115613119575f5ffd5b86016080818903121561312a575f5ffd5b613132612b45565b815161313d81612ac6565b8152602082015161314d81612a8c565b602082015260408201516001600160401b0381111561316a575f5ffd5b6131768a82850161301d565b60408301525060608201516001600160401b03811115613194575f5ffd5b6131a08a82850161301d565b60608301525095506131b6905060208701613012565b93506131c460408701613012565b925060608601516001600160401b038111156131de575f5ffd5b6131ea8882890161308b565b92505060808601516001600160401b03811115613205575f5ffd5b6132118882890161308b565b9150509295509295909350565b5f8151808452602084019350602083015f5b8281101561324e578151865260209586019590910190600101613230565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f906132839083018561321e565b8281036060840152612d9d818561321e565b63ffffffff81168114610c25575f5ffd5b8035611fea81613295565b5f82601f8301126132c0575f5ffd5b81356132ce612c2b82613069565b8082825260208201915060208360051b8601019250858311156132ef575f5ffd5b602085015b838110156130e65780358352602092830192016132f4565b5f610100823603121561331d575f5ffd5b613325612b6d565b61332e83612ada565b815261333c60208401612aa0565b602082015261334d60408401612aa0565b604082015261335e60608401612ada565b606082015261336f60808401612aa0565b608082015261338060a084016132a6565b60a082015260c08301356001600160401b0381111561339d575f5ffd5b6133a9368286016132b1565b60c08301525060e08301356001600160401b038111156133c7575f5ffd5b6133d3368286016132b1565b60e08301525092915050565b5f602082840312156133ef575f5ffd5b81356110e281612ac6565b5f5f8335601e1984360301811261340f575f5ffd5b8301803591506001600160401b03821115613428575f5ffd5b6020019150600581901b3603821315612d14575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613463575f5ffd5b81356110e281613295565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106b3576106b361346e565b8051611fea81613295565b5f5f604083850312156134b1575f5ffd5b825160208401519092506001600160401b038111156134ce575f5ffd5b830161016081860312156134e0575f5ffd5b6134e8612b90565b6134f182613007565b81526134ff60208301613007565b602082015261351060408301613495565b604082015261352160608301613012565b606082015261353260808301613007565b608082015261354360a08301613012565b60a082015261355460c08301613007565b60c082015261356560e08301613012565b60e08201526135776101008301613012565b61010082015261012082810151908201526101408201516001600160401b038111156135a1575f5ffd5b6135ad8782850161301d565b6101408301525080925050509250929050565b8183525f6001600160fb1b038311156135d7575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f9061362b90830186886135c0565b828103608084015261363e8185876135c0565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f5f60a086880312156136f8575f5ffd5b85356001600160401b0381111561370d575f5ffd5b86016080818903121561371e575f5ffd5b613726612b45565b813561373181612ac6565b8152602082013561374181612a8c565b602082015260408201356001600160401b0381111561375e575f5ffd5b61376a8a828501612c09565b60408301525060608201356001600160401b03811115613788575f5ffd5b6137948a828501612c09565b60608301525095506137aa905060208701612aa0565b93506137b860408701612aa0565b925060608601356001600160401b038111156137d2575f5ffd5b6137de888289016132b1565b92505060808601356001600160401b038111156137f9575f5ffd5b613211888289016132b1565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f9061383f9083018561321e565b8281036080840152613851818561321e565b98975050505050505050565b600181811c9082168061387157607f821691505b602082108103610b3a57634e487b7160e01b5f52602260045260245ffd5b5f60608284031280156138a0575f5ffd5b50604051606081016001600160401b03811182821017156138c3576138c3612b31565b6040528251815260208301516138d881612a8c565b602082015260408301516138eb81612ac6565b60408201529392505050565b6001600160a01b0385811682528416602082015260a0604082018190525f906139229083018561321e565b8281036060840152613934818561321e565b83810360809094019390935250505f8152602001949350505050565b6001600160a01b03841681526060602082018190525f906139739083018561321e565b82810360408401526127f7818561321e565b5f825161399681846020870161294f565b9190910192915050565b5f602082840312156139b0575f5ffd5b81516110e281612ae5565b6001600160a01b0387811682528616602082015260a0604082018190525f906139e790830186886135c0565b82810360608401526139fa8185876135c0565b83810360809094019390935250505f81526020019695505050505050565b60a080825288516001600160401b03169082015260208801516001600160a01b031660c08201526040880151608060e08301525f90613a5b610120840182612971565b905060608a0151609f1984830301610100850152613a798282612971565b915050613a91602084018a6001600160a01b03169052565b6001600160a01b03881660408401528281036060840152613ab38187896135c0565b9050828103608084015261363e8185876135c0565b602081525f6110e26020830184612971565b5f60208284031215613aea575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215613b4c575f5ffd5b81516110e281612a8c565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f90613b9990830185612971565b82810360a0840152613bab8185612971565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c3490830184612971565b601f8211156111fb57805f5260205f20601f840160051c81016020851015613c005750805b601f840160051c820191505b81811015613c1f575f8155600101613c0c565b5050505050565b81516001600160401b03811115613c3f57613c3f612b31565b613c5381613c4d845461385d565b84613bdb565b6020601f821160018114613c85575f8315613c6e5750848201515b5f19600385901b1c1916600184901b178455613c1f565b5f84815260208120601f198516915b82811015613cb45787850151825560209485019460019092019101613c94565b5084821015613cd157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613cf26040830185612971565b82810360208401526130608185612971565b5f60208284031215613d14575f5ffd5b81516001600160401b03811115613d29575f5ffd5b610c348482850161301d565b5f60ff821660ff8103613d4a57613d4a61346e565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220dc1e85af5b71afd32a7b608773fbe502a1e5a5187b53b55fc0e0e8d68749370f64736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670010000000000000000000000000000000004": { + "contractName": "ERC1155Vault", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670010000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000000004" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167001000000000000000000000000000010096": { + "contractName": "BridgedERC20", + "storage": {}, + "code": "0x608060405260043610610233575f3560e01c806370a0823111610129578063a77f1516116100a8578063dd62ed3e1161006d578063dd62ed3e14610684578063e07baba6146106a3578063e30c3978146106d9578063f12506c1146106f6578063f2fde38b1461070a575f5ffd5b8063a77f1516146105e7578063a86f9d9e14610608578063a9059cbb14610627578063b8f2e0c514610646578063bb86ef9314610665575f5ffd5b80638456cb59116100ee5780638456cb591461056f5780638abf6077146105835780638da5cb5b1461059757806395d89b41146105b4578063a457c2d7146105c8575f5ffd5b806370a08231146104d3578063715018a61461050757806379ba50971461051b5780637cf8ed0d1461052f5780637e4746341461054f575f5ffd5b806339509351116101b557806342966c681161017a57806342966c681461045757806349d12605146104765780634f1ef2861461048c57806352d1902d1461049f5780635c975abb146104b3575f5ffd5b806339509351146103af5780633ab76e9f146103ce5780633eb6b8cf146104055780633f4ba83a1461042457806340c10f1914610438575f5ffd5b806323b872dd116101fb57806323b872dd146102ea57806326afaadd146103095780633075db561461034d578063313ce567146103615780633659cfe61461038e575f5ffd5b806301ffc9a71461023757806306fdde031461026b578063095ea7b31461028c5780630ae74548146102ab57806318160ddd146102cc575b5f5ffd5b348015610242575f5ffd5b50610256610251366004612185565b610729565b60405190151581526020015b60405180910390f35b348015610276575f5ffd5b5061027f6107cb565b60405161026291906121ce565b348015610297575f5ffd5b506102566102a6366004612214565b61085b565b3480156102b6575f5ffd5b5061012f5461025690600160a01b900460ff1681565b3480156102d7575f5ffd5b5060fd545b604051908152602001610262565b3480156102f5575f5ffd5b5061025661030436600461223e565b610872565b348015610314575f5ffd5b5061032e61012d5461012e546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610262565b348015610358575f5ffd5b50610256610895565b34801561036c575f5ffd5b5061012d54600160a01b900460ff165b60405160ff9091168152602001610262565b348015610399575f5ffd5b506103ad6103a836600461227c565b6108ad565b005b3480156103ba575f5ffd5b506102566103c9366004612214565b61097d565b3480156103d9575f5ffd5b506097546103ed906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b348015610410575f5ffd5b506103ed61041f3660046122ab565b61099e565b34801561042f575f5ffd5b506103ad6109b2565b348015610443575f5ffd5b506103ad610452366004612214565b6109c6565b348015610462575f5ffd5b506103ad6104713660046122f1565b610ae0565b348015610481575f5ffd5b506102dc61012e5481565b6103ad61049a36600461231c565b610c1d565b3480156104aa575f5ffd5b506102dc610cd2565b3480156104be575f5ffd5b5061025660c954610100900460ff1660021490565b3480156104de575f5ffd5b506102dc6104ed36600461227c565b6001600160a01b03165f90815260fb602052604090205490565b348015610512575f5ffd5b506103ad610d83565b348015610526575f5ffd5b506103ad610d94565b34801561053a575f5ffd5b5061012d546103ed906001600160a01b031681565b34801561055a575f5ffd5b5061012f546103ed906001600160a01b031681565b34801561057a575f5ffd5b506103ad610e0b565b34801561058e575f5ffd5b506103ed610e1e565b3480156105a2575f5ffd5b506033546001600160a01b03166103ed565b3480156105bf575f5ffd5b5061027f610e2c565b3480156105d3575f5ffd5b506102566105e2366004612214565b610e3b565b3480156105f2575f5ffd5b5061012d5461037c90600160a01b900460ff1681565b348015610613575f5ffd5b506103ed6106223660046123df565b610eb5565b348015610632575f5ffd5b50610256610641366004612214565b610ec8565b348015610651575f5ffd5b506103ad610660366004612409565b610ed5565b348015610670575f5ffd5b506103ad61067f366004612477565b611052565b34801561068f575f5ffd5b506102dc61069e36600461253d565b611212565b3480156106ae575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b039091168152602001610262565b3480156106e4575f5ffd5b506065546001600160a01b03166103ed565b348015610701575f5ffd5b5061025661123c565b348015610715575f5ffd5b506103ad61072436600461227c565b611267565b5f6001600160e01b0319821663093e326b60e21b148061075957506001600160e01b0319821663bb86ef9360e01b145b8061077457506001600160e01b0319821663b8f2e0c560e01b145b8061078f57506001600160e01b031982166336372b0760e01b145b806107aa57506001600160e01b0319821663a219a02560e01b145b806107c557506001600160e01b031982166301ffc9a760e01b145b92915050565b606060fe80546107da90612574565b80601f016020809104026020016040519081016040528092919081815260200182805461080690612574565b80156108515780601f1061082857610100808354040283529160200191610851565b820191905f5260205f20905b81548152906001019060200180831161083457829003601f168201915b5050505050905090565b5f336108688185856112d8565b5060019392505050565b5f3361087f8582856113fb565b61088a858585611473565b506001949350505050565b5f60026108a460c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100961630036108fe5760405162461bcd60e51b81526004016108f5906125ac565b60405180910390fd5b7f00000000000000000000000001670010000000000000000000000000000100966001600160a01b0316610930611627565b6001600160a01b0316146109565760405162461bcd60e51b81526004016108f5906125f8565b61095f81611642565b604080515f8082526020820190925261097a9183919061164a565b50565b5f3361086881858561098f8383611212565b6109999190612644565b6112d8565b5f6109aa8484846117b4565b949350505050565b6109ba611810565b6109c4335f6118a0565b565b6109da60c954610100900460ff1660021490565b156109f85760405163bae6e2a960e01b815260040160405180910390fd5b6002610a0660c95460ff1690565b60ff1603610a275760405163dfc60d8560e01b815260040160405180910390fd5b610a3160026118a8565b610a3961123c565b15610a575760405163270bf77560e01b815260040160405180910390fd5b61012f546001600160a01b031633819003610abe57826001600160a01b0316816001600160a01b03167fe502aa3e015149f4b76a0b2b5394e3100903c4af27c3ddc98385395d3f55252684604051610ab191815260200190565b60405180910390a3610ac7565b610ac7336118be565b610ad18383611936565b50610adc60016118a8565b5050565b610af460c954610100900460ff1660021490565b15610b125760405163bae6e2a960e01b815260040160405180910390fd5b6002610b2060c95460ff1690565b60ff1603610b415760405163dfc60d8560e01b815260040160405180910390fd5b610b4b60026118a8565b610b5361123c565b15610c005761012f546040518281526001600160a01b0390911690339082907f638edf84937fb2534b47cac985ea84d6ea4f4076315b56ea1c784d26b87e2bcb9060200160405180910390a36040516340c10f1960e01b8152336004820152602481018390526001600160a01b038216906340c10f19906044015f604051808303815f87803b158015610be4575f5ffd5b505af1158015610bf6573d5f5f3e3d5ffd5b5050505050610c09565b610c09336118be565b610c133382611a00565b61097a60016118a8565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000010096163003610c655760405162461bcd60e51b81526004016108f5906125ac565b7f00000000000000000000000001670010000000000000000000000000000100966001600160a01b0316610c97611627565b6001600160a01b031614610cbd5760405162461bcd60e51b81526004016108f5906125f8565b610cc682611642565b610adc8282600161164a565b5f306001600160a01b037f00000000000000000000000001670010000000000000000000000000000100961614610d715760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108f5565b505f5160206128015f395f51905f5290565b610d8b611b3d565b6109c45f611b97565b60655433906001600160a01b03168114610e025760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016108f5565b61097a81611b97565b610e13611bb0565b6109c43360016118a0565b5f610e27611627565b905090565b606060ff80546107da90612574565b5f3381610e488286611212565b905083811015610ea85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108f5565b61088a82868684036112d8565b5f610ec14684846117b4565b9392505050565b5f33610868818585611473565b610ee960c954610100900460ff1660021490565b15610f075760405163bae6e2a960e01b815260040160405180910390fd5b6a195c98cc8c17dd985d5b1d60aa1b610f21816001610eb5565b6001600160a01b0316336001600160a01b031614610f5257604051630d85cccf60e11b815260040160405180910390fd5b6002610f6060c95460ff1690565b60ff1603610f815760405163dfc60d8560e01b815260040160405180910390fd5b610f8b60026118a8565b61012f546001600160a01b038481169116148015610fbc575061012f60149054906101000a900460ff161515821515145b15610fda5760405163c118d2f360e01b815260040160405180910390fd5b61012f80546001600160a01b0385166001600160a81b03199091168117600160a01b851515908102919091179092556040805191825260208201929092527fa6b6f959792843a48d9d03d13595f2de7c86ae0ce12ef0fa759dd911b205e565910160405180910390a161104d60016118a8565b505050565b5f54610100900460ff161580801561107057505f54600160ff909116105b806110895750303b15801561108957505f5460ff166001145b6110ec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108f5565b5f805460ff19166001179055801561110d575f805461ff0019166101001790555b6111178888611c21565b6111218a8a611c5d565b61119283838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611c9792505050565b61012d805461012e89905560ff8816600160a01b026001600160a81b03199091166001600160a01b038b16171790558015611206575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b039182165f90815260fc6020908152604080832093909416825291909152205490565b61012f545f906001600160a01b031615801590610e2757505061012f54600160a01b900460ff161590565b61126f611b3d565b606580546001600160a01b0383166001600160a01b031990911681179091556112a06033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b03831661133a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108f5565b6001600160a01b03821661139b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108f5565b6001600160a01b038381165f81815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6114068484611212565b90505f19811461146d57818110156114605760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108f5565b61146d84848484036112d8565b50505050565b6001600160a01b0383166114d75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108f5565b6001600160a01b0382166115395760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108f5565b611544838383611cc7565b6001600160a01b0383165f90815260fb6020526040902054818110156115bb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108f5565b6001600160a01b038085165f81815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061161a9086815260200190565b60405180910390a361146d565b5f5160206128015f395f51905f52546001600160a01b031690565b61097a611b3d565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561167d5761104d83611d02565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116d7575060408051601f3d908101601f191682019092526116d491810190612663565b60015b61173a5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108f5565b5f5160206128015f395f51905f5281146117a85760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108f5565b5061104d838383611d9d565b5f6117bf8484611dc1565b905081806117d557506001600160a01b03811615155b8484909161180757604051632b0d65db60e01b81526001600160401b03909216600483015260248201526044016108f5565b50509392505050565b61182460c954610100900460ff1660021490565b6118415760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610adc611b3d565b60c9805460ff191660ff92909216919091179055565b6a195c98cc8c17dd985d5b1d60aa1b6118df6033546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806119195750611904816001610eb5565b6001600160a01b0316336001600160a01b0316145b610adc57604051630d85cccf60e11b815260040160405180910390fd5b6001600160a01b03821661198c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108f5565b6119975f8383611cc7565b8060fd5f8282546119a89190612644565b90915550506001600160a01b0382165f81815260fb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216611a605760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108f5565b611a6b825f83611cc7565b6001600160a01b0382165f90815260fb602052604090205481811015611ade5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108f5565b6001600160a01b0383165f81815260fb60209081526040808320868603905560fd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6033546001600160a01b031633146109c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108f5565b606580546001600160a01b031916905561097a81611e63565b611bc460c954610100900460ff1660021490565b15611be25760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611896565b6001600160a01b0382161580611c35575080155b80611c3f57504681145b15610adc5760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611c855760405163538ba4f960e01b815260040160405180910390fd5b611c8e83611eb4565b61104d82611f12565b5f54610100900460ff16611cbd5760405162461bcd60e51b81526004016108f59061267a565b610adc8282611f82565b611cdb60c954610100900460ff1660021490565b15611cf95760405163bae6e2a960e01b815260040160405180910390fd5b61104d82611fc1565b6001600160a01b0381163b611d6f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108f5565b5f5160206128015f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611da683611fea565b5f82511180611db25750805b1561104d5761146d8383612029565b6097545f906001600160a01b031680611ded57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e3f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109aa91906126c5565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16611eda5760405162461bcd60e51b81526004016108f59061267a565b611ee261204e565b611f006001600160a01b03821615611efa5781611b97565b33611b97565b5060c9805461ff001916610100179055565b5f54610100900460ff16611f385760405162461bcd60e51b81526004016108f59061267a565b6001600160401b03461115611f605760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff16611fa85760405162461bcd60e51b81526004016108f59061267a565b60fe611fb4838261272b565b5060ff61104d828261272b565b306001600160a01b0382160361097a57604051630c292c9d60e21b815260040160405180910390fd5b611ff381611d02565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610ec1838360405180606001604052806027815260200161282160279139612074565b5f54610100900460ff166109c45760405162461bcd60e51b81526004016108f59061267a565b60605f5f856001600160a01b03168560405161209091906127e5565b5f60405180830381855af49150503d805f81146120c8576040519150601f19603f3d011682016040523d82523d5f602084013e6120cd565b606091505b50915091506120de868383876120e8565b9695505050505050565b606083156121565782515f0361214f576001600160a01b0385163b61214f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108f5565b50816109aa565b6109aa838381511561216b5781518083602001fd5b8060405162461bcd60e51b81526004016108f591906121ce565b5f60208284031215612195575f5ffd5b81356001600160e01b031981168114610ec1575f5ffd5b5f5b838110156121c65781810151838201526020016121ae565b50505f910152565b602081525f82518060208401526121ec8160408501602087016121ac565b601f01601f19169190910160400192915050565b6001600160a01b038116811461097a575f5ffd5b5f5f60408385031215612225575f5ffd5b823561223081612200565b946020939093013593505050565b5f5f5f60608486031215612250575f5ffd5b833561225b81612200565b9250602084013561226b81612200565b929592945050506040919091013590565b5f6020828403121561228c575f5ffd5b8135610ec181612200565b803580151581146122a6575f5ffd5b919050565b5f5f5f606084860312156122bd575f5ffd5b83356001600160401b03811681146122d3575f5ffd5b9250602084013591506122e860408501612297565b90509250925092565b5f60208284031215612301575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561232d575f5ffd5b823561233881612200565b915060208301356001600160401b03811115612352575f5ffd5b8301601f81018513612362575f5ffd5b80356001600160401b0381111561237b5761237b612308565b604051601f8201601f19908116603f011681016001600160401b03811182821017156123a9576123a9612308565b6040528181528282016020018710156123c0575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156123f0575f5ffd5b8235915061240060208401612297565b90509250929050565b5f5f6040838503121561241a575f5ffd5b823561242581612200565b915061240060208401612297565b5f5f83601f840112612443575f5ffd5b5081356001600160401b03811115612459575f5ffd5b602083019150836020828501011115612470575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f5f60e08a8c03121561248f575f5ffd5b893561249a81612200565b985060208a01356124aa81612200565b975060408a01356124ba81612200565b965060608a0135955060808a013560ff811681146124d6575f5ffd5b945060a08a01356001600160401b038111156124f0575f5ffd5b6124fc8c828d01612433565b90955093505060c08a01356001600160401b0381111561251a575f5ffd5b6125268c828d01612433565b915080935050809150509295985092959850929598565b5f5f6040838503121561254e575f5ffd5b823561255981612200565b9150602083013561256981612200565b809150509250929050565b600181811c9082168061258857607f821691505b6020821081036125a657634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b808201808211156107c557634e487b7160e01b5f52601160045260245ffd5b5f60208284031215612673575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156126d5575f5ffd5b8151610ec181612200565b601f82111561104d57805f5260205f20601f840160051c810160208510156127055750805b601f840160051c820191505b81811015612724575f8155600101612711565b5050505050565b81516001600160401b0381111561274457612744612308565b612758816127528454612574565b846126e0565b6020601f82116001811461278a575f83156127735750848201515b5f19600385901b1c1916600184901b178455612724565b5f84815260208120601f198516915b828110156127b95787850151825560209485019460019092019101612799565b50848210156127d657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516127f68184602087016121ac565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122056f3912e99f9aa2ff8c82e9c76fca4469349103a0b1c6c4f3f3c466dd73d10d064736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167001000000000000000000000000000010097": { + "contractName": "BridgedERC721", + "storage": {}, + "code": "0x608060405260043610610207575f3560e01c80636352211e11610113578063a22cb4651161009d578063e07baba61161006d578063e07baba6146105c3578063e30c3978146105f9578063e985e9c514610616578063ef8c4ae61461065e578063f2fde38b1461067d575f5ffd5b8063a22cb46514610547578063a86f9d9e14610566578063b88d4fde14610585578063c87b56dd146105a4575f5ffd5b80637cf8ed0d116100e35780637cf8ed0d146104ce5780638456cb59146104ee5780638abf6077146105025780638da5cb5b1461051657806395d89b4114610533575f5ffd5b80636352211e1461046857806370a0823114610487578063715018a6146104a657806379ba5097146104ba575f5ffd5b80633eb6b8cf1161019457806342966c681161016457806342966c68146103de57806349d12605146103fd5780634f1ef2861461042157806352d1902d146104345780635c975abb14610448575f5ffd5b80633eb6b8cf1461036d5780633f4ba83a1461038c57806340c10f19146103a057806342842e0e146103bf575f5ffd5b806323b872dd116101da57806323b872dd146102b857806326afaadd146102d75780633075db561461031b5780633659cfe61461032f5780633ab76e9f1461034e575f5ffd5b806301ffc9a71461020b57806306fdde031461023f578063081812fc14610260578063095ea7b314610297575b5f5ffd5b348015610216575f5ffd5b5061022a610225366004612542565b61069c565b60405190151581526020015b60405180910390f35b34801561024a575f5ffd5b506102536106e1565b60405161023691906125aa565b34801561026b575f5ffd5b5061027f61027a3660046125bc565b610772565b6040516001600160a01b039091168152602001610236565b3480156102a2575f5ffd5b506102b66102b13660046125e7565b610798565b005b3480156102c3575f5ffd5b506102b66102d2366004612611565b6108b1565b3480156102e2575f5ffd5b506102fc61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610236565b348015610326575f5ffd5b5061022a6108e2565b34801561033a575f5ffd5b506102b661034936600461264f565b6108fa565b348015610359575f5ffd5b5060975461027f906001600160a01b031681565b348015610378575f5ffd5b5061027f61038736600461267e565b6109c1565b348015610397575f5ffd5b506102b66109d5565b3480156103ab575f5ffd5b506102b66103ba3660046125e7565b6109e9565b3480156103ca575f5ffd5b506102b66103d9366004612611565b610ab4565b3480156103e9575f5ffd5b506102b66103f83660046125bc565b610ace565b348015610408575f5ffd5b506104136101605481565b604051908152602001610236565b6102b661042f366004612761565b610bcd565b34801561043f575f5ffd5b50610413610c82565b348015610453575f5ffd5b5061022a60c954610100900460ff1660021490565b348015610473575f5ffd5b5061027f6104823660046125bc565b610d33565b348015610492575f5ffd5b506104136104a136600461264f565b610d93565b3480156104b1575f5ffd5b506102b6610e18565b3480156104c5575f5ffd5b506102b6610e29565b3480156104d9575f5ffd5b5061015f5461027f906001600160a01b031681565b3480156104f9575f5ffd5b506102b6610ea0565b34801561050d575f5ffd5b5061027f610eb3565b348015610521575f5ffd5b506033546001600160a01b031661027f565b34801561053e575f5ffd5b50610253610ec1565b348015610552575f5ffd5b506102b66105613660046127ad565b610ed1565b348015610571575f5ffd5b5061027f6105803660046127e0565b610edc565b348015610590575f5ffd5b506102b661059f366004612801565b610eef565b3480156105af575f5ffd5b506102536105be3660046125bc565b610f27565b3480156105ce575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b039091168152602001610236565b348015610604575f5ffd5b506065546001600160a01b031661027f565b348015610621575f5ffd5b5061022a610630366004612868565b6001600160a01b039182165f9081526101326020908152604080832093909416825291909152205460ff1690565b348015610669575f5ffd5b506102b66106783660046128e3565b610f50565b348015610688575f5ffd5b506102b661069736600461264f565b611102565b5f6001600160e01b0319821663093e326b60e21b14806106cc57506001600160e01b031982166377c6257360e11b145b806106db57506106db82611173565b92915050565b606061012d80546106f190612990565b80601f016020809104026020016040519081016040528092919081815260200182805461071d90612990565b80156107685780601f1061073f57610100808354040283529160200191610768565b820191905f5260205f20905b81548152906001019060200180831161074b57829003601f168201915b5050505050905090565b5f61077c826111c2565b505f90815261013160205260409020546001600160a01b031690565b5f6107a282610d33565b9050806001600160a01b0316836001600160a01b0316036108145760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061083057506108308133610630565b6108a25760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161080b565b6108ac8383611221565b505050565b6108bb338261128f565b6108d75760405162461bcd60e51b815260040161080b906129c8565b6108ac83838361130c565b5f60026108f160c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100971630036109425760405162461bcd60e51b815260040161080b90612a15565b7f00000000000000000000000001670010000000000000000000000000000100976001600160a01b031661097461147e565b6001600160a01b03161461099a5760405162461bcd60e51b815260040161080b90612a61565b6109a381611499565b604080515f808252602082019092526109be918391906114a1565b50565b5f6109cd84848461160b565b949350505050565b6109dd611667565b6109e7335f6116f7565b565b6109fd60c954610100900460ff1660021490565b15610a1b5760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610a36816001610edc565b6001600160a01b0316336001600160a01b031614610a6757604051630d85cccf60e11b815260040160405180910390fd5b6002610a7560c95460ff1690565b60ff1603610a965760405163dfc60d8560e01b815260040160405180910390fd5b610aa060026116ff565b610aaa8383611715565b6108ac60016116ff565b6108ac83838360405180602001604052805f815250610eef565b610ae260c954610100900460ff1660021490565b15610b005760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610b1b816001610edc565b6001600160a01b0316336001600160a01b031614610b4c57604051630d85cccf60e11b815260040160405180910390fd5b6002610b5a60c95460ff1690565b60ff1603610b7b5760405163dfc60d8560e01b815260040160405180910390fd5b610b8560026116ff565b33610b8f83610d33565b6001600160a01b031614610bb65760405163358bf3d960e01b815260040160405180910390fd5b610bbf8261172e565b610bc960016116ff565b5050565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000010097163003610c155760405162461bcd60e51b815260040161080b90612a15565b7f00000000000000000000000001670010000000000000000000000000000100976001600160a01b0316610c4761147e565b6001600160a01b031614610c6d5760405162461bcd60e51b815260040161080b90612a61565b610c7682611499565b610bc9828260016114a1565b5f306001600160a01b037f00000000000000000000000001670010000000000000000000000000000100971614610d215760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161080b565b505f516020612e1e5f395f51905f5290565b5f81815261012f60205260408120546001600160a01b0316806106db5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161080b565b5f6001600160a01b038216610dfc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161080b565b506001600160a01b03165f908152610130602052604090205490565b610e206117d0565b6109e75f61182a565b60655433906001600160a01b03168114610e975760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161080b565b6109be8161182a565b610ea8611843565b6109e73360016116f7565b5f610ebc61147e565b905090565b606061012e80546106f190612990565b610bc93383836118b4565b5f610ee846848461160b565b9392505050565b610ef9338361128f565b610f155760405162461bcd60e51b815260040161080b906129c8565b610f2184848484611982565b50505050565b61015f54610160546060916106db916001600160a01b0390911690610f4b856119b5565b611a44565b5f54610100900460ff1615808015610f6e57505f54600160ff909116105b80610f875750303b158015610f8757505f5460ff166001145b610fea5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161080b565b5f805460ff19166001179055801561100b575f805461ff0019166101001790555b6110158787611a8e565b61101f8989611aca565b61109083838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611b0492505050565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905580156110f7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61110a6117d0565b606580546001600160a01b0383166001600160a01b0319909116811790915561113b6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b031982166380ac58cd60e01b14806111a357506001600160e01b03198216635b5e139f60e01b145b806106db57506301ffc9a760e01b6001600160e01b03198316146106db565b5f81815261012f60205260409020546001600160a01b03166109be5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161080b565b5f8181526101316020526040902080546001600160a01b0319166001600160a01b038416908117909155819061125682610d33565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f61129a83610d33565b9050806001600160a01b0316846001600160a01b031614806112e157506001600160a01b038082165f908152610132602090815260408083209388168352929052205460ff165b806109cd5750836001600160a01b03166112fa84610772565b6001600160a01b031614949350505050565b826001600160a01b031661131f82610d33565b6001600160a01b0316146113455760405162461bcd60e51b815260040161080b90612aad565b6001600160a01b0382166113a75760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161080b565b6113b48383836001611b34565b826001600160a01b03166113c782610d33565b6001600160a01b0316146113ed5760405162461bcd60e51b815260040161080b90612aad565b5f8181526101316020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652610130855283862080545f190190559087168086528386208054600101905586865261012f90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f516020612e1e5f395f51905f52546001600160a01b031690565b6109be6117d0565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156114d4576108ac83611b74565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561152e575060408051601f3d908101601f1916820190925261152b91810190612af2565b60015b6115915760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161080b565b5f516020612e1e5f395f51905f5281146115ff5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161080b565b506108ac838383611c0f565b5f6116168484611c33565b9050818061162c57506001600160a01b03811615155b8484909161165e57604051632b0d65db60e01b81526001600160401b039092166004830152602482015260440161080b565b50509392505050565b61167b60c954610100900460ff1660021490565b6116985760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610bc96117d0565b60c9805460ff191660ff92909216919091179055565b610bc9828260405180602001604052805f815250611cd5565b5f61173882610d33565b9050611747815f846001611b34565b61175082610d33565b5f8381526101316020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552610130845282852080545f1901905587855261012f909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6033546001600160a01b031633146109e75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080b565b606580546001600160a01b03191690556109be81611d07565b61185760c954610100900460ff1660021490565b156118755760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016116ed565b816001600160a01b0316836001600160a01b0316036119155760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161080b565b6001600160a01b038381165f8181526101326020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61198d84848461130c565b61199984848484611d58565b610f215760405162461bcd60e51b815260040161080b90612b09565b60605f6119c183611e55565b60010190505f816001600160401b038111156119df576119df6126c4565b6040519080825280601f01601f191660200182016040528015611a09576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611a1357509392505050565b6060611a5a846001600160a01b03166014611f2c565b611a63846119b5565b83604051602001611a7693929190612b5b565b60405160208183030381529060405290509392505050565b6001600160a01b0382161580611aa2575080155b80611aac57504681145b15610bc95760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611af25760405163538ba4f960e01b815260040160405180910390fd5b611afb836120c1565b6108ac8261211f565b5f54610100900460ff16611b2a5760405162461bcd60e51b815260040161080b90612be3565b610bc9828261218f565b611b4860c954610100900460ff1660021490565b15611b665760405163bae6e2a960e01b815260040160405180910390fd5b611b6f836121d0565b610f21565b6001600160a01b0381163b611be15760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161080b565b5f516020612e1e5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611c18836121f9565b5f82511180611c245750805b156108ac57610f218383612238565b6097545f906001600160a01b031680611c5f57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611cb1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109cd9190612c2e565b611cdf838361225d565b611ceb5f848484611d58565b6108ac5760405162461bcd60e51b815260040161080b90612b09565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b0384163b15611e4a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d9b903390899088908890600401612c49565b6020604051808303815f875af1925050508015611dd5575060408051601f3d908101601f19168201909252611dd291810190612c7b565b60015b611e30573d808015611e02576040519150601f19603f3d011682016040523d82523d5f602084013e611e07565b606091505b5080515f03611e285760405162461bcd60e51b815260040161080b90612b09565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506109cd565b506001949350505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611e935772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611ebf576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611edd57662386f26fc10000830492506010015b6305f5e1008310611ef5576305f5e100830492506008015b6127108310611f0957612710830492506004015b60648310611f1b576064830492506002015b600a83106106db5760010192915050565b60605f611f3a836002612caa565b611f45906002612cc1565b6001600160401b03811115611f5c57611f5c6126c4565b6040519080825280601f01601f191660200182016040528015611f86576020820181803683370190505b509050600360fc1b815f81518110611fa057611fa0612cd4565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611fce57611fce612cd4565b60200101906001600160f81b03191690815f1a9053505f611ff0846002612caa565b611ffb906001612cc1565b90505b6001811115612072576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061202f5761202f612cd4565b1a60f81b82828151811061204557612045612cd4565b60200101906001600160f81b03191690815f1a90535060049490941c9361206b81612ce8565b9050611ffe565b508315610ee85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161080b565b5f54610100900460ff166120e75760405162461bcd60e51b815260040161080b90612be3565b6120ef6123f6565b61210d6001600160a01b03821615612107578161182a565b3361182a565b5060c9805461ff001916610100179055565b5f54610100900460ff166121455760405162461bcd60e51b815260040161080b90612be3565b6001600160401b0346111561216d5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff166121b55760405162461bcd60e51b815260040161080b90612be3565b61012d6121c28382612d48565b5061012e6108ac8282612d48565b306001600160a01b038216036109be57604051630c292c9d60e21b815260040160405180910390fd5b61220281611b74565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610ee88383604051806060016040528060278152602001612e3e6027913961241c565b6001600160a01b0382166122b35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161080b565b5f81815261012f60205260409020546001600160a01b0316156123185760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161080b565b6123255f83836001611b34565b5f81815261012f60205260409020546001600160a01b03161561238a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161080b565b6001600160a01b0382165f818152610130602090815260408083208054600101905584835261012f90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f54610100900460ff166109e75760405162461bcd60e51b815260040161080b90612be3565b60605f5f856001600160a01b0316856040516124389190612e02565b5f60405180830381855af49150503d805f8114612470576040519150601f19603f3d011682016040523d82523d5f602084013e612475565b606091505b509150915061248686838387612490565b9695505050505050565b606083156124fe5782515f036124f7576001600160a01b0385163b6124f75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161080b565b50816109cd565b6109cd83838151156125135781518083602001fd5b8060405162461bcd60e51b815260040161080b91906125aa565b6001600160e01b0319811681146109be575f5ffd5b5f60208284031215612552575f5ffd5b8135610ee88161252d565b5f5b8381101561257757818101518382015260200161255f565b50505f910152565b5f815180845261259681602086016020860161255d565b601f01601f19169290920160200192915050565b602081525f610ee8602083018461257f565b5f602082840312156125cc575f5ffd5b5035919050565b6001600160a01b03811681146109be575f5ffd5b5f5f604083850312156125f8575f5ffd5b8235612603816125d3565b946020939093013593505050565b5f5f5f60608486031215612623575f5ffd5b833561262e816125d3565b9250602084013561263e816125d3565b929592945050506040919091013590565b5f6020828403121561265f575f5ffd5b8135610ee8816125d3565b80358015158114612679575f5ffd5b919050565b5f5f5f60608486031215612690575f5ffd5b83356001600160401b03811681146126a6575f5ffd5b9250602084013591506126bb6040850161266a565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126126e7575f5ffd5b81356001600160401b03811115612700576127006126c4565b604051601f8201601f19908116603f011681016001600160401b038111828210171561272e5761272e6126c4565b604052818152838201602001851015612745575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215612772575f5ffd5b823561277d816125d3565b915060208301356001600160401b03811115612797575f5ffd5b6127a3858286016126d8565b9150509250929050565b5f5f604083850312156127be575f5ffd5b82356127c9816125d3565b91506127d76020840161266a565b90509250929050565b5f5f604083850312156127f1575f5ffd5b823591506127d76020840161266a565b5f5f5f5f60808587031215612814575f5ffd5b843561281f816125d3565b9350602085013561282f816125d3565b92506040850135915060608501356001600160401b03811115612850575f5ffd5b61285c878288016126d8565b91505092959194509250565b5f5f60408385031215612879575f5ffd5b8235612884816125d3565b91506020830135612894816125d3565b809150509250929050565b5f5f83601f8401126128af575f5ffd5b5081356001600160401b038111156128c5575f5ffd5b6020830191508360208285010111156128dc575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b0312156128fa575f5ffd5b8835612905816125d3565b97506020890135612915816125d3565b96506040890135612925816125d3565b95506060890135945060808901356001600160401b03811115612946575f5ffd5b6129528b828c0161289f565b90955093505060a08901356001600160401b03811115612970575f5ffd5b61297c8b828c0161289f565b999c989b5096995094979396929594505050565b600181811c908216806129a457607f821691505b6020821081036129c257634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b5f60208284031215612b02575f5ffd5b5051919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6832ba3432b932bab69d60b91b81525f8451612b7e81600985016020890161255d565b600160fe1b6009918401918201528451612b9f81600a84016020890161255d565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b60018201528351612bd681601384016020880161255d565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612c3e575f5ffd5b8151610ee8816125d3565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f906124869083018461257f565b5f60208284031215612c8b575f5ffd5b8151610ee88161252d565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176106db576106db612c96565b808201808211156106db576106db612c96565b634e487b7160e01b5f52603260045260245ffd5b5f81612cf657612cf6612c96565b505f190190565b601f8211156108ac57805f5260205f20601f840160051c81016020851015612d225750805b601f840160051c820191505b81811015612d41575f8155600101612d2e565b5050505050565b81516001600160401b03811115612d6157612d616126c4565b612d7581612d6f8454612990565b84612cfd565b6020601f821160018114612da7575f8315612d905750848201515b5f19600385901b1c1916600184901b178455612d41565b5f84815260208120601f198516915b82811015612dd65787850151825560209485019460019092019101612db6565b5084821015612df357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f8251612e1381846020870161255d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220133dee54190dfd3eefa2c28c8581df544809a0e1d72b27140ecea85f4ca51a3564736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167001000000000000000000000000000010098": { + "contractName": "BridgedERC1155", + "storage": {}, + "code": "0x6080604052600436106101e5575f3560e01c8063715018a611610108578063a86f9d9e1161009d578063e30c39781161006d578063e30c397814610568578063e985e9c514610585578063ef8c4ae6146105cd578063f242432a146105ec578063f2fde38b1461060b575f5ffd5b8063a86f9d9e146104d5578063b390c0ab146104f4578063d81d0a1514610513578063e07baba614610532575f5ffd5b80638abf6077116100d85780638abf6077146104715780638da5cb5b1461048557806395d89b41146104a2578063a22cb465146104b6575f5ffd5b8063715018a61461041557806379ba5097146104295780637cf8ed0d1461043d5780638456cb591461045d575f5ffd5b80633ab76e9f1161017e5780634e1273f41161014e5780634e1273f4146103a25780634f1ef286146103ce57806352d1902d146103e15780635c975abb146103f5575f5ffd5b80633ab76e9f146103225780633eb6b8cf146103595780633f4ba83a1461037857806349d126051461038c575f5ffd5b806326afaadd116101b957806326afaadd1461028a5780632eb2c2d6146102ce5780633075db56146102ef5780633659cfe614610303575f5ffd5b8062fdd58e146101e957806301ffc9a71461021b57806306fdde031461024a5780630e89341c1461026b575b5f5ffd5b3480156101f4575f5ffd5b506102086102033660046126ae565b61062a565b6040519081526020015b60405180910390f35b348015610226575f5ffd5b5061023a6102353660046126ed565b6106c4565b6040519015158152602001610212565b348015610255575f5ffd5b5061025e610703565b6040516102129190612755565b348015610276575f5ffd5b5061025e610285366004612767565b610790565b348015610295575f5ffd5b506102af61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610212565b3480156102d9575f5ffd5b506102ed6102e83660046128c0565b610823565b005b3480156102fa575f5ffd5b5061023a61086f565b34801561030e575f5ffd5b506102ed61031d366004612970565b610887565b34801561032d575f5ffd5b50609754610341906001600160a01b031681565b6040516001600160a01b039091168152602001610212565b348015610364575f5ffd5b5061034161037336600461299f565b61094e565b348015610383575f5ffd5b506102ed610962565b348015610397575f5ffd5b506102086101605481565b3480156103ad575f5ffd5b506103c16103bc3660046129e5565b610976565b6040516102129190612aee565b6102ed6103dc366004612b00565b610a95565b3480156103ec575f5ffd5b50610208610b4e565b348015610400575f5ffd5b5061023a60c954610100900460ff1660021490565b348015610420575f5ffd5b506102ed610c00565b348015610434575f5ffd5b506102ed610c11565b348015610448575f5ffd5b5061015f54610341906001600160a01b031681565b348015610468575f5ffd5b506102ed610c88565b34801561047c575f5ffd5b50610341610c9b565b348015610490575f5ffd5b506033546001600160a01b0316610341565b3480156104ad575f5ffd5b5061025e610ca9565b3480156104c1575f5ffd5b506102ed6104d0366004612b42565b610cb7565b3480156104e0575f5ffd5b506103416104ef366004612b75565b610cc2565b3480156104ff575f5ffd5b506102ed61050e366004612b96565b610cd5565b34801561051e575f5ffd5b506102ed61052d366004612bfd565b610da7565b34801561053d575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b039091168152602001610212565b348015610573575f5ffd5b506065546001600160a01b0316610341565b348015610590575f5ffd5b5061023a61059f366004612c7d565b6001600160a01b039182165f90815261012e6020908152604080832093909416825291909152205460ff1690565b3480156105d8575f5ffd5b506102ed6105e7366004612cf1565b610eeb565b3480156105f7575f5ffd5b506102ed610606366004612d9e565b61106b565b348015610616575f5ffd5b506102ed610625366004612970565b6110b0565b5f6001600160a01b0383166106995760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f81815261012d602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b03198216634d22606360e01b14806106f457506001600160e01b031982166377c6257360e11b145b806106be57506106be82611121565b610162805461071190612df5565b80601f016020809104026020016040519081016040528092919081815260200182805461073d90612df5565b80156107885780601f1061075f57610100808354040283529160200191610788565b820191905f5260205f20905b81548152906001019060200180831161076b57829003601f168201915b505050505081565b606061012f80546107a090612df5565b80601f01602080910402602001604051908101604052809291908181526020018280546107cc90612df5565b80156108175780601f106107ee57610100808354040283529160200191610817565b820191905f5260205f20905b8154815290600101906020018083116107fa57829003601f168201915b50505050509050919050565b6001600160a01b03851633148061083f575061083f853361059f565b61085b5760405162461bcd60e51b815260040161069090612e2d565b6108688585858585611170565b5050505050565b5f600261087e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100981630036108cf5760405162461bcd60e51b815260040161069090612e7b565b7f00000000000000000000000001670010000000000000000000000000000100986001600160a01b031661090161130b565b6001600160a01b0316146109275760405162461bcd60e51b815260040161069090612ec7565b61093081611326565b604080515f8082526020820190925261094b9183919061132e565b50565b5f61095a848484611498565b949350505050565b61096a6114f4565b610974335f611584565b565b606081518351146109db5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610690565b5f83516001600160401b038111156109f5576109f561277e565b604051908082528060200260200182016040528015610a1e578160200160208202803683370190505b5090505f5b8451811015610a8d57610a68858281518110610a4157610a41612f13565b6020026020010151858381518110610a5b57610a5b612f13565b602002602001015161062a565b828281518110610a7a57610a7a612f13565b6020908102919091010152600101610a23565b509392505050565b6001600160a01b037f0000000000000000000000000167001000000000000000000000000000010098163003610add5760405162461bcd60e51b815260040161069090612e7b565b7f00000000000000000000000001670010000000000000000000000000000100986001600160a01b0316610b0f61130b565b6001600160a01b031614610b355760405162461bcd60e51b815260040161069090612ec7565b610b3e82611326565b610b4a8282600161132e565b5050565b5f306001600160a01b037f00000000000000000000000001670010000000000000000000000000000100981614610bed5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610690565b505f5160206134ec5f395f51905f525b90565b610c08611588565b6109745f6115e2565b60655433906001600160a01b03168114610c7f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610690565b61094b816115e2565b610c906115fb565b610974336001611584565b5f610ca461130b565b905090565b610161805461071190612df5565b610b4a33838361166c565b5f610cce468484611498565b9392505050565b610ce960c954610100900460ff1660021490565b15610d075760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610d23816001610cc2565b6001600160a01b0316336001600160a01b031614610d5457604051630d85cccf60e11b815260040160405180910390fd5b6002610d6260c95460ff1690565b60ff1603610d835760405163dfc60d8560e01b815260040160405180910390fd5b610d8d600261174c565b610d98338484611762565b610da2600161174c565b505050565b610dbb60c954610100900460ff1660021490565b15610dd95760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610df5816001610cc2565b6001600160a01b0316336001600160a01b031614610e2657604051630d85cccf60e11b815260040160405180910390fd5b6002610e3460c95460ff1690565b60ff1603610e555760405163dfc60d8560e01b815260040160405180910390fd5b610e5f600261174c565b610ed9868686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284375f920182905250604080516020810190915290815292506118f6915050565b610ee3600161174c565b505050505050565b5f54610100900460ff1615808015610f0957505f54600160ff909116105b80610f225750303b158015610f2257505f5460ff166001145b610f855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610690565b5f805460ff191660011790558015610fa6575f805461ff0019166101001790555b610fb08787611a78565b610fba8989611ab4565b610fdb610fd6888860405180602001604052805f815250611aee565b611b38565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905561016161100b858783612f6b565b5061016261101a838583612f6b565b508015611060575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6001600160a01b0385163314806110875750611087853361059f565b6110a35760405162461bcd60e51b815260040161069090612e2d565b6108688585858585611b67565b6110b8611588565b606580546001600160a01b0383166001600160a01b031990911681179091556110e96033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b03198216636cdb3d1360e11b148061115157506001600160e01b031982166303a24d0760e21b145b806106be57506301ffc9a760e01b6001600160e01b03198316146106be565b81518351146111915760405162461bcd60e51b815260040161069090613024565b6001600160a01b0384166111b75760405162461bcd60e51b81526004016106909061306c565b336111c6818787878787611c96565b5f5b84518110156112a5575f8582815181106111e4576111e4612f13565b602002602001015190505f85838151811061120157611201612f13565b6020908102919091018101515f84815261012d835260408082206001600160a01b038e1683529093529190912054909150818110156112525760405162461bcd60e51b8152600401610690906130b1565b5f83815261012d602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061129190849061310f565b9091555050600190930192506111c8915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112f5929190613122565b60405180910390a4610ee3818787878787611cd6565b5f5160206134ec5f395f51905f52546001600160a01b031690565b61094b611588565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561136157610da283611e30565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113bb575060408051601f3d908101601f191682019092526113b89181019061314f565b60015b61141e5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610690565b5f5160206134ec5f395f51905f52811461148c5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610690565b50610da2838383611ecb565b5f6114a38484611ef5565b905081806114b957506001600160a01b03811615155b848490916114eb57604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610690565b50509392505050565b61150860c954610100900460ff1660021490565b6115255760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610b4a5b6033546001600160a01b031633146109745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610690565b606580546001600160a01b031916905561094b81611f97565b61160f60c954610100900460ff1660021490565b1561162d5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161157a565b816001600160a01b0316836001600160a01b0316036116df5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610690565b6001600160a01b038381165f81815261012e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60c9805460ff191660ff92909216919091179055565b6001600160a01b0383166117c45760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610690565b335f6117cf84611fe8565b90505f6117db84611fe8565b90506117f983875f858560405180602001604052805f815250611c96565b5f85815261012d602090815260408083206001600160a01b038a168452909152902054848110156118785760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610690565b5f86815261012d602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091525f90525b50505050505050565b6001600160a01b0384166119565760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610690565b81518351146119775760405162461bcd60e51b815260040161069090613024565b33611986815f87878787611c96565b5f5b8451811015611a12578381815181106119a3576119a3612f13565b602002602001015161012d5f8784815181106119c1576119c1612f13565b602002602001015181526020019081526020015f205f886001600160a01b03166001600160a01b031681526020019081526020015f205f828254611a05919061310f565b9091555050600101611988565b50846001600160a01b03165f6001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a62929190613122565b60405180910390a4610868815f87878787611cd6565b6001600160a01b0382161580611a8c575080155b80611a9657504681145b15610b4a5760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611adc5760405163538ba4f960e01b815260040160405180910390fd5b611ae583612031565b610da28261208f565b6060611b04846001600160a01b031660146120ff565b611b0d84612294565b83604051602001611b2093929190613166565b60405160208183030381529060405290509392505050565b5f54610100900460ff16611b5e5760405162461bcd60e51b8152600401610690906131ee565b61094b81612323565b6001600160a01b038416611b8d5760405162461bcd60e51b81526004016106909061306c565b335f611b9885611fe8565b90505f611ba485611fe8565b9050611bb4838989858589611c96565b5f86815261012d602090815260408083206001600160a01b038c16845290915290205485811015611bf75760405162461bcd60e51b8152600401610690906130b1565b5f87815261012d602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611c3690849061310f565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611060848a8a8a8a8a612352565b611caa60c954610100900460ff1660021490565b15611cc85760405163bae6e2a960e01b815260040160405180910390fd5b611cd18461240c565b610ee3565b6001600160a01b0384163b15610ee35760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611d1a9089908990889088908890600401613239565b6020604051808303815f875af1925050508015611d54575060408051601f3d908101601f19168201909252611d5191810190613296565b60015b611e0057611d606132b1565b806308c379a003611d995750611d746132c9565b80611d7f5750611d9b565b8060405162461bcd60e51b81526004016106909190612755565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610690565b6001600160e01b0319811663bc197c8160e01b146118ed5760405162461bcd60e51b815260040161069090613343565b6001600160a01b0381163b611e9d5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610690565b5f5160206134ec5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611ed483612435565b5f82511180611ee05750805b15610da257611eef8383612474565b50505050565b6097545f906001600160a01b031680611f2157604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611f73573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095a919061338b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f8151811061202057612020612f13565b602090810291909101015292915050565b5f54610100900460ff166120575760405162461bcd60e51b8152600401610690906131ee565b61205f612499565b61207d6001600160a01b0382161561207757816115e2565b336115e2565b5060c9805461ff001916610100179055565b5f54610100900460ff166120b55760405162461bcd60e51b8152600401610690906131ee565b6001600160401b034611156120dd5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b60605f61210d8360026133a6565b61211890600261310f565b6001600160401b0381111561212f5761212f61277e565b6040519080825280601f01601f191660200182016040528015612159576020820181803683370190505b509050600360fc1b815f8151811061217357612173612f13565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106121a1576121a1612f13565b60200101906001600160f81b03191690815f1a9053505f6121c38460026133a6565b6121ce90600161310f565b90505b6001811115612245576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061220257612202612f13565b1a60f81b82828151811061221857612218612f13565b60200101906001600160f81b03191690815f1a90535060049490941c9361223e816133bd565b90506121d1565b508315610cce5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610690565b60605f6122a0836124bf565b60010190505f816001600160401b038111156122be576122be61277e565b6040519080825280601f01601f1916602001820160405280156122e8576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846122f257509392505050565b5f54610100900460ff166123495760405162461bcd60e51b8152600401610690906131ee565b61094b81612596565b6001600160a01b0384163b15610ee35760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061239690899089908890889088906004016133d2565b6020604051808303815f875af19250505080156123d0575060408051601f3d908101601f191682019092526123cd91810190613296565b60015b6123dc57611d606132b1565b6001600160e01b0319811663f23a6e6160e01b146118ed5760405162461bcd60e51b815260040161069090613343565b306001600160a01b0382160361094b57604051630c292c9d60e21b815260040160405180910390fd5b61243e81611e30565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610cce838360405180606001604052806027815260200161350c602791396125a3565b5f54610100900460ff166109745760405162461bcd60e51b8152600401610690906131ee565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106124fd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612529576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061254757662386f26fc10000830492506010015b6305f5e100831061255f576305f5e100830492506008015b612710831061257357612710830492506004015b60648310612585576064830492506002015b600a83106106be5760010192915050565b61012f610b4a8282613416565b60605f5f856001600160a01b0316856040516125bf91906134d0565b5f60405180830381855af49150503d805f81146125f7576040519150601f19603f3d011682016040523d82523d5f602084013e6125fc565b606091505b509150915061260d86838387612617565b9695505050505050565b606083156126855782515f0361267e576001600160a01b0385163b61267e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610690565b508161095a565b61095a8383815115611d7f5781518083602001fd5b6001600160a01b038116811461094b575f5ffd5b5f5f604083850312156126bf575f5ffd5b82356126ca8161269a565b946020939093013593505050565b6001600160e01b03198116811461094b575f5ffd5b5f602082840312156126fd575f5ffd5b8135610cce816126d8565b5f5b8381101561272257818101518382015260200161270a565b50505f910152565b5f8151808452612741816020860160208601612708565b601f01601f19169290920160200192915050565b602081525f610cce602083018461272a565b5f60208284031215612777575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b03811182821017156127b7576127b761277e565b6040525050565b5f6001600160401b038211156127d6576127d661277e565b5060051b60200190565b5f82601f8301126127ef575f5ffd5b81356127fa816127be565b6040516128078282612792565b80915082815260208101915060208360051b86010192508583111561282a575f5ffd5b602085015b8381101561284757803583526020928301920161282f565b5095945050505050565b5f82601f830112612860575f5ffd5b81356001600160401b038111156128795761287961277e565b604051612890601f8301601f191660200182612792565b8181528460208386010111156128a4575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a086880312156128d4575f5ffd5b85356128df8161269a565b945060208601356128ef8161269a565b935060408601356001600160401b03811115612909575f5ffd5b612915888289016127e0565b93505060608601356001600160401b03811115612930575f5ffd5b61293c888289016127e0565b92505060808601356001600160401b03811115612957575f5ffd5b61296388828901612851565b9150509295509295909350565b5f60208284031215612980575f5ffd5b8135610cce8161269a565b8035801515811461299a575f5ffd5b919050565b5f5f5f606084860312156129b1575f5ffd5b83356001600160401b03811681146129c7575f5ffd5b9250602084013591506129dc6040850161298b565b90509250925092565b5f5f604083850312156129f6575f5ffd5b82356001600160401b03811115612a0b575f5ffd5b8301601f81018513612a1b575f5ffd5b8035612a26816127be565b604051612a338282612792565b80915082815260208101915060208360051b850101925087831115612a56575f5ffd5b6020840193505b82841015612a81578335612a708161269a565b825260209384019390910190612a5d565b945050505060208301356001600160401b03811115612a9e575f5ffd5b612aaa858286016127e0565b9150509250929050565b5f8151808452602084019350602083015f5b82811015612ae4578151865260209586019590910190600101612ac6565b5093949350505050565b602081525f610cce6020830184612ab4565b5f5f60408385031215612b11575f5ffd5b8235612b1c8161269a565b915060208301356001600160401b03811115612b36575f5ffd5b612aaa85828601612851565b5f5f60408385031215612b53575f5ffd5b8235612b5e8161269a565b9150612b6c6020840161298b565b90509250929050565b5f5f60408385031215612b86575f5ffd5b82359150612b6c6020840161298b565b5f5f60408385031215612ba7575f5ffd5b50508035926020909101359150565b5f5f83601f840112612bc6575f5ffd5b5081356001600160401b03811115612bdc575f5ffd5b6020830191508360208260051b8501011115612bf6575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c11575f5ffd5b8535612c1c8161269a565b945060208601356001600160401b03811115612c36575f5ffd5b612c4288828901612bb6565b90955093505060408601356001600160401b03811115612c60575f5ffd5b612c6c88828901612bb6565b969995985093965092949392505050565b5f5f60408385031215612c8e575f5ffd5b8235612c998161269a565b91506020830135612ca98161269a565b809150509250929050565b5f5f83601f840112612cc4575f5ffd5b5081356001600160401b03811115612cda575f5ffd5b602083019150836020828501011115612bf6575f5ffd5b5f5f5f5f5f5f5f5f60c0898b031215612d08575f5ffd5b8835612d138161269a565b97506020890135612d238161269a565b96506040890135612d338161269a565b95506060890135945060808901356001600160401b03811115612d54575f5ffd5b612d608b828c01612cb4565b90955093505060a08901356001600160401b03811115612d7e575f5ffd5b612d8a8b828c01612cb4565b999c989b5096995094979396929594505050565b5f5f5f5f5f60a08688031215612db2575f5ffd5b8535612dbd8161269a565b94506020860135612dcd8161269a565b9350604086013592506060860135915060808601356001600160401b03811115612957575f5ffd5b600181811c90821680612e0957607f821691505b602082108103612e2757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b601f821115610da257805f5260205f20601f840160051c81016020851015612f4c5750805b601f840160051c820191505b81811015610868575f8155600101612f58565b6001600160401b03831115612f8257612f8261277e565b612f9683612f908354612df5565b83612f27565b5f601f841160018114612fc7575f8515612fb05750838201355b5f19600387901b1c1916600186901b178355610868565b5f83815260208120601f198716915b82811015612ff65786850135825560209485019460019092019101612fd6565b5086821015613012575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106be576106be6130fb565b604081525f6131346040830185612ab4565b82810360208401526131468185612ab4565b95945050505050565b5f6020828403121561315f575f5ffd5b5051919050565b6832ba3432b932bab69d60b91b81525f8451613189816009850160208901612708565b600160fe1b60099184019182015284516131aa81600a840160208901612708565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b600182015283516131e1816013840160208801612708565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190525f9061326490830186612ab4565b82810360608401526132768186612ab4565b9050828103608084015261328a818561272a565b98975050505050505050565b5f602082840312156132a6575f5ffd5b8151610cce816126d8565b5f60033d1115610bfd5760045f5f3e505f5160e01c90565b5f60443d10156132d65790565b6040513d600319016004823e80513d60248201116001600160401b03821117156132ff57505090565b80820180516001600160401b0381111561331a575050505090565b3d8401600319018282016020011115613334575050505090565b610a8d60208285010185612792565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b5f6020828403121561339b575f5ffd5b8151610cce8161269a565b80820281158282048414176106be576106be6130fb565b5f816133cb576133cb6130fb565b505f190190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f9061340b9083018461272a565b979650505050505050565b81516001600160401b0381111561342f5761342f61277e565b6134438161343d8454612df5565b84612f27565b6020601f821160018114613475575f831561345e5750848201515b5f19600385901b1c1916600184901b178455610868565b5f84815260208120601f198516915b828110156134a45787850151825560209485019460019092019101613484565b50848210156134c157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516134e1818460208701612708565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e1a94149d932c1a813deafcd7b9411af5601344bd1134141cd40fbf8494bcc0a64736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167001000000000000000000000000000000005": { + "contractName": "SignalServiceImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" + }, + "code": "0x6080604052600436106101c5575f3560e01c806379ba5097116100f2578063a86f9d9e11610092578063e30c397811610062578063e30c39781461052d578063f09a40161461054a578063f2fde38b14610569578063fe9fbb8014610588575f5ffd5b8063a86f9d9e1461048e578063ce9d0820146104ad578063dfc8ff1d146104cc578063e07baba61461050a575f5ffd5b80638da5cb5b116100cd5780638da5cb5b14610414578063910af6ed1461043157806391f3f74b146104505780639b527cfa1461046f575f5ffd5b806379ba5097146103d85780638456cb59146103ec5780638abf607714610400575f5ffd5b80633eb6b8cf1161016857806352d1902d1161013857806352d1902d146103715780635c975abb1461038557806366ca2bc0146103a5578063715018a6146103c4575f5ffd5b80633eb6b8cf146102fe5780633f4ba83a1461031d5780634f1ef286146103315780634f90a67414610344575f5ffd5b8063355bcc3d116101a3578063355bcc3d146102325780633659cfe6146102895780633ab76e9f146102a85780633ced0e08146102df575f5ffd5b80632d1fb389146101c95780633075db56146101ea57806332676bc614610213575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e3366004613523565b6105b6565b005b3480156101f5575f5ffd5b506101fe61065c565b60405190151581526020015b60405180910390f35b34801561021e575f5ffd5b506101fe61022d366004613556565b610674565b34801561023d575f5ffd5b5061027161024c366004613596565b60fb60209081525f92835260408084209091529082529020546001600160401b031681565b6040516001600160401b03909116815260200161020a565b348015610294575f5ffd5b506101e86102a33660046135b0565b61068a565b3480156102b3575f5ffd5b506097546102c7906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b3480156102ea575f5ffd5b506101fe6102f93660046135cb565b61075a565b348015610309575f5ffd5b506102c761031836600461360c565b6107a1565b348015610328575f5ffd5b506101e86107b7565b6101e861033f36600461371c565b6107cb565b34801561034f575f5ffd5b5061036361035e3660046135cb565b610884565b60405190815260200161020a565b34801561037c575f5ffd5b506103636108ca565b348015610390575f5ffd5b506101fe60c954610100900460ff1660021490565b3480156103b0575f5ffd5b506103636103bf366004613768565b61097b565b3480156103cf575f5ffd5b506101e8610987565b3480156103e3575f5ffd5b506101e8610998565b3480156103f7575f5ffd5b506101e8610a0f565b34801561040b575f5ffd5b506102c7610a22565b34801561041f575f5ffd5b506033546001600160a01b03166102c7565b34801561043c575f5ffd5b5061036361044b36600461377f565b610a30565b34801561045b575f5ffd5b5061036361046a366004613814565b610b0b565b34801561047a575f5ffd5b50610363610489366004613850565b610b76565b348015610499575f5ffd5b506102c76104a8366004613880565b610ba2565b3480156104b8575f5ffd5b506101e86104c736600461377f565b610bae565b3480156104d7575f5ffd5b506104eb6104e6366004613850565b610bc4565b604080516001600160401b03909316835260208301919091520161020a565b348015610515575f5ffd5b5060c9546201000090046001600160401b0316610271565b348015610538575f5ffd5b506065546001600160a01b03166102c7565b348015610555575f5ffd5b506101e86105643660046138a1565b610c58565b348015610574575f5ffd5b506101e86105833660046135b0565b610d67565b348015610593575f5ffd5b506101fe6105a23660046135b0565b60fc6020525f908152604090205460ff1681565b6105be610dd8565b6001600160a01b0382165f90815260fc602052604090205481151560ff9091161515036105fe576040516398f26f4560e01b815260040160405180910390fd5b6001600160a01b0382165f81815260fc6020908152604091829020805460ff191685151590811790915591519182527f4c0079b9bcd37cd5d29a13938effd97c881798cbc6bd52a3026a29d94b27d1bf910160405180910390a25050565b5f600261066b60c95460ff1690565b60ff1614905090565b5f61067f8383610e32565b151590505b92915050565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000000051630036106db5760405162461bcd60e51b81526004016106d2906138d8565b60405180910390fd5b7f00000000000000000000000001670010000000000000000000000000000000056001600160a01b031661070d610e94565b6001600160a01b0316146107335760405162461bcd60e51b81526004016106d290613924565b61073c81610eaf565b604080515f8082526020820190925261075791839190610eb7565b50565b5f8180820361077c5760405163ec73295960e01b815260040160405180910390fd5b5f610788878787610b76565b9050836107953083610e32565b14979650505050505050565b5f6107ad848484611021565b90505b9392505050565b6107bf61107d565b6107c9335f61110d565b565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000000051630036108135760405162461bcd60e51b81526004016106d2906138d8565b7f00000000000000000000000001670010000000000000000000000000000000056001600160a01b0316610845610e94565b6001600160a01b03161461086b5760405162461bcd60e51b81526004016106d290613924565b61087482610eaf565b61088082826001610eb7565b5050565b335f90815260fc602052604081205460ff166108b357604051631f67751f60e01b815260040160405180910390fd5b6108bf85858585611126565b90505b949350505050565b5f306001600160a01b037f000000000000000000000000016700100000000000000000000000000000000516146109695760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106d2565b505f516020613eb85f395f51905f5290565b5f610684338384611208565b61098f610dd8565b6107c95f6112e1565b60655433906001600160a01b03168114610a065760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106d2565b610757816112e1565b610a176112fa565b6107c933600161110d565b5f610a2b610e94565b905090565b5f610a4560c954610100900460ff1660021490565b15610a635760405163bae6e2a960e01b815260040160405180910390fd5b6002610a7160c95460ff1690565b60ff1603610a925760405163dfc60d8560e01b815260040160405180910390fd5b60c9805460ff191660021790555f610aaf8787878787600161136b565b90505f5b8151811015610af257610ade828281518110610ad157610ad1613970565b6020026020010151611827565b610ae89084613998565b9250600101610ab3565b505060c9805460ff191660011790555b95945050505050565b6040516514d251d3905360d21b60208201526001600160c01b031960c085901b1660268201526bffffffffffffffffffffffff19606084901b16602e820152604281018290525f906062015b6040516020818303038152906040528051906020012090509392505050565b604080516001600160401b03808616602083015291810184905290821660608201525f90608001610b57565b5f6107b0468484611021565b610bbc85858585855f61136b565b505050505050565b5f5f826001600160401b03165f03610c00576001600160401b038086165f90815260fb6020908152604080832088845290915290205416610c02565b825b91506001600160401b03821615610c50575f610c1f868685610b76565b9050610c2b3082610e32565b91505f829003610c4e5760405163738afa0560e01b815260040160405180910390fd5b505b935093915050565b5f54610100900460ff1615808015610c7657505f54600160ff909116105b80610c8f5750303b158015610c8f57505f5460ff166001145b610cf25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d2565b5f805460ff191660011790558015610d13575f805461ff0019166101001790555b610d1d838361196b565b8015610d62575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610d6f610dd8565b606580546001600160a01b0383166001600160a01b03199091168117909155610da06033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146107c95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d2565b5f826001600160a01b038116610e5b5760405163538ba4f960e01b815260040160405180910390fd5b825f819003610e7d5760405163ec73295960e01b815260040160405180910390fd5b5f610e89468787610b0b565b549695505050505050565b5f516020613eb85f395f51905f52546001600160a01b031690565b610757610dd8565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610eea57610d62836119a5565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610f44575060408051601f3d908101601f19168201909252610f41918101906139ab565b60015b610fa75760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106d2565b5f516020613eb85f395f51905f5281146110155760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106d2565b50610d62838383611a40565b5f61102c8484611a6a565b9050818061104257506001600160a01b03811615155b8484909161107457604051632b0d65db60e01b81526001600160401b03909216600483015260248201526044016106d2565b50509392505050565b61109160c954610100900460ff1660021490565b6110ae5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b5f611132858585610b76565b905061113f308284611208565b506001600160401b038581165f90815260fb60209081526040808320888452909152902054818516911610156111a9576001600160401b038581165f90815260fb602090815260408083208884529091529020805467ffffffffffffffff19169185169190911790555b83836001600160401b0316866001600160401b03167fde247c825b1fb2d7ff9e0e771cba6f9e757ad04479fcdc135d88ae91fd50b37d85856040516111f8929190918252602082015260400190565b60405180910390a4949350505050565b5f836001600160a01b0381166112315760405163538ba4f960e01b815260040160405180910390fd5b835f8190036112535760405163ec73295960e01b815260040160405180910390fd5b835f8190036112755760405163ec73295960e01b815260040160405180910390fd5b611280468888610b0b565b858155604080516001600160a01b038a16815260208101899052908101829052606081018790529094507f0ad2d108660a211f47bf7fb43a0443cae181624995d3d42b88ee6879d200e9739060800160405180910390a15050509392505050565b606580546001600160a01b031916905561075781611b0c565b61130e60c954610100900460ff1660021490565b1561132c5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611103565b6060856001600160a01b0381166113955760405163538ba4f960e01b815260040160405180910390fd5b855f8190036113b75760405163ec73295960e01b815260040160405180910390fd5b5f6113c486880188613a7f565b905080515f036113e757604051630b92daef60e21b815260040160405180910390fd5b5f600182516113f69190613bc5565b6001600160401b0381111561140d5761140d613645565b604051908082528060200260200182016040528015611436578160200160208202803683370190505b50905085156114c95781516001600160401b0381111561145857611458613645565b6040519080825280602002602001820160405280156114c557816020015b6114b26040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a081018290529060c082015290565b8152602001906001900390816114765790505b5094505b8a8a8a805f6114ea856d7369676e616c5f7365727669636560901b836107a1565b9050306001600160a01b0382160361151557604051637556223560e11b815260040160405180910390fd5b61154d6040805160c0810182525f80825260208201819052918101829052906060820190815260200160608152602001606081525090565b5f5f5f5f5b8b518110156117db578b818151811061156d5761156d613970565b602002602001015194505f5b818110156115d757855f01516001600160401b03168c82815181106115a0576115a0613970565b60200260200101516001600160401b0316036115cf576040516348362c2760e11b815260040160405180910390fd5b600101611579565b506115e68a8a8a8a898b611b5d565b93508a518114915081156116265784516001600160401b0316461461161e576040516338bf822760e21b815260040160405180910390fd5b3095506116d1565b845f01518b828151811061163c5761163c613970565b6001600160401b039283166020918202929092010152855116158061166a575084516001600160401b031646145b1561168857604051637556223560e11b815260040160405180910390fd5b84516116a6906d7369676e616c5f7365727669636560901b5f6107a1565b9550306001600160a01b038716036116d157604051637556223560e11b815260040160405180910390fd5b608085015151151592508f15611765576040518060e00160405280866040015181526020018581526020018b6001600160401b0316815260200186602001516001600160401b03168152602001841515815260200183151581526020018660600151600381111561174457611744613bd8565b8152508f828151811061175957611759613970565b60200260200101819052505b6117c08a84611794577fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf56117b6565b7f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1695b8760200151610b76565b604086015186519b5096995097509495508794600101611552565b508515806117f257506117ee3088610e32565b8614155b156118105760405163738afa0560e01b815260040160405180910390fd5b505050505050505050505050509695505050505050565b5f8060038360c00151600381111561184157611841613bd8565b1480611862575060028360c00151600381111561186057611860613bd8565b145b9050808015611872575082608001515b801561188057508260a00151155b156118c257600191506118c083604001517f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1698560600151865f0151611126565b505b5f60038460c0015160038111156118db576118db613bd8565b14806118fc575060018460c0015160038111156118fa576118fa613bd8565b145b9050808015611918575083608001518061191857508360a00151155b1561196457611928600184613998565b925061196284604001517fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf586606001518760200151611126565b505b5050919050565b806001600160a01b0381166119935760405163538ba4f960e01b815260040160405180910390fd5b61199c83611bfc565b610d6282611c5a565b6001600160a01b0381163b611a125760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106d2565b5f516020613eb85f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611a4983611cca565b5f82511180611a555750805b15610d6257611a648383611d09565b50505050565b6097545f906001600160a01b031680611a9657604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611ae8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c29190613bec565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f856001600160a01b038116611b865760405163538ba4f960e01b815260040160405180910390fd5b855f819003611ba85760405163ec73295960e01b815260040160405180910390fd5b855f819003611bca5760405163ec73295960e01b815260040160405180910390fd5b611bee866040015186611bde8d8d8d610b0b565b8a8a608001518b60a00151611d2e565b9a9950505050505050505050565b5f54610100900460ff16611c225760405162461bcd60e51b81526004016106d290613c07565b611c2a611e3b565b611c486001600160a01b03821615611c4257816112e1565b336112e1565b5060c9805461ff001916610100179055565b5f54610100900460ff16611c805760405162461bcd60e51b81526004016106d290613c07565b6001600160401b03461115611ca85760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b611cd3816119a5565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606107b08383604051806060016040528060278152602001613ed860279139611e61565b5f82515f14611dd6576040516bffffffffffffffffffffffff19606088901b1660208201525f90611d7290603401604051602081830303815290604052858a611ed5565b905080515f03611d9557604051630414cd5b60e31b815260040160405180910390fd5b5f611d9f82611eee565b9050611dc481600281518110611db757611db7613970565b6020026020010151611f01565b611dcd90613c52565b92505050611dd9565b50855b5f611e1086604051602001611df091815260200190565b60408051601f19818403018152919052611e0987611f80565b8585611f93565b905080611e3057604051638d9a4db360e01b815260040160405180910390fd5b509695505050505050565b5f54610100900460ff166107c95760405162461bcd60e51b81526004016106d290613c07565b60605f5f856001600160a01b031685604051611e7d9190613c9a565b5f60405180830381855af49150503d805f8114611eb5576040519150601f19603f3d011682016040523d82523d5f602084013e611eba565b606091505b5091509150611ecb86838387611fac565b9695505050505050565b60605f611ee185612024565b9050610b02818585612056565b6060610684611efc836128c4565b612916565b60605f5f5f611f0f85612a94565b919450925090505f816001811115611f2957611f29613bd8565b14611f47576040516307fe6cb960e21b815260040160405180910390fd5b611f518284613998565b855114611f7157604051630b8aa6f760e31b815260040160405180910390fd5b610b0285602001518484612d77565b6060610684611f8e83612e07565b612f1b565b5f5f611f9e86612024565b9050611ecb81868686612f73565b6060831561201a5782515f03612013576001600160a01b0385163b6120135760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106d2565b50816108c2565b6108c28383612f99565b6060818051906020012060405160200161204091815260200190565b6040516020818303038152906040529050919050565b60605f8451116120a05760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b60448201526064016106d2565b5f6120aa84612fc3565b90505f6120b6866130a6565b90505f846040516020016120cc91815260200190565b60408051601f1981840301815291905290505f805b845181101561286d575f8582815181106120fd576120fd613970565b60200260200101519050845183111561216f5760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b60648201526084016106d2565b825f0361220d57805180516020918201206040516121bc9261219692910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6122085760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016106d2565b612303565b80515160201161229357805180516020918201206040516122379261219692910190815260200190565b6122085760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b60648201526084016106d2565b8051845160208087019190912082519190920120146123035760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b60648201526084016106d2565b61230f60106001613998565b816020015151036124a757845183036124415761233c8160200151601081518110611db757611db7613970565b96505f8751116123b45760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016106d2565b600186516123c29190613bc5565b82146124365760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016106d2565b5050505050506107b0565b5f85848151811061245457612454613970565b602001015160f81c60f81b60f81c90505f82602001518260ff168151811061247e5761247e613970565b6020026020010151905061249181613107565b955061249e600186613998565b94505050612864565b60028160200151510361280b575f6124be8261312b565b90505f815f815181106124d3576124d3613970565b016020015160f81c90505f6124e9600283613cc9565b6124f4906002613cea565b90505f612504848360ff1661314e565b90505f6125118a8961314e565b90505f61251e8383613183565b9050808351146125965760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016106d2565b60ff8516600214806125ab575060ff85166003145b1561274b57808251146126265760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016106d2565b6126408760200151600181518110611db757611db7613970565b9c505f8d51116126b85760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016106d2565b60018c516126c69190613bc5565b881461273a5760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016106d2565b5050505050505050505050506107b0565b60ff8516158061275e575060ff85166001145b1561279d5761278a876020015160018151811061277d5761277d613970565b6020026020010151613107565b9950612796818a613998565b9850612800565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b60648201526084016106d2565b505050505050612864565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b60648201526084016106d2565b506001016120e1565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b60648201526084016106d2565b604080518082019091525f808252602082015281515f036128f857604051635ab458fb60e01b815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60605f5f5f61292485612a94565b91945092509050600181600181111561293f5761293f613bd8565b1461295d576040516325ce355f60e11b815260040160405180910390fd5b84516129698385613998565b1461298757604051630b8aa6f760e31b815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091525f808252602082015281526020019060019003908161299e5790505093505f835b8651811015612a88575f5f612a0d6040518060400160405280858c5f01516129f19190613bc5565b8152602001858c60200151612a069190613998565b9052612a94565b509150915060405180604001604052808383612a299190613998565b8152602001848b60200151612a3e9190613998565b815250888581518110612a5357612a53613970565b6020908102919091010152612a69600185613998565b9350612a758183613998565b612a7f9084613998565b925050506129c9565b50845250919392505050565b5f5f5f835f01515f03612aba57604051635ab458fb60e01b815260040160405180910390fd5b602084015180515f1a607f8111612adc575f60015f9450945094505050612d70565b60b78111612b71575f612af0608083613bc5565b905080875f015111612b15576040516366c9448560e01b815260040160405180910390fd5b6001838101516001600160f81b0319169082148015612b415750600160ff1b6001600160f81b03198216105b15612b5f5760405163babb01dd60e01b815260040160405180910390fd5b506001955093505f9250612d70915050565b60bf8111612c4f575f612b8560b783613bc5565b905080875f015111612baa576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612bda5760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612c095760405163babb01dd60e01b815260040160405180910390fd5b612c138184613998565b895111612c33576040516366c9448560e01b815260040160405180910390fd5b612c3e836001613998565b975095505f9450612d709350505050565b60f78111612c99575f612c6360c083613bc5565b905080875f015111612c88576040516366c9448560e01b815260040160405180910390fd5b600195509350849250612d70915050565b5f612ca560f783613bc5565b905080875f015111612cca576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612cfa5760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612d295760405163babb01dd60e01b815260040160405180910390fd5b612d338184613998565b895111612d53576040516366c9448560e01b815260040160405180910390fd5b612d5e836001613998565b9750955060019450612d709350505050565b9193909250565b6060816001600160401b03811115612d9157612d91613645565b6040519080825280601f01601f191660200182016040528015612dbb576020820181803683370190505b50905081156107b0575f612dcf8486613998565b9050602082015f5b84811015612def578281015182820152602001612dd7565b84811115612dfd575f858301525b5050509392505050565b60605f82604051602001612e1d91815260200190565b60408051601f1981840301815291905290505f5b6020811015612e6957818181518110612e4c57612e4c613970565b01602001516001600160f81b0319165f03612e6957600101612e31565b612e74816020613bc5565b6001600160401b03811115612e8b57612e8b613645565b6040519080825280601f01601f191660200182016040528015612eb5576020820181803683370190505b5092505f5b8351811015611962578282612ece81613d03565b935081518110612ee057612ee0613970565b602001015160f81c60f81b848281518110612efd57612efd613970565b60200101906001600160f81b03191690815f1a905350600101612eba565b606081516001148015612f4757506080825f81518110612f3d57612f3d613970565b016020015160f81c105b15612f50575090565b612f5c82516080613206565b82604051602001612040929190613d1b565b919050565b5f6108bf84612f83878686612056565b8051602091820120825192909101919091201490565b815115612fa95781518083602001fd5b8060405162461bcd60e51b81526004016106d29190613d49565b8051606090806001600160401b03811115612fe057612fe0613645565b60405190808252806020026020018201604052801561302557816020015b6040805180820190915260608082526020820152815260200190600190039081612ffe5790505b5091505f5b8181101561196457604051806040016040528085838151811061304f5761304f613970565b6020026020010151815260200161307e86848151811061307157613071613970565b6020026020010151611eee565b81525083828151811061309357613093613970565b602090810291909101015260010161302a565b606080604051905082518060011b603f8101601f191683016040528083525060208401602083015f5b838110156130fc578060011b8201818401515f1a8060041c8253600f8116600183015350506001016130cf565b509295945050505050565b60606020825f0151106131225761311d82611f01565b610684565b610684826133ab565b606061068461314983602001515f81518110611db757611db7613970565b6130a6565b60608251821061316c575060408051602081019091525f8152610684565b6107b0838384865161317e9190613bc5565b6133bf565b5f5f8251845110613195578251613198565b83515b90505b80821080156131ef57508282815181106131b7576131b7613970565b602001015160f81c60f81b6001600160f81b0319168483815181106131de576131de613970565b01602001516001600160f81b031916145b156131ff5781600101915061319b565b5092915050565b6060603883101561326a576040805160018082528183019092529060208201818036833701905050905061323a8284613d7b565b60f81b815f8151811061324f5761324f613970565b60200101906001600160f81b03191690815f1a905350610684565b5f60015b6132788186613d94565b1561329e578161328781613d03565b9250613297905061010082613da7565b905061326e565b6132a9826001613998565b6001600160401b038111156132c0576132c0613645565b6040519080825280601f01601f1916602001820160405280156132ea576020820181803683370190505b5092506132f78483613d7b565b613302906037613d7b565b60f81b835f8151811061331757613317613970565b60200101906001600160f81b03191690815f1a905350600190505b8181116133a3576101006133468284613bc5565b61335290610100613e99565b61335c9087613d94565b6133669190613ea4565b60f81b83828151811061337b5761337b613970565b60200101906001600160f81b03191690815f1a9053508061339b81613d03565b915050613332565b505092915050565b606061068482602001515f845f0151612d77565b60608182601f0110156134055760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d2565b8282840110156134485760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d2565b8183018451101561348f5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016106d2565b6060821580156134ad5760405191505f8252602082016040526134f7565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156134e65780518352602092830192016134ce565b5050858452601f01601f1916604052505b50949350505050565b6001600160a01b0381168114610757575f5ffd5b80358015158114612f6e575f5ffd5b5f5f60408385031215613534575f5ffd5b823561353f81613500565b915061354d60208401613514565b90509250929050565b5f5f60408385031215613567575f5ffd5b823561357281613500565b946020939093013593505050565b80356001600160401b0381168114612f6e575f5ffd5b5f5f604083850312156135a7575f5ffd5b61357283613580565b5f602082840312156135c0575f5ffd5b81356107b081613500565b5f5f5f5f608085870312156135de575f5ffd5b6135e785613580565b9350602085013592506135fc60408601613580565b9396929550929360600135925050565b5f5f5f6060848603121561361e575f5ffd5b61362784613580565b92506020840135915061363c60408501613514565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b038111828210171561367b5761367b613645565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136a9576136a9613645565b604052919050565b5f82601f8301126136c0575f5ffd5b81356001600160401b038111156136d9576136d9613645565b6136ec601f8201601f1916602001613681565b818152846020838601011115613700575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561372d575f5ffd5b823561373881613500565b915060208301356001600160401b03811115613752575f5ffd5b61375e858286016136b1565b9150509250929050565b5f60208284031215613778575f5ffd5b5035919050565b5f5f5f5f5f60808688031215613793575f5ffd5b61379c86613580565b945060208601356137ac81613500565b93506040860135925060608601356001600160401b038111156137cd575f5ffd5b8601601f810188136137dd575f5ffd5b80356001600160401b038111156137f2575f5ffd5b886020828401011115613803575f5ffd5b959894975092955050506020019190565b5f5f5f60608486031215613826575f5ffd5b61382f84613580565b9250602084013561383f81613500565b929592945050506040919091013590565b5f5f5f60608486031215613862575f5ffd5b61386b84613580565b92506020840135915061363c60408501613580565b5f5f60408385031215613891575f5ffd5b8235915061354d60208401613514565b5f5f604083850312156138b2575f5ffd5b82356138bd81613500565b915060208301356138cd81613500565b809150509250929050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561068457610684613984565b5f602082840312156139bb575f5ffd5b5051919050565b5f6001600160401b038211156139da576139da613645565b5060051b60200190565b803560048110612f6e575f5ffd5b5f82601f830112613a01575f5ffd5b8135613a14613a0f826139c2565b613681565b8082825260208201915060208360051b860101925085831115613a35575f5ffd5b602085015b83811015613a755780356001600160401b03811115613a57575f5ffd5b613a66886020838a01016136b1565b84525060209283019201613a3a565b5095945050505050565b5f60208284031215613a8f575f5ffd5b81356001600160401b03811115613aa4575f5ffd5b8201601f81018413613ab4575f5ffd5b8035613ac2613a0f826139c2565b8082825260208201915060208360051b850101925086831115613ae3575f5ffd5b602084015b83811015611e305780356001600160401b03811115613b05575f5ffd5b850160c0818a03601f19011215613b1a575f5ffd5b613b22613659565b613b2e60208301613580565b8152613b3c60408301613580565b602082015260608201356040820152613b57608083016139e4565b606082015260a08201356001600160401b03811115613b74575f5ffd5b613b838b6020838601016139f2565b60808301525060c08201356001600160401b03811115613ba1575f5ffd5b613bb08b6020838601016139f2565b60a08301525084525060209283019201613ae8565b8181038181111561068457610684613984565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215613bfc575f5ffd5b81516107b081613500565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b80516020808301519190811015613c72575f198160200360031b1b821691505b50919050565b5f5b83811015613c92578181015183820152602001613c7a565b50505f910152565b5f8251613cab818460208701613c78565b9190910192915050565b634e487b7160e01b5f52601260045260245ffd5b5f60ff831680613cdb57613cdb613cb5565b8060ff84160691505092915050565b60ff828116828216039081111561068457610684613984565b5f60018201613d1457613d14613984565b5060010190565b5f8351613d2c818460208801613c78565b835190830190613d40818360208801613c78565b01949350505050565b602081525f8251806020840152613d67816040850160208701613c78565b601f01601f19169190910160400192915050565b60ff818116838216019081111561068457610684613984565b5f82613da257613da2613cb5565b500490565b808202811582820484141761068457610684613984565b6001815b6001841115610c5057808504811115613ddd57613ddd613984565b6001841615613deb57908102905b60019390931c928002613dc2565b5f82613e0757506001610684565b81613e1357505f610684565b8160018114613e295760028114613e3357613e4f565b6001915050610684565b60ff841115613e4457613e44613984565b50506001821b610684565b5060208310610133831016604e8410600b8410161715613e72575081810a610684565b613e7e5f198484613dbe565b805f1904821115613e9157613e91613984565b029392505050565b5f6107b08383613df9565b5f82613eb257613eb2613cb5565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a72da9d2cfe4d40cfd2a5a981964063c9828a49999cb5607ce6fc7897bbe44e764736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670010000000000000000000000000000000005": { + "contractName": "SignalService", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670010000000000000000000000000000000006", + "0xe3ad9bc7a782493ccba4f8a469cc3f9e8fb5647c2076401c8a7c4945a999c777": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000000005" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167001000000000000000000000000000010001": { + "contractName": "TaikoL2Impl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" + }, + "code": "0x6080604052600436106101fc575f3560e01c80638456cb5911610113578063da69d3db1161009d578063e902461a1161006d578063e902461a146105d4578063ee82ac5e146105ee578063f2fde38b1461060d578063f940e3851461062c578063fd85eb2d1461064b575f5ffd5b8063da69d3db14610560578063dac5df781461057f578063e07baba614610594578063e30c3978146105b7575f5ffd5b80639ee512f2116100e35780639ee512f21461049b578063a7137c0f146104c0578063a7e022d1146104e6578063a86f9d9e14610522578063b8c7b30c14610541575f5ffd5b80638456cb5914610412578063893f5460146104265780638abf60771461046a5780638da5cb5b1461047e575f5ffd5b80633eb6b8cf11610194578063539b8ade11610164578063539b8ade146103855780635950f9f1146103ab5780635c975abb146103ca578063715018a6146103ea57806379ba5097146103fe575f5ffd5b80633eb6b8cf1461031d5780633f4ba83a1461033c5780634f1ef2861461035057806352d1902d14610363575f5ffd5b806333d5ac9b116101cf57806333d5ac9b1461028d578063356aec04146102b35780633659cfe6146102c55780633ab76e9f146102e6575f5ffd5b806312622e5b14610200578063136dc4a81461023c5780632f9804731461025b5780633075db5614610279575b5f5ffd5b34801561020b575f5ffd5b5060fe5461021f906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b348015610247575f5ffd5b5061021f610256366004612554565b61066a565b348015610266575f5ffd5b505f5b6040519015158152602001610233565b348015610284575f5ffd5b50610269610684565b348015610298575f5ffd5b5060fd5461021f90600160401b90046001600160401b031681565b3480156102be575f5ffd5b505f61021f565b3480156102d0575f5ffd5b506102e46102df3660046125a8565b61069c565b005b3480156102f1575f5ffd5b50609754610305906001600160a01b031681565b6040516001600160a01b039091168152602001610233565b348015610328575f5ffd5b506103056103373660046125d7565b61076c565b348015610347575f5ffd5b506102e4610780565b6102e461035e366004612628565b610794565b34801561036e575f5ffd5b5061037761084d565b604051908152602001610233565b348015610390575f5ffd5b5060fd5461021f90600160801b90046001600160401b031681565b3480156103b6575f5ffd5b506102e46103c53660046126eb565b6108fe565b3480156103d5575f5ffd5b5061026960c954610100900460ff1660021490565b3480156103f5575f5ffd5b506102e4610b32565b348015610409575f5ffd5b506102e4610b43565b34801561041d575f5ffd5b506102e4610bba565b348015610431575f5ffd5b50610445610440366004612763565b610bcd565b604080519384526001600160401b039283166020850152911690820152606001610233565b348015610475575f5ffd5b50610305610cf9565b348015610489575f5ffd5b506033546001600160a01b0316610305565b3480156104a6575f5ffd5b5061030571777735367b36bc9b61c50022d9d0700db4ec81565b3480156104cb575f5ffd5b5060fd5461021f90600160c01b90046001600160401b031681565b3480156104f1575f5ffd5b5061050561050036600461279b565b610d07565b604080519283526001600160401b03909116602083015201610233565b34801561052d575f5ffd5b5061030561053c3660046127cc565b610d22565b34801561054c575f5ffd5b5060fd5461021f906001600160401b031681565b34801561056b575f5ffd5b506102e461057a3660046127fa565b610d37565b34801561058a575f5ffd5b5061037760fc5481565b34801561059f575f5ffd5b5060c9546201000090046001600160401b031661021f565b3480156105c2575f5ffd5b506065546001600160a01b0316610305565b3480156105df575f5ffd5b50610505610500366004612832565b3480156105f9575f5ffd5b5061037761060836600461287a565b610d50565b348015610618575f5ffd5b506102e46106273660046125a8565b610d88565b348015610637575f5ffd5b506102e4610646366004612891565b610df9565b348015610656575f5ffd5b506102e46106653660046128bd565b610fb6565b5f6040516372c0090b60e11b815260040160405180910390fd5b5f600261069360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100011630036106ed5760405162461bcd60e51b81526004016106e4906128fe565b60405180910390fd5b7f00000000000000000000000001670010000000000000000000000000000100016001600160a01b031661071f61111c565b6001600160a01b0316146107455760405162461bcd60e51b81526004016106e49061294a565b61074e81611137565b604080515f808252602082019092526107699183919061113f565b50565b5f6107788484846112ae565b949350505050565b61078861130a565b610792335f61139a565b565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100011630036107dc5760405162461bcd60e51b81526004016106e4906128fe565b7f00000000000000000000000001670010000000000000000000000000000100016001600160a01b031661080e61111c565b6001600160a01b0316146108345760405162461bcd60e51b81526004016106e49061294a565b61083d82611137565b6108498282600161113f565b5050565b5f306001600160a01b037f000000000000000000000000016700100000000000000000000000000001000116146108ec5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106e4565b505f516020612beb5f395f51905f5290565b5f54610100900460ff161580801561091c57505f54600160ff909116105b806109355750303b15801561093557505f5460ff166001145b6109985760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106e4565b5f805460ff1916600117905580156109b9575f805461ff0019166101001790555b6109c385856113a2565b826001600160401b03165f036109ec576040516308279a2560e31b815260040160405180910390fd5b46836001600160401b031603610a15576040516308279a2560e31b815260040160405180910390fd5b60014611610a3657604051638f972ecb60e01b815260040160405180910390fd5b6001600160401b03461115610a5e57604051638f972ecb60e01b815260040160405180910390fd5b4315610aa85743600103610a8f575f610a786001436129aa565b5f81815260fb602052604090209040905550610aa8565b604051635a0f9e4160e11b815260040160405180910390fd5b60fe80546001600160401b0380861667ffffffffffffffff199283161790925560fd805492851692909116919091179055610ae2436113dc565b5060fc558015610b2b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610b3a61146c565b6107925f6114c6565b60655433906001600160a01b03168114610bb15760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106e4565b610769816114c6565b610bc26114df565b61079233600161139a565b5f808080610bde60208601866129bd565b60ff16610bf160608701604088016129dd565b63ffffffff16610c0191906129f6565b60fd54909150610c25906001600160401b03600160c01b8204811691849116611550565b90935091505f610c3b60608701604088016129dd565b63ffffffff1660fd60109054906101000a90046001600160401b031688610c629190612a1f565b610c6c91906129f6565b9050610c7e60a08701608088016129dd565b63ffffffff1615801590610caf5750610c9d60a08701608088016129dd565b63ffffffff16816001600160401b0316115b15610ccd57610cc460a08701608088016129dd565b63ffffffff1690505b610ce98484838b610ce460808c0160608d01612a3e565b611668565b9099949850965092945050505050565b5f610d0261111c565b905090565b5f5f6040516372c0090b60e11b815260040160405180910390fd5b5f610d2e4684846112ae565b90505b92915050565b6040516372c0090b60e11b815260040160405180910390fd5b5f438210610d5f57505f919050565b43610d6c83610100612a57565b10610d7657504090565b505f90815260fb602052604090205490565b610d9061146c565b606580546001600160a01b0383166001600160a01b03199091168117909155610dc16033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b806001600160a01b038116610e215760405163538ba4f960e01b815260040160405180910390fd5b610e3560c954610100900460ff1660021490565b15610e535760405163bae6e2a960e01b815260040160405180910390fd5b693bb4ba34323930bbb2b960b11b610e736033546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610ead5750610e98816001610d22565b6001600160a01b0316336001600160a01b0316145b610eca57604051630d85cccf60e11b815260040160405180910390fd5b6002610ed860c95460ff1690565b60ff1603610ef95760405163dfc60d8560e01b815260040160405180910390fd5b610f0360026116e8565b6001600160a01b038416610f2957610f246001600160a01b038416476116fe565b610fa6565b6040516370a0823160e01b8152306004820152610fa69084906001600160a01b038716906370a0823190602401602060405180830381865afa158015610f71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f959190612a6a565b6001600160a01b0387169190611709565b610fb060016116e8565b50505050565b825f819003610fd85760405163ec73295960e01b815260040160405180910390fd5b846001600160401b0316805f036110025760405163ec73295960e01b815260040160405180910390fd5b61101260608401604085016129dd565b63ffffffff16805f036110385760405163ec73295960e01b815260040160405180910390fd5b61104560208501856129bd565b60ff16805f036110685760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec1461109a57604051636494e9f760e01b815260040160405180910390fd5b60026110a860c95460ff1690565b60ff16036110c95760405163dfc60d8560e01b815260040160405180910390fd5b6110d360026116e8565b5f6110df6001436129aa565b90506110ea8161175b565b6110f48787611793565b6110fe898961187a565b61110781611995565b5061111260016116e8565b5050505050505050565b5f516020612beb5f395f51905f52546001600160a01b031690565b61076961146c565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156111775761117283611a2c565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156111d1575060408051601f3d908101601f191682019092526111ce91810190612a6a565b60015b6112345760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106e4565b5f516020612beb5f395f51905f5281146112a25760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106e4565b50611172838383611ac7565b5f6112b98484611aeb565b905081806112cf57506001600160a01b03811615155b8484909161130157604051632b0d65db60e01b81526001600160401b03909216600483015260248201526044016106e4565b50509392505050565b61131e60c954610100900460ff1660021490565b61133b5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b61084961146c565b806001600160a01b0381166113ca5760405163538ba4f960e01b815260040160405180910390fd5b6113d383611b8d565b61117282611beb565b5f5f6113e6612519565b5f5b60ff811080156113fb5750806001018510155b1561142c575f198186030180408360ff8306610100811061141e5761141e612a95565b6020020152506001016113e8565b5046611fe08201526120008120925083408161144960ff87612aa9565b610100811061145a5761145a612a95565b60200201526120009020919391925050565b6033546001600160a01b031633146107925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e4565b606580546001600160a01b031916905561076981611c5b565b6114f360c954610100900460ff1660021490565b156115115760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611390565b5f80670de0b6b3a76400006001600160401b03861682036115775784849250925050611660565b6001600160401b038516158061159e5750846001600160401b0316866001600160401b0316145b806115bc57506115af815f19612abc565b856001600160401b031610155b156115cd5785849250925050611660565b5f866001600160401b0316866001600160401b0316836115ed9190612acf565b6115f79190612abc565b905080158061160c57506001600160ff1b0381115b1561161e578585935093505050611660565b5f61162882611cac565b90505f828702828902015f81126001811461164757858204925061164b565b5f92505b50508761165782611ec9565b95509550505050505b935093915050565b5f808061168463ffffffff86166001600160401b038916612a57565b9050856001600160401b0316811161169d5760016116b0565b6116b06001600160401b038716826129aa565b90506116cf6001600160401b036116c983878316611edb565b90611ef0565b91506116db8883611f04565b9250509550959350505050565b60c9805460ff191660ff92909216919091179055565b61084982825a611f46565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611172908490611f89565b5f5f611766836113dc565b915091508160fc541461178c5760405163d719258d60e01b815260040160405180910390fd5b60fc555050565b5f5f5f6117a1854286610bcd565b925092509250824814806117b257505f5b6117cf576040516336d54d4f60e11b815260040160405180910390fd5b60fd5460408051600160c01b83046001600160401b039081168252858116602083015292831681830152918316606083015260808201859052517f781ae5c2215806150d5c71a4ed5336e5dc3ad32aef04fc0f626a6ee0c2f8d1c89181900360a00190a160fd805477ffffffffffffffffffffffffffffffff000000000000000016600160c01b6001600160401b039485160267ffffffffffffffff19161791909216179055505050565b60fd546001600160401b03600160401b90910481169083161161189b575050565b6118b66d7369676e616c5f7365727669636560901b5f610d22565b60fe546040516313e4299d60e21b81526001600160401b0391821660048201527f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da16960248201529084166044820152606481018390526001600160a01b039190911690634f90a674906084016020604051808303815f875af115801561193d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119619190612a6a565b505060fd80546001600160401b03909216600160401b026fffffffffffffffff000000000000000019909216919091179055565b5f81815260fb60205260409081902082409081905560fd80546001600160401b03428116600160801b0267ffffffffffffffff60801b1983168117909355935192937f41c3f410f5c8ac36bb46b1dccef0de0f964087c9e688795fa02ecfa2c20b3fe493611a20938693908316921691909117909182526001600160401b0316602082015260400190565b60405180910390a15050565b6001600160a01b0381163b611a995760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106e4565b5f516020612beb5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611ad08361205c565b5f82511180611adc5750805b1561117257610fb0838361209b565b6097545f906001600160a01b031680611b1757604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611b69573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107789190612ae6565b5f54610100900460ff16611bb35760405162461bcd60e51b81526004016106e490612b01565b611bbb6120c0565b611bd96001600160a01b03821615611bd357816114c6565b336114c6565b5060c9805461ff001916610100179055565b5f54610100900460ff16611c115760405162461bcd60e51b81526004016106e490612b01565b6001600160401b03461115611c395760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6fffffffffffffffffffffffffffffffff811160071b81811c6001600160401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b175f8213611d0857631615e6385f526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d6c8c3f38e95a6b1ff2ab1c3b343619018302821d6d02384773bdf1ac5676facced60901901830290911d6cb9a025d814b29c212b8b1a07cd1901909102780a09507084cc699bb0e71ea869ffffffffffffffffffffffff190105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b5f610d31826001600160401b03611ef0565b5f818311611ee95781610d2e565b5090919050565b5f818311611efe5782610d2e565b50919050565b5f826001600160401b03165f03611f1d57506001610d31565b610d2e6001846001600160401b0316611f3686866120e6565b611f409190612abc565b90611edb565b815f03611f5257505050565b611f6c83838360405180602001604052805f81525061216c565b61117257604051634c67134d60e11b815260040160405180910390fd5b5f611fdd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166121a99092919063ffffffff16565b905080515f1480611ffd575080806020019051810190611ffd9190612b4c565b6111725760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106e4565b61206581611a2c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610d2e8383604051806060016040528060278152602001612c0b602791396121b7565b5f54610100900460ff166107925760405162461bcd60e51b81526004016106e490612b01565b5f826001600160401b03165f036120ff576120ff612b67565b5f836001600160401b0316836001600160401b0316670de0b6b3a76400006121279190612acf565b6121319190612abc565b9050680755bf798b4a1bf1e48111156121505750680755bf798b4a1bf1e45b670de0b6b3a76400006121628261222b565b6107789190612abc565b5f6001600160a01b03851661219457604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606061077884845f856123a5565b60605f5f856001600160a01b0316856040516121d39190612b9d565b5f60405180830381855af49150503d805f811461220b576040519150601f19603f3d011682016040523d82523d5f602084013e612210565b606091505b50915091506122218683838761247c565b9695505050505050565b5f68023f2fa8f6da5b9d2819821361224257919050565b680755bf798b4a1bf1e5821261225f5763a37bfec95f526004601cfd5b6503782dace9d9604e83901b0591505f60606bb17217f7d1cf79abc9e3b39884821b056001605f1b01901d6bb17217f7d1cf79abc9e3b39881029093036c240c330e9fb2d9cbaf0fd5aafb1981018102606090811d6d0277594991cfc85f6e2461837cd9018202811d6d1a521255e34f6a5061b25ef1c9c319018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d6e02c72388d9f74f51a9331fed693f1419018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084016d01d3967ed30fc4f89c02bab5708119010290911d6e0587f503bb6ea29d25fcb740196450019091026d360d7aeea093263ecc6e0ecb291760621b010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060824710156124065760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106e4565b5f5f866001600160a01b031685876040516124219190612b9d565b5f6040518083038185875af1925050503d805f811461245b576040519150601f19603f3d011682016040523d82523d5f602084013e612460565b606091505b50915091506124718783838761247c565b979650505050505050565b606083156124ea5782515f036124e3576001600160a01b0385163b6124e35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106e4565b5081610778565b61077883838151156124ff5781518083602001fd5b8060405162461bcd60e51b81526004016106e49190612bb8565b604051806120000160405280610100906020820280368337509192915050565b80356001600160401b038116811461254f575f5ffd5b919050565b5f5f5f60608486031215612566575f5ffd5b61256f84612539565b925061257d60208501612539565b915061258b60408501612539565b90509250925092565b6001600160a01b0381168114610769575f5ffd5b5f602082840312156125b8575f5ffd5b81356125c381612594565b9392505050565b8015158114610769575f5ffd5b5f5f5f606084860312156125e9575f5ffd5b6125f284612539565b9250602084013591506040840135612609816125ca565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215612639575f5ffd5b823561264481612594565b915060208301356001600160401b0381111561265e575f5ffd5b8301601f8101851361266e575f5ffd5b80356001600160401b0381111561268757612687612614565b604051601f8201601f19908116603f011681016001600160401b03811182821017156126b5576126b5612614565b6040528181528282016020018710156126cc575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f608085870312156126fe575f5ffd5b843561270981612594565b9350602085013561271981612594565b925061272760408601612539565b915061273560608601612539565b905092959194509250565b803563ffffffff8116811461254f575f5ffd5b5f60a08284031215611efe575f5ffd5b5f5f5f60e08486031215612775575f5ffd5b61277e84612740565b925061278c60208501612539565b915061258b8560408601612753565b5f5f604083850312156127ac575f5ffd5b6127b583612539565b91506127c360208401612740565b90509250929050565b5f5f604083850312156127dd575f5ffd5b8235915060208301356127ef816125ca565b809150509250929050565b5f5f5f5f6080858703121561280d575f5ffd5b843593506020850135925061282460408601612539565b915061273560608601612740565b5f5f5f5f6101008587031215612846575f5ffd5b6128508686612753565b935061285e60a08601612539565b925061286c60c08601612539565b915061273560e08601612740565b5f6020828403121561288a575f5ffd5b5035919050565b5f5f604083850312156128a2575f5ffd5b82356128ad81612594565b915060208301356127ef81612594565b5f5f5f5f61010085870312156128d1575f5ffd5b6128da85612539565b9350602085013592506128ef60408601612740565b91506127358660608701612753565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d3157610d31612996565b5f602082840312156129cd575f5ffd5b813560ff811681146125c3575f5ffd5b5f602082840312156129ed575f5ffd5b610d2e82612740565b6001600160401b038181168382160290811690818114612a1857612a18612996565b5092915050565b6001600160401b038281168282160390811115610d3157610d31612996565b5f60208284031215612a4e575f5ffd5b610d2e82612539565b80820180821115610d3157610d31612996565b5f60208284031215612a7a575f5ffd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f82612ab757612ab7612a81565b500690565b5f82612aca57612aca612a81565b500490565b8082028115828204841417610d3157610d31612996565b5f60208284031215612af6575f5ffd5b81516125c381612594565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612b5c575f5ffd5b81516125c3816125ca565b634e487b7160e01b5f52600160045260245ffd5b5f5b83811015612b95578181015183820152602001612b7d565b50505f910152565b5f8251612bae818460208701612b7b565b9190910192915050565b602081525f8251806020840152612bd6816040850160208701612b7b565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220ff3ca55c3d0d57e84c33c646d112fadf16b343c2a643c320e4c02f93e490149a64736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670010000000000000000000000000000010001": { + "contractName": "TaikoL2", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670010000000000000000000000000000010002", + "0x00000000000000000000000000000000000000000000000000000000000000fe": "0x0000000000000000000000000000000000000000000000000000000000007e7e", + "0x00000000000000000000000000000000000000000000000000000000000000fd": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000000000000000000000000000000000000000000fc": "0xf167b245aa70c0a5e2f44cd65a94f2b1c5c9e8c8ab059940e4bf1c47d7a39557", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000010001" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167001000000000000000000000000000010002": { + "contractName": "RollupAddressManagerImpl", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74" + }, + "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610300578063a86f9d9e1461031d578063d8f4648f1461033c578063e07baba61461035b578063e30c397814610391578063f2fde38b146103ae575f5ffd5b80635c975abb14610290578063715018a6146102b057806379ba5097146102c45780638456cb59146102d85780638abf6077146102ec575f5ffd5b80633ab76e9f116100ee5780633ab76e9f146102095780633eb6b8cf146102285780633f4ba83a146102475780634f1ef2861461025b57806352d1902d1461026e575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c65780633659cfe6146101ea575b5f5ffd5b348015610135575f5ffd5b5061013e6103cd565b005b34801561014b575f5ffd5b5061013e61015a36600461119f565b61047d565b34801561016a575f5ffd5b506101a96101793660046111d5565b6001600160401b03919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d1575f5ffd5b506101da610544565b60405190151581526020016101bd565b3480156101f5575f5ffd5b5061013e61020436600461119f565b61055c565b348015610214575f5ffd5b506097546101a9906001600160a01b031681565b348015610233575f5ffd5b506101a961024236600461120c565b610623565b348015610252575f5ffd5b5061013e610637565b61013e610269366004611259565b61064b565b348015610279575f5ffd5b50610282610700565b6040519081526020016101bd565b34801561029b575f5ffd5b506101da60c954610100900460ff1660021490565b3480156102bb575f5ffd5b5061013e6107b1565b3480156102cf575f5ffd5b5061013e6107c2565b3480156102e3575f5ffd5b5061013e610839565b3480156102f7575f5ffd5b506101a961084c565b34801561030b575f5ffd5b506033546001600160a01b03166101a9565b348015610328575f5ffd5b506101a961033736600461131c565b61085a565b348015610347575f5ffd5b5061013e610356366004611346565b61086d565b348015610366575f5ffd5b5060c9546201000090046001600160401b03166040516001600160401b0390911681526020016101bd565b34801561039c575f5ffd5b506065546001600160a01b03166101a9565b3480156103b9575f5ffd5b5061013e6103c836600461119f565b610949565b6103d56109ba565b5f54600290610100900460ff161580156103f557505f5460ff8083169116105b61041a5760405162461bcd60e51b815260040161041190611383565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff161580801561049b57505f54600160ff909116105b806104b45750303b1580156104b457505f5460ff166001145b6104d05760405162461bcd60e51b815260040161041190611383565b5f805460ff1916600117905580156104f1575f805461ff0019166101001790555b6104fb8230610a14565b8015610540575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261055360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100021630036105a45760405162461bcd60e51b8152600401610411906113d1565b7f00000000000000000000000001670010000000000000000000000000000100026001600160a01b03166105d6610a53565b6001600160a01b0316146105fc5760405162461bcd60e51b81526004016104119061141d565b61060581610a6e565b604080515f8082526020820190925261062091839190610a76565b50565b5f61062f848484610be0565b949350505050565b61063f610c3c565b610649335f610ccc565b565b6001600160a01b037f00000000000000000000000001670010000000000000000000000000000100021630036106935760405162461bcd60e51b8152600401610411906113d1565b7f00000000000000000000000001670010000000000000000000000000000100026001600160a01b03166106c5610a53565b6001600160a01b0316146106eb5760405162461bcd60e51b81526004016104119061141d565b6106f482610a6e565b61054082826001610a76565b5f306001600160a01b037f0000000000000000000000000167001000000000000000000000000000010002161461079f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610411565b505f5160206115565f395f51905f5290565b6107b96109ba565b6106495f610ce5565b60655433906001600160a01b031681146108305760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610411565b61062081610ce5565b610841610cfe565b610649336001610ccc565b5f610855610a53565b905090565b5f610866468484610be0565b9392505050565b6108756109ba565b6001600160401b0383165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108c65760405163a883089360e01b815260040160405180910390fd5b6001600160401b0384165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109516109ba565b606580546001600160a01b0383166001600160a01b031990911681179091556109826033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610411565b806001600160a01b038116610a3c5760405163538ba4f960e01b815260040160405180910390fd5b610a4583610d6f565b610a4e82610dcd565b505050565b5f5160206115565f395f51905f52546001600160a01b031690565b6106206109ba565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610aa957610a4e83610e3d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b03575060408051601f3d908101601f19168201909252610b0091810190611469565b60015b610b665760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610411565b5f5160206115565f395f51905f528114610bd45760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610411565b50610a4e838383610ed8565b5f610beb8484610f02565b90508180610c0157506001600160a01b03811615155b84849091610c3357604051632b0d65db60e01b81526001600160401b0390921660048301526024820152604401610411565b50509392505050565b610c5060c954610100900460ff1660021490565b610c6d5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561062081610fa4565b610d1260c954610100900460ff1660021490565b15610d305760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cc2565b5f54610100900460ff16610d955760405162461bcd60e51b815260040161041190611480565b610d9d610ff5565b610dbb6001600160a01b03821615610db55781610ce5565b33610ce5565b5060c9805461ff001916610100179055565b5f54610100900460ff16610df35760405162461bcd60e51b815260040161041190611480565b6001600160401b03461115610e1b5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381163b610eaa5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610411565b5f5160206115565f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610ee18361101b565b5f82511180610eed5750805b15610a4e57610efc838361105a565b50505050565b6097545f906001600160a01b031680610f2e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f80573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062f91906114cb565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166106495760405162461bcd60e51b815260040161041190611480565b61102481610e3d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061086683836040518060600160405280602781526020016115766027913960605f5f856001600160a01b0316856040516110969190611508565b5f60405180830381855af49150503d805f81146110ce576040519150601f19603f3d011682016040523d82523d5f602084013e6110d3565b606091505b50915091506110e4868383876110ee565b9695505050505050565b6060831561115c5782515f03611155576001600160a01b0385163b6111555760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610411565b508161062f565b61062f83838151156111715781518083602001fd5b8060405162461bcd60e51b81526004016104119190611523565b6001600160a01b0381168114610620575f5ffd5b5f602082840312156111af575f5ffd5b81356108668161118b565b80356001600160401b03811681146111d0575f5ffd5b919050565b5f5f604083850312156111e6575f5ffd5b6111ef836111ba565b946020939093013593505050565b803580151581146111d0575f5ffd5b5f5f5f6060848603121561121e575f5ffd5b611227846111ba565b92506020840135915061123c604085016111fd565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561126a575f5ffd5b82356112758161118b565b915060208301356001600160401b0381111561128f575f5ffd5b8301601f8101851361129f575f5ffd5b80356001600160401b038111156112b8576112b8611245565b604051601f8201601f19908116603f011681016001600160401b03811182821017156112e6576112e6611245565b6040528181528282016020018710156112fd575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f6040838503121561132d575f5ffd5b8235915061133d602084016111fd565b90509250929050565b5f5f5f60608486031215611358575f5ffd5b611361846111ba565b92506020840135915060408401356113788161118b565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f60208284031215611479575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156114db575f5ffd5b81516108668161118b565b5f5b838110156115005781810151838201526020016114e8565b50505f910152565b5f82516115198184602087016114e6565b9190910192915050565b602081525f82518060208401526115418160408501602087016114e6565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c7f05ce9711ed9d578d8b6db6831e3b98ae749a3ad958172933eaf0e1d0d180164736f6c634300081b0033", + "balance": "0x0" + }, + "0x1670010000000000000000000000000000010002": { + "contractName": "RollupAddressManager", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000ab707cb80e7de7c75d815b1a653433f3eec44c74", + "0xd8268ac552cc4e7bd87f3f4b36d055f134549289cc2d68715bd581a06ffb2631": "0x0000000000000000000000001670010000000000000000000000000000010001", + "0xc64d73fae391b0ac595df47d373c227e7f86156e3d98ea2db53384d097ed1368": "0x0000000000000000000000001670010000000000000000000000000000000001", + "0x30e0422248fc90822e500074357003173b9f5edac82e6cc3679f5f9b5ae0843a": "0x0000000000000000000000001670010000000000000000000000000000000005", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167001000000000000000000000000000010002" + }, + "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea264697066735822122063ca278dcc774bf6b03f066b470ab5bd61081120baaf8096d8309758d80de2c864736f6c634300081b0033", + "balance": "0x0" + }, + "0x5dADBb58A8ACfCaec475a08bBB4054F8874A3A8b": { + "contractName": "LibNetwork", + "storage": {}, + "code": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220fa28e419f92948effce2eaec534c53f13c8015c95a6be7019674d64d2aac3ae164736f6c634300081b0033", + "balance": "0x0" + }, + "0x0167001000000000000000000000000000010099": { + "contractName": "RegularERC20", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x526567756c617245524332300000000000000000000000000000000000000018", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x52474c0000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000002710000", + "0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x215be5d23550ceb1beff54fb579a765903ba2ccc85b6f79bcf9bda4e8cb86034": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x6d1035fce6503985ab075a4ff3f7ce2e57cd5a9c5e6a0589dccacfea7bcb0af4": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x2a95ee547cef07a2fff0a68144824a0d9ded35ed87da118a53e1cda4aca8b944": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x7fcecd2a720442e9bc0cf1a8a6976f9fbddf6b996dc0d78af7e94dadf360d579": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x18bbf5fcf8fe870ecff419c4677497c08b2e6a5431bb94541d06c9da3f308e55": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x6e3431b4e42570cb9e3d926eb26f9e54de2df536ae0741ae16350d17a6c16ddc": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0xdb302bf24b1ad5f23949da8e6b05747dc699499a995361a7bf40ec7204696d6f": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0xa1d47ef1a6916dfbe65888f77739da164feb3a9a6afc95ee57e8b3e85ea5e955": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x454340b1295f9ff1c0fb9192166d0215d33f84dc5f2dc3f3e5732a4b557186bf": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x6a3bb1dada7c82a99b4a02d16da3fda07cb31d8887b9b99ec829ab67fd7a817e": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x2fe2844d12634f5dce1e2be5be96b2ea1c573f8f25171997e2f4bd943dd32f92": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x3836a017087644fbf6925ae1aca14201ce898a35434d9dea9ebd03cea44e049a": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x1c7a29f5a750951acb14fdf82a876085914eb17f15a162b054a3d2f8c92e2451": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x271927a243b678b7a071f19b4051ef93b16e397066e3fdef5bba26527e34a1a1": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x4663d660b5d810c9ab2f6dc64af7ff84ebae28a72342391622649a7fe87c93d4": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x352c3281a58937f04ef7cc7b88f3456b6ffd47f52a321c253dc083fb53a3a114": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x6d5faa5f4e671e6fe47b0eab51c62f8cebf354e21e8fdccf8cdfc0293dd341a3": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x673de83553dc3a2c0f59aa7193de392a4530feb73b9d6cd4fcef68802b8195c1": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x8b6a7148182c39c1ca0b052292befa83d09344947c23e47b300314fa8c2b8f7d": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0xed4a23b4a030ee0d64ef69b276dee81d493e5efca01c0fa514e0c38f882af152": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x45124dfaa1716b8d229f646ff926377e17b887c2b2eab6a87ab0348ee1689eac": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x40f9c2870c16301e8614e56453fc5b838c4a153eb0b18c4c050efbf4f786518a": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0xbd55c9294669a294e0c8fd07e2c07738e95be0123b62b752d782fe317f25ca97": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x52c0eeeba21034a69ad7cfa70f75c6fd127acd4084a4da80f30cc7540bdf990b": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x843a9befd317bdcee99c42a3adf6d00b789224beda1485c7f6e7bf327755328e": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0xea09b20615ffad342fb450741e59ea6ba180fa93b8701b31fa639ef9ff50d2b0": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x39cd5e5ec54ce41a5f5b2c13ce7133998dfef654caacfb44d5c517700c217d36": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0xd46a4409ebc9fc47afedecdadc89dbc0d6f46be6bdb49fd822d5143daedc83f0": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x5735d6fad3ea4f2328a1557ff1be7570df3d4c2630b448c1b7fe2781d018beb0": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x509c640066f1872118ec768fcb985c7bf4476690788ac7e112ab072ca82ab219": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0xf9982658df503b792c55f860aefa42588712c9069523324d4b9ce4d9a10e2e9c": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x87d11160035f8424b7163a397fc780b278af3de5a6caa2cb71bb2b46825ce159": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x1dde801acf032acf4b3151b5edb82e0e4d872a54d9efbf3809d75efcbfa2bf8f": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x01aad34cdf9f8f5fca811e2fab1411b08778be71f547894fa0d9fafa5c1f60b2": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x65cee0cf3d643c3f3402a40ddebed72cec3dd6bac66974bff967dc0ef9e2faed": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0xaf6cadccd3f046eeb282ec0b08e44adbe45784a23f41d76b096ccb8e7f238e2b": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x2589e1958c4e4f4a5f777b0b92a3170cc21771a8d3580331a71232f8624f7628": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x1f27de92fedf410197c8a09d0f2f03372d92b75c9889a6a61cf491395877fbcf": "0x00000000000000000000000000000000000000000000000000000000000fa000" + }, + "code": "0x608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c8063395093511161006e578063395093511461011f57806370a082311461013257806395d89b411461015a578063a457c2d714610162578063a9059cbb14610175578063dd62ed3e14610188575f5ffd5b806306fdde03146100aa578063095ea7b3146100c857806318160ddd146100eb57806323b872dd146100fd578063313ce56714610110575b5f5ffd5b6100b261019b565b6040516100bf919061068a565b60405180910390f35b6100db6100d63660046106f0565b61022b565b60405190151581526020016100bf565b6002545b6040519081526020016100bf565b6100db61010b366004610718565b610244565b604051601281526020016100bf565b6100db61012d3660046106f0565b610267565b6100ef610140366004610752565b6001600160a01b03165f9081526020819052604090205490565b6100b2610288565b6100db6101703660046106f0565b610297565b6100db6101833660046106f0565b610316565b6100ef610196366004610772565b610323565b6060600380546101aa906107a3565b80601f01602080910402602001604051908101604052809291908181526020018280546101d6906107a3565b80156102215780601f106101f857610100808354040283529160200191610221565b820191905f5260205f20905b81548152906001019060200180831161020457829003601f168201915b5050505050905090565b5f3361023881858561034d565b60019150505b92915050565b5f33610251858285610470565b61025c8585856104e8565b506001949350505050565b5f336102388185856102798383610323565b61028391906107db565b61034d565b6060600480546101aa906107a3565b5f33816102a48286610323565b9050838110156103095760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61025c828686840361034d565b5f336102388185856104e8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610300565b6001600160a01b0382166104105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610300565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61047b8484610323565b90505f1981146104e257818110156104d55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610300565b6104e2848484840361034d565b50505050565b6001600160a01b03831661054c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610300565b6001600160a01b0382166105ae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610300565b6001600160a01b0383165f90815260208190526040902054818110156106255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610300565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104e2565b602081525f82518060208401525f5b818110156106b65760208186018101516040868401015201610699565b505f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146106eb575f5ffd5b919050565b5f5f60408385031215610701575f5ffd5b61070a836106d5565b946020939093013593505050565b5f5f5f6060848603121561072a575f5ffd5b610733846106d5565b9250610741602085016106d5565b929592945050506040919091013590565b5f60208284031215610762575f5ffd5b61076b826106d5565b9392505050565b5f5f60408385031215610783575f5ffd5b61078c836106d5565b915061079a602084016106d5565b90509250929050565b600181811c908216806107b757607f821691505b6020821081036107d557634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561023e57634e487b7160e01b5f52601160045260245ffdfea2646970667358221220afb53222eb165673ba5dfc3c8883c6d8b4942e876e8c5b0c567a03996e20a58864736f6c634300081b0033", + "balance": "0x0" + } +} diff --git a/crates/taiko/chainspec/src/lib.rs b/crates/taiko/chainspec/src/lib.rs index e364e1eea73b..2a1e0e76d657 100644 --- a/crates/taiko/chainspec/src/lib.rs +++ b/crates/taiko/chainspec/src/lib.rs @@ -321,7 +321,7 @@ impl From for TaikoChainSpec { CHAIN_INTERNAL_TESTNET => Some(INTERNAL_DEVNET_ONTAKE_BLOCK), CHAIN_HEKLA_TESTNET => Some(HEKLA_ONTAKE_BLOCK), CHAIN_MAINNET => Some(MAINNET_ONTAKE_BLOCK), - _ => None, + _ => unreachable!(), }; // Block-based hardforks @@ -388,3 +388,34 @@ impl From for TaikoChainSpec { } } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_genesis() { + let load_genesis = |chain: Chain| { + let alloc_str = match chain { + CHAIN_MAINNET => { + include_str!("../res/genesis/mainnet.json") + } + CHAIN_INTERNAL_TESTNET => { + include_str!("../res/genesis/internal_l2a.json") + } + CHAIN_KATLA_TESTNET => include_str!("../res/genesis/katla.json"), + CHAIN_HEKLA_TESTNET => include_str!("../res/genesis/hekla.json"), + _ => panic!("Invalid chain"), + }; + let _alloc: BTreeMap = + serde_json::from_str(alloc_str).expect("Invalid alloc json"); + println!("Genesis: {_alloc:?}"); + }; + + for chain in + [CHAIN_MAINNET, CHAIN_INTERNAL_TESTNET, CHAIN_KATLA_TESTNET, CHAIN_HEKLA_TESTNET] + { + load_genesis(chain); + } + } +} diff --git a/crates/taiko/consensus/src/lib.rs b/crates/taiko/consensus/src/lib.rs index 35407d8817a7..8a0d617f0352 100644 --- a/crates/taiko/consensus/src/lib.rs +++ b/crates/taiko/consensus/src/lib.rs @@ -16,8 +16,7 @@ use reth_consensus::{ }; use reth_consensus_common::validation::{ validate_4844_header_standalone, validate_against_parent_4844, - validate_against_parent_hash_number, validate_block_pre_execution, - validate_body_against_header, validate_header_base_fee, validate_header_extradata, + validate_against_parent_hash_number, validate_header_base_fee, validate_header_extradata, validate_header_gas, }; use reth_ethereum_consensus::validate_block_post_execution; @@ -203,16 +202,16 @@ impl Result<(), ConsensusError> { - validate_block_pre_execution(block, &self.chain_spec) + fn validate_block_pre_execution(&self, _block: &SealedBlock) -> Result<(), ConsensusError> { + Ok(()) } fn validate_body_against_header( &self, - body: &BlockBody, - header: &SealedHeader, + _body: &BlockBody, + _header: &SealedHeader, ) -> Result<(), ConsensusError> { - validate_body_against_header(body, header.header()) + Ok(()) } } diff --git a/crates/taiko/engine/types/Cargo.toml b/crates/taiko/engine/types/Cargo.toml index 95a4c6e719ee..abe164d64dbb 100644 --- a/crates/taiko/engine/types/Cargo.toml +++ b/crates/taiko/engine/types/Cargo.toml @@ -13,7 +13,7 @@ workspace = true [dependencies] # reth alloy-rpc-types-engine = { workspace = true, features = ["serde"] } -alloy-primitives.workspace = true +alloy-primitives = { workspace = true, features = ["serde"] } alloy-eips.workspace = true # taiko @@ -24,6 +24,7 @@ serde.workspace = true serde_with.workspace = true alloy-serde = "0.1.3" alloy-rlp.workspace = true +secp256k1 = { workspace = true, features = ["serde"] } [dev-dependencies] serde_json.workspace = true diff --git a/crates/taiko/engine/types/src/lib.rs b/crates/taiko/engine/types/src/lib.rs index b647ffd67083..2e539abcead3 100644 --- a/crates/taiko/engine/types/src/lib.rs +++ b/crates/taiko/engine/types/src/lib.rs @@ -11,6 +11,6 @@ mod payload; pub use payload::{ - BlockMetadata, ExecutionPayloadInputV2, TaikoExecutionPayload, TaikoExecutionPayloadEnvelopeV2, + BlockMetadata, TaikoExecutionPayload, TaikoExecutionPayloadEnvelopeV2, TaikoExecutionPayloadInputV2, TaikoPayloadAttributes, }; diff --git a/crates/taiko/engine/types/src/payload.rs b/crates/taiko/engine/types/src/payload.rs index af64b949b1da..773f854649e5 100644 --- a/crates/taiko/engine/types/src/payload.rs +++ b/crates/taiko/engine/types/src/payload.rs @@ -1,12 +1,13 @@ //! Payload related types use alloy_eips::eip4895::Withdrawal; -use alloy_primitives::{Address, Bytes, B256, U256}; +use alloy_primitives::{Address, Bytes, PrimitiveSignature as Signature, B256, U256}; use alloy_rlp::{RlpDecodable, RlpEncodable}; use alloy_rpc_types_engine::{ - ExecutionPayload, ExecutionPayloadV1, ExecutionPayloadV2, PayloadAttributes, + ExecutionPayload, ExecutionPayloadInputV2, ExecutionPayloadV2, PayloadAttributes, }; use reth_taiko_primitives::L1Origin; +use secp256k1::PublicKey; use serde::{Deserialize, Serialize}; use serde_with::{base64::Base64, serde_as}; @@ -135,18 +136,6 @@ impl From for TaikoExecutionPayload { } } -/// This is the input to `engine_newPayloadV2`, which may or may not have a withdrawals field. -#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ExecutionPayloadInputV2 { - /// The V1 execution payload - #[serde(flatten)] - pub execution_payload: ExecutionPayloadV1, - /// The payload withdrawals - #[serde(skip_serializing_if = "Option::is_none")] - pub withdrawals: Option>, -} - /// This is the input to `engine_newPayloadV2`, which may or may not have a withdrawals field. #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -158,4 +147,32 @@ pub struct TaikoExecutionPayloadInputV2 { pub tx_hash: B256, /// Allow passing `WithdrawalsHash` directly instead of withdrawals pub withdrawals_hash: B256, + /// Blob gas used + #[serde(with = "alloy_serde::quantity::opt")] + pub blob_gas_used: Option, + /// Excess blob gas + #[serde(with = "alloy_serde::quantity::opt")] + pub excess_blob_gas: Option, + /// Deposit requests + pub deposit_requests: Option>, + + /// Is taiko block + #[serde(rename = "TaikoBlock")] + pub taiko_block: bool, +} + +/// TxDeposit +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct TxDeposit { + /// Public key + pub public_key: PublicKey, + /// Withdrawal credentials + pub withdrawal_credentials: B256, + /// Amount + pub amount: u64, + /// Signature + pub signature: Signature, + /// Index + pub index: u64, } diff --git a/crates/taiko/evm/src/lib.rs b/crates/taiko/evm/src/lib.rs index 27a74a698e79..3e9f47d34343 100644 --- a/crates/taiko/evm/src/lib.rs +++ b/crates/taiko/evm/src/lib.rs @@ -68,17 +68,18 @@ impl ConfigureEvmEnv for TaikoEvmConfig { ) { transaction.fill_tx_env(tx_env, sender); - let EnvExt { is_anchor, block_number, extra_data } = ext.unwrap(); - // Set taiko specific data - tx_env.taiko.is_anchor = is_anchor; + if let Some(EnvExt { is_anchor, block_number, extra_data }) = ext { + // Set taiko specific data + tx_env.taiko.is_anchor = is_anchor; + + if self.chain_spec.is_ontake_active_at_block(block_number) { + // set the basefee ratio + tx_env.taiko.basefee_ratio = decode_ontake_extra_data(extra_data); + } + } // set the treasury address let treasury = self.chain_spec.treasury(); tx_env.taiko.treasury = treasury; - - if self.chain_spec.is_ontake_active_at_block(block_number) { - // set the basefee ratio - tx_env.taiko.basefee_ratio = decode_ontake_extra_data(extra_data); - } } fn fill_tx_env_system_contract_call( diff --git a/crates/taiko/node/Cargo.toml b/crates/taiko/node/Cargo.toml index ece8f41657f3..1c40ebd0217c 100644 --- a/crates/taiko/node/Cargo.toml +++ b/crates/taiko/node/Cargo.toml @@ -23,7 +23,6 @@ reth-consensus.workspace = true reth-trie-db.workspace = true reth-primitives = { workspace = true, features = ["taiko"] } reth-rpc.workspace = true -reth-payload-primitives.workspace = true # taiko reth-taiko-consensus.workspace = true @@ -36,6 +35,7 @@ reth-taiko-payload-validator.workspace = true reth-taiko-primitives.workspace = true alloy-rpc-types-engine.workspace = true +alloy-consensus.workspace = true alloy-primitives.workspace = true reth-evm = { workspace = true, features = ["taiko"] } diff --git a/crates/taiko/node/src/engine.rs b/crates/taiko/node/src/engine.rs index 3a6e38f6b662..6684c8cf7738 100644 --- a/crates/taiko/node/src/engine.rs +++ b/crates/taiko/node/src/engine.rs @@ -2,14 +2,17 @@ use std::sync::Arc; +use alloy_consensus::{BlockHeader, Header}; +use alloy_primitives::B256; use alloy_rpc_types_engine::{ExecutionPayloadSidecar, PayloadError}; use reth_node_builder::{ - EngineApiMessageVersion, EngineObjectValidationError, EngineTypes, EngineValidator, - PayloadOrAttributes, PayloadTypes, PayloadValidator, + validate_parent_beacon_block_root_presence, EngineApiMessageVersion, + EngineObjectValidationError, EngineTypes, EngineValidator, InvalidPayloadAttributesError, + MessageValidationKind, PayloadAttributes, PayloadOrAttributes, PayloadTypes, PayloadValidator, + VersionSpecificValidationError, }; use reth_payload_builder::EthBuiltPayload; -use reth_payload_primitives::validate_version_specific_fields; -use reth_primitives::{Block, SealedBlock}; +use reth_primitives::{Block, EthereumHardforks, SealedBlock}; use reth_taiko_chainspec::TaikoChainSpec; use reth_taiko_engine_primitives::{ ExecutionPayloadEnvelopeV3, ExecutionPayloadEnvelopeV4, ExecutionPayloadV1, @@ -17,6 +20,7 @@ use reth_taiko_engine_primitives::{ }; use reth_taiko_engine_types::{TaikoExecutionPayload, TaikoPayloadAttributes}; use reth_taiko_payload_validator::TaikoExecutionPayloadValidator; +use reth_tracing::tracing::debug; /// The types used in the default mainnet ethereum beacon consensus engine. #[derive(Debug, Default, Clone, serde::Deserialize, serde::Serialize)] @@ -95,7 +99,10 @@ where version: EngineApiMessageVersion, payload_or_attrs: PayloadOrAttributes<'_, TaikoPayloadAttributes>, ) -> Result<(), EngineObjectValidationError> { - validate_version_specific_fields(self.chain_spec(), version, payload_or_attrs) + debug!(target: "taiko::engine", version=?version, payload_or_attrs=?payload_or_attrs); + let res = validate_version_specific_fields(self.chain_spec(), version, payload_or_attrs); + debug!(target: "taiko::engine", version=?version, ?res); + res } fn ensure_well_formed_attributes( @@ -103,6 +110,91 @@ where version: EngineApiMessageVersion, attributes: &TaikoPayloadAttributes, ) -> Result<(), EngineObjectValidationError> { - validate_version_specific_fields(self.chain_spec(), version, attributes.into()) + debug!(target: "taiko::engine", version=?version, attributes=?attributes); + let res = validate_version_specific_fields(self.chain_spec(), version, attributes.into()); + debug!(target: "taiko::engine", version=?version, ?res); + res } + + fn validate_payload_attributes_against_header( + &self, + attr: &TaikoPayloadAttributes, + header: &Header, + ) -> Result<(), InvalidPayloadAttributesError> { + if attr.timestamp() < header.timestamp() { + return Err(InvalidPayloadAttributesError::InvalidTimestamp); + } + Ok(()) + } +} + +fn validate_withdrawals_presence( + chain_spec: &T, + version: EngineApiMessageVersion, + message_validation_kind: MessageValidationKind, + timestamp: u64, + has_withdrawals: bool, + withdrawals_hash: Option, +) -> Result<(), EngineObjectValidationError> { + let is_shanghai_active = chain_spec.is_shanghai_active_at_timestamp(timestamp); + + match version { + EngineApiMessageVersion::V1 => { + if has_withdrawals { + return Err(message_validation_kind + .to_error(VersionSpecificValidationError::WithdrawalsNotSupportedInV1)) + } + } + EngineApiMessageVersion::V2 | EngineApiMessageVersion::V3 | EngineApiMessageVersion::V4 => { + if is_shanghai_active && !has_withdrawals && withdrawals_hash.is_none() { + return Err(message_validation_kind + .to_error(VersionSpecificValidationError::NoWithdrawalsPostShanghai)) + } + if !is_shanghai_active && has_withdrawals { + return Err(message_validation_kind + .to_error(VersionSpecificValidationError::HasWithdrawalsPreShanghai)) + } + } + }; + + Ok(()) +} + +fn validate_version_specific_fields( + chain_spec: &T, + version: EngineApiMessageVersion, + payload_or_attrs: PayloadOrAttributes<'_, Type>, +) -> Result<(), EngineObjectValidationError> +where + Type: PayloadAttributes, + T: EthereumHardforks, +{ + let withdrawals_hash = match payload_or_attrs { + PayloadOrAttributes::ExecutionPayload { + payload: TaikoExecutionPayload { withdrawals_hash, .. }, + .. + } => { + if withdrawals_hash.is_zero() { + None + } else { + Some(*withdrawals_hash) + } + } + _ => None, + }; + validate_withdrawals_presence( + chain_spec, + version, + payload_or_attrs.message_validation_kind(), + payload_or_attrs.timestamp(), + payload_or_attrs.withdrawals().is_some(), + withdrawals_hash, + )?; + validate_parent_beacon_block_root_presence( + chain_spec, + version, + payload_or_attrs.message_validation_kind(), + payload_or_attrs.timestamp(), + payload_or_attrs.parent_beacon_block_root().is_some(), + ) } diff --git a/crates/taiko/payload/builder/src/builder.rs b/crates/taiko/payload/builder/src/builder.rs index 87e189d92827..8168eb3ed668 100644 --- a/crates/taiko/payload/builder/src/builder.rs +++ b/crates/taiko/payload/builder/src/builder.rs @@ -65,7 +65,14 @@ where suggested_fee_recipient: config.attributes.suggested_fee_recipient(), prev_randao: config.attributes.prev_randao(), }; - self.evm_config.next_cfg_and_block_env(parent, next_attributes) + let (cfg_with_handler_cfg, mut block_env) = + self.evm_config.next_cfg_and_block_env(parent, next_attributes)?; + block_env.basefee = config.attributes.base_fee_per_gas; + block_env.gas_limit = U256::from(config.attributes.block_metadata.gas_limit); + block_env.prevrandao = Some(config.attributes.block_metadata.mix_hash); + block_env.coinbase = config.attributes.block_metadata.beneficiary; + + Ok((cfg_with_handler_cfg, block_env)) } } diff --git a/crates/taiko/payload/validator/Cargo.toml b/crates/taiko/payload/validator/Cargo.toml index 3e80b1f5d87b..8fe6143b0092 100644 --- a/crates/taiko/payload/validator/Cargo.toml +++ b/crates/taiko/payload/validator/Cargo.toml @@ -15,10 +15,12 @@ workspace = true # reth reth-chainspec.workspace = true reth-primitives = { workspace = true, features = ["taiko"] } -reth-payload-validator.workspace = true +reth-rpc-types-compat.workspace = true # ethereum alloy-rpc-types-engine.workspace = true +alloy-primitives.workspace = true +alloy-consensus.workspace = true # taiko reth-taiko-engine-types.workspace = true diff --git a/crates/taiko/payload/validator/src/lib.rs b/crates/taiko/payload/validator/src/lib.rs index 75c98ec0ceb7..d73a55e20e8b 100644 --- a/crates/taiko/payload/validator/src/lib.rs +++ b/crates/taiko/payload/validator/src/lib.rs @@ -8,32 +8,85 @@ #![cfg_attr(not(test), warn(unused_crate_dependencies))] #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] -use alloy_rpc_types_engine::{ExecutionPayloadSidecar, PayloadError}; +use alloy_consensus::EMPTY_OMMER_ROOT_HASH; +use alloy_primitives::B256; +use alloy_rpc_types_engine::{ExecutionPayloadSidecar, MaybeCancunPayloadFields, PayloadError}; use reth_chainspec::EthereumHardforks; -use reth_payload_validator::ExecutionPayloadValidator; -use reth_primitives::SealedBlock; + +use reth_primitives::{Block, BlockExt, Header, SealedBlock}; +use reth_rpc_types_compat::engine::payload::try_into_block; use reth_taiko_engine_types::TaikoExecutionPayload; -use std::{ops::Deref, sync::Arc}; +use std::sync::Arc; /// Execution payload validator.; #[derive(Clone, Debug)] pub struct TaikoExecutionPayloadValidator { /// Chain spec to validate against. - inner: ExecutionPayloadValidator, -} - -impl Deref for TaikoExecutionPayloadValidator { - type Target = ExecutionPayloadValidator; - - fn deref(&self) -> &Self::Target { - &self.inner - } + chain_spec: Arc, } impl TaikoExecutionPayloadValidator { /// Create a new validator. pub const fn new(chain_spec: Arc) -> Self { - Self { inner: ExecutionPayloadValidator::new(chain_spec) } + Self { chain_spec } + } + + /// Returns the chain spec used by the validator. + #[inline] + pub const fn chain_spec(&self) -> &Arc { + &self.chain_spec + } + + /// Returns true if the Cancun hardfork is active at the given timestamp. + #[inline] + fn is_cancun_active_at_timestamp(&self, timestamp: u64) -> bool { + self.chain_spec().is_cancun_active_at_timestamp(timestamp) + } + + /// Returns true if the Shanghai hardfork is active at the given timestamp. + #[inline] + fn is_shanghai_active_at_timestamp(&self, timestamp: u64) -> bool { + self.chain_spec().is_shanghai_active_at_timestamp(timestamp) + } + + /// Returns true if the Prague harkdfork is active at the given timestamp. + #[inline] + fn is_prague_active_at_timestamp(&self, timestamp: u64) -> bool { + self.chain_spec().is_prague_active_at_timestamp(timestamp) + } + + /// Cancun specific checks for EIP-4844 blob transactions. + /// + /// Ensures that the number of blob versioned hashes matches the number hashes included in the + /// _separate_ `block_versioned_hashes` of the cancun payload fields. + fn ensure_matching_blob_versioned_hashes( + &self, + sealed_block: &SealedBlock, + cancun_fields: &MaybeCancunPayloadFields, + ) -> Result<(), PayloadError> { + let num_blob_versioned_hashes = sealed_block.blob_versioned_hashes_iter().count(); + // Additional Cancun checks for blob transactions + if let Some(versioned_hashes) = cancun_fields.versioned_hashes() { + if num_blob_versioned_hashes != versioned_hashes.len() { + // Number of blob versioned hashes does not match + return Err(PayloadError::InvalidVersionedHashes); + } + // we can use `zip` safely here because we already compared their length + for (payload_versioned_hash, block_versioned_hash) in + versioned_hashes.iter().zip(sealed_block.blob_versioned_hashes_iter()) + { + if payload_versioned_hash != block_versioned_hash { + return Err(PayloadError::InvalidVersionedHashes); + } + } + } else { + // No Cancun fields, if block includes any blobs, this is an error + if num_blob_versioned_hashes > 0 { + return Err(PayloadError::InvalidVersionedHashes); + } + } + + Ok(()) } /// Call the inner validator to ensure the payload is well formed. @@ -43,12 +96,118 @@ impl TaikoExecutionPayloadValidator { payload: TaikoExecutionPayload, sidecar: ExecutionPayloadSidecar, ) -> Result { - let tx_hash = payload.tx_hash; - let withdrawals_hash = payload.withdrawals_hash; - let mut block = self.inner.ensure_well_formed_payload(payload, sidecar)?; - block.body = Default::default(); - block.transactions_root = tx_hash; - block.withdrawals_root = Some(withdrawals_hash); - Ok(block) + let expected_hash = payload.block_hash(); + + // First parse the block + let sealed_block = if payload.payload_inner.as_v1().transactions.is_empty() && + (payload.payload_inner.withdrawals().is_none() || + payload.payload_inner.withdrawals().is_some_and(|w| w.is_empty())) + { + create_taiko_block(payload, sidecar.parent_beacon_block_root())?.seal_slow() + } else { + try_into_block(payload.payload_inner, &sidecar)?.seal_slow() + }; + + // Ensure the hash included in the payload matches the block hash + if expected_hash != sealed_block.hash() { + return Err(PayloadError::BlockHash { + execution: sealed_block.hash(), + consensus: expected_hash, + }) + } + + if self.is_cancun_active_at_timestamp(sealed_block.timestamp) { + if sealed_block.header.blob_gas_used.is_none() { + // cancun active but blob gas used not present + return Err(PayloadError::PostCancunBlockWithoutBlobGasUsed) + } + if sealed_block.header.excess_blob_gas.is_none() { + // cancun active but excess blob gas not present + return Err(PayloadError::PostCancunBlockWithoutExcessBlobGas) + } + if sidecar.cancun().is_none() { + // cancun active but cancun fields not present + return Err(PayloadError::PostCancunWithoutCancunFields) + } + } else { + if sealed_block.has_blob_transactions() { + // cancun not active but blob transactions present + return Err(PayloadError::PreCancunBlockWithBlobTransactions) + } + if sealed_block.header.blob_gas_used.is_some() { + // cancun not active but blob gas used present + return Err(PayloadError::PreCancunBlockWithBlobGasUsed) + } + if sealed_block.header.excess_blob_gas.is_some() { + // cancun not active but excess blob gas present + return Err(PayloadError::PreCancunBlockWithExcessBlobGas) + } + if sidecar.cancun().is_some() { + // cancun not active but cancun fields present + return Err(PayloadError::PreCancunWithCancunFields) + } + } + + let shanghai_active = self.is_shanghai_active_at_timestamp(sealed_block.timestamp); + if !shanghai_active && sealed_block.body.withdrawals.is_some() { + // shanghai not active but withdrawals present + return Err(PayloadError::PreShanghaiBlockWithWithdrawals) + } + + if !self.is_prague_active_at_timestamp(sealed_block.timestamp) && + sealed_block.has_eip7702_transactions() + { + return Err(PayloadError::PrePragueBlockWithEip7702Transactions) + } + + // EIP-4844 checks + self.ensure_matching_blob_versioned_hashes( + &sealed_block, + &sidecar.cancun().cloned().into(), + )?; + + Ok(sealed_block) } } + +fn create_taiko_block( + payload: TaikoExecutionPayload, + parent_beacon_block_root: Option, +) -> Result { + Ok(Block { + header: Header { + parent_hash: payload.payload_inner.parent_hash(), + beneficiary: payload.payload_inner.as_v1().fee_recipient, + state_root: payload.payload_inner.as_v1().state_root, + transactions_root: payload.tx_hash, + receipts_root: payload.payload_inner.as_v1().receipts_root, + withdrawals_root: if payload.withdrawals_hash.is_zero() { + None + } else { + Some(payload.withdrawals_hash) + }, + logs_bloom: payload.payload_inner.as_v1().logs_bloom, + number: payload.payload_inner.block_number(), + gas_limit: payload.payload_inner.as_v1().gas_limit, + gas_used: payload.payload_inner.as_v1().gas_used, + timestamp: payload.payload_inner.timestamp(), + mix_hash: payload.payload_inner.prev_randao(), + base_fee_per_gas: Some( + payload.payload_inner.as_v1().base_fee_per_gas.try_into().map_err(|_| { + PayloadError::BaseFee(payload.payload_inner.as_v1().base_fee_per_gas) + })?, + ), + blob_gas_used: None, + excess_blob_gas: None, + parent_beacon_block_root, + extra_data: payload.payload_inner.as_v1().extra_data.clone(), + // Defaults + ommers_hash: EMPTY_OMMER_ROOT_HASH, + difficulty: Default::default(), + nonce: Default::default(), + requests_hash: None, + target_blobs_per_block: None, + }, + body: Default::default(), + }) +} diff --git a/crates/taiko/rpc/src/api.rs b/crates/taiko/rpc/src/api.rs index ff32e75d2593..52355bd752ea 100644 --- a/crates/taiko/rpc/src/api.rs +++ b/crates/taiko/rpc/src/api.rs @@ -13,15 +13,13 @@ use reth_evm::{ ConfigureEvmEnv, }; use reth_node_api::NodePrimitives; -use reth_primitives::{InvalidTransactionError, SealedBlockWithSenders}; +use reth_primitives::SealedBlockWithSenders; use reth_provider::{ BlockExecutionOutput, BlockIdReader, BlockNumReader, BlockReader, HeaderProvider, L1OriginReader, ProviderBlock, ProviderHeader, StateProofProvider, StateProviderFactory, }; use reth_revm::database::StateProviderDatabase; -use reth_rpc_eth_api::{ - helpers::TraceExt, EthApiTypes, FromEthApiError as _, FromEvmError as _, RpcNodeCore, -}; +use reth_rpc_eth_api::{helpers::TraceExt, EthApiTypes, FromEthApiError as _}; use reth_rpc_eth_types::EthApiError; use reth_rpc_server_types::ToRpcResult; use reth_rpc_types_compat::{block::from_block, transaction::from_recovered}; @@ -29,12 +27,12 @@ use reth_taiko_evm::encode_and_compress_tx_list; use reth_taiko_primitives::L1Origin; use reth_tasks::pool::BlockingTaskGuard; use reth_transaction_pool::{ - error::InvalidPoolTransactionError, pool::BestTransactionsWithPrioritizedSenders, - BestTransactions, BestTransactionsAttributes, TransactionPool, + pool::BestTransactionsWithPrioritizedSenders, BestTransactions, BestTransactionsAttributes, + TransactionPool, }; use revm::{ db::{BundleState, CacheDB, State}, - primitives::{EVMError, Env, InvalidTransaction, ResultAndState}, + primitives::{Env, ResultAndState}, DatabaseCommit, }; use serde::{Deserialize, Serialize}; @@ -45,7 +43,7 @@ use tracing::debug; /// Taiko rpc interface. #[cfg_attr(not(feature = "client"), rpc(server, namespace = "taiko"))] #[cfg_attr(feature = "client", rpc(server, client, namespace = "taiko"))] -pub trait TaikoApi { +pub trait TaikoApi { /// HeadL1Origin returns the latest L2 block's corresponding L1 origin. #[method(name = "headL1Origin")] async fn head_l1_origin(&self) -> RpcResult; @@ -59,6 +57,10 @@ pub trait TaikoApi { async fn get_sync_mode(&self) -> RpcResult { Ok("full".to_string()) } + + /// ProvingPreflight returns the pre-flight data for the proving process. + #[method(name = "provingPreflight")] + async fn proving_preflight(&self, block_id: BlockId) -> RpcResult>; } /// Taiko rpc interface. @@ -89,10 +91,6 @@ pub trait TaikoAuthApi { max_transactions_lists: u64, min_tip: u64, ) -> RpcResult>>; - - /// GetSyncMode returns the node sync mode. - #[method(name = "provingPreflight")] - async fn proving_preflight(&self, block_id: BlockId) -> RpcResult>; } /// `PreFlight` is the pre-flight data for the proving process. @@ -128,38 +126,42 @@ pub struct PreBuiltTxList { /// Taiko API #[derive(Debug)] -pub struct TaikoApi { - inner: Arc>, +pub struct TaikoApi { + inner: Arc>, } -#[derive(Debug)] -struct TaikoApiInner { - /// The implementation of `eth` API - eth_api: Eth, -} - -impl TaikoApi { +impl TaikoApi { /// Create a new instance of the [`DebugApi`] - pub fn new(eth: Eth) -> Self { - let inner = Arc::new(TaikoApiInner { eth_api: eth }); + pub fn new( + eth: Eth, + blocking_task_guard: BlockingTaskGuard, + block_executor: BlockExecutor, + ) -> Self { + let inner = TaikoApiInner::new(eth, blocking_task_guard, block_executor); Self { inner } } +} - /// Access the underlying `Eth` API. - pub fn eth_api(&self) -> &Eth { - &self.inner.eth_api +impl Clone for TaikoApi { + fn clone(&self) -> Self { + Self { inner: self.inner.clone() } } } #[async_trait] -impl TaikoApiServer for TaikoApi +impl + TaikoApiServer, ProviderHeader> + for TaikoApi where Eth: EthApiTypes + TraceExt + 'static, + BlockExecutor: + BlockExecutorProvider>>, { /// HeadL1Origin returns the latest L2 block's corresponding L1 origin. async fn head_l1_origin(&self) -> RpcResult { let res = self - .eth_api() + .inner + .eth_api .spawn_blocking_io(move |this| { this.provider().get_head_l1_origin().map_err(Eth::Error::from_eth_err) }) @@ -174,7 +176,8 @@ where let block_number = block_id.as_u64().ok_or_else(|| RethError::msg("invalid block id")).to_rpc_result()?; let res = self - .eth_api() + .inner + .eth_api .spawn_blocking_io(move |this| { this.provider().get_l1_origin(block_number).map_err(Eth::Error::from_eth_err) }) @@ -183,12 +186,30 @@ where debug!(target: "rpc::taiko", ?block_number, ?res, "Read l1 origin by id"); res } + + async fn proving_preflight( + &self, + block_id: BlockId, + ) -> RpcResult< + ProvingPreflight, ProviderHeader>, + > { + let _permit = self + .inner + .acquire_trace_permit() + .await + .map_err(RethError::other) + .map_err(EthApiError::Internal)?; + debug!(target: "rpc::taiko", ?block_id, "Read proving preflight"); + let res = self.inner.preflight(block_id).await.map_err(Into::into); + debug!(target: "rpc::taiko", ?res, "Read proving pre flight"); + res + } } /// Taiko API. #[derive(Debug)] pub struct TaikoAuthApi { - inner: Arc>, + inner: Arc>, } impl TaikoAuthApi { @@ -198,31 +219,96 @@ impl TaikoAuthApi { blocking_task_guard: BlockingTaskGuard, block_executor: BlockExecutor, ) -> Self { - let inner = - Arc::new(TaikoAuthApiInner { eth_api: eth, blocking_task_guard, block_executor }); + let inner = TaikoApiInner::new(eth, blocking_task_guard, block_executor); Self { inner } } +} - /// Access the underlying `Eth` API. - pub fn eth_api(&self) -> &Eth { - &self.inner.eth_api +impl Clone for TaikoAuthApi { + fn clone(&self) -> Self { + Self { inner: self.inner.clone() } } +} - /// Access the underlying `BlockExecutor`. - pub fn block_executor(&self) -> &BlockExecutor { - &self.inner.block_executor +#[async_trait] +impl + TaikoAuthApiServer, ProviderHeader> + for TaikoAuthApi +where + Eth: EthApiTypes + TraceExt + 'static, + BlockExecutor: + BlockExecutorProvider>>, +{ + /// TxPoolContent retrieves the transaction pool content with the given upper limits. + async fn tx_pool_content( + &self, + beneficiary: Address, + base_fee: u64, + block_max_gas_limit: u64, + max_bytes_per_tx_list: u64, + local_accounts: Option>, + max_transactions_lists: u64, + ) -> RpcResult>>> { + self.tx_pool_content_with_min_tip( + beneficiary, + base_fee, + block_max_gas_limit, + max_bytes_per_tx_list, + local_accounts, + max_transactions_lists, + 0, + ) + .await } -} -impl TaikoAuthApi { - /// Access the underlying provider. - pub fn provider(&self) -> &Eth::Provider { - self.inner.eth_api.provider() + /// TxPoolContent retrieves the transaction pool content with the given upper limits. + async fn tx_pool_content_with_min_tip( + &self, + beneficiary: Address, + base_fee: u64, + block_max_gas_limit: u64, + max_bytes_per_tx_list: u64, + local_accounts: Option>, + max_transactions_lists: u64, + min_tip: u64, + ) -> RpcResult>>> { + let _permit = self + .inner + .acquire_trace_permit() + .await + .map_err(RethError::other) + .map_err(EthApiError::Internal)?; + debug!( + target: "rpc::taiko", + ?beneficiary, + ?base_fee, + ?block_max_gas_limit, + ?max_bytes_per_tx_list, + ?local_accounts, + ?max_transactions_lists, + ?min_tip, + "Read tx pool context" + ); + let res = self + .inner + .pool_content( + beneficiary, + base_fee, + block_max_gas_limit, + max_bytes_per_tx_list, + local_accounts, + max_transactions_lists, + min_tip, + ) + .await + .map_err(Into::into); + debug!(target: "rpc::taiko", ?res, "Read tx pool context"); + res } } #[derive(Debug)] -struct TaikoAuthApiInner { +struct TaikoApiInner { /// The implementation of `eth` API eth_api: Eth, // restrict the number of concurrent calls to blocking calls @@ -231,28 +317,37 @@ struct TaikoAuthApiInner { block_executor: BlockExecutor, } -impl Clone for TaikoAuthApi { - fn clone(&self) -> Self { - Self { inner: Arc::clone(&self.inner) } +impl TaikoApiInner { + /// Create a new instance of the [`DebugApi`] + fn new( + eth: Eth, + blocking_task_guard: BlockingTaskGuard, + block_executor: BlockExecutor, + ) -> Arc { + Arc::new(TaikoApiInner { eth_api: eth, blocking_task_guard, block_executor }) } } type TransactionCompatTx

=

::TransactionResponse; -impl TaikoAuthApi +impl TaikoApiInner where Eth: EthApiTypes + TraceExt + 'static, BlockExecutor: BlockExecutorProvider>>, { + fn provider(&self) -> &Eth::Provider { + self.eth_api.provider() + } + /// Acquires a permit to execute a tracing call. async fn acquire_trace_permit(&self) -> Result { - self.inner.blocking_task_guard.clone().acquire_owned().await + self.blocking_task_guard.clone().acquire_owned().await } #[allow(clippy::type_complexity)] fn get_block_info( - &self, + self: &Arc, block_number: u64, ) -> Result<(SealedBlockWithSenders>, U256), Eth::Error> { let block = self @@ -274,7 +369,7 @@ where } async fn preflight( - &self, + self: &Arc, block_id: BlockId, ) -> Result< ProvingPreflight, ProviderHeader>, @@ -291,7 +386,7 @@ where let parent_block_number = block_number - 1; let this = self.clone(); - self.eth_api() + self.eth_api .spawn_with_state_at_block(parent_block_number.into(), move |parent_state| { let mut db = CacheDB::new(StateProviderDatabase::new(parent_state)); let (block, total_difficulty) = this.get_block_info(block_number)?; @@ -304,20 +399,20 @@ where let block = block.unseal(); let parent_block = parent_block.unseal(); let BlockExecutionOutput { state, .. } = - this.block_executor().executor(&mut db).execute((&block, total_difficulty).into()).map_err(|err|EthApiError::Internal(err.into()))?; - let rpc_block = from_block(block,total_difficulty,BlockTransactionsKind::Full, Some(block_hash), this.eth_api().tx_resp_builder())?; - let rpc_parent_block = from_block(parent_block, parent_total_difficulty, BlockTransactionsKind::Full, Some(parent_hash), this.eth_api().tx_resp_builder())?; + this.block_executor.executor(&mut db).execute((&block, total_difficulty).into()).map_err(|err|EthApiError::Internal(err.into()))?; + let rpc_block = from_block(block,total_difficulty,BlockTransactionsKind::Full, Some(block_hash), this.eth_api.tx_resp_builder())?; + let rpc_parent_block = from_block(parent_block, parent_total_difficulty, BlockTransactionsKind::Full, Some(parent_hash), this.eth_api.tx_resp_builder())?; let BundleState { state: bundle_state, contracts,.. } = state; - let state = this.eth_api().state_at_block_id(block_hash.into())?; + let state = this.eth_api.state_at_block_id(block_hash.into())?; let parent_state = db.db.into_inner(); let mut ancestor_headers = vec![]; for (touched_block_number, touched_block_hash) in db.block_hashes { let (touched_block, touched_total_difficulty) = this.get_block_info(touched_block_number.try_into().unwrap())?; - let rpc_touched_block = from_block(touched_block.unseal(), touched_total_difficulty, BlockTransactionsKind::Full, Some(touched_block_hash), this.eth_api().tx_resp_builder())?; + let rpc_touched_block = from_block(touched_block.unseal(), touched_total_difficulty, BlockTransactionsKind::Full, Some(touched_block_hash), this.eth_api.tx_resp_builder())?; ancestor_headers.push(rpc_touched_block.header); } @@ -359,7 +454,7 @@ where &self, _beneficiary: Address, base_fee: u64, - _block_max_gas_limit: u64, + block_max_gas_limit: u64, max_bytes_per_tx_list: u64, local_accounts: Option>, max_transactions_lists: u64, @@ -367,27 +462,12 @@ where ) -> Result>>, Eth::Error> { let last_num = self.provider().last_block_number().map_err(Eth::Error::from_eth_err)?; let ((cfg, block_env, _), _block) = futures::try_join!( - self.eth_api().evm_env_at(last_num.into()), - self.eth_api().block_with_senders(last_num.into()), + self.eth_api.evm_env_at(last_num.into()), + self.eth_api.block_with_senders(last_num.into()), )?; // replay all transactions of the block - self.eth_api() + self.eth_api .spawn_tracing(move |this| { - let best_txs = this - .pool() - .best_transactions_with_attributes(BestTransactionsAttributes::new( - base_fee, None, - )) - .filter_transactions(|tx| { - tx.effective_tip_per_gas(base_fee).is_some_and(|tip| tip >= min_tip as u128) - }); - let mut best_txs = BestTransactionsWithPrioritizedSenders::new( - local_accounts.unwrap_or_default().into_iter().collect(), - u64::MAX, - best_txs, - ); - best_txs.skip_blobs(); - let mut db = State::builder() .with_database(StateProviderDatabase::new( this.provider().latest().map_err(Eth::Error::from_eth_err)?, @@ -402,7 +482,28 @@ where let mut tx_list = vec![]; let mut buf_len: u64 = 0; + let best_txs = this + .pool() + .best_transactions_with_attributes(BestTransactionsAttributes::new( + base_fee, None, + )) + .filter_transactions(|tx| { + tx.effective_tip_per_gas(base_fee) + .is_some_and(|tip| tip >= min_tip as u128) + }); + let mut best_txs = BestTransactionsWithPrioritizedSenders::new( + local_accounts.clone().unwrap_or_default().into_iter().collect(), + u64::MAX, + best_txs, + ); + best_txs.skip_blobs(); + while let Some(pool_tx) = best_txs.next() { + // ensure we still have capacity for this transaction + if cumulative_gas_used + pool_tx.gas_limit() > block_max_gas_limit { + continue + } + let tx = pool_tx.to_consensus(); // Configure the environment for the block. @@ -416,43 +517,25 @@ where let ResultAndState { result, state } = match evm.transact() { Ok(res) => res, - Err(err) => { - match err { - EVMError::Transaction(err) => { - if matches!(err, InvalidTransaction::NonceTooLow { .. }) { - // if the nonce is too low, we can skip this transaction - } else { - // if the transaction is invalid, we can skip it and all - // of its - // descendants - best_txs.mark_invalid( - &pool_tx, - InvalidPoolTransactionError::Consensus( - InvalidTransactionError::TxTypeNotSupported, - ), - ); - } - continue - } - err => { - // this is an error that we should treat as fatal for this - // attempt - return Err(Eth::Error::from_evm_err(err)) - } - } - } + Err(_) => continue, }; tx_list.push(tx.clone()); // commit changes - let compressed_buf = encode_and_compress_tx_list(&tx_list) - .map_err(|err| EthApiError::EvmCustom(err.to_string()))?; - if compressed_buf.len() > max_bytes_per_tx_list as usize { - tx_list.pop(); - break; - } + match encode_and_compress_tx_list(&tx_list) { + Ok(compressed_buf) => { + if compressed_buf.len() > max_bytes_per_tx_list as usize { + tx_list.pop(); + break; + } + buf_len = compressed_buf.len() as u64; + } + Err(_) => { + tx_list.pop(); + continue + } + }; - buf_len = compressed_buf.len() as u64; // append gas used cumulative_gas_used += result.gas_used(); drop(evm); @@ -477,95 +560,3 @@ where .await } } - -#[async_trait] -impl - TaikoAuthApiServer, ProviderHeader> - for TaikoAuthApi -where - Eth: EthApiTypes + TraceExt + 'static, - BlockExecutor: - BlockExecutorProvider>>, -{ - /// TxPoolContent retrieves the transaction pool content with the given upper limits. - async fn tx_pool_content( - &self, - beneficiary: Address, - base_fee: u64, - block_max_gas_limit: u64, - max_bytes_per_tx_list: u64, - local_accounts: Option>, - max_transactions_lists: u64, - ) -> RpcResult>>> { - self.tx_pool_content_with_min_tip( - beneficiary, - base_fee, - block_max_gas_limit, - max_bytes_per_tx_list, - local_accounts, - max_transactions_lists, - 0, - ) - .await - } - - /// TxPoolContent retrieves the transaction pool content with the given upper limits. - async fn tx_pool_content_with_min_tip( - &self, - beneficiary: Address, - base_fee: u64, - block_max_gas_limit: u64, - max_bytes_per_tx_list: u64, - local_accounts: Option>, - max_transactions_lists: u64, - min_tip: u64, - ) -> RpcResult>>> { - let _permit = self - .acquire_trace_permit() - .await - .map_err(RethError::other) - .map_err(EthApiError::Internal)?; - debug!( - target: "rpc::taiko", - ?beneficiary, - ?base_fee, - ?block_max_gas_limit, - ?max_bytes_per_tx_list, - ?local_accounts, - ?max_transactions_lists, - ?min_tip, - "Read tx pool context" - ); - let res = self - .pool_content( - beneficiary, - base_fee, - block_max_gas_limit, - max_bytes_per_tx_list, - local_accounts, - max_transactions_lists, - min_tip, - ) - .await - .map_err(Into::into); - debug!(target: "rpc::taiko", ?res, "Read tx pool context"); - res - } - - async fn proving_preflight( - &self, - block_id: BlockId, - ) -> RpcResult< - ProvingPreflight, ProviderHeader>, - > { - let _permit = self - .acquire_trace_permit() - .await - .map_err(RethError::other) - .map_err(EthApiError::Internal)?; - debug!(target: "rpc::taiko", ?block_id, "Read proving preflight"); - let res = self.preflight(block_id).await.map_err(Into::into); - debug!(target: "rpc::taiko", ?res, "Read proving pre flight"); - res - } -}