diff --git a/contracts/config/anvil.json b/contracts/config/anvil.json index 36e149e4..8e3796c3 100644 --- a/contracts/config/anvil.json +++ b/contracts/config/anvil.json @@ -21,16 +21,14 @@ "rewardsCoordinatorInitPausedStatus": 0, "allocationManagerInitPausedStatus": 0, "deallocationDelay": 50, - "allocationConfigurationDelay": 75, + "allocationConfigurationDelay": 0, "beaconChainGenesisTimestamp": 1695902400 }, "avs": { "avsOwner": "0x976EA74026E726554dB657fA54763abd0C3a0aa9", "rewardsInitiator": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955", "validatorSetSubmitter": "0x976EA74026E726554dB657fA54763abd0C3a0aa9", - "validatorsStrategies": [ - "0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0" - ] + "validatorsStrategies": [] }, "snowbridge": { "randaoCommitDelay": 4, @@ -49,4 +47,4 @@ "0xf68aec7304bf37f340dae2ea20fb5271ee28a3128812b84a615da4789e458bde" ] } -} +} \ No newline at end of file diff --git a/contracts/deployments/state-diff.checksum b/contracts/deployments/state-diff.checksum index eed43883..2384c13d 100644 --- a/contracts/deployments/state-diff.checksum +++ b/contracts/deployments/state-diff.checksum @@ -1 +1 @@ -aa4e5f7e459c7a4f337016e845cd05aa56cccb41 \ No newline at end of file +9c861e3e1d290888127bc6d772fb1a3422bdf8b3 \ No newline at end of file diff --git a/contracts/deployments/state-diff.json b/contracts/deployments/state-diff.json index eccb9529..7b21fbfe 100644 --- a/contracts/deployments/state-diff.json +++ b/contracts/deployments/state-diff.json @@ -1,92 +1,54 @@ { - "36": { - "address": "0xac06641381166cf085281c45292147f833C622d7", - "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", + "0": { + "address": "0x00000961Ef480Eb55e80D19ad83579A64c007002", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd00", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + } + }, + "2": { + "address": "0x00000000219ab540356cBB839Cbe05303d7705Fa", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033000000000000000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", + "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b" + } + }, + "3": { + "address": "0x0000F90827F1C53a10cb7A02335B175320002935", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604657602036036042575f35600143038111604257611fff81430311604257611fff9006545f5260205ff35b5f5ffd5b5f35611fff60014303065500", "storage": {} }, - "44": { - "address": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf", - "code": "0x60806040526004361061021d575f3560e01c8063805ce31d1161011e578063b39053c5116100a8578063d58a8be41161006d578063d58a8be4146106cb578063df4ed829146106de578063f2e500b2146106fd578063f906d30914610710578063fe61cc491461072f575f5ffd5b8063b39053c5146105f9578063be8d42c014610618578063c536218f1461066e578063c66414c51461068d578063c9bd1e5b146106ac575f5ffd5b806390ffc4f9116100ee57806390ffc4f914610561578063928bc49d14610594578063988062ea146105b357806398ea5fca146105d2578063b0a23d44146105da575f5ffd5b8063805ce31d146104d55780638450a97c146104f7578063860929ee146105165780638ce2e33914610542575f5ffd5b80633ae65d7e116101aa57806346cd27511161016f57806346cd27511461045157806352054834146104705780635c60da1b146104835780635e6dae26146104975780636a64d9fb146104b6575f5ffd5b80633ae65d7e1461038a5780633f8bb4d9146103a9578063423e69b6146103c857806342e3ccfa14610413578063439fab9114610432575f5ffd5b806327c1d325116101f057806327c1d325146102cb5780632a6c3229146102ea5780632dd677b1146103295780632fb8ac581461034857806338004f6914610367575f5ffd5b80630705f4651461022157806309824a80146102565780630b6176461461026b57806326aa101f1461029c575b5f5ffd5b34801561022c575f5ffd5b5061024061023b3660046129ee565b61074e565b60405161024d9190612a19565b60405180910390f35b610269610264366004612a47565b6107c8565b005b348015610276575f5ffd5b5061027f610843565b604080519283526001600160801b0390911660208301520161024d565b3480156102a7575f5ffd5b506102bb6102b6366004612a47565b6108b7565b604051901515815260200161024d565b3480156102d6575f5ffd5b506102696102e5366004612aa6565b610933565b3480156102f5575f5ffd5b506103096103043660046129ee565b6109bb565b604080516001600160401b0393841681529290911660208301520161024d565b348015610334575f5ffd5b50610269610343366004612aa6565b610a39565b348015610353575f5ffd5b50610269610362366004612ae4565b610a91565b348015610372575f5ffd5b505f516020613ae35f395f51905f525460ff16610240565b348015610395575f5ffd5b506102696103a4366004612aa6565b610b3e565b3480156103b4575f5ffd5b506102696103c3366004612aa6565b610bb8565b3480156103d3575f5ffd5b506103fb7f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf81565b6040516001600160a01b03909116815260200161024d565b34801561041e575f5ffd5b5061026961042d366004612aa6565b610c10565b34801561043d575f5ffd5b5061026961044c366004612aa6565b610c68565b34801561045c575f5ffd5b5061026961046b366004612aa6565b610ca1565b61026961047e366004612b50565b610d1b565b34801561048e575f5ffd5b506103fb610da1565b3480156104a2575f5ffd5b506103fb6104b13660046129ee565b610dcf565b3480156104c1575f5ffd5b506102696104d0366004612ae4565b610dd9565b3480156104e0575f5ffd5b506104e9610e33565b60405190815260200161024d565b348015610502575f5ffd5b50610269610511366004612aa6565b610e9f565b348015610521575f5ffd5b5061052a610f19565b6040516001600160401b03909116815260200161024d565b34801561054d575f5ffd5b5061026961055c366004612c2f565b610f85565b34801561056c575f5ffd5b506103fb7f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf81565b34801561059f575f5ffd5b506104e96105ae366004612ccb565b6110fd565b3480156105be575f5ffd5b506102696105cd366004612aa6565b61119c565b6102696111f4565b3480156105e5575f5ffd5b506102696105f4366004612aa6565b61122e565b348015610604575f5ffd5b506102696106133660046129ee565b611286565b348015610623575f5ffd5b506104e9610632366004612a47565b6001600160a01b03165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e602052604090206001015490565b348015610679575f5ffd5b50610269610688366004612aa6565b6112e8565b348015610698575f5ffd5b506102bb6106a7366004612d32565b611340565b3480156106b7575f5ffd5b506102696106c6366004612aa6565b611389565b6102696106d9366004612d5b565b6113e1565b3480156106e9575f5ffd5b506102696106f8366004612db4565b611438565b61026961070b366004612e3f565b61191f565b34801561071b575f5ffd5b5061026961072a366004612aa6565b6119ac565b34801561073a575f5ffd5b506103fb6107493660046129ee565b611a04565b604051630705f46560e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f051290630705f46590602401602060405180830381865af415801561079e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f00565b92915050565b5f5c156107d3575f5ffd5b60015f5d6040516213049560e71b81526001600160a01b038216600482015273e7f1725e7734ce288f8367e1bb143e90bb3f0512906309824a80906024015f6040518083038186803b158015610827575f5ffd5b505af4158015610839573d5f5f3e3d5ffd5b505050505f5f5d50565b5f5f73e7f1725e7734ce288f8367e1bb143e90bb3f0512630b6176466040518163ffffffff1660e01b81526004016040805180830381865af415801561088b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108af9190612f1e565b915091509091565b6040516326aa101f60e01b81526001600160a01b03821660048201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f0512906326aa101f90602401602060405180830381865af415801561090f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f4d565b333014610952576040516282b42960e81b815260040160405180910390fd5b6040516316cba71360e21b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990635b2e9c4c9061098b9085908590600401612f94565b5f6040518083038186803b1580156109a1575f5ffd5b505af41580156109b3573d5f5f3e3d5ffd5b505050505050565b604051632a6c322960e01b8152600481018290525f90819073e7f1725e7734ce288f8367e1bb143e90bb3f051290632a6c3229906024016040805180830381865af4158015610a0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190612fa7565b91509150915091565b333014610a58576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f87570790638257f3d59061098b9085908590600401612f94565b333014610ab0576040516282b42960e81b815260040160405180910390fd5b60405163fe1aa59d60e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063fe1aa59d90610b0d9086907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9087908790600401612fd4565b5f6040518083038186803b158015610b23575f5ffd5b505af4158015610b35573d5f5f3e3d5ffd5b50505050505050565b333014610b5d576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b333014610bd7576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063253946459061098b9085908590600401612f94565b333014610c2f576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063ae8a4d989061098b9085908590600401612f94565b60405163439fab9160e01b8152730165878a594ca255338adfa4d48449f69242eb8f9063439fab919061098b9085908590600401612f94565b333014610cc0576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f5c15610d26575f5ffd5b60015f5d6040516326415bf360e21b815273e7f1725e7734ce288f8367e1bb143e90bb3f0512906399056fcc90610d6b9088903390899089908990899060040161306d565b5f6040518083038186803b158015610d81575f5ffd5b505af4158015610d93573d5f5f3e3d5ffd5b505050505f5f5d5050505050565b5f610dca7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b5f6107c282611a78565b333014610df8576040516282b42960e81b815260040160405180910390fd5b604051630e83f5b160e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063741fad8890610b0d90869086908690600401613102565b5f73e7f1725e7734ce288f8367e1bb143e90bb3f051263805ce31d6040518163ffffffff1660e01b8152600401602060405180830381865af4158015610e7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca919061311b565b333014610ebe576040516282b42960e81b815260040160405180910390fd5b60405163c31308d160e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063c31308d19061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f739fe46736679d2d9a65f0992f2272de9f3c7fa6e063fd10ebe56040518163ffffffff1660e01b8152600401602060405180830381865af4158015610f61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca9190613132565b5f5c15610f90575f5ffd5b60015f5d5f516020613ae35f395f51905f52610fe4610fb56040880160208901612d32565b66ffffffffffffff600882901c165f908152600484016020526040902054600160ff9092169190911b16151590565b1561100257604051633ab3447f60e11b815260040160405180910390fd5b6110466110156040880160208901612d32565b66ffffffffffffff600882901c165f90815260048401602052604090208054600160ff9093169290921b9091179055565b5f611052878787611ad0565b905061105e8185611b41565b61107b576040516309bde33960e01b815260040160405180910390fd5b505f61108687611be4565b90506110986040880160208901612d32565b6001600160401b03167f8856ab63954e6c2938803a4654fb704c8779757e7bfdbe94a578e341ec637a95886040013583866040516110e9939291909283529015156020830152604082015260600190565b60405180910390a250505f5f5d5050505050565b60405163928bc49d60e01b81526001600160a01b038416600482015263ffffffff831660248201526001600160801b03821660448201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063928bc49d90606401602060405180830381865af4158015611170573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611194919061311b565b949350505050565b3330146111bb576040516282b42960e81b815260040160405180910390fd5b60405163017b731160e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063017b73119061098b9085908590600401612f94565b604080513381523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1565b33301461124d576040516282b42960e81b815260040160405180910390fd5b604051630643752360e11b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990630c86ea469061098b9085908590600401612f94565b604051634a283cd960e01b815260048101829052739fe46736679d2d9a65f0992f2272de9f3c7fa6e090634a283cd9906024015f6040518083038186803b1580156112cf575f5ffd5b505af41580156112e1573d5f5f3e3d5ffd5b5050505050565b333014611307576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063ae8a4d989061098b9085908590600401612f94565b66ffffffffffffff600882901c165f9081527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96af6020526040812054600160ff84161b1615156107c2565b3330146113a8576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990638257f3d59061098b9085908590600401612f94565b5f5c156113ec575f5ffd5b60015f5d60ff831615611412576040516386eab41b60e01b815260040160405180910390fd5b61142f8460ff8516801561142857611428612a05565b8484611ca1565b5f5f5d50505050565b5f5c15611443575f5ffd5b60015f5d5f5a90505f6114568635611d5a565b80549091506114749061010090046001600160401b03166001613161565b6001600160401b031661148d6040880160208901612d32565b6001600160401b0316146114b457604051633ab3447f60e11b815260040160405180910390fd5b805461010090046001600160401b03168160016114d083613180565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505f8660405160200161150791906131cc565b6040516020818303038152906040528051906020012090505f61155d8787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250869250611db0915050565b905061156a81865f611df2565b611587576040516309bde33960e01b815260040160405180910390fd5b5f61159860a08a0160808b01612d32565b6001600160401b031690506115af6127108261327e565b60405a6115bd90603f613291565b6115c791906132a8565b10156115e657604051636eb14fc360e11b815260040160405180910390fd5b60015f6115f960608c0160408d016132c7565b600b81111561160a5761160a612a05565b036116795730638450a97c8361162360608e018e6132e0565b6040518463ffffffff1660e01b8152600401611640929190612f94565b5f604051808303815f88803b158015611657575f5ffd5b5087f193505050508015611669575060015b61167457505f611840565b611840565b600561168b60608c0160408d016132c7565b600b81111561169c5761169c612a05565b036116b5573063c9bd1e5b8361162360608e018e6132e0565b60016116c760608c0160408d016132c7565b600b8111156116d8576116d8612a05565b036116f15730633f8bb4d98361162360608e018e6132e0565b600761170360608c0160408d016132c7565b600b81111561171457611714612a05565b0361172d57306327c1d3258361162360608e018e6132e0565b600861173f60608c0160408d016132c7565b600b81111561175057611750612a05565b03611769573063b0a23d448361162360608e018e6132e0565b600961177b60608c0160408d016132c7565b600b81111561178c5761178c612a05565b036117a557306346cd27518361162360608e018e6132e0565b600a6117b760608c0160408d016132c7565b600b8111156117c8576117c8612a05565b036117e1573063c536218f8361162360608e018e6132e0565b600b6117f360608c0160408d016132c7565b600b81111561180457611804612a05565b0361183d5730636a64d9fb838c3561181f60608f018f6132e0565b6040518563ffffffff1660e01b815260040161164093929190613102565b505f5b5f5a61184c9088613322565b611854611e97565b61185e919061327e565b90505f61186f3a8d60a00135611ebb565b6118799083613291565b90505f61189361188d60c08f01358461327e565b47611ebb565b905061189d611ed0565b8111156118ae576118ae3382611edd565b8c60e001358d5f01357f617fdb0cb78f01551a192a3673208ec5eb09f20a90acf673c63a0dcb11745a7a8f60200160208101906118eb9190612d32565b604080516001600160401b03909216825288151560208301520160405180910390a35050505050505050505f5f5d50505050565b5f5c1561192a575f5ffd5b60015f5d604051631fccb47160e31b8152739fe46736679d2d9a65f0992f2272de9f3c7fa6e09063fe65a38890611973908b908b908b908b908b908b908b908b90600401613335565b5f6040518083038186803b158015611989575f5ffd5b505af415801561199b573d5f5f3e3d5ffd5b505050505f5f5d5050505050505050565b3330146119cb576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063253946459061098b9085908590600401612f94565b60405163fe61cc4960e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063fe61cc4990602401602060405180830381865af4158015611a54573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c291906133ef565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b031680611acb5760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f84604051602001611ae3919061346b565b604051602081830303815290604052805190602001209050611b388484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859250611db0915050565b95945050505050565b6040516372dd6c6d60e11b81525f90735fbdb2315678afecb367f032d93f642f64180aa39063e5bad8da90611b9e907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9087908790600401613605565b602060405180830381865af4158015611bb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bdd9190612f4d565b9392505050565b5f6001815b611bf6606085018561366f565b9050811015611c9a57611c38611c0f606086018661366f565b83818110611c1f57611c1f6136b4565b9050602002810190611c3191906136c8565b8535611f0b565b611c9257611c4c6040850160208601612d32565b6001600160401b03167fa6dc208277bb3da3666e7305baf550db2daf26f8f386a431a4b27cc7a02965a282604051611c8691815260200190565b60405180910390a25f91505b600101611be9565b5092915050565b6001600160801b03341115611cc9576040516330e972ad60e01b815260040160405180910390fd5b611cd381836136e6565b6001600160801b0316341015611cfc5760405163044044a560e21b815260040160405180910390fd5b5f611d078585612127565b9050611d12856121c7565b604080515f808252602082019092526112e19130918491611d43565b6060815260200190600190039081611d2e5790505b5060405180602001604052805f8152508787612271565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b0316611acb57604051636ddd9da960e01b815260040160405180910390fd5b5f81815b8451811015611dea57611de082868381518110611dd357611dd36136b4565b602002602001015161250c565b9150600101611db4565b509392505050565b6040516316db930b60e11b81525f90738a791620dd6260079bf849dc5567adc3f2fdc31890632db7261690611e58907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9061ea0360f01b9089908990899060040161374a565b602060405180830381865af4158015611e73573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111949190612f4d565b5f611ea436610bb8611ebb565b611eaf906010613291565b610dca90618b7261327e565b5f818310611ec95781611bdd565b5090919050565b5f610dca3a615208613291565b5f5f5f5f5f85875af1905080611f0657604051633d2cec6f60e21b815260040160405180910390fd5b505050565b5f615dc0611f1f6040850160208601612d32565b6001600160401b0316611f32919061327e565b60405a611f4090603f613291565b611f4a91906132a8565b1015611f69576040516360ee124760e01b815260040160405180910390fd5b5f611f7760208501856138ef565b60ff1603612001573063f906d309611f956040860160208701612d32565b6001600160401b0316611fab60408701876132e0565b6040518463ffffffff1660e01b8152600401611fc8929190612f94565b5f604051808303815f88803b158015611fdf575f5ffd5b5087f193505050508015611ff1575060015b611ffc57505f6107c2565b61211e565b600161201060208501856138ef565b60ff160361202e5730632dd677b1611f956040860160208701612d32565b600261203d60208501856138ef565b60ff160361205b5730633ae65d7e611f956040860160208701612d32565b600361206a60208501856138ef565b60ff160361208857306342e3ccfa611f956040860160208701612d32565b600461209760208501856138ef565b60ff16036120b5573063988062ea611f956040860160208701612d32565b60056120c460208501856138ef565b60ff16036121175730632fb8ac586120e26040860160208701612d32565b6001600160401b0316846120f960408801886132e0565b6040518563ffffffff1660e01b8152600401611fc893929190613102565b505f6107c2565b50600192915050565b604080518082019091525f8152606060208201526040518060400160405280600160ff1681526020016040518060400160405280866001600160a01b03168152602001855f81111561217b5761217b612a05565b60ff1690526040516121ae919060200181516001600160a01b0316815260209182015160ff169181019190915260400190565b60408051601f1981840301815291905290529392505050565b6121d9816001600160a01b0316612538565b6121f65760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e60208190526040909120805460ff16801561224457506122448161257e565b1561226257604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b612279612592565b6001600160801b033411156122a1576040516330e972ad60e01b815260040160405180910390fd5b6122ab81836136e6565b6001600160801b03163410156122d45760405163044044a560e21b815260040160405180910390fd5b5f6122fe7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79611a78565b90506123136001600160a01b03821634611edd565b8451600810156123365760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561235057612350613705565b60405190808252806020026020018201604052801561239557816020015b604080518082019091525f81526060602082015281526020019060019003908161236e5790505b5090505f5b86518110156123ea576123c58782815181106123b8576123b86136b4565b60200260200101516125d9565b8282815181106123d7576123d76136b4565b602090810291909101015260010161239a565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0545f516020613ae35f395f51905f529061242f906001600160401b03166001613161565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a8152602001888152602001868834612490919061390a565b61249a919061390a565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c916124f8916001600160401b0316908490613978565b60405180910390a150505050505050505050565b5f818310612526575f828152602084905260409020611bdd565b5f838152602083905260409020611bdd565b5f6001600160a01b0382163f158015906107c25750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f61258b82600101541590565b1592915050565b5f516020613ae35f395f51905f5280545f9060ff1660018111156125b8576125b8612a05565b146125d657604051633ac4266d60e11b815260040160405180910390fd5b50565b604080518082019091525f815260606020820152602082015160ff165f819003612622575f5f848060200190518101906126139190613a8d565b9250925050611b38828261263b565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166126ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b0316116126d75760405163162908e360e11b815260040160405180910390fd5b600181015461270d5760018201546126fa906001600160a01b03168633876127a5565b6127048585612821565b925050506107c2565b6127168161257e565b1561278c57604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b158015612768575f5ffd5b505af115801561277a573d5f5f3e3d5ffd5b50505050612704816001015485612888565b604051636890662960e01b815260040160405180910390fd5b6127b7836001600160a01b0316612538565b6127d45760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036127fd5760405163162908e360e11b815260040160405180910390fd5b61281b6001600160a01b03841683866001600160801b0385166128e2565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060016121ae565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a905291511695810195909552929390830191016121ae565b6040516001600160a01b038085166024830152831660448201526064810182905261281b90859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b0316836040516129509190613acc565b5f604051808303815f865af19150503d805f8114612989576040519150601f19603f3d011682016040523d82523d5f602084013e61298e565b606091505b50915091505f8280156129b95750815115806129b95750818060200190518101906129b99190612f4d565b90508015806129d057506001600160a01b0385163b155b156112e15760405163022e258160e11b815260040160405180910390fd5b5f602082840312156129fe575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310612a2d57612a2d612a05565b91905290565b6001600160a01b03811681146125d6575f5ffd5b5f60208284031215612a57575f5ffd5b8135611bdd81612a33565b5f5f83601f840112612a72575f5ffd5b5081356001600160401b03811115612a88575f5ffd5b602083019150836020828501011115612a9f575f5ffd5b9250929050565b5f5f60208385031215612ab7575f5ffd5b82356001600160401b03811115612acc575f5ffd5b612ad885828601612a62565b90969095509350505050565b5f5f5f60408486031215612af6575f5ffd5b8335925060208401356001600160401b03811115612b12575f5ffd5b612b1e86828701612a62565b9497909650939450505050565b63ffffffff811681146125d6575f5ffd5b6001600160801b03811681146125d6575f5ffd5b5f5f5f5f5f60a08688031215612b64575f5ffd5b8535612b6f81612a33565b94506020860135612b7f81612b2b565b935060408601356001600160401b03811115612b99575f5ffd5b860160408189031215612baa575f5ffd5b92506060860135612bba81612b3c565b91506080860135612bca81612b3c565b809150509295509295909350565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b6020830191508360208260051b8501011115612a9f575f5ffd5b5f6101008284031215612c29575f5ffd5b50919050565b5f5f5f5f5f60808688031215612c43575f5ffd5b85356001600160401b03811115612c58575f5ffd5b860160808189031215612c69575f5ffd5b945060208601356001600160401b03811115612c83575f5ffd5b612c8f88828901612bd8565b90955093505060408601356001600160401b03811115612cad575f5ffd5b612cb988828901612c18565b95989497509295606001359392505050565b5f5f5f60608486031215612cdd575f5ffd5b8335612ce881612a33565b92506020840135612cf881612b2b565b91506040840135612d0881612b3c565b809150509250925092565b6001600160401b03811681146125d6575f5ffd5b8035611acb81612d13565b5f60208284031215612d42575f5ffd5b8135611bdd81612d13565b60ff811681146125d6575f5ffd5b5f5f5f5f60808587031215612d6e575f5ffd5b8435612d7981612a33565b93506020850135612d8981612d4d565b92506040850135612d9981612b3c565b91506060850135612da981612b3c565b939692955090935050565b5f5f5f5f60608587031215612dc7575f5ffd5b84356001600160401b03811115612ddc575f5ffd5b612de887828801612c18565b94505060208501356001600160401b03811115612e03575f5ffd5b612e0f87828801612bd8565b90945092505060408501356001600160401b03811115612e2d575f5ffd5b85016101408188031215612da9575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612e56575f5ffd5b88356001600160401b03811115612e6b575f5ffd5b612e778b828c01612a62565b90995097505060208901356001600160401b03811115612e95575f5ffd5b612ea18b828c01612bd8565b90975095505060408901356001600160401b03811115612ebf575f5ffd5b612ecb8b828c01612a62565b9095509350506060890135612edf81612b3c565b91506080890135612eef81612b3c565b809150509295985092959890939650565b5f60208284031215612f10575f5ffd5b815160028110611bdd575f5ffd5b5f5f60408385031215612f2f575f5ffd5b82516020840151909250612f4281612b3c565b809150509250929050565b5f60208284031215612f5d575f5ffd5b81518015158114611bdd575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f611194602083018486612f6c565b5f5f60408385031215612fb8575f5ffd5b8251612fc381612d13565b6020840151909250612f4281612d13565b8481526001600160a01b03841660208201526060604082018190525f90612ffe9083018486612f6c565b9695505050505050565b6001600160a01b03841681526040602082018190525f90611b389083018486612f6c565b5f5f8335601e19843603018112613041575f5ffd5b83016020810192503590506001600160401b0381111561305f575f5ffd5b803603821315612a9f575f5ffd5b6001600160a01b0387811682528616602082015263ffffffff8516604082015260c060608201525f8435600381108015906130a6575f5ffd5b5060c08301526130b9602086018661302c565b604060e08501526130cf61010085018284612f6c565b925050506001600160801b03841660808301526130f760a08301846001600160801b03169052565b979650505050505050565b838152604060208201525f611b38604083018486612f6c565b5f6020828403121561312b575f5ffd5b5051919050565b5f60208284031215613142575f5ffd5b8151611bdd81612d13565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156107c2576107c261314d565b5f6001600160401b0382166001600160401b0381036131a1576131a161314d565b60010192915050565b8035600c8110611acb575f5ffd5b600c81106131c8576131c8612a05565b9052565b60208082528235828201525f908301356131e581612d13565b6001600160401b038116604084015250613201604084016131aa565b61320e60608401826131b8565b5061321c606084018461302c565b610100608085015261323361012085018284612f6c565b91505061324260808501612d27565b6001600160401b03811660a08501525060a084013560c08481019190915284013560e08085019190915290930135610100909201919091525090565b808201808211156107c2576107c261314d565b80820281158282048414176107c2576107c261314d565b5f826132c257634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156132d7575f5ffd5b611bdd826131aa565b5f5f8335601e198436030181126132f5575f5ffd5b8301803591506001600160401b0382111561330e575f5ffd5b602001915036819003821315612a9f575f5ffd5b818103818111156107c2576107c261314d565b60a081525f61334860a083018a8c612f6c565b82810360208401528088825260208201905060208960051b8301018a5f5b8b8110156133a457848303601f19018452613381828e61302c565b61338c858284612f6c565b60209687019690955093909301925050600101613366565b505084810360408601526133b981898b612f6c565b93505050506133d360608301856001600160801b03169052565b6001600160801b03831660808301529998505050505050505050565b5f602082840312156133ff575f5ffd5b8151611bdd81612a33565b5f5f8335601e1984360301811261341f575f5ffd5b83016020810192503590506001600160401b0381111561343d575f5ffd5b8060051b3603821315612a9f575f5ffd5b5f8235605e19833603018112613462575f5ffd5b90910192915050565b60208082528235828201525f9060a083019084013561348981612d13565b6001600160401b0381166040850152505f60408501359050806060850152506134b5606085018561340a565b6080808601528281845260c08601905060c08260051b8701019350825f5b838110156135555787860360bf190183526134ee828661344e565b80356134f981612d4d565b60ff168752602081013561350c81612d13565b6001600160401b03166020880152613527604082018261302c565b91506060604089015261353e606089018383612f6c565b9750505060209283019291909101906001016134d3565b5093979650505050505050565b803561356d81612d4d565b60ff168252602081013561358081612b2b565b63ffffffff1660208301526040818101359083015260608101356135a381612d13565b6001600160401b0316606083015260808101356135bf81612b2b565b63ffffffff16608083015260a090810135910152565b8183525f6001600160fb1b038311156135ec575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03841681526020810183905260606040820181905261362d90820183613562565b5f61363b60c084018461340a565b610100610120850152613653610160850182846135d5565b60e0959095013561014094909401939093525091949350505050565b5f5f8335601e19843603018112613684575f5ffd5b8301803591506001600160401b0382111561369d575f5ffd5b6020019150600581901b3603821315612a9f575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126136dc575f5ffd5b9190910192915050565b6001600160801b0381811683821601908111156107c2576107c261314d565b634e487b7160e01b5f52604160045260245ffd5b80358252602080820135908301525f613735604083018361340a565b60606040860152611b386060860182846135d5565b6001600160a01b03861681526001600160e01b0319851660208201526040810184905260a060608201525f833536859003609e19018112613789575f5ffd5b61014060a0840152840180356101e084015260208101356102008401526040810135610220840152606081013561024084015261028083016137ce608083018361340a565b925060a0610260860152818383526102a0860190506102a08460051b8701019250815f5b8581101561386e5787850361029f1901835261380e828561344e565b8035865260208101356001600160e01b0319811680821461382d575f5ffd5b602088015250613840604082018261302c565b915060606040880152613857606088018383612f6c565b9650505060209283019291909101906001016137f2565b5050505061387f602087018761344e565b848203609f190160c086015291506138978183613719565b9150506138aa60e0840160408701613562565b6138b861010086018661340a565b848303609f19016101a08601526138d08382846135d5565b6101208801356101c087015286151560808701529350612ffe92505050565b5f602082840312156138ff575f5ffd5b8135611bdd81612d4d565b6001600160801b0382811682821603908111156107c2576107c261314d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f6020820151604060208501526111946040850182613929565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b818110156139ff5761013f198786030183526139ea858551613957565b945060209384019392909201916001016139cd565b505050506040840151838203603f19016080850152613a1e8282613957565b9150506060840151603f198483030160a0850152613a3c8282613929565b9150506080840151613a5960c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b5f5f5f60608486031215613a9f575f5ffd5b8351613aaa81612d4d565b6020850151909350613abb81612a33565b6040850151909250612d0881612b3c565b5f82518060208501845e5f92019182525091905056fe0096e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96aba2646970667358221220d2f603e4644996fdd6f5bfe996a433ec4c63b91e433ec6617ddd8c10790babb164736f6c634300081c003300000000000000000000000000", - "storage": {} - }, - "10": { - "address": "0xf5059a5D33d5853360D16C683c16e67980206f36", - "code": "0x608060405234801561000f575f5ffd5b5060043610610187575f3560e01c80637a8b2637116100d9578063c4d66de811610093578063df6fadc11161006e578063df6fadc114610361578063e3dae51c1461037c578063f3e738751461038f578063fabc1cbc146103a2575f5ffd5b8063c4d66de814610328578063ce7c2ac21461033b578063d9caed121461034e575f5ffd5b80637a8b2637146102ad578063886f1195146102c05780638c871019146102e75780638f6a6240146102fa578063a6ab36f21461030d578063ab5921e114610320575f5ffd5b806347e7ef2411610144578063595c6a671161011f578063595c6a67146102655780635ac86ab71461026d5780635c975abb1461029c57806361b01b5d146102a4575f5ffd5b806347e7ef241461022a57806354fd4d501461023d578063553ca5f814610252575f5ffd5b806311c70c9d1461018b578063136439dd146101a05780632495a599146101b357806339b70e38146101e35780633a98ef391461020a57806343fe08b014610221575b5f5ffd5b61019e6101993660046111b1565b6103b5565b005b61019e6101ae3660046111d1565b6103cb565b6032546101c6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101c67f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b61021360335481565b6040519081526020016101da565b61021360645481565b6102136102383660046111fc565b610401565b610245610530565b6040516101da9190611226565b61021361026036600461125b565b610560565b61019e610573565b61028c61027b36600461128b565b6001805460ff9092161b9081161490565b60405190151581526020016101da565b600154610213565b61021360655481565b6102136102bb3660046111d1565b610587565b6101c67f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6102136102f53660046111d1565b6105d0565b61021361030836600461125b565b6105da565b61019e61031b3660046112a6565b6105e7565b6102456106c2565b61019e61033636600461125b565b6106e2565b61021361034936600461125b565b6107a8565b61021361035c3660046112dc565b61083a565b606454606554604080519283526020830191909152016101da565b61021361038a3660046111d1565b61093c565b61021361039d3660046111d1565b610973565b61019e6103b03660046111d1565b61097d565b6103bd6109ea565b6103c78282610a9b565b5050565b6103d3610b3f565b60015481811681146103f85760405163c61dca5d60e01b815260040160405180910390fd5b6103c782610be2565b5f5f61040c81610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610455576040516348da714f60e01b815260040160405180910390fd5b61045f8484610c55565b6033545f61046f6103e88361132e565b90505f6103e861047d610cac565b610487919061132e565b90505f6104948783611341565b9050806104a18489611354565b6104ab919061136b565b9550855f036104cd57604051630c392ed360e11b815260040160405180910390fd5b6104d7868561132e565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561050c57604051632f14e8a360e11b815260040160405180910390fd5b610525826103e8603354610520919061132e565b610d16565b505050505092915050565b606061055b7f76312e302e300000000000000000000000000000000000000000000000000006610d62565b905090565b5f61056d6102bb836107a8565b92915050565b61057b610b3f565b6105855f19610be2565b565b5f5f6103e8603354610599919061132e565b90505f6103e86105a7610cac565b6105b1919061132e565b9050816105be8583611354565b6105c8919061136b565b949350505050565b5f61056d8261093c565b5f61056d61039d836107a8565b5f54610100900460ff161580801561060557505f54600160ff909116105b8061061e5750303b15801561061e57505f5460ff166001145b6106435760405162461bcd60e51b815260040161063a9061138a565b60405180910390fd5b5f805460ff191660011790558015610664575f805461ff0019166101001790555b61066e8484610a9b565b61067782610d9f565b80156106bc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60606040518060800160405280604d815260200161145b604d9139905090565b5f54610100900460ff161580801561070057505f54600160ff909116105b806107195750303b15801561071957505f5460ff166001145b6107355760405162461bcd60e51b815260040161063a9061138a565b5f805460ff191660011790558015610756575f805461ff0019166101001790555b61075f82610d9f565b80156103c7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa158015610816573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056d91906113d8565b5f600161084681610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161461088f576040516348da714f60e01b815260040160405180910390fd5b61089a858585610eea565b603354808411156108be57604051630b469df360e41b815260040160405180910390fd5b5f6108cb6103e88361132e565b90505f6103e86108d9610cac565b6108e3919061132e565b9050816108f08783611354565b6108fa919061136b565b94506109068684611341565b6033556109266109168683611341565b6103e8603354610520919061132e565b610931888887610f1d565b505050509392505050565b5f5f6103e860335461094e919061132e565b90505f6103e861095c610cac565b610966919061132e565b9050806105be8386611354565b5f61056d82610587565b6109856109ea565b600154801982198116146109ac5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6a91906113ef565b6001600160a01b0316336001600160a01b0316146105855760405163794821ff60e01b815260040160405180910390fd5b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610b345760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610ba1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc5919061140a565b61058557604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610c34816001805460ff9092161b9081161490565b15610c525760405163840a48d560e01b815260040160405180910390fd5b50565b606454811115610c785760405163052b07b760e21b815260040160405180910390fd5b606554610c83610cac565b1115610ca25760405163d86bae6760e01b815260040160405180910390fd5b6103c78282610f31565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cf2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055b91906113d8565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610d4a84670de0b6b3a7640000611354565b610d54919061136b565b60405190815260200161079c565b60605f610d6e83610f5f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610e095760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161063a565b603280546001600160a01b0319166001600160a01b038316179055610e2d5f610be2565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec39190611429565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610f1857604051630312abdd60e61b815260040160405180910390fd5b505050565b610f186001600160a01b0383168483610f86565b6032546001600160a01b038381169116146103c757604051630312abdd60e61b815260040160405180910390fd5b5f60ff8216601f81111561056d57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610f18928692915f91611015918516908490611094565b905080515f1480611035575080806020019051810190611035919061140a565b610f185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063a565b60606105c884845f85855f5f866001600160a01b031685876040516110b99190611444565b5f6040518083038185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b509150915061110987838387611114565b979650505050505050565b606083156111825782515f0361117b576001600160a01b0385163b61117b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063a565b50816105c8565b6105c883838151156111975781518083602001fd5b8060405162461bcd60e51b815260040161063a9190611226565b5f5f604083850312156111c2575f5ffd5b50508035926020909101359150565b5f602082840312156111e1575f5ffd5b5035919050565b6001600160a01b0381168114610c52575f5ffd5b5f5f6040838503121561120d575f5ffd5b8235611218816111e8565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561126b575f5ffd5b8135611276816111e8565b9392505050565b60ff81168114610c52575f5ffd5b5f6020828403121561129b575f5ffd5b81356112768161127d565b5f5f5f606084860312156112b8575f5ffd5b833592506020840135915060408401356112d1816111e8565b809150509250925092565b5f5f5f606084860312156112ee575f5ffd5b83356112f9816111e8565b92506020840135611309816111e8565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561056d5761056d61131a565b8181038181111561056d5761056d61131a565b808202811582820484141761056d5761056d61131a565b5f8261138557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e8575f5ffd5b5051919050565b5f602082840312156113ff575f5ffd5b8151611276816111e8565b5f6020828403121561141a575f5ffd5b81518015158114611276575f5ffd5b5f60208284031215611439575f5ffd5b81516112768161127d565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220bfdf80ca4b361e8018a5f82c2bf79ca0703b2a580a1928bf0168143ae266103964736f6c634300081c0033000000000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "33": { - "address": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x000003e80000000000001c2090f79bf6eb2c4f870365e785982e1f101e93b906", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" - } - }, - "32": { - "address": "0x9A676e781A523b5d0C0e43731313A708CB607508", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000a85233c63b9ee964add6f2cffe00fd84eb32338f", - "0xedc9a600799bdec0e14ee5042ef794e1b4738abf52d225059d6b470373867218": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "42": { - "address": "0xc6e7DF5E7b4f2A278906862b61205850344D4e7d", - "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637a8b2637116100bf578063ce7c2ac211610079578063ce7c2ac2146102d7578063d9caed12146102ea578063e3dae51c146102fd578063f3e7387514610310578063fabc1cbc14610323578063fdc371ce14610336575f5ffd5b80637a8b26371461025c578063886f11951461026f5780638c871019146102965780638f6a6240146102a9578063ab5921e1146102bc578063c4d66de8146102c4575f5ffd5b8063485cc95511610110578063485cc955146101e257806354fd4d50146101f5578063553ca5f81461020a578063595c6a671461021d5780635ac86ab7146102255780635c975abb14610254575f5ffd5b8063136439dd1461014c5780632495a5991461016157806339b70e38146101915780633a98ef39146101b857806347e7ef24146101cf575b5f5ffd5b61015f61015a3660046111cb565b610349565b005b603254610174906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101747f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6101c160335481565b604051908152602001610188565b6101c16101dd3660046111f6565b610383565b61015f6101f0366004611220565b6104b2565b6101fd61059d565b6040516101889190611257565b6101c161021836600461128c565b6105cd565b61015f6105e0565b6102446102333660046112bc565b6001805460ff9092161b9081161490565b6040519015158152602001610188565b6001546101c1565b6101c161026a3660046111cb565b6105f4565b6101747f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6101c16102a43660046111cb565b61063d565b6101c16102b736600461128c565b610647565b6101fd610654565b61015f6102d236600461128c565b610674565b6101c16102e536600461128c565b61073a565b6101c16102f83660046112d7565b6107cc565b6101c161030b3660046111cb565b6108ce565b6101c161031e3660046111cb565b610905565b61015f6103313660046111cb565b61090f565b606454610174906001600160a01b031681565b61035161097c565b60015481811681146103765760405163c61dca5d60e01b815260040160405180910390fd5b61037f82610a1f565b5050565b5f5f61038e81610a5c565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816146103d7576040516348da714f60e01b815260040160405180910390fd5b6103e18484610a92565b6033545f6103f16103e883611329565b90505f6103e86103ff610b4b565b6104099190611329565b90505f610416878361133c565b905080610423848961134f565b61042d9190611366565b9550855f0361044f57604051630c392ed360e11b815260040160405180910390fd5b6104598685611329565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561048e57604051632f14e8a360e11b815260040160405180910390fd5b6104a7826103e86033546104a29190611329565b610bb5565b505050505092915050565b5f54610100900460ff16158080156104d057505f54600160ff909116105b806104e95750303b1580156104e957505f5460ff166001145b61050e5760405162461bcd60e51b815260040161050590611385565b60405180910390fd5b5f805460ff19166001179055801561052f575f805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03851617905561055382610c01565b8015610598575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60606105c87f76312e302e300000000000000000000000000000000000000000000000000006610d4c565b905090565b5f6105da61026a8361073a565b92915050565b6105e861097c565b6105f25f19610a1f565b565b5f5f6103e86033546106069190611329565b90505f6103e8610614610b4b565b61061e9190611329565b90508161062b858361134f565b6106359190611366565b949350505050565b5f6105da826108ce565b5f6105da61031e8361073a565b60606040518060800160405280604d8152602001611456604d9139905090565b5f54610100900460ff161580801561069257505f54600160ff909116105b806106ab5750303b1580156106ab57505f5460ff166001145b6106c75760405162461bcd60e51b815260040161050590611385565b5f805460ff1916600117905580156106e8575f805461ff0019166101001790555b6106f182610c01565b801561037f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa1580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105da91906113d3565b5f60016107d881610a5c565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610821576040516348da714f60e01b815260040160405180910390fd5b61082c858585610d89565b6033548084111561085057604051630b469df360e41b815260040160405180910390fd5b5f61085d6103e883611329565b90505f6103e861086b610b4b565b6108759190611329565b905081610882878361134f565b61088c9190611366565b9450610898868461133c565b6033556108b86108a8868361133c565b6103e86033546104a29190611329565b6108c3888887610dcf565b505050509392505050565b5f5f6103e86033546108e09190611329565b90505f6103e86108ee610b4b565b6108f89190611329565b90508061062b838661134f565b5f6105da826105f4565b610917610ec8565b6001548019821981161461093e5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109de573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0291906113ea565b6105f257604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610a71816001805460ff9092161b9081161490565b15610a8f5760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161480610abb57506064546001600160a01b038381169116145b610ad857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b039081169083160361037f57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e906024015f604051808303815f87803b158015610b31575f5ffd5b505af1158015610b43573d5f5f3e3d5ffd5b505050505050565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c891906113d3565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610be984670de0b6b3a764000061134f565b610bf39190611366565b60405190815260200161072e565b5f54610100900460ff16610c6b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610505565b603280546001600160a01b0319166001600160a01b038316179055610c8f5f610a1f565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d259190611409565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b60605f610d5883610f79565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6032546001600160a01b0383811691161480610db257506064546001600160a01b038381169116145b61059857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610eb45760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015610e35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5991906113ea565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb0906024015f604051808303815f87803b158015610e9d575f5ffd5b505af1158015610eaf573d5f5f3e3d5ffd5b505050505b6105986001600160a01b0383168483610fa0565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190611424565b6001600160a01b0316336001600160a01b0316146105f25760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f8111156105da57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610598928692915f9161102f9185169084906110ae565b905080515f148061104f57508080602001905181019061104f91906113ea565b6105985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610505565b606061063584845f85855f5f866001600160a01b031685876040516110d3919061143f565b5f6040518083038185875af1925050503d805f811461110d576040519150601f19603f3d011682016040523d82523d5f602084013e611112565b606091505b50915091506111238783838761112e565b979650505050505050565b6060831561119c5782515f03611195576001600160a01b0385163b6111955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610505565b5081610635565b61063583838151156111b15781518083602001fd5b8060405162461bcd60e51b81526004016105059190611257565b5f602082840312156111db575f5ffd5b5035919050565b6001600160a01b0381168114610a8f575f5ffd5b5f5f60408385031215611207575f5ffd5b8235611212816111e2565b946020939093013593505050565b5f5f60408385031215611231575f5ffd5b823561123c816111e2565b9150602083013561124c816111e2565b809150509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561129c575f5ffd5b81356112a7816111e2565b9392505050565b60ff81168114610a8f575f5ffd5b5f602082840312156112cc575f5ffd5b81356112a7816112ae565b5f5f5f606084860312156112e9575f5ffd5b83356112f4816111e2565b92506020840135611304816111e2565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105da576105da611315565b818103818111156105da576105da611315565b80820281158282048414176105da576105da611315565b5f8261138057634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e3575f5ffd5b5051919050565b5f602082840312156113fa575f5ffd5b815180151581146112a7575f5ffd5b5f60208284031215611419575f5ffd5b81516112a7816112ae565b5f60208284031215611434575f5ffd5b81516112a7816111e2565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212201363f1045faa90db6b9cd5e104a6adf153d8d9848b22c7129cad8df16e32d4e364736f6c634300081c00330000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "18": { - "address": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf", - "code": "0x608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806366ae69a011610093578063a77cf3d211610063578063a77cf3d214610238578063ad209a9b1461024b578063bb51f1eb14610272578063df0dd0d514610285575f5ffd5b806366ae69a0146101b05780636f55bd32146101db5780638ab81d1314610202578063a401662b14610215575f5ffd5b806341c9634e116100ce57806341c9634e1461013e578063591d99ee146101545780635da57fe91461017b578063623b223d1461019b575f5ffd5b80630a7c8faa146100f45780632cdea7171461011e5780633666751314610136575b5f5ffd5b610100610dad60f31b81565b6040516001600160f01b031990911681526020015b60405180910390f35b61012661030f565b60405161011594939291906124a2565b610126610390565b6101465f5481565b604051908152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000481565b61018e610189366004612572565b61040f565b60405161011591906125b9565b6101ae6101a9366004612621565b610447565b005b6001546101c3906001600160401b031681565b6040516001600160401b039091168152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000281565b61018e610210366004612702565b6107d9565b610228610223366004612749565b6108b0565b6040519015158152602001610115565b6101ae610246366004612797565b6108bf565b6101467f000000000000000000000000000000000000000000000000000000000000001881565b6101ae6102803660046127ae565b610a37565b6102d3610293366004612797565b600a6020525f90815260409020805460018201546002909201546001600160401b0382169263ffffffff600160401b8404811693600160601b9004169185565b604080516001600160401b0396909616865263ffffffff948516602087015292909316918401919091526060830152608082015260a001610115565b6002805460035460408051600480546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20905b815481526020019060010190808311610364575b50505050508152602001600182015481525050905084565b6006805460075460408051600880546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20908154815260200190600101908083116103645750505050508152602001600182015481525050905084565b60608282101561043257604051635c85a0e760e01b815260040160405180910390fd5b61043d848484610ea1565b90505b9392505050565b5f6104518a610f2b565b8051906020012090505f61046e33835f9182526020526040902090565b905061047c818c8c8c61101d565b5f5f90505f6002905060065f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906104b89190612843565b6001600160401b0316036104d2575060019050600661052c565b60025f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906105059190612843565b6001600160401b03161461052c57604051636033c4fd60e11b815260040160405180910390fd5b61053b84848e8e858f8f61110c565b5f6105458e6112c2565b905082156106d657600654610564906001600160801b0316600161287d565b6001600160801b031661057d60808b0160608c01612843565b6001600160401b0316146105a3576040516263964160e91b815260040160405180910390fd5b5f6105c0826105b18c6113f4565b805190602001208b8b8b6114a8565b9050806105e05760405163128597bb60e01b815260040160405180910390fd5b60068054600160801b8082046001600160801b0390811690910291161760029081556007546003556008805460049061061c908290849061240d565b5060019182015491015550610639905060808b0160608c01612843565b600680546001600160801b0319166001600160401b039290921691909117905561066960a08b0160808c0161289c565b600680546001600160801b031663ffffffff92909216600160801b0291909117905560a08a0180356007556106b0906106a59060808d0161289c565b63ffffffff16611517565b805180516008916106c691839160200190612455565b5060208201518160010155905050505b5f8190556106e760208f018f61289c565b63ffffffff1660015f6101000a8154816001600160401b0302191690836001600160401b03160217905550600a5f8581526020019081526020015f205f5f82015f6101000a8154906001600160401b0302191690555f820160086101000a81549063ffffffff02191690555f8201600c6101000a81549063ffffffff0219169055600182015f9055600282015f905550507fd95fe1258d152dc91c81b09380498adc76ed36a6079bcb2ed31eff622ae2d0f1818f5f0160208101906107ac919061289c565b6040805192835263ffffffff90911660208301520160405180910390a15050505050505050505050505050565b60605f600a5f6107f233885f9182526020526040902090565b81526020019081526020015f20905083836040516020016108149291906128bf565b6040516020818303038152906040528051906020012081600201541461084d576040516333b4605560e11b815260040160405180910390fd5b6108a781600101548585808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855463ffffffff600160401b820481169350600160601b9091041690506115bc565b95945050505050565b5f6108a75f54868686866114a8565b335f9081526020829052604081205f818152600a602052604081208054929350916001600160401b03169003610908576040516319a1b6d960e21b815260040160405180910390fd5b60018101541561092b5760405163e31d900560e01b815260040160405180910390fd5b8054610961907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b4310156109815760405163c77c194960e01b815260040160405180910390fd5b80547f0000000000000000000000000000000000000000000000000000000000000018906109d9907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b6109e391906128e6565b431115610a2c575f828152600a602052604080822080546001600160801b0319168155600181018390556002019190915580516340d3544760e01b815290519081900360040190fd5b446001909101555050565b6001546001600160401b0316610a50602086018661289c565b63ffffffff1611610a74576040516303d618e560e41b815260040160405180910390fd5b600280545f906001600160801b0316610a936040880160208901612843565b6001600160401b031603610ad757610ab0600460608501356116a4565b9050610ad26060840135610ac961ffff8416600161170e565b6004919061172c565b610b54565b6006546001600160801b0316610af36040880160208901612843565b6001600160401b031603610b3b57610b10600860608501356116a4565b9050610b326060840135610b2961ffff8416600161170e565b6008919061172c565b60069150610b54565b604051636033c4fd60e11b815260040160405180910390fd5b610b7f82610b6860a08601608087016128f9565b6060860135610b7a60a088018861291f565b6117d3565b1580610bc75750610bc58585808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050506060850135611842565b155b15610be557604051637000a9fd60e11b815260040160405180910390fd5b5f610bef87610f2b565b80516020909101209050610c0960a08501608086016128f9565b6001600160a01b0316610c3282610c236020880188612964565b87602001358860400135611886565b6001600160a01b031614610c5957604051638baa579f60e01b815260040160405180910390fd5b8254610c7490600160801b90046001600160801b03166118ac565b85141580610ce857508254610c9890600160801b90046001600160801b03166118c5565b610ce68787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508754600160801b90046001600160801b031691506118f49050565b105b15610d06576040516333b4605560e11b815260040160405180910390fd5b6040805160a081018252436001600160401b031681528454600160801b900463ffffffff811660208301529091820190610d6e906001600160801b031661ffff86167f0000000000000000000000000000000000000000000000000000000000000002611c6e565b63ffffffff1681526020015f81526020018787604051602001610d929291906128bf565b60405160208183030381529060405280519060200120815250600a5f610dc133855f9182526020526040902090565b815260208082019290925260409081015f2083518154858501519386015163ffffffff908116600160601b0263ffffffff60601b1991909516600160401b026bffffffffffffffffffffffff199092166001600160401b03909316929092171716919091178155606083015160018201556080909201516002909201919091557fbee983fc706c692efb9b0240bddc5666c010a53af55ed5fb42d226e7e4293869903390610e71908a018a61289c565b604080516001600160a01b03909316835263ffffffff90911660208301520160405180910390a150505050505050565b6060610eac826118ac565b6001600160401b03811115610ec357610ec3612984565b604051908082528060200260200182016040528015610eec578160200160208202803683370190505b5090505f5b83811015610f2357610f1b82868684818110610f0f57610f0f612998565b90506020020135611cc6565b600101610ef1565b509392505050565b6060610f42610f3d604084018461291f565b611d1d565b610f79610f52602085018561289c565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b610ff5610f8c6040860160208701612843565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051602001611007939291906129c3565b6040516020818303038152906040529050919050565b5f848152600a60205260408120805490916001600160401b039091169003611058576040516319a1b6d960e21b815260040160405180910390fd5b80600101545f0361107c576040516378ef3a4760e01b815260040160405180910390fd5b6001546001600160401b0316611095602086018661289c565b63ffffffff16116110b9576040516303d618e560e41b815260040160405180910390fd5b82826040516020016110cc9291906128bf565b60405160208183030381529060405280519060200120816002015414611105576040516333b4605560e11b815260040160405180910390fd5b5050505050565b5f868152600a602052604090208054600160601b900463ffffffff1682811461114857604051630f8b88ed60e11b815260040160405180910390fd5b5f61119d83600101548989808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508a54600160801b90046001600160801b031691508690506115bc565b90505f5b848110156112b557368686838181106111bc576111bc612998565b90506020028101906111ce91906129f6565b90506111f6886111e460a08401608085016128f9565b6060840135610b7a60a086018661291f565b61121357604051637000a9fd60e11b815260040160405180910390fd5b611221838260600135611842565b61123e57604051637000a9fd60e11b815260040160405180910390fd5b61124e60a08201608083016128f9565b6001600160a01b03166112778d6112686020850185612964565b84602001358560400135611886565b6001600160a01b03161461129e57604051638baa579f60e01b815260040160405180910390fd5b6112ac838260600135611e04565b506001016111a1565b5050505050505050505050565b5f805b6112d2604084018461291f565b90508110156113da57610dad60f31b6112ee604085018561291f565b838181106112fe576112fe612998565b90506020028101906113109190612a14565b61131e906020810190612a28565b6001600160f01b031916036113d25761133a604084018461291f565b8281811061134a5761134a612998565b905060200281019061135c9190612a14565b61136a906020810190612a4f565b905060201461138c57604051633efce24360e11b815260040160405180910390fd5b611399604084018461291f565b828181106113a9576113a9612998565b90506020028101906113bb9190612a14565b6113c9906020810190612a4f565b61044091612a91565b6001016112c5565b5060405163484ab7df60e01b815260040160405180910390fd5b606061140c6114066020840184612964565b60f81b90565b61141f610f52604085016020860161289c565b6040840135611437610f8c6080870160608801612843565b61144a610f5260a088016080890161289c565b6040516001600160f81b031990951660208601526001600160e01b0319938416602186015260258501929092526001600160c01b031916604584015216604d82015260a0830135605182015260c08301356071820152609101611007565b5f6101008311156114cc57604051632f43154560e11b815260040160405180910390fd5b845f5b8481101561150a57611500828787848181106114ed576114ed612998565b905060200201358387901c600116611e38565b91506001016114cf565b5090951495945050505050565b60408051808201909152606081525f60208201525f611537601084612ac2565b15611543576001611545565b5f5b60ff16611553601085612ad5565b61155d91906128e6565b90506040518060400160405280826001600160401b0381111561158257611582612984565b6040519080825280602002602001820160405280156115ab578160200160208202803683370190505b508152602001939093525090919050565b60606115c7836118ac565b84511415806115de57506115db84846118f4565b82115b156115fc576040516302fb251f60e51b815260040160405180910390fd5b83516001600160401b0381111561161557611615612984565b60405190808252806020026020018201604052801561163e578160200160208202803683370190505b5090505f805b8382101561169a575f611658888388611e61565b90506116648782611842565b158061167557506116758482611842565b156116835750600101611644565b61168d8482611cc6565b5060019182019101611644565b5050949350505050565b5f826001015482106116c957604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83166116dd816010612ae8565b60ff16855f0183815481106116f4576116f4612998565b905f5260205f200154901c61ffff16925050505b92915050565b5f82820161ffff80851690821610156104405761ffff915050611708565b8260010154821061175057604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83165f611765826010612ae8565b60ff1661ffff901b1990505f82601061177e9190612ae8565b60ff168561ffff16901b90508082885f0186815481106117a0576117a0612998565b905f5260205f2001541617875f0185815481106117bf576117bf612998565b5f9182526020909120015550505050505050565b6040516bffffffffffffffffffffffff19606086901b1660208201525f90819060340160408051808303601f190181529190528051602090910120600188015488549192506118379183908890600160801b90046001600160801b03168888611e84565b979650505050505050565b5f5f600883901c90506118778385838151811061186157611861612998565b6020026020010151611eaf90919063ffffffff16565b60ff1660011491505092915050565b5f5f5f61189587878787611eb9565b915091506118a281611f76565b5095945050505050565b5f6101006118bb8360ff6128e6565b6117089190612ad5565b5f60038211156118f05760036118dc600184612b0b565b6118e69190612ad5565b6117089083612b0b565b5090565b5f81158061190157508251155b1561190d57505f611708565b5f610100830460ff8416825b82811080156119285750865181105b15611abd575f87828151811061194057611940612998565b602002602001015190505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b0382160190508085019450508080600101915050611919565b505f81118015611acd5750855182105b15611c64575f6001826001901b0390505f81888581518110611af157611af1612998565b60200260200101511690505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b038216019050808501945050505b5090949350505050565b5f81611c7b8560016120c7565b611c8590826128e6565b9050611c928460016120c7565b611c9d906002612b1e565b611ca89060016128e6565b611cb290826128e6565b90506108a781611cc1876118c5565b612104565b5f600882901c9050611cfa82848381518110611ce457611ce4612998565b602002602001015161211990919063ffffffff16565b838281518110611d0c57611d0c612998565b602002602001018181525050505050565b60605f611d2983612126565b90505f5b83811015610f235781858583818110611d4857611d48612998565b9050602002810190611d5a9190612a14565b611d68906020810190612a28565b611da4878785818110611d7d57611d7d612998565b9050602002810190611d8f9190612a14565b611d9d906020810190612a4f565b9050612126565b878785818110611db657611db6612998565b9050602002810190611dc89190612a14565b611dd6906020810190612a4f565b604051602001611dea959493929190612b35565b60408051601f198184030181529190529150600101611d2d565b5f600882901c9050611cfa82848381518110611e2257611e22612998565b602002602001015161215690919063ffffffff16565b5f818015611e4c57835f5284602052611e54565b845f52836020525b505060405f209392505050565b5f815f03611e7057505f610440565b505f92835260209190915260409091200690565b5f838510611e9357505f611ea5565b611ea08686868686612164565b871490505b9695505050505050565b60ff161c60011690565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611eee57505f90506003611f6d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f3f573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116611f67575f60019250925050611f6d565b91505f90505b94509492505050565b5f816004811115611f8957611f89612b71565b03611f915750565b6001816004811115611fa557611fa5612b71565b03611ff75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561200b5761200b612b71565b036120585760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611fee565b600381600481111561206c5761206c612b71565b036120c45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611fee565b50565b5f5f6120d28461220a565b90506120dd8361229d565b80156120ec575083816001901b105b6120f6575f6120f9565b60015b60ff16019392505050565b5f8183106121125781610440565b5090919050565b600160ff919091161b1790565b606063ffffffff82111561214d57604051637404cccd60e11b815260040160405180910390fd5b611708826122c9565b600160ff919091161b191690565b5f85815b838110156121ff57866001166001148061218457508587600101145b156121bb576121b485858381811061219e5761219e612998565b90506020020135835f9182526020526040902090565b91506121e9565b6121e6828686848181106121d1576121d1612998565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501612168565b509695505050505050565b5f80608083901c1561221e57608092831c92015b604083901c1561223057604092831c92015b602083901c1561224257602092831c92015b601083901c1561225457601092831c92015b600883901c1561226657600892831c92015b600483901c1561227857600492831c92015b600283901c1561228a57600292831c92015b600183901c156117085760010192915050565b5f60028260038111156122b2576122b2612b71565b6122bc9190612b85565b60ff166001149050919050565b6060603f8263ffffffff16116122f457604051603f60fa1b60fa84901b166020820152602101611007565b613fff8263ffffffff16116123535761233061231c6403fffffffc600285901b166001612ba6565b600881811b62ffff001691901c60ff161790565b604051602001611007919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116123c5576123a260028363ffffffff16901b600261237e9190612ba6565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b604051602001611007919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b166021820152602501611007565b828054828255905f5260205f20908101928215612449575f5260205f209182015b8281111561244957825482559160010191906001019061242e565b506118f092915061248e565b828054828255905f5260205f20908101928215612449579160200282015b82811115612449578251825591602001919060010190612473565b5b808211156118f0575f815560010161248f565b6001600160801b03851681526001600160801b0384166020820152826040820152608060608201525f60c0820183516040608085015281815180845260e0860191506020830193505f92505b8083101561251157835182526020820191506020840193506001830192506124ee565b50602086015160a086015280935050505095945050505050565b5f5f83601f84011261253b575f5ffd5b5081356001600160401b03811115612551575f5ffd5b6020830191508360208260051b850101111561256b575f5ffd5b9250929050565b5f5f5f60408486031215612584575f5ffd5b83356001600160401b03811115612599575f5ffd5b6125a58682870161252b565b909790965060209590950135949350505050565b602080825282518282018190525f918401906040840190835b818110156125f05783518352602093840193909201916001016125d2565b509095945050505050565b5f6060828403121561260b575f5ffd5b50919050565b5f60e0828403121561260b575f5ffd5b5f5f5f5f5f5f5f5f5f6101808a8c03121561263a575f5ffd5b89356001600160401b0381111561264f575f5ffd5b61265b8c828d016125fb565b99505060208a01356001600160401b03811115612676575f5ffd5b6126828c828d0161252b565b90995097505060408a01356001600160401b038111156126a0575f5ffd5b6126ac8c828d0161252b565b90975095506126c090508b60608c01612611565b93506101408a01356001600160401b038111156126db575f5ffd5b6126e78c828d0161252b565b9a9d999c50979a969995989497966101600135949350505050565b5f5f5f60408486031215612714575f5ffd5b8335925060208401356001600160401b03811115612730575f5ffd5b61273c8682870161252b565b9497909650939450505050565b5f5f5f5f6060858703121561275c575f5ffd5b8435935060208501356001600160401b03811115612778575f5ffd5b6127848782880161252b565b9598909750949560400135949350505050565b5f602082840312156127a7575f5ffd5b5035919050565b5f5f5f5f606085870312156127c1575f5ffd5b84356001600160401b038111156127d6575f5ffd5b6127e2878288016125fb565b94505060208501356001600160401b038111156127fd575f5ffd5b6128098782880161252b565b90945092505060408501356001600160401b03811115612827575f5ffd5b850160c08188031215612838575f5ffd5b939692955090935050565b5f60208284031215612853575f5ffd5b81356001600160401b0381168114610440575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561170857611708612869565b5f602082840312156128ac575f5ffd5b813563ffffffff81168114610440575f5ffd5b5f6001600160fb1b038311156128d3575f5ffd5b8260051b80858437919091019392505050565b8082018082111561170857611708612869565b5f60208284031215612909575f5ffd5b81356001600160a01b0381168114610440575f5ffd5b5f5f8335601e19843603018112612934575f5ffd5b8301803591506001600160401b0382111561294d575f5ffd5b6020019150600581901b360382131561256b575f5ffd5b5f60208284031215612974575f5ffd5b813560ff81168114610440575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f6129ce82866129ac565b6001600160e01b031994909416845250506001600160c01b0319166004820152600c01919050565b5f823560be19833603018112612a0a575f5ffd5b9190910192915050565b5f8235603e19833603018112612a0a575f5ffd5b5f60208284031215612a38575f5ffd5b81356001600160f01b031981168114610440575f5ffd5b5f5f8335601e19843603018112612a64575f5ffd5b8301803591506001600160401b03821115612a7d575f5ffd5b60200191503681900382131561256b575f5ffd5b80356020831015611708575f19602084900360031b1b1692915050565b634e487b7160e01b5f52601260045260245ffd5b5f82612ad057612ad0612aae565b500690565b5f82612ae357612ae3612aae565b500490565b60ff8181168382160290811690818114612b0457612b04612869565b5092915050565b8181038181111561170857611708612869565b808202811582820484141761170857611708612869565b5f612b4082886129ac565b6001600160f01b031987168152612b5a60028201876129ac565b9050838582375f9301928352509095945050505050565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680612b9757612b97612aae565b8060ff84160691505092915050565b63ffffffff81811683821601908111156117085761170861286956fe33333333333333333333333333333333333333333333333333333333333333330000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f555555555555555555555555555555555555555555555555555555555555555500ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffa2646970667358221220bb783e6f87d678903cb96088c2c12d2cac558d531f4f913f330f95e9f12638ce64736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", - "0x0000000000000000000000000000000000000000000000000000000000000007": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000200000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000200000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "24": { - "address": "0x0000BBdDc7CE488642fb579F8B00f3a590007251", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd00", - "storage": {} - }, - "38": { - "address": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44", - "code": "0x608060405234801561000f575f5ffd5b50600436106102b1575f3560e01c80636d70f7ae1161017b578063bb45fef2116100e4578063e4cc3f901161009e578063f698da2511610079578063f698da25146107ce578063fabc1cbc146107d6578063fd8aa88d146107e9578063fe4b84df146107fc575f5ffd5b8063e4cc3f9014610788578063eea9064b1461079b578063f0e0e676146107ae575f5ffd5b8063bb45fef2146106b9578063bfae3fd2146106e6578063c448feb8146106f9578063c978f7ac1461072d578063ca8aa7c71461074e578063da8be86414610775575f5ffd5b80639104c319116101355780639104c319146106175780639435bb431461063257806399f5371b14610645578063a178848414610665578063a33a343314610684578063b7f06ebe14610697575f5ffd5b80636d70f7ae1461057a5780636e1744481461058d578063778e55f3146105a057806378296ec5146105ca578063886f1195146105dd5780639004134714610604575f5ffd5b806354b7c96c1161021d5780635c975abb116101d75780635c975abb146104d45780635d975e88146104dc5780635dd68579146104fd57806360a0d1ce1461051e57806365da12641461053157806366d5ba9314610559575f5ffd5b806354b7c96c1461045b57806354fd4d501461046e578063595c6a6714610483578063597b36da1461048b5780635ac86ab71461049e5780635ae679a7146104c1575f5ffd5b806339b70e381161026e57806339b70e381461036a5780633c651cf2146103a95780633cdeb5e0146103bc5780633e28391d146103ea5780634657e26a1461040d5780634665bcda14610434575f5ffd5b806304a4f979146102b55780630b9f487a146102ef5780630dd8dd0214610302578063136439dd1461032257806325df922e146103375780632aa6d88814610357575b5f5ffd5b6102dc7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6040519081526020015b60405180910390f35b6102dc6102fd366004614a7f565b61080f565b610315610310366004614b16565b610897565b6040516102e69190614b54565b610335610330366004614b8b565b610b09565b005b61034a610345366004614d20565b610b43565b6040516102e69190614dce565b610335610365366004614e30565b610ca3565b6103917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6040516001600160a01b0390911681526020016102e6565b6103356103b7366004614e8e565b610df7565b6103916103ca366004614ed1565b6001600160a01b039081165f908152609960205260409020600101541690565b6103fd6103f8366004614ed1565b610f4a565b60405190151581526020016102e6565b6103917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b6103917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b181565b610335610469366004614eec565b610f69565b610476610fd7565b6040516102e69190614f51565b610335611007565b6102dc61049936600461501f565b61101b565b6103fd6104ac366004615050565b606654600160ff9092169190911b9081161490565b6102dc6104cf366004615084565b61104a565b6066546102dc565b6104ef6104ea366004614b8b565b6111bc565b6040516102e69291906151b9565b61051061050b366004614ed1565b6111d9565b6040516102e692919061522b565b61033561052c366004615298565b611303565b61039161053f366004614ed1565b609a6020525f90815260409020546001600160a01b031681565b61056c610567366004614ed1565b6114ae565b6040516102e69291906152d7565b6103fd610588366004614ed1565b6117ae565b6102dc61059b366004614eec565b6117e6565b6102dc6105ae366004614eec565b609860209081525f928352604080842090915290825290205481565b6103356105d83660046152e9565b611890565b6103917f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b61034a610612366004615339565b611926565b61039173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610335610640366004615385565b6119fc565b610658610653366004614b8b565b611ab7565b6040516102e69190615421565b6102dc610673366004614ed1565b609f6020525f908152604090205481565b610315610692366004615433565b611bd3565b6103fd6106a5366004614b8b565b609e6020525f908152604090205460ff1681565b6103fd6106c736600461551a565b609c60209081525f928352604080842090915290825290205460ff1681565b6102dc6106f4366004614eec565b611beb565b60405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000321681526020016102e6565b61074061073b366004615339565b611c27565b6040516102e6929190615544565b6103917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b610315610783366004614ed1565b611eb4565b610335610796366004615563565b611fdd565b6103356107a9366004615433565b612015565b6107c16107bc3660046155e1565b612080565b6040516102e6919061568e565b6102dc612125565b6103356107e4366004614b8b565b6121de565b6103156107f7366004614ed1565b61224c565b61033561080a366004614b8b565b61226f565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad60208201526001600160a01b03808616928201929092528187166060820152908516608082015260a0810183905260c081018290525f9061088d9060e00160405160208183030381529060405280519060200120612380565b9695505050505050565b606060016108a4816123ae565b6108ac6123dc565b5f836001600160401b038111156108c5576108c5614ba2565b6040519080825280602002602001820160405280156108ee578160200160208202803683370190505b50335f908152609a60205260408120549192506001600160a01b03909116905b85811015610afa57868682818110610928576109286156a0565b905060200281019061093a91906156b4565b6109489060208101906156d2565b905087878381811061095c5761095c6156a0565b905060200281019061096e91906156b4565b61097890806156d2565b905014610998576040516343714afd60e01b815260040160405180910390fd5b5f610a0233848a8a868181106109b0576109b06156a0565b90506020028101906109c291906156b4565b6109cc90806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061243592505050565b9050610ad433848a8a86818110610a1b57610a1b6156a0565b9050602002810190610a2d91906156b4565b610a3790806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508e92508d9150889050818110610a7c57610a7c6156a0565b9050602002810190610a8e91906156b4565b610a9c9060208101906156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250889250612587915050565b848381518110610ae657610ae66156a0565b60209081029190910101525060010161090e565b5050600160c955949350505050565b610b11612b22565b6066548181168114610b365760405163c61dca5d60e01b815260040160405180910390fd5b610b3f82612bc5565b5050565b6001600160a01b038084165f908152609a60205260408120546060921690610b6c868387612435565b90505f85516001600160401b03811115610b8857610b88614ba2565b604051908082528060200260200182016040528015610bb1578160200160208202803683370190505b5090505f5b8651811015610c96576001600160a01b0388165f90815260a260205260408120885182908a9085908110610bec57610bec6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050610c70878381518110610c3e57610c3e6156a0565b6020026020010151858481518110610c5857610c586156a0565b602002602001015183612c029092919063ffffffff16565b838381518110610c8257610c826156a0565b602090810291909101015250600101610bb6565b50925050505b9392505050565b610cab6123dc565b610cb433610f4a565b15610cd257604051633bf2b50360e11b815260040160405180910390fd5b604051632b6241f360e11b815233600482015263ffffffff841660248201527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316906356c483e6906044015f604051808303815f87803b158015610d3c575f5ffd5b505af1158015610d4e573d5f5f3e3d5ffd5b50505050610d5c3385612c20565b610d663333612c82565b6040516001600160a01b038516815233907fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c19060200160405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051610ddf929190615717565b60405180910390a2610df1600160c955565b50505050565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161480610e565750336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b116145b610e735760405163045206a560e21b815260040160405180910390fd5b610e7b6123dc565b6001600160a01b038481165f908152609a602052604080822054905163152667d960e31b8152908316600482018190528684166024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015610efb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1f9190615745565b90505f610f2d878784612f0b565b9050610f3d838888888886612fed565b505050610df1600160c955565b6001600160a01b039081165f908152609a602052604090205416151590565b81610f7381613132565b610f905760405163932d94f760e01b815260040160405180910390fd5b610f986123dc565b610fa1836117ae565b610fbe576040516325ec6c1f60e01b815260040160405180910390fd5b610fc88383612c20565b610fd2600160c955565b505050565b60606110027f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b905090565b61100f612b22565b6110195f19612bc5565b565b5f8160405160200161102d9190615421565b604051602081830303815290604052805190602001209050919050565b5f336001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1614611094576040516323d871a560e01b815260040160405180910390fd5b61109c6123dc565b6001600160a01b038088165f9081526098602090815260408083209388168352929052908120546110da906001600160401b03808716908616613219565b90505f6110e989878787613231565b90506110f58183615774565b9250611103895f88856132ee565b604080516001600160a01b038881168252602082018690528b16917fdd611f4ef63f4385f1756c86ce1f1f389a9013ba6fa07daba8528291bc2d3c30910160405180910390a261115286613368565b6001600160a01b0316633fb99ca5898989876040518563ffffffff1660e01b81526004016111839493929190615787565b5f604051808303815f87803b15801561119a575f5ffd5b505af11580156111ac573d5f5f3e3d5ffd5b50505050505061088d600160c955565b6111c4614940565b60606111cf836133da565b9094909350915050565b6060805f6111e68461224c565b8051909150806001600160401b0381111561120357611203614ba2565b60405190808252806020026020018201604052801561123c57816020015b611229614940565b8152602001906001900390816112215790505b509350806001600160401b0381111561125757611257614ba2565b60405190808252806020026020018201604052801561128a57816020015b60608152602001906001900390816112755790505b5092505f5b818110156112fb576112b98382815181106112ac576112ac6156a0565b60200260200101516133da565b8683815181106112cb576112cb6156a0565b602002602001018684815181106112e4576112e46156a0565b60209081029190910101919091525260010161128f565b505050915091565b336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1161461134c57604051633213a66160e21b815260040160405180910390fd5b6113546123dc565b61135d83610f4a565b15610fc8576001600160a01b038381165f908152609a602052604080822054905163152667d960e31b81529083166004820181905273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa1580156113f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114189190615745565b6001600160a01b0386165f90815260a26020908152604080832073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac084528252808320815192830190915254815291925061147e866114766001600160401b0380871690891661362d565b849190613641565b90506114a0848873beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0846132ee565b50505050610fd2600160c955565b6040516394f649dd60e01b81526001600160a01b03828116600483015260609182915f9182917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816906394f649dd906024015f60405180830381865afa15801561151a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115419190810190615837565b60405163fe243a1760e01b81526001600160a01b03888116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac060248301529294509092505f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1169063fe243a1790604401602060405180830381865afa1580156115c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb91906158f2565b9050805f036115ff57509094909350915050565b5f8351600161160e9190615774565b6001600160401b0381111561162557611625614ba2565b60405190808252806020026020018201604052801561164e578160200160208202803683370190505b5090505f845160016116609190615774565b6001600160401b0381111561167757611677614ba2565b6040519080825280602002602001820160405280156116a0578160200160208202803683370190505b50905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0828651815181106116cb576116cb6156a0565b60200260200101906001600160a01b031690816001600160a01b03168152505082818651815181106116ff576116ff6156a0565b60209081029190910101525f5b85518110156117a057858181518110611727576117276156a0565b6020026020010151838281518110611741576117416156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050848181518110611773576117736156a0565b602002602001015182828151811061178d5761178d6156a0565b602090810291909101015260010161170c565b509097909650945050505050565b5f6001600160a01b038216158015906117e057506001600160a01b038083165f818152609a6020526040902054909116145b92915050565b60405163152667d960e31b81526001600160a01b03838116600483015282811660248301525f9182917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015611856573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187a9190615745565b90506118888484835f613231565b949350505050565b8261189a81613132565b6118b75760405163932d94f760e01b815260040160405180910390fd5b6118c0846117ae565b6118dd576040516325ec6c1f60e01b815260040160405180910390fd5b836001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051611918929190615717565b60405180910390a250505050565b60605f82516001600160401b0381111561194257611942614ba2565b60405190808252806020026020018201604052801561196b578160200160208202803683370190505b5090505f5b83518110156119f4576001600160a01b0385165f90815260986020526040812085519091908690849081106119a7576119a76156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548282815181106119e1576119e16156a0565b6020908102919091010152600101611970565b509392505050565b6002611a07816123ae565b611a0f6123dc565b855f5b81811015611aa257611a9a898983818110611a2f57611a2f6156a0565b9050602002810190611a419190615909565b611a4a9061591d565b888884818110611a5c57611a5c6156a0565b9050602002810190611a6e91906156d2565b888886818110611a8057611a806156a0565b9050602002016020810190611a959190615928565b61365f565b600101611a12565b5050611aae600160c955565b50505050505050565b611abf614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b03908116825260018301548116828501526002830154168185015260038201546060820152600482015463ffffffff1660808201526005820180548551818602810186019096528086529194929360a08601939290830182828015611b6d57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b4f575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc357602002820191905f5260205f20905b815481526020019060010190808311611baf575b5050505050815250509050919050565b6060611bde33611eb4565b9050610c9c848484612015565b6001600160a01b038083165f90815260a260209081526040808320938516835292815282822083519182019093529154825290610c9c90613aa1565b60608082516001600160401b03811115611c4357611c43614ba2565b604051908082528060200260200182016040528015611c6c578160200160208202803683370190505b50915082516001600160401b03811115611c8857611c88614ba2565b604051908082528060200260200182016040528015611cb1578160200160208202803683370190505b506001600160a01b038086165f908152609a6020526040812054929350911690611cdc868387612435565b90505f5b8551811015611ea9575f611d0c878381518110611cff57611cff6156a0565b6020026020010151613368565b9050806001600160a01b031663fe243a1789898581518110611d3057611d306156a0565b60200260200101516040518363ffffffff1660e01b8152600401611d6a9291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015611d85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da991906158f2565b858381518110611dbb57611dbb6156a0565b6020026020010181815250505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f898581518110611dfe57611dfe6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050611e82868481518110611e5057611e506156a0565b6020026020010151858581518110611e6a57611e6a6156a0565b6020026020010151836136419092919063ffffffff16565b878481518110611e9457611e946156a0565b60209081029190910101525050600101611ce0565b5050505b9250929050565b6060611ebe6123dc565b611ec782610f4a565b611ee45760405163a5c7c44560e01b815260040160405180910390fd5b611eed826117ae565b15611f0b576040516311ca333560e31b815260040160405180910390fd5b336001600160a01b03831614611fc3576001600160a01b038083165f908152609a602052604090205416611f3e81613132565b80611f6457506001600160a01b038181165f908152609960205260409020600101541633145b611f8157604051631e499a2360e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a3505b611fcc82613ac0565b9050611fd8600160c955565b919050565b6002611fe8816123ae565b611ff06123dc565b612004611ffc8661591d565b85858561365f565b61200e600160c955565b5050505050565b61201d6123dc565b61202633610f4a565b1561204457604051633bf2b50360e11b815260040160405180910390fd5b61204d836117ae565b61206a576040516325ec6c1f60e01b815260040160405180910390fd5b61207633848484613d00565b610fc83384612c82565b60605f83516001600160401b0381111561209c5761209c614ba2565b6040519080825280602002602001820160405280156120cf57816020015b60608152602001906001900390816120ba5790505b5090505f5b84518110156119f4576121008582815181106120f2576120f26156a0565b602002602001015185611926565b828281518110612112576121126156a0565b60209081029190910101526001016120d4565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea612192613dbf565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6121e6613e34565b6066548019821981161461220d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020015b60405180910390a25050565b6001600160a01b0381165f90815260a3602052604090206060906117e090613ee5565b5f54610100900460ff161580801561228d57505f54600160ff909116105b806122a65750303b1580156122a657505f5460ff166001145b61230e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561232f575f805461ff0019166101001790555b61233882612bc5565b8015610b3f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f612389612125565b60405161190160f01b602082015260228101919091526042810183905260620161102d565b606654600160ff83161b908116036123d95760405163840a48d560e01b815260040160405180910390fd5b50565b600260c9540361242e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401612305565b600260c955565b60605f82516001600160401b0381111561245157612451614ba2565b60405190808252806020026020018201604052801561247a578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663547afb8786866040518363ffffffff1660e01b81526004016124cc929190615943565b5f60405180830381865afa1580156124e6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261250d9190810190615966565b90505f5b845181101561257c5761255787868381518110612530576125306156a0565b602002602001015184848151811061254a5761254a6156a0565b6020026020010151612f0b565b838281518110612569576125696156a0565b6020908102919091010152600101612511565b509095945050505050565b5f6001600160a01b0386166125af576040516339b190bb60e11b815260040160405180910390fd5b83515f036125d05760405163796cc52560e01b815260040160405180910390fd5b5f84516001600160401b038111156125ea576125ea614ba2565b604051908082528060200260200182016040528015612613578160200160208202803683370190505b5090505f85516001600160401b0381111561263057612630614ba2565b604051908082528060200260200182016040528015612659578160200160208202803683370190505b5090505f5b8651811015612955575f61267d888381518110611cff57611cff6156a0565b90505f60a25f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8a85815181106126b6576126b66156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20905061272f8884815181106126f4576126f46156a0565b602002602001015188858151811061270e5761270e6156a0565b60209081029190910181015160408051928301905284548252909190613641565b848481518110612741576127416156a0565b602002602001018181525050612780888481518110612762576127626156a0565b60209081029190910181015160408051928301905283548252613ef1565b858481518110612792576127926156a0565b60209081029190910101526001600160a01b038a1615612827576127e98a8a85815181106127c2576127c26156a0565b60200260200101518786815181106127dc576127dc6156a0565b6020026020010151613f05565b6128278a8c8b8681518110612800576128006156a0565b602002602001015187878151811061281a5761281a6156a0565b60200260200101516132ee565b5f826001600160a01b031663724af4238d8c878151811061284a5761284a6156a0565b60200260200101518c8881518110612864576128646156a0565b60200260200101516040518463ffffffff1660e01b815260040161288a939291906159f5565b6020604051808303815f875af11580156128a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ca91906158f2565b9050805f03612947575f82557f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f8c8b868151811061290a5761290a6156a0565b602002602001015161292f856040518060200160405290815f82015481525050613aa1565b60405161293e939291906159f5565b60405180910390a15b50505080600101905061265e565b506001600160a01b0388165f908152609f6020526040812080549182919061297c83615a19565b91905055505f6040518060e001604052808b6001600160a01b031681526020018a6001600160a01b031681526020018b6001600160a01b031681526020018381526020014363ffffffff1681526020018981526020018581525090505f6129e28261101b565b5f818152609e602090815260408083208054600160ff19909116811790915560a4835292819020865181546001600160a01b03199081166001600160a01b039283161783558885015195830180548216968316969096179095559187015160028201805490951692169190911790925560608501516003830155608085015160048301805463ffffffff191663ffffffff90921691909117905560a085015180519394508593612a989260058501920190614999565b5060c08201518051612ab49160068401916020909101906149fc565b5050506001600160a01b038b165f90815260a360205260409020612ad89082613f6f565b507f26b2aae26516e8719ef50ea2f6831a2efbd4e37dccdf0f6936b27bc08e793e30818386604051612b0c93929190615a31565b60405180910390a19a9950505050505050505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612b84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba89190615a5b565b61101957604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61188882612c1a612c1387613aa1565b8690613f7a565b90613f7a565b6001600160a01b038281165f8181526099602090815260409182902060010180546001600160a01b0319169486169485179055905192835290917f773b54c04d756fcc5e678111f7d730de3be98192000799eee3d63716055a87c69101612240565b5f612c8c816123ae565b5f5f612c97856114ae565b915091505f612ca75f8685612435565b6001600160a01b038781165f818152609a602052604080822080546001600160a01b031916948b16948517905551939450919290917fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d874330491a35f5b8351811015611aae5773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612d3a57612d3a6156a0565b60200260200101516001600160a01b031603612eaa5760405163a3d75e0960e01b81526001600160a01b0388811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612db8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ddc9190615745565b90505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f878581518110612e1557612e156156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050612e89858481518110612e6757612e676156a0565b6020026020010151836001600160401b0316836136419092919063ffffffff16565b858481518110612e9b57612e9b6156a0565b60200260200101818152505050505b612f038688868481518110612ec157612ec16156a0565b60200260200101515f878681518110612edc57612edc6156a0565b6020026020010151878781518110612ef657612ef66156a0565b6020026020010151612fed565b600101612d01565b5f73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b03841601612fdd5760405163a3d75e0960e01b81526001600160a01b0385811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612f99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbd9190615745565b9050612fd56001600160401b0384811690831661362d565b915050610c9c565b506001600160401b031692915050565b805f0361300d57604051630a33bc6960e21b815260040160405180910390fd5b811561312a576001600160a01b038086165f90815260a26020908152604080832093881683529290522061304381858585613f8e565b6040805160208101909152815481527f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f908790879061308190613aa1565b604051613090939291906159f5565b60405180910390a16130a186610f4a565b15611aae576001600160a01b038088165f908152609860209081526040808320938916835292905290812080548592906130dc908490615774565b92505081905550866001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c878786604051613120939291906159f5565b60405180910390a2505b505050505050565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af11580156131b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e09190615a5b565b60605f6131e883614024565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f613227848385600161404b565b6118889085615a76565b6001600160a01b038085165f90815260a56020908152604080832093871683529290529081208190613262906140a6565b90505f6132c860016132947f000000000000000000000000000000000000000000000000000000000000003243615a89565b61329e9190615a89565b6001600160a01b03808a165f90815260a560209081526040808320938c16835292905220906140c0565b90505f6132d58284615a76565b90506132e28187876140dc565b98975050505050505050565b6001600160a01b038085165f90815260986020908152604080832093861683529290529081208054839290613324908490615a76565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051611918939291906159f5565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146133b3577f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075086117e0565b7f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b192915050565b6133e2614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b0390811682526001830154811682850152600283015416818501526003820154606082810191909152600483015463ffffffff1660808301526005830180548651818702810187019097528087529195929460a0860193929083018282801561349457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613476575b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156134ea57602002820191905f5260205f20905b8154815260200190600101908083116134d6575b50505050508152505091508160a00151516001600160401b0381111561351257613512614ba2565b60405190808252806020026020018201604052801561353b578160200160208202803683370190505b5090505f7f0000000000000000000000000000000000000000000000000000000000000032836080015161356f9190615aa5565b90505f4363ffffffff168263ffffffff16106135a05761359b845f015185602001518660a00151612435565b6135b7565b6135b7845f015185602001518660a00151856140fa565b90505f5b8460a00151518110156112fb576136088560c0015182815181106135e1576135e16156a0565b60200260200101518383815181106135fb576135fb6156a0565b6020026020010151614228565b84828151811061361a5761361a6156a0565b60209081029190910101526001016135bb565b5f610c9c8383670de0b6b3a7640000614233565b5f6118888261365961365287613aa1565b869061362d565b9061362d565b60a0840151518214613684576040516343714afd60e01b815260040160405180910390fd5b83604001516001600160a01b0316336001600160a01b0316146136ba576040516316110d3560e21b815260040160405180910390fd5b5f6136c48561101b565b5f818152609e602052604090205490915060ff166136f5576040516387c9d21960e01b815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000003287608001516137289190615aa5565b90508063ffffffff164363ffffffff1611613756576040516378f67ae160e11b815260040160405180910390fd5b61376d875f015188602001518960a00151846140fa565b87516001600160a01b03165f90815260a360205260409020909250613793915083614318565b505f82815260a46020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101805463ffffffff19169055906137ea6005830182614a35565b6137f7600683015f614a35565b50505f828152609e602052604090819020805460ff19169055517f1f40400889274ed07b24845e5054a87a0cab969eb1277aafe61ae352e7c32a00906138409084815260200190565b60405180910390a185516001600160a01b039081165f908152609a6020526040812054885160a08a0151919093169261387a918490612435565b90505f5b8860a0015151811015613a96575f6138a58a60a001518381518110611cff57611cff6156a0565b90505f6138db8b60c0015184815181106138c1576138c16156a0565b60200260200101518785815181106135fb576135fb6156a0565b9050805f036138eb575050613a8e565b87156139b957816001600160a01b0316632eae418c8c5f01518d60a00151868151811061391a5761391a6156a0565b60200260200101518d8d88818110613934576139346156a0565b90506020020160208101906139499190614ed1565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018490526084015f604051808303815f87803b15801561399e575f5ffd5b505af11580156139b0573d5f5f3e3d5ffd5b50505050613a8b565b5f5f836001600160a01b03166350ff72258e5f01518f60a0015188815181106139e4576139e46156a0565b6020026020010151866040518463ffffffff1660e01b8152600401613a0b939291906159f5565b60408051808303815f875af1158015613a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4a9190615ac1565b91509150613a88878e5f01518f60a001518881518110613a6c57613a6c6156a0565b602002602001015185858b8b81518110612ef657612ef66156a0565b50505b50505b60010161387e565b505050505050505050565b80515f9015613ab15781516117e0565b670de0b6b3a764000092915050565b60606001613acd816123ae565b6001600160a01b038084165f818152609a602052604080822080546001600160a01b0319811690915590519316928392917ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467691a35f5f613b2c866114ae565b9150915081515f03613b4057505050613cfa565b81516001600160401b03811115613b5957613b59614ba2565b604051908082528060200260200182016040528015613b82578160200160208202803683370190505b5094505f613b91878585612435565b90505f5b8351811015613cf4576040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050868481518110613c1557613c156156a0565b6020026020010151835f81518110613c2f57613c2f6156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110613c6157613c616156a0565b6020026020010151825f81518110613c7b57613c7b6156a0565b602002602001018181525050848481518110613c9957613c996156a0565b6020026020010151815f81518110613cb357613cb36156a0565b602002602001018181525050613ccc8b89858585612587565b8a8581518110613cde57613cde6156a0565b6020908102919091010152505050600101613b95565b50505050505b50919050565b6001600160a01b038084165f908152609960205260409020600101541680613d285750610df1565b6001600160a01b0381165f908152609c6020908152604080832085845290915290205460ff1615613d6c57604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381165f908152609c602090815260408083208584528252909120805460ff1916600117905583015161200e908290613db390889088908490889061080f565b85516020870151614323565b60605f613deb7f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b9050805f81518110613dff57613dff6156a0565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eb49190615ae3565b6001600160a01b0316336001600160a01b0316146110195760405163794821ff60e01b815260040160405180910390fd5b60605f610c9c83614375565b5f610c9c613efe84613aa1565b839061362d565b6001600160a01b038084165f90815260a5602090815260408083209386168352929052908120613f34906140a6565b9050610df143613f448484615774565b6001600160a01b038088165f90815260a560209081526040808320938a1683529290522091906143ce565b5f610c9c83836143d9565b5f610c9c83670de0b6b3a764000084614233565b825f03613fba57604080516020810190915284548152613fb3908290612c1a90613aa1565b8455610df1565b6040805160208101909152845481525f90613fd6908584613641565b90505f613fe38483615774565b90505f613ffe84612c1a613ff7888a615774565b8590613f7a565b80885590505f819003611aae5760405163172cec7360e31b815260040160405180910390fd5b5f60ff8216601f8111156117e057604051632cd44ac360e21b815260040160405180910390fd5b5f5f614058868686614233565b9050600183600281111561406e5761406e615afe565b14801561408a57505f848061408557614085615b12565b868809115b1561409d5761409a600182615774565b90505b95945050505050565b5f6140b18282614425565b6001600160e01b031692915050565b5f6140cc83838361446a565b6001600160e01b03169392505050565b5f6118886140ea8385615b26565b85906001600160401b031661362d565b60605f83516001600160401b0381111561411657614116614ba2565b60405190808252806020026020018201604052801561413f578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03166394d7d00c8787876040518463ffffffff1660e01b815260040161419393929190615b45565b5f60405180830381865afa1580156141ad573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141d49190810190615966565b90505f5b855181101561421c576141f788878381518110612530576125306156a0565b838281518110614209576142096156a0565b60209081029190910101526001016141d8565b50909695505050505050565b5f610c9c838361362d565b5f80805f19858709858702925082811083820303915050805f0361426a5783828161426057614260615b12565b0492505050610c9c565b8084116142b15760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401612305565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f610c9c83836144b3565b4281101561434457604051630819bdcd60e01b815260040160405180910390fd5b6143586001600160a01b0385168484614596565b610df157604051638baa579f60e01b815260040160405180910390fd5b6060815f018054806020026020016040519081016040528092919081815260200182805480156143c257602002820191905f5260205f20905b8154815260200190600101908083116143ae575b50505050509050919050565b610fd28383836145ea565b5f81815260018301602052604081205461441e57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556117e0565b505f6117e0565b81545f9080156144625761444b8461443e600184615a76565b5f91825260209091200190565b5464010000000090046001600160e01b0316611888565b509092915050565b82545f908161447b868683856146f0565b905080156144a9576144928661443e600184615a76565b5464010000000090046001600160e01b031661088d565b5091949350505050565b5f818152600183016020526040812054801561458d575f6144d5600183615a76565b85549091505f906144e890600190615a76565b9050818114614547575f865f018281548110614506576145066156a0565b905f5260205f200154905080875f018481548110614526576145266156a0565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061455857614558615b7e565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506117e0565b5f9150506117e0565b5f5f5f6145a38585614743565b90925090505f8160048111156145bb576145bb615afe565b1480156145d95750856001600160a01b0316826001600160a01b0316145b8061088d575061088d868686614782565b825480156146a2575f6146028561443e600185615a76565b60408051808201909152905463ffffffff8082168084526401000000009092046001600160e01b0316602084015291925090851610156146555760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff8086169116036146a057826146768661443e600186615a76565b80546001600160e01b03929092166401000000000263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216640100000000029190921617910155565b5f5b818310156119f4575f6147058484614869565b5f8781526020902090915063ffffffff86169082015463ffffffff16111561472f5780925061473d565b61473a816001615774565b93505b506146f2565b5f5f8251604103614777576020830151604084015160608501515f1a61476b87828585614883565b94509450505050611ead565b505f90506002611ead565b5f5f5f856001600160a01b0316631626ba7e60e01b86866040516024016147aa929190615b92565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516147e89190615baa565b5f60405180830381855afa9150503d805f8114614820576040519150601f19603f3d011682016040523d82523d5f602084013e614825565b606091505b509150915081801561483957506020815110155b801561088d57508051630b135d3f60e11b9061485e90830160209081019084016158f2565b149695505050505050565b5f6148776002848418615bc0565b610c9c90848416615774565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156148b857505f90506003614937565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614909573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614931575f60019250925050614937565b91505f90505b94509492505050565b6040518060e001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f63ffffffff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906149b7565b506149f8929150614a4c565b5090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec578251825591602001919060010190614a1a565b5080545f8255905f5260205f20908101906123d991905b5b808211156149f8575f8155600101614a4d565b6001600160a01b03811681146123d9575f5ffd5b8035611fd881614a60565b5f5f5f5f5f60a08688031215614a93575f5ffd5b8535614a9e81614a60565b94506020860135614aae81614a60565b93506040860135614abe81614a60565b94979396509394606081013594506080013592915050565b5f5f83601f840112614ae6575f5ffd5b5081356001600160401b03811115614afc575f5ffd5b6020830191508360208260051b8501011115611ead575f5ffd5b5f5f60208385031215614b27575f5ffd5b82356001600160401b03811115614b3c575f5ffd5b614b4885828601614ad6565b90969095509350505050565b602080825282518282018190525f918401906040840190835b8181101561257c578351835260209384019390920191600101614b6d565b5f60208284031215614b9b575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715614bd857614bd8614ba2565b60405290565b604080519081016001600160401b0381118282101715614bd857614bd8614ba2565b604051601f8201601f191681016001600160401b0381118282101715614c2857614c28614ba2565b604052919050565b5f6001600160401b03821115614c4857614c48614ba2565b5060051b60200190565b5f82601f830112614c61575f5ffd5b8135614c74614c6f82614c30565b614c00565b8082825260208201915060208360051b860101925085831115614c95575f5ffd5b602085015b83811015614cbb578035614cad81614a60565b835260209283019201614c9a565b5095945050505050565b5f82601f830112614cd4575f5ffd5b8135614ce2614c6f82614c30565b8082825260208201915060208360051b860101925085831115614d03575f5ffd5b602085015b83811015614cbb578035835260209283019201614d08565b5f5f5f60608486031215614d32575f5ffd5b8335614d3d81614a60565b925060208401356001600160401b03811115614d57575f5ffd5b614d6386828701614c52565b92505060408401356001600160401b03811115614d7e575f5ffd5b614d8a86828701614cc5565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614dc4578151865260209586019590910190600101614da6565b5093949350505050565b602081525f610c9c6020830184614d94565b803563ffffffff81168114611fd8575f5ffd5b5f5f83601f840112614e03575f5ffd5b5081356001600160401b03811115614e19575f5ffd5b602083019150836020828501011115611ead575f5ffd5b5f5f5f5f60608587031215614e43575f5ffd5b8435614e4e81614a60565b9350614e5c60208601614de0565b925060408501356001600160401b03811115614e76575f5ffd5b614e8287828801614df3565b95989497509550505050565b5f5f5f5f60808587031215614ea1575f5ffd5b8435614eac81614a60565b93506020850135614ebc81614a60565b93969395505050506040820135916060013590565b5f60208284031215614ee1575f5ffd5b8135610c9c81614a60565b5f5f60408385031215614efd575f5ffd5b8235614f0881614a60565b91506020830135614f1881614a60565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c9c6020830184614f23565b5f60e08284031215614f73575f5ffd5b614f7b614bb6565b9050614f8682614a74565b8152614f9460208301614a74565b6020820152614fa560408301614a74565b604082015260608281013590820152614fc060808301614de0565b608082015260a08201356001600160401b03811115614fdd575f5ffd5b614fe984828501614c52565b60a08301525060c08201356001600160401b03811115615007575f5ffd5b61501384828501614cc5565b60c08301525092915050565b5f6020828403121561502f575f5ffd5b81356001600160401b03811115615044575f5ffd5b61188884828501614f63565b5f60208284031215615060575f5ffd5b813560ff81168114610c9c575f5ffd5b6001600160401b03811681146123d9575f5ffd5b5f5f5f5f5f5f86880360e081121561509a575f5ffd5b87356150a581614a60565b96506040601f19820112156150b8575f5ffd5b506020870194506060870135935060808701356150d481614a60565b925060a08701356150e481615070565b915060c08701356150f481615070565b809150509295509295509295565b5f8151808452602084019350602083015f5b82811015614dc45781516001600160a01b0316865260209586019590910190600101615114565b80516001600160a01b03908116835260208083015182169084015260408083015190911690830152606080820151908301526080808201515f916151869085018263ffffffff169052565b5060a082015160e060a08501526151a060e0850182615102565b905060c083015184820360c086015261409d8282614d94565b604081525f6151cb604083018561513b565b828103602084015261409d8185614d94565b5f82825180855260208501945060208160051b830101602085015f5b8381101561421c57601f19858403018852615215838351614d94565b60209889019890935091909101906001016151f9565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b8281101561528257605f1987860301845261526d85835161513b565b94506020938401939190910190600101615251565b50505050828103602084015261409d81856151dd565b5f5f5f606084860312156152aa575f5ffd5b83356152b581614a60565b92506020840135915060408401356152cc81615070565b809150509250925092565b604081525f6151cb6040830185615102565b5f5f5f604084860312156152fb575f5ffd5b833561530681614a60565b925060208401356001600160401b03811115615320575f5ffd5b61532c86828701614df3565b9497909650939450505050565b5f5f6040838503121561534a575f5ffd5b823561535581614a60565b915060208301356001600160401b0381111561536f575f5ffd5b61537b85828601614c52565b9150509250929050565b5f5f5f5f5f5f6060878903121561539a575f5ffd5b86356001600160401b038111156153af575f5ffd5b6153bb89828a01614ad6565b90975095505060208701356001600160401b038111156153d9575f5ffd5b6153e589828a01614ad6565b90955093505060408701356001600160401b03811115615403575f5ffd5b61540f89828a01614ad6565b979a9699509497509295939492505050565b602081525f610c9c602083018461513b565b5f5f5f60608486031215615445575f5ffd5b833561545081614a60565b925060208401356001600160401b0381111561546a575f5ffd5b84016040818703121561547b575f5ffd5b615483614bde565b81356001600160401b03811115615498575f5ffd5b8201601f810188136154a8575f5ffd5b80356001600160401b038111156154c1576154c1614ba2565b6154d4601f8201601f1916602001614c00565b8181528960208385010111156154e8575f5ffd5b816020840160208301375f60209282018301528352928301359282019290925293969395505050506040919091013590565b5f5f6040838503121561552b575f5ffd5b823561553681614a60565b946020939093013593505050565b604081525f6151cb6040830185614d94565b80151581146123d9575f5ffd5b5f5f5f5f60608587031215615576575f5ffd5b84356001600160401b0381111561558b575f5ffd5b850160e0818803121561559c575f5ffd5b935060208501356001600160401b038111156155b6575f5ffd5b6155c287828801614ad6565b90945092505060408501356155d681615556565b939692955090935050565b5f5f604083850312156155f2575f5ffd5b82356001600160401b03811115615607575f5ffd5b8301601f81018513615617575f5ffd5b8035615625614c6f82614c30565b8082825260208201915060208360051b850101925087831115615646575f5ffd5b6020840193505b8284101561567157833561566081614a60565b82526020938401939091019061564d565b945050505060208301356001600160401b0381111561536f575f5ffd5b602081525f610c9c60208301846151dd565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156c8575f5ffd5b9190910192915050565b5f5f8335601e198436030181126156e7575f5ffd5b8301803591506001600160401b03821115615700575f5ffd5b6020019150600581901b3603821315611ead575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60208284031215615755575f5ffd5b8151610c9c81615070565b634e487b7160e01b5f52601160045260245ffd5b808201808211156117e0576117e0615760565b60a08101853561579681614a60565b6001600160a01b0316825263ffffffff6157b260208801614de0565b16602083015260408201949094526001600160a01b03929092166060830152608090910152919050565b5f82601f8301126157eb575f5ffd5b81516157f9614c6f82614c30565b8082825260208201915060208360051b86010192508583111561581a575f5ffd5b602085015b83811015614cbb57805183526020928301920161581f565b5f5f60408385031215615848575f5ffd5b82516001600160401b0381111561585d575f5ffd5b8301601f8101851361586d575f5ffd5b805161587b614c6f82614c30565b8082825260208201915060208360051b85010192508783111561589c575f5ffd5b6020840193505b828410156158c75783516158b681614a60565b8252602093840193909101906158a3565b8095505050505060208301516001600160401b038111156158e6575f5ffd5b61537b858286016157dc565b5f60208284031215615902575f5ffd5b5051919050565b5f823560de198336030181126156c8575f5ffd5b5f6117e03683614f63565b5f60208284031215615938575f5ffd5b8135610c9c81615556565b6001600160a01b03831681526040602082018190525f9061188890830184615102565b5f60208284031215615976575f5ffd5b81516001600160401b0381111561598b575f5ffd5b8201601f8101841361599b575f5ffd5b80516159a9614c6f82614c30565b8082825260208201915060208360051b8501019250868311156159ca575f5ffd5b6020840193505b8284101561088d5783516159e481615070565b8252602093840193909101906159d1565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60018201615a2a57615a2a615760565b5060010190565b838152606060208201525f615a49606083018561513b565b828103604084015261088d8185614d94565b5f60208284031215615a6b575f5ffd5b8151610c9c81615556565b818103818111156117e0576117e0615760565b63ffffffff82811682821603908111156117e0576117e0615760565b63ffffffff81811683821601908111156117e0576117e0615760565b5f5f60408385031215615ad2575f5ffd5b505080516020909101519092909150565b5f60208284031215615af3575f5ffd5b8151610c9c81614a60565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b6001600160401b0382811682821603908111156117e0576117e0615760565b6001600160a01b03841681526060602082018190525f90615b6890830185615102565b905063ffffffff83166040830152949350505050565b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f6118886040830184614f23565b5f82518060208501845e5f920191825250919050565b5f82615bda57634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220a9eb7922fcc5d3342ff9b5ab7a8bf23e57a11428d7ebabb9151464adde75010f64736f6c634300081c003300000000000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "11": { - "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", - "code": "0x739fe46736679d2d9a65f0992f2272de9f3c7fa6e03014608060405260043610610055575f3560e01c80634a283cd91461005957806376b1d08f1461007a578063fd10ebe514610099578063fe65a388146100d2575b5f5ffd5b818015610064575f5ffd5b50610078610073366004610aed565b6100f1565b005b610082600881565b60405160ff90911681526020015b60405180910390f35b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0546040516001600160401b039091168152602001610090565b8180156100dd575f5ffd5b506100786100ec366004610b67565b610202565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab906001600160a01b0316806101e4578260405161015990610ae0565b908152602001604051809103905ff080158015610178573d5f5f3e3d5ffd5b505f84815260028401602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251878152918201529192507f7c96960a1ebd8cc753b10836ea25bd7c9c4f8cd43590db1e8b3648cb0ec4cc89910160405180910390a1505050565b604051630d82532d60e21b815260040160405180910390fd5b505050565b61028d336102448a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061029792505050565b61024e888a610c98565b87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508891506102bf9050565b5050505050505050565b6040805180820182525f80825260606020928301528251808401909352825281019190915290565b6102c761056c565b6001600160801b033411156102ef576040516330e972ad60e01b815260040160405180910390fd5b6102f98183610d8e565b6001600160801b03163410156103225760405163044044a560e21b815260040160405180910390fd5b5f61034c7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b796105c5565b90506103616001600160a01b0382163461061d565b8451600810156103845760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561039e5761039e610c54565b6040519080825280602002602001820160405280156103e357816020015b604080518082019091525f8152606060208201528152602001906001900390816103bc5790505b5090505f5b86518110156104385761041387828151811061040657610406610dad565b6020026020010151610646565b82828151811061042557610425610dad565b60209081029190910101526001016103e8565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab9061048f906001600160401b03166001610dc1565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a81526020018881526020018688346104f09190610de0565b6104fa9190610de0565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c91610558916001600160401b0316908490610e56565b60405180910390a150505050505050505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff1660018111156105a4576105a4610f6b565b146105c257604051633ac4266d60e11b815260040160405180910390fd5b50565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106185760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f5f5f5f85875af19050806101fd57604051633d2cec6f60e21b815260040160405180910390fd5b604080518082019091525f815260606020820152602082015160ff165f819003610698575f5f848060200190518101906106809190610f7f565b925092505061068f82826106b1565b95945050505050565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166107245760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b03161161074d5760405163162908e360e11b815260040160405180910390fd5b6001810154610783576001820154610770906001600160a01b0316863387610821565b61077a858561089d565b9250505061081b565b61078c81610919565b1561080257604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b1580156107de575f5ffd5b505af11580156107f0573d5f5f3e3d5ffd5b5050505061077a81600101548561092d565b604051636890662960e01b815260040160405180910390fd5b92915050565b610833836001600160a01b0316610987565b6108505760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036108795760405163162908e360e11b815260040160405180910390fd5b6108976001600160a01b03841683866001600160801b0385166109cd565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060015b60408051601f1981840301815291905290529392505050565b5f61092682600101541590565b1592915050565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a90529151169581019590955292939083019101610900565b5f6001600160a01b0382163f1580159061081b5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b6040516001600160a01b038085166024830152831660448201526064810182905261089790859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b031683604051610a3b9190610fd9565b5f604051808303815f865af19150503d805f8114610a74576040519150601f19603f3d011682016040523d82523d5f602084013e610a79565b606091505b50915091505f828015610aa4575081511580610aa4575081806020019051810190610aa49190610fef565b9050801580610abb57506001600160a01b0385163b155b15610ad95760405163022e258160e11b815260040160405180910390fd5b5050505050565b61032e8061101683390190565b5f60208284031215610afd575f5ffd5b5035919050565b5f5f83601f840112610b14575f5ffd5b5081356001600160401b03811115610b2a575f5ffd5b602083019150836020828501011115610b41575f5ffd5b9250929050565b6001600160801b03811681146105c2575f5ffd5b803561061881610b48565b5f5f5f5f5f5f5f5f60a0898b031215610b7e575f5ffd5b88356001600160401b03811115610b93575f5ffd5b610b9f8b828c01610b04565b90995097505060208901356001600160401b03811115610bbd575f5ffd5b8901601f81018b13610bcd575f5ffd5b80356001600160401b03811115610be2575f5ffd5b8b60208260051b8401011115610bf6575f5ffd5b6020919091019650945060408901356001600160401b03811115610c18575f5ffd5b610c248b828c01610b04565b9095509350610c37905060608a01610b5c565b9150610c4560808a01610b5c565b90509295985092959890939650565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610c9057610c90610c54565b604052919050565b5f6001600160401b03831115610cb057610cb0610c54565b8260051b610cc060208201610c68565b84815290830190602081019036831115610cd8575f5ffd5b845b83811015610d705780356001600160401b03811115610cf7575f5ffd5b860136601f820112610d07575f5ffd5b80356001600160401b03811115610d2057610d20610c54565b610d33601f8201601f1916602001610c68565b818152366020838501011115610d47575f5ffd5b816020840160208301375f60208383010152808652505050602083019250602081019050610cda565b5095945050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561081b5761081b610d7a565b634e487b7160e01b5f52603260045260245ffd5b6001600160401b03818116838216019081111561081b5761081b610d7a565b6001600160801b03828116828216039081111561081b5761081b610d7a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f602082015160406020850152610e4e6040850182610dff565b949350505050565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b81811015610edd5761013f19878603018352610ec8858551610e2d565b94506020938401939290920191600101610eab565b505050506040840151838203603f19016080850152610efc8282610e2d565b9150506060840151603f198483030160a0850152610f1a8282610dff565b9150506080840151610f3760c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b634e487b7160e01b5f52602160045260245ffd5b5f5f5f60608486031215610f91575f5ffd5b835160ff81168114610fa1575f5ffd5b60208501519093506001600160a01b0381168114610fbd575f5ffd5b6040850151909250610fce81610b48565b809150509250925092565b5f82518060208501845e5f920191825250919050565b5f60208284031215610fff575f5ffd5b8151801515811461100e575f5ffd5b939250505056fe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c0033a2646970667358221220d6b7192f32171e73f3ca8608f2cb38bc543e4d751099308262bcc0a34560c16464736f6c634300081c003300", - "storage": {} - }, - "39": { - "address": "0xc5a5C42992dECbae36851359345FE25997F5C42d", - "code": "0x608060405234801561000f575f5ffd5b50600436106102ff575f3560e01c8063670d3ba211610195578063b2447af7116100e4578063db4df7611161009e578063f231bd0811610079578063f231bd08146107f7578063f605ce081461080a578063fabc1cbc1461081d578063fe4b84df14610830575f5ffd5b8063db4df76114610796578063dc2af692146107bd578063df5cf723146107d0575f5ffd5b8063b2447af714610708578063b66bd9891461071b578063b9fbaed11461072e578063ba1a84e51461075d578063c221d8ae14610770578063d3d96ff414610783575f5ffd5b8063886f11951161014f578063952899ee1161012a578063952899ee146106bc578063a9333ec8146106cf578063a9821821146106e2578063adc2e3d9146106f5575f5ffd5b8063886f1195146106625780638ce648541461068957806394d7d00c146106a9575f5ffd5b8063670d3ba2146105c45780636cfb4481146105d75780636e3492b5146106025780636e875dba1461061557806379ae50cd146106285780637bc1ef611461063b575f5ffd5b806340120dab1161025157806350feea201161020b57806356c483e6116101e657806356c483e61461057e578063595c6a67146105915780635ac86ab7146105995780635c975abb146105bc575f5ffd5b806350feea2014610543578063547afb871461055657806354fd4d5014610569575f5ffd5b806340120dab146104875780634177a87c146104a85780634657e26a146104c85780634a10ffe5146104ef5780634b5046ef1461050f5780634cfd293914610522575f5ffd5b8063261f84e0116102bc5780632bab2c4a116102975780632bab2c4a1461042d578063304c10cd1461044057806332a879e4146104535780633635205714610466575f5ffd5b8063261f84e0146103be5780632981eb77146103d15780632b453a9a1461040d575f5ffd5b80630f3df50e1461030357806310e1b9b8146103335780631352c3e614610353578063136439dd1461037657806315fe50281461038b578063260dc758146103ab575b5f5ffd5b610316610311366004614bf0565b610843565b6040516001600160a01b0390911681526020015b60405180910390f35b610346610341366004614c0a565b610884565b60405161032a9190614c51565b610366610361366004614c84565b6108bd565b604051901515815260200161032a565b610389610384366004614cb8565b610938565b005b61039e610399366004614ccf565b610972565b60405161032a9190614d4d565b6103666103b9366004614bf0565b610a89565b6103896103cc366004614d9f565b610aba565b6103f87f000000000000000000000000000000000000000000000000000000000000003281565b60405163ffffffff909116815260200161032a565b61042061041b366004614e84565b610b63565b60405161032a9190614f27565b61042061043b366004614f8a565b610b79565b61031661044e366004614ccf565b610c18565b61038961046136600461500e565b610c47565b61047961047436600461508e565b610d8e565b60405161032a9291906150e0565b61049a6104953660046150f8565b610ed1565b60405161032a929190615185565b6104bb6104b6366004614bf0565b61104c565b60405161032a91906151e2565b6103167f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b6105026104fd3660046151f4565b611070565b60405161032a9190615237565b61038961051d36600461500e565b611118565b610535610530366004614bf0565b6111ab565b60405190815260200161032a565b610389610551366004615282565b6111cd565b6105026105643660046152e0565b6112be565b610571611366565b60405161032a9190615322565b61038961058c366004615357565b611396565b61038961149b565b6103666105a7366004615381565b606654600160ff9092169190911b9081161490565b606654610535565b6103666105d2366004614c84565b6114af565b6105ea6105e53660046150f8565b6114db565b6040516001600160401b03909116815260200161032a565b6103896106103660046153b7565b6114f0565b6104bb610623366004614bf0565b6118b3565b61039e610636366004614ccf565b6118c4565b6103f87f000000000000000000000000000000000000000000000000000000000000004b81565b6103167f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b61069c6106973660046153e8565b61199e565b60405161032a919061542b565b6105026106b736600461543d565b611a5a565b6103896106ca366004615498565b611b46565b6105ea6106dd3660046150f8565b611fe7565b6103896106f0366004615641565b612016565b6103896107033660046156bf565b6120c8565b610535610716366004614bf0565b612411565b610389610729366004615282565b612433565b61074161073c366004614ccf565b61258d565b60408051921515835263ffffffff90911660208301520161032a565b61053561076b366004614ccf565b612627565b6104bb61077e366004614c84565b612647565b6103896107913660046150f8565b612670565b6103167f000000000000000000000000c6e7df5e7b4f2a278906862b61205850344d4e7d81565b6103666107cb366004614ccf565b61279d565b6103167f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b610366610805366004614bf0565b6127d0565b6105ea6108183660046150f8565b6127ef565b61038961082b366004614cb8565b6127fb565b61038961083e366004614cb8565b612868565b5f5f60a65f61085185612979565b815260208101919091526040015f20546001600160a01b031690508015610878578061087d565b620e16e45b9392505050565b604080516060810182525f80825260208201819052918101829052906108b3856108ad86612979565b856129dc565b9695505050505050565b6001600160a01b0382165f908152609e602052604081208190816108e085612979565b815260208082019290925260409081015f2081518083019092525460ff8116151580835261010090910463ffffffff169282019290925291508061092e5750806020015163ffffffff164311155b9150505b92915050565b610940612b48565b60665481811681146109655760405163c61dca5d60e01b815260040160405180910390fd5b61096e82612beb565b5050565b6001600160a01b0381165f908152609d602052604081206060919061099690612c28565b90505f816001600160401b038111156109b1576109b1614b00565b6040519080825280602002602001820160405280156109f557816020015b604080518082019091525f80825260208201528152602001906001900390816109cf5790505b5090505f5b82811015610a81576001600160a01b0385165f908152609d60205260409020610a5c90610a279083612c31565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610a6e57610a6e615701565b60209081029190910101526001016109fa565b509392505050565b60208082015182516001600160a01b03165f9081526098909252604082206109329163ffffffff90811690612c3c16565b82610ac481612c53565b610ae15760405163932d94f760e01b815260040160405180910390fd5b6001600160a01b0384165f90815260a4602052604090205460ff16610b19576040516348f7dbb960e01b815260040160405180910390fd5b5f5b82811015610b5c57610b5485858584818110610b3957610b39615701565b9050602002810190610b4b9190615715565b620e16e4612cfd565b600101610b1b565b5050505050565b6060610b7184848443612eb1565b949350505050565b6060610b8785858585612eb1565b90505f5b8451811015610c0f57610bb7858281518110610ba957610ba9615701565b6020026020010151876108bd565b610c07575f5b8451811015610c05575f838381518110610bd957610bd9615701565b60200260200101518281518110610bf257610bf2615701565b6020908102919091010152600101610bbd565b505b600101610b8b565b50949350505050565b6001600160a01b038082165f908152609760205260408120549091168015610c40578061087d565b5090919050565b84610c5181612c53565b610c6e5760405163932d94f760e01b815260040160405180910390fd5b838214610c8e576040516343714afd60e01b815260040160405180910390fd5b6001600160a01b0386165f90815260a4602052604090205460ff16610cc6576040516348f7dbb960e01b815260040160405180910390fd5b5f5b84811015610d85575f848483818110610ce357610ce3615701565b9050602002016020810190610cf89190614ccf565b90506001600160a01b038116610d21576040516339b190bb60e11b815260040160405180910390fd5b620e16e3196001600160a01b03821601610d4e576040516364be1a3f60e11b815260040160405180910390fd5b610d7c88888885818110610d6457610d64615701565b9050602002810190610d769190615715565b83612cfd565b50600101610cc8565b50505050505050565b5f60606001610d9c8161319e565b84610da681612c53565b610dc35760405163932d94f760e01b815260040160405180910390fd5b5f6040518060400160405280886001600160a01b03168152602001876020016020810190610df19190615733565b63ffffffff1690529050610e08606087018761574c565b9050610e17604088018861574c565b905014610e37576040516343714afd60e01b815260040160405180910390fd5b60208082015182516001600160a01b03165f90815260989092526040909120610e699163ffffffff90811690612c3c16565b610e8657604051631fb1705560e21b815260040160405180910390fd5b610e9c610e966020880188614ccf565b826108bd565b610eb95760405163ebbff49760e01b815260040160405180910390fd5b610ec386826131cc565b945094505050509250929050565b6001600160a01b0382165f908152609d602052604081206060918291610ef690612c28565b90505f816001600160401b03811115610f1157610f11614b00565b604051908082528060200260200182016040528015610f5557816020015b604080518082019091525f8082526020820152815260200190600190039081610f2f5790505b5090505f826001600160401b03811115610f7157610f71614b00565b604051908082528060200260200182016040528015610fba57816020015b604080516060810182525f80825260208083018290529282015282525f19909201910181610f8f5790505b5090505f5b8381101561103d576001600160a01b0388165f908152609d60205260408120610fec90610a279084612c31565b90508084838151811061100157611001615701565b602002602001018190525061101789828a610884565b83838151811061102957611029615701565b602090810291909101015250600101610fbf565b509093509150505b9250929050565b60605f61087d60995f61105e86612979565b81526020019081526020015f2061390c565b60605f83516001600160401b0381111561108c5761108c614b00565b6040519080825280602002602001820160405280156110b5578160200160208202803683370190505b5090505f5b8451811015610a81576110e68582815181106110d8576110d8615701565b602002602001015185611fe7565b8282815181106110f8576110f8615701565b6001600160401b03909216602092830291909101909101526001016110ba565b5f6111228161319e565b838214611142576040516343714afd60e01b815260040160405180910390fd5b5f5b84811015610d85576111a38787878481811061116257611162615701565b90506020020160208101906111779190614ccf565b86868581811061118957611189615701565b905060200201602081019061119e9190615791565b613918565b600101611144565b5f60a55f6111b884612979565b81526020019081526020015f20549050919050565b836111d781612c53565b6111f45760405163932d94f760e01b815260040160405180910390fd5b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f938452609890529390912091926112339291612c3c16565b61125057604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d85576112b68286868481811061127057611270615701565b90506020020160208101906112859190614ccf565b6112b160405180604001604052808c6001600160a01b031681526020018b63ffffffff168152506127d0565b613a1c565b600101611252565b60605f82516001600160401b038111156112da576112da614b00565b604051908082528060200260200182016040528015611303578160200160208202803683370190505b5090505f5b8351811015610a81576113348585838151811061132757611327615701565b6020026020010151611fe7565b82828151811061134657611346615701565b6001600160401b0390921660209283029190910190910152600101611308565b60606113917f76312e302e300000000000000000000000000000000000000000000000000006613afc565b905090565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614611491576113cf82612c53565b6113ec576040516348f5c3ed60e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0383811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa158015611450573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147491906157b2565b6114915760405163ccea9e6f60e01b815260040160405180910390fd5b61096e8282613b39565b6114a3612b48565b6114ad5f19612beb565b565b5f61087d83609a5f6114c086612979565b81526020019081526020015f20613ce590919063ffffffff16565b5f5f6114e78484613d06565b95945050505050565b60026114fb8161319e565b61151061150b6020840184614ccf565b612c53565b80611529575061152961150b6040840160208501614ccf565b611546576040516348f5c3ed60e01b815260040160405180910390fd5b5f5b611555604084018461574c565b9050811015611817575f604051806040016040528085602001602081019061157d9190614ccf565b6001600160a01b03168152602001611598604087018761574c565b858181106115a8576115a8615701565b90506020020160208101906115bd9190615733565b63ffffffff16815250905061160a816020015163ffffffff1660985f8760200160208101906115ec9190614ccf565b6001600160a01b0316815260208101919091526040015f2090612c3c565b61162757604051631fb1705560e21b815260040160405180910390fd5b609e5f6116376020870187614ccf565b6001600160a01b03166001600160a01b031681526020019081526020015f205f61166083612979565b815260208101919091526040015f205460ff16611690576040516325131d4f60e01b815260040160405180910390fd5b6116ca61169c82612979565b609c5f6116ac6020890189614ccf565b6001600160a01b0316815260208101919091526040015f2090613e75565b506117026116db6020860186614ccf565b609a5f6116e785612979565b81526020019081526020015f20613e8090919063ffffffff16565b506117106020850185614ccf565b6001600160a01b03167fad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe8260405161174891906157d1565b60405180910390a2604080518082019091525f81526020810161178b7f0000000000000000000000000000000000000000000000000000000000000032436157f3565b63ffffffff169052609e5f6117a36020880188614ccf565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6117cc84612979565b81526020808201929092526040015f2082518154939092015163ffffffff166101000264ffffffff00199215159290921664ffffffffff199093169290921717905550600101611548565b5061182b61044e6040840160208501614ccf565b6001600160a01b031663303ca9566118466020850185614ccf565b6118566040860160208701614ccf565b611863604087018761574c565b6040518563ffffffff1660e01b81526004016118829493929190615848565b5f604051808303815f87803b158015611899575f5ffd5b505af11580156118ab573d5f5f3e3d5ffd5b505050505050565b6060610932609a5f61105e85612979565b6001600160a01b0381165f908152609c60205260408120606091906118e890612c28565b90505f816001600160401b0381111561190357611903614b00565b60405190808252806020026020018201604052801561194757816020015b604080518082019091525f80825260208201528152602001906001900390816119215790505b5090505f5b82811015610a81576001600160a01b0385165f908152609c6020526040902061197990610a279083612c31565b82828151811061198b5761198b615701565b602090810291909101015260010161194c565b60605f84516001600160401b038111156119ba576119ba614b00565b604051908082528060200260200182016040528015611a0357816020015b604080516060810182525f80825260208083018290529282015282525f199092019101816119d85790505b5090505f5b8551811015610c0f57611a35868281518110611a2657611a26615701565b60200260200101518686610884565b828281518110611a4757611a47615701565b6020908102919091010152600101611a08565b60605f83516001600160401b03811115611a7657611a76614b00565b604051908082528060200260200182016040528015611a9f578160200160208202803683370190505b5090505f5b8451811015610c0f576001600160a01b0386165f90815260a1602052604081208651611b1492879291899086908110611adf57611adf615701565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20613e9490919063ffffffff16565b828281518110611b2657611b26615701565b6001600160401b0390921660209283029190910190910152600101611aa4565b5f611b508161319e565b611b5983612c53565b611b76576040516348f5c3ed60e01b815260040160405180910390fd5b5f5f5f611b828661258d565b9150915081611ba45760405163fa55fc8160e01b815260040160405180910390fd5b91505f90505b8351811015610b5c57838181518110611bc557611bc5615701565b60200260200101516040015151848281518110611be457611be4615701565b6020026020010151602001515114611c0f576040516343714afd60e01b815260040160405180910390fd5b5f848281518110611c2257611c22615701565b602090810291909101810151518082015181516001600160a01b03165f90815260989093526040909220909250611c629163ffffffff90811690612c3c16565b611c7f57604051631fb1705560e21b815260040160405180910390fd5b5f611c8a87836108bd565b90505f5b868481518110611ca057611ca0615701565b60200260200101516020015151811015611fdc575f878581518110611cc757611cc7615701565b6020026020010151602001518281518110611ce457611ce4615701565b60200260200101519050611cfb898261ffff613918565b5f5f611d0a8b6108ad88612979565b91509150806040015163ffffffff165f14611d3857604051630d8fcbe360e41b815260040160405180910390fd5b5f611d4587858489613ea8565b9050611d8a825f01518c8a81518110611d6057611d60615701565b6020026020010151604001518781518110611d7d57611d7d615701565b6020026020010151613ede565b600f0b602083018190525f03611db357604051634606179360e11b815260040160405180910390fd5b5f8260200151600f0b1215611ef7578015611e7957611e34611dd488612979565b6001600160a01b03808f165f90815260a360209081526040808320938a16835292905220908154600160801b90819004600f0b5f818152600180860160205260409091209390935583546001600160801b03908116939091011602179055565b611e5e7f0000000000000000000000000000000000000000000000000000000000000032436157f3565b611e699060016157f3565b63ffffffff166040830152611f64565b611e8b83602001518360200151613ef5565b6001600160401b031660208401528a518b9089908110611ead57611ead615701565b6020026020010151604001518581518110611eca57611eca615701565b6020908102919091018101516001600160401b031683525f9083015263ffffffff43166040830152611f64565b5f8260200151600f0b1315611f6457611f1883602001518360200151613ef5565b6001600160401b039081166020850181905284519091161015611f4e57604051636c9be0bf60e01b815260040160405180910390fd5b611f5889436157f3565b63ffffffff1660408301525b611f798c611f7189612979565b868686613f14565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd8c8886611fae865f01518760200151613ef5565b8660400151604051611fc4959493929190615874565b60405180910390a1505060019092019150611c8e9050565b505050600101611baa565b6001600160a01b038083165f90815260a160209081526040808320938516835292905290812061087d9061414c565b8261202081612c53565b61203d5760405163932d94f760e01b815260040160405180910390fd5b6001600160a01b0384165f90815260a4602052604090205460ff1661207f576001600160a01b0384165f90815260a460205260409020805460ff191660011790555b836001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371384846040516120ba9291906158ed565b60405180910390a250505050565b60026120d38161319e565b826120dd81612c53565b6120fa5760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0385811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa15801561215e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218291906157b2565b61219f5760405163ccea9e6f60e01b815260040160405180910390fd5b5f5b6121ae602085018561574c565b905081101561237657604080518082019091525f90806121d16020880188614ccf565b6001600160a01b031681526020018680602001906121ef919061574c565b858181106121ff576121ff615701565b90506020020160208101906122149190615733565b63ffffffff90811690915260208083015183516001600160a01b03165f90815260989092526040909120929350612250929190811690612c3c16565b61226d57604051631fb1705560e21b815260040160405180910390fd5b61227786826108bd565b1561229557604051636c6c6e2760e11b815260040160405180910390fd5b6122be6122a182612979565b6001600160a01b0388165f908152609c602052604090209061415f565b506122ea86609a5f6122cf85612979565b81526020019081526020015f2061416a90919063ffffffff16565b50856001600160a01b03167f43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e8260405161232491906157d1565b60405180910390a26001600160a01b0386165f908152609e6020526040812060019161234f84612979565b815260208101919091526040015f20805460ff1916911515919091179055506001016121a1565b5061238761044e6020850185614ccf565b6001600160a01b031663c63fd502856123a36020870187614ccf565b6123b0602088018861574c565b6123bd60408a018a615900565b6040518763ffffffff1660e01b81526004016123de96959493929190615942565b5f604051808303815f87803b1580156123f5575f5ffd5b505af1158015612407573d5f5f3e3d5ffd5b5050505050505050565b5f610932609a5f61242185612979565b81526020019081526020015f20612c28565b8361243d81612c53565b61245a5760405163932d94f760e01b815260040160405180910390fd5b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f938452609890529390912091926124999291612c3c16565b6124b657604051631fb1705560e21b815260040160405180910390fd5b5f6124c082612979565b90505f5b84811015612407576125098686838181106124e1576124e1615701565b90506020020160208101906124f69190614ccf565b5f84815260996020526040902090613e80565b612526576040516331bc342760e11b815260040160405180910390fd5b7f7b4b073d80dcac55a11177d8459ad9f664ceeb91f71f27167bb14f8152a7eeee8387878481811061255a5761255a615701565b905060200201602081019061256f9190614ccf565b60405161257d92919061598e565b60405180910390a16001016124c4565b6001600160a01b0381165f908152609b602090815260408083208151608081018352905463ffffffff80821680845260ff600160201b8404161515958401869052650100000000008304821694840194909452600160481b90910416606082018190528493919291901580159061260e5750826060015163ffffffff164310155b1561261d575050604081015160015b9590945092505050565b6001600160a01b0381165f90815260986020526040812061093290612c28565b6001600160a01b0382165f908152609f602052604081206060919061092e908261105e86612979565b8161267a81612c53565b6126975760405163932d94f760e01b815260040160405180910390fd5b60405163b526578760e01b81526001600160a01b03848116600483015283169063b526578790602401602060405180830381865afa1580156126db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ff91906157b2565b61271c57604051631d0b13c160e31b815260040160405180910390fd5b6001600160a01b038381165f90815260976020526040902080546001600160a01b0319169184169190911790557f2ae945c40c44dc0ec263f95609c3fdc6952e0aefa22d6374e44f2c997acedf858361277481610c18565b604080516001600160a01b039384168152929091166020830152015b60405180910390a1505050565b5f5f6127a8836118c4565b90505f6127b484610972565b90506127c0848361417e565b80610b715750610b71848261417e565b5f620e16e46127de83610843565b6001600160a01b0316141592915050565b5f5f610c0f8484613d06565b6128036141f6565b6066548019821981161461282a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f54610100900460ff161580801561288657505f54600160ff909116105b8061289f5750303b15801561289f57505f5460ff166001145b6129075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015612928575f805461ff0019166101001790555b61293182612beb565b801561096e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f815f0151826020015163ffffffff166040516020016129c492919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b604051602081830303815290604052610932906159b4565b6040805180820182525f80825260208083018290528351606081018552828152808201839052808501839052845180860186526001600160a01b03898116855260a1845286852090881685529092529382209293928190612a3c9061414c565b6001600160401b0390811682526001600160a01b038981165f81815260a260209081526040808320948c168084529482528083205486169682019690965291815260a082528481208b8252825284812092815291815290839020835160608101855290549283168152600160401b8304600f0b91810191909152600160c01b90910463ffffffff16918101829052919250431015612ade579092509050612b40565b612aef815f01518260200151613ef5565b6001600160401b0316815260208101515f600f9190910b1215612b2d57612b1e82602001518260200151613ef5565b6001600160401b031660208301525b5f60408201819052602082015290925090505b935093915050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612baa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bce91906157b2565b6114ad57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f610932825490565b5f61087d83836142a7565b5f818152600183016020526040812054151561087d565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af1158015612cd9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093291906157b2565b5f6040518060400160405280856001600160a01b03168152602001845f016020810190612d2a9190615733565b63ffffffff168152509050612d74816020015163ffffffff1660985f876001600160a01b03166001600160a01b031681526020019081526020015f2061415f90919063ffffffff16565b612d9157604051631fb1705560e21b815260040160405180910390fd5b7f31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c81604051612dc091906157d1565b60405180910390a16001600160a01b038216620e16e414801590612e55578260a65f612deb85612979565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055507f90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e8284604051612e4c92919061598e565b60405180910390a15b5f5b612e64602086018661574c565b90508110156118ab57612ea983612e7e602088018861574c565b84818110612e8e57612e8e615701565b9050602002016020810190612ea39190614ccf565b84613a1c565b600101612e57565b606083516001600160401b03811115612ecc57612ecc614b00565b604051908082528060200260200182016040528015612eff57816020015b6060815260200190600190039081612eea5790505b5090505f7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd826001600160a01b031663f0e0e67686866040518363ffffffff1660e01b8152600401612f519291906159d7565b5f60405180830381865afa158015612f6b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612f9291908101906159fb565b90505f5b8551811015613194575f868281518110612fb257612fb2615701565b6020026020010151905085516001600160401b03811115612fd557612fd5614b00565b604051908082528060200260200182016040528015612ffe578160200160208202803683370190505b5084838151811061301157613011615701565b60209081029190910101525f5b865181101561318a575f87828151811061303a5761303a615701565b6020908102919091018101516001600160a01b038086165f90815260a18452604080822092841682529190935282209092506130759061414c565b9050806001600160401b03165f0361308e575050613182565b5f61309a858d85610884565b90508863ffffffff16816040015163ffffffff16111580156130c257505f8160200151600f0b125b156130e4576130d8815f01518260200151613ef5565b6001600160401b031681525b80515f906130ff906001600160401b039081169085166142cd565b90506131468189898151811061311757613117615701565b6020026020010151878151811061313057613130615701565b60200260200101516142e190919063ffffffff16565b89888151811061315857613158615701565b6020026020010151868151811061317157613171615701565b602002602001018181525050505050505b60010161301e565b5050600101612f96565b5050949350505050565b606654600160ff83161b908116036131c95760405163840a48d560e01b815260040160405180910390fd5b50565b5f6060816131dd604086018661574c565b90506001600160401b038111156131f6576131f6614b00565b60405190808252806020026020018201604052801561321f578160200160208202803683370190505b50905061322f604086018661574c565b90506001600160401b0381111561324857613248614b00565b604051908082528060200260200182016040528015613271578160200160208202803683370190505b50915060a55f61328086612979565b81526020019081526020015f205f815461329990615b07565b918290555092505f5b6132af604087018761574c565b905081101561389e5780158061334257506132cd604087018761574c565b6132d8600184615b1f565b8181106132e7576132e7615701565b90506020020160208101906132fc9190614ccf565b6001600160a01b0316613312604088018861574c565b8381811061332257613322615701565b90506020020160208101906133379190614ccf565b6001600160a01b0316115b61335f57604051639f1c805360e01b815260040160405180910390fd5b61336c606087018761574c565b8281811061337c5761337c615701565b905060200201355f1080156133bc5750670de0b6b3a76400006133a2606088018861574c565b838181106133b2576133b2615701565b9050602002013511155b6133d957604051631353603160e01b815260040160405180910390fd5b61341a6133e9604088018861574c565b838181106133f9576133f9615701565b905060200201602081019061340e9190614ccf565b60995f6114c089612979565b613437576040516331bc342760e11b815260040160405180910390fd5b5f8061348961344960208a018a614ccf565b61345289612979565b61345f60408c018c61574c565b8781811061346f5761346f615701565b90506020020160208101906134849190614ccf565b6129dc565b805191935091506001600160401b03165f036134a6575050613896565b5f6134e16134b760608b018b61574c565b868181106134c7576134c7615701565b85516001600160401b0316926020909102013590506142f5565b83519091506134fc6001600160401b038084169083166142cd565b86868151811061350e5761350e615701565b60200260200101818152505081835f0181815161352b9190615b32565b6001600160401b0316905250835182908590613548908390615b32565b6001600160401b0316905250602084018051839190613568908390615b32565b6001600160401b031690525060208301515f600f9190910b1215613680575f6135cb61359760608d018d61574c565b888181106135a7576135a7615701565b9050602002013585602001516135bc90615b51565b6001600160801b0316906142f5565b9050806001600160401b0316846020018181516135e89190615b75565b600f0b9052507f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd61361c60208d018d614ccf565b8b61362a60408f018f61574c565b8a81811061363a5761363a615701565b905060200201602081019061364f9190614ccf565b613660885f01518960200151613ef5565b8860400151604051613676959493929190615874565b60405180910390a1505b6136d261369060208c018c614ccf565b6136998b612979565b6136a660408e018e61574c565b898181106136b6576136b6615701565b90506020020160208101906136cb9190614ccf565b8787613f14565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd61370060208c018c614ccf565b8a61370e60408e018e61574c565b8981811061371e5761371e615701565b90506020020160208101906137339190614ccf565b865160405161374794939291904390615874565b60405180910390a161379861375f60208c018c614ccf565b61376c60408d018d61574c565b8881811061377c5761377c615701565b90506020020160208101906137919190614ccf565b865161430b565b6001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216635ae679a76137d460208d018d614ccf565b8b8b8e80604001906137e6919061574c565b8b8181106137f6576137f6615701565b905060200201602081019061380b9190614ccf565b89516040516001600160e01b031960e088901b16815261383395949392918991600401615ba2565b6020604051808303815f875af115801561384f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138739190615bf5565b87868151811061388557613885615701565b602002602001018181525050505050505b6001016132a2565b507f80969ad29428d6797ee7aad084f9e4a42a82fc506dcd2ca3b6fb431f85ccebe56138cd6020870187614ccf565b856138db604089018961574c565b856138e960808c018c615900565b6040516138fc9796959493929190615c0c565b60405180910390a1509250929050565b60605f61087d8361438d565b6001600160a01b038381165f90815260a360209081526040808320938616835292905290812054600f81810b600160801b909204900b035b5f8111801561396257508261ffff1682105b15610b5c576001600160a01b038086165f90815260a3602090815260408083209388168352929052908120613996906143e6565b90505f5f6139a58884896129dc565b91509150806040015163ffffffff164310156139c357505050610b5c565b6139d08884898585613f14565b6001600160a01b038089165f90815260a360209081526040808320938b168352929052206139fd90614438565b50613a0785615b07565b9450613a1284615ca2565b9350505050613950565b8015613a9e576001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014801590613a8157507f000000000000000000000000c6e7df5e7b4f2a278906862b61205850344d4e7d6001600160a01b0316826001600160a01b031614155b613a9e57604051632711b74d60e11b815260040160405180910390fd5b613aae8260995f6122cf87612979565b613acb5760405163585cfb2f60e01b815260040160405180910390fd5b7f7ab260fe0af193db5f4986770d831bda4ea46099dc817e8b6716dcae8af8e88b838360405161279092919061598e565b60605f613b08836144b5565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6001600160a01b0382165f908152609b60209081526040918290208251608081018452905463ffffffff808216835260ff600160201b830416151593830193909352650100000000008104831693820193909352600160481b909204166060820181905215801590613bb55750806060015163ffffffff164310155b15613bcf57604081015163ffffffff168152600160208201525b63ffffffff82166040820152613c057f000000000000000000000000000000000000000000000000000000000000004b436157f3565b613c109060016157f3565b63ffffffff90811660608381019182526001600160a01b0386165f818152609b602090815260409182902087518154838a0151858b01519851928a1664ffffffffff1990921691909117600160201b91151591909102176cffffffffffffffff0000000000191665010000000000978916979097026cffffffff000000000000000000191696909617600160481b968816968702179055815192835294871694820194909452928301919091527f4e85751d6331506c6c62335f207eb31f12a61e570f34f5c17640308785c6d4db9101612790565b6001600160a01b0381165f908152600183016020526040812054151561087d565b6001600160a01b038281165f81815260a2602090815260408083209486168084529482528083205493835260a38252808320948352939052918220546001600160401b039091169190600f81810b600160801b909204900b03815b81811015613e31576001600160a01b038087165f90815260a3602090815260408083209389168352929052908120613d9990836144dc565b6001600160a01b038881165f90815260a0602090815260408083208584528252808320938b16835292815290829020825160608101845290546001600160401b0381168252600160401b8104600f0b92820192909252600160c01b90910463ffffffff16918101829052919250431015613e14575050613e31565b613e22868260200151613ef5565b95505050806001019050613d61565b506001600160a01b038086165f90815260a1602090815260408083209388168352929052208390613e619061414c565b613e6b9190615b32565b9150509250929050565b5f61087d838361454b565b5f61087d836001600160a01b03841661454b565b5f61087d8383670de0b6b3a764000061462e565b5f613eb98460995f6114c089612979565b8015613ec25750815b80156114e757505090516001600160401b031615159392505050565b5f61087d6001600160401b03808516908416615cb7565b5f61087d613f0c836001600160401b038616615b75565b600f0b614683565b6020808301516001600160a01b038088165f90815260a284526040808220928816825291909352909120546001600160401b03908116911614613fda57602082810180516001600160a01b038881165f81815260a286526040808220938a1680835293875290819020805467ffffffffffffffff19166001600160401b0395861617905593518451918252948101919091529216908201527facf9095feb3a370c9cf692421c69ef320d4db5c66e6a7d29c7694eb02364fc559060600160405180910390a15b6001600160a01b038086165f90815260a060209081526040808320888452825280832093871683529281529082902083518154928501519385015163ffffffff16600160c01b0263ffffffff60c01b196001600160801b038616600160401b026001600160c01b03199095166001600160401b03909316929092179390931716919091179055600f0b156140bc576001600160a01b0385165f908152609f602090815260408083208784529091529020614094908461416a565b506001600160a01b0385165f908152609d602052604090206140b6908561415f565b50610b5c565b80516001600160401b03165f03610b5c576001600160a01b0385165f908152609f6020908152604080832087845290915290206140f99084613e80565b506001600160a01b0385165f908152609f60209081526040808320878452909152902061412590612c28565b5f03610b5c576001600160a01b0385165f908152609d602052604090206118ab9085613e75565b5f61093282670de0b6b3a76400006146ee565b5f61087d8383614725565b5f61087d836001600160a01b038416614725565b5f805b82518110156141ed576141ad848483815181106141a0576141a0615701565b60200260200101516108bd565b80156141d657506141d68382815181106141c9576141c9615701565b60200260200101516127d0565b156141e5576001915050610932565b600101614181565b505f9392505050565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614252573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142769190615ce4565b6001600160a01b0316336001600160a01b0316146114ad5760405163794821ff60e01b815260040160405180910390fd5b5f825f0182815481106142bc576142bc615701565b905f5260205f200154905092915050565b5f61087d83670de0b6b3a764000084614771565b5f61087d8383670de0b6b3a7640000614771565b5f61087d8383670de0b6b3a76400006001614856565b6001600160a01b038084165f90815260a16020908152604080832093861683529290522061433a9043836148a5565b604080516001600160a01b038086168252841660208201526001600160401b038316918101919091527f1c6458079a41077d003c11faf9bf097e693bd67979e4e6500bac7b29db779b5c90606001612790565b6060815f018054806020026020016040519081016040528092919081815260200182805480156143da57602002820191905f5260205f20905b8154815260200190600101908083116143c6575b50505050509050919050565b5f6144008254600f81810b600160801b909204900b131590565b1561441e57604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f9081526001909101602052604090205490565b5f6144528254600f81810b600160801b909204900b131590565b1561447057604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f818152600180840160205260408220805492905583546fffffffffffffffffffffffffffffffff191692016001600160801b03169190911790915590565b5f60ff8216601f81111561093257604051632cd44ac360e21b815260040160405180910390fd5b5f5f6144fe6144ea846148be565b85546144f99190600f0b615cff565b614927565b8454909150600160801b9004600f90810b9082900b1261453157604051632d0483c560e21b815260040160405180910390fd5b600f0b5f9081526001939093016020525050604090205490565b5f8181526001830160205260408120548015614625575f61456d600183615b1f565b85549091505f9061458090600190615b1f565b90508181146145df575f865f01828154811061459e5761459e615701565b905f5260205f200154905080875f0184815481106145be576145be615701565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806145f0576145f0615d26565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610932565b5f915050610932565b82545f908161463f86868385614990565b905080156146795761466386614656600184615b1f565b5f91825260209091200190565b54600160201b90046001600160e01b03166108b3565b5091949350505050565b5f6001600160401b038211156146ea5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b60648201526084016128fe565b5090565b81545f90801561471d5761470784614656600184615b1f565b54600160201b90046001600160e01b031661092e565b509092915050565b5f81815260018301602052604081205461476a57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610932565b505f610932565b5f80805f19858709858702925082811083820303915050805f036147a85783828161479e5761479e615d3a565b049250505061087d565b8084116147ef5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016128fe565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f614863868686614771565b9050600183600281111561487957614879615d4e565b14801561489557505f848061489057614890615d3a565b868809115b156114e7576108b3600182615d62565b6148b983836001600160401b0384166149e3565b505050565b5f6001600160ff1b038211156146ea5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016128fe565b80600f81900b811461498b5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016128fe565b919050565b5f5b81831015610a81575f6149a58484614ae6565b5f8781526020902090915063ffffffff86169082015463ffffffff1611156149cf578092506149dd565b6149da816001615d62565b93505b50614992565b82548015614a99575f6149fb85614656600185615b1f565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b031660208401529192509085161015614a4d5760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff808616911603614a975782614a6e86614656600186615b1f565b80546001600160e01b0392909216600160201b0263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216600160201b029190921617910155565b5f614af46002848418615d75565b61087d90848416615d62565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614b3657614b36614b00565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b6457614b64614b00565b604052919050565b6001600160a01b03811681146131c9575f5ffd5b803563ffffffff8116811461498b575f5ffd5b5f60408284031215614ba3575f5ffd5b604080519081016001600160401b0381118282101715614bc557614bc5614b00565b6040529050808235614bd681614b6c565b8152614be460208401614b80565b60208201525092915050565b5f60408284031215614c00575f5ffd5b61087d8383614b93565b5f5f5f60808486031215614c1c575f5ffd5b8335614c2781614b6c565b9250614c368560208601614b93565b91506060840135614c4681614b6c565b809150509250925092565b81516001600160401b03168152602080830151600f0b9082015260408083015163ffffffff169082015260608101610932565b5f5f60608385031215614c95575f5ffd5b8235614ca081614b6c565b9150614caf8460208501614b93565b90509250929050565b5f60208284031215614cc8575f5ffd5b5035919050565b5f60208284031215614cdf575f5ffd5b813561087d81614b6c565b80516001600160a01b0316825260209081015163ffffffff16910152565b5f8151808452602084019350602083015f5b82811015614d4357614d2d868351614cea565b6040959095019460209190910190600101614d1a565b5093949350505050565b602081525f61087d6020830184614d08565b5f5f83601f840112614d6f575f5ffd5b5081356001600160401b03811115614d85575f5ffd5b6020830191508360208260051b8501011115611045575f5ffd5b5f5f5f60408486031215614db1575f5ffd5b8335614dbc81614b6c565b925060208401356001600160401b03811115614dd6575f5ffd5b614de286828701614d5f565b9497909650939450505050565b5f6001600160401b03821115614e0757614e07614b00565b5060051b60200190565b5f82601f830112614e20575f5ffd5b8135614e33614e2e82614def565b614b3c565b8082825260208201915060208360051b860101925085831115614e54575f5ffd5b602085015b83811015614e7a578035614e6c81614b6c565b835260209283019201614e59565b5095945050505050565b5f5f5f60808486031215614e96575f5ffd5b614ea08585614b93565b925060408401356001600160401b03811115614eba575f5ffd5b614ec686828701614e11565b92505060608401356001600160401b03811115614ee1575f5ffd5b614eed86828701614e11565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614d43578151865260209586019590910190600101614f09565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614f7e57603f19878603018452614f69858351614ef7565b94506020938401939190910190600101614f4d565b50929695505050505050565b5f5f5f5f60a08587031215614f9d575f5ffd5b614fa78686614b93565b935060408501356001600160401b03811115614fc1575f5ffd5b614fcd87828801614e11565b93505060608501356001600160401b03811115614fe8575f5ffd5b614ff487828801614e11565b92505061500360808601614b80565b905092959194509250565b5f5f5f5f5f60608688031215615022575f5ffd5b853561502d81614b6c565b945060208601356001600160401b03811115615047575f5ffd5b61505388828901614d5f565b90955093505060408601356001600160401b03811115615071575f5ffd5b61507d88828901614d5f565b969995985093965092949392505050565b5f5f6040838503121561509f575f5ffd5b82356150aa81614b6c565b915060208301356001600160401b038111156150c4575f5ffd5b830160a081860312156150d5575f5ffd5b809150509250929050565b828152604060208201525f610b716040830184614ef7565b5f5f60408385031215615109575f5ffd5b823561511481614b6c565b915060208301356150d581614b6c565b5f8151808452602084019350602083015f5b82811015614d435761516f86835180516001600160401b03168252602080820151600f0b9083015260409081015163ffffffff16910152565b6060959095019460209190910190600101615136565b604081525f6151976040830185614d08565b82810360208401526114e78185615124565b5f8151808452602084019350602083015f5b82811015614d435781516001600160a01b03168652602095860195909101906001016151bb565b602081525f61087d60208301846151a9565b5f5f60408385031215615205575f5ffd5b82356001600160401b0381111561521a575f5ffd5b61522685828601614e11565b92505060208301356150d581614b6c565b602080825282518282018190525f918401906040840190835b818110156152775783516001600160401b0316835260209384019390920191600101615250565b509095945050505050565b5f5f5f5f60608587031215615295575f5ffd5b84356152a081614b6c565b93506152ae60208601614b80565b925060408501356001600160401b038111156152c8575f5ffd5b6152d487828801614d5f565b95989497509550505050565b5f5f604083850312156152f1575f5ffd5b82356152fc81614b6c565b915060208301356001600160401b03811115615316575f5ffd5b613e6b85828601614e11565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215615368575f5ffd5b823561537381614b6c565b9150614caf60208401614b80565b5f60208284031215615391575f5ffd5b813560ff8116811461087d575f5ffd5b5f606082840312156153b1575f5ffd5b50919050565b5f602082840312156153c7575f5ffd5b81356001600160401b038111156153dc575f5ffd5b61092e848285016153a1565b5f5f5f608084860312156153fa575f5ffd5b83356001600160401b0381111561540f575f5ffd5b61541b86828701614e11565b935050614c368560208601614b93565b602081525f61087d6020830184615124565b5f5f5f6060848603121561544f575f5ffd5b833561545a81614b6c565b925060208401356001600160401b03811115615474575f5ffd5b61548086828701614e11565b92505061548f60408501614b80565b90509250925092565b5f5f604083850312156154a9575f5ffd5b82356154b481614b6c565b915060208301356001600160401b038111156154ce575f5ffd5b8301601f810185136154de575f5ffd5b80356154ec614e2e82614def565b8082825260208201915060208360051b85010192508783111561550d575f5ffd5b602084015b838110156156325780356001600160401b0381111561552f575f5ffd5b85016080818b03601f19011215615544575f5ffd5b61554c614b14565b6155598b60208401614b93565b815260608201356001600160401b03811115615573575f5ffd5b6155828c602083860101614e11565b60208301525060808201356001600160401b038111156155a0575f5ffd5b6020818401019250508a601f8301126155b7575f5ffd5b81356155c5614e2e82614def565b8082825260208201915060208360051b86010192508d8311156155e6575f5ffd5b6020850194505b8285101561561c5784356001600160401b038116811461560b575f5ffd5b8252602094850194909101906155ed565b6040840152505084525060209283019201615512565b50809450505050509250929050565b5f5f5f60408486031215615653575f5ffd5b833561565e81614b6c565b925060208401356001600160401b03811115615678575f5ffd5b8401601f81018613615688575f5ffd5b80356001600160401b0381111561569d575f5ffd5b8660208284010111156156ae575f5ffd5b939660209190910195509293505050565b5f5f604083850312156156d0575f5ffd5b82356156db81614b6c565b915060208301356001600160401b038111156156f5575f5ffd5b613e6b858286016153a1565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e19833603018112615729575f5ffd5b9190910192915050565b5f60208284031215615743575f5ffd5b61087d82614b80565b5f5f8335601e19843603018112615761575f5ffd5b8301803591506001600160401b0382111561577a575f5ffd5b6020019150600581901b3603821315611045575f5ffd5b5f602082840312156157a1575f5ffd5b813561ffff8116811461087d575f5ffd5b5f602082840312156157c2575f5ffd5b8151801515811461087d575f5ffd5b604081016109328284614cea565b634e487b7160e01b5f52601160045260245ffd5b63ffffffff8181168382160190811115610932576109326157df565b8183526020830192505f815f5b84811015614d435763ffffffff61583283614b80565b168652602095860195919091019060010161581c565b6001600160a01b038581168252841660208201526060604082018190525f906108b3908301848661580f565b6001600160a01b038616815260c081016158916020830187614cea565b6001600160a01b039490941660608201526001600160401b0392909216608083015263ffffffff1660a09091015292915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610b716020830184866158c5565b5f5f8335601e19843603018112615915575f5ffd5b8301803591506001600160401b0382111561592e575f5ffd5b602001915036819003821315611045575f5ffd5b6001600160a01b038781168252861660208201526080604082018190525f9061596e908301868861580f565b82810360608401526159818185876158c5565b9998505050505050505050565b6060810161599c8285614cea565b6001600160a01b039290921660409190910152919050565b805160208083015191908110156153b1575f1960209190910360031b1b16919050565b604081525f6159e960408301856151a9565b82810360208401526114e781856151a9565b5f60208284031215615a0b575f5ffd5b81516001600160401b03811115615a20575f5ffd5b8201601f81018413615a30575f5ffd5b8051615a3e614e2e82614def565b8082825260208201915060208360051b850101925086831115615a5f575f5ffd5b602084015b83811015615afc5780516001600160401b03811115615a81575f5ffd5b8501603f81018913615a91575f5ffd5b6020810151615aa2614e2e82614def565b808282526020820191506020808460051b8601010192508b831115615ac5575f5ffd5b6040840193505b82841015615ae7578351825260209384019390910190615acc565b86525050602093840193919091019050615a64565b509695505050505050565b5f60018201615b1857615b186157df565b5060010190565b81810381811115610932576109326157df565b6001600160401b038281168282160390811115610932576109326157df565b5f81600f0b60016001607f1b03198103615b6d57615b6d6157df565b5f0392915050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715610932576109326157df565b6001600160a01b038716815260e08101615bbf6020830188614cea565b60608201959095526001600160a01b039390931660808401526001600160401b0391821660a08401521660c09091015292915050565b5f60208284031215615c05575f5ffd5b5051919050565b6001600160a01b03881681525f60c08201615c2a602084018a614cea565b60c060608401528690528660e083015f5b88811015615c6b578235615c4e81614b6c565b6001600160a01b0316825260209283019290910190600101615c3b565b508381036080850152615c7e8188614ef7565b91505082810360a0840152615c948185876158c5565b9a9950505050505050505050565b5f81615cb057615cb06157df565b505f190190565b600f82810b9082900b0360016001607f1b0319811260016001607f1b0382131715610932576109326157df565b5f60208284031215615cf4575f5ffd5b815161087d81614b6c565b8082018281125f831280158216821582161715615d1e57615d1e6157df565b505092915050565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b80820180821115610932576109326157df565b5f82615d8f57634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212204822a3705860d0223c89242417e05d3a5345087df963e57606c2b5c3d238326364736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "4": { + "1": { "address": "0x1111111111111111111111111111111111111111", "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c80632baeceb71461004e5780638381f58a146100585780638da5cb5b14610073578063d826f88f1461009e575b5f5ffd5b6100566100a6565b005b6100605f5481565b6040519081526020015b60405180910390f35b600154610086906001600160a01b031681565b6040516001600160a01b03909116815260200161006a565b61005661010d565b5f5f54116100fb5760405162461bcd60e51b815260206004820152601f60248201527f4e756d6265722073686f756c642062652067726561746572207468616e20300060448201526064015b60405180910390fd5b60015f54610109919061016d565b5f55565b6001546001600160a01b031633146101675760405162461bcd60e51b815260206004820152601760248201527f4f6e6c792063616c6c61626c65206279206f776e65722100000000000000000060448201526064016100f2565b600a5f55565b8181038181111561018c57634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220ac5899491afd834afd223fd632497d1c0c7593961eda22f04c58db4b504999cf64736f6c634300081c0033000000", "storage": { @@ -94,485 +56,16 @@ "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" } }, - "26": { - "address": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "4": { + "address": "0x0000BBdDc7CE488642fb579F8B00f3a590007251", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd00", "storage": { - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000322813fd9a801c5507c9de605d63cea4f2ce6c44" + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, - "3": { - "address": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", - "code": "0x608060405234801561000f575f5ffd5b50600436106103b3575f3560e01c8063886f1195116101f5578063de02e50311610114578063f6efbb59116100a9578063fabc1cbc11610079578063fabc1cbc14610a33578063fbf1e2c114610a46578063fce36c7d14610a59578063ff9f6cce14610a6c575f5ffd5b8063f6efbb59146109e7578063f74e8eac146109fa578063f8cd844814610a0d578063f96abf2e14610a20575f5ffd5b8063ed71e6a2116100e4578063ed71e6a214610967578063f22cef8514610994578063f2f07ab4146109a7578063f2fde38b146109d4575f5ffd5b8063de02e50314610907578063e063f81f1461091a578063e810ce211461092d578063ea4d3c9b14610940575f5ffd5b8063a50a1d9c1161018a578063bf21a8aa1161015a578063bf21a8aa14610879578063c46db606146108a0578063ca8aa7c7146108cd578063dcbb03b3146108f4575f5ffd5b8063a50a1d9c14610807578063aebd8bae1461081a578063b3dbb0e014610847578063bb7e451f1461085a575f5ffd5b80639cb9a5fa116101c55780639cb9a5fa146107a75780639d45c281146107ba5780639de4b35f146107e1578063a0169ddd146107f4575f5ffd5b8063886f11951461074c5780638da5cb5b146107735780639104c319146107845780639be3d4e41461079f575f5ffd5b80634596021c116102e15780635c975abb11610276578063715018a611610246578063715018a6146106ff5780637b8f8b0514610707578063863cb9a91461070f578063865c695314610722575f5ffd5b80635c975abb146106a25780635e9d8348146106aa57806363f6a798146106bd5780636d21117e146106d2575f5ffd5b806354fd4d50116102b157806354fd4d501461064f57806358baaa3e14610664578063595c6a67146106775780635ac86ab71461067f575f5ffd5b80634596021c146105d85780634657e26a146105eb5780634b943960146106125780634d18cc3514610638575f5ffd5b8063149bc8721161035757806339b70e381161032757806339b70e38146105745780633a8c07861461059b5780633ccc861d146105b25780633efe1db6146105c5575f5ffd5b8063149bc872146104d95780632b9f64a4146104fa57806336af41fa1461053a57806337838ed01461054d575f5ffd5b80630e9a53cf116103925780630e9a53cf1461043f5780630eb383451461048c578063131433b41461049f578063136439dd146104c6575f5ffd5b806218572c146103b757806304a0c502146103ee5780630ca298991461042a575b5f5ffd5b6103d96103c5366004613a33565b60d16020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6104157f0000000000000000000000000000000000000000000000000000000000278d0081565b60405163ffffffff90911681526020016103e5565b61043d610438366004613aab565b610a7f565b005b610447610d25565b6040516103e591905f6080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b61043d61049a366004613b07565b610e25565b6104157f0000000000000000000000000000000000000000000000000000000065fb788081565b61043d6104d4366004613b3e565b610ea5565b6104ec6104e7366004613b55565b610edf565b6040519081526020016103e5565b610522610508366004613a33565b60cc6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103e5565b61043d610548366004613b6f565b610f54565b6104157f000000000000000000000000000000000000000000000000000000000076a70081565b6105227f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b60cb5461041590600160a01b900463ffffffff1681565b61043d6105c0366004613bbe565b6110c5565b61043d6105d3366004613c14565b6110ec565b61043d6105e6366004613c3e565b6112c2565b6105227f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b610625610620366004613a33565b611325565b60405161ffff90911681526020016103e5565b60cb5461041590600160c01b900463ffffffff1681565b610657611380565b6040516103e59190613c90565b61043d610672366004613cc5565b6113b0565b61043d6113c4565b6103d961068d366004613cde565b606654600160ff9092169190911b9081161490565b6066546104ec565b6103d96106b8366004613cfe565b6113d8565b60cb5461062590600160e01b900461ffff1681565b6103d96106e0366004613d2f565b60cf60209081525f928352604080842090915290825290205460ff1681565b61043d611463565b60ca546104ec565b61043d61071d366004613a33565b611474565b6104ec610730366004613d59565b60cd60209081525f928352604080842090915290825290205481565b6105227f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6033546001600160a01b0316610522565b61052273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610447611485565b61043d6107b5366004613d85565b611521565b6104157f000000000000000000000000000000000000000000000000000000000001518081565b6106256107ef366004613dbc565b61169c565b61043d610802366004613a33565b61171f565b61043d610815366004613df8565b61172a565b6103d9610828366004613d2f565b60d260209081525f928352604080842090915290825290205460ff1681565b61043d610855366004613e11565b61173b565b6104ec610868366004613a33565b60ce6020525f908152604090205481565b6104157f00000000000000000000000000000000000000000000000000000000005c490081565b6103d96108ae366004613d2f565b60d060209081525f928352604080842090915290825290205460ff1681565b6105227f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b61043d610902366004613e3b565b611866565b610447610915366004613b3e565b6119b3565b610625610928366004613d59565b611a43565b61041561093b366004613b3e565b611aa8565b6105227f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b6103d9610975366004613d2f565b60d360209081525f928352604080842090915290825290205460ff1681565b61043d6109a2366004613d59565b611b29565b6103d96109b5366004613d2f565b60d760209081525f928352604080842090915290825290205460ff1681565b61043d6109e2366004613a33565b611c93565b61043d6109f5366004613e7f565b611d0e565b61043d610a08366004613edd565b611e43565b6104ec610a1b366004613b55565b61200a565b61043d610a2e366004613cc5565b61201a565b61043d610a41366004613b3e565b61214b565b60cb54610522906001600160a01b031681565b61043d610a67366004613b6f565b6121b8565b61043d610a7a366004613b6f565b6122e9565b6009610a8a8161244a565b610a976020850185613a33565b610aa081612475565b610abd5760405163932d94f760e01b815260040160405180910390fd5b610ac561251f565b6040516304c1b8eb60e31b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063260dc75890610b11908890600401613f48565b602060405180830381865afa158015610b2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b509190613f56565b610b6d57604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d135736858583818110610b8a57610b8a613f71565b9050602002810190610b9c9190613f85565b90505f60ce81610baf60208b018b613a33565b6001600160a01b031681526020808201929092526040015f90812054925090610bda908a018a613a33565b8284604051602001610bee939291906141ad565b6040516020818303038152906040528051906020012090505f610c1084612578565b9050600160d75f610c2460208e018e613a33565b6001600160a01b0316815260208082019290925260409081015f9081208682529092529020805460ff1916911515919091179055610c638360016141f0565b60ce5f610c7360208e018e613a33565b6001600160a01b03166001600160a01b031681526020019081526020015f208190555081336001600160a01b03167ffff0759ccb371dfb5691798724e70b4fa61cb3bfe730a33ac19fb86a48efc7568c8688604051610cd493929190614203565b60405180910390a3610d03333083610cf26040890160208a01613a33565b6001600160a01b0316929190612763565b505060019092019150610b6f9050565b50610d1e6001609755565b5050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca545b8015610dfd575f60ca610d60600184614228565b81548110610d7057610d70613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610ddf5750806040015163ffffffff164210155b15610dea5792915050565b5080610df58161423b565b915050610d4c565b5050604080516080810182525f80825260208201819052918101829052606081019190915290565b610e2d6127ce565b6001600160a01b0382165f81815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b03919091165f90815260d160205260409020805460ff1916911515919091179055565b610ead612828565b6066548181168114610ed25760405163c61dca5d60e01b815260040160405180910390fd5b610edb826128cb565b5050565b5f80610eee6020840184613a33565b8360200135604051602001610f379392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b6001610f5f8161244a565b335f90815260d1602052604090205460ff16610f8e57604051635c427cd960e01b815260040160405180910390fd5b610f9661251f565b5f5b828110156110b55736848483818110610fb357610fb3613f71565b9050602002810190610fc59190614250565b335f81815260ce60209081526040808320549051949550939192610fef92909185918791016142e2565b60405160208183030381529060405280519060200120905061101083612908565b335f90815260d0602090815260408083208484529091529020805460ff191660019081179091556110429083906141f0565b335f81815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290611089908890614308565b60405180910390a46110aa333060408601803590610cf29060208901613a33565b505050600101610f98565b506110c06001609755565b505050565b60026110d08161244a565b6110d861251f565b6110e283836129f3565b6110c06001609755565b60036110f78161244a565b60cb546001600160a01b0316331461112257604051635c427cd960e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161115557604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff161061117b576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb545f9061119a90600160a01b900463ffffffff164261431a565b6040805160808101825287815263ffffffff87811660208084018281528684168587018181525f6060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60026112cd8161244a565b6112d561251f565b5f5b838110156113145761130c8585838181106112f4576112f4613f71565b90506020028101906113069190614336565b846129f3565b6001016112d7565b5061131f6001609755565b50505050565b6001600160a01b0381165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff169082015261137a90612c7b565b92915050565b60606113ab7f76312e302e300000000000000000000000000000000000000000000000000006612ceb565b905090565b6113b86127ce565b6113c181612d28565b50565b6113cc612828565b6113d65f196128cb565b565b5f61145b8260ca6113ec6020830183613cc5565b63ffffffff168154811061140257611402613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152612d99565b506001919050565b61146b6127ce565b6113d65f612f3c565b61147c6127ce565b6113c181612f8d565b604080516080810182525f80825260208201819052918101829052606081019190915260ca80546114b890600190614228565b815481106114c8576114c8613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b600561152c8161244a565b8361153681612475565b6115535760405163932d94f760e01b815260040160405180910390fd5b61155b61251f565b5f5b83811015610d13573685858381811061157857611578613f71565b905060200281019061158a9190613f85565b6001600160a01b0388165f90815260ce60209081526040808320549051939450926115bb918b9185918791016141ad565b6040516020818303038152906040528051906020012090505f6115dd84612578565b6001600160a01b038b165f90815260d3602090815260408083208684529091529020805460ff1916600190811790915590915061161b9084906141f0565b6001600160a01b038b165f81815260ce60205260409081902092909255905183919033907ffc8888bffd711da60bc5092b33f677d81896fe80ecc677b84cfab8184462b6e09061166e9088908a9061434a565b60405180910390a461168c333083610cf26040890160208a01613a33565b50506001909201915061155d9050565b6001600160a01b0382165f90815260d66020526040812061171890826116cf6116ca36879003870187614362565b612fe8565b815260208082019290925260409081015f208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152612c7b565b9392505050565b33610edb818361304b565b6117326127ce565b6113c1816130ae565b60076117468161244a565b8261175081612475565b61176d5760405163932d94f760e01b815260040160405180910390fd5b60cb545f9061178990600160a01b900463ffffffff164261431a565b6001600160a01b0386165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152919250906117e290612c7b565b6001600160a01b0387165f90815260d560205260409020909150611807908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388169133917fd1e028bd664486a46ad26040e999cd2d22e1e9a094ee6afe19fcf64678f16f749181900360600190a3505050505050565b60066118718161244a565b8361187b81612475565b6118985760405163932d94f760e01b815260040160405180910390fd5b60cb545f906118b490600160a01b900463ffffffff164261431a565b6001600160a01b038781165f90815260d460209081526040808320938a1683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff169281019290925291925061191b90612c7b565b6001600160a01b038089165f90815260d460209081526040808320938b1683529290522090915061194d908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388811692908a169133917f48e198b6ae357e529204ee53a8e514c470ff77d9cc8e4f7207f8b5d490ae6934919081900360600190a450505050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca82815481106119e9576119e9613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b6001600160a01b038281165f90815260d46020908152604080832093851683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff16928101929092529061171890612c7b565b60ca545f905b63ffffffff811615611b0f578260ca611ac86001846143ca565b63ffffffff1681548110611ade57611ade613f71565b905f5260205f2090600202015f015403611afd576117186001826143ca565b80611b07816143e6565b915050611aae565b5060405163504570e360e01b815260040160405180910390fd5b81611b3381612475565b611b505760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa158015611bb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd89190613f56565b80611c6c575060405163ba1a84e560e01b81526001600160a01b0384811660048301525f917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed9091169063ba1a84e590602401602060405180830381865afa158015611c46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6a9190614404565b115b611c895760405163fb494ea160e01b815260040160405180910390fd5b6110c0838361304b565b611c9b6127ce565b6001600160a01b038116611d055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6113c181612f3c565b5f54610100900460ff1615808015611d2c57505f54600160ff909116105b80611d455750303b158015611d4557505f5460ff166001145b611da85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611cfc565b5f805460ff191660011790558015611dc9575f805461ff0019166101001790555b611dd2856128cb565b611ddb86612f3c565b611de484612f8d565b611ded83612d28565b611df6826130ae565b8015611e3b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6008611e4e8161244a565b83611e5881612475565b611e755760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063260dc75890611ec1908790600401613f48565b602060405180830381865afa158015611edc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f009190613f56565b611f1d57604051631fb1705560e21b815260040160405180910390fd5b60cb545f90611f3990600160a01b900463ffffffff164261431a565b6001600160a01b0387165f90815260d66020526040812091925090611f6b90826116cf6116ca368b90038b018b614362565b6001600160a01b0388165f90815260d660205260408120919250611fb09190611f9c6116ca368b90038b018b614362565b81526020019081526020015f208684613119565b866001600160a01b0316336001600160a01b03167f14918b3834ab6752eb2e1b489b6663a67810efb5f56f3944a97ede8ecf1fd9f18885858a604051611ff9949392919061441b565b60405180910390a350505050505050565b5f6001610eee6020840184613a33565b60036120258161244a565b60cb546001600160a01b0316331461205057604051635c427cd960e01b815260040160405180910390fd5b60ca5463ffffffff831610612078576040516394a8d38960e01b815260040160405180910390fd5b5f60ca8363ffffffff168154811061209257612092613f71565b905f5260205f20906002020190508060010160089054906101000a900460ff16156120d057604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061210157604051630c36f66560e21b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e905f90a2505050565b6121536131e8565b6066548019821981161461217a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6121c28161244a565b6121ca61251f565b5f5b828110156110b557368484838181106121e7576121e7613f71565b90506020028101906121f99190614250565b335f81815260ce6020908152604080832054905194955093919261222392909185918791016142e2565b60405160208183030381529060405280519060200120905061224483612908565b335f90815260cf602090815260408083208484529091529020805460ff191660019081179091556122769083906141f0565b335f81815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e6281906122bd908890614308565b60405180910390a46122de333060408601803590610cf29060208901613a33565b5050506001016121cc565b60046122f48161244a565b335f90815260d1602052604090205460ff1661232357604051635c427cd960e01b815260040160405180910390fd5b61232b61251f565b5f5b828110156110b5573684848381811061234857612348613f71565b905060200281019061235a9190614250565b335f81815260ce6020908152604080832054905194955093919261238492909185918791016142e2565b6040516020818303038152906040528051906020012090506123a583612908565b335f90815260d2602090815260408083208484529091529020805460ff191660019081179091556123d79083906141f0565b335f81815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b9061241e908890614308565b60405180910390a461243f333060408601803590610cf29060208901613a33565b50505060010161232d565b606654600160ff83161b908116036113c15760405163840a48d560e01b815260040160405180910390fd5b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af11580156124fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137a9190613f56565b6002609754036125715760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611cfc565b6002609755565b5f6125ab612586838061444f565b6125966080860160608701613cc5565b6125a660a0870160808801613cc5565b613299565b5f6125b9604084018461444f565b9050116125d95760405163796cc52560e01b815260040160405180910390fd5b426125ea60a0840160808501613cc5565b6125fa6080850160608601613cc5565b612604919061431a565b63ffffffff16106126285760405163150358a160e21b815260040160405180910390fd5b5f80805b612639604086018661444f565b905081101561272a5736612650604087018761444f565b8381811061266057612660613f71565b6040029190910191505f90506126796020830183613a33565b6001600160a01b0316036126a057604051630863a45360e11b815260040160405180910390fd5b6126ad6020820182613a33565b6001600160a01b0316836001600160a01b0316106126de576040516310fb47f160e31b815260040160405180910390fd5b5f816020013511612702576040516310eb483f60e21b815260040160405180910390fd5b61270f6020820182613a33565b925061271f6020820135856141f0565b93505060010161262c565b506f4b3b4ca85a86c47a098a223fffffffff82111561275c5760405163070b5a6f60e21b815260040160405180910390fd5b5092915050565b6040516001600160a01b038085166024830152831660448201526064810182905261131f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613597565b6033546001600160a01b031633146113d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611cfc565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561288a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ae9190613f56565b6113d657604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b612935612915828061444f565b6129256080850160608601613cc5565b6125a660a0860160808701613cc5565b5f816040013511612959576040516310eb483f60e21b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff8160400135111561298e5760405163070b5a6f60e21b815260040160405180910390fd5b6129be63ffffffff7f0000000000000000000000000000000000000000000000000000000000278d0016426141f0565b6129ce6080830160608401613cc5565b63ffffffff1611156113c157604051637ee2b44360e01b815260040160405180910390fd5b5f60ca612a036020850185613cc5565b63ffffffff1681548110612a1957612a19613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050612a798382612d99565b5f612a8a6080850160608601613a33565b6001600160a01b038082165f90815260cc60205260409020549192501680612aaf5750805b336001600160a01b03821614612ad857604051635c427cd960e01b815260040160405180910390fd5b5f5b612ae760a0870187614494565b9050811015611e3b5736612afe60e088018861444f565b83818110612b0e57612b0e613f71565b6001600160a01b0387165f90815260cd602090815260408083209302949094019450929091508290612b4290850185613a33565b6001600160a01b03166001600160a01b031681526020019081526020015f2054905080826020013511612b885760405163aa385e8160e01b815260040160405180910390fd5b5f612b97826020850135614228565b6001600160a01b0387165f90815260cd60209081526040822092935085018035929190612bc49087613a33565b6001600160a01b031681526020808201929092526040015f2091909155612c059089908390612bf590870187613a33565b6001600160a01b0316919061366a565b86516001600160a01b03808a1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce3190612c496020890189613a33565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101612ada565b5f816040015163ffffffff165f1480612cad5750815161ffff908116148015612cad5750816040015163ffffffff1642105b15612cc557505060cb54600160e01b900461ffff1690565b816040015163ffffffff16421015612cde57815161137a565b506020015190565b919050565b60605f612cf78361369a565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b806060015115612dbc57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff16421015612de757604051631437a2bb60e31b815260040160405180910390fd5b612df460c0830183614494565b9050612e0360a0840184614494565b905014612e23576040516343714afd60e01b815260040160405180910390fd5b612e3060e083018361444f565b9050612e3f60c0840184614494565b905014612e5f576040516343714afd60e01b815260040160405180910390fd5b8051612e8b90612e756040850160208601613cc5565b612e8260408601866144d9565b866060016136c1565b5f5b612e9a60a0840184614494565b90508110156110c057612f346080840135612eb860a0860186614494565b84818110612ec857612ec8613f71565b9050602002016020810190612edd9190613cc5565b612eea60c0870187614494565b85818110612efa57612efa613f71565b9050602002810190612f0c91906144d9565b612f1960e089018961444f565b87818110612f2957612f29613f71565b905060400201613765565b600101612e8d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb905f90a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b5f815f0151826020015163ffffffff1660405160200161303392919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261137a9061451b565b6001600160a01b038083165f81815260cc602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca3129190a4505050565b60cb546040805161ffff600160e01b9093048316815291831660208301527fe6cd4edfdcc1f6d130ab35f73d72378f3a642944fb4ee5bd84b7807a81ea1c4e910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b61271061ffff831611156131405760405163891c63df60e01b815260040160405180910390fd5b8254600160201b900463ffffffff16421161316e57604051637b1e25c560e01b815260040160405180910390fd5b8254600160201b900463ffffffff165f0361319557825461ffff191661ffff1783556131ac565b825462010000810461ffff1661ffff199091161783555b825463ffffffff909116600160201b0267ffffffff000000001961ffff90931662010000029290921667ffffffffffff00001990911617179055565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613244573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613268919061453e565b6001600160a01b0316336001600160a01b0316146113d65760405163794821ff60e01b815260040160405180910390fd5b826132b75760405163796cc52560e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000005c490063ffffffff168163ffffffff16111561330457604051630dd0b9f560e21b815260040160405180910390fd5b61332e7f00000000000000000000000000000000000000000000000000000000000151808261456d565b63ffffffff16156133525760405163ee66470560e01b815260040160405180910390fd5b5f8163ffffffff16116133785760405163cb3f434d60e01b815260040160405180910390fd5b6133a27f00000000000000000000000000000000000000000000000000000000000151808361456d565b63ffffffff16156133c657604051633c1a94f160e21b815260040160405180910390fd5b8163ffffffff167f000000000000000000000000000000000000000000000000000000000076a70063ffffffff16426133ff9190614228565b1115801561343957508163ffffffff167f0000000000000000000000000000000000000000000000000000000065fb788063ffffffff1611155b6134565760405163041aa75760e11b815260040160405180910390fd5b5f805b84811015611e3b575f86868381811061347457613474613f71565b61348a9260206040909202019081019150613a33565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063663c1de490602401602060405180830381865afa1580156134f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135179190613f56565b8061353e57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61355b57604051632efd965160e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03161061358d5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101613459565b5f6135eb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137a39092919063ffffffff16565b905080515f148061360b57508080602001905181019061360b9190613f56565b6110c05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611cfc565b6040516001600160a01b0383166024820152604481018290526110c090849063a9059cbb60e01b90606401612797565b5f60ff8216601f81111561137a57604051632cd44ac360e21b815260040160405180910390fd5b6136cc602083614594565b6001901b8463ffffffff16106136f45760405162c6c39d60e71b815260040160405180910390fd5b5f6136fe82610edf565b905061374884848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92508591505063ffffffff89166137b9565b611e3b576040516369ca16c960e01b815260040160405180910390fd5b613770602083614594565b6001901b8463ffffffff16106137995760405163054ff4df60e51b815260040160405180910390fd5b5f6136fe8261200a565b60606137b184845f856137ee565b949350505050565b5f836137d8576040516329e7276760e11b815260040160405180910390fd5b836137e48685856138c5565b1495945050505050565b60608247101561384f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611cfc565b5f5f866001600160a01b0316858760405161386a91906145a7565b5f6040518083038185875af1925050503d805f81146138a4576040519150601f19603f3d011682016040523d82523d5f602084013e6138a9565b606091505b50915091506138ba87838387613982565b979650505050505050565b5f83515f036138d5575081611718565b602084516138e391906145bd565b15613901576040516313717da960e21b815260040160405180910390fd5b8260205b85518111613962576139186002856145bd565b5f0361393957815f528086015160205260405f209150600284049350613950565b808601515f528160205260405f2091506002840493505b61395b6020826141f0565b9050613905565b5082156137b1576040516363df817160e01b815260040160405180910390fd5b606083156139f05782515f036139e9576001600160a01b0385163b6139e95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611cfc565b50816137b1565b6137b18383815115613a055781518083602001fd5b8060405162461bcd60e51b8152600401611cfc9190613c90565b6001600160a01b03811681146113c1575f5ffd5b5f60208284031215613a43575f5ffd5b813561171881613a1f565b5f60408284031215613a5e575f5ffd5b50919050565b5f5f83601f840112613a74575f5ffd5b5081356001600160401b03811115613a8a575f5ffd5b6020830191508360208260051b8501011115613aa4575f5ffd5b9250929050565b5f5f5f60608486031215613abd575f5ffd5b613ac78585613a4e565b925060408401356001600160401b03811115613ae1575f5ffd5b613aed86828701613a64565b9497909650939450505050565b80151581146113c1575f5ffd5b5f5f60408385031215613b18575f5ffd5b8235613b2381613a1f565b91506020830135613b3381613afa565b809150509250929050565b5f60208284031215613b4e575f5ffd5b5035919050565b5f60408284031215613b65575f5ffd5b6117188383613a4e565b5f5f60208385031215613b80575f5ffd5b82356001600160401b03811115613b95575f5ffd5b613ba185828601613a64565b90969095509350505050565b5f6101008284031215613a5e575f5ffd5b5f5f60408385031215613bcf575f5ffd5b82356001600160401b03811115613be4575f5ffd5b613bf085828601613bad565b9250506020830135613b3381613a1f565b803563ffffffff81168114612ce6575f5ffd5b5f5f60408385031215613c25575f5ffd5b82359150613c3560208401613c01565b90509250929050565b5f5f5f60408486031215613c50575f5ffd5b83356001600160401b03811115613c65575f5ffd5b613c7186828701613a64565b9094509250506020840135613c8581613a1f565b809150509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613cd5575f5ffd5b61171882613c01565b5f60208284031215613cee575f5ffd5b813560ff81168114611718575f5ffd5b5f60208284031215613d0e575f5ffd5b81356001600160401b03811115613d23575f5ffd5b6137b184828501613bad565b5f5f60408385031215613d40575f5ffd5b8235613d4b81613a1f565b946020939093013593505050565b5f5f60408385031215613d6a575f5ffd5b8235613d7581613a1f565b91506020830135613b3381613a1f565b5f5f5f60408486031215613d97575f5ffd5b8335613da281613a1f565b925060208401356001600160401b03811115613ae1575f5ffd5b5f5f60608385031215613dcd575f5ffd5b8235613dd881613a1f565b9150613c358460208501613a4e565b803561ffff81168114612ce6575f5ffd5b5f60208284031215613e08575f5ffd5b61171882613de7565b5f5f60408385031215613e22575f5ffd5b8235613e2d81613a1f565b9150613c3560208401613de7565b5f5f5f60608486031215613e4d575f5ffd5b8335613e5881613a1f565b92506020840135613e6881613a1f565b9150613e7660408501613de7565b90509250925092565b5f5f5f5f5f60a08688031215613e93575f5ffd5b8535613e9e81613a1f565b9450602086013593506040860135613eb581613a1f565b9250613ec360608701613c01565b9150613ed160808701613de7565b90509295509295909350565b5f5f5f60808486031215613eef575f5ffd5b8335613efa81613a1f565b9250613f098560208601613a4e565b9150613e7660608501613de7565b8035613f2281613a1f565b6001600160a01b0316825263ffffffff613f3e60208301613c01565b1660208301525050565b6040810161137a8284613f17565b5f60208284031215613f66575f5ffd5b815161171881613afa565b634e487b7160e01b5f52603260045260245ffd5b5f823560be19833603018112613f99575f5ffd5b9190910192915050565b5f5f8335601e19843603018112613fb8575f5ffd5b83016020810192503590506001600160401b03811115613fd6575f5ffd5b8060061b3603821315613aa4575f5ffd5b8183526020830192505f815f5b8481101561404a57813561400781613a1f565b6001600160a01b0316865260208201356bffffffffffffffffffffffff8116808214614031575f5ffd5b6020880152506040958601959190910190600101613ff4565b5093949350505050565b5f5f8335601e19843603018112614069575f5ffd5b83016020810192503590506001600160401b03811115614087575f5ffd5b803603821315613aa4575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f6140c88283613fa3565b60c085526140da60c086018284613fe7565b91505060208301356140eb81613a1f565b6001600160a01b031660208501526141066040840184613fa3565b858303604087015280835290915f91906020015b8183101561415557833561412d81613a1f565b6001600160a01b0316815260208481013590820152604093840193600193909301920161411a565b61416160608701613c01565b63ffffffff81166060890152935061417b60808701613c01565b63ffffffff81166080890152935061419660a0870187614054565b9450925086810360a08801526138ba818585614095565b60018060a01b0384168152826020820152606060408201525f6141d360608301846140bd565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561137a5761137a6141dc565b61420d8185613f17565b826040820152608060608201525f6141d360808301846140bd565b8181038181111561137a5761137a6141dc565b5f81614249576142496141dc565b505f190190565b5f8235609e19833603018112613f99575f5ffd5b5f61426f8283613fa3565b60a0855261428160a086018284613fe7565b915050602083013561429281613a1f565b6001600160a01b031660208501526040838101359085015263ffffffff6142bb60608501613c01565b16606085015263ffffffff6142d260808501613c01565b1660808501528091505092915050565b60018060a01b0384168152826020820152606060408201525f6141d36060830184614264565b602081525f6117186020830184614264565b63ffffffff818116838216019081111561137a5761137a6141dc565b5f823560fe19833603018112613f99575f5ffd5b828152604060208201525f6137b160408301846140bd565b5f6040828403128015614373575f5ffd5b50604080519081016001600160401b03811182821017156143a257634e487b7160e01b5f52604160045260245ffd5b60405282356143b081613a1f565b81526143be60208401613c01565b60208201529392505050565b63ffffffff828116828216039081111561137a5761137a6141dc565b5f63ffffffff8216806143fb576143fb6141dc565b5f190192915050565b5f60208284031215614414575f5ffd5b5051919050565b60a081016144298287613f17565b63ffffffff94909416604082015261ffff92831660608201529116608090910152919050565b5f5f8335601e19843603018112614464575f5ffd5b8301803591506001600160401b0382111561447d575f5ffd5b6020019150600681901b3603821315613aa4575f5ffd5b5f5f8335601e198436030181126144a9575f5ffd5b8301803591506001600160401b038211156144c2575f5ffd5b6020019150600581901b3603821315613aa4575f5ffd5b5f5f8335601e198436030181126144ee575f5ffd5b8301803591506001600160401b03821115614507575f5ffd5b602001915036819003821315613aa4575f5ffd5b80516020808301519190811015613a5e575f1960209190910360031b1b16919050565b5f6020828403121561454e575f5ffd5b815161171881613a1f565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff83168061458257614582614559565b8063ffffffff84160691505092915050565b5f826145a2576145a2614559565b500490565b5f82518060208501845e5f920191825250919050565b5f826145cb576145cb614559565b50069056fea26469706673582212209764e0fe3693a179c5f7a81fc907220c85c1a49189bc26fd152ee3a6c5a36b1e64736f6c634300081c0033000000000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "20": { - "address": "0x00000000219ab540356cBB839Cbe05303d7705Fa", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033000000000000000000", - "storage": { - "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c" - } - }, - "9": { - "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707", - "code": "0x735fc8d32690cc91d4c39d9d3abcbd16989f875707301460806040526004361061006b575f3560e01c8063017b73111461006f578063253946451461009057806365529675146100af5780638257f3d5146100ce578063ae8a4d98146100ed578063fe1aa59d1461010c575b5f5ffd5b81801561007a575f5ffd5b5061008e61008936600461080c565b61012b565b005b81801561009b575f5ffd5b5061008e6100aa36600461080c565b610155565b8180156100ba575f5ffd5b5061008e6100c9366004610860565b6101db565b8180156100d9575f5ffd5b5061008e6100e836600461080c565b610267565b8180156100f8575f5ffd5b5061008e61010736600461080c565b6102f8565b818015610117575f5ffd5b5061008e6101263660046108ae565b610328565b5f610138828401846109a7565b9050610150815f0151826020015183604001516103a5565b505050565b5f61016282840184610a68565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c73936101aa9390929091600401610b1b565b5f6040518083038186803b1580156101c0575f5ffd5b505af41580156101d2573d5f5f3e3d5ffd5b50505050505050565b5f6101e882840184610b4a565b90505f6102147f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79610414565b82519091506001600160a01b0316610248576102438582846020015185604001516001600160801b031661046c565b610260565b6102608582845f0151856020015186604001516104c9565b5050505050565b5f61027482840184610b7b565b80517e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab805492935091829060ff1916600183818111156102b5576102b5610bc9565b021790555081516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916102ea91610bdd565b60405180910390a150505050565b5f61030582840184610c03565b9050610322815f015182602001518360400151846060015161052e565b50505050565b5f61033582840184610cbd565b90505f61034186610414565b90505f825f01518360200151846040015160405160240161036493929190610d45565b60408051601f198184030181529190526020810180516001600160e01b031663c6b295c160e01b179052905061039b828783610679565b5050505050505050565b5f6103af84610705565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610402575f5ffd5b505af115801561039b573d5f5f3e3d5ffd5b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806104675760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506104c1848683610679565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506101d2858783610679565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156105a457604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516105b4906107bb565b6105c093929190610d78565b604051809103905ff0801580156105d9573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016106ab929190610db0565b5f604051808303815f875af11580156106c6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106ed9190810190610ddb565b915091506106fb8282610796565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b031661077a5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156107a55750806107b5565b81511561006b5781518083602001fd5b92915050565b610c3580610e6883390190565b5f5f83601f8401126107d8575f5ffd5b5081356001600160401b038111156107ee575f5ffd5b602083019150836020828501011115610805575f5ffd5b9250929050565b5f5f6020838503121561081d575f5ffd5b82356001600160401b03811115610832575f5ffd5b61083e858286016107c8565b90969095509350505050565b80356001600160a01b0381168114610467575f5ffd5b5f5f5f60408486031215610872575f5ffd5b61087b8461084a565b925060208401356001600160401b03811115610895575f5ffd5b6108a1868287016107c8565b9497909650939450505050565b5f5f5f5f606085870312156108c1575f5ffd5b843593506108d16020860161084a565b925060408501356001600160401b038111156108eb575f5ffd5b6108f7878288016107c8565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561093957610939610903565b60405290565b604051608081016001600160401b038111828210171561093957610939610903565b604051601f8201601f191681016001600160401b038111828210171561098957610989610903565b604052919050565b80356001600160801b0381168114610467575f5ffd5b5f60608284031280156109b8575f5ffd5b506109c1610917565b823581526109d16020840161084a565b60208201526109e260408401610991565b60408201529392505050565b5f6001600160401b03821115610a0657610a06610903565b50601f01601f191660200190565b5f82601f830112610a23575f5ffd5b8135602083015f610a3b610a36846109ee565b610961565b9050828152858383011115610a4e575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610a78575f5ffd5b81356001600160401b03811115610a8d575f5ffd5b820160608185031215610a9e575f5ffd5b610aa6610917565b610aaf8261084a565b81526020828101359082015260408201356001600160401b03811115610ad3575f5ffd5b610adf86828501610a14565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610b416060830184610aed565b95945050505050565b5f6060828403128015610b5b575f5ffd5b50610b64610917565b610b6d8361084a565b81526109d16020840161084a565b5f6020828403128015610b8c575f5ffd5b50604051602081016001600160401b0381118282101715610baf57610baf610903565b604052823560028110610bc0575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610bfd57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610c13575f5ffd5b81356001600160401b03811115610c28575f5ffd5b820160808185031215610c39575f5ffd5b610c4161093f565b8135815260208201356001600160401b03811115610c5d575f5ffd5b610c6986828501610a14565b60208301525060408201356001600160401b03811115610c87575f5ffd5b610c9386828501610a14565b6040830152506060820135915060ff82168214610cae575f5ffd5b60608101919091529392505050565b5f60208284031215610ccd575f5ffd5b81356001600160401b03811115610ce2575f5ffd5b820160608185031215610cf3575f5ffd5b610cfb610917565b610d048261084a565b815260208201356001600160401b03811115610d1e575f5ffd5b610d2a86828501610a14565b60208301525060408201356040820152809250505092915050565b6001600160a01b03841681526060602082018190525f90610d6890830185610aed565b9050826040830152949350505050565b606081525f610d8a6060830186610aed565b8281036020840152610d9c8186610aed565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f90610dd390830184610aed565b949350505050565b5f5f60408385031215610dec575f5ffd5b82518015158114610dfb575f5ffd5b60208401519092506001600160401b03811115610e16575f5ffd5b8301601f81018513610e26575f5ffd5b8051610e34610a36826109ee565b818152866020838501011115610e48575f5ffd5b8160208401602083015e5f60208383010152809350505050925092905056fe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea2646970667358221220e1f5b5d05dc7259c2004ce8b2365485a31341d166e578c6bed74cf416d43d0b864736f6c634300081c0033a2646970667358221220bf51267d76cff7222c17d610dde7751957cfe3a183e053d0666ff0994eb90d2f64736f6c634300081c0033000000000000000000", - "storage": {} - }, - "21": { - "address": "0x0000F90827F1C53a10cb7A02335B175320002935", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604657602036036042575f35600143038111604257611fff81430311604257611fff9006545f5260205ff35b5f5ffd5b5f35611fff60014303065500", - "storage": { - "0x000000000000000000000000000000000000000000000000000000000000000d": "0xe73822006198c85fb6a6dc8196e1fe5debfd7f55a717f4d11042a67f86627bba", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x371aa858bb9f711ff9e1e138f9d9f013b23eaa3c033ef26a20a49a51a1063804", - "0x0000000000000000000000000000000000000000000000000000000000000036": "0xc1b5d7dbd9c0d1a95f199799561cea876ed30d0973c6ae916457d78aa9f334b1", - "0x0000000000000000000000000000000000000000000000000000000000000010": "0xb1090ff6161aa7f59def7d8f22aea5e5e2b06db6d6a58090adbe85a52dcb941b", - "0x000000000000000000000000000000000000000000000000000000000000001b": "0xe8d6b39126dee91d724b9e41f026f410de832d0093b33c7f0ab3959066b0f2c7", - "0x0000000000000000000000000000000000000000000000000000000000000025": "0x4e74fc11fade3257fc84098010ae64fe2bec9a742824ba1b6a01a9632588f949", - "0x0000000000000000000000000000000000000000000000000000000000000035": "0x98317d0a7544ad00bd882b1204724c80d1f8a4501caeb995b80dbfdb7ff0b125", - "0x0000000000000000000000000000000000000000000000000000000000000019": "0x52c84a81729da29a52a908b2843d9159629410c679102fd0a0ba331d07871e53", - "0x0000000000000000000000000000000000000000000000000000000000000021": "0xd1feb845328d35c38982d599f6e9c8045e910917ba47a46ed047586909ac89c5", - "0x000000000000000000000000000000000000000000000000000000000000001c": "0x8df4b2c0588cc44866d40ac8f0a43ad280f90a5e1f2756b048083eabf7792ef7", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0x56fa22139b49a8298f136d6c2feaec4538078619080efbf1ac0fb1d0e514d50a", - "0x0000000000000000000000000000000000000000000000000000000000000031": "0x544b8dcf43013c29f65e64fe24bf2ec423362e5d356280e66ade493891b08393", - "0x000000000000000000000000000000000000000000000000000000000000002c": "0x33747f7c46edaf49f536d2ef803e20a391e7752db65d401b95ce2298970b19c2", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0xcc0e01381bcb7248a75dd9f9db656523fafb24ee07c6eb19120f6ac9001d15ec", - "0x0000000000000000000000000000000000000000000000000000000000000011": "0x422a45d7f581efa6995d9b5866363b99f3d9570053337f1c9c5fad321dd7ff14", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0x9a6c3ad1978048381dbc6b8280efa8d02c7c4ba152c5bc4d335c2ce0c6b01ca9", - "0x000000000000000000000000000000000000000000000000000000000000002a": "0x0215ec4c6b6cbaa921a581fa2aa19194e3ad3ee4737d7ed662ca60fdafee0c1e", - "0x000000000000000000000000000000000000000000000000000000000000003a": "0xeedb00549a401d4aad8db31128220c2fc9a91bd146506ce92377045cd9564177", - "0x000000000000000000000000000000000000000000000000000000000000002d": "0x56680f5ee7498b1a7bb6c4b3b4e2a2e8c6668ef9ca5f606f04932ecc8f67286b", - "0x0000000000000000000000000000000000000000000000000000000000000016": "0xb774bc7c9f690e323f068817a5af52585a5abc361fed7cf323879c109013a396", - "0x0000000000000000000000000000000000000000000000000000000000000015": "0x9dff30d8e9d92bd9930d76e334a53453fe797df1d954f0e6c8fc29d928a49b7c", - "0x0000000000000000000000000000000000000000000000000000000000000020": "0x83636e2feb63263a17579a40b8e22d62612d50a93998e6f69707fa3c8265a31d", - "0x0000000000000000000000000000000000000000000000000000000000000026": "0x32ce90099140b4cdd3f34255ffda66f64cce97a4fcf6593d0aaf88050f7c664f", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x6fa363df43981d6c96b8b989c6e9d2c789665d2aba9730c1ed903932b4125055", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0xe195d8c162daa441e081103b5f9a44d64b6d23d9dd87abe031d5f7aa9dc5a02b", - "0x0000000000000000000000000000000000000000000000000000000000000029": "0x8448796a422749338fd95bfee6cb7566e80a6971467f2f8b9c99dc094c1b280b", - "0x0000000000000000000000000000000000000000000000000000000000000013": "0xbca91f2e7cd79df52fac75ba84afc6c77fd5cfc6ecf3f72a1fcc2c62b5c73a72", - "0x000000000000000000000000000000000000000000000000000000000000001f": "0x3a074bcb0b1bd3d399d6f01c71f2a3fa6bc754a3530e6c948b71e9bf1fc0dd4b", - "0x0000000000000000000000000000000000000000000000000000000000000022": "0x3876bf109916e536ca088b1a30696c212afa76dd73057b12efc17c9ab8b4594b", - "0x0000000000000000000000000000000000000000000000000000000000000014": "0x0e754ec8589dcab232bc836cf564b8074b2984573149fde86609de09c0442d74", - "0x000000000000000000000000000000000000000000000000000000000000001a": "0xdcd02c83309813c8eae5b3ff7bd56e36fd9d0c81f2bb0ccdc03c71c02e579a7a", - "0x000000000000000000000000000000000000000000000000000000000000002f": "0x49fa358e64bcf30789b9d5fd2b440288652a4810a6866d97f8b50abc60e20f51", - "0x0000000000000000000000000000000000000000000000000000000000000027": "0xb9a38f0e0269e866e1fa5c4061e069653d4661d187322f42021853fc49312be3", - "0x000000000000000000000000000000000000000000000000000000000000003b": "0x7b79a46e605a5894c77cd1457747d232c3ad4072270d4920ce4ef4644415df67", - "0x000000000000000000000000000000000000000000000000000000000000002e": "0x28a825651acb67e195b1ef4bf1009b8021780c8bd92e7c8e07a315b7352f6434", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0xa8ce639a02df8daea952c193487200ba36987483ad219c045e843ca55b648b14", - "0x0000000000000000000000000000000000000000000000000000000000000024": "0x8b26f39beeefb2538a72566e4d48ba6181b0722b23192ef3db1f2a20275ec973", - "0x000000000000000000000000000000000000000000000000000000000000000e": "0xa3aa5aabc7e17c0fcccefc023fbe40668ce67b367ac2d83fa5e0c2fedb521a30", - "0x000000000000000000000000000000000000000000000000000000000000000c": "0x8924e2073be38b08463ab170aa55c5f43f5e47e84f686c6118b923af537e73dc", - "0x000000000000000000000000000000000000000000000000000000000000000b": "0xd90803e9d5554878a2fff3089ec9276ef54b8011ab569074e1260f423d414506", - "0x000000000000000000000000000000000000000000000000000000000000002b": "0x16ef00848af6e19ffac7a3dc1df05fe16399c5f3d440efeb4c4637690d08ac46", - "0x0000000000000000000000000000000000000000000000000000000000000009": "0xb24ed8da68398e53ca5c8ed2d58300a75f4f6105da846cba74845e438f49ec07", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0xf2a46b2c35110f1ea94add31290d0175bf2a7f3da2bb08fce4e80b93f0d6681f", - "0x0000000000000000000000000000000000000000000000000000000000000028": "0xc69af6dae337482fc91c7cf02d5c46e5a965dbee502dc8681a83ec8305c39e5f", - "0x000000000000000000000000000000000000000000000000000000000000000f": "0x2fb05e3e52ba0048858dd3f4af6e11a9587320baab73c717f276786dc433e036", - "0x0000000000000000000000000000000000000000000000000000000000000030": "0xe2ff0082462fae7fd51d0d21a84d2a261b3f2d69968357209809f4ef6cb93d1c", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0xa56f94202e573f81cb27e022768a5c358ffd98f64d7452c46d36a3022cec8021", - "0x0000000000000000000000000000000000000000000000000000000000000017": "0xa7949f70dfc5564ca96a7e2f65017784c1b2491e2abe7788e535fe2fd38e77ff", - "0x0000000000000000000000000000000000000000000000000000000000000023": "0xc868917c118b83881d2c1441a4b4477efeb65f8f39cc96c82358a57625a9c6ad", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x7a255cf524ac99f0e93948ac4930481208661a2630619833cb635094b9019ee8", - "0x000000000000000000000000000000000000000000000000000000000000001d": "0xaac7ffc38774ec84bed0804d135b5b4aeffbdf68491f6cfa6c3a6f14fbe46080", - "0x000000000000000000000000000000000000000000000000000000000000001e": "0xe3de053c007736c3ef8a0de121ea640327a354ad3ba486e7245ec77671ebde30", - "0x0000000000000000000000000000000000000000000000000000000000000038": "0xeaf3b61df5b8fc63d805f7161a90e0d94b38195094c9dc67d250fca2ddf3ed3b", - "0x0000000000000000000000000000000000000000000000000000000000000039": "0xefa4b840e5f01d6b5432081bbc722eec853abd73eaf6957bc2723ab91966abb2", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0xf16d388b645c7aef03e230cecbc577d820bbc099024613a3f13f5a521a3171ed", - "0x000000000000000000000000000000000000000000000000000000000000000a": "0x90ae411e77463167e107deaf3b3848721490b130c32cf86d33b18b40f1bda627", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x6dc2765feacde6130370114ead2c2675e1f6d2687f5c69b89bc63dd5294df866", - "0x0000000000000000000000000000000000000000000000000000000000000018": "0x260be45a9217b5de2b07894e149bd8d591a3b516ce6f221c0345ca54ff60f132", - "0x0000000000000000000000000000000000000000000000000000000000000007": "0x79afbc506198f442d970f21f7321f1f65ee1eea4403eac035b95e30cf200faba", - "0x0000000000000000000000000000000000000000000000000000000000000012": "0x9e4078007e363592f68626b51746a51ba54a0372eae2708f6761553002beb262" - } - }, - "29": { - "address": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x00000000000000000000000014dc79964da2c08b23698b3d3cc7ca32193d9955", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000067": "0x0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688", - "0x000000000000000000000000000000000000000000000000000000000000006a": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b570" - } - }, - "35": { - "address": "0xdf077F5F72071dF6e8B0a78071E496bA17b5Ee0c", - "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b7981565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", - "storage": {} - }, - "15": { - "address": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", - "code": "0x608060405260043610610079575f3560e01c80639623609d1161004c5780639623609d1461010957806399a88ec41461011c578063f2fde38b1461013b578063f3b7dead1461015a575f5ffd5b8063204e1c7a1461007d578063715018a6146100b85780637eff275e146100ce5780638da5cb5b146100ed575b5f5ffd5b348015610088575f5ffd5b5061009c610097366004610479565b610179565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c3575f5ffd5b506100cc610204565b005b3480156100d9575f5ffd5b506100cc6100e836600461049b565b610217565b3480156100f8575f5ffd5b505f546001600160a01b031661009c565b6100cc6101173660046104e6565b61027a565b348015610127575f5ffd5b506100cc61013636600461049b565b6102e5565b348015610146575f5ffd5b506100cc610155366004610479565b61031b565b348015610165575f5ffd5b5061009c610174366004610479565b610399565b5f5f5f836001600160a01b031660405161019d90635c60da1b60e01b815260040190565b5f60405180830381855afa9150503d805f81146101d5576040519150601f19603f3d011682016040523d82523d5f602084013e6101da565b606091505b5091509150816101e8575f5ffd5b808060200190518101906101fc91906105bd565b949350505050565b61020c6103bd565b6102155f610416565b565b61021f6103bd565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b5f604051808303815f87803b158015610260575f5ffd5b505af1158015610272573d5f5f3e3d5ffd5b505050505050565b6102826103bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102b290869086906004016105d8565b5f604051808303818588803b1580156102c9575f5ffd5b505af11580156102db573d5f5f3e3d5ffd5b5050505050505050565b6102ed6103bd565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe690602401610249565b6103236103bd565b6001600160a01b03811661038d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61039681610416565b50565b5f5f5f836001600160a01b031660405161019d906303e1469160e61b815260040190565b5f546001600160a01b031633146102155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114610396575f5ffd5b5f60208284031215610489575f5ffd5b813561049481610465565b9392505050565b5f5f604083850312156104ac575f5ffd5b82356104b781610465565b915060208301356104c781610465565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156104f8575f5ffd5b833561050381610465565b9250602084013561051381610465565b9150604084013567ffffffffffffffff81111561052e575f5ffd5b8401601f8101861361053e575f5ffd5b803567ffffffffffffffff811115610558576105586104d2565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610587576105876104d2565b60405281815282820160200188101561059e575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f602082840312156105cd575f5ffd5b815161049481610465565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f830116840101915050939250505056fea2646970667358221220d1857c1d79adf09a4456300c200565d4db0d5bcc151c34d3d6a7ed403fb9defd64736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65" - } - }, - "25": { - "address": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000004a679253410272dd5232b3ff7cf5dbb88f295319" - } - }, - "37": { - "address": "0x59b670e9fA9D0A427751Af201D676719a970857b", - "code": "0x6080604052600436106101bd575f3560e01c80636691954e116100f2578063b522538a11610092578063d06d558711610062578063d06d55871461063f578063dda3346c1461065e578063ee94d67c1461067d578063f074ba621461069c575f5ffd5b8063b522538a146105ce578063c44e30dc146105ed578063c490744214610601578063c4d66de814610620575f5ffd5b80637439841f116100cd5780637439841f1461053457806374cdd7981461056957806388676cad1461059c5780639b4e4634146105bb575f5ffd5b80636691954e146104d65780636c0d2d5a146104e95780636fcd0e5314610508575f5ffd5b806342ecff2a1161015d57806352396a591161013857806352396a591461043657806354fd4d501461046a578063587533571461048b57806358eaee79146104aa575f5ffd5b806342ecff2a146102f25780634665bcda1461031857806347d283721461034b575f5ffd5b80632340e8d3116101985780632340e8d31461027a5780633474aa161461028f5780633f5fa57a146102c05780633f65cf19146102d3575f5ffd5b8063039157d2146101fb5780630b18ff661461021c5780631e51553314610258575f5ffd5b366101f7576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b5f5ffd5b348015610206575f5ffd5b5061021a610215366004613a3e565b6106bb565b005b348015610227575f5ffd5b5060335461023b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610263575f5ffd5b5061026c6109f0565b60405190815260200161024f565b348015610285575f5ffd5b5061026c60395481565b34801561029a575f5ffd5b506034546001600160401b03165b6040516001600160401b03909116815260200161024f565b61021a6102ce366004613af9565b610a11565b3480156102de575f5ffd5b5061021a6102ed366004613b37565b610d49565b3480156102fd575f5ffd5b50603a546102a890600160401b90046001600160401b031681565b348015610323575f5ffd5b5061023b7f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b181565b348015610356575f5ffd5b506103db6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b9004909116608082015290565b60405161024f91905f60a0820190508251825262ffffff60208401511660208301526001600160401b036040840151166040830152606083015160070b60608301526001600160401b03608084015116608083015292915050565b348015610441575f5ffd5b506102a8610450366004613c0e565b603b6020525f90815260409020546001600160401b031681565b348015610475575f5ffd5b5061047e610fd2565b60405161024f9190613c57565b348015610496575f5ffd5b50603e5461023b906001600160a01b031681565b3480156104b5575f5ffd5b506104c96104c4366004613ca6565b610ffd565b60405161024f9190613d0c565b61021a6104e4366004613af9565b61105f565b3480156104f4575f5ffd5b5061026c610503366004613c0e565b611361565b348015610513575f5ffd5b50610527610522366004613d1a565b61146f565b60405161024f9190613d31565b34801561053f575f5ffd5b506104c961054e366004613d1a565b5f90815260366020526040902054600160c01b900460ff1690565b348015610574575f5ffd5b5061023b7f000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e14181565b3480156105a7575f5ffd5b5061021a6105b6366004613d91565b61151a565b61021a6105c9366004613dac565b61160f565b3480156105d9575f5ffd5b506105276105e8366004613ca6565b61178d565b3480156105f8575f5ffd5b5061026c61187c565b34801561060c575f5ffd5b5061021a61061b366004613e41565b611898565b34801561062b575f5ffd5b5061021a61063a366004613e6b565b6119cf565b34801561064a575f5ffd5b5061021a610659366004613e6b565b611b19565b348015610669575f5ffd5b5061021a610678366004613f56565b611bad565b348015610688575f5ffd5b50603a546102a8906001600160401b031681565b3480156106a7575f5ffd5b5061021a6106b6366004614028565b611d0c565b604051635ac86ab760e01b8152600660048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa158015610721573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610745919061408f565b156107635760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ed919061408f565b1561080b5760405163840a48d560e01b815260040160405180910390fd5b5f61084f61081985806140aa565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061210892505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156108bd576108bd613cd8565b60028111156108ce576108ce613cd8565b81525050905080604001516001600160401b0316876001600160401b03161161090a576040516337e07ffd60e01b815260040160405180910390fd5b60018160600151600281111561092257610922613cd8565b146109405760405163d49e19a760e01b815260040160405180910390fd5b61098361094d86806140aa565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061212a92505050565b6109a05760405163161ce5ed60e31b815260040160405180910390fd5b6109b26109ac88611361565b87612152565b6109de6109be886121f7565b87356109ca88806140aa565b6109d760208b018b6140ef565b87516122ce565b6109e75f612402565b50505050505050565b5f610a0c71bbddc7ce488642fb579f8b00f3a590007251612582565b905090565b604051635ac86ab760e01b8152600a60048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa158015610a77573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9b919061408f565b15610ab95760405163840a48d560e01b815260040160405180910390fd5b6033546001600160a01b0316331480610adc5750603e546001600160a01b031633145b610af95760405163427a777960e01b815260040160405180910390fd5b5f610b0261187c565b90505f610b0f8483614145565b905080341015610b325760405163356680b760e01b815260040160405180910390fd5b5f610b3d823461415c565b90505f5b85811015610d305736878783818110610b5c57610b5c61416f565b9050602002810190610b6e9190614183565b90505f610bb7610b7e83806140ef565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061260892505050565b90505f610bc483806140ef565b610bd46040860160208701613c0e565b604051602001610be6939291906141a1565b60405160208183030381529060405290505f710961ef480eb55e80d19ad83579a64c0070026001600160a01b03168883604051610c2391906141d9565b5f6040518083038185875af1925050503d805f8114610c5d576040519150601f19603f3d011682016040523d82523d5f602084013e610c62565b606091505b5050905080610c845760405163fc52d48360e01b815260040160405180910390fd5b610c946040850160208601613c0e565b6001600160401b03165f03610cd25760405183907f60d8ca014d4765a2b8b389e25714cb1cef83b574222911a01d90c1bd69d2d320905f90a2610d20565b827f8b2737bb64ab2f2dc09552dfa1c250399e6a42c7ea9f0e1c658f5d65d708ec05610d046040870160208801613c0e565b6040516001600160401b03909116815260200160405180910390a25b505060019092019150610b419050565b508015610d4157610d413382612699565b505050505050565b6033546001600160a01b0316331480610d6c5750603e546001600160a01b031633145b610d895760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa158015610def573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e13919061408f565b15610e315760405163840a48d560e01b815260040160405180910390fd5b8584148015610e3f57508382145b610e5c576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610e92576040516337e07ffd60e01b815260040160405180910390fd5b610ea4610e9e8a611361565b89612152565b5f805b87811015610f3d57610f298b8b358b8b85818110610ec757610ec761416f565b9050602002016020810190610edc91906141e4565b8a8a86818110610eee57610eee61416f565b9050602002810190610f0091906140ef565b8a8a88818110610f1257610f1261416f565b9050602002810190610f2491906140aa565b6127ae565b610f339083614208565b9150600101610ea7565b5060335460405163a1ca780b60e01b81526001600160a01b0391821660048201525f6024820152604481018390527f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a1ca780b906064015f604051808303815f87803b158015610fb0575f5ffd5b505af1158015610fc2573d5f5f3e3d5ffd5b5050505050505050505050505050565b6060610a0c7f76312e302e300000000000000000000000000000000000000000000000000006612caf565b5f5f61103d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061260892505050565b5f90815260366020526040902054600160c01b900460ff169150505b92915050565b604051635ac86ab760e01b8152600960048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa1580156110c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e9919061408f565b156111075760405163840a48d560e01b815260040160405180910390fd5b6033546001600160a01b031633148061112a5750603e546001600160a01b031633145b6111475760405163427a777960e01b815260040160405180910390fd5b5f6111506109f0565b90505f61115d8483614145565b9050803410156111805760405163356680b760e01b815260040160405180910390fd5b5f61118b823461415c565b90505f5b85811015610d3057368787838181106111aa576111aa61416f565b90506020028101906111bc9190614183565b90505f6111cc610b7e83806140ef565b90505f6111df610b7e60208501856140ef565b90505f6111eb8261146f565b905060018160600151600281111561120557611205613cd8565b146112235760405163d49e19a760e01b815260040160405180910390fd5b5f61122e85806140ef565b61123b60208801886140ef565b60405160200161124e949392919061421b565b60405160208183030381529060405290505f71bbddc7ce488642fb579f8b00f3a5900072516001600160a01b03168a8360405161128b91906141d9565b5f6040518083038185875af1925050503d805f81146112c5576040519150601f19603f3d011682016040523d82523d5f602084013e6112ca565b606091505b50509050806112ec5760405163fc52d48360e01b815260040160405180910390fd5b8385036113225760405185907fc97b965b92ae7fd20095fe8eb7b99f81f95f8c4adffb22a19116d8eb2846b016905f90a261134f565b604051849086907f42f9c9db2ca443e9ec62f4588bd0c9b241065c02c2a8001ac164ae1282dc7b94905f90a35b50506001909401935061118f92505050565b5f61136f611fff600c614145565b6113826001600160401b0384164261415c565b106113a057604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201525f918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f19818403018152908290526113e7916141d9565b5f60405180830381855afa9150503d805f811461141f576040519150601f19603f3d011682016040523d82523d5f602084013e611424565b606091505b509150915081801561143657505f8151115b6114535760405163558ad0a360e01b815260040160405180910390fd5b80806020019051810190611467919061423a565b949350505050565b611496604080516080810182525f8082526020820181905291810182905290606082015290565b5f82815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff16600281111561150057611500613cd8565b600281111561151157611511613cd8565b90525092915050565b6033546001600160a01b031633148061153d5750603e546001600160a01b031633145b61155a5760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa1580156115c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e4919061408f565b156116025760405163840a48d560e01b815260040160405180910390fd5b61160b82612402565b5050565b336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1161461165857604051633213a66160e21b815260040160405180910390fd5b346801bc16d674ec800000146116815760405163049696b360e31b815260040160405180910390fd5b7f000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e1416001600160a01b031663228951186801bc16d674ec80000087876116c4612cec565b8888886040518863ffffffff1660e01b81526004016116e896959493929190614279565b5f604051808303818588803b1580156116ff575f5ffd5b505af1158015611711573d5f5f3e3d5ffd5b50505050507fa01003766d3cd97cf2ade5429690bf5d206be7fb01ef9d3a0089ecf67bc1121961177586868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061260892505050565b60405190815260200160405180910390a15050505050565b6117b4604080516080810182525f8082526020820181905291810182905290606082015290565b60365f6117f585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061260892505050565b815260208082019290925260409081015f20815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561186157611861613cd8565b600281111561187257611872613cd8565b9052509392505050565b5f610a0c710961ef480eb55e80d19ad83579a64c007002612582565b336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b116146118e157604051633213a66160e21b815260040160405180910390fd5b5f6118f0633b9aca00836142db565b9050611909633b9aca006001600160401b038316614145565b6034549092506001600160401b03908116908216111561193c576040516302c6f54760e21b815260040160405180910390fd5b603480548291905f906119599084906001600160401b03166142ee565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e836040516119b891815260200190565b60405180910390a26119ca8383612699565b505050565b5f54610100900460ff16158080156119ed57505f54600160ff909116105b80611a065750303b158015611a0657505f5460ff166001145b611a6e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611a8f575f805461ff0019166101001790555b6001600160a01b038216611ab6576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b038416179055801561160b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b03163314611b445760405163719f370360e11b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314611bd85760405163719f370360e11b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa158015611c3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c62919061408f565b15611c805760405163840a48d560e01b815260040160405180910390fd5b8251845114611ca2576040516343714afd60e01b815260040160405180910390fd5b5f5b8451811015611d0557611cfd83858381518110611cc357611cc361416f565b6020026020010151878481518110611cdd57611cdd61416f565b60200260200101516001600160a01b0316612d1c9092919063ffffffff16565b600101611ca4565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b031690635ac86ab790602401602060405180830381865afa158015611d72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d96919061408f565b15611db45760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b03165f819003611de857604051631a544f4960e01b815260040160405180910390fd5b6040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b90049091166080820152611e4f611e47836121f7565b825188612d6e565b5f805b858110156120af5736878783818110611e6d57611e6d61416f565b9050602002810190611e7f919061430d565b80355f908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611eef57611eef613cd8565b6002811115611f0057611f00613cd8565b9052509050600181606001516002811115611f1d57611f1d613cd8565b14611f295750506120a7565b856001600160401b031681604001516001600160401b031610611f4d5750506120a7565b5f8080611f5d848a8f3588612e2f565b60208b0180519396509194509250611f7482614321565b62ffffff16905250608088018051849190611f9090839061433e565b6001600160401b0316905250606088018051839190611fb090839061435d565b60070b905250611fc0818861433e565b85355f908152603660209081526040918290208751815492890151938901516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060880151939a50879390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b83600281111561206457612064613cd8565b021790555050604051863591506001600160401b038b16907fe4866335761a51dcaff766448ab0af6064291ee5dc94e68492bb9cd757c1e350905f90a350505050505b600101611e52565b506001600160401b038084165f908152603b60205260408120805484939192916120db9185911661433e565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506109e782612f45565b5f815f8151811061211b5761211b61416f565b60200260200101519050919050565b5f8160038151811061213e5761213e61416f565b60200260200101515f5f1b14159050919050565b61215e60036020614145565b61216b60208301836140ef565b90501461218b576040516313717da960e21b815260040160405180910390fd5b6121da61219b60208301836140ef565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525086925050843590506003613165565b61160b576040516309bde33960e01b815260040160405180910390fd5b5f5f7f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b16001600160a01b0316632704351a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612255573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612279919061438c565b9050806001600160401b03165f036122a4576040516341a02cc960e01b815260040160405180910390fd5b806001600160401b0316836001600160401b031611156122c55760016122c7565b5f5b9392505050565b600884146122ef5760405163200591bd60e01b815260040160405180910390fd5b5f6122f98861319a565b90508061230860286001614208565b6123129190614208565b61231d906020614145565b831461233c576040516313717da960e21b815260040160405180910390fd5b5f6123788787808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506131c292505050565b90505f64ffffffffff841661238f60286001614208565b600b901b1790506123d986868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508d9250869150859050613165565b6123f6576040516309bde33960e01b815260040160405180910390fd5b50505050505050505050565b603a54600160401b90046001600160401b0316156124325760405162be9bc360e81b815260040160405180910390fd5b603a546001600160401b03428116911603612460576040516367db5b8b60e01b815260040160405180910390fd5b6034545f906001600160401b031661247c633b9aca00476142db565b61248691906142ee565b905081801561249c57506001600160401b038116155b156124ba576040516332dea95960e21b815260040160405180910390fd5b5f6040518060a001604052806124cf42611361565b815260395462ffffff1660208201526001600160401b0380851660408301525f60608301819052608090920191909152603a805442909216600160401b026fffffffffffffffff000000000000000019909216919091179055905061253381612f45565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b5f5f5f836001600160a01b03166040515f60405180830381855afa9150503d805f81146125ca576040519150601f19603f3d011682016040523d82523d5f602084013e6125cf565b606091505b50915091508180156125e2575080516020145b6125ff5760405163c90158af60e01b815260040160405180910390fd5b611467816143a7565b5f815160301461262b57604051634f88323960e11b815260040160405180910390fd5b6040516002906126419084905f906020016143ca565b60408051601f198184030181529082905261265b916141d9565b602060405180830381855afa158015612676573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611059919061423a565b804710156126e95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611a65565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612732576040519150601f19603f3d011682016040523d82523d5f602084013e612737565b606091505b50509050806119ca5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611a65565b5f5f6127eb8484808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061210892505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561285957612859613cd8565b600281111561286a5761286a613cd8565b90525090505f8160600151600281111561288657612886613cd8565b146128a4576040516335e09e9d60e01b815260040160405180910390fd5b6001600160401b0380166128e98686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061349092505050565b6001600160401b03160361291057604051631958236d60e21b815260040160405180910390fd5b6001600160401b0380166129558686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506134b492505050565b6001600160401b03161461297c57604051632eade63760e01b815260040160405180910390fd5b612984612cec565b61298d906143a7565b6129c88686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506134cb92505050565b1480612a1d57506129d76134df565b6129e0906143a7565b612a1b8686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506134cb92505050565b145b612a3a57604051633772dd5360e11b815260040160405180910390fd5b5f612a768686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506134fb92505050565b9050612a8f612a848c6121f7565b8b88888c8c8f6122ce565b60398054905f612a9e836143ee565b9091555050603a545f90600160401b90046001600160401b031615612ad557603a54600160401b90046001600160401b0316612ae2565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190525f858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b836002811115612bb757612bb7613cd8565b021790555050603d8054849250601390612be2908490600160981b90046001600160401b031661433e565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507f101790c2993f6a4d962bd17c786126823ba1c4cf04ff4cccb2659d50fb20aee884604051612c3791815260200190565b60405180910390a1604080518581526001600160401b03838116602083015284168183015290517fcdae700d7241bc027168c53cf6f889763b0a2c88a65d77fc13a8a9fef0d8605f9181900360600190a1612c9f633b9aca006001600160401b038416614145565b9c9b505050505050505050505050565b60605f612cbb83613512565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b604051606090612d0890600160f81b905f903090602001614406565b604051602081830303815290604052905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119ca908490613539565b5f612d788461319a565b9050612d85816003614208565b612d90906020614145565b612d9d60208401846140ef565b905014612dbd576040516313717da960e21b815260040160405180910390fd5b6003811b600c17612e12612dd460208501856140ef565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250508635905084613165565b611d05576040516309bde33960e01b815260040160405180910390fd5b5f5f5f866020015192505f612e4886895f01518761360c565b9050836001600160401b0316816001600160401b031614612ebc57612e6d8482614444565b60408051873581526001600160401b038a8116602083015284168183015290519194507fcdae700d7241bc027168c53cf6f889763b0a2c88a65d77fc13a8a9fef0d8605f919081900360600190a15b6001600160401b0380821660208a0181905290881660408a01525f03612f3a5760398054905f612eeb83614473565b909155505060026060890152612f0083614488565b6040519092508535906001600160401b038916907f5ce0aa04ae51d52da6e680fbe0336d2e2432f7c3dc2d4f3193204c57b9072107905f90a35b509450945094915050565b8051603c556020810151603d805460408401516060850151608086015162ffffff9095166affffffffffffffffffffff19909316831763010000006001600160401b0393841602176fffffffffffffffffffffffffffffffff60581b1916600160581b9183169190910267ffffffffffffffff60981b191617600160981b919094160292909217905515612fd65750565b60808101516034545f91612ff2916001600160401b031661433e565b90505f82606001518360400151613009919061435d565b60408401516034805492935090915f9061302d9084906001600160401b031661433e565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b810483166001600160801b03199091161790555f915061307d90633b9aca00908516614145565b90505f613092633b9aca00600785900b6144ad565b603a546040518281529192506001600160401b0316907f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e449060200160405180910390a260335460405163a1ca780b60e01b81526001600160a01b03918216600482015260248101849052604481018390527f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a1ca780b906064015f604051808303815f87803b158015613148575f5ffd5b505af115801561315a573d5f5f3e3d5ffd5b505050505050505050565b5f83613184576040516329e7276760e11b815260040160405180910390fd5b836131908685856136ea565b1495945050505050565b5f808260018111156131ae576131ae613cd8565b146131ba576006611059565b600592915050565b5f60018251116131e55760405163f8ef036760e01b815260040160405180910390fd5b6131ef82516137dd565b61320c5760405163f6558f5160e01b815260040160405180910390fd5b5f6002835161321b91906142db565b90505f816001600160401b0381111561323657613236613e86565b60405190808252806020026020018201604052801561325f578160200160208202803683370190505b5090505f5b82811015613359576002856132798383614145565b815181106132895761328961416f565b60200260200101518683600261329f9190614145565b6132aa906001614208565b815181106132ba576132ba61416f565b60200260200101516040516020016132dc929190918252602082015260400190565b60408051601f19818403018152908290526132f6916141d9565b602060405180830381855afa158015613311573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190613334919061423a565b8282815181106133465761334661416f565b6020908102919091010152600101613264565b505b8160011461346d5761336e6002836142db565b91505f5b82811015613467576002826133878383614145565b815181106133975761339761416f565b6020026020010151838360026133ad9190614145565b6133b8906001614208565b815181106133c8576133c861416f565b60200260200101516040516020016133ea929190918252602082015260400190565b60408051601f1981840301815290829052613404916141d9565b602060405180830381855afa15801561341f573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190613442919061423a565b8282815181106134545761345461416f565b6020908102919091010152600101613372565b5061335b565b805f8151811061347f5761347f61416f565b602002602001015192505050919050565b5f611059826005815181106134a7576134a761416f565b60200260200101516137fc565b5f611059826006815181106134a7576134a761416f565b5f8160018151811061211b5761211b61416f565b604051606090612d0890600160f91b905f903090602001614406565b5f611059826002815181106134a7576134a761416f565b5f60ff8216601f81111561105957604051632cd44ac360e21b815260040160405180910390fd5b5f61358d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138639092919063ffffffff16565b905080515f14806135ad5750808060200190518101906135ad919061408f565b6119ca5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611a65565b5f61361960266001614208565b613624906020614145565b61363160408401846140ef565b905014613651576040516313717da960e21b815260040160405180910390fd5b5f61365d6004856144dc565b64ffffffffff1690506136b661367660408501856140ef565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992505050602086013584613165565b6136d3576040516309bde33960e01b815260040160405180910390fd5b6136e1836020013585613871565b95945050505050565b5f83515f141580156137075750602084516137059190614505565b155b613724576040516313717da960e21b815260040160405180910390fd5b604080516020808201909252848152905b855181116137b457613748600285614505565b5f0361377a5781515f528086015160205260208260405f60026107d05a03fa61376f575f5ffd5b6002840493506137a2565b808601515f52815160205260208260405f60026107d05a03fa61379b575f5ffd5b6002840493505b6137ad602082614208565b9050613735565b5082156137d4576040516363df817160e01b815260040160405180910390fd5b51949350505050565b5f811580159061105957506137f360018361415c565b82161592915050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b606061146784845f8561389d565b5f8061387e600484614518565b613889906040614541565b64ffffffffff16905061146784821b6137fc565b6060824710156138fe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611a65565b5f5f866001600160a01b0316858760405161391991906141d9565b5f6040518083038185875af1925050503d805f8114613953576040519150601f19603f3d011682016040523d82523d5f602084013e613958565b606091505b509150915061396987838387613974565b979650505050505050565b606083156139e25782515f036139db576001600160a01b0385163b6139db5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611a65565b5081611467565b61146783838151156139f75781518083602001fd5b8060405162461bcd60e51b8152600401611a659190613c57565b6001600160401b0381168114613a25575f5ffd5b50565b5f60408284031215613a38575f5ffd5b50919050565b5f5f5f60608486031215613a50575f5ffd5b8335613a5b81613a11565b925060208401356001600160401b03811115613a75575f5ffd5b613a8186828701613a28565b92505060408401356001600160401b03811115613a9c575f5ffd5b613aa886828701613a28565b9150509250925092565b5f5f83601f840112613ac2575f5ffd5b5081356001600160401b03811115613ad8575f5ffd5b6020830191508360208260051b8501011115613af2575f5ffd5b9250929050565b5f5f60208385031215613b0a575f5ffd5b82356001600160401b03811115613b1f575f5ffd5b613b2b85828601613ab2565b90969095509350505050565b5f5f5f5f5f5f5f5f60a0898b031215613b4e575f5ffd5b8835613b5981613a11565b975060208901356001600160401b03811115613b73575f5ffd5b613b7f8b828c01613a28565b97505060408901356001600160401b03811115613b9a575f5ffd5b613ba68b828c01613ab2565b90975095505060608901356001600160401b03811115613bc4575f5ffd5b613bd08b828c01613ab2565b90955093505060808901356001600160401b03811115613bee575f5ffd5b613bfa8b828c01613ab2565b999c989b5096995094979396929594505050565b5f60208284031215613c1e575f5ffd5b81356122c781613a11565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6122c76020830184613c29565b5f5f83601f840112613c79575f5ffd5b5081356001600160401b03811115613c8f575f5ffd5b602083019150836020828501011115613af2575f5ffd5b5f5f60208385031215613cb7575f5ffd5b82356001600160401b03811115613ccc575f5ffd5b613b2b85828601613c69565b634e487b7160e01b5f52602160045260245ffd5b60038110613d0857634e487b7160e01b5f52602160045260245ffd5b9052565b602081016110598284613cec565b5f60208284031215613d2a575f5ffd5b5035919050565b5f6080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b0360408401511660408301526060830151613d7d6060840182613cec565b5092915050565b8015158114613a25575f5ffd5b5f60208284031215613da1575f5ffd5b81356122c781613d84565b5f5f5f5f5f60608688031215613dc0575f5ffd5b85356001600160401b03811115613dd5575f5ffd5b613de188828901613c69565b90965094505060208601356001600160401b03811115613dff575f5ffd5b613e0b88828901613c69565b96999598509660400135949350505050565b6001600160a01b0381168114613a25575f5ffd5b8035613e3c81613e1d565b919050565b5f5f60408385031215613e52575f5ffd5b8235613e5d81613e1d565b946020939093013593505050565b5f60208284031215613e7b575f5ffd5b81356122c781613e1d565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613ec257613ec2613e86565b604052919050565b5f6001600160401b03821115613ee257613ee2613e86565b5060051b60200190565b5f82601f830112613efb575f5ffd5b8135613f0e613f0982613eca565b613e9a565b8082825260208201915060208360051b860101925085831115613f2f575f5ffd5b602085015b83811015613f4c578035835260209283019201613f34565b5095945050505050565b5f5f5f60608486031215613f68575f5ffd5b83356001600160401b03811115613f7d575f5ffd5b8401601f81018613613f8d575f5ffd5b8035613f9b613f0982613eca565b8082825260208201915060208360051b850101925088831115613fbc575f5ffd5b6020840193505b82841015613fe7578335613fd681613e1d565b825260209384019390910190613fc3565b955050505060208401356001600160401b03811115614004575f5ffd5b61401086828701613eec565b92505061401f60408501613e31565b90509250925092565b5f5f5f6040848603121561403a575f5ffd5b83356001600160401b0381111561404f575f5ffd5b61405b86828701613a28565b93505060208401356001600160401b03811115614076575f5ffd5b61408286828701613ab2565b9497909650939450505050565b5f6020828403121561409f575f5ffd5b81516122c781613d84565b5f5f8335601e198436030181126140bf575f5ffd5b8301803591506001600160401b038211156140d8575f5ffd5b6020019150600581901b3603821315613af2575f5ffd5b5f5f8335601e19843603018112614104575f5ffd5b8301803591506001600160401b0382111561411d575f5ffd5b602001915036819003821315613af2575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761105957611059614131565b8181038181111561105957611059614131565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e19833603018112614197575f5ffd5b9190910192915050565b8284823760c09190911b6001600160c01b0319169101908152600801919050565b5f81518060208401855e5f93019283525090919050565b5f6122c782846141c2565b5f602082840312156141f4575f5ffd5b813564ffffffffff811681146122c7575f5ffd5b8082018082111561105957611059614131565b838582375f8482015f8152838582375f93019283525090949350505050565b5f6020828403121561424a575f5ffd5b5051919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b608081525f61428c60808301888a614251565b828103602084015261429e8188613c29565b905082810360408401526142b3818688614251565b915050826060830152979650505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f826142e9576142e96142c7565b500490565b6001600160401b03828116828216039081111561105957611059614131565b5f8235605e19833603018112614197575f5ffd5b5f62ffffff82168061433557614335614131565b5f190192915050565b6001600160401b03818116838216019081111561105957611059614131565b600781810b9083900b01677fffffffffffffff8113677fffffffffffffff198212171561105957611059614131565b5f6020828403121561439c575f5ffd5b81516122c781613a11565b80516020808301519190811015613a38575f1960209190910360031b1b16919050565b5f6143d582856141c2565b6001600160801b03199390931683525050601001919050565b5f600182016143ff576143ff614131565b5060010190565b6001600160f81b03199390931683526001600160a81b031991909116600183015260601b6bffffffffffffffffffffffff1916600c82015260200190565b600782810b9082900b03677fffffffffffffff198112677fffffffffffffff8213171561105957611059614131565b5f8161448157614481614131565b505f190190565b5f8160070b677fffffffffffffff1981036144a5576144a5614131565b5f0392915050565b8082025f8212600160ff1b841416156144c8576144c8614131565b818105831482151761105957611059614131565b5f64ffffffffff8316806144f2576144f26142c7565b8064ffffffffff84160491505092915050565b5f82614513576145136142c7565b500690565b5f64ffffffffff83168061452e5761452e6142c7565b8064ffffffffff84160691505092915050565b64ffffffffff8181168382160290811690818114613d7d57613d7d61413156fea2646970667358221220d7f03c11afe2f1c649534ba5e4f99bc743e129e34f9d832c789daea8e1e84efe64736f6c634300081c00330000000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "40": { - "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", - "code": "0x73dc64a140aa3e981100a9beca4e685f962f0cf6c93014608060405260043610610090575f3560e01c8063741fad8811610063578063741fad88146101125780638257f3d514610131578063ae8a4d9814610150578063c31308d11461016f575f5ffd5b80630c86ea461461009457806325394645146100b55780635b2e9c4c146100d457806365529675146100f3575b5f5ffd5b81801561009f575f5ffd5b506100b36100ae366004610a3a565b61018e565b005b8180156100c0575f5ffd5b506100b36100cf366004610a3a565b610229565b8180156100df575f5ffd5b506100b36100ee366004610a3a565b6102af565b8180156100fe575f5ffd5b506100b361010d366004610a8f565b610337565b81801561011d575f5ffd5b506100b361012c366004610adf565b6103aa565b81801561013c575f5ffd5b506100b361014b366004610a3a565b610433565b81801561015b575f5ffd5b506100b361016a366004610a3a565b6104c4565b81801561017a575f5ffd5b506100b3610189366004610a8f565b6104ee565b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f65f6101bc84840185610baf565b8051835560208101516001840180546fffffffffffffffffffffffffffffffff19166001600160801b039092169190911790556040808201516002850155519091507f5e3c25378b5946068b94aa2ea10c4c1e215cc975f994322b159ddc9237a973d4905f90a150505050565b5f61023682840184610c6d565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c739361027e9390929091600401610d22565b5f6040518083038186803b158015610294575f5ffd5b505af41580156102a6573d5f5f3e3d5ffd5b50505050505050565b7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e5f6102dd84840185610d51565b805160208201516001600160801b03908116600160801b0291161760028401556040808201516003850155519091507f4793c0cb5bef4b1fdbbfbcf17e06991844eb881088b012442af17a12ff38d5cd905f90a150505050565b5f61034482840184610d86565b90505f610353825f01516105c4565b60208301519091506001600160a01b031661038a576103858582846040015185606001516001600160801b031661061c565b6103a3565b6103a38582846020015185604001518660600151610679565b5050505050565b60408051637061726160e01b602080830191909152607d60e31b602483015282516008818403018152602890920190925280519101206103eb9084906106de565b15610408576040516282b42960e81b815260040160405180910390fd5b5f61041582840184610de4565b905061042d815f0151826020015183604001516106e9565b50505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f61046084840185610e2f565b8051835491925090839060ff19166001838181111561048157610481610e7d565b021790555080516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916104b691610e91565b60405180910390a150505050565b5f6104d182840184610eb7565b905061042d815f0151826020015183604001518460600151610762565b5f6104fb82840184610f71565b90505f61050a825f01516105c4565b90508160200151515f03610531576040516309e256f760e21b815260040160405180910390fd5b5f5f836020015180602001905181019061054b919061104f565b90925090505f82801561056057610560610e7d565b036102a6575f5f5f8380602001905181019061057c919061109f565b919450925090506001600160a01b0383166105ab576105a68a8784846001600160801b031661061c565b6105b8565b6105b88a87858585610679565b50505050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106175760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506106718486836108ad565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506102a68587836108ad565b818114155b92915050565b5f6106f384610939565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610746575f5ffd5b505af1158015610758573d5f5f3e3d5ffd5b5050505050505050565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156107d857604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516107e8906109e9565b6107f4939291906110e9565b604051809103905ff08015801561080d573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016108df929190611121565b5f604051808303815f875af11580156108fa573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610921919081019061114c565b9150915061092f82826109ca565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b03166109ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156109d95750806106e3565b8151156100905781518083602001fd5b610c358061116d83390190565b5f5f83601f840112610a06575f5ffd5b5081356001600160401b03811115610a1c575f5ffd5b602083019150836020828501011115610a33575f5ffd5b9250929050565b5f5f60208385031215610a4b575f5ffd5b82356001600160401b03811115610a60575f5ffd5b610a6c858286016109f6565b90969095509350505050565b6001600160a01b0381168114610a8c575f5ffd5b50565b5f5f5f60408486031215610aa1575f5ffd5b8335610aac81610a78565b925060208401356001600160401b03811115610ac6575f5ffd5b610ad2868287016109f6565b9497909650939450505050565b5f5f5f60408486031215610af1575f5ffd5b8335925060208401356001600160401b03811115610ac6575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715610b4357610b43610b0d565b60405290565b604051608081016001600160401b0381118282101715610b4357610b43610b0d565b604051601f8201601f191681016001600160401b0381118282101715610b9357610b93610b0d565b604052919050565b6001600160801b0381168114610a8c575f5ffd5b5f6060828403128015610bc0575f5ffd5b50610bc9610b21565b823581526020830135610bdb81610b9b565b60208201526040928301359281019290925250919050565b5f6001600160401b03821115610c0b57610c0b610b0d565b50601f01601f191660200190565b5f82601f830112610c28575f5ffd5b8135602083015f610c40610c3b84610bf3565b610b6b565b9050828152858383011115610c53575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610c7d575f5ffd5b81356001600160401b03811115610c92575f5ffd5b820160608185031215610ca3575f5ffd5b610cab610b21565b8135610cb681610a78565b81526020828101359082015260408201356001600160401b03811115610cda575f5ffd5b610ce686828501610c19565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610d486060830184610cf4565b95945050505050565b5f6060828403128015610d62575f5ffd5b50610d6b610b21565b8235610d7681610b9b565b81526020830135610bdb81610b9b565b5f6080828403128015610d97575f5ffd5b50610da0610b49565b823581526020830135610db281610a78565b60208201526040830135610dc581610a78565b60408201526060830135610dd881610b9b565b60608201529392505050565b5f6060828403128015610df5575f5ffd5b50610dfe610b21565b823581526020830135610e1081610a78565b60208201526040830135610e2381610b9b565b60408201529392505050565b5f6020828403128015610e40575f5ffd5b50604051602081016001600160401b0381118282101715610e6357610e63610b0d565b604052823560028110610e74575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610eb157634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610ec7575f5ffd5b81356001600160401b03811115610edc575f5ffd5b820160808185031215610eed575f5ffd5b610ef5610b49565b8135815260208201356001600160401b03811115610f11575f5ffd5b610f1d86828501610c19565b60208301525060408201356001600160401b03811115610f3b575f5ffd5b610f4786828501610c19565b6040830152506060820135915060ff82168214610f62575f5ffd5b60608101919091529392505050565b5f60208284031215610f81575f5ffd5b81356001600160401b03811115610f96575f5ffd5b820160408185031215610fa7575f5ffd5b604080519081016001600160401b0381118282101715610fc957610fc9610b0d565b6040528135815260208201356001600160401b03811115610fe8575f5ffd5b610ff486828501610c19565b602083015250949350505050565b5f82601f830112611011575f5ffd5b815161101f610c3b82610bf3565b818152846020838601011115611033575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f60408385031215611060575f5ffd5b82516001811061106e575f5ffd5b60208401519092506001600160401b03811115611089575f5ffd5b61109585828601611002565b9150509250929050565b5f5f5f606084860312156110b1575f5ffd5b83516110bc81610a78565b60208501519093506110cd81610a78565b60408501519092506110de81610b9b565b809150509250925092565b606081525f6110fb6060830186610cf4565b828103602084015261110d8186610cf4565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f9061114490830184610cf4565b949350505050565b5f5f6040838503121561115d575f5ffd5b8251801515811461106e575f5ffdfe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea2646970667358221220e1f5b5d05dc7259c2004ce8b2365485a31341d166e578c6bed74cf416d43d0b864736f6c634300081c0033a2646970667358221220993e175405432033ed7aea33210be529d0ba9c2edc6085e7b95533cc13f90a0064736f6c634300081c003300", - "storage": {} - }, - "45": { - "address": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0", - "code": "0x6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063c298557814602a575b5f5ffd5b5f60405190815260200160405180910390f3fea26469706673582212204906941268839d569ecaf7e18f112ade90c540d0de5142ca9f7725e57df91e0964736f6c634300081c00330000000000000000", - "storage": {} - }, - "27": { - "address": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf55933" - } - }, - "14": { - "address": "0xBeaAFDA2E17fC95E69Dc06878039d274E0d2B21A", - "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c11131481565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", - "storage": {} - }, - "12": { - "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "code": "0x735fbdb2315678afecb367f032d93f642f64180aa33014608060405260043610610034575f3560e01c8063e5bad8da14610038575b5f5ffd5b61004b610046366004610256565b61005f565b604051901515815260200160405180910390f35b5f80610079610073368590038501856102fc565b85610104565b90506001600160a01b03851663a401662b8261009860c087018761039b565b8760e001356040518563ffffffff1660e01b81526004016100bc94939291906103e8565b602060405180830381865afa1580156100d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100fb919061042c565b95945050505050565b81515f90819060f81b61013c8560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b85604001516101b287606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b5f5f5f60608486031215610268575f5ffd5b83356001600160a01b038116811461027e575f5ffd5b925060208401359150604084013567ffffffffffffffff8111156102a0575f5ffd5b840161010081870312156102b2575f5ffd5b809150509250925092565b803560ff811681146102cd575f5ffd5b919050565b803563ffffffff811681146102cd575f5ffd5b803567ffffffffffffffff811681146102cd575f5ffd5b5f60c082840312801561030d575f5ffd5b5060405160c0810167ffffffffffffffff8111828210171561033d57634e487b7160e01b5f52604160045260245ffd5b604052610349836102bd565b8152610357602084016102d2565b602082015260408381013590820152610372606084016102e5565b6060820152610383608084016102d2565b608082015260a0928301359281019290925250919050565b5f5f8335601e198436030181126103b0575f5ffd5b83018035915067ffffffffffffffff8211156103ca575f5ffd5b6020019150600581901b36038213156103e1575f5ffd5b9250929050565b84815260606020820181905281018390525f6001600160fb1b0384111561040d575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f6020828403121561043c575f5ffd5b8151801515811461044b575f5ffd5b939250505056fea2646970667358221220202aa32fed9b1043addbc14e73c73106e521b4a0cbd4090b88a279664688a3ca64736f6c634300081c0033000000000000000000000000", - "storage": {} - }, - "2": { - "address": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933", - "code": "0x608060405234801561000f575f5ffd5b50600436106100e5575f3560e01c80639100674511610088578063ad8aca7711610063578063ad8aca77146101df578063df595cb8146101f2578063eb5a4e8714610205578063fddbdefd14610218575f5ffd5b80639100674514610196578063950d806e146101b9578063ad5f2210146101cc575f5ffd5b806354fd4d50116100c357806354fd4d5014610124578063628806ef146101425780636bddfa1f14610155578063882a3b3814610175575f5ffd5b806306641201146100e9578063268959e5146100fe5780634f906cf914610111575b5f5ffd5b6100fc6100f7366004610dbd565b61022b565b005b6100fc61010c366004610e0e565b61034c565b6100fc61011f366004610e0e565b610427565b61012c6104ca565b6040516101399190610e3f565b60405180910390f35b6100fc610150366004610e74565b6104fa565b610168610163366004610e74565b610588565b6040516101399190610ed0565b610188610183366004610e0e565b6105b1565b604051610139929190610ee2565b6101a96101a4366004610e0e565b610712565b6040519015158152602001610139565b6100fc6101c7366004610dbd565b610782565b6101686101da366004610e74565b610893565b6101a96101ed366004610e0e565b610939565b6101a9610200366004610dbd565b61095a565b6100fc610213366004610e0e565b6109af565b610168610226366004610f44565b610a7d565b836102368133610712565b61025357604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600160205260408120906102758585610abb565b6001600160a01b0387165f908152600484016020526040902090915061029b9082610ae8565b6102b85760405163262118cd60e01b815260040160405180910390fd5b6001600160a01b0386165f90815260048301602052604090206102db9082610aff565b505f81815260058301602052604090206102f59087610b0a565b50856001600160a01b0316876001600160a01b03167f18242326b6b862126970679759169f01f646bd55ec5bfcab85ba9f337a74e0c6878760405161033b929190610f84565b60405180910390a350505050505050565b816103578133610712565b61037457604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602081905260409091206002019061039b82610b1e565b116103b9576040516310ce892b60e31b815260040160405180910390fd5b6103c38184610b0a565b6103e057604051630716d81b60e51b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce906020015b60405180910390a250505050565b816104328133610712565b61044f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602052604090206104708184610b0a565b61048d5760405163bed8295f60e01b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fd706ed7ae044d795b49e54c9f519f663053951011985f663a862cd9ee72a9ac790602001610419565b60606104f57f76312e302e300000000000000000000000000000000000000000000000000006610b27565b905090565b6001600160a01b0381165f90815260016020526040902061051b8133610b0a565b6105385760405163bed8295f60e01b815260040160405180910390fd5b6105456002820133610b64565b506040513381526001600160a01b038316907fbf265e8326285a2747e33e54d5945f7111f2b5edb826eb8c08d4677779b3ff979060200160405180910390a25050565b6001600160a01b0381165f9081526001602052604090206060906105ab90610b78565b92915050565b6001600160a01b038083165f9081526001602090815260408083209385168352600490930190529081206060918291906105ea82610b1e565b90505f8167ffffffffffffffff81111561060657610606610fa7565b60405190808252806020026020018201604052801561062f578160200160208202803683370190505b5090505f8267ffffffffffffffff81111561064c5761064c610fa7565b604051908082528060200260200182016040528015610675578160200160208202803683370190505b5090505f5b83811015610704576106a861068f8683610b84565b606081901c9160a09190911b6001600160e01b03191690565b8483815181106106ba576106ba610fbb565b602002602001018484815181106106d3576106d3610fbb565b6001600160e01b0319909316602093840291909101909201919091526001600160a01b03909116905260010161067a565b509097909650945050505050565b6001600160a01b0382165f90815260016020526040812061073590600201610b1e565b5f0361075757816001600160a01b0316836001600160a01b03161490506105ab565b6001600160a01b0383165f90815260016020526040902061077b9060020183610b8f565b9392505050565b8361078d8133610712565b6107aa57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600160205260408120906107cc8585610abb565b6001600160a01b0387165f90815260048401602052604090209091506107f29082610ae8565b156108105760405163ad8efeb760e01b815260040160405180910390fd5b6001600160a01b0386165f90815260048301602052604090206108339082610bb0565b505f818152600583016020526040902061084d9087610b64565b50856001600160a01b0316876001600160a01b03167f037f03a2ad6b967df4a01779b6d2b4c85950df83925d9e31362b519422fc0169878760405161033b929190610f84565b6001600160a01b0381165f9081526001602052604090206060906108b990600201610b1e565b5f03610911576040805160018082528183019092525f916020808301908036833701905050905082815f815181106108f3576108f3610fbb565b6001600160a01b039092166020928302919091019091015292915050565b6001600160a01b0382165f9081526001602052604090206105ab90600201610b78565b919050565b6001600160a01b0382165f90815260016020526040812061077b9083610b8f565b5f6109658585610712565b806109a657506109a66109788484610abb565b6001600160a01b038088165f908152600160209081526040808320938a168352600490930190522090610ae8565b95945050505050565b816109ba8133610712565b6109d757604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602052604090206109fb6002820184610b8f565b15610a195760405163130160e560e31b815260040160405180910390fd5b610a238184610b64565b610a40576040516319abede360e11b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fb14b9a3d448c5b04f0e5b087b6f5193390db7955482a6ffb841e7b3ba61a460c90602001610419565b60605f610a8a8484610abb565b6001600160a01b0386165f90815260016020908152604080832084845260050190915290209091506109a690610b78565b60609190911b6bffffffffffffffffffffffff191660a09190911c6bffffffff0000000000000000161790565b5f818152600183016020526040812054151561077b565b5f61077b8383610bbb565b5f61077b836001600160a01b038416610bbb565b5f6105ab825490565b60605f610b3383610c9e565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f61077b836001600160a01b038416610cc5565b60605f61077b83610d11565b5f61077b8383610d6a565b6001600160a01b0381165f908152600183016020526040812054151561077b565b5f61077b8383610cc5565b5f8181526001830160205260408120548015610c95575f610bdd600183610fcf565b85549091505f90610bf090600190610fcf565b9050818114610c4f575f865f018281548110610c0e57610c0e610fbb565b905f5260205f200154905080875f018481548110610c2e57610c2e610fbb565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610c6057610c60610fee565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506105ab565b5f9150506105ab565b5f60ff8216601f8111156105ab57604051632cd44ac360e21b815260040160405180910390fd5b5f818152600183016020526040812054610d0a57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105ab565b505f6105ab565b6060815f01805480602002602001604051908101604052809291908181526020018280548015610d5e57602002820191905f5260205f20905b815481526020019060010190808311610d4a575b50505050509050919050565b5f825f018281548110610d7f57610d7f610fbb565b905f5260205f200154905092915050565b80356001600160a01b0381168114610934575f5ffd5b80356001600160e01b031981168114610934575f5ffd5b5f5f5f5f60808587031215610dd0575f5ffd5b610dd985610d90565b9350610de760208601610d90565b9250610df560408601610d90565b9150610e0360608601610da6565b905092959194509250565b5f5f60408385031215610e1f575f5ffd5b610e2883610d90565b9150610e3660208401610d90565b90509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215610e84575f5ffd5b61077b82610d90565b5f8151808452602084019350602083015f5b82811015610ec65781516001600160a01b0316865260209586019590910190600101610e9f565b5093949350505050565b602081525f61077b6020830184610e8d565b604081525f610ef46040830185610e8d565b82810360208401528084518083526020830191506020860192505f5b81811015610f385783516001600160e01b031916835260209384019390920191600101610f10565b50909695505050505050565b5f5f5f60608486031215610f56575f5ffd5b610f5f84610d90565b9250610f6d60208501610d90565b9150610f7b60408501610da6565b90509250925092565b6001600160a01b039290921682526001600160e01b031916602082015260400190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b818103818111156105ab57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea26469706673582212205138500ca3c7de3b4f716056e14d380d984b3b127ee87718876d2d91dcf14c6d64736f6c634300081c003300000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "28": { - "address": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d", - "0x38de7073e27519f272741044a68ab5a51022aa002af20801e32867226a9bb4bd": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x165183f4d7a8ecead93a30c1491a78d70b212627d72d451cc2b61e9844bb6182": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x9254291d7d424716ad6728e8cf28d7329070cafa88280734e18f0a5f711cc416": "0x000000000000000000000000beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0", - "0x288c6faa56b91953378099dc2014a331affa988ca357fe83ca55e72915585282": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xa5f98ec628355c7eb459fe4228ff389b7d3430e36f990cd778b4fbcb2af7603e": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x4bad58e84dc127f47e7265bd5e504be070126f63f93af282fe2a4f1acbb07707": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "41": { - "address": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", - "code": "0x73cf7ed3acca5a467e9e704c703e8d87f634fb0fc93014608060405260043610610034575f3560e01c8063d3b08db814610038575b5f5ffd5b61004b610046366004610399565b610061565b604051610058919061049c565b60405180910390f35b80518051606091825f5b82518163ffffffff1610156101055781838263ffffffff1681518110610093576100936104d1565b60200260200101516040516020016100c3919060609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526100e192916020016104fc565b604051602081830303815290604052915080806100fd9061052c565b91505061006b565b50630e02a00760e31b5f80610119866101b9565b8461018b8a602001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6040516020016101a096959493929190610550565b6040516020818303038152906040529350505050919050565b6060603f8263ffffffff16116101f657604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff16116102555761023261021e6403fffffffc600285901b1660016105a9565b600881811b62ffff001691901c60ff161790565b6040516020016101e0919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116102c7576102a460028363ffffffff16901b600261028091906105a9565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b6040516020016101e0919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b1660218201526025016101e0565b919050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff8111828210171561034b5761034b610314565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561037a5761037a610314565b604052919050565b803567ffffffffffffffff8116811461030f575f5ffd5b5f602082840312156103a9575f5ffd5b813567ffffffffffffffff8111156103bf575f5ffd5b8201604081850312156103d0575f5ffd5b6103d8610328565b813567ffffffffffffffff8111156103ee575f5ffd5b8201601f810186136103fe575f5ffd5b803567ffffffffffffffff81111561041857610418610314565b8060051b61042860208201610351565b91825260208184018101929081019089841115610443575f5ffd5b6020850194505b8385101561047c57843592506001600160a01b038316831461046a575f5ffd5b8282526020948501949091019061044a565b85525061048f9250505060208301610382565b6020820152949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f61051061050a83866104e5565b846104e5565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b5f63ffffffff821663ffffffff810361054757610547610518565b60010192915050565b6001600160e01b0319871681526001600160f81b03198681166004830152851660058201525f61058c61058660068401876104e5565b856104e5565b6001600160c01b0319939093168352505060080195945050505050565b63ffffffff81811683821601908111156105c5576105c5610518565b9291505056fea264697066735822122025360fa68d61e06c0f66cb21e1db2778b987cc6ccef457fe1dbef98965e5dabb64736f6c634300081c0033000000000000000000000000", - "storage": {} - }, - "43": { - "address": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570", - "code": "0x6080604052600436106101c5575f3560e01c8063a98fb355116100f2578063ceb29d6111610092578063e2148f5a11610062578063e2148f5a1461053f578063f2fde38b1461055e578063fc299dee1461057d578063fe776c2a1461059c575f5ffd5b8063ceb29d61146104b9578063d156b911146104d8578063d4b6b834146104ec578063d4c250081461050b575f5ffd5b8063be6ab6ef116100cd578063be6ab6ef1461043b578063c1a8e2c51461045c578063c63fd5021461047b578063c968095b1461049a575f5ffd5b8063a98fb355146103c5578063a9a899cd146103e4578063b526578714610403575f5ffd5b8063740d8377116101685780638da5cb5b116101385780638da5cb5b1461034e5780638f8ee5521461036b578063a8294cd814610393578063a8315705146103a6575f5ffd5b8063740d8377146102bd57806374edeb6c146102f157806383821e8e14610310578063869e847e1461032f575f5ffd5b80633bc28c8c116101a35780633bc28c8c1461023f578063501060021461025e57806359b005341461028a578063715018a6146102a9575f5ffd5b80631500cd8d146101c95780632fb31ef1146101ea578063303ca95614610220575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461245b565b6105ca565b005b3480156101f5575f5ffd5b506067546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022b575f5ffd5b506101e861023a3660046124bd565b610642565b34801561024a575f5ffd5b506101e861025936600461245b565b61079d565b348015610269575f5ffd5b5061027d610278366004612533565b61081d565b604051610217919061257a565b348015610295575f5ffd5b506101e86102a436600461245b565b610a59565b3480156102b4575f5ffd5b506101e8610ba7565b3480156102c8575f5ffd5b506102036102d736600461245b565b60696020525f90815260409020546001600160a01b031681565b3480156102fc575f5ffd5b506101e861030b36600461245b565b610bba565b34801561031b575f5ffd5b506101e861032a36600461258c565b610c3a565b34801561033a575f5ffd5b506101e8610349366004612672565b610ebd565b348015610359575f5ffd5b506033546001600160a01b0316610203565b348015610376575f5ffd5b5061037e5f81565b60405163ffffffff9091168152602001610217565b6101e86103a136600461276c565b6112a4565b3480156103b1575f5ffd5b506101e86103c03660046127ac565b6113ba565b3480156103d0575f5ffd5b506101e86103df36600461285d565b61143d565b3480156103ef575f5ffd5b506101e86103fe36600461245b565b6114c3565b34801561040e575f5ffd5b5061042b61041d36600461245b565b6001600160a01b0316301490565b6040519015158152602001610217565b348015610446575f5ffd5b5061044f611513565b604051610217919061288e565b348015610467575f5ffd5b506101e86104763660046128d9565b6115bb565b348015610486575f5ffd5b506101e8610495366004612929565b6116a3565b3480156104a5575f5ffd5b506101e86104b43660046127ac565b611926565b3480156104c4575f5ffd5b506101e86104d33660046127ac565b611980565b3480156104e3575f5ffd5b5061027d611bfd565b3480156104f7575f5ffd5b50606a54610203906001600160a01b031681565b348015610516575f5ffd5b5061020361052536600461245b565b60686020525f90815260409020546001600160a01b031681565b34801561054a575f5ffd5b506101e861055936600461245b565b611c19565b348015610569575f5ffd5b506101e861057836600461245b565b611c93565b348015610588575f5ffd5b50606554610203906001600160a01b031681565b3480156105a7575f5ffd5b5061042b6105b636600461245b565b60666020525f908152604090205460ff1681565b6105d2611d0c565b6001600160a01b0381166105f95760405163d92e233d60e01b815260040160405180910390fd5b606780546001600160a01b0319166001600160a01b0383169081179091556040517f6a8a174b559440c4e231f06fda7f0eb644f79306c33292fbb95f7602bef9aaf9905f90a250565b61064a611d66565b6001600160a01b038316301461067357604051631280731d60e21b815260040160405180910390fd5b600181146106945760405163f37f411760e01b815260040160405180910390fd5b5f828282816106a5576106a56129e8565b90506020020160208101906106ba9190612a0f565b63ffffffff16146106de5760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b038085165f90815260686020526040902080546001600160a01b03198116909155168015610733576001600160a01b0381165f90815260696020526040902080546001600160a01b03191690555b82825f818110610745576107456129e8565b905060200201602081019061075a9190612a0f565b63ffffffff16856001600160a01b03167f2638d53da645bac898f1b50bd1d6d2a4d389e3141e209c988488abced5c3c54c60405160405180910390a35050505050565b6107a5611d0c565b6001600160a01b0381166107cc5760405163d92e233d60e01b815260040160405180910390fd5b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fa499ec18d14a183a8ce150f6d1a61fe68e989121c8aa695bafde5305f1eee81c905f90a35050565b6040805180820182523081525f602082018190529151633743aedd60e11b8152606092907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690636e875dba90610880908590600401612a28565b5f60405180830381865afa15801561089a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108c19190810190612a4e565b90505f81516001600160401b038111156108dd576108dd6125c2565b604051908082528060200260200182016040528015610906578160200160208202803683370190505b5090505f805b835181101561099a575f60685f86848151811061092b5761092b6129e8565b6020908102919091018101516001600160a01b039081168352908201929092526040015f20541690508015610991578084848151811061096d5761096d6129e8565b6001600160a01b039092166020928302919091019091015261098e83612af1565b92505b5060010161090c565b50805f036109bb5760405163339e1ffb60e01b815260040160405180910390fd5b8082526040805180820182528381526001600160401b03881660208201529051631a7611b760e31b815273cf7ed3acca5a467e9e704c703e8d87f634fb0fc99163d3b08db891610a0e9190600401612b09565b5f60405180830381865af4158015610a28573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a4f9190810190612b79565b9695505050505050565b610a61611daf565b6001600160a01b038116610a885760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038082165f9081526069602052604090205416801580610ab757506001600160a01b03811633145b610ad45760405163ac92c8d560e01b815260040160405180910390fd5b335f908152606860205260409020546001600160a01b03168015801590610b0d5750826001600160a01b0316816001600160a01b031614155b15610b38576001600160a01b0381165f90815260696020526040902080546001600160a01b03191690555b335f81815260686020908152604080832080546001600160a01b0389166001600160a01b03199182168117909255818552606990935281842080549093168517909255519092917f03ddab9377727860d18575279a4fb19cf32e3e650ae962f6ce2feaed801cd3af91a3505050565b610baf611d0c565b610bb85f611e6a565b565b610bc2611d0c565b6001600160a01b038116610be95760405163d92e233d60e01b815260040160405180910390fd5b606a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f34a8177f4fa0d6ac3a138dd129bccb64eedbd41d168fc21170fcccfcd5e020cb905f90a35050565b610c42611ebb565b5f610c4c82612d26565b90505f805b826040015151811015610ced57610c8783604001518281518110610c7757610c776129e8565b60200260200101515f0151611ee6565b83604001518281518110610c9d57610c9d6129e8565b60209081029190910101516001600160a01b0390911690526040830151805182908110610ccc57610ccc6129e8565b60200260200101516020015182610ce39190612def565b9150600101610c51565b50610cfb8260400151611f26565b610d407f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae82610d30604087016020880161245b565b6001600160a01b03169190612022565b6040805160018082528183019092525f91816020015b610da16040518060c00160405280606081526020015f6001600160a01b03168152602001606081526020015f63ffffffff1681526020015f63ffffffff168152602001606081525090565b815260200190600190039081610d5657905050905082815f81518110610dc957610dc96129e8565b6020908102919091018101919091526040805180820182523081525f9281019290925251630ca2989960e01b81527f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae6001600160a01b031690630ca2989990610e389084908690600401612e51565b5f604051808303815f87803b158015610e4f575f5ffd5b505af1158015610e61573d5f5f3e3d5ffd5b505050507fb6d94e6419560f5b19430e640113c0926ed3c399cb053a26a2324b5b29f18e8183868060400190610e979190612fb3565b604051610eae939250918252602082015260400190565b60405180910390a15050505050565b5f54610100900460ff1615808015610edb57505f54600160ff909116105b80610ef45750303b158015610ef457505f5460ff166001145b610f5c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015610f7d575f805461ff0019166101001790555b6001600160a01b038616610fa45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038516610fcb5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038316610ff25760405163d92e233d60e01b815260040160405180910390fd5b610ffa612104565b61100386611e6a565b606580546001600160a01b0319166001600160a01b0387169081179091556040515f907fa499ec18d14a183a8ce150f6d1a61fe68e989121c8aa695bafde5305f1eee81c908290a37f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663a9821821306040518060a00160405280606d81526020016135d8606d91396040518363ffffffff1660e01b81526004016110b1929190612ff8565b5f604051808303815f87803b1580156110c8575f5ffd5b505af11580156110da573d5f5f3e3d5ffd5b505f9250600191506110e99050565b60405190808252806020026020018201604052801561112e57816020015b604080518082019091525f8152606060208201528152602001906001900390816111075790505b50905060405180604001604052805f63ffffffff16815260200186815250815f8151811061115e5761115e6129e8565b6020908102919091010152604051630130fc2760e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063261f84e0906111b79030908590600401613054565b5f604051808303815f87803b1580156111ce575f5ffd5b505af11580156111e0573d5f5f3e3d5ffd5b5050606780546001600160a01b0319166001600160a01b03888116919091179091558516159150611256905057606a80546001600160a01b0319166001600160a01b0385169081179091556040515f907f34a8177f4fa0d6ac3a138dd129bccb64eedbd41d168fc21170fcccfcd5e020cb908290a35b50801561129c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6112ac612132565b5f6112b68461081d565b6067549091506001600160a01b031663f2e500b234835f60405190808252806020026020018201604052801561130057816020015b60608152602001906001900390816112eb5790505b5060405180602001604052805f81525088886040518763ffffffff1660e01b81526004016113329594939291906130d6565b5f604051808303818588803b158015611349575f5ffd5b505af115801561135b573d5f5f3e3d5ffd5b5050505050336001600160a01b0316846001600160401b03167f08de23359763aa62302ebcf98e51ce5f9f71f925679c5b7fc9d6cf634e6b4a7383805190602001206040516113ac91815260200190565b60405180910390a350505050565b6113c2611d0c565b60405163b66bd98960e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063b66bd989906114149030905f9087908790600401613180565b5f604051808303815f87803b15801561142b575f5ffd5b505af115801561129c573d5f5f3e3d5ffd5b611445611d0c565b60405163a982182160e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9821821906114939030908590600401612ff8565b5f604051808303815f87803b1580156114aa575f5ffd5b505af11580156114bc573d5f5f3e3d5ffd5b5050505050565b6114cb611d0c565b6001600160a01b0381165f81815260666020526040808220805460ff19169055517fdf2097d1af3ac651476385ff7048eefcbc11072c13100fa1d966effaf2ea3e549190a250565b6040805180820182523081525f6020820152905163105dea1f60e21b8152606091907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c90611574908490600401612a28565b5f60405180830381865afa15801561158e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115b591908101906131ea565b91505090565b6115c3611d0c565b5f6040518060600160405280856001600160a01b03168152602001306001600160a01b031681526020018484808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050915250604051636e3492b560e01b81529091506001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1690636e3492b590611670908490600401613279565b5f604051808303815f87803b158015611687575f5ffd5b505af1158015611699573d5f5f3e3d5ffd5b5050505050505050565b6116ab611d66565b6001600160a01b03851630146116d457604051631280731d60e21b815260040160405180910390fd5b600183146116f55760405163b1698da560e01b815260040160405180910390fd5b5f84848281611706576117066129e8565b905060200201602081019061171b9190612a0f565b63ffffffff161461173f5760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b0386165f9081526066602052604090205460ff1661177757604051630444d2e160e21b815260040160405180910390fd5b5f6117b683838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061215d92505050565b6001600160a01b038082165f90815260696020526040902054919250168015806117f15750876001600160a01b0316816001600160a01b0316145b61180e5760405163ac92c8d560e01b815260040160405180910390fd5b6001600160a01b038089165f908152606860205260409020541680158015906118495750826001600160a01b0316816001600160a01b031614155b15611874576001600160a01b0381165f90815260696020526040902080546001600160a01b03191690555b6001600160a01b03808a165f81815260686020908152604080832080549589166001600160a01b03199687168117909155835260699091528120805490931690911790915587908790816118ca576118ca6129e8565b90506020020160208101906118df9190612a0f565b63ffffffff16896001600160a01b03167f3ed331d6c3431aecc422f169b89a3c24f9e23cef141e10631262a3fc865f513a60405160405180910390a3505050505050505050565b61192e611d0c565b604051630287f75160e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed16906350feea20906114149030905f9087908790600401613180565b611988611ebb565b5f5b81811015611bd0575f6119cd8484848181106119a8576119a86129e8565b90506020028101906119ba91906132e7565b6119c890602081019061245b565b611ee6565b90505f6040518060a00160405280836001600160a01b031681526020015f63ffffffff168152602001868686818110611a0857611a086129e8565b9050602002810190611a1a91906132e7565b611a28906020810190613305565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250505090825250602001868686818110611a7057611a706129e8565b9050602002810190611a8291906132e7565b611a90906040810190613305565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250505090825250602001868686818110611ad857611ad86129e8565b9050602002810190611aea91906132e7565b611af890606081019061334a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250604051633635205760e01b81529091506001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1690633635205790611b7e903090859060040161338c565b5f604051808303815f875af1158015611b99573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bc09190810190613445565b50506001909201915061198a9050565b506040517f69e2dc7f4757ef3cbac3a5423ac42ce1938cb3b79c4f35563460926176265ce0905f90a15050565b6040518060a00160405280606d81526020016135d8606d913981565b611c21611d0c565b6001600160a01b038116611c485760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381165f81815260666020526040808220805460ff19166001179055517f5045083cd90f33bcbd2689f0152c6fd980a5bc506dff19aed51f534e2a49ecee9190a250565b611c9b611d0c565b6001600160a01b038116611d005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f53565b611d0981611e6a565b50565b6033546001600160a01b03163314610bb85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f53565b336001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1614610bb8576040516323d871a560e01b815260040160405180910390fd5b6040805180820182523081525f602082015290516333869dd160e11b81527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03169063670d3ba290611e0e90339085906004016134e2565b602060405180830381865afa158015611e29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e4d9190613518565b611d095760405163668191af60e11b815260040160405180910390fd5b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6065546001600160a01b03163314610bb857604051638e79fdb560e01b815260040160405180910390fd5b6001600160a01b038082165f9081526069602052604081205490911680611f2057604051635979ce2d60e11b815260040160405180910390fd5b92915050565b805160015b8181101561201d575f838281518110611f4657611f466129e8565b602002602001015190505f8290505b5f81118015611f9c575081516001600160a01b031685611f76600184613537565b81518110611f8657611f866129e8565b60200260200101515f01516001600160a01b0316115b15611ff55784611fad600183613537565b81518110611fbd57611fbd6129e8565b6020026020010151858281518110611fd757611fd76129e8565b60200260200101819052508080611fed9061354a565b915050611f55565b81858281518110612008576120086129e8565b60209081029190910101525050600101611f2b565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa15801561206f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612093919061355f565b90506120fe8463095ea7b360e01b856120ac8686612def565b6040516001600160a01b039092166024830152604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526121ac565b50505050565b5f54610100900460ff1661212a5760405162461bcd60e51b8152600401610f5390613576565b610bb861227f565b606a546001600160a01b03163314610bb8576040516305067f3b60e21b815260040160405180910390fd5b5f81516014146121805760405163526c487560e11b815260040160405180910390fd5b50602081015160601c806121a75760405163d92e233d60e01b815260040160405180910390fd5b919050565b5f612200826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122ae9092919063ffffffff16565b905080515f14806122205750808060200190518101906122209190613518565b61201d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610f53565b5f54610100900460ff166122a55760405162461bcd60e51b8152600401610f5390613576565b610bb833611e6a565b60606122bc84845f856122c6565b90505b9392505050565b6060824710156123275760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610f53565b5f5f866001600160a01b0316858760405161234291906135c1565b5f6040518083038185875af1925050503d805f811461237c576040519150601f19603f3d011682016040523d82523d5f602084013e612381565b606091505b50915091506123928783838761239f565b925050505b949350505050565b6060831561240d5782515f03612406576001600160a01b0385163b6124065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f53565b5081612397565b61239783838151156124225781518083602001fd5b8060405162461bcd60e51b8152600401610f53919061257a565b6001600160a01b0381168114611d09575f5ffd5b80356121a78161243c565b5f6020828403121561246b575f5ffd5b81356122bf8161243c565b5f5f83601f840112612486575f5ffd5b5081356001600160401b0381111561249c575f5ffd5b6020830191508360208260051b85010111156124b6575f5ffd5b9250929050565b5f5f5f5f606085870312156124d0575f5ffd5b84356124db8161243c565b935060208501356124eb8161243c565b925060408501356001600160401b03811115612505575f5ffd5b61251187828801612476565b95989497509550505050565b80356001600160401b03811681146121a7575f5ffd5b5f60208284031215612543575f5ffd5b6122bf8261251d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6122bf602083018461254c565b5f6020828403121561259c575f5ffd5b81356001600160401b038111156125b1575f5ffd5b820160c081850312156122bf575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156125f8576125f86125c2565b60405290565b60405160c081016001600160401b03811182821017156125f8576125f86125c2565b604051601f8201601f191681016001600160401b0381118282101715612648576126486125c2565b604052919050565b5f6001600160401b03821115612668576126686125c2565b5060051b60200190565b5f5f5f5f5f60a08688031215612686575f5ffd5b85356126918161243c565b945060208601356126a18161243c565b935060408601356001600160401b038111156126bb575f5ffd5b8601601f810188136126cb575f5ffd5b80356126de6126d982612650565b612620565b8082825260208201915060208360051b85010192508a8311156126ff575f5ffd5b6020840193505b8284101561272a5783356127198161243c565b825260209384019390910190612706565b955061273c9250505060608701612450565b915061274a60808701612450565b90509295509295909350565b80356001600160801b03811681146121a7575f5ffd5b5f5f5f6060848603121561277e575f5ffd5b6127878461251d565b925061279560208501612756565b91506127a360408501612756565b90509250925092565b5f5f602083850312156127bd575f5ffd5b82356001600160401b038111156127d2575f5ffd5b6127de85828601612476565b90969095509350505050565b5f6001600160401b03821115612802576128026125c2565b50601f01601f191660200190565b5f82601f83011261281f575f5ffd5b813561282d6126d9826127ea565b818152846020838601011115612841575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f6020828403121561286d575f5ffd5b81356001600160401b03811115612882575f5ffd5b61239784828501612810565b602080825282518282018190525f918401906040840190835b818110156128ce5783516001600160a01b03168352602093840193909201916001016128a7565b509095945050505050565b5f5f5f604084860312156128eb575f5ffd5b83356128f68161243c565b925060208401356001600160401b03811115612910575f5ffd5b61291c86828701612476565b9497909650939450505050565b5f5f5f5f5f5f6080878903121561293e575f5ffd5b86356129498161243c565b955060208701356129598161243c565b945060408701356001600160401b03811115612973575f5ffd5b61297f89828a01612476565b90955093505060608701356001600160401b0381111561299d575f5ffd5b8701601f810189136129ad575f5ffd5b80356001600160401b038111156129c2575f5ffd5b8960208284010111156129d3575f5ffd5b60208201935080925050509295509295509295565b634e487b7160e01b5f52603260045260245ffd5b803563ffffffff811681146121a7575f5ffd5b5f60208284031215612a1f575f5ffd5b6122bf826129fc565b81516001600160a01b0316815260208083015163ffffffff169082015260408101611f20565b5f60208284031215612a5e575f5ffd5b81516001600160401b03811115612a73575f5ffd5b8201601f81018413612a83575f5ffd5b8051612a916126d982612650565b8082825260208201915060208360051b850101925086831115612ab2575f5ffd5b6020840193505b82841015610a4f578351612acc8161243c565b825260209384019390910190612ab9565b634e487b7160e01b5f52601160045260245ffd5b5f60018201612b0257612b02612add565b5060010190565b602080825282516040838301528051606084018190525f929190910190829060808501905b80831015612b595783516001600160a01b031682526020938401936001939093019290910190612b2e565b506001600160401b03602087015116604086015280935050505092915050565b5f60208284031215612b89575f5ffd5b81516001600160401b03811115612b9e575f5ffd5b8201601f81018413612bae575f5ffd5b8051612bbc6126d9826127ea565b818152856020838501011115612bd0575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f82601f830112612bfc575f5ffd5b8135612c0a6126d982612650565b8082825260208201915060208360061b860101925085831115612c2b575f5ffd5b602085015b83811015612c935760408188031215612c47575f5ffd5b612c4f6125d6565b8135612c5a8161243c565b815260208201356bffffffffffffffffffffffff81168114612c7a575f5ffd5b6020828101919091529084529290920191604001612c30565b5095945050505050565b5f82601f830112612cac575f5ffd5b8135612cba6126d982612650565b8082825260208201915060208360061b860101925085831115612cdb575f5ffd5b602085015b83811015612c935760408188031215612cf7575f5ffd5b612cff6125d6565b8135612d0a8161243c565b8152602082810135818301529084529290920191604001612ce0565b5f60c08236031215612d36575f5ffd5b612d3e6125fe565b82356001600160401b03811115612d53575f5ffd5b612d5f36828601612bed565b825250612d6e60208401612450565b602082015260408301356001600160401b03811115612d8b575f5ffd5b612d9736828601612c9d565b604083015250612da9606084016129fc565b6060820152612dba608084016129fc565b608082015260a08301356001600160401b03811115612dd7575f5ffd5b612de336828601612810565b60a08301525092915050565b80820180821115611f2057611f20612add565b5f8151808452602084019350602083015f5b82811015612e4757815180516001600160a01b031687526020908101518188015260409096019590910190600101612e14565b5093949350505050565b82516001600160a01b0316815260208084015163ffffffff16908201525f606082016060604084015280845180835260808501915060808160051b8601019250602086015f5b82811015612fa657868503607f190184528151805160c080885281519088018190526020909101905f9060e08901905b80831015612f0c57835180516001600160a01b031683526020908101516bffffffffffffffffffffffff16818401529093019260019290920191604090910190612ec7565b5060208401519250612f2960208a01846001600160a01b03169052565b6040840151925088810360408a0152612f428184612e02565b925050506060820151612f5d606089018263ffffffff169052565b506080820151612f75608089018263ffffffff169052565b5060a0820151915086810360a0880152612f8f818361254c565b965050506020938401939190910190600101612e97565b5092979650505050505050565b5f5f8335601e19843603018112612fc8575f5ffd5b8301803591506001600160401b03821115612fe1575f5ffd5b6020019150600681901b36038213156124b6575f5ffd5b6001600160a01b03831681526040602082018190525f906122bc9083018461254c565b5f8151808452602084019350602083015f5b82811015612e475781516001600160a01b031686526020958601959091019060010161302d565b5f6040820160018060a01b03851683526040602084015280845180835260608501915060608160051b8601019250602086015f5b82811015612fa657605f19878603018452815163ffffffff815116865260208101519050604060208701526130c0604087018261301b565b9550506020938401939190910190600101613088565b60a081525f6130e860a083018861254c565b828103602084015280875180835260208301915060208160051b84010160208a015f5b8381101561313d57601f1986840301855261312783835161254c565b602095860195909350919091019060010161310b565b50508581036040870152613151818a61254c565b94505050505061316c60608301856001600160801b03169052565b6001600160801b0383166080830152610a4f565b6001600160a01b038516815263ffffffff8416602082015260606040820181905281018290525f8360808301825b858110156131de5782356131c18161243c565b6001600160a01b03168252602092830192909101906001016131ae565b50979650505050505050565b5f602082840312156131fa575f5ffd5b81516001600160401b0381111561320f575f5ffd5b8201601f8101841361321f575f5ffd5b805161322d6126d982612650565b8082825260208201915060208360051b85010192508683111561324e575f5ffd5b6020840193505b82841015610a4f5783516132688161243c565b825260209384019390910190613255565b602080825282516001600160a01b039081168383015283820151166040808401919091528301516060808401528051608084018190525f929190910190829060a08501905b80831015612c935763ffffffff84511682526020820191506020840193506001830192506132be565b5f8235607e198336030181126132fb575f5ffd5b9190910192915050565b5f5f8335601e1984360301811261331a575f5ffd5b8301803591506001600160401b03821115613333575f5ffd5b6020019150600581901b36038213156124b6575f5ffd5b5f5f8335601e1984360301811261335f575f5ffd5b8301803591506001600160401b03821115613378575f5ffd5b6020019150368190038213156124b6575f5ffd5b6001600160a01b038381168252604060208084018290528451909216818401529083015163ffffffff16606083015282015160a060808301525f906133d460e084018261301b565b6060850151848203603f190160a08601528051808352602091820193505f9291909101905b8083101561341c57835182526020820191506020840193506001830192506133f9565b506080860151858203603f190160c0870152925061343a818461254c565b979650505050505050565b5f5f60408385031215613456575f5ffd5b825160208401519092506001600160401b03811115613473575f5ffd5b8301601f81018513613483575f5ffd5b80516134916126d982612650565b8082825260208201915060208360051b8501019250878311156134b2575f5ffd5b6020840193505b828410156134d45783518252602093840193909101906134b9565b809450505050509250929050565b6001600160a01b0383168152606081016122bf602083018480516001600160a01b0316825260209081015163ffffffff16910152565b5f60208284031215613528575f5ffd5b815180151581146122bf575f5ffd5b81810381811115611f2057611f20612add565b5f8161355857613558612add565b505f190190565b5f6020828403121561356f575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f82518060208501845e5f92019182525091905056fe68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f64617461686176656e2d78797a2f64617461686176656e2f726566732f68656164732f6d61696e2f636f6e7472616374732f6465706c6f796d656e74732f6d657461646174612e6a736f6ea2646970667358221220f2d753f61e83fc20eca23126698cafe4923848e6a10ddabf2c42664ed032459164736f6c634300081c0033000000000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "16": { - "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", - "code": "0x73e7f1725e7734ce288f8367e1bb143e90bb3f0512301460806040526004361061009b575f3560e01c80632a6c32291161006e5780632a6c322914610191578063805ce31d146101c5578063928bc49d146101db57806399056fcc146101ee578063fe61cc491461020d575f5ffd5b80630705f4651461009f57806309824a80146100c85780630b617646146100e957806326aa101f1461014a575b5f5ffd5b6100b26100ad366004611fdf565b61026c565b6040516100bf919061200a565b60405180910390f35b8180156100d3575f5ffd5b506100e76100e236600461203a565b610282565b005b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6547f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f754604080519283526001600160801b039091166020830152016100bf565b61018161015836600461203a565b6001600160a01b03165f9081525f5160206125e85f395f51905f52602052604090205460ff1690565b60405190151581526020016100bf565b6101a461019f366004611fdf565b61033b565b6040805167ffffffffffffffff9384168152929091166020830152016100bf565b6101cd61036a565b6040519081526020016100bf565b6101cd6101e936600461207c565b610380565b8180156101f9575f5ffd5b506100e76102083660046120bc565b6103e0565b61025461021b366004611fdf565b5f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016100bf565b5f5f61027783610494565b5460ff169392505050565b5f5160206125e85f395f51905f52610299826104ef565b60408051608081019091526001820154600160a01b900463ffffffff1681525f90602081016102c6610586565b815260028401546020909101906102e79086906001600160801b03166105e7565b81525f6020918201526040516001600160a01b03861681529192507ff78bb28d4b1d7da699e5c0bc2be29c2b04b5aab6aacf6298fe5304f9db9c6d7e910160405180910390a161033681610632565b505050565b5f5f5f61034784610494565b5467ffffffffffffffff6101008204811696600160481b90920416945092505050565b5f61037b610376610586565b610836565b905090565b6001600160a01b0383165f9081525f5160206125e85f395f51905f52602081905260408220805460ff166103c75760405163259ba1ad60e01b815260040160405180910390fd5b6103d461037686866108c7565b925050505b9392505050565b5f5160206125e85f395f51905f526001600160801b0382165f036104175760405163162908e360e11b815260040160405180910390fd5b6001600160a01b0387165f908152602082905260409020805460ff166104505760405163259ba1ad60e01b815260040160405180910390fd5b60018101546104745761046f61046a8989898989896109ae565b610632565b61048a565b61048a61046a82600101548a8a8a8a8a8a610b97565b5050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b03166104ea57604051636ddd9da960e01b815260040160405180910390fd5b919050565b610501816001600160a01b0316610cf9565b61051e5760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081525f5160206125e85f395f51905f5260208190526040909120805460ff168015610559575061055981610d3f565b1561057757604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b604080518082019091527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230546001600160801b031681527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23154602082015290565b60605f6105f346610d53565b5f6105fd86610dbc565b61060686610ded565b60405160200161061a959493929190612161565b60405160208183030381529060405290505b92915050565b805160408051637061726160e01b60208083019190915260e09390931b6001600160e01b031916602482015281516008818303018152602890910190915280519101205f61067f82610494565b905061068a81610e8c565b5f6106988460200151610836565b90505f84606001516001600160801b0316826106b491906121c4565b9050803410156106d757604051631c0b171360e31b815260040160405180910390fd5b60608501516001600160801b0316156107225761072285606001516001600160801b031661070f5f5160206125e85f395f51905f5290565b600101546001600160a01b031690610f08565b825461074090600160481b900467ffffffffffffffff1660016121d7565b835467ffffffffffffffff91909116600160481b0270ffffffffffffffff000000000000000000199091161783555f61077982346121f7565b9050610783610f31565b811115610794576107943382610f08565b83546040805160208101889052600160481b90920460c01b6001600160c01b031916908201525f9060480160405160208183030381529060405280519060200120905080867f7153f9357c8ea496bba60bf82e67143e27b64462b49041f8e689e1b05728f84f875f0160099054906101000a900467ffffffffffffffff168a6040015160405161082592919061220a565b60405180910390a350505050505050565b80517f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7545f917f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f691839161089c9161089791906001600160801b03166121c4565b610f3e565b90506108b0825f0154836002015483610f88565b84602001516108bf91906121c4565b949350505050565b604080518082019091525f80825260208201527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f545f5160206125e85f395f51905f5290600160a01b900463ffffffff9081169085160361093e576002810154600160801b90046001600160801b031682526109a1565b60058101546001600160801b0361010090910481169084161115610975576040516332ee86af60e11b815260040160405180910390fd5b6002810154610995908490600160801b90046001600160801b0316612250565b6001600160801b031682525b505f602082015292915050565b6109b6611f9a565b5f5160206125e85f395f51905f526001600160a01b038816156109f85760018101546109ed906001600160a01b031689898661100d565b5f6060830152610a08565b6001600160801b03831660608301525b6001810154600160a01b900463ffffffff168252610a2686856108c7565b6020830152600181015463ffffffff808816600160a01b9092041603610a9f57610a4f85611089565b15610a8657610a7c88610a61876110b2565b6002840154600160801b90046001600160801b0316866110c9565b6040830152610b38565b604051634851657960e11b815260040160405180910390fd5b836001600160801b03165f03610ac8576040516332ee86af60e11b815260040160405180910390fd5b610ad185611089565b15610b0057610a7c8887610ae4886110b2565b6002850154600160801b90046001600160801b03168888611127565b610b09856111ba565b15610a8657610a7c8887610b1c886111c2565b6002850154600160801b90046001600160801b031688886111d9565b8563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610b8492919061227d565b60405180910390a4509695505050505050565b610b9f611f9a565b5f5f5160206125e85f395f51905f52604051632770a7eb60e21b81526001600160a01b0389811660048301526001600160801b038616602483015291925090891690639dc29fac906044015f604051808303815f87803b158015610c01575f5ffd5b505af1158015610c13573d5f5f3e3d5ffd5b505050506001810154600160a01b900463ffffffff168252610c3586856108c7565b60208301525f6060830152600181015463ffffffff808816600160a01b90920416148015610c675750610c6785611089565b15610a8657610c9489610c79876110b2565b6002840154600160801b90046001600160801b031686611251565b60408301528563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610ce592919061227d565b60405180910390a450979650505050505050565b5f6001600160a01b0382163f1580159061062c5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f610d4c82600101541590565b1592915050565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051606082811b6001600160601b0319166020830152906034016040516020818303038152906040529050919050565b6eff000000ff000000ff000000ff0000600882811c9182166fff000000ff000000ff000000ff0000009390911b92831617601090811c6cff000000ff000000ff000000ff929092166dff000000ff000000ff000000ff00939093169290921790911b17602081811c6bffffffff00000000ffffffff166fffffffff00000000ffffffff000000009290911b9190911617604081811c91901b1760801b90565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff166001811115610ec457610ec4611ff6565b141580610ee657505f825460ff166001811115610ee357610ee3611ff6565b14155b15610f0457604051633ac4266d60e11b815260040160405180910390fd5b5050565b5f5f5f5f5f85875af190508061033657604051633d2cec6f60e21b815260040160405180910390fd5b5f61037b3a615208612323565b5f610f52670de0b6b3a76400005f1961234e565b821115610f7a57604051631cd951a760e01b8152600481018390526024015b60405180910390fd5b50670de0b6b3a76400000290565b5f5f5160206125e85f395f51905f5281610fa9670de0b6b3a7640000610f3e565b60058301549091505f90610fd390610fc39060ff16610f3e565b610fcd600a610f3e565b906112dd565b90505f610ff683610fea84610ff08c838d8d6113ed565b906113ed565b906113fb565b905061100181611412565b98975050505050505050565b61101f836001600160a01b0316610cf9565b61103c5760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036110655760405163162908e360e11b815260040160405180910390fd5b6110836001600160a01b03841683866001600160801b038516611425565b50505050565b5f60015b61109a602084018461236d565b60028111156110ab576110ab611ff6565b1492915050565b5f6110c06020830183612386565b61062c916123d0565b60605f6110d546610d53565b600160f81b6110e388610dbc565b5f886110ee88610ded565b6110f78a610ded565b60405160200161110e9897969594939291906123ed565b6040516020818303038152906040529050949350505050565b60605f61113346610d53565b600160f81b6111418a610dbc565b600160f81b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6111748a610ded565b61117d8a610ded565b6111868d610ded565b60405160200161119f9a9998979695949392919061245b565b60405160208183030381529060405290509695505050505050565b5f600261108d565b5f6111d06020830183612386565b61062c916124e3565b60605f6111e546610d53565b600160f81b6111f38a610dbc565b600160f91b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6112268a610ded565b61122f8a610ded565b6112388d610ded565b60405160200161119f9a9998979695949392919061252b565b60605f61125d46610d53565b600160f91b875f8861126e88610ded565b6112778a610ded565b6040516001600160f81b031998891660208201526001600160c01b031990971660218801529487166029870152602a8601939093529416604a840152604b8301939093526001600160801b0319928316606b83015291909116607b820152608b0161110e565b5f82828183036113065780156112f3575f6112fd565b670de0b6b3a76400005b9250505061062c565b670de0b6b3a7640000820361132757670de0b6b3a76400009250505061062c565b805f0361134057670de0b6b3a76400009250505061062c565b670de0b6b3a7640000810361135957849250505061062c565b670de0b6b3a764000082111561138a5761138361137e6113788761147e565b866113ed565b6115a6565b92506113e5565b5f6113aa6113a7846ec097ce7bc90715b34b9f100000000061234e565b90565b90505f6113c261137e6113bc8461147e565b886113ed565b90506113e06113a7826ec097ce7bc90715b34b9f100000000061234e565b945050505b505092915050565b5f6103d96113a784846115fa565b5f6103d96113a784670de0b6b3a7640000856116ac565b5f61062c670de0b6b3a76400008361234e565b6040516001600160a01b038085166024830152831660448201526064810182905261108390859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b17905261177b565b5f81670de0b6b3a76400008110156114ac5760405163036d32ef60e41b815260048101849052602401610f71565b5f61152e670de0b6b3a7640000830460016001600160801b03821160071b91821c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211871b91821c969096119490961792909217171791909117919091171790565b9050670de0b6b3a7640000810282821c670de0b6b3a763ffff1981016115575750949350505050565b671bc16d674ec800006706f05b59d3b200005b801561159a57670de0b6b3a7640000838002049250818310611592579283019260019290921c915b60011c61156a565b50919695505050505050565b5f81680a688906bd8affffff8111156115d55760405163b3b6ba1f60e01b815260048101849052602401610f71565b5f6115ec670de0b6b3a7640000604084901b61234e565b90506108bf6113a78261183a565b5f80805f19848609848602925082811083820303915050805f0361162b5750670de0b6b3a76400009004905061062c565b670de0b6b3a7640000811061165d57604051635173648d60e01b81526004810186905260248101859052604401610f71565b5f670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b5f80805f19858709858702925082811083820303915050805f036116e3578382816116d9576116d961233a565b04925050506103d9565b83811061171457604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610f71565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f836001600160a01b03168360405161179591906125bd565b5f604051808303815f865af19150503d805f81146117ce576040519150601f19603f3d011682016040523d82523d5f602084013e6117d3565b606091505b50915091505f8280156117fe5750815115806117fe5750818060200190518101906117fe91906125c8565b905080158061181557506001600160a01b0385163b155b156118335760405163022e258160e11b815260040160405180910390fd5b5050505050565b600160bf1b67ff000000000000008216156119475767800000000000000082161561186e5768016a09e667f3bcc9090260401c5b67400000000000000082161561188d576801306fe0a31b7152df0260401c5b6720000000000000008216156118ac576801172b83c7d517adce0260401c5b6710000000000000008216156118cb5768010b5586cf9890f62a0260401c5b6708000000000000008216156118ea576801059b0d31585743ae0260401c5b67040000000000000082161561190957680102c9a3e778060ee70260401c5b6702000000000000008216156119285768010163da9fb33356d80260401c5b67010000000000000082161561194757680100b1afa5abcbed610260401c5b66ff000000000000821615611a465766800000000000008216156119745768010058c86da1c09ea20260401c5b6640000000000000821615611992576801002c605e2e8cec500260401c5b66200000000000008216156119b057680100162f3904051fa10260401c5b66100000000000008216156119ce576801000b175effdc76ba0260401c5b66080000000000008216156119ec57680100058ba01fb9f96d0260401c5b6604000000000000821615611a0a5768010002c5cc37da94920260401c5b6602000000000000821615611a28576801000162e525ee05470260401c5b6601000000000000821615611a465768010000b17255775c040260401c5b65ff0000000000821615611b3c5765800000000000821615611a71576801000058b91b5bc9ae0260401c5b65400000000000821615611a8e57680100002c5c89d5ec6d0260401c5b65200000000000821615611aab5768010000162e43f4f8310260401c5b65100000000000821615611ac857680100000b1721bcfc9a0260401c5b65080000000000821615611ae55768010000058b90cf1e6e0260401c5b65040000000000821615611b02576801000002c5c863b73f0260401c5b65020000000000821615611b1f57680100000162e430e5a20260401c5b65010000000000821615611b3c576801000000b1721835510260401c5b64ff00000000821615611c2957648000000000821615611b6557680100000058b90c0b490260401c5b644000000000821615611b815768010000002c5c8601cc0260401c5b642000000000821615611b9d576801000000162e42fff00260401c5b641000000000821615611bb95768010000000b17217fbb0260401c5b640800000000821615611bd5576801000000058b90bfce0260401c5b640400000000821615611bf157680100000002c5c85fe30260401c5b640200000000821615611c0d5768010000000162e42ff10260401c5b640100000000821615611c2957680100000000b17217f80260401c5b63ff000000821615611d0d576380000000821615611c505768010000000058b90bfc0260401c5b6340000000821615611c6b576801000000002c5c85fe0260401c5b6320000000821615611c8657680100000000162e42ff0260401c5b6310000000821615611ca1576801000000000b17217f0260401c5b6308000000821615611cbc57680100000000058b90c00260401c5b6304000000821615611cd75768010000000002c5c8600260401c5b6302000000821615611cf2576801000000000162e4300260401c5b6301000000821615611d0d5768010000000000b172180260401c5b62ff0000821615611de85762800000821615611d32576801000000000058b90c0260401c5b62400000821615611d4c57680100000000002c5c860260401c5b62200000821615611d665768010000000000162e430260401c5b62100000821615611d8057680100000000000b17210260401c5b62080000821615611d9a5768010000000000058b910260401c5b62040000821615611db4576801000000000002c5c80260401c5b62020000821615611dce57680100000000000162e40260401c5b62010000821615611de8576801000000000000b1720260401c5b61ff00821615611eba57618000821615611e0b57680100000000000058b90260401c5b614000821615611e245768010000000000002c5d0260401c5b612000821615611e3d576801000000000000162e0260401c5b611000821615611e565768010000000000000b170260401c5b610800821615611e6f576801000000000000058c0260401c5b610400821615611e8857680100000000000002c60260401c5b610200821615611ea157680100000000000001630260401c5b610100821615611eba57680100000000000000b10260401c5b60ff821615611f83576080821615611edb57680100000000000000590260401c5b6040821615611ef3576801000000000000002c0260401c5b6020821615611f0b57680100000000000000160260401c5b6010821615611f23576801000000000000000b0260401c5b6008821615611f3b57680100000000000000060260401c5b6004821615611f5357680100000000000000030260401c5b6002821615611f6b57680100000000000000010260401c5b6001821615611f8357680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60405180608001604052805f63ffffffff168152602001611fcc60405180604001604052805f81526020015f81525090565b8152606060208201525f60409091015290565b5f60208284031215611fef575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061201e5761201e611ff6565b91905290565b80356001600160a01b03811681146104ea575f5ffd5b5f6020828403121561204a575f5ffd5b6103d982612024565b803563ffffffff811681146104ea575f5ffd5b80356001600160801b03811681146104ea575f5ffd5b5f5f5f6060848603121561208e575f5ffd5b61209784612024565b92506120a560208501612053565b91506120b360408501612066565b90509250925092565b5f5f5f5f5f5f60c087890312156120d1575f5ffd5b6120da87612024565b95506120e860208801612024565b94506120f660408801612053565b9350606087013567ffffffffffffffff811115612111575f5ffd5b87016040818a031215612122575f5ffd5b925061213060808801612066565b915061213e60a08801612066565b90509295509295509295565b5f81518060208401855e5f93019283525090919050565b6001600160f81b031986811682526001600160c01b031986166001830152841660098201525f612194600a83018561214a565b6001600160801b03199390931683525050601001949350505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561062c5761062c6121b0565b67ffffffffffffffff818116838216019081111561062c5761062c6121b0565b8181038181111561062c5761062c6121b0565b67ffffffffffffffff83168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b6001600160801b03818116838216019081111561062c5761062c6121b0565b8035600381106104ea575f5ffd5b604081525f61228b8461226f565b6003811061229b5761229b611ff6565b6040830152602084013536859003601e190181126122b7575f5ffd5b840160208101903567ffffffffffffffff8111156122d3575f5ffd5b8036038213156122e1575f5ffd5b60406060850152806080850152808260a08601375f60a0828601015260a0601f19601f830116850101925050506103d960208301846001600160801b03169052565b808202811582820484141761062c5761062c6121b0565b634e487b7160e01b5f52601260045260245ffd5b5f8261236857634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561237d575f5ffd5b6103d98261226f565b5f5f8335601e1984360301811261239b575f5ffd5b83018035915067ffffffffffffffff8211156123b5575f5ffd5b6020019150368190038213156123c9575f5ffd5b9250929050565b8035602083101561062c575f19602084900360031b1b1692915050565b6001600160f81b031989811682526001600160c01b031989166001830152871660098201525f612420600a83018861214a565b6001600160f81b0319969096168652505060018401929092526001600160801b03199081166021840152166031820152604101949350505050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61248e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b031994909416600186015260058501929092526001600160801b031990811660258501529081166035840152166045820152605501949350505050565b80356001600160601b03198116906014841015612524576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61255e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b03199490941660018601526001600160601b03199290921660058501526001600160801b031990811660198501529081166029840152166039820152604901949350505050565b5f6103d9828461214a565b5f602082840312156125d8575f5ffd5b815180151581146103d9575f5ffdfe8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22ea2646970667358221220046dc7d429ea210c611797c7b4d01fa9b6906f8c2a4299f763335c848dfa743864736f6c634300081c003300000000000000", - "storage": {} - }, - "13": { - "address": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", - "code": "0x608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f5ffd5b61006c6100673660046102d7565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c610109565b5f546001600160a01b031661007b565b61006c6100bd3660046102d7565b61011c565b6100ca61019a565b6100d3816101f3565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b61011161019a565b61011a5f610288565b565b61012461019a565b6001600160a01b03811661018e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019781610288565b50565b5f546001600160a01b0316331461011a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610185565b6001600160a01b0381163b6102665760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b6064820152608401610185565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156102e7575f5ffd5b81356001600160a01b03811681146102fd575f5ffd5b939250505056fea2646970667358221220003d7f443094069cb023dc39fb36d6ba29922db6cd9b714ea95af972fc56405e64736f6c634300081c003300000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000059b670e9fa9d0a427751af201d676719a970857b", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65" - } - }, - "17": { - "address": "0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f", - "code": "0x608060405234801561000f575f5ffd5b506004361061026b575f3560e01c80637ecebe001161014b578063ca8aa7c7116100bf578063f2fde38b11610084578063f2fde38b1461062f578063f3b4a00014610642578063f698da251461064c578063fabc1cbc14610654578063fd98042314610667578063fe243a171461067a575f5ffd5b8063ca8aa7c71461059b578063cbc2bd62146105c2578063de44acb6146105d5578063df5cf723146105f5578063e7a050aa1461061c575f5ffd5b80638da5cb5b116101105780638da5cb5b1461052b57806394f649dd1461053c578063967fc0d21461054f5780639ac01d6114610562578063b5d8b5b814610575578063c665670214610588575f5ffd5b80637ecebe001461047f578063829fca731461049e578063886f1195146104b157806388c10299146104f05780638b8aac3c14610503575f5ffd5b806350ff7225116101e25780635de08ff2116101a75780635de08ff2146103fc578063663c1de41461040f578063715018a614610431578063724af4231461043957806376fb162b1461044c5780637def15641461045f575f5ffd5b806350ff72251461037c57806354fd4d50146103a4578063595c6a67146103b95780635ac86ab7146103c15780635c975abb146103f4575f5ffd5b806332e89ace1161023357806332e89ace146102f157806336a8c500146103045780633f292b081461031a5780633fb99ca51461032f57806348825e94146103425780634b6d5d6e14610369575f5ffd5b8063136439dd1461026f5780631794bb3c146102845780632d44def6146102975780632eae418c146102bd57806331f8fb4c146102d0575b5f5ffd5b61028261027d366004612e33565b6106a4565b005b610282610292366004612e5e565b6106de565b6102aa6102a5366004612eb2565b610804565b6040519081526020015b60405180910390f35b6102826102cb366004612ef0565b6108b6565b6102e36102de366004612f3e565b610982565b6040516102b4929190612fda565b6102aa6102ff36600461304b565b610b10565b61030c610b95565b6040516102b4929190613125565b610322610cb0565b6040516102b4919061317b565b61028261033d3660046131d8565b610d98565b6102aa7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61028261037736600461321c565b610ee0565b61038f61038a366004612e5e565b61102d565b604080519283526020830191909152016102b4565b6103ac6110a1565b6040516102b49190613265565b6102826110d1565b6103e46103cf366004613277565b609854600160ff9092169190911b9081161490565b60405190151581526020016102b4565b6098546102aa565b61028261040a366004613297565b6110e5565b6103e461041d36600461321c565b60d16020525f908152604090205460ff1681565b610282611238565b6102aa610447366004612e5e565b611249565b6102aa61045a366004612eb2565b6112a6565b61047261046d366004613306565b6112f5565b6040516102b49190613320565b6102aa61048d36600461321c565b60ca6020525f908152604090205481565b6102aa6104ac366004612f3e565b611327565b6104d87f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b0390911681526020016102b4565b6104726104fe366004612f3e565b611361565b6102aa61051136600461321c565b6001600160a01b03165f90815260ce602052604090205490565b6033546001600160a01b03166104d8565b6102e361054a36600461321c565b611498565b60cb546104d8906001600160a01b031681565b6102aa610570366004613332565b61160f565b610282610583366004613297565b6116a0565b61028261059636600461321c565b6117e7565b6104d87f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b6104d86105d0366004613393565b61180a565b6105e86105e336600461321c565b61183e565b6040516102b491906133bd565b6104d87f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b6102aa61062a366004612e5e565b6118b1565b61028261063d36600461321c565b6118e4565b6104d8620e16e481565b6102aa61195a565b610282610662366004612e33565b611a13565b6102aa61067536600461321c565b611a80565b6102aa6106883660046133cf565b60cd60209081525f928352604080842090915290825290205481565b6106ac611a95565b60985481811681146106d15760405163c61dca5d60e01b815260040160405180910390fd5b6106da82611b38565b5050565b5f54610100900460ff16158080156106fc57505f54600160ff909116105b806107155750303b15801561071557505f5460ff166001145b61077d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561079e575f805461ff0019166101001790555b6107a782611b38565b6107b084611b75565b6107b983611bc6565b80156107fe575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f61080d611c2f565b6108a38484847f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e896040518263ffffffff1660e01b815260040161085f919061344f565b602060405180830381865afa15801561087a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089e919061345d565b611c88565b90506108af6001606555565b9392505050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146108ff5760405163f739589b60e01b815260040160405180910390fd5b610907611c2f565b604051636ce5768960e11b81526001600160a01b0384169063d9caed129061093790879086908690600401613478565b6020604051808303815f875af1158015610953573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610977919061349c565b506107fe6001606555565b6060805f60d7816109a061099b368990038901896134b3565b611e90565b81526020019081526020015f205f8581526020019081526020015f2090505f6109c882611ef3565b90505f81516001600160401b038111156109e4576109e4613007565b604051908082528060200260200182016040528015610a0d578160200160208202803683370190505b5090505f82516001600160401b03811115610a2a57610a2a613007565b604051908082528060200260200182016040528015610a53578160200160208202803683370190505b5090505f5b8351811015610b0057838181518110610a7357610a7361350f565b6020026020010151838281518110610a8d57610a8d61350f565b60200260200101906001600160a01b031690816001600160a01b031681525050610ad9848281518110610ac257610ac261350f565b602002602001015186611eff90919063ffffffff16565b9050828281518110610aed57610aed61350f565b6020908102919091010152600101610a58565b50909450925050505b9250929050565b5f5f610b1b81611f23565b610b23611c2f565b6001600160a01b0385165f90815260ca6020526040902054610b5486610b4d818c8c8c878c61160f565b8688611f4e565b6001600160a01b0386165f90815260ca60205260409020600182019055610b7d868a8a8a611fa0565b925050610b8a6001606555565b509695505050505050565b6060805f610ba360d461210d565b90505f816001600160401b03811115610bbe57610bbe613007565b604051908082528060200260200182016040528015610be7578160200160208202803683370190505b5090505f826001600160401b03811115610c0357610c03613007565b604051908082528060200260200182016040528015610c2c578160200160208202803683370190505b5090505f5b83811015610ca5575f5f610c4660d484612117565b9150915081858481518110610c5d57610c5d61350f565b60200260200101906001600160a01b031690816001600160a01b03168152505080848481518110610c9057610c9061350f565b60209081029190910101525050600101610c31565b509094909350915050565b60605f610cbd60d8612125565b90505f816001600160401b03811115610cd857610cd8613007565b604051908082528060200260200182016040528015610d1c57816020015b604080518082019091525f8082526020820152815260200190600190039081610cf65790505b5090505f5b82811015610d9157610d6c610d3760d88361212e565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610d7e57610d7e61350f565b6020908102919091010152600101610d21565b5092915050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610de15760405163f739589b60e01b815260040160405180910390fd5b610de9611c2f565b5f60d781610dff61099b368990038901896134b3565b815260208082019290925260409081015f90812087825290925290209050610e28818484612139565b610e455760405163ca354fa360e01b815260040160405180910390fd5b610e62610e5a61099b368890038801886134b3565b60d89061214e565b50610e978460da5f610e7c61099b368b90038b018b6134b3565b81526020019081526020015f2061214e90919063ffffffff16565b507f5f5209798bbac45a16d2dc3bc67319fab26ee00153916d6f07b69f8a134a1e8b85858585604051610ecd9493929190613523565b60405180910390a1506107fe6001606555565b610ee8611c2f565b5f610ef460d483611eff565b915050610f0260d483612159565b50604080516001600160a01b0384168152602081018390527fd9d082c3ec4f3a3ffa55c324939a06407f5fbcb87d5e0ce3b9508c92c84ed839910160405180910390a1801561101f57816001600160a01b031663d9caed12620e16e4846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbe919061345d565b846040518463ffffffff1660e01b8152600401610fdd93929190613478565b6020604051808303815f875af1158015610ff9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101d919061349c565b505b5061102a6001606555565b50565b5f80336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146110785760405163f739589b60e01b815260040160405180910390fd5b611080611c2f565b61108b85858561216d565b915091506110996001606555565b935093915050565b60606110cc7f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b905090565b6110d9611a95565b6110e35f19611b38565b565b60cb546001600160a01b03163314611110576040516320ba3ff960e21b815260040160405180910390fd5b611118611c2f565b805f5b8181101561122c5760d15f8585848181106111385761113861350f565b905060200201602081019061114d919061321c565b6001600160a01b0316815260208101919091526040015f205460ff1661122457600160d15f8686858181106111845761118461350f565b9050602002016020810190611199919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8484838181106111f3576111f361350f565b9050602002016020810190611208919061321c565b6040516001600160a01b03909116815260200160405180910390a15b60010161111b565b50506106da6001606555565b611240612312565b6110e35f611b75565b5f336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146112935760405163f739589b60e01b815260040160405180910390fd5b61129b611c2f565b6108a384848461236c565b5f806112eb8360d7836112c161099b368b90038b018b6134b3565b81526020019081526020015f205f8781526020019081526020015f20611eff90919063ffffffff16565b9695505050505050565b606061132160da5f61130f61099b368790038701876134b3565b81526020019081526020015f2061241a565b92915050565b5f6108af60d78261134061099b368890038801886134b3565b81526020019081526020015f205f8481526020019081526020015f2061210d565b606061136b611c2f565b5f6113a560d78261138461099b368990038901896134b3565b81526020019081526020015f205f8581526020019081526020015f20611ef3565b80519091505f816001600160401b038111156113c3576113c3613007565b6040519080825280602002602001820160405280156113ec578160200160208202803683370190505b5090505f5b828110156114895761146487878684815181106114105761141061350f565b60200260200101517f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e8c6040518263ffffffff1660e01b815260040161085f919061344f565b8282815181106114765761147661350f565b60209081029190910101526001016113f1565b50925050506113216001606555565b6001600160a01b0381165f90815260ce6020526040812054606091829190816001600160401b038111156114ce576114ce613007565b6040519080825280602002602001820160405280156114f7578160200160208202803683370190505b5090505f5b82811015611585576001600160a01b0386165f90815260cd6020908152604080832060ce909252822080549192918490811061153a5761153a61350f565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205482518390839081106115725761157261350f565b60209081029190910101526001016114fc565b5060ce5f866001600160a01b03166001600160a01b031681526020019081526020015f2081818054806020026020016040519081016040528092919081815260200182805480156115fd57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115df575b50505050509150935093505050915091565b604080517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922460208201526001600160a01b03808916928201929092528187166060820152908516608082015260a0810184905260c0810183905260e081018290525f90611695906101000160405160208183030381529060405280519060200120612426565b979650505050505050565b60cb546001600160a01b031633146116cb576040516320ba3ff960e21b815260040160405180910390fd5b6116d3611c2f565b805f5b8181101561122c5760d15f8585848181106116f3576116f361350f565b9050602002016020810190611708919061321c565b6001600160a01b0316815260208101919091526040015f205460ff16156117df575f60d15f86868581811061173f5761173f61350f565b9050602002016020810190611754919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba0308484838181106117ae576117ae61350f565b90506020020160208101906117c3919061321c565b6040516001600160a01b03909116815260200160405180910390a15b6001016116d6565b6117ef612312565b6117f7611c2f565b61180081611bc6565b61102a6001606555565b60ce602052815f5260405f208181548110611823575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6001600160a01b0381165f90815260ce60209081526040918290208054835181840281018401909452808452606093928301828280156118a557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611887575b50505050509050919050565b5f5f6118bc81611f23565b6118c4611c2f565b6118d033868686611fa0565b91506118dc6001606555565b509392505050565b6118ec612312565b6001600160a01b0381166119515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610774565b61102a81611b75565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6119c761246c565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611a1b6124e1565b60985480198219811614611a425760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f5f611a8d60d484611eff565b949350505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190613555565b6110e357604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b600260655403611c815760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610774565b6002606555565b5f8060d781611c9f61099b368a90038a018a6134b3565b815260208082019290925260409081015f90812088825290925281209150611cc78286611eff565b9150611cd590508286612159565b505f8115611dec57856001600160a01b031663d9caed1286886001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4d919061345d565b856040518463ffffffff1660e01b8152600401611d6c93929190613478565b6020604051808303815f875af1158015611d88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dac919061349c565b90507fe6413aa0c789e437b0a06bf64b20926584f066c79a2d8b80a759c85472f7b0af88888885604051611de39493929190613523565b60405180910390a15b5f611df684611ef3565b519050805f03611e8457611e348860da5f611e1961099b368f90038f018f6134b3565b81526020019081526020015f2061259290919063ffffffff16565b50611e5f60da5f611e4d61099b368e90038e018e6134b3565b81526020019081526020015f20612125565b5f03611e8457611e82611e7a61099b368c90038c018c6134b3565b60d890612592565b505b50979650505050505050565b5f815f0151826020015163ffffffff16604051602001611edb92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261132190613574565b60605f6108af8361259d565b5f808080611f16866001600160a01b0387166125a8565b9097909650945050505050565b609854600160ff83161b9081160361102a5760405163840a48d560e01b815260040160405180910390fd5b42811015611f6f57604051630819bdcd60e01b815260040160405180910390fd5b611f836001600160a01b03851684846125e0565b6107fe57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260d16020526040812054849060ff16611fda57604051632efd965160e11b815260040160405180910390fd5b611fef6001600160a01b038516338786612634565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303815f875af115801561203b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205f919061349c565b91505f5f61206e88888661216d565b604051631e328e7960e11b81526001600160a01b038b811660048301528a8116602483015260448201849052606482018390529294509092507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8290911690633c651cf2906084015f604051808303815f87803b1580156120ec575f5ffd5b505af11580156120fe573d5f5f3e3d5ffd5b50505050505050949350505050565b5f6113218261268c565b5f808080611f168686612696565b5f611321825490565b5f6108af83836126bf565b5f611a8d846001600160a01b038516846126e5565b5f6108af8383612701565b5f6108af836001600160a01b03841661274d565b5f806001600160a01b038516612196576040516316f2ccc960e01b815260040160405180910390fd5b825f036121b6576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038086165f90815260cd602090815260408083209388168352929052908120549081900361225c576001600160a01b0386165f90815260ce60209081526040909120541061221e576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b038681165f90815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169187169190911790555b61226684826135ab565b6001600160a01b038088165f90815260cd60209081526040808320938a16835292905281902091909155517f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62906122c290889088908890613478565b60405180910390a1959294509192505050565b60605f6122e183612769565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b031633146110e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610774565b5f815f0361238d576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038085165f90815260cd6020908152604080832093871683529290522054808311156123d357604051634b18b19360e01b815260040160405180910390fd5b6123dd83826135be565b6001600160a01b038087165f90815260cd602090815260408083209389168352929052908120829055909150819003611a8d57611a8d8585612790565b60605f6108af8361290e565b5f61242f61195a565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f6124987f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b9050805f815181106124ac576124ac61350f565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612561919061345d565b6001600160a01b0316336001600160a01b0316146110e35760405163794821ff60e01b815260040160405180910390fd5b5f6108af8383612966565b60606113218261241a565b5f8181526002830160205260408120548190806125d5576125c98585612a49565b92505f9150610b099050565b600192509050610b09565b5f5f5f6125ed8585612a54565b90925090505f816004811115612605576126056135d1565b1480156126235750856001600160a01b0316826001600160a01b0316145b806112eb57506112eb868686612a93565b6107fe846323b872dd60e01b85858560405160240161265593929190613478565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b7a565b5f61132182612125565b5f80806126a3858561212e565b5f81815260029690960160205260409095205494959350505050565b5f825f0182815481106126d4576126d461350f565b905f5260205f200154905092915050565b5f8281526002840160205260408120829055611a8d848461214e565b5f81815260018301602052604081205461274657508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611321565b505f611321565b5f81815260028301602052604081208190556108af8383612592565b5f60ff8216601f81111561132157604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b0382165f90815260ce6020526040812054905b818110156128a2576001600160a01b038481165f90815260ce60205260409020805491851691839081106127e0576127e061350f565b5f918252602090912001546001600160a01b03160361289a576001600160a01b0384165f90815260ce60205260409020805461281e906001906135be565b8154811061282e5761282e61350f565b5f9182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061286a5761286a61350f565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506128a2565b6001016127aa565b8181036128c257604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b0384165f90815260ce602052604090208054806128e8576128e86135e5565b5f8281526020902081015f1990810180546001600160a01b031916905501905550505050565b6060815f018054806020026020016040519081016040528092919081815260200182805480156118a557602002820191905f5260205f20905b8154815260200190600101908083116129475750505050509050919050565b5f8181526001830160205260408120548015612a40575f6129886001836135be565b85549091505f9061299b906001906135be565b90508181146129fa575f865f0182815481106129b9576129b961350f565b905f5260205f200154905080875f0184815481106129d9576129d961350f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612a0b57612a0b6135e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611321565b5f915050611321565b5f6108af8383612c52565b5f5f8251604103612a88576020830151604084015160608501515f1a612a7c87828585612c69565b94509450505050610b09565b505f90506002610b09565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401612abb9291906135f9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612af99190613611565b5f60405180830381855afa9150503d805f8114612b31576040519150601f19603f3d011682016040523d82523d5f602084013e612b36565b606091505b5091509150818015612b4a57506020815110155b80156112eb57508051630b135d3f60e11b90612b6f908301602090810190840161349c565b149695505050505050565b5f612bce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d269092919063ffffffff16565b905080515f1480612bee575080806020019051810190612bee9190613555565b612c4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610774565b505050565b5f81815260018301602052604081205415156108af565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612c9e57505f90506003612d1d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612cef573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612d17575f60019250925050612d1d565b91505f90505b94509492505050565b6060611a8d84845f85855f5f866001600160a01b03168587604051612d4b9190613611565b5f6040518083038185875af1925050503d805f8114612d85576040519150601f19603f3d011682016040523d82523d5f602084013e612d8a565b606091505b50915091506116958783838760608315612e045782515f03612dfd576001600160a01b0385163b612dfd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610774565b5081611a8d565b611a8d8383815115612e195781518083602001fd5b8060405162461bcd60e51b81526004016107749190613265565b5f60208284031215612e43575f5ffd5b5035919050565b6001600160a01b038116811461102a575f5ffd5b5f5f5f60608486031215612e70575f5ffd5b8335612e7b81612e4a565b92506020840135612e8b81612e4a565b929592945050506040919091013590565b5f60408284031215612eac575f5ffd5b50919050565b5f5f5f60808486031215612ec4575f5ffd5b612ece8585612e9c565b9250604084013591506060840135612ee581612e4a565b809150509250925092565b5f5f5f5f60808587031215612f03575f5ffd5b8435612f0e81612e4a565b93506020850135612f1e81612e4a565b92506040850135612f2e81612e4a565b9396929550929360600135925050565b5f5f60608385031215612f4f575f5ffd5b612f598484612e9c565b946040939093013593505050565b5f8151808452602084019350602083015f5b82811015612fa05781516001600160a01b0316865260209586019590910190600101612f79565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612fa0578151865260209586019590910190600101612fbc565b604081525f612fec6040830185612f67565b8281036020840152612ffe8185612faa565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561304357613043613007565b604052919050565b5f5f5f5f5f5f60c08789031215613060575f5ffd5b863561306b81612e4a565b9550602087013561307b81612e4a565b945060408701359350606087013561309281612e4a565b92506080870135915060a08701356001600160401b038111156130b3575f5ffd5b8701601f810189136130c3575f5ffd5b80356001600160401b038111156130dc576130dc613007565b6130ef601f8201601f191660200161301b565b8181528a6020838501011115613103575f5ffd5b816020840160208301375f602083830101528093505050509295509295509295565b604080825283519082018190525f9060208501906060840190835b818110156131675783516001600160a01b0316835260209384019390920191600101613140565b505083810360208501526112eb8186612faa565b602080825282518282018190525f918401906040840190835b818110156131cd57835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101613194565b509095945050505050565b5f5f5f5f60a085870312156131eb575f5ffd5b6131f58686612e9c565b935060408501359250606085013561320c81612e4a565b9396929550929360800135925050565b5f6020828403121561322c575f5ffd5b81356108af81612e4a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6108af6020830184613237565b5f60208284031215613287575f5ffd5b813560ff811681146108af575f5ffd5b5f5f602083850312156132a8575f5ffd5b82356001600160401b038111156132bd575f5ffd5b8301601f810185136132cd575f5ffd5b80356001600160401b038111156132e2575f5ffd5b8560208260051b84010111156132f6575f5ffd5b6020919091019590945092505050565b5f60408284031215613316575f5ffd5b6108af8383612e9c565b602081525f6108af6020830184612faa565b5f5f5f5f5f5f60c08789031215613347575f5ffd5b863561335281612e4a565b9550602087013561336281612e4a565b9450604087013561337281612e4a565b959894975094956060810135955060808101359460a0909101359350915050565b5f5f604083850312156133a4575f5ffd5b82356133af81612e4a565b946020939093013593505050565b602081525f6108af6020830184612f67565b5f5f604083850312156133e0575f5ffd5b82356133eb81612e4a565b915060208301356133fb81612e4a565b809150509250929050565b803563ffffffff81168114613419575f5ffd5b919050565b803561342981612e4a565b6001600160a01b0316825263ffffffff61344560208301613406565b1660208301525050565b60408101611321828461341e565b5f6020828403121561346d575f5ffd5b81516108af81612e4a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f602082840312156134ac575f5ffd5b5051919050565b5f60408284031280156134c4575f5ffd5b50604080519081016001600160401b03811182821017156134e7576134e7613007565b60405282356134f581612e4a565b815261350360208401613406565b60208201529392505050565b634e487b7160e01b5f52603260045260245ffd5b60a08101613531828761341e565b60408201949094526001600160a01b03929092166060830152608090910152919050565b5f60208284031215613565575f5ffd5b815180151581146108af575f5ffd5b80516020808301519190811015612eac575f1960209190910360031b1b16919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561132157611321613597565b8181038181111561132157611321613597565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f611a8d6040830184613237565b5f82518060208501845e5f92019182525091905056fea26469706673582212204cd82bcd16986fe6b441e4b7c389c7f12dd596c825079086d78383b1e3d02f8364736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "30": { - "address": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000007a2088a1bfc9d81c55368ae168c2c02570cb814f", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" - } - }, - "7": { - "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", - "code": "0x73a513e6e4b8f2a923d98304ec87f64353c4d5c853301460806040526004361061009b575f3560e01c806338412ce51161006e57806338412ce514610150578063480ff0651461016f5780636f378c061461018e578063957cae98146101ad578063c7f62387146101c0575f5ffd5b806319a79b481461009f5780631b8d43b0146100c057806320606b70146100f457806330adf81f14610129575b5f5ffd5b8180156100aa575f5ffd5b506100be6100b9366004610a4d565b6101df565b005b8180156100cb575f5ffd5b506100df6100da366004610acf565b610346565b60405190151581526020015b60405180910390f35b61011b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6040519081526020016100eb565b61011b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b81801561015b575f5ffd5b506100df61016a366004610b10565b61036b565b81801561017a575f5ffd5b506100be610189366004610b10565b610384565b818015610199575f5ffd5b506100df6101a8366004610b10565b6103cf565b61011b6101bb366004610b43565b6103dc565b8180156101cb575f5ffd5b506100be6101da366004610b10565b6103ec565b834211156102005760405163068568f360e21b815260040160405180910390fd5b5f61020a8961042d565b6001600160a01b0389165f90815260028c016020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c9290919061025983610b6e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016102d292919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f6102f7828686866104dc565b9050886001600160a01b0316816001600160a01b03161461032b57604051638baa579f60e01b815260040160405180910390fd5b6103398b8a8a8a6001610502565b5050505050505050505050565b5f610353858533856105f0565b506103608585858561067c565b506001949350505050565b5f61037a843385856001610502565b5060019392505050565b5f6001600160a01b0383166103bd57604051639cfea58360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b506103ca835f84846106f8565b505050565b5f61037a8433858561067c565b5f6103e68261042d565b92915050565b5f6001600160a01b038316610420576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b506103ca83835f846106f8565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8260405161045d9190610b86565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c001604051602081830303815290604052805190602001209050919050565b5f5f5f6104eb87878787610829565b915091506104f8816108e6565b5095945050505050565b5f6001600160a01b038516610536576040516322f051b160e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b03841661056b5760405163270af7ed60e11b81526001600160a01b0390911660048201526024016103b4565b506001600160a01b038085165f908152600187016020908152604080832093871683529290522082905580156105e957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105e091815260200190565b60405180910390a35b5050505050565b6001600160a01b038084165f90815260018601602090815260408083209386168352929052908120545f198114610670578381848082101561065e57604051630c95cf2760e11b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506106708686868685035f610502565b50600195945050505050565b5f6001600160a01b0384166106b0576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b0383166106e557604051639cfea58360e01b81526001600160a01b0390911660048201526024016103b4565b506106f2848484846106f8565b50505050565b6001600160a01b0383166107245780846003015f8282546107199190610c22565b9091555061079a9050565b6001600160a01b0383165f90815260208590526040902054838183808210156107795760405163db42144d60e01b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506001600160a01b0384165f9081526020869052604090209082900390555b6001600160a01b0382166107b85760038401805482900390556107d6565b6001600160a01b0382165f9081526020859052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161081b91815260200190565b60405180910390a350505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561085e57505f905060036108dd565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108af573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166108d7575f600192509250506108dd565b91505f90505b94509492505050565b5f8160048111156108f9576108f9610c35565b036109015750565b600181600481111561091557610915610c35565b036109625760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103b4565b600281600481111561097657610976610c35565b036109c35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103b4565b60038160048111156109d7576109d7610c35565b03610a2f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103b4565b50565b80356001600160a01b0381168114610a48575f5ffd5b919050565b5f5f5f5f5f5f5f5f5f6101208a8c031215610a66575f5ffd5b8935985060208a01359750610a7d60408b01610a32565b9650610a8b60608b01610a32565b955060808a0135945060a08a0135935060c08a013560ff81168114610aae575f5ffd5b989b979a50959894979396929550929360e081013593506101000135919050565b5f5f5f5f60808587031215610ae2575f5ffd5b84359350610af260208601610a32565b9250610b0060408601610a32565b9396929550929360600135925050565b5f5f5f60608486031215610b22575f5ffd5b83359250610b3260208501610a32565b929592945050506040919091013590565b5f60208284031215610b53575f5ffd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610b7f57610b7f610b5a565b5060010190565b5f5f83545f8160011c90506001821680610ba157607f821691505b602082108103610bbf57634e487b7160e01b5f52602260045260245ffd5b808015610bd35760018114610be857610c16565b60ff1984168752821515830287019450610c16565b5f888152602090205f5b84811015610c0e57815489820152600190910190602001610bf2565b505082870194505b50929695505050505050565b808201808211156103e6576103e6610b5a565b634e487b7160e01b5f52602160045260245ffdfea26469706673582212207c195dc6c0dcf274cd547cf28d123e774d60cc2ca6ccfba9a4b62ae46152a83164736f6c634300081c003300", - "storage": {} - }, - "22": { - "address": "0x95401dc811bb5740090279Ba06cfA8fcF6113778", - "code": "0x608060405234801561000f575f5ffd5b50600436106100cb575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101a7578063a457c2d7146101af578063a9059cbb146101c2578063dd62ed3e146101d5575f5ffd5b806342966c681461015757806370a082311461016c57806379cc679014610194575f5ffd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610122578063313ce567146101355780633950935114610144575b5f5ffd5b6100d76101e8565b6040516100e49190610826565b60405180910390f35b6101006100fb366004610876565b610278565b60405190151581526020016100e4565b6002545b6040519081526020016100e4565b61010061013036600461089e565b610291565b604051601281526020016100e4565b610100610152366004610876565b6102b4565b61016a6101653660046108d8565b6102d5565b005b61011461017a3660046108ef565b6001600160a01b03165f9081526020819052604090205490565b61016a6101a2366004610876565b6102e2565b6100d76102fb565b6101006101bd366004610876565b61030a565b6101006101d0366004610876565b610389565b6101146101e336600461090f565b610396565b6060600380546101f790610940565b80601f016020809104026020016040519081016040528092919081815260200182805461022390610940565b801561026e5780601f106102455761010080835404028352916020019161026e565b820191905f5260205f20905b81548152906001019060200180831161025157829003601f168201915b5050505050905090565b5f336102858185856103c0565b60019150505b92915050565b5f3361029e8582856104e4565b6102a985858561055c565b506001949350505050565b5f336102858185856102c68383610396565b6102d09190610978565b6103c0565b6102df33826106fe565b50565b6102ed8233836104e4565b6102f782826106fe565b5050565b6060600480546101f790610940565b5f33816103178286610396565b90508381101561037c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102a982868684036103c0565b5f3361028581858561055c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610373565b6001600160a01b0382166104835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610373565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6104ef8484610396565b90505f19811461055657818110156105495760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610373565b61055684848484036103c0565b50505050565b6001600160a01b0383166105c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610373565b6001600160a01b0382166106225760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610373565b6001600160a01b0383165f90815260208190526040902054818110156106995760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610373565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610556565b6001600160a01b03821661075e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610373565b6001600160a01b0382165f90815260208190526040902054818110156107d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610373565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016104d7565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610871575f5ffd5b919050565b5f5f60408385031215610887575f5ffd5b6108908361085b565b946020939093013593505050565b5f5f5f606084860312156108b0575f5ffd5b6108b98461085b565b92506108c76020850161085b565b929592945050506040919091013590565b5f602082840312156108e8575f5ffd5b5035919050565b5f602082840312156108ff575f5ffd5b6109088261085b565b9392505050565b5f5f60408385031215610920575f5ffd5b6109298361085b565b91506109376020840161085b565b90509250929050565b600181811c9082168061095457607f821691505b60208210810361097257634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561028b57634e487b7160e01b5f52601160045260245ffdfea26469706673582212200294a24180b18f81e47bb4c278ebbaa0cad18043e20afac6f0159b7940a7867a64736f6c634300081c003300", - "storage": { - "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x0000000000000000000000000000000000000000000069e10de76676d0800000", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x54657374546f6b656e0000000000000000000000000000000000000000000012", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x5445535400000000000000000000000000000000000000000000000000000008", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "0xd19bcde47e0ffe1c643525c3cff070e266ec404a07f499b41fcbc480ff16fff7": "0x0000000000000000000000000000000000000000000069e10de76676d0800000" - } - }, - "8": { - "address": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF", - "code": "0x60806040526004361061003e575f3560e01c806305b1137b1461004257806325ccedec14610063578063c6b295c114610082578063d0e30db014610061575b5f5ffd5b34801561004d575f5ffd5b5061006161005c36600461025e565b6100a1565b005b34801561006e575f5ffd5b5061006161007d366004610288565b6100b8565b34801561008d575f5ffd5b5061006161009c3660046102ef565b6100da565b6100b46001600160a01b038316826100f7565b5050565b6100d56001600160a01b038416836001600160801b038416610120565b505050565b5f6100e6848484610171565b9050806100f1575f5ffd5b50505050565b5f5f5f5f5f85875af19050806100d557604051633d2cec6f60e21b815260040160405180910390fd5b6040516001600160a01b0383166024820152604481018290526100d590849060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610188565b5f5f5f5f85516020870186895af195945050505050565b5f5f836001600160a01b0316836040516101a291906103be565b5f604051808303815f865af19150503d805f81146101db576040519150601f19603f3d011682016040523d82523d5f602084013e6101e0565b606091505b50915091505f82801561020b57508151158061020b57508180602001905181019061020b91906103d4565b905080158061022257506001600160a01b0385163b155b156102405760405163022e258160e11b815260040160405180910390fd5b5050505050565b6001600160a01b038116811461025b575f5ffd5b50565b5f5f6040838503121561026f575f5ffd5b823561027a81610247565b946020939093013593505050565b5f5f5f6060848603121561029a575f5ffd5b83356102a581610247565b925060208401356102b581610247565b915060408401356001600160801b03811681146102d0575f5ffd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610301575f5ffd5b833561030c81610247565b9250602084013567ffffffffffffffff811115610327575f5ffd5b8401601f81018613610337575f5ffd5b803567ffffffffffffffff811115610351576103516102db565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610380576103806102db565b604052818152828201602001881015610397575f5ffd5b816020840160208301375f9181016020019190915293969395505050506040919091013590565b5f82518060208501845e5f920191825250919050565b5f602082840312156103e4575f5ffd5b815180151581146103f3575f5ffd5b939250505056fea2646970667358221220590055fea5441ad6e827390b16005643886d2dc4ffe2b97b43ed3ab207076ab664736f6c634300081c003300", - "storage": {} - }, - "46": { - "address": "0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000002bae": "0x013143621357a6c866d5bbaf34bddf89b3ddbc9cca32e9fc3b5e14617da9fafa", - "0x0000000000000000000000000000000000000000000000000000000000000b84": "0x000000000000000000000000000000000000000000000000000000006996deb3", - "0x0000000000000000000000000000000000000000000000000000000000000ba0": "0x000000000000000000000000000000000000000000000000000000006996decf", - "0x0000000000000000000000000000000000000000000000000000000000000ba3": "0x000000000000000000000000000000000000000000000000000000006996ded2", - "0x0000000000000000000000000000000000000000000000000000000000002ba1": "0x2e9771cb2c8315954b0a3baa48230d56a32c1453e89da9f6e6ed700ed38491b9", - "0x0000000000000000000000000000000000000000000000000000000000000ba2": "0x000000000000000000000000000000000000000000000000000000006996ded1", - "0x0000000000000000000000000000000000000000000000000000000000000b9c": "0x000000000000000000000000000000000000000000000000000000006996decb", - "0x0000000000000000000000000000000000000000000000000000000000000b99": "0x000000000000000000000000000000000000000000000000000000006996dec8", - "0x0000000000000000000000000000000000000000000000000000000000000b8b": "0x000000000000000000000000000000000000000000000000000000006996deba", - "0x0000000000000000000000000000000000000000000000000000000000000bbc": "0x000000000000000000000000000000000000000000000000000000006996deeb", - "0x0000000000000000000000000000000000000000000000000000000000002bab": "0xe5256927757b1a48708892b9bd56eefde21c0b20c2978f1ec88567daaafaa100", - "0x0000000000000000000000000000000000000000000000000000000000000b8f": "0x000000000000000000000000000000000000000000000000000000006996debe", - "0x0000000000000000000000000000000000000000000000000000000000000ba9": "0x000000000000000000000000000000000000000000000000000000006996ded8", - "0x0000000000000000000000000000000000000000000000000000000000002b96": "0xfbe41eb97985947f4b2a277a4eb48816d403480e0d9f9c12a0abdae8b8a88200", - "0x0000000000000000000000000000000000000000000000000000000000000bbd": "0x000000000000000000000000000000000000000000000000000000006996deec", - "0x0000000000000000000000000000000000000000000000000000000000002b9d": "0xb5da766f82c130fdab039ab830e00c8f5f28b236231813695120eb3caff59f43", - "0x0000000000000000000000000000000000000000000000000000000000002baf": "0x3ae9f760b6ef47d5fc8da9bbf4cb32867b8d9e992f83bbb03eaff446a825851d", - "0x0000000000000000000000000000000000000000000000000000000000002b9c": "0x2b8b4392d14069277a410bc7afd8e2138e3f0e6d4bc307186d0cf626c19906b1", - "0x0000000000000000000000000000000000000000000000000000000000000b97": "0x000000000000000000000000000000000000000000000000000000006996dec6", - "0x0000000000000000000000000000000000000000000000000000000000002bb8": "0xe25943b5fe74ae6a7c2e17baed8c51cee99df310591f3a679471af7c02481ab6", - "0x0000000000000000000000000000000000000000000000000000000000000b96": "0x000000000000000000000000000000000000000000000000000000006996dec5", - "0x0000000000000000000000000000000000000000000000000000000000002b9f": "0x923982dc926eb19875711b2834fbaf2902d19b04069b2e9ec7626ac3c35545fe", - "0x0000000000000000000000000000000000000000000000000000000000002b99": "0x03d54c8eaaf0c9ba640b6e31574dd51beb06a9403f91a0690cfbb0843ee22531", - "0x0000000000000000000000000000000000000000000000000000000000002ba7": "0xf0e62d79e79f1343874b8f9219cbd8f2569858117c8d230d104066eb8dda824c", - "0x0000000000000000000000000000000000000000000000000000000000002b88": "0x943b53f4ccb848e2b1645d205fd96b17d67b26d0c97fb994dd3b58346e4e8ec0", - "0x0000000000000000000000000000000000000000000000000000000000000b9e": "0x000000000000000000000000000000000000000000000000000000006996decd", - "0x0000000000000000000000000000000000000000000000000000000000000ba5": "0x000000000000000000000000000000000000000000000000000000006996ded4", - "0x0000000000000000000000000000000000000000000000000000000000002b9e": "0xe971f8a7edfad586ce3a05162edef144c81364d1b89466dac58e5914436c6e73", - "0x0000000000000000000000000000000000000000000000000000000000002bb7": "0x573c8cb85fb755d4d930d5ecc9e809290af15997394aaaaa39430ae24cb0299e", - "0x0000000000000000000000000000000000000000000000000000000000002bba": "0xbb9521d8b0161bb395f705fe06127681562a94eb780ea95b9407dd9fa7319f05", - "0x0000000000000000000000000000000000000000000000000000000000000ba1": "0x000000000000000000000000000000000000000000000000000000006996ded0", - "0x0000000000000000000000000000000000000000000000000000000000000b8d": "0x000000000000000000000000000000000000000000000000000000006996debc", - "0x0000000000000000000000000000000000000000000000000000000000000bb7": "0x000000000000000000000000000000000000000000000000000000006996dee6", - "0x0000000000000000000000000000000000000000000000000000000000002baa": "0x1c092f8c915f2a99ac2dd969e8c92730e00640c14ff6d6caed7a677e44ad8f34", - "0x0000000000000000000000000000000000000000000000000000000000002b8f": "0x4f4d7be18441544daf6cfd7ef0f219b79e901360de5d1a1cbbf7f8b666330bd8", - "0x0000000000000000000000000000000000000000000000000000000000002bad": "0xeff02d88816f2ee0aa602b6cdd28ea34b6b32a2ac5640aa2e80781751a837a97", - "0x0000000000000000000000000000000000000000000000000000000000000b8e": "0x000000000000000000000000000000000000000000000000000000006996debd", - "0x0000000000000000000000000000000000000000000000000000000000002b84": "0x418764a81d87dc6ca02842439aa19e7883036856f74c8d4634a88a2aac09280b", - "0x0000000000000000000000000000000000000000000000000000000000000bad": "0x000000000000000000000000000000000000000000000000000000006996dedc", - "0x0000000000000000000000000000000000000000000000000000000000002bbc": "0x8122ac36aa5cf6f5286329275d3f58a992778800d5de29f6d13c376a7b96ff33", - "0x0000000000000000000000000000000000000000000000000000000000000b83": "0x000000000000000000000000000000000000000000000000000000006996deb2", - "0x0000000000000000000000000000000000000000000000000000000000000b95": "0x000000000000000000000000000000000000000000000000000000006996dec4", - "0x0000000000000000000000000000000000000000000000000000000000002b8e": "0x703e7e8f9ed7f00c74b03b8c6a4ee925613a4425a36b9696274845f0b9e825c7", - "0x0000000000000000000000000000000000000000000000000000000000002b85": "0x2559e98c9feaca23ca0e1714dcf8d760b4dda1a3798d34d3c43eace383a5eb17", - "0x0000000000000000000000000000000000000000000000000000000000002bb4": "0x90c7488e9643ece8cfe39656406948f2c94358ae20cc514e849deb52566d20f3", - "0x0000000000000000000000000000000000000000000000000000000000000bbb": "0x000000000000000000000000000000000000000000000000000000006996deea", - "0x0000000000000000000000000000000000000000000000000000000000002bac": "0x60fdcd5d88cc53ccaaa2b61521a5a8d18b0ff40bef93b0419acfbbfee2221b28", - "0x0000000000000000000000000000000000000000000000000000000000000ba4": "0x000000000000000000000000000000000000000000000000000000006996ded3", - "0x0000000000000000000000000000000000000000000000000000000000002b94": "0x0a4e0d64c6aa5febfe3f2c1f03a6a9f59577163feb34ca67d11ac0319a39660b", - "0x0000000000000000000000000000000000000000000000000000000000002ba3": "0x07444f57c3d135ca303a7722d5a26b4b8e0a4cb989ccf51213022cf727d98aa5", - "0x0000000000000000000000000000000000000000000000000000000000000b87": "0x000000000000000000000000000000000000000000000000000000006996deb6", - "0x0000000000000000000000000000000000000000000000000000000000000b9a": "0x000000000000000000000000000000000000000000000000000000006996dec9", - "0x0000000000000000000000000000000000000000000000000000000000002bb9": "0xd3f84ca8762de2bd529f5e9a729b168e48f3a89dc9998b674e119199cfbc6a14", - "0x0000000000000000000000000000000000000000000000000000000000000b82": "0x000000000000000000000000000000000000000000000000000000006996deb1", - "0x0000000000000000000000000000000000000000000000000000000000000bb2": "0x000000000000000000000000000000000000000000000000000000006996dee1", - "0x0000000000000000000000000000000000000000000000000000000000002b98": "0x047c17a67efbe52cae74b4badc448ac1cecaf5a699b573b9033df04d736b136a", - "0x0000000000000000000000000000000000000000000000000000000000002ba2": "0x78615f50f4cf269e50320ae96ea074f4cd90b068df1c4f9b3f1d7493c8ffdf49", - "0x0000000000000000000000000000000000000000000000000000000000000b9d": "0x000000000000000000000000000000000000000000000000000000006996decc", - "0x0000000000000000000000000000000000000000000000000000000000000baa": "0x000000000000000000000000000000000000000000000000000000006996ded9", - "0x0000000000000000000000000000000000000000000000000000000000002b90": "0xb1c528c18eee0b1197e33a1eb18a47501860f337f3b0c73881e108610f9e57b8", - "0x0000000000000000000000000000000000000000000000000000000000002ba9": "0xfcbf7334b93059a7b01ab6ff30ca16b91a761210bdaaf985e093713ed4d82277", - "0x0000000000000000000000000000000000000000000000000000000000002b86": "0x9072cf9fa53aa6cf22328a615fc501d23a81a03eb334b3c43d7212ca313c3455", - "0x0000000000000000000000000000000000000000000000000000000000000bb3": "0x000000000000000000000000000000000000000000000000000000006996dee2", - "0x0000000000000000000000000000000000000000000000000000000000000b93": "0x000000000000000000000000000000000000000000000000000000006996dec2", - "0x0000000000000000000000000000000000000000000000000000000000000bb5": "0x000000000000000000000000000000000000000000000000000000006996dee4", - "0x0000000000000000000000000000000000000000000000000000000000002b95": "0xb42e811970dc2eb62763fe7ccd5bb4f85e7ca58835efc638d6c89cff52b94347", - "0x0000000000000000000000000000000000000000000000000000000000000bab": "0x000000000000000000000000000000000000000000000000000000006996deda", - "0x0000000000000000000000000000000000000000000000000000000000002bb3": "0x92f22703fbce0fdbba3ce2c3ab4e864377c2816be0e7feff2159a367c134e93d", - "0x0000000000000000000000000000000000000000000000000000000000002b82": "0xbd52cf58b6965d4f2626d7e0f551be217168f501c1ab7e81a5caece6345917e8", - "0x0000000000000000000000000000000000000000000000000000000000000bb0": "0x000000000000000000000000000000000000000000000000000000006996dedf", - "0x0000000000000000000000000000000000000000000000000000000000000baf": "0x000000000000000000000000000000000000000000000000000000006996dede", - "0x0000000000000000000000000000000000000000000000000000000000000b98": "0x000000000000000000000000000000000000000000000000000000006996dec7", - "0x0000000000000000000000000000000000000000000000000000000000000bb1": "0x000000000000000000000000000000000000000000000000000000006996dee0", - "0x0000000000000000000000000000000000000000000000000000000000002ba8": "0x21868f8a9eec73ca9b4c36969ea0a3a44961fb8d637aa48c0d9a0dc97aab7d40", - "0x0000000000000000000000000000000000000000000000000000000000000bb9": "0x000000000000000000000000000000000000000000000000000000006996dee8", - "0x0000000000000000000000000000000000000000000000000000000000002b89": "0xfbc5f97c6af8a08336a5277cf4113c7b40822f71831be374705fe7da8b062d46", - "0x0000000000000000000000000000000000000000000000000000000000002ba6": "0x501ad9beb02d17bef50e05f2fd1d8d37fbcaa44d04f22befef72ed3ca0e14264", - "0x0000000000000000000000000000000000000000000000000000000000000b8a": "0x000000000000000000000000000000000000000000000000000000006996deb9", - "0x0000000000000000000000000000000000000000000000000000000000002bb0": "0xf6af3e502485a5689526f675ade1aff7c356de588915d0dba7986d4605d972e3", - "0x0000000000000000000000000000000000000000000000000000000000000b9b": "0x000000000000000000000000000000000000000000000000000000006996deca", - "0x0000000000000000000000000000000000000000000000000000000000000bb8": "0x000000000000000000000000000000000000000000000000000000006996dee7", - "0x0000000000000000000000000000000000000000000000000000000000000b85": "0x000000000000000000000000000000000000000000000000000000006996deb4", - "0x0000000000000000000000000000000000000000000000000000000000002b91": "0xf58e21d958a14b7c84065dd653b2ea054172db0a26504be4e4301d75ae1dce8f", - "0x0000000000000000000000000000000000000000000000000000000000000b89": "0x000000000000000000000000000000000000000000000000000000006996deb8", - "0x0000000000000000000000000000000000000000000000000000000000000b8c": "0x000000000000000000000000000000000000000000000000000000006996debb", - "0x0000000000000000000000000000000000000000000000000000000000002b8a": "0x8fdec9a8b4e06597def0dd6e528689cc4dd9a4dba97c9cdd84c1ea3fdfd0ced1", - "0x0000000000000000000000000000000000000000000000000000000000000bae": "0x000000000000000000000000000000000000000000000000000000006996dedd", - "0x0000000000000000000000000000000000000000000000000000000000000b9f": "0x000000000000000000000000000000000000000000000000000000006996dece", - "0x0000000000000000000000000000000000000000000000000000000000000b90": "0x000000000000000000000000000000000000000000000000000000006996debf", - "0x0000000000000000000000000000000000000000000000000000000000002b87": "0xcf42420b42f6e5c3923e6fd7f7ff68e328067b07f32b343688673f3c078b7032", - "0x0000000000000000000000000000000000000000000000000000000000002b81": "0x7200c38f66cc9468617329d250d4a79405f080688af6c6cccfc4ae8ed1fadce8", - "0x0000000000000000000000000000000000000000000000000000000000002b8b": "0xe96cb76a6b2045b0eb786fae4fd228c09a5c3955f02b8694031f036d81812e10", - "0x0000000000000000000000000000000000000000000000000000000000002ba4": "0x78a02b8a032702ff305d24e45a18105bc05a091c15ca162f6ce5cd5b5e470fe6", - "0x0000000000000000000000000000000000000000000000000000000000002bb2": "0x2a8edc54e58672669066a0f9c10f44b18b7b65ee43329188d2c8fc9145e3b4fe", - "0x0000000000000000000000000000000000000000000000000000000000002bb6": "0x98a89d4238ee3c4d745739b909c38c44a4eca1e43de327567b2af94b0f3983e5", - "0x0000000000000000000000000000000000000000000000000000000000002b92": "0x20e4ca71a63755f79aec716d0b3ccdda7c9959de59b276799fa0a0cd191ffd8e", - "0x0000000000000000000000000000000000000000000000000000000000002ba5": "0xa649c3ae0ea8e82da84e4e8137746a7d862a7c3a42027119d8799c71b26dcde6", - "0x0000000000000000000000000000000000000000000000000000000000002bbb": "0x25520f860f401f15c58f23d456ae9685c806cfeeed3fac11c302f0120bc9630f", - "0x0000000000000000000000000000000000000000000000000000000000000ba8": "0x000000000000000000000000000000000000000000000000000000006996ded7", - "0x0000000000000000000000000000000000000000000000000000000000002b97": "0x6a287faae9cf49a828622ce375b2931bd32b7dbc665126c2fa8363d19fc5fe3d", - "0x0000000000000000000000000000000000000000000000000000000000002b93": "0xb4e5ed6c81e28cdf75092064069a29e7bf55fc459eb7c21961bc5de60d1c5783", - "0x0000000000000000000000000000000000000000000000000000000000000ba6": "0x000000000000000000000000000000000000000000000000000000006996ded5", - "0x0000000000000000000000000000000000000000000000000000000000002bb5": "0xd38da1bed3a83de8306e8683b1016a755db8d5bfc68d8a56f92ea38dc7c99f30", - "0x0000000000000000000000000000000000000000000000000000000000000b88": "0x000000000000000000000000000000000000000000000000000000006996deb7", - "0x0000000000000000000000000000000000000000000000000000000000000b92": "0x000000000000000000000000000000000000000000000000000000006996dec1", - "0x0000000000000000000000000000000000000000000000000000000000002b83": "0x7918e75e8c7c87b0feffec350cc4379ba87ee2e4b6b9c188ca07b771bb66edb1", - "0x0000000000000000000000000000000000000000000000000000000000002b8c": "0xf94dc2ed7c82cfde5979714136b5f4707e21c1da79e3a5450799cafbf7a1cb02", - "0x0000000000000000000000000000000000000000000000000000000000002bb1": "0x2bc43a0a6fcafd6819cf0be680a8af05151ff9e0765eeab626d895e51da29502", - "0x0000000000000000000000000000000000000000000000000000000000000bba": "0x000000000000000000000000000000000000000000000000000000006996dee9", - "0x0000000000000000000000000000000000000000000000000000000000002b9b": "0xcdd691c8d9aa04e4cf558a64aea21194eea382bf60024a20c0d389fa89d38792", - "0x0000000000000000000000000000000000000000000000000000000000000bac": "0x000000000000000000000000000000000000000000000000000000006996dedb", - "0x0000000000000000000000000000000000000000000000000000000000000b91": "0x000000000000000000000000000000000000000000000000000000006996dec0", - "0x0000000000000000000000000000000000000000000000000000000000002b9a": "0xb5c663fef1cdea8f390bba29571ad6df44a49b5eb25206ccd3aed558f3c6d09e", - "0x0000000000000000000000000000000000000000000000000000000000002ba0": "0x950a468a82d30eedbca8b64def34ef6b6393dbb9b6ba1900c11d9e793e65ac89", - "0x0000000000000000000000000000000000000000000000000000000000000bb6": "0x000000000000000000000000000000000000000000000000000000006996dee5", - "0x0000000000000000000000000000000000000000000000000000000000000ba7": "0x000000000000000000000000000000000000000000000000000000006996ded6", - "0x0000000000000000000000000000000000000000000000000000000000000bb4": "0x000000000000000000000000000000000000000000000000000000006996dee3", - "0x0000000000000000000000000000000000000000000000000000000000000b86": "0x000000000000000000000000000000000000000000000000000000006996deb5", - "0x0000000000000000000000000000000000000000000000000000000000000b94": "0x000000000000000000000000000000000000000000000000000000006996dec3", - "0x0000000000000000000000000000000000000000000000000000000000002b8d": "0xe7148f0b5ddeb0854466cbc0d148d12f74eb22024d93f658bfc9da71c3fff915" - } - }, - "19": { - "address": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", - "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c8063a1060c88116100bf578063dce974b911610079578063dce974b914610334578063df5cf7231461035b578063ec76f44214610382578063f2fde38b146103b5578063f698da25146103c8578063fabc1cbc146103d0575f5ffd5b8063a1060c881461029a578063a364f4da146102ad578063a98fb355146102c0578063c825fe68146102d3578063cd6dc687146102fa578063d79aceab1461030d575f5ffd5b80635ac86ab7116101105780635ac86ab7146101fa5780635c975abb1461021d578063715018a61461022f578063886f1195146102375780638da5cb5b146102765780639926ee7d14610287575f5ffd5b8063136439dd1461014c578063374823b51461016157806349075da3146101a357806354fd4d50146101dd578063595c6a67146101f2575b5f5ffd5b61015f61015a3660046110dc565b6103e3565b005b61018e61016f366004611107565b609960209081525f928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b6101d06101b1366004611131565b609860209081525f928352604080842090915290825290205460ff1681565b60405161019a919061117c565b6101e561041d565b60405161019a91906111d0565b61015f61044d565b61018e6102083660046111e9565b606654600160ff9092169190911b9081161490565b6066545b60405190815260200161019a565b61015f610461565b61025e7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b03909116815260200161019a565b6033546001600160a01b031661025e565b61015f610295366004611277565b610472565b6102216102a8366004611364565b610673565b61015f6102bb3660046113a7565b6106f2565b61015f6102ce3660046113c2565b6107b9565b6102217f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61015f610308366004611107565b610800565b6102217fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102217f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b61025e7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b61015f6103903660046110dc565b335f90815260996020908152604080832093835292905220805460ff19166001179055565b61015f6103c33660046113a7565b61091c565b610221610995565b61015f6103de3660046110dc565b610a4e565b6103eb610ab4565b60665481811681146104105760405163c61dca5d60e01b815260040160405180910390fd5b61041982610b57565b5050565b60606104487f76312e302e300000000000000000000000000000000000000000000000000006610b94565b905090565b610455610ab4565b61045f5f19610b57565b565b610469610bd1565b61045f5f610c2b565b5f61047c81610c7c565b6001335f9081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156104b5576104b5611168565b036104d357604051631aa528bb60e11b815260040160405180910390fd5b6001600160a01b0383165f90815260996020908152604080832085830151845290915290205460ff161561051a57604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa15801561057e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a29190611430565b6105bf57604051639f88c8af60e01b815260040160405180910390fd5b6105e3836105d7853386602001518760400151610673565b84516040860151610ca7565b6001600160a01b0383165f81815260996020908152604080832086830151845282528083208054600160ff19918216811790925533808652609885528386208787529094529382902080549094168117909355519092917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610666919061117c565b60405180910390a3505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f906106e99060c00160405160208183030381529060405280519060200120610cff565b95945050505050565b5f6106fc81610c7c565b6001335f9081526098602090815260408083206001600160a01b038716845290915290205460ff16600181111561073557610735611168565b14610753576040516352df45c960e01b815260040160405180910390fd5b335f8181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916107ad919061117c565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371383836040516107f492919061144f565b60405180910390a25050565b5f54610100900460ff161580801561081e57505f54600160ff909116105b806108375750303b15801561083757505f5460ff166001145b61089f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156108c0575f805461ff0019166101001790555b6108c982610b57565b6108d283610c2b565b8015610917575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610924610bd1565b6001600160a01b0381166109895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b61099281610c2b565b50565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea610a02610d45565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610a56610dba565b60665480198219811614610a7d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107f4565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190611430565b61045f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b60605f610ba083610e6b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b0316331461045f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610896565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606654600160ff83161b908116036109925760405163840a48d560e01b815260040160405180910390fd5b42811015610cc857604051630819bdcd60e01b815260040160405180910390fd5b610cdc6001600160a01b0385168484610e98565b610cf957604051638baa579f60e01b815260040160405180910390fd5b50505050565b5f610d08610995565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f610d717f76312e302e300000000000000000000000000000000000000000000000000006610b94565b9050805f81518110610d8557610d8561147d565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3a9190611491565b6001600160a01b0316336001600160a01b03161461045f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610e9257604051632cd44ac360e21b815260040160405180910390fd5b92915050565b5f5f5f610ea58585610ef6565b90925090505f816004811115610ebd57610ebd611168565b148015610edb5750856001600160a01b0316826001600160a01b0316145b80610eec5750610eec868686610f38565b9695505050505050565b5f5f8251604103610f2a576020830151604084015160608501515f1a610f1e8782858561101f565b94509450505050610f31565b505f905060025b9250929050565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401610f609291906114ac565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f9e91906114cc565b5f60405180830381855afa9150503d805f8114610fd6576040519150601f19603f3d011682016040523d82523d5f602084013e610fdb565b606091505b5091509150818015610fef57506020815110155b8015610eec57508051630b135d3f60e11b9061101490830160209081019084016114e2565b149695505050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561105457505f905060036110d3565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156110a5573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166110cd575f600192509250506110d3565b91505f90505b94509492505050565b5f602082840312156110ec575f5ffd5b5035919050565b6001600160a01b0381168114610992575f5ffd5b5f5f60408385031215611118575f5ffd5b8235611123816110f3565b946020939093013593505050565b5f5f60408385031215611142575f5ffd5b823561114d816110f3565b9150602083013561115d816110f3565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061119c57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111e260208301846111a2565b9392505050565b5f602082840312156111f9575f5ffd5b813560ff811681146111e2575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561124057611240611209565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561126f5761126f611209565b604052919050565b5f5f60408385031215611288575f5ffd5b8235611293816110f3565b9150602083013567ffffffffffffffff8111156112ae575f5ffd5b8301606081860312156112bf575f5ffd5b6112c761121d565b813567ffffffffffffffff8111156112dd575f5ffd5b8201601f810187136112ed575f5ffd5b803567ffffffffffffffff81111561130757611307611209565b61131a601f8201601f1916602001611246565b81815288602083850101111561132e575f5ffd5b816020840160208301375f6020928201830152835283810135908301525060409182013591810191909152919491935090915050565b5f5f5f5f60808587031215611377575f5ffd5b8435611382816110f3565b93506020850135611392816110f3565b93969395505050506040820135916060013590565b5f602082840312156113b7575f5ffd5b81356111e2816110f3565b5f5f602083850312156113d3575f5ffd5b823567ffffffffffffffff8111156113e9575f5ffd5b8301601f810185136113f9575f5ffd5b803567ffffffffffffffff81111561140f575f5ffd5b856020828401011115611420575f5ffd5b6020919091019590945092505050565b5f60208284031215611440575f5ffd5b815180151581146111e2575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156114a1575f5ffd5b81516111e2816110f3565b828152604060208201525f6114c460408301846111a2565b949350505050565b5f82518060208501845e5f920191825250919050565b5f602082840312156114f2575f5ffd5b505191905056fea264697066735822122073ac1b7fd03357e63bd1ea96fdd2a71a85f098cadb19e9ccc9fc7028bc1c9a9664736f6c634300081c00330000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "6": { - "address": "0x0165878A594ca255338adfa4d48449f69242Eb8F", - "code": "0x730165878a594ca255338adfa4d48449f69242eb8f3014608060405260043610610034575f3560e01c8063439fab9114610038575b5f5ffd5b818015610043575f5ffd5b50610057610052366004610683565b610059565b005b5f6100827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036100a8576040516282b42960e81b815260040160405180910390fd5b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f6100d584840185610760565b8051835491925090839060ff1916600183818111156100f6576100f6610802565b02179055505f7f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f1b60405161012b90610676565b908152602001604051809103905ff08015801561014a573d5f5f3e3d5ffd5b507f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f908152600285016020908152604080832080546001600160a01b0319166001600160a01b0386169081179091558151608081018352848152808401859052808301859052606081019190915260018085528089019093529220825181549495509293909291839160ff19169083818111156101ea576101ea610802565b02179055506020828101518254604080860151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178355606093840151600193840180546001600160a01b0319166001600160a01b0392831617905581516080810183525f808252818501819052818401819052918716958101959095526002815287840190925290208251815491929091839160ff199091169083818111156102ae576102ae610802565b021790555060208201518154604080850151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178255606090920151600190910180546001600160a01b0319166001600160a01b03909216919091179055515f907f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b799061035290610676565b908152602001604051809103905ff080158015610371573d5f5f3e3d5ffd5b507f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b795f908152600286016020908152604080832080546001600160a01b0319166001600160a01b038616908117909155815160808101835284815280840185905280830185905260608101919091528151637061726160e01b81850152607d60e31b6024820152825180820360080181526028909101835280519084012084526001808a019093529220825181549495509293909291839160ff191690838181111561043f5761043f610802565b021790555060208201518154604084015167ffffffffffffffff908116600160481b0267ffffffffffffffff60481b19919093166101000216610100600160881b031990911617178155606090910151600190910180546001600160a01b039092166001600160a01b03199092169190911790555f6104db7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f690565b60408501518155602080860151600180840180546fffffffffffffffffffffffffffffffff19166001600160801b0393841617905560c08801516002909401939093557f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f80546001600160a01b03969096166001600160c01b031990961695909517607d60a31b1790945560a08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23155606086015160808701518516600160801b02908516177f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c2305560e08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23380546101009889015190961690970270ffffffffffffffffffffffffffffffffff1990951660ff9091161793909317909455505f80527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e9052507f8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d805460ff19169091179055505050565b61032e8061081783390190565b5f5f60208385031215610694575f5ffd5b823567ffffffffffffffff8111156106aa575f5ffd5b8301601f810185136106ba575f5ffd5b803567ffffffffffffffff8111156106d0575f5ffd5b8560208284010111156106e1575f5ffd5b6020919091019590945092505050565b604051610120810167ffffffffffffffff8111828210171561072157634e487b7160e01b5f52604160045260245ffd5b60405290565b803560028110610735575f5ffd5b919050565b80356001600160801b0381168114610735575f5ffd5b803560ff81168114610735575f5ffd5b5f610120828403128015610772575f5ffd5b5061077b6106f1565b61078483610727565b81526107926020840161073a565b6020820152604083810135908201526107ad6060840161073a565b60608201526107be6080840161073a565b608082015260a0838101359082015260c080840135908201526107e360e08401610750565b60e08201526107f5610100840161073a565b6101008201529392505050565b634e487b7160e01b5f52602160045260245ffdfe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c0033a264697066735822122048797f739f4990ae363e6737b404ae972b4684803172bd809c64956b6bae7dc264736f6c634300081c003300000000000000", - "storage": {} - }, "5": { - "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", - "code": "0x738a791620dd6260079bf849dc5567adc3f2fdc3183014608060405260043610610090575f3560e01c8063ab55562e11610063578063ab55562e146100fd578063af18d14214610105578063c82b5f451461010d578063ded905d514610115575f5ffd5b80632db726161461009457806379d0e91c146100bc5780637cb1a954146100e05780639ce504ff146100f6575b5f5ffd5b6100a76100a23660046109da565b61011c565b60405190151581526020015b60405180910390f35b6100c7600160f81b81565b6040516001600160f81b031990911681526020016100b3565b6100e8600581565b6040519081526020016100b3565b6100c75f81565b6100e8600681565b6100e8600481565b6100e8600881565b6100e85f81565b5f6101318461012b8580610a64565b84610278565b61013c57505f61026f565b6101496020840184610a82565b6020013583806020019061015d9190610a82565b351061016a57505f61026f565b5f61017e866101798680610a64565b610419565b90505f6101c7826101926020880188610a82565b356101a06020890189610a82565b602001358880602001906101b49190610a82565b6101c2906040810190610a96565b610434565b90505f6101e56101df36889003880160408901610b1d565b836104da565b90506001600160a01b03891663a401662b826102056101008a018a610a96565b8a61012001356040518563ffffffff1660e01b815260040161022a9493929190610bbc565b602060405180830381865afa158015610245573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102699190610c00565b93505050505b95945050505050565b5f5f82610285575f61028b565b600160f81b5b90505f5b61029c6080860186610a96565b905081101561040c575f6102b36080870187610a96565b838181106102c3576102c3610c1b565b90506020028101906102d59190610a82565b3514801561032157506102eb6080860186610a96565b828181106102fb576102fb610c1b565b905060200281019061030d9190610a82565b61031b906040810190610c2f565b90506021145b801561039657506001600160f81b031982166103406080870187610a96565b8381811061035057610350610c1b565b90506020028101906103629190610a82565b610370906040810190610c2f565b5f81811061038057610380610c1b565b9050013560f81c60f81b6001600160f81b031916145b80156103f457506103aa6080860186610a96565b828181106103ba576103ba610c1b565b90506020028101906103cc9190610a82565b6103da906040810190610c2f565b6103e8916001908290610c72565b6103f191610c99565b86145b1561040457600192505050610412565b60010161028f565b505f9150505b9392505050565b5f610424838361062c565b8051906020012090505b92915050565b5f85815b838110156104cf57866001166001148061045457508587600101145b1561048b5761048485858381811061046e5761046e610c1b565b90506020020135835f9182526020526040902090565b91506104b9565b6104b6828686848181106104a1576104a1610c1b565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501610438565b509695505050505050565b81515f90819060f81b6105128560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b856040015161058887606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b60605f823561063e60208501356106b8565b6040850135606086013561065d6106586080890189610a96565b6106e8565b604051602001610671959493929190610ccd565b60405160208183030381529060405290508361068d82516106b8565b826040516020016106a093929190610d00565b60405160208183030381529060405291505092915050565b606063ffffffff8211156106df57604051637404cccd60e11b815260040160405180910390fd5b61042e82610778565b60408051602081019091525f808252606091905b8381101561075c578161073186868481811061071a5761071a610c1b565b905060200281019061072c9190610a82565b6108d3565b604051602001610742929190610d24565b60408051601f1981840301815291905291506001016106fc565b50610766836106b8565b816040516020016106a0929190610d24565b6060603f8263ffffffff16116107b557604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff1611610814576107f16107dd6403fffffffc600285901b166001610d3a565b600881811b62ffff001691901c60ff161790565b60405160200161079f919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116108865761086360028363ffffffff16901b600261083f9190610d3a565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b60405160200161079f919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b16602182015260250161079f565b919050565b60608135600614806108e6575081356004145b806108f2575081356005145b1561094457813560f81b61090c6040840160208501610d62565b61092361091c6040860186610c2f565b90506106b8565b6109306040860186610c2f565b60405160200161079f959493929190610d7b565b813561097b575f61095b61091c6040850185610c2f565b6109686040850185610c2f565b60405160200161079f9493929190610dbb565b60071982350161099a57604051600160fb1b602082015260210161079f565b604051635422005560e11b815260040160405180910390fd5b80356001600160e01b0319811681146108ce575f5ffd5b80151581146109d7575f5ffd5b50565b5f5f5f5f5f60a086880312156109ee575f5ffd5b85356001600160a01b0381168114610a04575f5ffd5b9450610a12602087016109b3565b935060408601359250606086013567ffffffffffffffff811115610a34575f5ffd5b86016101408189031215610a46575f5ffd5b91506080860135610a56816109ca565b809150509295509295909350565b5f8235609e19833603018112610a78575f5ffd5b9190910192915050565b5f8235605e19833603018112610a78575f5ffd5b5f5f8335601e19843603018112610aab575f5ffd5b83018035915067ffffffffffffffff821115610ac5575f5ffd5b6020019150600581901b3603821315610adc575f5ffd5b9250929050565b803560ff811681146108ce575f5ffd5b803563ffffffff811681146108ce575f5ffd5b803567ffffffffffffffff811681146108ce575f5ffd5b5f60c0828403128015610b2e575f5ffd5b5060405160c0810167ffffffffffffffff81118282101715610b5e57634e487b7160e01b5f52604160045260245ffd5b604052610b6a83610ae3565b8152610b7860208401610af3565b602082015260408381013590820152610b9360608401610b06565b6060820152610ba460808401610af3565b608082015260a0928301359281019290925250919050565b84815260606020820181905281018390525f6001600160fb1b03841115610be1575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215610c10575f5ffd5b8151610412816109ca565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112610c44575f5ffd5b83018035915067ffffffffffffffff821115610c5e575f5ffd5b602001915036819003821315610adc575f5ffd5b5f5f85851115610c80575f5ffd5b83861115610c8c575f5ffd5b5050820193919092039150565b8035602083101561042e575f19602084900360031b1b1692915050565b5f81518060208401855e5f93019283525090919050565b8581525f610cde6020830187610cb6565b858152846020820152610cf46040820185610cb6565b98975050505050505050565b6001600160e01b0319841681525f61026f610d1e6004840186610cb6565b84610cb6565b5f610d32610d1e8386610cb6565b949350505050565b63ffffffff818116838216019081111561042e57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215610d72575f5ffd5b610412826109b3565b6001600160f81b0319861681526001600160e01b0319851660018201525f610da66005830186610cb6565b838582375f9301928352509095945050505050565b6001600160f81b0319851681525f610dd66001830186610cb6565b838582375f9301928352509094935050505056fea2646970667358221220367283a645a6f2ff4567a6b7f3c48a7618ad09eda48237419b569370b356fa4d64736f6c634300081c0033000000", + "address": "0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": {} - }, - "31": { - "address": "0x998abeb3E57409262aE5b751f60747921B33613E", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x000000000000000000000000000000000000000000084595161401484a000000", - "0x0000000000000000000000000000000000000000000000000000000000000064": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0x00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" - } - }, - "47": { - "address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", - "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806346fbf68e1461004e5780638568520614610085578063ce5484281461009a578063eab66d7a146100ad575b5f5ffd5b61007061005c36600461027a565b5f6020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009861009336600461029a565b6100d8565b005b6100986100a836600461027a565b610111565b6001546100c0906001600160a01b031681565b6040516001600160a01b03909116815260200161007c565b6001546001600160a01b031633146101035760405163794821ff60e01b815260040160405180910390fd5b61010d8282610148565b5050565b6001546001600160a01b0316331461013c5760405163794821ff60e01b815260040160405180910390fd5b610145816101cf565b50565b6001600160a01b03821661016f576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101f6576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b0381168114610275575f5ffd5b919050565b5f6020828403121561028a575f5ffd5b6102938261025f565b9392505050565b5f5f604083850312156102ab575f5ffd5b6102b48361025f565b9150602083013580151581146102c8575f5ffd5b80915050925092905056fea2646970667358221220d968f6e7b0fa23955f1f9580db081bbf816d7e99d0b3ab6d1bf5c644ea927f8d64736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", - "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "1": { - "address": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", - "code": "0x732279b7a0a67db372996a5fab50d91eaa73d2ebe63014608060405260043610610034575f3560e01c8063a3499c7314610038575b5f5ffd5b818015610043575f5ffd5b50610057610052366004610230565b610059565b005b61006b836001600160a01b03166101b3565b610088576040516303777f6960e51b815260040160405180910390fd5b81836001600160a01b03163f146100b2576040516323e13ec960e21b815260040160405180910390fd5b6100da837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b5f5f846001600160a01b0316836040516024016100f79190610309565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161012c919061033e565b5f60405180830381855af49150503d805f8114610164576040519150601f19603f3d011682016040523d82523d5f602084013e610169565b606091505b509150915061017882826101fd565b506040516001600160a01b038616907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a25050505050565b5f6001600160a01b0382163f158015906101f757507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4706001600160a01b0383163f14155b92915050565b6060821561020c5750806101f7565b8151156100345781518083602001fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610242575f5ffd5b83356001600160a01b0381168114610258575f5ffd5b925060208401359150604084013567ffffffffffffffff81111561027a575f5ffd5b8401601f8101861361028a575f5ffd5b803567ffffffffffffffff8111156102a4576102a461021c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156102d3576102d361021c565b6040528181528282016020018810156102ea575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f82518060208501845e5f92019182525091905056fea26469706673582212204f9eff25a489952d6ace57dae13f4311e26f51d13db35754950e1446aa6c4c3264736f6c634300081c003300", - "storage": {} - }, - "23": { - "address": "0x7a2088a1bFc9d81c55368AE168C2C02570cB814F", - "code": "0x6080604052600436106101f1575f3560e01c8063886f119511610108578063a6a509be1161009d578063f2fde38b1161006d578063f2fde38b1461062e578063f5d4fed31461064d578063f6848d2414610662578063fabc1cbc1461069b578063fe243a17146106ba575f5ffd5b8063a6a509be1461059c578063cd6dc687146105b1578063d48e8894146105d0578063ea4d3c9b146105fb575f5ffd5b80639ba06275116100d85780639ba062751461050b578063a1ca780b1461053f578063a38406a31461055e578063a3d75e091461057d575f5ffd5b8063886f1195146104815780638da5cb5b146104b45780639104c319146104d15780639b4e4634146104f8575f5ffd5b8063595c6a67116101895780635c975abb116101595780635c975abb146103e9578063715018a614610407578063724af4231461041b57806374cdd7981461043a57806384d810621461046d575f5ffd5b8063595c6a6714610358578063595edbcb1461036c5780635a26fbf41461038b5780635ac86ab7146103aa575f5ffd5b80632eae418c116101c45780632eae418c146102c55780633fb99ca5146102e457806350ff72251461030357806354fd4d5014610337575f5ffd5b80630d1e9de1146101f5578063136439dd146102165780632704351a14610235578063292b7b2b1461027a575b5f5ffd5b348015610200575f5ffd5b5061021461020f366004611d7e565b6106d9565b005b348015610221575f5ffd5b50610214610230366004611d99565b610736565b348015610240575f5ffd5b50609f5461025c90600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b348015610285575f5ffd5b506102ad7f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c181565b6040516001600160a01b039091168152602001610271565b3480156102d0575f5ffd5b506102146102df366004611db0565b610770565b3480156102ef575f5ffd5b506102146102fe366004611dfe565b6109c9565b34801561030e575f5ffd5b5061032261031d366004611e48565b610a6d565b60408051928352602083019190915201610271565b348015610342575f5ffd5b5061034b610b1d565b6040516102719190611e86565b348015610363575f5ffd5b50610214610b4d565b348015610377575f5ffd5b50609f546102ad906001600160a01b031681565b348015610396575f5ffd5b506102146103a5366004611ebb565b610b61565b3480156103b5575f5ffd5b506103d96103c4366004611ee2565b606654600160ff9092169190911b9081161490565b6040519015158152602001610271565b3480156103f4575f5ffd5b506066545b604051908152602001610271565b348015610412575f5ffd5b50610214610be8565b348015610426575f5ffd5b506103f9610435366004611e48565b610bf9565b348015610445575f5ffd5b506102ad7f000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e14181565b348015610478575f5ffd5b506102ad610d3e565b34801561048c575f5ffd5b506102ad7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b3480156104bf575f5ffd5b506033546001600160a01b03166102ad565b3480156104dc575f5ffd5b506102ad73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610214610506366004611f40565b610da1565b348015610516575f5ffd5b506102ad610525366004611d7e565b60986020525f90815260409020546001600160a01b031681565b34801561054a575f5ffd5b50610214610559366004611fb3565b610e52565b348015610569575f5ffd5b506102ad610578366004611d7e565b611073565b348015610588575f5ffd5b5061025c610597366004611d7e565b611144565b3480156105a7575f5ffd5b506103f960995481565b3480156105bc575f5ffd5b506102146105cb366004611fe5565b6111a4565b3480156105db575f5ffd5b506103f96105ea366004611d7e565b609b6020525f908152604090205481565b348015610606575f5ffd5b506102ad7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b348015610639575f5ffd5b50610214610648366004611d7e565b6112c0565b348015610658575f5ffd5b506103f9609e5481565b34801561066d575f5ffd5b506103d961067c366004611d7e565b6001600160a01b039081165f9081526098602052604090205416151590565b3480156106a6575f5ffd5b506102146106b5366004611d99565b611339565b3480156106c5575f5ffd5b506103f96106d436600461200f565b6113a6565b6106e1611426565b609f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7025c71a9fe60d709e71b377dc5f7c72c3e1d8539f8022574254e736ceca01e5906020015b60405180910390a150565b61073e611480565b60665481811681146107635760405163c61dca5d60e01b815260040160405180910390fd5b61076c82611523565b5050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146107b95760405163f739589b60e01b815260040160405180910390fd5b6107c1611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146107fe57604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b038416610825576040516339b190bb60e11b815260040160405180910390fd5b5f81136108455760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490829082121561093f575f6108718361205a565b90505f8185111561088f5750806108888186612074565b9250610895565b505f9150835b5f6108a08286612087565b6001600160a01b038a165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906108f09085815260200190565b60405180910390a2886001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe0770988260405161093391815260200190565b60405180910390a25050505b80156109b7576001600160a01b038681165f81815260986020526040908190205490516362483a2160e11b81526004810192909252602482018490529091169063c4907442906044015b5f604051808303815f87803b1580156109a0575f5ffd5b505af11580156109b2573d5f5f3e3d5ffd5b505050505b50506109c3600160c955565b50505050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610a125760405163f739589b60e01b815260040160405180910390fd5b610a1a611560565b80609e5f828254610a2b91906120ae565b90915550506040518181527f1ed04b7fd262c0d9e50fa02957f32a81a151f03baaa367faeedc7521b001c4a49060200160405180910390a16109c3600160c955565b5f80336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610ab85760405163f739589b60e01b815260040160405180910390fd5b610ac0611560565b6001600160a01b03841673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610afd57604051632711b74d60e11b815260040160405180910390fd5b610b0785846115b9565b91509150610b15600160c955565b935093915050565b6060610b487f76312e302e300000000000000000000000000000000000000000000000000006611700565b905090565b610b55611480565b610b5f5f19611523565b565b609f546001600160a01b03163314610b8c57604051630986113760e41b815260040160405180910390fd5b609f805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8416908102919091179091556040519081527f1bc8f042a52db3a437620dea4548f2031fb2a16dd8d3b0b854295528dd2cdd339060200161072b565b610bf0611426565b610b5f5f61173d565b5f336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610c435760405163f739589b60e01b815260040160405180910390fd5b610c4b611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610c8857604051632711b74d60e11b815260040160405180910390fd5b5f610c928361178e565b6001600160a01b0386165f908152609b6020526040902054610cb491906120c1565b90505f811215610cd75760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0385165f818152609b602052604090819020839055517fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe07709890610d239084815260200190565b60405180910390a29050610d37600160c955565b9392505050565b5f5f610d49816117f7565b610d51611560565b335f908152609860205260409020546001600160a01b031615610d875760405163031a852160e21b815260040160405180910390fd5b5f610d90611822565b925050610d9d600160c955565b5090565b5f610dab816117f7565b610db3611560565b335f908152609860205260409020546001600160a01b031680610ddb57610dd8611822565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610e11908b908b908b908b908b9060040161210f565b5f604051808303818588803b158015610e28575f5ffd5b505af1158015610e3a573d5f5f3e3d5ffd5b505050505050610e4a600160c955565b505050505050565b6001600160a01b038084165f908152609860205260409020548491163314610e8d576040516312e16d7160e11b815260040160405180910390fd5b610e95611560565b6001600160a01b038416610ebc576040516339b190bb60e11b815260040160405180910390fd5b610eca633b9aca008361215c565b15610ee8576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490811215610f2157604051634b692bcf60e01b815260040160405180910390fd5b5f831315610fe2575f5f610f3587866115b9565b604051631e328e7960e11b81526001600160a01b038a8116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0602483015260448201849052606482018390529294509092507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8290911690633c651cf2906084015f604051808303815f87803b158015610fc5575f5ffd5b505af1158015610fd7573d5f5f3e3d5ffd5b505050505050611068565b5f831215611068575f610ffe8686610ff98761205a565b61197d565b60405163305068e760e11b81526001600160a01b0388811660048301526024820185905267ffffffffffffffff831660448301529192507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd82909116906360a0d1ce90606401610989565b506109c3600160c955565b6001600160a01b038082165f908152609860205260408120549091168061113e5761113b836001600160a01b03165f1b60405180610940016040528061090e815260200161222161090e9139604080516001600160a01b037f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c1166020820152808201919091525f606082015260800160408051601f19818403018152908290526111209291602001612192565b60405160208183030381529060405280519060200120611a76565b90505b92915050565b6001600160a01b0381165f908152609d6020908152604080832081518083019092525460ff8116151580835261010090910467ffffffffffffffff16928201929092529061119a57670de0b6b3a7640000610d37565b6020015192915050565b5f54610100900460ff16158080156111c257505f54600160ff909116105b806111db5750303b1580156111db57505f5460ff166001145b6112435760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611264575f805461ff0019166101001790555b61126d8361173d565b61127682611523565b80156112bb575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6112c8611426565b6001600160a01b03811661132d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161123a565b6113368161173d565b50565b611341611a82565b606654801982198116146113685760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146113e457604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b0383165f908152609b60205260408120541261141e576001600160a01b0383165f908152609b602052604090205461113b565b505f92915050565b6033546001600160a01b03163314610b5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161123a565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156114e2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150691906121ae565b610b5f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b600260c954036115b25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161123a565b600260c955565b5f806001600160a01b0384166115e2576040516339b190bb60e11b815260040160405180910390fd5b5f8312156116035760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205484916116278383612087565b6001600160a01b0388165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906116779086815260200190565b60405180910390a2866001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098826040516116ba91815260200190565b60405180910390a25f81136116d7575f5f945094505050506116f9565b5f8212156116ec575f945092506116f9915050565b5092508391506116f99050565b9250929050565b60605f61170c83611b33565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160ff1b03821115610d9d5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161123a565b606654600160ff83161b908116036113365760405163840a48d560e01b815260040160405180910390fd5b5f60995f8154611831906121cd565b9091555060408051610940810190915261090e8082525f916118ce91839133916122216020830139604080516001600160a01b037f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c1166020820152808201919091525f606082015260800160408051601f19818403018152908290526118ba9291602001612192565b604051602081830303815290604052611b5a565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de8906024015f604051808303815f87803b15801561190f575f5ffd5b505af1158015611921573d5f5f3e3d5ffd5b5050335f8181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b5f806119898385612074565b90505f61199586611144565b90505f6119ad67ffffffffffffffff83168488611c5c565b90505f6119ba82846121e5565b6040805180820182526001815267ffffffffffffffff85811660208084018281526001600160a01b038f165f818152609d845287902095518654925168ffffffffffffffffff1990931690151568ffffffffffffffff001916176101009286169290920291909117909455845193845291881691830191909152918101919091529091507fb160ab8589bf47dc04ea11b50d46678d21590cea2ed3e454e7bd3e41510f98cf9060600160405180910390a1979650505050505050565b5f61113b838330611d41565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ade573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b029190612205565b6001600160a01b0316336001600160a01b031614610b5f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f81111561113e57604051632cd44ac360e21b815260040160405180910390fd5b5f83471015611bab5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161123a565b81515f03611bfb5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161123a565b8282516020840186f590506001600160a01b038116610d375760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161123a565b5f80805f19858709858702925082811083820303915050805f03611c9357838281611c8957611c89612148565b0492505050610d37565b808411611cda5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161123a565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6001600160a01b0381168114611336575f5ffd5b5f60208284031215611d8e575f5ffd5b8135610d3781611d6a565b5f60208284031215611da9575f5ffd5b5035919050565b5f5f5f5f60808587031215611dc3575f5ffd5b8435611dce81611d6a565b93506020850135611dde81611d6a565b92506040850135611dee81611d6a565b9396929550929360600135925050565b5f5f5f5f84860360a0811215611e12575f5ffd5b6040811215611e1f575f5ffd5b50849350604084013592506060840135611e3881611d6a565b9396929550929360800135925050565b5f5f5f60608486031215611e5a575f5ffd5b8335611e6581611d6a565b92506020840135611e7581611d6a565b929592945050506040919091013590565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611ecb575f5ffd5b813567ffffffffffffffff81168114610d37575f5ffd5b5f60208284031215611ef2575f5ffd5b813560ff81168114610d37575f5ffd5b5f5f83601f840112611f12575f5ffd5b50813567ffffffffffffffff811115611f29575f5ffd5b6020830191508360208285010111156116f9575f5ffd5b5f5f5f5f5f60608688031215611f54575f5ffd5b853567ffffffffffffffff811115611f6a575f5ffd5b611f7688828901611f02565b909650945050602086013567ffffffffffffffff811115611f95575f5ffd5b611fa188828901611f02565b96999598509660400135949350505050565b5f5f5f60608486031215611fc5575f5ffd5b8335611fd081611d6a565b95602085013595506040909401359392505050565b5f5f60408385031215611ff6575f5ffd5b823561200181611d6a565b946020939093013593505050565b5f5f60408385031215612020575f5ffd5b823561202b81611d6a565b9150602083013561203b81611d6a565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b820161206e5761206e612046565b505f0390565b8181038181111561113e5761113e612046565b8082018281125f8312801582168215821617156120a6576120a6612046565b505092915050565b8082018082111561113e5761113e612046565b8181035f8312801583831316838312821617156120e0576120e0612046565b5092915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f6121226060830187896120e7565b82810360208401526121358186886120e7565b9150508260408301529695505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261217657634e487b7160e01b5f52601260045260245ffd5b500790565b5f81518060208401855e5f93019283525090919050565b5f6121a66121a0838661217b565b8461217b565b949350505050565b5f602082840312156121be575f5ffd5b81518015158114610d37575f5ffd5b5f600182016121de576121de612046565b5060010190565b67ffffffffffffffff828116828216039081111561113e5761113e612046565b5f60208284031215612215575f5ffd5b8151610d3781611d6a56fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe49c3bbb4c8ae3857e9da2c037ca93049f5f5931a49706e5b29c897d23875e264736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "0": { - "address": "0x00000961Ef480Eb55e80D19ad83579A64c007002", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd00", - "storage": {} - }, - "34": { - "address": "0x9d4454B023096f34B160D6B654540c56A1F81688", - "code": "0x608060405260043610610021575f3560e01c8063439fab911461008a5761003f565b3661003f5760405163858d70bd60e01b815260040160405180910390fd5b5f6100687f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050365f5f375f5f365f845af43d5f5f3e808015610084573d5ff35b3d5ffd5b005b348015610095575f5ffd5b506100886100a43660046100bc565b6040516282b42960e81b815260040160405180910390fd5b5f5f602083850312156100cd575f5ffd5b823567ffffffffffffffff8111156100e3575f5ffd5b8301601f810185136100f3575f5ffd5b803567ffffffffffffffff811115610109575f5ffd5b85602082840101111561011a575f5ffd5b602091909101959094509250505056fea264697066735822122042eb79be1c5c1bf83d453ef1bcf09a68daefc0a952ec517c315a6e1a8ca586e264736f6c634300081c003300", - "storage": { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf", - "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x6bd2118f0148c813209325d23233ce0b7f1042ab160c97a1c605fdedff377204": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", - "0x8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f": "0x0000000000000000000003e8df077f5f72071df6e8b0a78071e496ba17b5ee0c", - "0x24c230e7f96dea56c14d16c737ac85f999d444fd74b5f3f00170ca4640c77b8f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", - "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f8": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x626b8e6b0a06114fed7a662a5b224ce123b32b155eef2616324caf5d9adeb4fa": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230": "0x0000000000000000000000000000000100000000000000000000000000000001", - "0x173ec3ea915b0ecad49b752ec145e745446de67d464520dc696504b3980fccda": "0x000000000000000000000000ac06641381166cf085281c45292147f833c622d7", - "0xdf92d0c198eb2c08351629e12172b863967bc505b5d2fa9fdf58f7b97e45495f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c233": "0x0000000000000000000000000000000000000000000000000000000000000112", - "0x91839d9989408fbab863f2059ae80fee5216f58ec04fa3bffb021275bf7d4f24": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c231": "0x0000000000000000000000000000000000000000000000000000000000000001" - } } } diff --git a/contracts/script/deploy/DeployBase.s.sol b/contracts/script/deploy/DeployBase.s.sol index e59cf80c..39b4ec34 100644 --- a/contracts/script/deploy/DeployBase.s.sol +++ b/contracts/script/deploy/DeployBase.s.sol @@ -32,6 +32,10 @@ import { } from "eigenlayer-contracts/src/contracts/permissions/PermissionController.sol"; import {EigenPodManager} from "eigenlayer-contracts/src/contracts/pods/EigenPodManager.sol"; import {IETHPOSDeposit} from "eigenlayer-contracts/src/contracts/interfaces/IETHPOSDeposit.sol"; +import {IStrategy} from "eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol"; +import { + IRewardsCoordinatorTypes +} from "eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol"; // DataHaven imports import {DataHavenServiceManager} from "../../src/DataHavenServiceManager.sol"; @@ -41,7 +45,7 @@ import {ValidatorsUtils} from "../../script/utils/ValidatorsUtils.sol"; struct ServiceManagerInitParams { address avsOwner; address rewardsInitiator; - address[] validatorsStrategies; + IRewardsCoordinatorTypes.StrategyAndMultiplier[] validatorsStrategiesAndMultipliers; address gateway; address validatorSetSubmitter; } @@ -246,11 +250,21 @@ abstract contract DeployBase is Script, DeployParams, Accounts { "ServiceManager Implementation", address(serviceManagerImplementation) ); + // Build StrategyAndMultiplier[] from config addresses with default multiplier of 1. + // Multipliers can be updated post-deployment via setStrategiesAndMultipliers if needed. + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory strategiesAndMultipliers = new IRewardsCoordinatorTypes + .StrategyAndMultiplier[](avsConfig.validatorsStrategies.length); + for (uint256 i = 0; i < avsConfig.validatorsStrategies.length; i++) { + strategiesAndMultipliers[i] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: IStrategy(avsConfig.validatorsStrategies[i]), multiplier: 1 + }); + } + // Create service manager initialisation parameters struct ServiceManagerInitParams memory initParams = ServiceManagerInitParams({ avsOwner: avsConfig.avsOwner, rewardsInitiator: avsConfig.rewardsInitiator, - validatorsStrategies: avsConfig.validatorsStrategies, + validatorsStrategiesAndMultipliers: strategiesAndMultipliers, gateway: address(gateway), validatorSetSubmitter: avsConfig.validatorSetSubmitter }); diff --git a/contracts/script/deploy/DeployLive.s.sol b/contracts/script/deploy/DeployLive.s.sol index 36a6361c..e05b017c 100644 --- a/contracts/script/deploy/DeployLive.s.sol +++ b/contracts/script/deploy/DeployLive.s.sol @@ -120,7 +120,7 @@ contract DeployLive is DeployBase { DataHavenServiceManager.initialize.selector, params.avsOwner, params.rewardsInitiator, - params.validatorsStrategies, + params.validatorsStrategiesAndMultipliers, params.gateway, params.validatorSetSubmitter ); diff --git a/contracts/script/deploy/DeployLocal.s.sol b/contracts/script/deploy/DeployLocal.s.sol index 87a6465c..8706f9f4 100644 --- a/contracts/script/deploy/DeployLocal.s.sol +++ b/contracts/script/deploy/DeployLocal.s.sol @@ -206,7 +206,7 @@ contract DeployLocal is DeployBase { DataHavenServiceManager.initialize.selector, params.avsOwner, params.rewardsInitiator, - params.validatorsStrategies, + params.validatorsStrategiesAndMultipliers, params.gateway, params.validatorSetSubmitter ); @@ -356,11 +356,15 @@ contract DeployLocal is DeployBase { function _prepareStrategiesForServiceManager( ServiceManagerInitParams memory params ) internal view { - if (params.validatorsStrategies.length == 0) { - params.validatorsStrategies = new address[](deployedStrategies.length); + if (params.validatorsStrategiesAndMultipliers.length == 0) { + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory sm = + new IRewardsCoordinatorTypes.StrategyAndMultiplier[](deployedStrategies.length); for (uint256 i = 0; i < deployedStrategies.length; i++) { - params.validatorsStrategies[i] = deployedStrategies[i].address_; + sm[i] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: IStrategy(deployedStrategies[i].address_), multiplier: 1 + }); } + params.validatorsStrategiesAndMultipliers = sm; } } diff --git a/contracts/script/transact/AllocateOperatorStake.s.sol b/contracts/script/transact/AllocateOperatorStake.s.sol new file mode 100644 index 00000000..6372e9fd --- /dev/null +++ b/contracts/script/transact/AllocateOperatorStake.s.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.27; + +// EigenLayer imports +import { + IAllocationManagerTypes +} from "eigenlayer-contracts/src/contracts/interfaces/IAllocationManager.sol"; +import {OperatorSet} from "eigenlayer-contracts/src/contracts/libraries/OperatorSetLib.sol"; +import {IStrategy} from "eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol"; + +// Testing imports +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {Logging} from "../utils/Logging.sol"; +import {ELScriptStorage} from "../utils/ELScriptStorage.s.sol"; +import {DHScriptStorage} from "../utils/DHScriptStorage.s.sol"; +import {Accounts} from "../utils/Accounts.sol"; + +/** + * @title AllocateOperatorStake + * @notice Allocates full magnitude to the validator operator set. + * Must be run AFTER SignUpValidator (needs at least 1 block gap + * for the allocation delay to initialize). + */ +contract AllocateOperatorStake is Script, ELScriptStorage, DHScriptStorage, Accounts { + function run() public { + string memory network = vm.envOr("NETWORK", string("anvil")); + Logging.logHeader("ALLOCATE OPERATOR STAKE"); + console.log("| Network: %s", network); + Logging.logFooter(); + + _loadELContracts(network); + _loadDHContracts(network); + + IStrategy[] memory strategies = new IStrategy[](deployedStrategies.length); + for (uint256 i = 0; i < deployedStrategies.length; i++) { + strategies[i] = IStrategy(address(deployedStrategies[i].strategy)); + } + + uint64[] memory newMagnitudes = new uint64[](strategies.length); + for (uint256 i = 0; i < strategies.length; i++) { + newMagnitudes[i] = 1e18; + } + + IAllocationManagerTypes.AllocateParams[] memory allocParams = + new IAllocationManagerTypes.AllocateParams[](1); + allocParams[0] = IAllocationManagerTypes.AllocateParams({ + operatorSet: OperatorSet({ + avs: address(serviceManager), id: serviceManager.VALIDATORS_SET_ID() + }), + strategies: strategies, + newMagnitudes: newMagnitudes + }); + + vm.broadcast(_operatorPrivateKey); + allocationManager.modifyAllocations(_operator, allocParams); + Logging.logStep( + string.concat("Allocated full magnitude for operator: ", vm.toString(_operator)) + ); + } +} diff --git a/contracts/scripts/check-storage-layout.sh b/contracts/scripts/check-storage-layout.sh index 390f3298..895dbdb8 100755 --- a/contracts/scripts/check-storage-layout.sh +++ b/contracts/scripts/check-storage-layout.sh @@ -33,8 +33,8 @@ normalize_json() { | .storage | map( del(.astId, .contract) - # Remove unstable AST ID suffixes from type strings (e.g., t_contract(IGatewayV2)12345) - | .type |= sub("\\)[0-9]+$"; ")") + # Remove unstable AST IDs from type strings (e.g., t_contract(IGatewayV2)12345, nested mappings) + | .type |= gsub("\\)[0-9]+"; ")") ) | sort_by(.slot | tonumber)' "$1" } diff --git a/contracts/src/DataHavenServiceManager.sol b/contracts/src/DataHavenServiceManager.sol index 24f31862..2bf89822 100644 --- a/contracts/src/DataHavenServiceManager.sol +++ b/contracts/src/DataHavenServiceManager.sol @@ -42,6 +42,9 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave /// @notice The EigenLayer operator set ID for the Validators securing the DataHaven network. uint32 public constant VALIDATORS_SET_ID = 0; + /// @notice Maximum number of active validators in the set + uint32 public constant MAX_ACTIVE_VALIDATORS = 32; + // ============ Immutables ============ /// @notice The EigenLayer AllocationManager contract @@ -64,15 +67,17 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave /// @inheritdoc IDataHavenServiceManager mapping(address => address) public validatorEthAddressToSolochainAddress; - /// @inheritdoc IDataHavenServiceManager mapping(address => address) public validatorSolochainAddressToEthAddress; /// @inheritdoc IDataHavenServiceManager address public validatorSetSubmitter; + /// @inheritdoc IDataHavenServiceManager + mapping(IStrategy => uint96) public strategiesAndMultipliers; + /// @notice Storage gap for upgradeability (must be at end of state variables) // solhint-disable-next-line var-name-mixedcase - uint256[44] private __GAP; + uint256[43] private __GAP; // ============ Modifiers ============ @@ -138,7 +143,7 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave function initialize( address initialOwner, address _rewardsInitiator, - IStrategy[] memory validatorsStrategies, + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory validatorsStrategiesAndMultipliers, address _snowbridgeGatewayAddress, address _validatorSetSubmitter ) public virtual initializer { @@ -154,11 +159,20 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave // Register the DataHaven service in the AllocationManager. _ALLOCATION_MANAGER.updateAVSMetadataURI(address(this), DATAHAVEN_AVS_METADATA); + // Build the strategies array and populate multipliers atomically so that + // getStrategiesInOperatorSet and strategiesAndMultipliers are always consistent. + IStrategy[] memory strategies = new IStrategy[](validatorsStrategiesAndMultipliers.length); + for (uint256 i = 0; i < validatorsStrategiesAndMultipliers.length; i++) { + strategies[i] = validatorsStrategiesAndMultipliers[i].strategy; + strategiesAndMultipliers[validatorsStrategiesAndMultipliers[i].strategy] = + validatorsStrategiesAndMultipliers[i].multiplier; + } + // Create the operator set for the DataHaven service. IAllocationManagerTypes.CreateSetParams[] memory operatorSets = new IAllocationManagerTypes.CreateSetParams[](1); operatorSets[0] = IAllocationManagerTypes.CreateSetParams({ - operatorSetId: VALIDATORS_SET_ID, strategies: validatorsStrategies + operatorSetId: VALIDATORS_SET_ID, strategies: strategies }); _ALLOCATION_MANAGER.createOperatorSets(address(this), operatorSets); @@ -200,22 +214,72 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave uint64 targetEra ) public view returns (bytes memory) { OperatorSet memory operatorSet = OperatorSet({avs: address(this), id: VALIDATORS_SET_ID}); - address[] memory currentValidatorSet = _ALLOCATION_MANAGER.getMembers(operatorSet); + address[] memory operators = _ALLOCATION_MANAGER.getMembers(operatorSet); + IStrategy[] memory strategies = _ALLOCATION_MANAGER.getStrategiesInOperatorSet(operatorSet); - // Allocate max size, then resize after filtering - address[] memory newValidatorSet = new address[](currentValidatorSet.length); - uint256 validCount = 0; - for (uint256 i = 0; i < currentValidatorSet.length; i++) { - address solochainAddr = validatorEthAddressToSolochainAddress[currentValidatorSet[i]]; - if (solochainAddr != address(0)) { - newValidatorSet[validCount] = solochainAddr; - ++validCount; + // Get allocated stake for all operators across all strategies + uint256[][] memory allocatedStake = + _ALLOCATION_MANAGER.getAllocatedStake(operatorSet, operators, strategies); + + // Collect candidates: operators with solochain mapping and non-zero weighted stake + address[] memory candidateSolochain = new address[](operators.length); + uint256[] memory candidateStake = new uint256[](operators.length); + address[] memory candidateOperator = new address[](operators.length); + uint256 candidateCount = 0; + + for (uint256 i = 0; i < operators.length; i++) { + address solochainAddr = validatorEthAddressToSolochainAddress[operators[i]]; + if (solochainAddr == address(0)) continue; + + // Compute weighted stake across all strategies: + // weightedStake = sum(allocatedStake[i][j] * multiplier[j]) + uint256 weightedStake = 0; + for (uint256 j = 0; j < strategies.length; j++) { + weightedStake += allocatedStake[i][j] + * uint256(strategiesAndMultipliers[strategies[j]]); + } + + if (weightedStake == 0) continue; + + candidateSolochain[candidateCount] = solochainAddr; + candidateStake[candidateCount] = weightedStake; + candidateOperator[candidateCount] = operators[i]; + candidateCount++; + } + + require(candidateCount != 0, EmptyValidatorSet()); + + // Partial selection sort: pick top min(MAX_ACTIVE_VALIDATORS, candidateCount) + uint256 selectCount = + candidateCount < MAX_ACTIVE_VALIDATORS ? candidateCount : MAX_ACTIVE_VALIDATORS; + + for (uint256 i = 0; i < selectCount; i++) { + uint256 bestIdx = i; + for (uint256 j = i + 1; j < candidateCount; j++) { + if (_isBetterCandidate( + candidateStake[j], + candidateOperator[j], + candidateStake[bestIdx], + candidateOperator[bestIdx] + )) { + bestIdx = j; + } + } + if (bestIdx != i) { + // Swap all parallel arrays + (candidateSolochain[i], candidateSolochain[bestIdx]) = + (candidateSolochain[bestIdx], candidateSolochain[i]); + (candidateStake[i], candidateStake[bestIdx]) = + (candidateStake[bestIdx], candidateStake[i]); + (candidateOperator[i], candidateOperator[bestIdx]) = + (candidateOperator[bestIdx], candidateOperator[i]); } } - require(validCount != 0, EmptyValidatorSet()); - // Resize array to actual count - assembly { - mstore(newValidatorSet, validCount) + + // Build the final validator set from sorted solochain addresses + address[] memory newValidatorSet = new address[](selectCount); + for (uint256 i = 0; i < selectCount; i++) { + newValidatorSet[i] = candidateSolochain[i]; } return DataHavenSnowbridgeMessages.scaleEncodeNewValidatorSetMessagePayload( @@ -351,15 +415,71 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave _ALLOCATION_MANAGER.removeStrategiesFromOperatorSet( address(this), VALIDATORS_SET_ID, _strategies ); + + for (uint256 i = 0; i < _strategies.length; i++) { + delete strategiesAndMultipliers[_strategies[i]]; + } } /// @inheritdoc IDataHavenServiceManager function addStrategiesToValidatorsSupportedStrategies( - IStrategy[] calldata _strategies + IRewardsCoordinatorTypes.StrategyAndMultiplier[] calldata _strategyMultipliers ) external onlyOwner { - _ALLOCATION_MANAGER.addStrategiesToOperatorSet( - address(this), VALIDATORS_SET_ID, _strategies - ); + IStrategy[] memory strategies = new IStrategy[](_strategyMultipliers.length); + for (uint256 i = 0; i < _strategyMultipliers.length; i++) { + strategies[i] = _strategyMultipliers[i].strategy; + strategiesAndMultipliers[_strategyMultipliers[i].strategy] = + _strategyMultipliers[i].multiplier; + } + + _ALLOCATION_MANAGER.addStrategiesToOperatorSet(address(this), VALIDATORS_SET_ID, strategies); + + emit StrategiesAndMultipliersSet(_strategyMultipliers); + } + + /// @inheritdoc IDataHavenServiceManager + function setStrategiesAndMultipliers( + IRewardsCoordinatorTypes.StrategyAndMultiplier[] calldata _strategyMultipliers + ) external onlyOwner { + OperatorSet memory operatorSet = OperatorSet({avs: address(this), id: VALIDATORS_SET_ID}); + IStrategy[] memory registered = _ALLOCATION_MANAGER.getStrategiesInOperatorSet(operatorSet); + + for (uint256 i = 0; i < _strategyMultipliers.length; i++) { + bool found = false; + for (uint256 j = 0; j < registered.length; j++) { + if (registered[j] == _strategyMultipliers[i].strategy) { + found = true; + break; + } + } + require(found, StrategyNotInOperatorSet()); + + strategiesAndMultipliers[_strategyMultipliers[i].strategy] = + _strategyMultipliers[i].multiplier; + } + + emit StrategiesAndMultipliersSet(_strategyMultipliers); + } + + /// @inheritdoc IDataHavenServiceManager + function getStrategiesAndMultipliers() + external + view + returns (IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory) + { + OperatorSet memory operatorSet = OperatorSet({avs: address(this), id: VALIDATORS_SET_ID}); + IStrategy[] memory strategies = _ALLOCATION_MANAGER.getStrategiesInOperatorSet(operatorSet); + + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory result = + new IRewardsCoordinatorTypes.StrategyAndMultiplier[](strategies.length); + + for (uint256 i = 0; i < strategies.length; i++) { + result[i] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[i], multiplier: strategiesAndMultipliers[strategies[i]] + }); + } + + return result; } // ============ Rewards Functions ============ @@ -487,6 +607,27 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave require(result != address(0), ZeroAddress()); } + /** + * @notice Determines if candidate A ranks higher than candidate B + * @dev Higher stake wins; on tie, lower operator address wins + * @param stakeA Weighted stake of candidate A + * @param opA Operator address of candidate A + * @param stakeB Weighted stake of candidate B + * @param opB Operator address of candidate B + * @return True if candidate A ranks higher than candidate B + */ + function _isBetterCandidate( + uint256 stakeA, + address opA, + uint256 stakeB, + address opB + ) private pure returns (bool) { + if (stakeA != stakeB) { + return stakeA > stakeB; + } + return opA < opB; + } + /** * @notice Returns the EigenLayer operator address for a Solochain validator address * @dev Reverts if the Solochain address has not been mapped to an operator diff --git a/contracts/src/interfaces/IDataHavenServiceManager.sol b/contracts/src/interfaces/IDataHavenServiceManager.sol index a4bc46d5..6782331b 100644 --- a/contracts/src/interfaces/IDataHavenServiceManager.sol +++ b/contracts/src/interfaces/IDataHavenServiceManager.sol @@ -42,6 +42,9 @@ interface IDataHavenServiceManagerErrors { /// @notice Thrown when a Solochain address is already assigned to a different operator error SolochainAddressAlreadyAssigned(); + + /// @notice Thrown when a strategy is not registered in the operator set + error StrategyNotInOperatorSet(); } /** @@ -89,6 +92,10 @@ interface IDataHavenServiceManagerEvents { /// @notice Emitted when a batch of slashing request is being successfully slashed event SlashingComplete(); + /// @notice Emitted when strategy multipliers are set or updated + /// @param strategyMultipliers Array of strategy-multiplier pairs that were set + event StrategiesAndMultipliersSet(IRewardsCoordinatorTypes + .StrategyAndMultiplier[] strategyMultipliers); /// @notice Emitted when the validator set submitter address is updated /// @param oldSubmitter The previous validator set submitter address /// @param newSubmitter The new validator set submitter address @@ -166,12 +173,15 @@ interface IDataHavenServiceManager is * @notice Initializes the DataHaven Service Manager * @param initialOwner Address of the initial owner * @param rewardsInitiator Address authorized to initiate rewards - * @param validatorsStrategies Array of strategies supported by validators + * @param validatorsStrategiesAndMultipliers Array of strategy-multiplier pairs for the validators + * operator set. Each multiplier must be non-zero. + * @param _snowbridgeGatewayAddress Address of the Snowbridge Gateway + * @param _validatorSetSubmitter Address authorized to submit validator set messages */ function initialize( address initialOwner, address rewardsInitiator, - IStrategy[] memory validatorsStrategies, + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory validatorsStrategiesAndMultipliers, address _snowbridgeGatewayAddress, address _validatorSetSubmitter ) external; @@ -193,9 +203,13 @@ interface IDataHavenServiceManager is ) external payable; /** - * @notice Builds a new validator set message for a target era + * @notice Builds a SCALE-encoded message containing the top validators by weighted stake + * @dev Selects up to MAX_ACTIVE_VALIDATORS from registered operators. Each operator's + * weighted stake is computed as: sum(allocatedStake[j] * multiplier[j]) + * across all strategies. Operators without a solochain address mapping or with zero + * weighted stake are excluded. Ties are broken by lower operator address. * @param targetEra The target era to encode in the message - * @return The encoded message bytes to be sent to the Snowbridge Gateway + * @return The SCALE-encoded message bytes to be sent to the Snowbridge Gateway */ function buildNewValidatorSetMessageForEra( uint64 targetEra @@ -251,12 +265,50 @@ interface IDataHavenServiceManager is /** * @notice Adds strategies to the list of supported strategies for DataHaven Validators - * @param _strategies Array of strategy contracts to add to validators operator set + * @dev Each strategy's multiplier determines its weight in the validator selection + * formula: weightedStake = sum(allocatedStake[j] * multiplier[j]) + * @param _strategyMultipliers Array of strategy-multiplier pairs to add */ function addStrategiesToValidatorsSupportedStrategies( - IStrategy[] calldata _strategies + IRewardsCoordinatorTypes.StrategyAndMultiplier[] calldata _strategyMultipliers ) external; + /** + * @notice Returns the maximum number of active validators in the set + * @return The maximum active validators constant + */ + function MAX_ACTIVE_VALIDATORS() external pure returns (uint32); + + /** + * @notice Returns the multiplier for a given strategy + * @dev The multiplier determines how much an operator's allocated stake in this strategy + * contributes to their weighted stake during validator set selection. + * @param strategy The strategy to look up + * @return The multiplier weight + */ + function strategiesAndMultipliers( + IStrategy strategy + ) external view returns (uint96); + + /** + * @notice Updates multipliers for strategies already in the operator set + * @dev Does not add or remove strategies from EigenLayer; only updates multiplier weights + * used in the validator selection weighted stake formula + * @param _strategyMultipliers Array of strategy-multiplier pairs to update + */ + function setStrategiesAndMultipliers( + IRewardsCoordinatorTypes.StrategyAndMultiplier[] calldata _strategyMultipliers + ) external; + + /** + * @notice Returns all strategies with their multipliers + * @return Array of StrategyAndMultiplier structs with strategy addresses and multiplier weights + */ + function getStrategiesAndMultipliers() + external + view + returns (IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory); + // ============ Rewards Submitter Functions ============ /** diff --git a/contracts/storage-snapshots/DataHavenServiceManager.storage.json b/contracts/storage-snapshots/DataHavenServiceManager.storage.json index 801f994b..9c49beeb 100644 --- a/contracts/storage-snapshots/DataHavenServiceManager.storage.json +++ b/contracts/storage-snapshots/DataHavenServiceManager.storage.json @@ -41,7 +41,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 23771, + "astId": 23775, "contract": "src/DataHavenServiceManager.sol:DataHavenServiceManager", "label": "rewardsInitiator", "offset": 0, @@ -49,7 +49,7 @@ "type": "t_address" }, { - "astId": 23776, + "astId": 23780, "contract": "src/DataHavenServiceManager.sol:DataHavenServiceManager", "label": "validatorsAllowlist", "offset": 0, @@ -57,7 +57,7 @@ "type": "t_mapping(t_address,t_bool)" }, { - "astId": 23780, + "astId": 23784, "contract": "src/DataHavenServiceManager.sol:DataHavenServiceManager", "label": "_snowbridgeGateway", "offset": 0, @@ -65,7 +65,7 @@ "type": "t_contract(IGatewayV2)23481" }, { - "astId": 23785, + "astId": 23789, "contract": "src/DataHavenServiceManager.sol:DataHavenServiceManager", "label": "validatorEthAddressToSolochainAddress", "offset": 0, @@ -73,7 +73,7 @@ "type": "t_mapping(t_address,t_address)" }, { - "astId": 23790, + "astId": 23793, "contract": "src/DataHavenServiceManager.sol:DataHavenServiceManager", "label": "validatorSolochainAddressToEthAddress", "offset": 0, @@ -81,7 +81,7 @@ "type": "t_mapping(t_address,t_address)" }, { - "astId": 23793, + "astId": 23796, "contract": "src/DataHavenServiceManager.sol:DataHavenServiceManager", "label": "validatorSetSubmitter", "offset": 0, @@ -89,12 +89,20 @@ "type": "t_address" }, { - "astId": 23798, + "astId": 23802, + "contract": "src/DataHavenServiceManager.sol:DataHavenServiceManager", + "label": "strategiesAndMultipliers", + "offset": 0, + "slot": "107", + "type": "t_mapping(t_contract(IStrategy)7361,t_uint96)" + }, + { + "astId": 23807, "contract": "src/DataHavenServiceManager.sol:DataHavenServiceManager", "label": "__GAP", "offset": 0, - "slot": "107", - "type": "t_array(t_uint256)44_storage" + "slot": "108", + "type": "t_array(t_uint256)43_storage" } ], "types": { @@ -103,10 +111,10 @@ "label": "address", "numberOfBytes": "20" }, - "t_array(t_uint256)44_storage": { + "t_array(t_uint256)43_storage": { "encoding": "inplace", - "label": "uint256[44]", - "numberOfBytes": "1408", + "label": "uint256[43]", + "numberOfBytes": "1376", "base": "t_uint256" }, "t_array(t_uint256)49_storage": { @@ -131,6 +139,11 @@ "label": "contract IGatewayV2", "numberOfBytes": "20" }, + "t_contract(IStrategy)7361": { + "encoding": "inplace", + "label": "contract IStrategy", + "numberOfBytes": "20" + }, "t_mapping(t_address,t_address)": { "encoding": "mapping", "key": "t_address", @@ -145,6 +158,13 @@ "numberOfBytes": "32", "value": "t_bool" }, + "t_mapping(t_contract(IStrategy)7361,t_uint96)": { + "encoding": "mapping", + "key": "t_contract(IStrategy)7361", + "label": "mapping(contract IStrategy => uint96)", + "numberOfBytes": "32", + "value": "t_uint96" + }, "t_uint256": { "encoding": "inplace", "label": "uint256", @@ -154,6 +174,11 @@ "encoding": "inplace", "label": "uint8", "numberOfBytes": "1" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" } } } diff --git a/contracts/test/SnowbridgeIntegration.t.sol b/contracts/test/SnowbridgeIntegration.t.sol index 224989f7..f967553c 100644 --- a/contracts/test/SnowbridgeIntegration.t.sol +++ b/contracts/test/SnowbridgeIntegration.t.sol @@ -24,7 +24,8 @@ contract SnowbridgeIntegrationTest is SnowbridgeAndAVSDeployer { ) public pure returns (bytes[] memory beforeTestCalldata) { if (testSelector == this.test_sendNewValidatorsSetMessage.selector) { beforeTestCalldata = new bytes[](1); - beforeTestCalldata[0] = abi.encodeWithSelector(this.setupValidatorsAsOperators.selector); + beforeTestCalldata[0] = + abi.encodeWithSelector(this.setupValidatorsAsOperatorsWithAllocations.selector); } } diff --git a/contracts/test/ValidatorSetSelection.t.sol b/contracts/test/ValidatorSetSelection.t.sol new file mode 100644 index 00000000..d58be58c --- /dev/null +++ b/contracts/test/ValidatorSetSelection.t.sol @@ -0,0 +1,568 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.27; + +/* solhint-disable func-name-mixedcase */ + +import {SnowbridgeAndAVSDeployer} from "./utils/SnowbridgeAndAVSDeployer.sol"; +import {DataHavenSnowbridgeMessages} from "../src/libraries/DataHavenSnowbridgeMessages.sol"; +import {IDataHavenServiceManagerErrors} from "../src/interfaces/IDataHavenServiceManager.sol"; +import {IStrategy} from "eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol"; +import { + IRewardsCoordinatorTypes +} from "eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol"; +import { + IAllocationManagerTypes +} from "eigenlayer-contracts/src/contracts/interfaces/IAllocationManager.sol"; +import {OperatorSet} from "eigenlayer-contracts/src/contracts/libraries/OperatorSetLib.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +contract ValidatorSetSelectionTest is SnowbridgeAndAVSDeployer { + function setUp() public { + _deployMockAllContracts(); + } + + // ============ Helpers ============ + + function _getStrategies() internal view returns (IStrategy[] memory) { + IStrategy[] memory strategies = new IStrategy[](deployedStrategies.length); + for (uint256 i = 0; i < deployedStrategies.length; i++) { + strategies[i] = deployedStrategies[i]; + } + return strategies; + } + + function _setupMultipliers( + uint96[] memory multipliers + ) internal { + IStrategy[] memory strategies = _getStrategies(); + + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory sm = + new IRewardsCoordinatorTypes.StrategyAndMultiplier[](strategies.length); + for (uint256 i = 0; i < strategies.length; i++) { + sm[i] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[i], multiplier: multipliers[i] + }); + } + + cheats.startPrank(avsOwner); + serviceManager.removeStrategiesFromValidatorsSupportedStrategies(strategies); + serviceManager.addStrategiesToValidatorsSupportedStrategies(sm); + cheats.stopPrank(); + } + + function _uniformMultipliers() internal pure returns (uint96[] memory) { + uint96[] memory m = new uint96[](3); + m[0] = 1; + m[1] = 1; + m[2] = 1; + return m; + } + + function _registerOperator( + address op, + address solochainAddr, + uint256[] memory stakeAmounts + ) internal { + cheats.prank(avsOwner); + serviceManager.addValidatorToAllowlist(op); + + cheats.startPrank(op); + for (uint256 j = 0; j < deployedStrategies.length; j++) { + IERC20 linkedToken = deployedStrategies[j].underlyingToken(); + _setERC20Balance(address(linkedToken), op, stakeAmounts[j]); + linkedToken.approve(address(strategyManager), stakeAmounts[j]); + strategyManager.depositIntoStrategy(deployedStrategies[j], linkedToken, stakeAmounts[j]); + } + delegationManager.registerAsOperator(address(0), 0, ""); + + uint32[] memory operatorSetIds = new uint32[](1); + operatorSetIds[0] = serviceManager.VALIDATORS_SET_ID(); + IAllocationManagerTypes.RegisterParams memory registerParams = + IAllocationManagerTypes.RegisterParams({ + avs: address(serviceManager), + operatorSetIds: operatorSetIds, + data: abi.encodePacked(solochainAddr) + }); + allocationManager.registerForOperatorSets(op, registerParams); + cheats.stopPrank(); + } + + function _uniformStakes( + uint256 amount + ) internal view returns (uint256[] memory) { + uint256[] memory stakes = new uint256[](deployedStrategies.length); + for (uint256 j = 0; j < stakes.length; j++) { + stakes[j] = amount; + } + return stakes; + } + + function _allocateForOperator( + address op + ) internal { + IStrategy[] memory strategies = _getStrategies(); + uint64[] memory newMagnitudes = new uint64[](strategies.length); + for (uint256 j = 0; j < strategies.length; j++) { + newMagnitudes[j] = 1e18; + } + + IAllocationManagerTypes.AllocateParams[] memory allocParams = + new IAllocationManagerTypes.AllocateParams[](1); + allocParams[0] = IAllocationManagerTypes.AllocateParams({ + operatorSet: OperatorSet({ + avs: address(serviceManager), id: serviceManager.VALIDATORS_SET_ID() + }), + strategies: strategies, + newMagnitudes: newMagnitudes + }); + + cheats.prank(op); + allocationManager.modifyAllocations(op, allocParams); + } + + function _advancePastAllocationConfigDelay() internal { + uint32 delay = allocationManager.ALLOCATION_CONFIGURATION_DELAY(); + cheats.roll(block.number + delay + 1); + } + + function _advancePastAllocationEffect() internal { + cheats.roll(block.number + 1); + } + + function _buildExpectedMessage( + address[] memory validators, + uint64 externalIndex + ) internal pure returns (bytes memory) { + return DataHavenSnowbridgeMessages.scaleEncodeNewValidatorSetMessagePayload( + DataHavenSnowbridgeMessages.NewValidatorSetPayload({ + validators: validators, externalIndex: externalIndex + }) + ); + } + + // ============ Admin Function Tests ============ + + // Test #7: Add strategy + multiplier in one call; verify both stored + function test_addStrategies_setsMultiplierAtomically() public { + IStrategy[] memory strategies = _getStrategies(); + + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory sm = + new IRewardsCoordinatorTypes.StrategyAndMultiplier[](3); + sm[0] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[0], multiplier: 5000 + }); + sm[1] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[1], multiplier: 10000 + }); + sm[2] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[2], multiplier: 2000 + }); + + cheats.startPrank(avsOwner); + serviceManager.removeStrategiesFromValidatorsSupportedStrategies(strategies); + serviceManager.addStrategiesToValidatorsSupportedStrategies(sm); + cheats.stopPrank(); + + assertEq(serviceManager.strategiesAndMultipliers(strategies[0]), 5000); + assertEq(serviceManager.strategiesAndMultipliers(strategies[1]), 10000); + assertEq(serviceManager.strategiesAndMultipliers(strategies[2]), 2000); + } + + // Test #9: Remove strategy → multiplier and tracking bool deleted + function test_removeStrategies_cleansUpMultiplier() public { + IStrategy[] memory strategies = _getStrategies(); + + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory sm = + new IRewardsCoordinatorTypes.StrategyAndMultiplier[](3); + sm[0] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[0], multiplier: 5000 + }); + sm[1] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[1], multiplier: 10000 + }); + sm[2] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[2], multiplier: 2000 + }); + + cheats.startPrank(avsOwner); + serviceManager.removeStrategiesFromValidatorsSupportedStrategies(strategies); + serviceManager.addStrategiesToValidatorsSupportedStrategies(sm); + + assertEq(serviceManager.strategiesAndMultipliers(strategies[1]), 10000); + + serviceManager.removeStrategiesFromValidatorsSupportedStrategies(strategies); + cheats.stopPrank(); + + assertEq(serviceManager.strategiesAndMultipliers(strategies[0]), 0); + assertEq(serviceManager.strategiesAndMultipliers(strategies[1]), 0); + assertEq(serviceManager.strategiesAndMultipliers(strategies[2]), 0); + } + + // Test #11: Returns correct StrategyAndMultiplier structs + function test_getStrategiesAndMultipliers_returnsCorrect() public { + IStrategy[] memory strategies = _getStrategies(); + + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory sm = + new IRewardsCoordinatorTypes.StrategyAndMultiplier[](3); + sm[0] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[0], multiplier: 5000 + }); + sm[1] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[1], multiplier: 10000 + }); + sm[2] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[2], multiplier: 2000 + }); + + cheats.startPrank(avsOwner); + serviceManager.removeStrategiesFromValidatorsSupportedStrategies(strategies); + serviceManager.addStrategiesToValidatorsSupportedStrategies(sm); + cheats.stopPrank(); + + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory result = + serviceManager.getStrategiesAndMultipliers(); + + assertEq(result.length, 3); + for (uint256 i = 0; i < result.length; i++) { + uint96 expectedMultiplier = serviceManager.strategiesAndMultipliers(result[i].strategy); + assertEq(result[i].multiplier, expectedMultiplier); + } + } + + // Test: setStrategiesAndMultipliers updates existing multipliers + function test_setStrategiesAndMultipliers_updatesMultipliers() public { + IStrategy[] memory strategies = _getStrategies(); + + // Set initial multipliers via _setupMultipliers + uint96[] memory initial = new uint96[](3); + initial[0] = 5000; + initial[1] = 10000; + initial[2] = 2000; + _setupMultipliers(initial); + + // Update multipliers + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory updated = + new IRewardsCoordinatorTypes.StrategyAndMultiplier[](3); + updated[0] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[0], multiplier: 1 + }); + updated[1] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[1], multiplier: 1 + }); + updated[2] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[2], multiplier: 9999 + }); + + cheats.prank(avsOwner); + serviceManager.setStrategiesAndMultipliers(updated); + + assertEq(serviceManager.strategiesAndMultipliers(strategies[0]), 1); + assertEq(serviceManager.strategiesAndMultipliers(strategies[1]), 1); + assertEq(serviceManager.strategiesAndMultipliers(strategies[2]), 9999); + } + + // Test: setStrategiesAndMultipliers changes validator ranking + function test_setStrategiesAndMultipliers_affectsRanking() public { + uint96[] memory mults = new uint96[](3); + mults[0] = 10000; + mults[1] = 1; + mults[2] = 1; + _setupMultipliers(mults); + + // Op A: heavy in strategy 0 (high multiplier) → initially ranked first + address opA = vm.addr(801); + address solochainA = address(uint160(0x6001)); + uint256[] memory stakesA = new uint256[](3); + stakesA[0] = 1000 ether; + stakesA[1] = 10 ether; + stakesA[2] = 10 ether; + _registerOperator(opA, solochainA, stakesA); + + // Op B: heavy in strategy 1 (low multiplier) → initially ranked second + address opB = vm.addr(802); + address solochainB = address(uint160(0x6002)); + uint256[] memory stakesB = new uint256[](3); + stakesB[0] = 10 ether; + stakesB[1] = 1000 ether; + stakesB[2] = 10 ether; + _registerOperator(opB, solochainB, stakesB); + + _advancePastAllocationConfigDelay(); + _allocateForOperator(opA); + _allocateForOperator(opB); + _advancePastAllocationEffect(); + + // Before update: A ranks first (strategy 0 has multiplier 10_000) + address[] memory expectedBefore = new address[](2); + expectedBefore[0] = solochainA; + expectedBefore[1] = solochainB; + assertEq( + serviceManager.buildNewValidatorSetMessageForEra(0), + _buildExpectedMessage(expectedBefore, 0) + ); + + // Flip multipliers: strategy 1 now has high multiplier + IStrategy[] memory strategies = _getStrategies(); + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory flipped = + new IRewardsCoordinatorTypes.StrategyAndMultiplier[](3); + flipped[0] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[0], multiplier: 1 + }); + flipped[1] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[1], multiplier: 10000 + }); + flipped[2] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[2], multiplier: 1 + }); + + cheats.prank(avsOwner); + serviceManager.setStrategiesAndMultipliers(flipped); + + // After update: B ranks first (strategy 1 now has multiplier 10_000) + address[] memory expectedAfter = new address[](2); + expectedAfter[0] = solochainB; + expectedAfter[1] = solochainA; + assertEq( + serviceManager.buildNewValidatorSetMessageForEra(0), + _buildExpectedMessage(expectedAfter, 0) + ); + } + + // ============ Selection Tests ============ + + // Test #1: 3 strategies with different multipliers; verify correct ordering + function test_weightedStake_multipleStrategies() public { + uint96[] memory mults = new uint96[](3); + mults[0] = 5000; + mults[1] = 10000; + mults[2] = 2000; + _setupMultipliers(mults); + + // Op A: heavy in strategy 0 (multiplier 5000) + address opA = vm.addr(101); + address solochainA = address(uint160(0xA01)); + uint256[] memory stakesA = new uint256[](3); + stakesA[0] = 1000 ether; + stakesA[1] = 100 ether; + stakesA[2] = 100 ether; + _registerOperator(opA, solochainA, stakesA); + + // Op B: heavy in strategy 1 (multiplier 10000) → highest weighted stake + address opB = vm.addr(102); + address solochainB = address(uint160(0xB01)); + uint256[] memory stakesB = new uint256[](3); + stakesB[0] = 100 ether; + stakesB[1] = 1000 ether; + stakesB[2] = 100 ether; + _registerOperator(opB, solochainB, stakesB); + + // Op C: heavy in strategy 2 (multiplier 2000) → lowest weighted stake + address opC = vm.addr(103); + address solochainC = address(uint160(0xC01)); + uint256[] memory stakesC = new uint256[](3); + stakesC[0] = 100 ether; + stakesC[1] = 100 ether; + stakesC[2] = 1000 ether; + _registerOperator(opC, solochainC, stakesC); + + _advancePastAllocationConfigDelay(); + + _allocateForOperator(opA); + _allocateForOperator(opB); + _allocateForOperator(opC); + + _advancePastAllocationEffect(); + + // Expected order: B (highest multiplied strategy), A, C + address[] memory expected = new address[](3); + expected[0] = solochainB; + expected[1] = solochainA; + expected[2] = solochainC; + + assertEq( + serviceManager.buildNewValidatorSetMessageForEra(0), _buildExpectedMessage(expected, 0) + ); + } + + // Test #2: 2 operators with identical weighted stake; lower Eth address ranks first + function test_tieBreak_lowerAddressWins() public { + _setupMultipliers(_uniformMultipliers()); + + address addrA = vm.addr(201); + address addrB = vm.addr(202); + + // Ensure addrLow < addrHigh + address addrLow = addrA < addrB ? addrA : addrB; + address addrHigh = addrA < addrB ? addrB : addrA; + + address solochainLow = address(uint160(0xBB)); + address solochainHigh = address(uint160(0xAA)); + + _registerOperator(addrLow, solochainLow, _uniformStakes(500 ether)); + _registerOperator(addrHigh, solochainHigh, _uniformStakes(500 ether)); + + _advancePastAllocationConfigDelay(); + + _allocateForOperator(addrLow); + _allocateForOperator(addrHigh); + + _advancePastAllocationEffect(); + + // Lower Eth address wins tie-break + address[] memory expected = new address[](2); + expected[0] = solochainLow; + expected[1] = solochainHigh; + + assertEq( + serviceManager.buildNewValidatorSetMessageForEra(0), _buildExpectedMessage(expected, 0) + ); + } + + // Test #3: Register 35 operators; verify only top 32 selected + function test_topN_moreThan32() public { + _setupMultipliers(_uniformMultipliers()); + + uint256 totalOps = 35; + address[] memory operators = new address[](totalOps); + address[] memory solochainAddrs = new address[](totalOps); + + for (uint256 i = 0; i < totalOps; i++) { + operators[i] = vm.addr(300 + i); + solochainAddrs[i] = address(uint160(0x1000 + i)); + _registerOperator(operators[i], solochainAddrs[i], _uniformStakes((i + 1) * 10 ether)); + } + + _advancePastAllocationConfigDelay(); + + for (uint256 i = 0; i < totalOps; i++) { + _allocateForOperator(operators[i]); + } + + _advancePastAllocationEffect(); + + bytes memory message = serviceManager.buildNewValidatorSetMessageForEra(0); + + // Top 32 by descending stake: operators at indices 34, 33, ..., 3 + address[] memory expected = new address[](32); + for (uint256 i = 0; i < 32; i++) { + expected[i] = solochainAddrs[totalOps - 1 - i]; + } + + assertEq(message, _buildExpectedMessage(expected, 0)); + } + + // Test #4: 5 operators; all included in output + function test_lessThan32_includesAll() public { + _setupMultipliers(_uniformMultipliers()); + + uint256 totalOps = 5; + address[] memory operators = new address[](totalOps); + address[] memory solochainAddrs = new address[](totalOps); + + for (uint256 i = 0; i < totalOps; i++) { + operators[i] = vm.addr(400 + i); + solochainAddrs[i] = address(uint160(0x2000 + i)); + _registerOperator(operators[i], solochainAddrs[i], _uniformStakes((i + 1) * 100 ether)); + } + + _advancePastAllocationConfigDelay(); + + for (uint256 i = 0; i < totalOps; i++) { + _allocateForOperator(operators[i]); + } + + _advancePastAllocationEffect(); + + // All 5 included, sorted by descending stake + address[] memory expected = new address[](5); + for (uint256 i = 0; i < 5; i++) { + expected[i] = solochainAddrs[totalOps - 1 - i]; + } + + assertEq( + serviceManager.buildNewValidatorSetMessageForEra(0), _buildExpectedMessage(expected, 0) + ); + } + + // Test #5: Operator with zero allocation excluded + function test_zeroWeightedStake_filtered() public { + _setupMultipliers(_uniformMultipliers()); + + address op1 = vm.addr(501); + address solochain1 = address(uint160(0x3001)); + _registerOperator(op1, solochain1, _uniformStakes(100 ether)); + + address op2 = vm.addr(502); + address solochain2 = address(uint160(0x3002)); + _registerOperator(op2, solochain2, _uniformStakes(200 ether)); + + // op3 registered but NOT allocated → zero weighted stake + address op3 = vm.addr(503); + address solochain3 = address(uint160(0x3003)); + _registerOperator(op3, solochain3, _uniformStakes(300 ether)); + + _advancePastAllocationConfigDelay(); + + // Only allocate for op1 and op2 + _allocateForOperator(op1); + _allocateForOperator(op2); + + _advancePastAllocationEffect(); + + // op3 should be filtered out + address[] memory expected = new address[](2); + expected[0] = solochain2; + expected[1] = solochain1; + + assertEq( + serviceManager.buildNewValidatorSetMessageForEra(0), _buildExpectedMessage(expected, 0) + ); + } + + // Test #6: A zero multiplier is accepted and causes that strategy's stake to contribute + // no weight. The operator is still included if other strategies have non-zero multipliers. + function test_zeroMultiplier_accepted_contributesNoWeight() public { + IStrategy[] memory strategies = _getStrategies(); + + // Zero-out the first strategy's multiplier via setStrategiesAndMultipliers + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory sm = + new IRewardsCoordinatorTypes.StrategyAndMultiplier[](1); + sm[0] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[0], multiplier: 0 + }); + + cheats.prank(avsOwner); + serviceManager.setStrategiesAndMultipliers(sm); + + assertEq(serviceManager.strategiesAndMultipliers(strategies[0]), 0); + } + + // Test #12: Full integration — weighted selection + correct message encoding + function test_buildMessage_encodesCorrectly() public { + _setupMultipliers(_uniformMultipliers()); + + address op1 = vm.addr(701); + address solochain1 = address(uint160(0x5001)); + _registerOperator(op1, solochain1, _uniformStakes(500 ether)); + + address op2 = vm.addr(702); + address solochain2 = address(uint160(0x5002)); + _registerOperator(op2, solochain2, _uniformStakes(1000 ether)); + + _advancePastAllocationConfigDelay(); + + _allocateForOperator(op1); + _allocateForOperator(op2); + + _advancePastAllocationEffect(); + + bytes memory message = serviceManager.buildNewValidatorSetMessageForEra(0); + + // op2 has higher stake → first + address[] memory expected = new address[](2); + expected[0] = solochain2; + expected[1] = solochain1; + + assertEq(message, _buildExpectedMessage(expected, 0)); + } +} diff --git a/contracts/test/ValidatorSetSubmitter.t.sol b/contracts/test/ValidatorSetSubmitter.t.sol index 6fb4b0dc..ab6cdef7 100644 --- a/contracts/test/ValidatorSetSubmitter.t.sol +++ b/contracts/test/ValidatorSetSubmitter.t.sol @@ -12,7 +12,9 @@ import {DataHavenServiceManager} from "../src/DataHavenServiceManager.sol"; import { TransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import {IStrategy} from "eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol"; +import { + IRewardsCoordinatorTypes +} from "eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol"; contract ValidatorSetSubmitterTest is SnowbridgeAndAVSDeployer { address public submitterA = address(uint160(uint256(keccak256("submitterA")))); @@ -35,7 +37,8 @@ contract ValidatorSetSubmitterTest is SnowbridgeAndAVSDeployer { == this.test_buildNewValidatorSetMessageForEra_exactEncoding.selector ) { beforeTestCalldata = new bytes[](1); - beforeTestCalldata[0] = abi.encodeWithSelector(this.setupValidatorsAsOperators.selector); + beforeTestCalldata[0] = + abi.encodeWithSelector(this.setupValidatorsAsOperatorsWithAllocations.selector); } } @@ -179,7 +182,8 @@ contract ValidatorSetSubmitterTest is SnowbridgeAndAVSDeployer { function test_sendNewValidatorSetForEra_revertsWhenSubmitterIsZeroAddress() public { // Deploy a fresh proxy with address(0) as the submitter - IStrategy[] memory emptyStrategies = new IStrategy[](0); + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory emptyStrategies = + new IRewardsCoordinatorTypes.StrategyAndMultiplier[](0); cheats.startPrank(regularDeployer); DataHavenServiceManager zeroSubmitterSM = DataHavenServiceManager( diff --git a/contracts/test/utils/AVSDeployer.sol b/contracts/test/utils/AVSDeployer.sol index 1b3940b6..ad3ba72d 100644 --- a/contracts/test/utils/AVSDeployer.sol +++ b/contracts/test/utils/AVSDeployer.sol @@ -238,14 +238,6 @@ contract AVSDeployer is Test { serviceManagerImplementation = new DataHavenServiceManager(rewardsCoordinator, allocationManager); - // Create array for validators strategies required by DataHavenServiceManager - IStrategy[] memory validatorsStrategies = new IStrategy[](deployedStrategies.length); - - // For testing purposes, we'll use the deployed strategies for validators - for (uint256 i = 0; i < deployedStrategies.length; i++) { - validatorsStrategies[i] = deployedStrategies[i]; - } - serviceManager = DataHavenServiceManager( address( new TransparentUpgradeableProxy( @@ -255,7 +247,7 @@ contract AVSDeployer is Test { DataHavenServiceManager.initialize.selector, avsOwner, rewardsInitiator, - validatorsStrategies, + defaultStrategyAndMultipliers, address(snowbridgeGatewayMock), avsOwner ) diff --git a/contracts/test/utils/SnowbridgeAndAVSDeployer.sol b/contracts/test/utils/SnowbridgeAndAVSDeployer.sol index d0874122..f06babf7 100644 --- a/contracts/test/utils/SnowbridgeAndAVSDeployer.sol +++ b/contracts/test/utils/SnowbridgeAndAVSDeployer.sol @@ -16,6 +16,11 @@ import {TestUtils} from "./TestUtils.sol"; import { IAllocationManagerTypes } from "eigenlayer-contracts/src/contracts/interfaces/IAllocationManager.sol"; +import {IStrategy} from "eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol"; +import { + IRewardsCoordinatorTypes +} from "eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol"; +import {OperatorSet} from "eigenlayer-contracts/src/contracts/libraries/OperatorSetLib.sol"; import {ValidatorsUtils} from "../../script/utils/ValidatorsUtils.sol"; import {console} from "forge-std/Test.sol"; @@ -145,6 +150,61 @@ contract SnowbridgeAndAVSDeployer is AVSDeployer { serviceManager.setSnowbridgeGateway(address(gateway)); } + function setupValidatorsAsOperatorsWithAllocations() public { + setupValidatorsAsOperators(); + + // Remove strategies added during initialize (without multipliers) + // and re-add them with explicit multipliers + IStrategy[] memory strategies = new IStrategy[](deployedStrategies.length); + for (uint256 i = 0; i < deployedStrategies.length; i++) { + strategies[i] = deployedStrategies[i]; + } + + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory sm = + new IRewardsCoordinatorTypes.StrategyAndMultiplier[](deployedStrategies.length); + for (uint256 i = 0; i < deployedStrategies.length; i++) { + sm[i] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: strategies[i], + multiplier: 1 // 1x multiplier for all strategies + }); + } + + cheats.startPrank(avsOwner); + serviceManager.removeStrategiesFromValidatorsSupportedStrategies(strategies); + serviceManager.addStrategiesToValidatorsSupportedStrategies(sm); + cheats.stopPrank(); + + // Advance past ALLOCATION_CONFIGURATION_DELAY (1 day = 86400 blocks in test setup) + // so operator allocation delays take effect + uint32 allocationConfigDelay = allocationManager.ALLOCATION_CONFIGURATION_DELAY(); + cheats.roll(block.number + allocationConfigDelay + 1); + + // For each operator, allocate full magnitude to the DataHaven operator set + for (uint256 i = 0; i < validatorsAllowlist.length; i++) { + IAllocationManagerTypes.AllocateParams[] memory allocParams = + new IAllocationManagerTypes.AllocateParams[](1); + + uint64[] memory newMagnitudes = new uint64[](deployedStrategies.length); + for (uint256 j = 0; j < deployedStrategies.length; j++) { + newMagnitudes[j] = 1e18; // 100% magnitude + } + + allocParams[0] = IAllocationManagerTypes.AllocateParams({ + operatorSet: OperatorSet({ + avs: address(serviceManager), id: serviceManager.VALIDATORS_SET_ID() + }), + strategies: strategies, + newMagnitudes: newMagnitudes + }); + + cheats.prank(validatorsAllowlist[i]); + allocationManager.modifyAllocations(validatorsAllowlist[i], allocParams); + } + + // Advance past allocation effect delay (operator delay is 0, so just +1 block) + cheats.roll(block.number + 1); + } + function setupValidatorsAsOperators() public { for (uint256 i = 0; i < validatorsAllowlist.length; i++) { console.log("Setting up validator %s as operator", validatorsAllowlist[i]); diff --git a/specs/validator-set-selection/validator-set-selection.md b/specs/validator-set-selection/validator-set-selection.md new file mode 100644 index 00000000..b13f4680 --- /dev/null +++ b/specs/validator-set-selection/validator-set-selection.md @@ -0,0 +1,247 @@ +# Validator Set Selection Specification +## Top-32 by Weighted Stake (Continuation of PR #433) + +- Status: Draft +- Owners: DataHaven Team +- Last Updated: February 12, 2026 +- Depends on: PR #433 (`feat: automated validator set submission with era targeting`) + +## 1. Summary + +PR #433 introduced era-targeted validator-set submission with a dedicated submitter role and runtime era validation. This spec is a continuation of that work. + +This document adds deterministic weighted-stake selection so the outbound validator set is ranked before it is bridged: + +1. Ethereum computes weighted stake per operator. +2. Ethereum deterministically sorts operators and selects top candidates. +3. DataHaven enforces a final total active authority cap of 32 after combining whitelisted and external validators. + +The era-targeting model from PR #433 remains unchanged. + +## 2. Baseline From PR #433 + +This spec assumes the following behavior already exists: + +1. `DataHavenServiceManager.sendNewValidatorSetForEra(uint64 targetEra, ...)` is used for submission. +2. Submission is restricted to `validatorSetSubmitter` (`onlyValidatorSetSubmitter`). +3. `external_index` in the Snowbridge payload is the `targetEra`. +4. DataHaven runtime enforces era validity (`targetEra` old/too-new/duplicate checks). + +## 3. Goals + +1. Select external validators by weighted stake instead of raw member ordering. +2. Keep selection deterministic (`same chain state -> same selected set`). +3. Preserve PR #433 era-targeting invariants and submitter authorization flow. +4. Enforce total active authority cap = 32 (`whitelisted + external`). +5. Keep payload shape stable unless there is a hard requirement to version it. + +## 4. Non-Goals + +1. Replacing PR #433 submitter-role model. +2. Changing PR #433 era-target validation semantics. +3. Redesigning Snowbridge transport internals. +4. Changing reward formulas in this spec. + +## 5. Current Behavior (Post-PR #433) + +### 5.1 Ethereum + +`buildNewValidatorSetMessageForEra(targetEra)` gathers all operator-set members with a mapped solochain address and forwards them in that order. There is no stake-based ranking. + +### 5.2 Payload + +Current payload carries: + +1. `validators` +2. `external_index` (interpreted as `targetEra`) + +### 5.3 DataHaven Runtime + +`set_external_validators_inner()` stores incoming validators and `ExternalIndex`, then era application and validator composition logic consume them. + +### 5.4 Limitation + +Without stake-aware ordering, high-stake operators may be displaced by lower-stake operators when list size pressure or downstream caps apply. + +## 6. Design Decisions + +### D1. Do ranking on Ethereum + +EigenLayer membership/allocation context is available on Ethereum, so weighted ranking is computed there. + +### D2. Keep PR #433 era semantics unchanged + +`external_index` must continue to encode `targetEra`. This spec does not repurpose it (no nonce/block-number substitution). + +### D3. Deterministic tie-break + +For equal weighted stake, lower Ethereum operator address wins. + +### D4. Cap applies to total active authorities + +Final active validator set must satisfy: + +`final_active = take_32(dedupe(whitelisted ++ external_sorted_limited))` + +### D5. Strategy multipliers are explicit and default to zero if unset + +Multipliers are owner-managed in `strategiesAndMultipliers`. If an entry is unset for a strategy, its effective multiplier is `0` (no weighted contribution). + +### D6. Keep strategy list and multipliers in sync + +Multiplier lifecycle is tied to strategy lifecycle: + +1. Add strategy -> add multiplier in the same call via `IRewardsCoordinatorTypes.StrategyAndMultiplier` struct. +2. Remove strategy -> delete multiplier in the same call. + +## 7. Weighted Stake Model + +For each operator `o`: + +`weightedStake(o) = sum_i( allocatedStake(o, strategy_i) * multiplier(strategy_i) )` + +Where: + +1. `allocatedStake` comes from EigenLayer allocation data. +2. `multiplier` is a per-strategy weight (no normalization divisor is applied during ranking). + +### 7.1 Strategy Weight Semantics + +1. Every supported strategy should have an explicit multiplier entry for operational clarity. +2. Missing multiplier entry is treated as `0` multiplier. +3. Multiplier values are managed explicitly by owner/governance. + +### 7.2 Unit Assumption + +Stake inputs must be unit-consistent across strategies. If they are not, normalize before summing. + +## 8. Ethereum Contract Changes (On Top of PR #433) + +File: `contracts/src/DataHavenServiceManager.sol` + +### 8.1 New State + +```solidity +uint32 public constant MAX_ACTIVE_VALIDATORS = 32; +mapping(IStrategy => uint96) public strategiesAndMultipliers; +``` + +### 8.2 New/Updated Admin APIs + +```solidity +function setStrategiesAndMultipliers(IRewardsCoordinatorTypes.StrategyAndMultiplier[] calldata strategyMultipliers) external onlyOwner; +function addStrategiesToValidatorsSupportedStrategies(IRewardsCoordinatorTypes.StrategyAndMultiplier[] calldata strategyMultipliers) external onlyOwner; +function removeStrategiesFromValidatorsSupportedStrategies(IStrategy[] calldata strategies) external onlyOwner; +function getStrategiesAndMultipliers() external view returns (IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory); +``` + +Using EigenLayer's `StrategyAndMultiplier` struct pairs each strategy with its multiplier, eliminating the possibility of length mismatches between parallel arrays. Duplicate strategies in `addStrategies` are rejected by EigenLayer's `StrategyAlreadyInOperatorSet` check; duplicates in `setStrategiesAndMultipliers` are harmless (last-write-wins on the mapping). + +### 8.3 Updated Selection Flow + +`buildNewValidatorSetMessageForEra(uint64 targetEra)` should: + +1. Read validator operator set members. +2. Compute weighted stake per operator. +3. Filter out operators with no solochain mapping. +4. Resolve multiplier from `strategiesAndMultipliers` for each strategy used. +5. If any strategy is missing a multiplier entry, treat it as `0` multiplier. +6. Filter out operators with zero weighted stake. +7. Select at most `MAX_ACTIVE_VALIDATORS` (32) candidates by weighted stake desc + address asc tie-break (if fewer than 32 eligible candidates exist, include all). +8. Encode using existing payload shape with `externalIndex = targetEra`. + +For any EigenLayer call that consumes `StrategyAndMultiplier[]`, materialize the list in ascending strategy-address order. + +`sendNewValidatorSetForEra(...)` and `onlyValidatorSetSubmitter` remain unchanged from PR #433. + +## 9. Bridge Message Format + +No payload version bump in this spec. + +Continue using existing `ReceiveValidators` message shape: + +```text +[EL_MESSAGE_ID] +[MessageVersion] +[ReceiveValidators] +[validator_count] +[validators (N * 20B)] +[external_index (u64 targetEra)] +``` + +If stake vectors are required in the future, that should be a separate versioned command proposal. + +## 10. DataHaven Runtime Changes + +File: `operator/pallets/external-validators/src/lib.rs` + +### 10.1 Keep PR #433 era validation + +Retain existing target-era gates and error semantics (`TargetEraTooOld`, `TargetEraTooNew`, `DuplicateOrStaleTargetEra`). + +### 10.2 Enforce final total cap = 32 + +At validator composition time: + +1. `w = whitelisted.len()` +2. `external_budget = 32.saturating_sub(w)` +3. Use at most `external_budget` external validators from the ranked list. +4. Build final set as `take_32(dedupe(whitelisted ++ external_limited))`. + +### 10.3 Runtime constants + +`MaxExternalValidators` can remain a defensive bound, but final active enforcement must guarantee max 32 authorities. + +## 11. Rollout Plan + +1. Merge/deploy PR #433 baseline first (submitter role + era-target checks). +2. Deploy ServiceManager upgrade with weighted ranking logic. +3. Backfill/confirm `strategiesAndMultipliers` for all currently supported strategies. +4. Deploy runtime changes for final total-cap enforcement. +5. Re-run submitter daemon unchanged (it still submits `targetEra = ActiveEra + 1`). +6. Monitor across multiple era cycles before production rollout. + +## 12. Testing Plan + +### 12.1 Solidity + +1. Weighted stake computation across multiple strategies. +2. Deterministic tie-break behavior. +3. Top-32 selection when candidate count exceeds 32. +4. Behavior when candidate count is below 32. +5. Zero-stake filtering. +6. Missing multiplier entries are treated as zero contribution. +7. `addStrategies...` sets multipliers atomically via `StrategyAndMultiplier` struct. +8. `removeStrategies...` removes multiplier entries for removed strategies. +9. `getStrategiesAndMultipliers()` returns a list matching EigenLayer's operator set strategies. +11. Integration with `buildNewValidatorSetMessageForEra(targetEra)` and correct target era encoding. + +### 12.2 Runtime + +1. Existing PR #433 era-validation tests continue to pass unchanged. +2. Final active authority cap remains <= 32 with mixed whitelisted/external sets. +3. Composition logic preserves whitelisted priority while enforcing cap. + +### 12.3 Integration / E2E + +1. End-to-end submission through `sendNewValidatorSetForEra` with ranked validator output. +2. Delayed relay still fails with PR #433 semantics (no regressions). +3. Ranked selection outcome is deterministic across repeated runs at fixed state. + +## 13. Security Considerations + +1. Owner-managed strategy weights are governance-sensitive and should remain multisig/governance controlled. +2. Deterministic ordering prevents non-deterministic set drift. +3. Preserve PR #433 stale/duplicate/too-early rejection invariants. +4. Apply overflow checks in weighted arithmetic and any integer downcasts. + +## 14. File Change Summary + +1. `contracts/src/DataHavenServiceManager.sol` + - weighted stake computation and deterministic top selection in `buildNewValidatorSetMessageForEra`. +2. `contracts/src/interfaces/IDataHavenServiceManager.sol` + - `strategiesAndMultipliers` naming and add/remove strategy API signature updates with multipliers. +3. `operator/pallets/external-validators/src/lib.rs` + - final authority cap enforcement at composition time (while keeping PR #433 era validation behavior). +4. `contracts/test/*`, `operator/pallets/external-validators/src/tests.rs`, `test/e2e/suites/validator-set-update.test.ts` + - unit/runtime/e2e coverage for weighted selection + strategy/multiplier sync + cap behavior + non-regression on era-targeted flow. diff --git a/test/contract-bindings/generated.ts b/test/contract-bindings/generated.ts index c42a54d5..aa580fd0 100644 --- a/test/contract-bindings/generated.ts +++ b/test/contract-bindings/generated.ts @@ -2047,6 +2047,13 @@ export const dataHavenServiceManagerAbi = [ outputs: [{ name: '', internalType: 'string', type: 'string' }], stateMutability: 'view', }, + { + type: 'function', + inputs: [], + name: 'MAX_ACTIVE_VALIDATORS', + outputs: [{ name: '', internalType: 'uint32', type: 'uint32' }], + stateMutability: 'view', + }, { type: 'function', inputs: [], @@ -2058,9 +2065,17 @@ export const dataHavenServiceManagerAbi = [ type: 'function', inputs: [ { - name: '_strategies', - internalType: 'contract IStrategy[]', - type: 'address[]', + name: '_strategyMultipliers', + internalType: 'struct IRewardsCoordinatorTypes.StrategyAndMultiplier[]', + type: 'tuple[]', + components: [ + { + name: 'strategy', + internalType: 'contract IStrategy', + type: 'address', + }, + { name: 'multiplier', internalType: 'uint96', type: 'uint96' }, + ], }, ], name: 'addStrategiesToValidatorsSupportedStrategies', @@ -2102,15 +2117,44 @@ export const dataHavenServiceManagerAbi = [ outputs: [], stateMutability: 'nonpayable', }, + { + type: 'function', + inputs: [], + name: 'getStrategiesAndMultipliers', + outputs: [ + { + name: '', + internalType: 'struct IRewardsCoordinatorTypes.StrategyAndMultiplier[]', + type: 'tuple[]', + components: [ + { + name: 'strategy', + internalType: 'contract IStrategy', + type: 'address', + }, + { name: 'multiplier', internalType: 'uint96', type: 'uint96' }, + ], + }, + ], + stateMutability: 'view', + }, { type: 'function', inputs: [ { name: 'initialOwner', internalType: 'address', type: 'address' }, { name: '_rewardsInitiator', internalType: 'address', type: 'address' }, { - name: 'validatorsStrategies', - internalType: 'contract IStrategy[]', - type: 'address[]', + name: 'validatorsStrategiesAndMultipliers', + internalType: 'struct IRewardsCoordinatorTypes.StrategyAndMultiplier[]', + type: 'tuple[]', + components: [ + { + name: 'strategy', + internalType: 'contract IStrategy', + type: 'address', + }, + { name: 'multiplier', internalType: 'uint96', type: 'uint96' }, + ], }, { name: '_snowbridgeGatewayAddress', @@ -2213,6 +2257,27 @@ export const dataHavenServiceManagerAbi = [ outputs: [], stateMutability: 'nonpayable', }, + { + type: 'function', + inputs: [ + { + name: '_strategyMultipliers', + internalType: 'struct IRewardsCoordinatorTypes.StrategyAndMultiplier[]', + type: 'tuple[]', + components: [ + { + name: 'strategy', + internalType: 'contract IStrategy', + type: 'address', + }, + { name: 'multiplier', internalType: 'uint96', type: 'uint96' }, + ], + }, + ], + name: 'setStrategiesAndMultipliers', + outputs: [], + stateMutability: 'nonpayable', + }, { type: 'function', inputs: [ @@ -2252,6 +2317,13 @@ export const dataHavenServiceManagerAbi = [ outputs: [{ name: '', internalType: 'address', type: 'address' }], stateMutability: 'view', }, + { + type: 'function', + inputs: [{ name: '', internalType: 'contract IStrategy', type: 'address' }], + name: 'strategiesAndMultipliers', + outputs: [{ name: '', internalType: 'uint96', type: 'uint96' }], + stateMutability: 'view', + }, { type: 'function', inputs: [ @@ -2498,6 +2570,27 @@ export const dataHavenServiceManagerAbi = [ ], name: 'SolochainAddressUpdated', }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'strategyMultipliers', + internalType: 'struct IRewardsCoordinatorTypes.StrategyAndMultiplier[]', + type: 'tuple[]', + components: [ + { + name: 'strategy', + internalType: 'contract IStrategy', + type: 'address', + }, + { name: 'multiplier', internalType: 'uint96', type: 'uint96' }, + ], + indexed: false, + }, + ], + name: 'StrategiesAndMultipliersSet', + }, { type: 'event', anonymous: false, @@ -2580,6 +2673,7 @@ export const dataHavenServiceManagerAbi = [ { type: 'error', inputs: [], name: 'OnlyValidatorSetSubmitter' }, { type: 'error', inputs: [], name: 'OperatorNotInAllowlist' }, { type: 'error', inputs: [], name: 'SolochainAddressAlreadyAssigned' }, + { type: 'error', inputs: [], name: 'StrategyNotInOperatorSet' }, { type: 'error', inputs: [], name: 'UnknownSolochainAddress' }, { type: 'error', inputs: [], name: 'ZeroAddress' }, ] as const @@ -10719,6 +10813,15 @@ export const readDataHavenServiceManagerDatahavenAvsMetadata = functionName: 'DATAHAVEN_AVS_METADATA', }) +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"MAX_ACTIVE_VALIDATORS"` + */ +export const readDataHavenServiceManagerMaxActiveValidators = + /*#__PURE__*/ createReadContract({ + abi: dataHavenServiceManagerAbi, + functionName: 'MAX_ACTIVE_VALIDATORS', + }) + /** * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"VALIDATORS_SET_ID"` */ @@ -10737,6 +10840,15 @@ export const readDataHavenServiceManagerBuildNewValidatorSetMessageForEra = functionName: 'buildNewValidatorSetMessageForEra', }) +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"getStrategiesAndMultipliers"` + */ +export const readDataHavenServiceManagerGetStrategiesAndMultipliers = + /*#__PURE__*/ createReadContract({ + abi: dataHavenServiceManagerAbi, + functionName: 'getStrategiesAndMultipliers', + }) + /** * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"owner"` */ @@ -10764,6 +10876,15 @@ export const readDataHavenServiceManagerSnowbridgeGateway = functionName: 'snowbridgeGateway', }) +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"strategiesAndMultipliers"` + */ +export const readDataHavenServiceManagerStrategiesAndMultipliers = + /*#__PURE__*/ createReadContract({ + abi: dataHavenServiceManagerAbi, + functionName: 'strategiesAndMultipliers', + }) + /** * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"supportsAVS"` */ @@ -10933,6 +11054,15 @@ export const writeDataHavenServiceManagerSetSnowbridgeGateway = functionName: 'setSnowbridgeGateway', }) +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setStrategiesAndMultipliers"` + */ +export const writeDataHavenServiceManagerSetStrategiesAndMultipliers = + /*#__PURE__*/ createWriteContract({ + abi: dataHavenServiceManagerAbi, + functionName: 'setStrategiesAndMultipliers', + }) + /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setValidatorSetSubmitter"` */ @@ -11101,6 +11231,15 @@ export const simulateDataHavenServiceManagerSetSnowbridgeGateway = functionName: 'setSnowbridgeGateway', }) +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setStrategiesAndMultipliers"` + */ +export const simulateDataHavenServiceManagerSetStrategiesAndMultipliers = + /*#__PURE__*/ createSimulateContract({ + abi: dataHavenServiceManagerAbi, + functionName: 'setStrategiesAndMultipliers', + }) + /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setValidatorSetSubmitter"` */ @@ -11242,6 +11381,15 @@ export const watchDataHavenServiceManagerSolochainAddressUpdatedEvent = eventName: 'SolochainAddressUpdated', }) +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `eventName` set to `"StrategiesAndMultipliersSet"` + */ +export const watchDataHavenServiceManagerStrategiesAndMultipliersSetEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: dataHavenServiceManagerAbi, + eventName: 'StrategiesAndMultipliersSet', + }) + /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `eventName` set to `"ValidatorAddedToAllowlist"` */ diff --git a/test/e2e/framework/validators.ts b/test/e2e/framework/validators.ts index 4dcd074c..2ecee8a9 100644 --- a/test/e2e/framework/validators.ts +++ b/test/e2e/framework/validators.ts @@ -7,11 +7,13 @@ import { $ } from "bun"; import { allocationManagerAbi, dataHavenServiceManagerAbi, - delegationManagerAbi + delegationManagerAbi, + strategyManagerAbi } from "contract-bindings"; import { type Deployments, logger, waitForContainerToStart } from "utils"; import { DEFAULT_SUBSTRATE_WS_PORT } from "utils/constants"; import { getPublicPort } from "utils/docker"; +import { erc20Abi } from "viem"; import { privateKeyToAccount } from "viem/accounts"; import validatorSet from "../../configs/validator-set.json"; import type { LaunchedNetwork } from "../../launcher/types/launchedNetwork"; @@ -120,9 +122,50 @@ export async function registerOperator( const { connectors, deployments } = options; const validator = getValidator(validatorName); const account = privateKeyToAccount(validator.privateKey as `0x${string}`); + const { publicClient, walletClient } = connectors; + + // Deposit tokens into deployed strategies + const deployedStrategies = deployments.DeployedStrategies ?? []; + for (const strategy of deployedStrategies) { + const balance = await publicClient.readContract({ + address: strategy.underlyingToken as `0x${string}`, + abi: erc20Abi, + functionName: "balanceOf", + args: [account.address] + }); + + if (balance > 0n) { + const depositAmount = balance / 10n; + + const approveHash = await walletClient.writeContract({ + address: strategy.underlyingToken as `0x${string}`, + abi: erc20Abi, + functionName: "approve", + args: [deployments.StrategyManager, depositAmount], + account, + chain: null + }); + await publicClient.waitForTransactionReceipt({ hash: approveHash }); + + const depositHash = await walletClient.writeContract({ + address: deployments.StrategyManager, + abi: strategyManagerAbi, + functionName: "depositIntoStrategy", + args: [ + strategy.address as `0x${string}`, + strategy.underlyingToken as `0x${string}`, + depositAmount + ], + account, + chain: null + }); + await publicClient.waitForTransactionReceipt({ hash: depositHash }); + logger.debug(`Deposited ${depositAmount} tokens into strategy ${strategy.address}`); + } + } // Register as EigenLayer operator - const operatorHash = await connectors.walletClient.writeContract({ + const operatorHash = await walletClient.writeContract({ address: deployments.DelegationManager as `0x${string}`, abi: delegationManagerAbi, functionName: "registerAsOperator", @@ -131,7 +174,7 @@ export async function registerOperator( chain: null }); - const operatorReceipt = await connectors.publicClient.waitForTransactionReceipt({ + const operatorReceipt = await publicClient.waitForTransactionReceipt({ hash: operatorHash }); if (operatorReceipt.status !== "success") { @@ -139,7 +182,7 @@ export async function registerOperator( } // Register for operator sets - const hash = await connectors.walletClient.writeContract({ + const registerHash = await walletClient.writeContract({ address: deployments.AllocationManager as `0x${string}`, abi: allocationManagerAbi, functionName: "registerForOperatorSets", @@ -155,10 +198,40 @@ export async function registerOperator( chain: null }); - const receipt = await connectors.publicClient.waitForTransactionReceipt({ hash }); - if (receipt.status !== "success") { - throw new Error(`Operator set registration failed: ${receipt.status}`); + const registerReceipt = await publicClient.waitForTransactionReceipt({ hash: registerHash }); + if (registerReceipt.status !== "success") { + throw new Error(`Operator set registration failed: ${registerReceipt.status}`); } - logger.debug(`Registered ${validatorName} as operator (gas: ${receipt.gasUsed})`); + // Allocate full magnitude to the validator operator set + const strategyAddresses = deployedStrategies.map((s) => s.address as `0x${string}`); + const newMagnitudes = strategyAddresses.map(() => BigInt(1e18)); + + const allocateHash = await walletClient.writeContract({ + address: deployments.AllocationManager as `0x${string}`, + abi: allocationManagerAbi, + functionName: "modifyAllocations", + args: [ + account.address, + [ + { + operatorSet: { + avs: deployments.ServiceManager as `0x${string}`, + id: 0 + }, + strategies: strategyAddresses, + newMagnitudes + } + ] + ], + account, + chain: null + }); + + const allocateReceipt = await publicClient.waitForTransactionReceipt({ hash: allocateHash }); + if (allocateReceipt.status !== "success") { + throw new Error(`Magnitude allocation failed: ${allocateReceipt.status}`); + } + + logger.debug(`Registered ${validatorName} as operator (gas: ${registerReceipt.gasUsed})`); } diff --git a/test/e2e/suites/validator-set-update.test.ts b/test/e2e/suites/validator-set-update.test.ts index 3b1bcf54..fe18b4cb 100644 --- a/test/e2e/suites/validator-set-update.test.ts +++ b/test/e2e/suites/validator-set-update.test.ts @@ -69,6 +69,20 @@ describe("Validator Set Update", () => { beforeAll(async () => { deployments = await parseDeploymentsFile(); connectors = suite.getTestConnectors(); + + // Pause era rotation early so the active era stabilizes during tests 1-3 (~28s), + // avoiding the ~80s wait inside the cross-chain test. + // Tests 1-3 only touch Ethereum contracts and don't depend on era rotation. + const { dhApi } = connectors; + const pauseTx = dhApi.tx.Sudo.sudo({ + call: dhApi.tx.ExternalValidators.force_era({ + mode: { type: "ForceNone", value: undefined } + }).decodedCall + }); + const pauseResult = await pauseTx.signAndSubmit(getPapiSigner("ALITH")); + if (!pauseResult.ok) { + throw new Error("Failed to pause era rotation"); + } }); it("should verify test environment", async () => { @@ -161,31 +175,18 @@ describe("Validator Set Update", () => { async () => { const { publicClient, walletClient, dhApi } = connectors; - // Pause era rotation so the active era doesn't advance while - // Snowbridge relays the message (relay latency > era duration with fast-runtime). - // DatahavenServiceManagerAddress is set during infrastructure setup by set-datahaven-parameters. - const setupTx = dhApi.tx.Sudo.sudo({ - call: dhApi.tx.ExternalValidators.force_era({ - mode: { type: "ForceNone", value: undefined } - }).decodedCall - }); - const setupResult = await setupTx.signAndSubmit(getPapiSigner("ALITH")); - if (!setupResult.ok) { - throw new Error("Failed to pause era rotation"); - } - // Wait for the active era to stabilize: ForceNone prevents new eras but - // an already-triggered era may still be pending activation at the next session boundary. - // Poll until CurrentEra == ActiveEra, meaning no pending era transition remains. + // Era rotation was paused in beforeAll. Wait for any pending transition to settle + // (ForceNone prevents new eras, but an in-progress one must finish first). let stableEraIndex: number; // eslint-disable-next-line no-constant-condition while (true) { - await new Promise((r) => setTimeout(r, 12_000)); // ~2 substrate blocks const activeEra = (await dhApi.query.ExternalValidators.ActiveEra.getValue())?.index ?? 0; const currentEra = (await dhApi.query.ExternalValidators.CurrentEra.getValue()) ?? 0; if (currentEra === activeEra) { stableEraIndex = activeEra; break; } + await new Promise((r) => setTimeout(r, 6_000)); // ~1 substrate block } const targetEra = BigInt(stableEraIndex + 1); @@ -201,12 +202,22 @@ describe("Validator Set Update", () => { chain: null }); const receipt = await publicClient.waitForTransactionReceipt({ hash }); + logger.info( + `sendNewValidatorSet tx status: ${receipt.status}, block: ${receipt.blockNumber}` + ); expect(receipt.status).toBe("success"); // Verify OutboundMessageAccepted event was emitted const hasOutboundAccepted = (receipt.logs ?? []).some((log: any) => { try { - const decoded = decodeEventLog({ abi: gatewayAbi, data: log.data, topics: log.topics }); + const decoded = decodeEventLog({ + abi: gatewayAbi, + data: log.data, + topics: log.topics + }); + if (decoded.eventName === "OutboundMessageAccepted") { + logger.info(`OutboundMessageAccepted event: nonce=${(decoded.args as any)?.nonce}`); + } return decoded.eventName === "OutboundMessageAccepted"; } catch { return false; @@ -214,6 +225,7 @@ describe("Validator Set Update", () => { }); expect(hasOutboundAccepted).toBe(true); + logger.info("Waiting for ExternalValidators.ExternalValidatorsSet event on DataHaven..."); // Wait for the validator set to be updated on Substrate await waitForDataHavenEvent({ api: dhApi, diff --git a/test/scripts/setup-validators.ts b/test/scripts/setup-validators.ts index 4edbbb93..8adce8f5 100644 --- a/test/scripts/setup-validators.ts +++ b/test/scripts/setup-validators.ts @@ -124,6 +124,29 @@ export const setupValidators = async (options: SetupValidatorsOptions): Promise< logger.success(`Successfully registered validator ${validator.publicKey}`); } + // Allocate stake for each validator (must run in a separate script because + // the allocation delay needs at least 1 block after registerAsOperator) + logger.info("📊 Allocating operator stake..."); + for (const [i, validator] of validatorsToRegister.entries()) { + logger.info(`📊 Allocating stake for validator ${i} (${validator.publicKey})`); + + const env = { + ...process.env, + NETWORK: networkName, + OPERATOR_PRIVATE_KEY: validator.privateKey, + OPERATOR_SOLOCHAIN_ADDRESS: validator.solochainAddress || "" + }; + + const allocateCommand = `forge script script/transact/AllocateOperatorStake.s.sol --rpc-url ${rpcUrl} --broadcast --no-rpc-rate-limit --non-interactive`; + await runShellCommandWithLogger(allocateCommand, { + env, + cwd: "../contracts", + logLevel: "debug" + }); + + logger.success(`Successfully allocated stake for validator ${validator.publicKey}`); + } + return true; };