diff --git a/contracts/deployments/anvil-rewards-info.json b/contracts/deployments/anvil-rewards-info.json index 7ae4285e..ea1ee44d 100644 --- a/contracts/deployments/anvil-rewards-info.json +++ b/contracts/deployments/anvil-rewards-info.json @@ -1 +1 @@ -{"RewardsAgent": "0xac06641381166cf085281c45292147f833C622d7","RewardsAgentOrigin": "0x0000000000000000000000000000000000000000000000000000000000000000","updateRewardsMerkleRootSelector": "0xdc3d04ec"} \ No newline at end of file +{"RewardsAgent": "0xac06641381166cf085281c45292147f833C622d7","RewardsAgentOrigin": "0x0000000000000000000000000000000000000000000000000000000000000000"} \ No newline at end of file diff --git a/contracts/deployments/anvil.json b/contracts/deployments/anvil.json index 211580a3..fe18b66d 100644 --- a/contracts/deployments/anvil.json +++ b/contracts/deployments/anvil.json @@ -1,27 +1 @@ -{ - "network": "anvil", - "BeefyClient": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf", - "AgentExecutor": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF", - "Gateway": "0x9d4454B023096f34B160D6B654540c56A1F81688", - "ServiceManager": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D", - "ServiceManagerImplementation": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570", - "RewardsRegistry": "0x4c5859f0F772848b2D91F1D83E2Fe57935348029", - "RewardsAgent": "0xac06641381166cf085281c45292147f833C622d7", - "DelegationManager": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", - "StrategyManager": "0x9A676e781A523b5d0C0e43731313A708CB607508", - "AVSDirectory": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", - "EigenPodManager": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", - "EigenPodBeacon": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", - "RewardsCoordinator": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", - "AllocationManager": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed", - "PermissionController": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c", - "ETHPOSDeposit": "0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141", - "BaseStrategyImplementation": "0xf5059a5D33d5853360D16C683c16e67980206f36", - "DeployedStrategies": [ - { - "address": "0x998abeb3E57409262aE5b751f60747921B33613E", - "underlyingToken": "0x95401dc811bb5740090279Ba06cfA8fcF6113778", - "tokenCreator": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" - } - ] -} \ No newline at end of file +{"network": "anvil","BeefyClient": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf","AgentExecutor": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF","Gateway": "0x9d4454B023096f34B160D6B654540c56A1F81688","ServiceManager": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D","ServiceManagerImplementation": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570","RewardsAgent": "0xac06641381166cf085281c45292147f833C622d7","DelegationManager": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82","StrategyManager": "0x9A676e781A523b5d0C0e43731313A708CB607508","AVSDirectory": "0x0B306BF915C4d645ff596e518fAf3F9669b97016","EigenPodManager": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1","EigenPodBeacon": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1","RewardsCoordinator": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE","AllocationManager": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed","PermissionController": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c","ETHPOSDeposit": "0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141","BaseStrategyImplementation": "0xf5059a5D33d5853360D16C683c16e67980206f36","DeployedStrategies": [{"address": "0x998abeb3E57409262aE5b751f60747921B33613E","underlyingToken": "0x95401dc811bb5740090279Ba06cfA8fcF6113778","tokenCreator": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8"}]} \ No newline at end of file diff --git a/contracts/deployments/state-diff.checksum b/contracts/deployments/state-diff.checksum index 5295796d..16128041 100644 --- a/contracts/deployments/state-diff.checksum +++ b/contracts/deployments/state-diff.checksum @@ -1 +1 @@ -df0978809ee25447c22aca90a4064b9e4a6ea97b \ No newline at end of file +5cb16238bf8311a3f27dd130cd89f0cd7befda5d \ No newline at end of file diff --git a/contracts/deployments/state-diff.json b/contracts/deployments/state-diff.json index 0478e3e9..6332f1e1 100644 --- a/contracts/deployments/state-diff.json +++ b/contracts/deployments/state-diff.json @@ -1,209 +1,545 @@ { - "0": { - "address": "0x00000961Ef480Eb55e80D19ad83579A64c007002", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd00", - "storage": {} - }, - "3": { - "address": "0xdf077F5F72071dF6e8B0a78071E496bA17b5Ee0c", - "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b7981565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea2646970667358221220c0cb81d4a21d0eba005b3a8e586341c26034d8b6f4bc7492f673795b56a1044c64736f6c634300081c00330000", - "storage": {} - }, - "39": { - "address": "0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f", - "code": "0x608060405234801561000f575f5ffd5b506004361061026b575f3560e01c80637ecebe001161014b578063ca8aa7c7116100bf578063f2fde38b11610084578063f2fde38b1461062f578063f3b4a00014610642578063f698da251461064c578063fabc1cbc14610654578063fd98042314610667578063fe243a171461067a575f5ffd5b8063ca8aa7c71461059b578063cbc2bd62146105c2578063de44acb6146105d5578063df5cf723146105f5578063e7a050aa1461061c575f5ffd5b80638da5cb5b116101105780638da5cb5b1461052b57806394f649dd1461053c578063967fc0d21461054f5780639ac01d6114610562578063b5d8b5b814610575578063c665670214610588575f5ffd5b80637ecebe001461047f578063829fca731461049e578063886f1195146104b157806388c10299146104f05780638b8aac3c14610503575f5ffd5b806350ff7225116101e25780635de08ff2116101a75780635de08ff2146103fc578063663c1de41461040f578063715018a614610431578063724af4231461043957806376fb162b1461044c5780637def15641461045f575f5ffd5b806350ff72251461037c57806354fd4d50146103a4578063595c6a67146103b95780635ac86ab7146103c15780635c975abb146103f4575f5ffd5b806332e89ace1161023357806332e89ace146102f157806336a8c500146103045780633f292b081461031a5780633fb99ca51461032f57806348825e94146103425780634b6d5d6e14610369575f5ffd5b8063136439dd1461026f5780631794bb3c146102845780632d44def6146102975780632eae418c146102bd57806331f8fb4c146102d0575b5f5ffd5b61028261027d366004612e33565b6106a4565b005b610282610292366004612e5e565b6106de565b6102aa6102a5366004612eb2565b610804565b6040519081526020015b60405180910390f35b6102826102cb366004612ef0565b6108b6565b6102e36102de366004612f3e565b610982565b6040516102b4929190612fda565b6102aa6102ff36600461304b565b610b10565b61030c610b95565b6040516102b4929190613125565b610322610cb0565b6040516102b4919061317b565b61028261033d3660046131d8565b610d98565b6102aa7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61028261037736600461321c565b610ee0565b61038f61038a366004612e5e565b61102d565b604080519283526020830191909152016102b4565b6103ac6110a1565b6040516102b49190613265565b6102826110d1565b6103e46103cf366004613277565b609854600160ff9092169190911b9081161490565b60405190151581526020016102b4565b6098546102aa565b61028261040a366004613297565b6110e5565b6103e461041d36600461321c565b60d16020525f908152604090205460ff1681565b610282611238565b6102aa610447366004612e5e565b611249565b6102aa61045a366004612eb2565b6112a6565b61047261046d366004613306565b6112f5565b6040516102b49190613320565b6102aa61048d36600461321c565b60ca6020525f908152604090205481565b6102aa6104ac366004612f3e565b611327565b6104d87f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b0390911681526020016102b4565b6104726104fe366004612f3e565b611361565b6102aa61051136600461321c565b6001600160a01b03165f90815260ce602052604090205490565b6033546001600160a01b03166104d8565b6102e361054a36600461321c565b611498565b60cb546104d8906001600160a01b031681565b6102aa610570366004613332565b61160f565b610282610583366004613297565b6116a0565b61028261059636600461321c565b6117e7565b6104d87f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b6104d86105d0366004613393565b61180a565b6105e86105e336600461321c565b61183e565b6040516102b491906133bd565b6104d87f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b6102aa61062a366004612e5e565b6118b1565b61028261063d36600461321c565b6118e4565b6104d8620e16e481565b6102aa61195a565b610282610662366004612e33565b611a13565b6102aa61067536600461321c565b611a80565b6102aa6106883660046133cf565b60cd60209081525f928352604080842090915290825290205481565b6106ac611a95565b60985481811681146106d15760405163c61dca5d60e01b815260040160405180910390fd5b6106da82611b38565b5050565b5f54610100900460ff16158080156106fc57505f54600160ff909116105b806107155750303b15801561071557505f5460ff166001145b61077d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561079e575f805461ff0019166101001790555b6107a782611b38565b6107b084611b75565b6107b983611bc6565b80156107fe575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f61080d611c2f565b6108a38484847f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e896040518263ffffffff1660e01b815260040161085f919061344f565b602060405180830381865afa15801561087a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089e919061345d565b611c88565b90506108af6001606555565b9392505050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146108ff5760405163f739589b60e01b815260040160405180910390fd5b610907611c2f565b604051636ce5768960e11b81526001600160a01b0384169063d9caed129061093790879086908690600401613478565b6020604051808303815f875af1158015610953573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610977919061349c565b506107fe6001606555565b6060805f60d7816109a061099b368990038901896134b3565b611e90565b81526020019081526020015f205f8581526020019081526020015f2090505f6109c882611ef3565b90505f81516001600160401b038111156109e4576109e4613007565b604051908082528060200260200182016040528015610a0d578160200160208202803683370190505b5090505f82516001600160401b03811115610a2a57610a2a613007565b604051908082528060200260200182016040528015610a53578160200160208202803683370190505b5090505f5b8351811015610b0057838181518110610a7357610a7361350f565b6020026020010151838281518110610a8d57610a8d61350f565b60200260200101906001600160a01b031690816001600160a01b031681525050610ad9848281518110610ac257610ac261350f565b602002602001015186611eff90919063ffffffff16565b9050828281518110610aed57610aed61350f565b6020908102919091010152600101610a58565b50909450925050505b9250929050565b5f5f610b1b81611f23565b610b23611c2f565b6001600160a01b0385165f90815260ca6020526040902054610b5486610b4d818c8c8c878c61160f565b8688611f4e565b6001600160a01b0386165f90815260ca60205260409020600182019055610b7d868a8a8a611fa0565b925050610b8a6001606555565b509695505050505050565b6060805f610ba360d461210d565b90505f816001600160401b03811115610bbe57610bbe613007565b604051908082528060200260200182016040528015610be7578160200160208202803683370190505b5090505f826001600160401b03811115610c0357610c03613007565b604051908082528060200260200182016040528015610c2c578160200160208202803683370190505b5090505f5b83811015610ca5575f5f610c4660d484612117565b9150915081858481518110610c5d57610c5d61350f565b60200260200101906001600160a01b031690816001600160a01b03168152505080848481518110610c9057610c9061350f565b60209081029190910101525050600101610c31565b509094909350915050565b60605f610cbd60d8612125565b90505f816001600160401b03811115610cd857610cd8613007565b604051908082528060200260200182016040528015610d1c57816020015b604080518082019091525f8082526020820152815260200190600190039081610cf65790505b5090505f5b82811015610d9157610d6c610d3760d88361212e565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610d7e57610d7e61350f565b6020908102919091010152600101610d21565b5092915050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610de15760405163f739589b60e01b815260040160405180910390fd5b610de9611c2f565b5f60d781610dff61099b368990038901896134b3565b815260208082019290925260409081015f90812087825290925290209050610e28818484612139565b610e455760405163ca354fa360e01b815260040160405180910390fd5b610e62610e5a61099b368890038801886134b3565b60d89061214e565b50610e978460da5f610e7c61099b368b90038b018b6134b3565b81526020019081526020015f2061214e90919063ffffffff16565b507f5f5209798bbac45a16d2dc3bc67319fab26ee00153916d6f07b69f8a134a1e8b85858585604051610ecd9493929190613523565b60405180910390a1506107fe6001606555565b610ee8611c2f565b5f610ef460d483611eff565b915050610f0260d483612159565b50604080516001600160a01b0384168152602081018390527fd9d082c3ec4f3a3ffa55c324939a06407f5fbcb87d5e0ce3b9508c92c84ed839910160405180910390a1801561101f57816001600160a01b031663d9caed12620e16e4846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbe919061345d565b846040518463ffffffff1660e01b8152600401610fdd93929190613478565b6020604051808303815f875af1158015610ff9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101d919061349c565b505b5061102a6001606555565b50565b5f80336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146110785760405163f739589b60e01b815260040160405180910390fd5b611080611c2f565b61108b85858561216d565b915091506110996001606555565b935093915050565b60606110cc7f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b905090565b6110d9611a95565b6110e35f19611b38565b565b60cb546001600160a01b03163314611110576040516320ba3ff960e21b815260040160405180910390fd5b611118611c2f565b805f5b8181101561122c5760d15f8585848181106111385761113861350f565b905060200201602081019061114d919061321c565b6001600160a01b0316815260208101919091526040015f205460ff1661122457600160d15f8686858181106111845761118461350f565b9050602002016020810190611199919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8484838181106111f3576111f361350f565b9050602002016020810190611208919061321c565b6040516001600160a01b03909116815260200160405180910390a15b60010161111b565b50506106da6001606555565b611240612312565b6110e35f611b75565b5f336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146112935760405163f739589b60e01b815260040160405180910390fd5b61129b611c2f565b6108a384848461236c565b5f806112eb8360d7836112c161099b368b90038b018b6134b3565b81526020019081526020015f205f8781526020019081526020015f20611eff90919063ffffffff16565b9695505050505050565b606061132160da5f61130f61099b368790038701876134b3565b81526020019081526020015f2061241a565b92915050565b5f6108af60d78261134061099b368890038801886134b3565b81526020019081526020015f205f8481526020019081526020015f2061210d565b606061136b611c2f565b5f6113a560d78261138461099b368990038901896134b3565b81526020019081526020015f205f8581526020019081526020015f20611ef3565b80519091505f816001600160401b038111156113c3576113c3613007565b6040519080825280602002602001820160405280156113ec578160200160208202803683370190505b5090505f5b828110156114895761146487878684815181106114105761141061350f565b60200260200101517f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e8c6040518263ffffffff1660e01b815260040161085f919061344f565b8282815181106114765761147661350f565b60209081029190910101526001016113f1565b50925050506113216001606555565b6001600160a01b0381165f90815260ce6020526040812054606091829190816001600160401b038111156114ce576114ce613007565b6040519080825280602002602001820160405280156114f7578160200160208202803683370190505b5090505f5b82811015611585576001600160a01b0386165f90815260cd6020908152604080832060ce909252822080549192918490811061153a5761153a61350f565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205482518390839081106115725761157261350f565b60209081029190910101526001016114fc565b5060ce5f866001600160a01b03166001600160a01b031681526020019081526020015f2081818054806020026020016040519081016040528092919081815260200182805480156115fd57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115df575b50505050509150935093505050915091565b604080517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922460208201526001600160a01b03808916928201929092528187166060820152908516608082015260a0810184905260c0810183905260e081018290525f90611695906101000160405160208183030381529060405280519060200120612426565b979650505050505050565b60cb546001600160a01b031633146116cb576040516320ba3ff960e21b815260040160405180910390fd5b6116d3611c2f565b805f5b8181101561122c5760d15f8585848181106116f3576116f361350f565b9050602002016020810190611708919061321c565b6001600160a01b0316815260208101919091526040015f205460ff16156117df575f60d15f86868581811061173f5761173f61350f565b9050602002016020810190611754919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba0308484838181106117ae576117ae61350f565b90506020020160208101906117c3919061321c565b6040516001600160a01b03909116815260200160405180910390a15b6001016116d6565b6117ef612312565b6117f7611c2f565b61180081611bc6565b61102a6001606555565b60ce602052815f5260405f208181548110611823575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6001600160a01b0381165f90815260ce60209081526040918290208054835181840281018401909452808452606093928301828280156118a557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611887575b50505050509050919050565b5f5f6118bc81611f23565b6118c4611c2f565b6118d033868686611fa0565b91506118dc6001606555565b509392505050565b6118ec612312565b6001600160a01b0381166119515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610774565b61102a81611b75565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6119c761246c565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611a1b6124e1565b60985480198219811614611a425760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f5f611a8d60d484611eff565b949350505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190613555565b6110e357604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b600260655403611c815760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610774565b6002606555565b5f8060d781611c9f61099b368a90038a018a6134b3565b815260208082019290925260409081015f90812088825290925281209150611cc78286611eff565b9150611cd590508286612159565b505f8115611dec57856001600160a01b031663d9caed1286886001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4d919061345d565b856040518463ffffffff1660e01b8152600401611d6c93929190613478565b6020604051808303815f875af1158015611d88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dac919061349c565b90507fe6413aa0c789e437b0a06bf64b20926584f066c79a2d8b80a759c85472f7b0af88888885604051611de39493929190613523565b60405180910390a15b5f611df684611ef3565b519050805f03611e8457611e348860da5f611e1961099b368f90038f018f6134b3565b81526020019081526020015f2061259290919063ffffffff16565b50611e5f60da5f611e4d61099b368e90038e018e6134b3565b81526020019081526020015f20612125565b5f03611e8457611e82611e7a61099b368c90038c018c6134b3565b60d890612592565b505b50979650505050505050565b5f815f0151826020015163ffffffff16604051602001611edb92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261132190613574565b60605f6108af8361259d565b5f808080611f16866001600160a01b0387166125a8565b9097909650945050505050565b609854600160ff83161b9081160361102a5760405163840a48d560e01b815260040160405180910390fd5b42811015611f6f57604051630819bdcd60e01b815260040160405180910390fd5b611f836001600160a01b03851684846125e0565b6107fe57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260d16020526040812054849060ff16611fda57604051632efd965160e11b815260040160405180910390fd5b611fef6001600160a01b038516338786612634565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303815f875af115801561203b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205f919061349c565b91505f5f61206e88888661216d565b604051631e328e7960e11b81526001600160a01b038b811660048301528a8116602483015260448201849052606482018390529294509092507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8290911690633c651cf2906084015f604051808303815f87803b1580156120ec575f5ffd5b505af11580156120fe573d5f5f3e3d5ffd5b50505050505050949350505050565b5f6113218261268c565b5f808080611f168686612696565b5f611321825490565b5f6108af83836126bf565b5f611a8d846001600160a01b038516846126e5565b5f6108af8383612701565b5f6108af836001600160a01b03841661274d565b5f806001600160a01b038516612196576040516316f2ccc960e01b815260040160405180910390fd5b825f036121b6576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038086165f90815260cd602090815260408083209388168352929052908120549081900361225c576001600160a01b0386165f90815260ce60209081526040909120541061221e576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b038681165f90815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169187169190911790555b61226684826135ab565b6001600160a01b038088165f90815260cd60209081526040808320938a16835292905281902091909155517f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62906122c290889088908890613478565b60405180910390a1959294509192505050565b60605f6122e183612769565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b031633146110e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610774565b5f815f0361238d576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038085165f90815260cd6020908152604080832093871683529290522054808311156123d357604051634b18b19360e01b815260040160405180910390fd5b6123dd83826135be565b6001600160a01b038087165f90815260cd602090815260408083209389168352929052908120829055909150819003611a8d57611a8d8585612790565b60605f6108af8361290e565b5f61242f61195a565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f6124987f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b9050805f815181106124ac576124ac61350f565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612561919061345d565b6001600160a01b0316336001600160a01b0316146110e35760405163794821ff60e01b815260040160405180910390fd5b5f6108af8383612966565b60606113218261241a565b5f8181526002830160205260408120548190806125d5576125c98585612a49565b92505f9150610b099050565b600192509050610b09565b5f5f5f6125ed8585612a54565b90925090505f816004811115612605576126056135d1565b1480156126235750856001600160a01b0316826001600160a01b0316145b806112eb57506112eb868686612a93565b6107fe846323b872dd60e01b85858560405160240161265593929190613478565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b7a565b5f61132182612125565b5f80806126a3858561212e565b5f81815260029690960160205260409095205494959350505050565b5f825f0182815481106126d4576126d461350f565b905f5260205f200154905092915050565b5f8281526002840160205260408120829055611a8d848461214e565b5f81815260018301602052604081205461274657508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611321565b505f611321565b5f81815260028301602052604081208190556108af8383612592565b5f60ff8216601f81111561132157604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b0382165f90815260ce6020526040812054905b818110156128a2576001600160a01b038481165f90815260ce60205260409020805491851691839081106127e0576127e061350f565b5f918252602090912001546001600160a01b03160361289a576001600160a01b0384165f90815260ce60205260409020805461281e906001906135be565b8154811061282e5761282e61350f565b5f9182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061286a5761286a61350f565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506128a2565b6001016127aa565b8181036128c257604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b0384165f90815260ce602052604090208054806128e8576128e86135e5565b5f8281526020902081015f1990810180546001600160a01b031916905501905550505050565b6060815f018054806020026020016040519081016040528092919081815260200182805480156118a557602002820191905f5260205f20905b8154815260200190600101908083116129475750505050509050919050565b5f8181526001830160205260408120548015612a40575f6129886001836135be565b85549091505f9061299b906001906135be565b90508181146129fa575f865f0182815481106129b9576129b961350f565b905f5260205f200154905080875f0184815481106129d9576129d961350f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612a0b57612a0b6135e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611321565b5f915050611321565b5f6108af8383612c52565b5f5f8251604103612a88576020830151604084015160608501515f1a612a7c87828585612c69565b94509450505050610b09565b505f90506002610b09565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401612abb9291906135f9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612af99190613611565b5f60405180830381855afa9150503d805f8114612b31576040519150601f19603f3d011682016040523d82523d5f602084013e612b36565b606091505b5091509150818015612b4a57506020815110155b80156112eb57508051630b135d3f60e11b90612b6f908301602090810190840161349c565b149695505050505050565b5f612bce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d269092919063ffffffff16565b905080515f1480612bee575080806020019051810190612bee9190613555565b612c4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610774565b505050565b5f81815260018301602052604081205415156108af565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612c9e57505f90506003612d1d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612cef573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612d17575f60019250925050612d1d565b91505f90505b94509492505050565b6060611a8d84845f85855f5f866001600160a01b03168587604051612d4b9190613611565b5f6040518083038185875af1925050503d805f8114612d85576040519150601f19603f3d011682016040523d82523d5f602084013e612d8a565b606091505b50915091506116958783838760608315612e045782515f03612dfd576001600160a01b0385163b612dfd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610774565b5081611a8d565b611a8d8383815115612e195781518083602001fd5b8060405162461bcd60e51b81526004016107749190613265565b5f60208284031215612e43575f5ffd5b5035919050565b6001600160a01b038116811461102a575f5ffd5b5f5f5f60608486031215612e70575f5ffd5b8335612e7b81612e4a565b92506020840135612e8b81612e4a565b929592945050506040919091013590565b5f60408284031215612eac575f5ffd5b50919050565b5f5f5f60808486031215612ec4575f5ffd5b612ece8585612e9c565b9250604084013591506060840135612ee581612e4a565b809150509250925092565b5f5f5f5f60808587031215612f03575f5ffd5b8435612f0e81612e4a565b93506020850135612f1e81612e4a565b92506040850135612f2e81612e4a565b9396929550929360600135925050565b5f5f60608385031215612f4f575f5ffd5b612f598484612e9c565b946040939093013593505050565b5f8151808452602084019350602083015f5b82811015612fa05781516001600160a01b0316865260209586019590910190600101612f79565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612fa0578151865260209586019590910190600101612fbc565b604081525f612fec6040830185612f67565b8281036020840152612ffe8185612faa565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561304357613043613007565b604052919050565b5f5f5f5f5f5f60c08789031215613060575f5ffd5b863561306b81612e4a565b9550602087013561307b81612e4a565b945060408701359350606087013561309281612e4a565b92506080870135915060a08701356001600160401b038111156130b3575f5ffd5b8701601f810189136130c3575f5ffd5b80356001600160401b038111156130dc576130dc613007565b6130ef601f8201601f191660200161301b565b8181528a6020838501011115613103575f5ffd5b816020840160208301375f602083830101528093505050509295509295509295565b604080825283519082018190525f9060208501906060840190835b818110156131675783516001600160a01b0316835260209384019390920191600101613140565b505083810360208501526112eb8186612faa565b602080825282518282018190525f918401906040840190835b818110156131cd57835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101613194565b509095945050505050565b5f5f5f5f60a085870312156131eb575f5ffd5b6131f58686612e9c565b935060408501359250606085013561320c81612e4a565b9396929550929360800135925050565b5f6020828403121561322c575f5ffd5b81356108af81612e4a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6108af6020830184613237565b5f60208284031215613287575f5ffd5b813560ff811681146108af575f5ffd5b5f5f602083850312156132a8575f5ffd5b82356001600160401b038111156132bd575f5ffd5b8301601f810185136132cd575f5ffd5b80356001600160401b038111156132e2575f5ffd5b8560208260051b84010111156132f6575f5ffd5b6020919091019590945092505050565b5f60408284031215613316575f5ffd5b6108af8383612e9c565b602081525f6108af6020830184612faa565b5f5f5f5f5f5f60c08789031215613347575f5ffd5b863561335281612e4a565b9550602087013561336281612e4a565b9450604087013561337281612e4a565b959894975094956060810135955060808101359460a0909101359350915050565b5f5f604083850312156133a4575f5ffd5b82356133af81612e4a565b946020939093013593505050565b602081525f6108af6020830184612f67565b5f5f604083850312156133e0575f5ffd5b82356133eb81612e4a565b915060208301356133fb81612e4a565b809150509250929050565b803563ffffffff81168114613419575f5ffd5b919050565b803561342981612e4a565b6001600160a01b0316825263ffffffff61344560208301613406565b1660208301525050565b60408101611321828461341e565b5f6020828403121561346d575f5ffd5b81516108af81612e4a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f602082840312156134ac575f5ffd5b5051919050565b5f60408284031280156134c4575f5ffd5b50604080519081016001600160401b03811182821017156134e7576134e7613007565b60405282356134f581612e4a565b815261350360208401613406565b60208201529392505050565b634e487b7160e01b5f52603260045260245ffd5b60a08101613531828761341e565b60408201949094526001600160a01b03929092166060830152608090910152919050565b5f60208284031215613565575f5ffd5b815180151581146108af575f5ffd5b80516020808301519190811015612eac575f1960209190910360031b1b16919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561132157611321613597565b8181038181111561132157611321613597565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f611a8d6040830184613237565b5f82518060208501845e5f92019182525091905056fea2646970667358221220bc0f3bd67d68441e4962c97aca77871e5222a94272edd1bef90610223213528664736f6c634300081c003300000000000000", + "32": { + "address": "0x998abeb3E57409262aE5b751f60747921B33613E", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x0000000000000000000000000000000000000000000000000000000000000032": "0x00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778", + "0x0000000000000000000000000000000000000000000000000000000000000064": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" } }, - "40": { - "address": "0xf5059a5D33d5853360D16C683c16e67980206f36", - "code": "0x608060405234801561000f575f5ffd5b5060043610610187575f3560e01c80637a8b2637116100d9578063c4d66de811610093578063df6fadc11161006e578063df6fadc114610361578063e3dae51c1461037c578063f3e738751461038f578063fabc1cbc146103a2575f5ffd5b8063c4d66de814610328578063ce7c2ac21461033b578063d9caed121461034e575f5ffd5b80637a8b2637146102ad578063886f1195146102c05780638c871019146102e75780638f6a6240146102fa578063a6ab36f21461030d578063ab5921e114610320575f5ffd5b806347e7ef2411610144578063595c6a671161011f578063595c6a67146102655780635ac86ab71461026d5780635c975abb1461029c57806361b01b5d146102a4575f5ffd5b806347e7ef241461022a57806354fd4d501461023d578063553ca5f814610252575f5ffd5b806311c70c9d1461018b578063136439dd146101a05780632495a599146101b357806339b70e38146101e35780633a98ef391461020a57806343fe08b014610221575b5f5ffd5b61019e6101993660046111b1565b6103b5565b005b61019e6101ae3660046111d1565b6103cb565b6032546101c6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101c67f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b61021360335481565b6040519081526020016101da565b61021360645481565b6102136102383660046111fc565b610401565b610245610530565b6040516101da9190611226565b61021361026036600461125b565b610560565b61019e610573565b61028c61027b36600461128b565b6001805460ff9092161b9081161490565b60405190151581526020016101da565b600154610213565b61021360655481565b6102136102bb3660046111d1565b610587565b6101c67f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6102136102f53660046111d1565b6105d0565b61021361030836600461125b565b6105da565b61019e61031b3660046112a6565b6105e7565b6102456106c2565b61019e61033636600461125b565b6106e2565b61021361034936600461125b565b6107a8565b61021361035c3660046112dc565b61083a565b606454606554604080519283526020830191909152016101da565b61021361038a3660046111d1565b61093c565b61021361039d3660046111d1565b610973565b61019e6103b03660046111d1565b61097d565b6103bd6109ea565b6103c78282610a9b565b5050565b6103d3610b3f565b60015481811681146103f85760405163c61dca5d60e01b815260040160405180910390fd5b6103c782610be2565b5f5f61040c81610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610455576040516348da714f60e01b815260040160405180910390fd5b61045f8484610c55565b6033545f61046f6103e88361132e565b90505f6103e861047d610cac565b610487919061132e565b90505f6104948783611341565b9050806104a18489611354565b6104ab919061136b565b9550855f036104cd57604051630c392ed360e11b815260040160405180910390fd5b6104d7868561132e565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561050c57604051632f14e8a360e11b815260040160405180910390fd5b610525826103e8603354610520919061132e565b610d16565b505050505092915050565b606061055b7f76312e302e300000000000000000000000000000000000000000000000000006610d62565b905090565b5f61056d6102bb836107a8565b92915050565b61057b610b3f565b6105855f19610be2565b565b5f5f6103e8603354610599919061132e565b90505f6103e86105a7610cac565b6105b1919061132e565b9050816105be8583611354565b6105c8919061136b565b949350505050565b5f61056d8261093c565b5f61056d61039d836107a8565b5f54610100900460ff161580801561060557505f54600160ff909116105b8061061e5750303b15801561061e57505f5460ff166001145b6106435760405162461bcd60e51b815260040161063a9061138a565b60405180910390fd5b5f805460ff191660011790558015610664575f805461ff0019166101001790555b61066e8484610a9b565b61067782610d9f565b80156106bc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60606040518060800160405280604d815260200161145b604d9139905090565b5f54610100900460ff161580801561070057505f54600160ff909116105b806107195750303b15801561071957505f5460ff166001145b6107355760405162461bcd60e51b815260040161063a9061138a565b5f805460ff191660011790558015610756575f805461ff0019166101001790555b61075f82610d9f565b80156103c7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa158015610816573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056d91906113d8565b5f600161084681610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161461088f576040516348da714f60e01b815260040160405180910390fd5b61089a858585610eea565b603354808411156108be57604051630b469df360e41b815260040160405180910390fd5b5f6108cb6103e88361132e565b90505f6103e86108d9610cac565b6108e3919061132e565b9050816108f08783611354565b6108fa919061136b565b94506109068684611341565b6033556109266109168683611341565b6103e8603354610520919061132e565b610931888887610f1d565b505050509392505050565b5f5f6103e860335461094e919061132e565b90505f6103e861095c610cac565b610966919061132e565b9050806105be8386611354565b5f61056d82610587565b6109856109ea565b600154801982198116146109ac5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6a91906113ef565b6001600160a01b0316336001600160a01b0316146105855760405163794821ff60e01b815260040160405180910390fd5b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610b345760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610ba1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc5919061140a565b61058557604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610c34816001805460ff9092161b9081161490565b15610c525760405163840a48d560e01b815260040160405180910390fd5b50565b606454811115610c785760405163052b07b760e21b815260040160405180910390fd5b606554610c83610cac565b1115610ca25760405163d86bae6760e01b815260040160405180910390fd5b6103c78282610f31565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cf2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055b91906113d8565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610d4a84670de0b6b3a7640000611354565b610d54919061136b565b60405190815260200161079c565b60605f610d6e83610f5f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610e095760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161063a565b603280546001600160a01b0319166001600160a01b038316179055610e2d5f610be2565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec39190611429565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610f1857604051630312abdd60e61b815260040160405180910390fd5b505050565b610f186001600160a01b0383168483610f86565b6032546001600160a01b038381169116146103c757604051630312abdd60e61b815260040160405180910390fd5b5f60ff8216601f81111561056d57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610f18928692915f91611015918516908490611094565b905080515f1480611035575080806020019051810190611035919061140a565b610f185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063a565b60606105c884845f85855f5f866001600160a01b031685876040516110b99190611444565b5f6040518083038185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b509150915061110987838387611114565b979650505050505050565b606083156111825782515f0361117b576001600160a01b0385163b61117b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063a565b50816105c8565b6105c883838151156111975781518083602001fd5b8060405162461bcd60e51b815260040161063a9190611226565b5f5f604083850312156111c2575f5ffd5b50508035926020909101359150565b5f602082840312156111e1575f5ffd5b5035919050565b6001600160a01b0381168114610c52575f5ffd5b5f5f6040838503121561120d575f5ffd5b8235611218816111e8565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561126b575f5ffd5b8135611276816111e8565b9392505050565b60ff81168114610c52575f5ffd5b5f6020828403121561129b575f5ffd5b81356112768161127d565b5f5f5f606084860312156112b8575f5ffd5b833592506020840135915060408401356112d1816111e8565b809150509250925092565b5f5f5f606084860312156112ee575f5ffd5b83356112f9816111e8565b92506020840135611309816111e8565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561056d5761056d61131a565b8181038181111561056d5761056d61131a565b808202811582820484141761056d5761056d61131a565b5f8261138557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e8575f5ffd5b5051919050565b5f602082840312156113ff575f5ffd5b8151611276816111e8565b5f6020828403121561141a575f5ffd5b81518015158114611276575f5ffd5b5f60208284031215611439575f5ffd5b81516112768161127d565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212202364f3b8737212f17e605f14c9fd3bec2a55ff6018d7ff47899660784b9c8d8a64736f6c634300081c003300", + "25": { + "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", + "code": "0x73a513e6e4b8f2a923d98304ec87f64353c4d5c853301460806040526004361061009b575f3560e01c806338412ce51161006e57806338412ce514610150578063480ff0651461016f5780636f378c061461018e578063957cae98146101ad578063c7f62387146101c0575f5ffd5b806319a79b481461009f5780631b8d43b0146100c057806320606b70146100f457806330adf81f14610129575b5f5ffd5b8180156100aa575f5ffd5b506100be6100b9366004610a4d565b6101df565b005b8180156100cb575f5ffd5b506100df6100da366004610acf565b610346565b60405190151581526020015b60405180910390f35b61011b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6040519081526020016100eb565b61011b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b81801561015b575f5ffd5b506100df61016a366004610b10565b61036b565b81801561017a575f5ffd5b506100be610189366004610b10565b610384565b818015610199575f5ffd5b506100df6101a8366004610b10565b6103cf565b61011b6101bb366004610b43565b6103dc565b8180156101cb575f5ffd5b506100be6101da366004610b10565b6103ec565b834211156102005760405163068568f360e21b815260040160405180910390fd5b5f61020a8961042d565b6001600160a01b0389165f90815260028c016020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c9290919061025983610b6e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016102d292919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f6102f7828686866104dc565b9050886001600160a01b0316816001600160a01b03161461032b57604051638baa579f60e01b815260040160405180910390fd5b6103398b8a8a8a6001610502565b5050505050505050505050565b5f610353858533856105f0565b506103608585858561067c565b506001949350505050565b5f61037a843385856001610502565b5060019392505050565b5f6001600160a01b0383166103bd57604051639cfea58360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b506103ca835f84846106f8565b505050565b5f61037a8433858561067c565b5f6103e68261042d565b92915050565b5f6001600160a01b038316610420576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b506103ca83835f846106f8565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8260405161045d9190610b86565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c001604051602081830303815290604052805190602001209050919050565b5f5f5f6104eb87878787610829565b915091506104f8816108e6565b5095945050505050565b5f6001600160a01b038516610536576040516322f051b160e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b03841661056b5760405163270af7ed60e11b81526001600160a01b0390911660048201526024016103b4565b506001600160a01b038085165f908152600187016020908152604080832093871683529290522082905580156105e957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105e091815260200190565b60405180910390a35b5050505050565b6001600160a01b038084165f90815260018601602090815260408083209386168352929052908120545f198114610670578381848082101561065e57604051630c95cf2760e11b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506106708686868685035f610502565b50600195945050505050565b5f6001600160a01b0384166106b0576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b0383166106e557604051639cfea58360e01b81526001600160a01b0390911660048201526024016103b4565b506106f2848484846106f8565b50505050565b6001600160a01b0383166107245780846003015f8282546107199190610c22565b9091555061079a9050565b6001600160a01b0383165f90815260208590526040902054838183808210156107795760405163db42144d60e01b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506001600160a01b0384165f9081526020869052604090209082900390555b6001600160a01b0382166107b85760038401805482900390556107d6565b6001600160a01b0382165f9081526020859052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161081b91815260200190565b60405180910390a350505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561085e57505f905060036108dd565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108af573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166108d7575f600192509250506108dd565b91505f90505b94509492505050565b5f8160048111156108f9576108f9610c35565b036109015750565b600181600481111561091557610915610c35565b036109625760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103b4565b600281600481111561097657610976610c35565b036109c35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103b4565b60038160048111156109d7576109d7610c35565b03610a2f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103b4565b50565b80356001600160a01b0381168114610a48575f5ffd5b919050565b5f5f5f5f5f5f5f5f5f6101208a8c031215610a66575f5ffd5b8935985060208a01359750610a7d60408b01610a32565b9650610a8b60608b01610a32565b955060808a0135945060a08a0135935060c08a013560ff81168114610aae575f5ffd5b989b979a50959894979396929550929360e081013593506101000135919050565b5f5f5f5f60808587031215610ae2575f5ffd5b84359350610af260208601610a32565b9250610b0060408601610a32565b9396929550929360600135925050565b5f5f5f60608486031215610b22575f5ffd5b83359250610b3260208501610a32565b929592945050506040919091013590565b5f60208284031215610b53575f5ffd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610b7f57610b7f610b5a565b5060010190565b5f5f83545f8160011c90506001821680610ba157607f821691505b602082108103610bbf57634e487b7160e01b5f52602260045260245ffd5b808015610bd35760018114610be857610c16565b60ff1984168752821515830287019450610c16565b5f888152602090205f5b84811015610c0e57815489820152600190910190602001610bf2565b505082870194505b50929695505050505050565b808201808211156103e6576103e6610b5a565b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220e80be273f8d8f280fc105b4d925852e7d2ff9cde2278e4bdbeffce2ddea71f7564736f6c634300081c0033000000000000000000000000", + "storage": {} + }, + "41": { + "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707", + "code": "0x735fc8d32690cc91d4c39d9d3abcbd16989f875707301460806040526004361061006b575f3560e01c8063017b73111461006f578063253946451461009057806365529675146100af5780638257f3d5146100ce578063ae8a4d98146100ed578063fe1aa59d1461010c575b5f5ffd5b81801561007a575f5ffd5b5061008e61008936600461080c565b61012b565b005b81801561009b575f5ffd5b5061008e6100aa36600461080c565b610155565b8180156100ba575f5ffd5b5061008e6100c9366004610860565b6101db565b8180156100d9575f5ffd5b5061008e6100e836600461080c565b610267565b8180156100f8575f5ffd5b5061008e61010736600461080c565b6102f8565b818015610117575f5ffd5b5061008e6101263660046108ae565b610328565b5f610138828401846109a7565b9050610150815f0151826020015183604001516103a5565b505050565b5f61016282840184610a68565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c73936101aa9390929091600401610b1b565b5f6040518083038186803b1580156101c0575f5ffd5b505af41580156101d2573d5f5f3e3d5ffd5b50505050505050565b5f6101e882840184610b4a565b90505f6102147f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79610414565b82519091506001600160a01b0316610248576102438582846020015185604001516001600160801b031661046c565b610260565b6102608582845f0151856020015186604001516104c9565b5050505050565b5f61027482840184610b7b565b80517e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab805492935091829060ff1916600183818111156102b5576102b5610bc9565b021790555081516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916102ea91610bdd565b60405180910390a150505050565b5f61030582840184610c03565b9050610322815f015182602001518360400151846060015161052e565b50505050565b5f61033582840184610cbd565b90505f61034186610414565b90505f825f01518360200151846040015160405160240161036493929190610d45565b60408051601f198184030181529190526020810180516001600160e01b031663c6b295c160e01b179052905061039b828783610679565b5050505050505050565b5f6103af84610705565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610402575f5ffd5b505af115801561039b573d5f5f3e3d5ffd5b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806104675760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506104c1848683610679565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506101d2858783610679565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156105a457604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516105b4906107bb565b6105c093929190610d78565b604051809103905ff0801580156105d9573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016106ab929190610db0565b5f604051808303815f875af11580156106c6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106ed9190810190610ddb565b915091506106fb8282610796565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b031661077a5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156107a55750806107b5565b81511561006b5781518083602001fd5b92915050565b610c3580610e6883390190565b5f5f83601f8401126107d8575f5ffd5b5081356001600160401b038111156107ee575f5ffd5b602083019150836020828501011115610805575f5ffd5b9250929050565b5f5f6020838503121561081d575f5ffd5b82356001600160401b03811115610832575f5ffd5b61083e858286016107c8565b90969095509350505050565b80356001600160a01b0381168114610467575f5ffd5b5f5f5f60408486031215610872575f5ffd5b61087b8461084a565b925060208401356001600160401b03811115610895575f5ffd5b6108a1868287016107c8565b9497909650939450505050565b5f5f5f5f606085870312156108c1575f5ffd5b843593506108d16020860161084a565b925060408501356001600160401b038111156108eb575f5ffd5b6108f7878288016107c8565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561093957610939610903565b60405290565b604051608081016001600160401b038111828210171561093957610939610903565b604051601f8201601f191681016001600160401b038111828210171561098957610989610903565b604052919050565b80356001600160801b0381168114610467575f5ffd5b5f60608284031280156109b8575f5ffd5b506109c1610917565b823581526109d16020840161084a565b60208201526109e260408401610991565b60408201529392505050565b5f6001600160401b03821115610a0657610a06610903565b50601f01601f191660200190565b5f82601f830112610a23575f5ffd5b8135602083015f610a3b610a36846109ee565b610961565b9050828152858383011115610a4e575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610a78575f5ffd5b81356001600160401b03811115610a8d575f5ffd5b820160608185031215610a9e575f5ffd5b610aa6610917565b610aaf8261084a565b81526020828101359082015260408201356001600160401b03811115610ad3575f5ffd5b610adf86828501610a14565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610b416060830184610aed565b95945050505050565b5f6060828403128015610b5b575f5ffd5b50610b64610917565b610b6d8361084a565b81526109d16020840161084a565b5f6020828403128015610b8c575f5ffd5b50604051602081016001600160401b0381118282101715610baf57610baf610903565b604052823560028110610bc0575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610bfd57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610c13575f5ffd5b81356001600160401b03811115610c28575f5ffd5b820160808185031215610c39575f5ffd5b610c4161093f565b8135815260208201356001600160401b03811115610c5d575f5ffd5b610c6986828501610a14565b60208301525060408201356001600160401b03811115610c87575f5ffd5b610c9386828501610a14565b6040830152506060820135915060ff82168214610cae575f5ffd5b60608101919091529392505050565b5f60208284031215610ccd575f5ffd5b81356001600160401b03811115610ce2575f5ffd5b820160608185031215610cf3575f5ffd5b610cfb610917565b610d048261084a565b815260208201356001600160401b03811115610d1e575f5ffd5b610d2a86828501610a14565b60208301525060408201356040820152809250505092915050565b6001600160a01b03841681526060602082018190525f90610d6890830185610aed565b9050826040830152949350505050565b606081525f610d8a6060830186610aed565b8281036020840152610d9c8186610aed565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f90610dd390830184610aed565b949350505050565b5f5f60408385031215610dec575f5ffd5b82518015158114610dfb575f5ffd5b60208401519092506001600160401b03811115610e16575f5ffd5b8301601f81018513610e26575f5ffd5b8051610e34610a36826109ee565b818152866020838501011115610e48575f5ffd5b8160208401602083015e5f60208383010152809350505050925092905056fe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea26469706673582212206e92e725aba5f5550fb3f5ffd2c5ed89d59eb518a48403936f0c95f5ffcfb03c64736f6c634300081c0033a264697066735822122057c86ab7845ab189514742f4c1a1279eb154e0f4c7de005facec0db80fa75a9164736f6c634300081c003300", + "storage": {} + }, + "45": { + "address": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf", + "code": "0x608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806366ae69a011610093578063a77cf3d211610063578063a77cf3d214610238578063ad209a9b1461024b578063bb51f1eb14610272578063df0dd0d514610285575f5ffd5b806366ae69a0146101b05780636f55bd32146101db5780638ab81d1314610202578063a401662b14610215575f5ffd5b806341c9634e116100ce57806341c9634e1461013e578063591d99ee146101545780635da57fe91461017b578063623b223d1461019b575f5ffd5b80630a7c8faa146100f45780632cdea7171461011e5780633666751314610136575b5f5ffd5b610100610dad60f31b81565b6040516001600160f01b031990911681526020015b60405180910390f35b61012661030f565b60405161011594939291906124a2565b610126610390565b6101465f5481565b604051908152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000481565b61018e610189366004612572565b61040f565b60405161011591906125b9565b6101ae6101a9366004612621565b610447565b005b6001546101c3906001600160401b031681565b6040516001600160401b039091168152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000281565b61018e610210366004612702565b6107d9565b610228610223366004612749565b6108b0565b6040519015158152602001610115565b6101ae610246366004612797565b6108bf565b6101467f000000000000000000000000000000000000000000000000000000000000001881565b6101ae6102803660046127ae565b610a37565b6102d3610293366004612797565b600a6020525f90815260409020805460018201546002909201546001600160401b0382169263ffffffff600160401b8404811693600160601b9004169185565b604080516001600160401b0396909616865263ffffffff948516602087015292909316918401919091526060830152608082015260a001610115565b6002805460035460408051600480546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20905b815481526020019060010190808311610364575b50505050508152602001600182015481525050905084565b6006805460075460408051600880546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20908154815260200190600101908083116103645750505050508152602001600182015481525050905084565b60608282101561043257604051635c85a0e760e01b815260040160405180910390fd5b61043d848484610ea1565b90505b9392505050565b5f6104518a610f2b565b8051906020012090505f61046e33835f9182526020526040902090565b905061047c818c8c8c61101d565b5f5f90505f6002905060065f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906104b89190612843565b6001600160401b0316036104d2575060019050600661052c565b60025f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906105059190612843565b6001600160401b03161461052c57604051636033c4fd60e11b815260040160405180910390fd5b61053b84848e8e858f8f61110c565b5f6105458e6112c2565b905082156106d657600654610564906001600160801b0316600161287d565b6001600160801b031661057d60808b0160608c01612843565b6001600160401b0316146105a3576040516263964160e91b815260040160405180910390fd5b5f6105c0826105b18c6113f4565b805190602001208b8b8b6114a8565b9050806105e05760405163128597bb60e01b815260040160405180910390fd5b60068054600160801b8082046001600160801b0390811690910291161760029081556007546003556008805460049061061c908290849061240d565b5060019182015491015550610639905060808b0160608c01612843565b600680546001600160801b0319166001600160401b039290921691909117905561066960a08b0160808c0161289c565b600680546001600160801b031663ffffffff92909216600160801b0291909117905560a08a0180356007556106b0906106a59060808d0161289c565b63ffffffff16611517565b805180516008916106c691839160200190612455565b5060208201518160010155905050505b5f8190556106e760208f018f61289c565b63ffffffff1660015f6101000a8154816001600160401b0302191690836001600160401b03160217905550600a5f8581526020019081526020015f205f5f82015f6101000a8154906001600160401b0302191690555f820160086101000a81549063ffffffff02191690555f8201600c6101000a81549063ffffffff0219169055600182015f9055600282015f905550507fd95fe1258d152dc91c81b09380498adc76ed36a6079bcb2ed31eff622ae2d0f1818f5f0160208101906107ac919061289c565b6040805192835263ffffffff90911660208301520160405180910390a15050505050505050505050505050565b60605f600a5f6107f233885f9182526020526040902090565b81526020019081526020015f20905083836040516020016108149291906128bf565b6040516020818303038152906040528051906020012081600201541461084d576040516333b4605560e11b815260040160405180910390fd5b6108a781600101548585808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855463ffffffff600160401b820481169350600160601b9091041690506115bc565b95945050505050565b5f6108a75f54868686866114a8565b335f9081526020829052604081205f818152600a602052604081208054929350916001600160401b03169003610908576040516319a1b6d960e21b815260040160405180910390fd5b60018101541561092b5760405163e31d900560e01b815260040160405180910390fd5b8054610961907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b4310156109815760405163c77c194960e01b815260040160405180910390fd5b80547f0000000000000000000000000000000000000000000000000000000000000018906109d9907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b6109e391906128e6565b431115610a2c575f828152600a602052604080822080546001600160801b0319168155600181018390556002019190915580516340d3544760e01b815290519081900360040190fd5b446001909101555050565b6001546001600160401b0316610a50602086018661289c565b63ffffffff1611610a74576040516303d618e560e41b815260040160405180910390fd5b600280545f906001600160801b0316610a936040880160208901612843565b6001600160401b031603610ad757610ab0600460608501356116a4565b9050610ad26060840135610ac961ffff8416600161170e565b6004919061172c565b610b54565b6006546001600160801b0316610af36040880160208901612843565b6001600160401b031603610b3b57610b10600860608501356116a4565b9050610b326060840135610b2961ffff8416600161170e565b6008919061172c565b60069150610b54565b604051636033c4fd60e11b815260040160405180910390fd5b610b7f82610b6860a08601608087016128f9565b6060860135610b7a60a088018861291f565b6117d3565b1580610bc75750610bc58585808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050506060850135611842565b155b15610be557604051637000a9fd60e11b815260040160405180910390fd5b5f610bef87610f2b565b80516020909101209050610c0960a08501608086016128f9565b6001600160a01b0316610c3282610c236020880188612964565b87602001358860400135611886565b6001600160a01b031614610c5957604051638baa579f60e01b815260040160405180910390fd5b8254610c7490600160801b90046001600160801b03166118ac565b85141580610ce857508254610c9890600160801b90046001600160801b03166118c5565b610ce68787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508754600160801b90046001600160801b031691506118f49050565b105b15610d06576040516333b4605560e11b815260040160405180910390fd5b6040805160a081018252436001600160401b031681528454600160801b900463ffffffff811660208301529091820190610d6e906001600160801b031661ffff86167f0000000000000000000000000000000000000000000000000000000000000002611c6e565b63ffffffff1681526020015f81526020018787604051602001610d929291906128bf565b60405160208183030381529060405280519060200120815250600a5f610dc133855f9182526020526040902090565b815260208082019290925260409081015f2083518154858501519386015163ffffffff908116600160601b0263ffffffff60601b1991909516600160401b026bffffffffffffffffffffffff199092166001600160401b03909316929092171716919091178155606083015160018201556080909201516002909201919091557fbee983fc706c692efb9b0240bddc5666c010a53af55ed5fb42d226e7e4293869903390610e71908a018a61289c565b604080516001600160a01b03909316835263ffffffff90911660208301520160405180910390a150505050505050565b6060610eac826118ac565b6001600160401b03811115610ec357610ec3612984565b604051908082528060200260200182016040528015610eec578160200160208202803683370190505b5090505f5b83811015610f2357610f1b82868684818110610f0f57610f0f612998565b90506020020135611cc6565b600101610ef1565b509392505050565b6060610f42610f3d604084018461291f565b611d1d565b610f79610f52602085018561289c565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b610ff5610f8c6040860160208701612843565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051602001611007939291906129c3565b6040516020818303038152906040529050919050565b5f848152600a60205260408120805490916001600160401b039091169003611058576040516319a1b6d960e21b815260040160405180910390fd5b80600101545f0361107c576040516378ef3a4760e01b815260040160405180910390fd5b6001546001600160401b0316611095602086018661289c565b63ffffffff16116110b9576040516303d618e560e41b815260040160405180910390fd5b82826040516020016110cc9291906128bf565b60405160208183030381529060405280519060200120816002015414611105576040516333b4605560e11b815260040160405180910390fd5b5050505050565b5f868152600a602052604090208054600160601b900463ffffffff1682811461114857604051630f8b88ed60e11b815260040160405180910390fd5b5f61119d83600101548989808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508a54600160801b90046001600160801b031691508690506115bc565b90505f5b848110156112b557368686838181106111bc576111bc612998565b90506020028101906111ce91906129f6565b90506111f6886111e460a08401608085016128f9565b6060840135610b7a60a086018661291f565b61121357604051637000a9fd60e11b815260040160405180910390fd5b611221838260600135611842565b61123e57604051637000a9fd60e11b815260040160405180910390fd5b61124e60a08201608083016128f9565b6001600160a01b03166112778d6112686020850185612964565b84602001358560400135611886565b6001600160a01b03161461129e57604051638baa579f60e01b815260040160405180910390fd5b6112ac838260600135611e04565b506001016111a1565b5050505050505050505050565b5f805b6112d2604084018461291f565b90508110156113da57610dad60f31b6112ee604085018561291f565b838181106112fe576112fe612998565b90506020028101906113109190612a14565b61131e906020810190612a28565b6001600160f01b031916036113d25761133a604084018461291f565b8281811061134a5761134a612998565b905060200281019061135c9190612a14565b61136a906020810190612a4f565b905060201461138c57604051633efce24360e11b815260040160405180910390fd5b611399604084018461291f565b828181106113a9576113a9612998565b90506020028101906113bb9190612a14565b6113c9906020810190612a4f565b61044091612a91565b6001016112c5565b5060405163484ab7df60e01b815260040160405180910390fd5b606061140c6114066020840184612964565b60f81b90565b61141f610f52604085016020860161289c565b6040840135611437610f8c6080870160608801612843565b61144a610f5260a088016080890161289c565b6040516001600160f81b031990951660208601526001600160e01b0319938416602186015260258501929092526001600160c01b031916604584015216604d82015260a0830135605182015260c08301356071820152609101611007565b5f6101008311156114cc57604051632f43154560e11b815260040160405180910390fd5b845f5b8481101561150a57611500828787848181106114ed576114ed612998565b905060200201358387901c600116611e38565b91506001016114cf565b5090951495945050505050565b60408051808201909152606081525f60208201525f611537601084612ac2565b15611543576001611545565b5f5b60ff16611553601085612ad5565b61155d91906128e6565b90506040518060400160405280826001600160401b0381111561158257611582612984565b6040519080825280602002602001820160405280156115ab578160200160208202803683370190505b508152602001939093525090919050565b60606115c7836118ac565b84511415806115de57506115db84846118f4565b82115b156115fc576040516302fb251f60e51b815260040160405180910390fd5b83516001600160401b0381111561161557611615612984565b60405190808252806020026020018201604052801561163e578160200160208202803683370190505b5090505f805b8382101561169a575f611658888388611e61565b90506116648782611842565b158061167557506116758482611842565b156116835750600101611644565b61168d8482611cc6565b5060019182019101611644565b5050949350505050565b5f826001015482106116c957604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83166116dd816010612ae8565b60ff16855f0183815481106116f4576116f4612998565b905f5260205f200154901c61ffff16925050505b92915050565b5f82820161ffff80851690821610156104405761ffff915050611708565b8260010154821061175057604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83165f611765826010612ae8565b60ff1661ffff901b1990505f82601061177e9190612ae8565b60ff168561ffff16901b90508082885f0186815481106117a0576117a0612998565b905f5260205f2001541617875f0185815481106117bf576117bf612998565b5f9182526020909120015550505050505050565b6040516bffffffffffffffffffffffff19606086901b1660208201525f90819060340160408051808303601f190181529190528051602090910120600188015488549192506118379183908890600160801b90046001600160801b03168888611e84565b979650505050505050565b5f5f600883901c90506118778385838151811061186157611861612998565b6020026020010151611eaf90919063ffffffff16565b60ff1660011491505092915050565b5f5f5f61189587878787611eb9565b915091506118a281611f76565b5095945050505050565b5f6101006118bb8360ff6128e6565b6117089190612ad5565b5f60038211156118f05760036118dc600184612b0b565b6118e69190612ad5565b6117089083612b0b565b5090565b5f81158061190157508251155b1561190d57505f611708565b5f610100830460ff8416825b82811080156119285750865181105b15611abd575f87828151811061194057611940612998565b602002602001015190505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b0382160190508085019450508080600101915050611919565b505f81118015611acd5750855182105b15611c64575f6001826001901b0390505f81888581518110611af157611af1612998565b60200260200101511690505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b038216019050808501945050505b5090949350505050565b5f81611c7b8560016120c7565b611c8590826128e6565b9050611c928460016120c7565b611c9d906002612b1e565b611ca89060016128e6565b611cb290826128e6565b90506108a781611cc1876118c5565b612104565b5f600882901c9050611cfa82848381518110611ce457611ce4612998565b602002602001015161211990919063ffffffff16565b838281518110611d0c57611d0c612998565b602002602001018181525050505050565b60605f611d2983612126565b90505f5b83811015610f235781858583818110611d4857611d48612998565b9050602002810190611d5a9190612a14565b611d68906020810190612a28565b611da4878785818110611d7d57611d7d612998565b9050602002810190611d8f9190612a14565b611d9d906020810190612a4f565b9050612126565b878785818110611db657611db6612998565b9050602002810190611dc89190612a14565b611dd6906020810190612a4f565b604051602001611dea959493929190612b35565b60408051601f198184030181529190529150600101611d2d565b5f600882901c9050611cfa82848381518110611e2257611e22612998565b602002602001015161215690919063ffffffff16565b5f818015611e4c57835f5284602052611e54565b845f52836020525b505060405f209392505050565b5f815f03611e7057505f610440565b505f92835260209190915260409091200690565b5f838510611e9357505f611ea5565b611ea08686868686612164565b871490505b9695505050505050565b60ff161c60011690565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611eee57505f90506003611f6d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f3f573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116611f67575f60019250925050611f6d565b91505f90505b94509492505050565b5f816004811115611f8957611f89612b71565b03611f915750565b6001816004811115611fa557611fa5612b71565b03611ff75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561200b5761200b612b71565b036120585760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611fee565b600381600481111561206c5761206c612b71565b036120c45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611fee565b50565b5f5f6120d28461220a565b90506120dd8361229d565b80156120ec575083816001901b105b6120f6575f6120f9565b60015b60ff16019392505050565b5f8183106121125781610440565b5090919050565b600160ff919091161b1790565b606063ffffffff82111561214d57604051637404cccd60e11b815260040160405180910390fd5b611708826122c9565b600160ff919091161b191690565b5f85815b838110156121ff57866001166001148061218457508587600101145b156121bb576121b485858381811061219e5761219e612998565b90506020020135835f9182526020526040902090565b91506121e9565b6121e6828686848181106121d1576121d1612998565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501612168565b509695505050505050565b5f80608083901c1561221e57608092831c92015b604083901c1561223057604092831c92015b602083901c1561224257602092831c92015b601083901c1561225457601092831c92015b600883901c1561226657600892831c92015b600483901c1561227857600492831c92015b600283901c1561228a57600292831c92015b600183901c156117085760010192915050565b5f60028260038111156122b2576122b2612b71565b6122bc9190612b85565b60ff166001149050919050565b6060603f8263ffffffff16116122f457604051603f60fa1b60fa84901b166020820152602101611007565b613fff8263ffffffff16116123535761233061231c6403fffffffc600285901b166001612ba6565b600881811b62ffff001691901c60ff161790565b604051602001611007919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116123c5576123a260028363ffffffff16901b600261237e9190612ba6565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b604051602001611007919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b166021820152602501611007565b828054828255905f5260205f20908101928215612449575f5260205f209182015b8281111561244957825482559160010191906001019061242e565b506118f092915061248e565b828054828255905f5260205f20908101928215612449579160200282015b82811115612449578251825591602001919060010190612473565b5b808211156118f0575f815560010161248f565b6001600160801b03851681526001600160801b0384166020820152826040820152608060608201525f60c0820183516040608085015281815180845260e0860191506020830193505f92505b8083101561251157835182526020820191506020840193506001830192506124ee565b50602086015160a086015280935050505095945050505050565b5f5f83601f84011261253b575f5ffd5b5081356001600160401b03811115612551575f5ffd5b6020830191508360208260051b850101111561256b575f5ffd5b9250929050565b5f5f5f60408486031215612584575f5ffd5b83356001600160401b03811115612599575f5ffd5b6125a58682870161252b565b909790965060209590950135949350505050565b602080825282518282018190525f918401906040840190835b818110156125f05783518352602093840193909201916001016125d2565b509095945050505050565b5f6060828403121561260b575f5ffd5b50919050565b5f60e0828403121561260b575f5ffd5b5f5f5f5f5f5f5f5f5f6101808a8c03121561263a575f5ffd5b89356001600160401b0381111561264f575f5ffd5b61265b8c828d016125fb565b99505060208a01356001600160401b03811115612676575f5ffd5b6126828c828d0161252b565b90995097505060408a01356001600160401b038111156126a0575f5ffd5b6126ac8c828d0161252b565b90975095506126c090508b60608c01612611565b93506101408a01356001600160401b038111156126db575f5ffd5b6126e78c828d0161252b565b9a9d999c50979a969995989497966101600135949350505050565b5f5f5f60408486031215612714575f5ffd5b8335925060208401356001600160401b03811115612730575f5ffd5b61273c8682870161252b565b9497909650939450505050565b5f5f5f5f6060858703121561275c575f5ffd5b8435935060208501356001600160401b03811115612778575f5ffd5b6127848782880161252b565b9598909750949560400135949350505050565b5f602082840312156127a7575f5ffd5b5035919050565b5f5f5f5f606085870312156127c1575f5ffd5b84356001600160401b038111156127d6575f5ffd5b6127e2878288016125fb565b94505060208501356001600160401b038111156127fd575f5ffd5b6128098782880161252b565b90945092505060408501356001600160401b03811115612827575f5ffd5b850160c08188031215612838575f5ffd5b939692955090935050565b5f60208284031215612853575f5ffd5b81356001600160401b0381168114610440575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561170857611708612869565b5f602082840312156128ac575f5ffd5b813563ffffffff81168114610440575f5ffd5b5f6001600160fb1b038311156128d3575f5ffd5b8260051b80858437919091019392505050565b8082018082111561170857611708612869565b5f60208284031215612909575f5ffd5b81356001600160a01b0381168114610440575f5ffd5b5f5f8335601e19843603018112612934575f5ffd5b8301803591506001600160401b0382111561294d575f5ffd5b6020019150600581901b360382131561256b575f5ffd5b5f60208284031215612974575f5ffd5b813560ff81168114610440575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f6129ce82866129ac565b6001600160e01b031994909416845250506001600160c01b0319166004820152600c01919050565b5f823560be19833603018112612a0a575f5ffd5b9190910192915050565b5f8235603e19833603018112612a0a575f5ffd5b5f60208284031215612a38575f5ffd5b81356001600160f01b031981168114610440575f5ffd5b5f5f8335601e19843603018112612a64575f5ffd5b8301803591506001600160401b03821115612a7d575f5ffd5b60200191503681900382131561256b575f5ffd5b80356020831015611708575f19602084900360031b1b1692915050565b634e487b7160e01b5f52601260045260245ffd5b5f82612ad057612ad0612aae565b500690565b5f82612ae357612ae3612aae565b500490565b60ff8181168382160290811690818114612b0457612b04612869565b5092915050565b8181038181111561170857611708612869565b808202811582820484141761170857611708612869565b5f612b4082886129ac565b6001600160f01b031987168152612b5a60028201876129ac565b9050838582375f9301928352509095945050505050565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680612b9757612b97612aae565b8060ff84160691505092915050565b63ffffffff81811683821601908111156117085761170861286956fe33333333333333333333333333333333333333333333333333333333333333330000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f555555555555555555555555555555555555555555555555555555555555555500ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffa26469706673582212203af1e852e76149687fdd45ba604c70832aa6c558a5b4649af898e0fb9a2a242c64736f6c634300081c003300", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000200000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000200000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000001" } }, - "24": { - "address": "0xBeaAFDA2E17fC95E69Dc06878039d274E0d2B21A", - "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c11131481565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea2646970667358221220c0cb81d4a21d0eba005b3a8e586341c26034d8b6f4bc7492f673795b56a1044c64736f6c634300081c00330000", - "storage": {} + "2": { + "address": "0x1111111111111111111111111111111111111111", + "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c80632baeceb71461004e5780638381f58a146100585780638da5cb5b14610073578063d826f88f1461009e575b5f5ffd5b6100566100a6565b005b6100605f5481565b6040519081526020015b60405180910390f35b600154610086906001600160a01b031681565b6040516001600160a01b03909116815260200161006a565b61005661010d565b5f5f54116100fb5760405162461bcd60e51b815260206004820152601f60248201527f4e756d6265722073686f756c642062652067726561746572207468616e20300060448201526064015b60405180910390fd5b60015f54610109919061016d565b5f55565b6001546001600160a01b031633146101675760405162461bcd60e51b815260206004820152601760248201527f4f6e6c792063616c6c61626c65206279206f776e65722100000000000000000060448201526064016100f2565b600a5f55565b8181038181111561018c57634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220ac5899491afd834afd223fd632497d1c0c7593961eda22f04c58db4b504999cf64736f6c634300081c0033000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000000a" + } }, - "44": { - "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", - "code": "0x73dc64a140aa3e981100a9beca4e685f962f0cf6c93014608060405260043610610090575f3560e01c8063741fad8811610063578063741fad88146101125780638257f3d514610131578063ae8a4d9814610150578063c31308d11461016f575f5ffd5b80630c86ea461461009457806325394645146100b55780635b2e9c4c146100d457806365529675146100f3575b5f5ffd5b81801561009f575f5ffd5b506100b36100ae366004610a3a565b61018e565b005b8180156100c0575f5ffd5b506100b36100cf366004610a3a565b610229565b8180156100df575f5ffd5b506100b36100ee366004610a3a565b6102af565b8180156100fe575f5ffd5b506100b361010d366004610a8f565b610337565b81801561011d575f5ffd5b506100b361012c366004610adf565b6103aa565b81801561013c575f5ffd5b506100b361014b366004610a3a565b610433565b81801561015b575f5ffd5b506100b361016a366004610a3a565b6104c4565b81801561017a575f5ffd5b506100b3610189366004610a8f565b6104ee565b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f65f6101bc84840185610baf565b8051835560208101516001840180546fffffffffffffffffffffffffffffffff19166001600160801b039092169190911790556040808201516002850155519091507f5e3c25378b5946068b94aa2ea10c4c1e215cc975f994322b159ddc9237a973d4905f90a150505050565b5f61023682840184610c6d565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c739361027e9390929091600401610d22565b5f6040518083038186803b158015610294575f5ffd5b505af41580156102a6573d5f5f3e3d5ffd5b50505050505050565b7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e5f6102dd84840185610d51565b805160208201516001600160801b03908116600160801b0291161760028401556040808201516003850155519091507f4793c0cb5bef4b1fdbbfbcf17e06991844eb881088b012442af17a12ff38d5cd905f90a150505050565b5f61034482840184610d86565b90505f610353825f01516105c4565b60208301519091506001600160a01b031661038a576103858582846040015185606001516001600160801b031661061c565b6103a3565b6103a38582846020015185604001518660600151610679565b5050505050565b60408051637061726160e01b602080830191909152607d60e31b602483015282516008818403018152602890920190925280519101206103eb9084906106de565b15610408576040516282b42960e81b815260040160405180910390fd5b5f61041582840184610de4565b905061042d815f0151826020015183604001516106e9565b50505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f61046084840185610e2f565b8051835491925090839060ff19166001838181111561048157610481610e7d565b021790555080516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916104b691610e91565b60405180910390a150505050565b5f6104d182840184610eb7565b905061042d815f0151826020015183604001518460600151610762565b5f6104fb82840184610f71565b90505f61050a825f01516105c4565b90508160200151515f03610531576040516309e256f760e21b815260040160405180910390fd5b5f5f836020015180602001905181019061054b919061104f565b90925090505f82801561056057610560610e7d565b036102a6575f5f5f8380602001905181019061057c919061109f565b919450925090506001600160a01b0383166105ab576105a68a8784846001600160801b031661061c565b6105b8565b6105b88a87858585610679565b50505050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106175760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506106718486836108ad565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506102a68587836108ad565b818114155b92915050565b5f6106f384610939565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610746575f5ffd5b505af1158015610758573d5f5f3e3d5ffd5b5050505050505050565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156107d857604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516107e8906109e9565b6107f4939291906110e9565b604051809103905ff08015801561080d573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016108df929190611121565b5f604051808303815f875af11580156108fa573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610921919081019061114c565b9150915061092f82826109ca565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b03166109ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156109d95750806106e3565b8151156100905781518083602001fd5b610c358061116d83390190565b5f5f83601f840112610a06575f5ffd5b5081356001600160401b03811115610a1c575f5ffd5b602083019150836020828501011115610a33575f5ffd5b9250929050565b5f5f60208385031215610a4b575f5ffd5b82356001600160401b03811115610a60575f5ffd5b610a6c858286016109f6565b90969095509350505050565b6001600160a01b0381168114610a8c575f5ffd5b50565b5f5f5f60408486031215610aa1575f5ffd5b8335610aac81610a78565b925060208401356001600160401b03811115610ac6575f5ffd5b610ad2868287016109f6565b9497909650939450505050565b5f5f5f60408486031215610af1575f5ffd5b8335925060208401356001600160401b03811115610ac6575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715610b4357610b43610b0d565b60405290565b604051608081016001600160401b0381118282101715610b4357610b43610b0d565b604051601f8201601f191681016001600160401b0381118282101715610b9357610b93610b0d565b604052919050565b6001600160801b0381168114610a8c575f5ffd5b5f6060828403128015610bc0575f5ffd5b50610bc9610b21565b823581526020830135610bdb81610b9b565b60208201526040928301359281019290925250919050565b5f6001600160401b03821115610c0b57610c0b610b0d565b50601f01601f191660200190565b5f82601f830112610c28575f5ffd5b8135602083015f610c40610c3b84610bf3565b610b6b565b9050828152858383011115610c53575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610c7d575f5ffd5b81356001600160401b03811115610c92575f5ffd5b820160608185031215610ca3575f5ffd5b610cab610b21565b8135610cb681610a78565b81526020828101359082015260408201356001600160401b03811115610cda575f5ffd5b610ce686828501610c19565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610d486060830184610cf4565b95945050505050565b5f6060828403128015610d62575f5ffd5b50610d6b610b21565b8235610d7681610b9b565b81526020830135610bdb81610b9b565b5f6080828403128015610d97575f5ffd5b50610da0610b49565b823581526020830135610db281610a78565b60208201526040830135610dc581610a78565b60408201526060830135610dd881610b9b565b60608201529392505050565b5f6060828403128015610df5575f5ffd5b50610dfe610b21565b823581526020830135610e1081610a78565b60208201526040830135610e2381610b9b565b60408201529392505050565b5f6020828403128015610e40575f5ffd5b50604051602081016001600160401b0381118282101715610e6357610e63610b0d565b604052823560028110610e74575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610eb157634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610ec7575f5ffd5b81356001600160401b03811115610edc575f5ffd5b820160808185031215610eed575f5ffd5b610ef5610b49565b8135815260208201356001600160401b03811115610f11575f5ffd5b610f1d86828501610c19565b60208301525060408201356001600160401b03811115610f3b575f5ffd5b610f4786828501610c19565b6040830152506060820135915060ff82168214610f62575f5ffd5b60608101919091529392505050565b5f60208284031215610f81575f5ffd5b81356001600160401b03811115610f96575f5ffd5b820160408185031215610fa7575f5ffd5b604080519081016001600160401b0381118282101715610fc957610fc9610b0d565b6040528135815260208201356001600160401b03811115610fe8575f5ffd5b610ff486828501610c19565b602083015250949350505050565b5f82601f830112611011575f5ffd5b815161101f610c3b82610bf3565b818152846020838601011115611033575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f60408385031215611060575f5ffd5b82516001811061106e575f5ffd5b60208401519092506001600160401b03811115611089575f5ffd5b61109585828601611002565b9150509250929050565b5f5f5f606084860312156110b1575f5ffd5b83516110bc81610a78565b60208501519093506110cd81610a78565b60408501519092506110de81610b9b565b809150509250925092565b606081525f6110fb6060830186610cf4565b828103602084015261110d8186610cf4565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f9061114490830184610cf4565b949350505050565b5f5f6040838503121561115d575f5ffd5b8251801515811461106e575f5ffdfe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea26469706673582212206e92e725aba5f5550fb3f5ffd2c5ed89d59eb518a48403936f0c95f5ffcfb03c64736f6c634300081c0033a264697066735822122021e02665450ab1dc327f4f151b72d6f0fd9bb0003aa73c10c59567af9cef984764736f6c634300081c0033000000000000000000000000", - "storage": {} - }, - "9": { - "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", - "code": "0x738a791620dd6260079bf849dc5567adc3f2fdc3183014608060405260043610610090575f3560e01c8063ab55562e11610063578063ab55562e146100fd578063af18d14214610105578063c82b5f451461010d578063ded905d514610115575f5ffd5b80632db726161461009457806379d0e91c146100bc5780637cb1a954146100e05780639ce504ff146100f6575b5f5ffd5b6100a76100a23660046109da565b61011c565b60405190151581526020015b60405180910390f35b6100c7600160f81b81565b6040516001600160f81b031990911681526020016100b3565b6100e8600581565b6040519081526020016100b3565b6100c75f81565b6100e8600681565b6100e8600481565b6100e8600881565b6100e85f81565b5f6101318461012b8580610a64565b84610278565b61013c57505f61026f565b6101496020840184610a82565b6020013583806020019061015d9190610a82565b351061016a57505f61026f565b5f61017e866101798680610a64565b610419565b90505f6101c7826101926020880188610a82565b356101a06020890189610a82565b602001358880602001906101b49190610a82565b6101c2906040810190610a96565b610434565b90505f6101e56101df36889003880160408901610b1d565b836104da565b90506001600160a01b03891663a401662b826102056101008a018a610a96565b8a61012001356040518563ffffffff1660e01b815260040161022a9493929190610bbc565b602060405180830381865afa158015610245573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102699190610c00565b93505050505b95945050505050565b5f5f82610285575f61028b565b600160f81b5b90505f5b61029c6080860186610a96565b905081101561040c575f6102b36080870187610a96565b838181106102c3576102c3610c1b565b90506020028101906102d59190610a82565b3514801561032157506102eb6080860186610a96565b828181106102fb576102fb610c1b565b905060200281019061030d9190610a82565b61031b906040810190610c2f565b90506021145b801561039657506001600160f81b031982166103406080870187610a96565b8381811061035057610350610c1b565b90506020028101906103629190610a82565b610370906040810190610c2f565b5f81811061038057610380610c1b565b9050013560f81c60f81b6001600160f81b031916145b80156103f457506103aa6080860186610a96565b828181106103ba576103ba610c1b565b90506020028101906103cc9190610a82565b6103da906040810190610c2f565b6103e8916001908290610c72565b6103f191610c99565b86145b1561040457600192505050610412565b60010161028f565b505f9150505b9392505050565b5f610424838361062c565b8051906020012090505b92915050565b5f85815b838110156104cf57866001166001148061045457508587600101145b1561048b5761048485858381811061046e5761046e610c1b565b90506020020135835f9182526020526040902090565b91506104b9565b6104b6828686848181106104a1576104a1610c1b565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501610438565b509695505050505050565b81515f90819060f81b6105128560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b856040015161058887606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b60605f823561063e60208501356106b8565b6040850135606086013561065d6106586080890189610a96565b6106e8565b604051602001610671959493929190610ccd565b60405160208183030381529060405290508361068d82516106b8565b826040516020016106a093929190610d00565b60405160208183030381529060405291505092915050565b606063ffffffff8211156106df57604051637404cccd60e11b815260040160405180910390fd5b61042e82610778565b60408051602081019091525f808252606091905b8381101561075c578161073186868481811061071a5761071a610c1b565b905060200281019061072c9190610a82565b6108d3565b604051602001610742929190610d24565b60408051601f1981840301815291905291506001016106fc565b50610766836106b8565b816040516020016106a0929190610d24565b6060603f8263ffffffff16116107b557604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff1611610814576107f16107dd6403fffffffc600285901b166001610d3a565b600881811b62ffff001691901c60ff161790565b60405160200161079f919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116108865761086360028363ffffffff16901b600261083f9190610d3a565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b60405160200161079f919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b16602182015260250161079f565b919050565b60608135600614806108e6575081356004145b806108f2575081356005145b1561094457813560f81b61090c6040840160208501610d62565b61092361091c6040860186610c2f565b90506106b8565b6109306040860186610c2f565b60405160200161079f959493929190610d7b565b813561097b575f61095b61091c6040850185610c2f565b6109686040850185610c2f565b60405160200161079f9493929190610dbb565b60071982350161099a57604051600160fb1b602082015260210161079f565b604051635422005560e11b815260040160405180910390fd5b80356001600160e01b0319811681146108ce575f5ffd5b80151581146109d7575f5ffd5b50565b5f5f5f5f5f60a086880312156109ee575f5ffd5b85356001600160a01b0381168114610a04575f5ffd5b9450610a12602087016109b3565b935060408601359250606086013567ffffffffffffffff811115610a34575f5ffd5b86016101408189031215610a46575f5ffd5b91506080860135610a56816109ca565b809150509295509295909350565b5f8235609e19833603018112610a78575f5ffd5b9190910192915050565b5f8235605e19833603018112610a78575f5ffd5b5f5f8335601e19843603018112610aab575f5ffd5b83018035915067ffffffffffffffff821115610ac5575f5ffd5b6020019150600581901b3603821315610adc575f5ffd5b9250929050565b803560ff811681146108ce575f5ffd5b803563ffffffff811681146108ce575f5ffd5b803567ffffffffffffffff811681146108ce575f5ffd5b5f60c0828403128015610b2e575f5ffd5b5060405160c0810167ffffffffffffffff81118282101715610b5e57634e487b7160e01b5f52604160045260245ffd5b604052610b6a83610ae3565b8152610b7860208401610af3565b602082015260408381013590820152610b9360608401610b06565b6060820152610ba460808401610af3565b608082015260a0928301359281019290925250919050565b84815260606020820181905281018390525f6001600160fb1b03841115610be1575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215610c10575f5ffd5b8151610412816109ca565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112610c44575f5ffd5b83018035915067ffffffffffffffff821115610c5e575f5ffd5b602001915036819003821315610adc575f5ffd5b5f5f85851115610c80575f5ffd5b83861115610c8c575f5ffd5b5050820193919092039150565b8035602083101561042e575f19602084900360031b1b1692915050565b5f81518060208401855e5f93019283525090919050565b8581525f610cde6020830187610cb6565b858152846020820152610cf46040820185610cb6565b98975050505050505050565b6001600160e01b0319841681525f61026f610d1e6004840186610cb6565b84610cb6565b5f610d32610d1e8386610cb6565b949350505050565b63ffffffff818116838216019081111561042e57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215610d72575f5ffd5b610412826109b3565b6001600160f81b0319861681526001600160e01b0319851660018201525f610da66005830186610cb6565b838582375f9301928352509095945050505050565b6001600160f81b0319851681525f610dd66001830186610cb6565b838582375f9301928352509094935050505056fea2646970667358221220c01d1eab658ad83869626a17b6ba270bf7c192e63427aa6f49cfaf85f01e51a064736f6c634300081c003300", - "storage": {} - }, - "43": { + "42": { "address": "0x95401dc811bb5740090279Ba06cfA8fcF6113778", "code": "0x608060405234801561000f575f5ffd5b50600436106100cb575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101a7578063a457c2d7146101af578063a9059cbb146101c2578063dd62ed3e146101d5575f5ffd5b806342966c681461015757806370a082311461016c57806379cc679014610194575f5ffd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610122578063313ce567146101355780633950935114610144575b5f5ffd5b6100d76101e8565b6040516100e49190610826565b60405180910390f35b6101006100fb366004610876565b610278565b60405190151581526020016100e4565b6002545b6040519081526020016100e4565b61010061013036600461089e565b610291565b604051601281526020016100e4565b610100610152366004610876565b6102b4565b61016a6101653660046108d8565b6102d5565b005b61011461017a3660046108ef565b6001600160a01b03165f9081526020819052604090205490565b61016a6101a2366004610876565b6102e2565b6100d76102fb565b6101006101bd366004610876565b61030a565b6101006101d0366004610876565b610389565b6101146101e336600461090f565b610396565b6060600380546101f790610940565b80601f016020809104026020016040519081016040528092919081815260200182805461022390610940565b801561026e5780601f106102455761010080835404028352916020019161026e565b820191905f5260205f20905b81548152906001019060200180831161025157829003601f168201915b5050505050905090565b5f336102858185856103c0565b60019150505b92915050565b5f3361029e8582856104e4565b6102a985858561055c565b506001949350505050565b5f336102858185856102c68383610396565b6102d09190610978565b6103c0565b6102df33826106fe565b50565b6102ed8233836104e4565b6102f782826106fe565b5050565b6060600480546101f790610940565b5f33816103178286610396565b90508381101561037c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102a982868684036103c0565b5f3361028581858561055c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610373565b6001600160a01b0382166104835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610373565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6104ef8484610396565b90505f19811461055657818110156105495760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610373565b61055684848484036103c0565b50505050565b6001600160a01b0383166105c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610373565b6001600160a01b0382166106225760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610373565b6001600160a01b0383165f90815260208190526040902054818110156106995760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610373565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610556565b6001600160a01b03821661075e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610373565b6001600160a01b0382165f90815260208190526040902054818110156107d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610373565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016104d7565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610871575f5ffd5b919050565b5f5f60408385031215610887575f5ffd5b6108908361085b565b946020939093013593505050565b5f5f5f606084860312156108b0575f5ffd5b6108b98461085b565b92506108c76020850161085b565b929592945050506040919091013590565b5f602082840312156108e8575f5ffd5b5035919050565b5f602082840312156108ff575f5ffd5b6109088261085b565b9392505050565b5f5f60408385031215610920575f5ffd5b6109298361085b565b91506109376020840161085b565b90509250929050565b600181811c9082168061095457607f821691505b60208210810361097257634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561028b57634e487b7160e01b5f52601160045260245ffdfea2646970667358221220ce078995d1571490db6721fa1b86d89608966ee2c1b88b2f37be45cd7ae3068b64736f6c634300081c0033000000000000000000", "storage": { - "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", "0x0000000000000000000000000000000000000000000000000000000000000003": "0x54657374546f6b656e0000000000000000000000000000000000000000000012", + "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x5445535400000000000000000000000000000000000000000000000000000008" } }, - "45": { + "47": { + "address": "0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000004e1": "0x00000000000000000000000000000000000000000000000000000000695f79cb", + "0x00000000000000000000000000000000000000000000000000000000000024ac": "0x77790c80af2164a5c0ccc4e71e2d65ed51f6b4a0c5c5252d933ea896003db6bf", + "0x0000000000000000000000000000000000000000000000000000000000002509": "0xa8ba1baac2c3626f7541877d2d317ff4a7497c7b71560660f78fddeefbb9f275", + "0x00000000000000000000000000000000000000000000000000000000000004b1": "0x00000000000000000000000000000000000000000000000000000000695f799b", + "0x00000000000000000000000000000000000000000000000000000000000024f6": "0x563a6f4e90fea736f33cfd596f65c72ecef865f720b4df70c193575313019af7", + "0x00000000000000000000000000000000000000000000000000000000000024dc": "0x2623b06cf3a98a4d11117b9dd295f1b22aac09eeb13946fb246a902691a84c8b", + "0x0000000000000000000000000000000000000000000000000000000000002533": "0xcd0b4932dd8eed11c92969bc7e3b5e201ef91067ebbc5e941327595c3bec4762", + "0x0000000000000000000000000000000000000000000000000000000000000500": "0x00000000000000000000000000000000000000000000000000000000695f79ea", + "0x000000000000000000000000000000000000000000000000000000000000051c": "0x00000000000000000000000000000000000000000000000000000000695f7a06", + "0x00000000000000000000000000000000000000000000000000000000000024e1": "0xa96be8323eea02274e4a45844aec7e4c5754c45b3a8b6e24d8bbbb326d3641ac", + "0x00000000000000000000000000000000000000000000000000000000000004d4": "0x00000000000000000000000000000000000000000000000000000000695f79be", + "0x0000000000000000000000000000000000000000000000000000000000000546": "0x00000000000000000000000000000000000000000000000000000000695f7a30", + "0x00000000000000000000000000000000000000000000000000000000000024aa": "0x3bf5a51821a0f59acd1dbff81febe443649d88708ad87ec98eac9e2245190c8f", + "0x0000000000000000000000000000000000000000000000000000000000002519": "0x79a725e77bed515800728ad28d41c84a6f9b26898225b4ea425ddf7a3aa5aae9", + "0x00000000000000000000000000000000000000000000000000000000000004b3": "0x00000000000000000000000000000000000000000000000000000000695f799d", + "0x00000000000000000000000000000000000000000000000000000000000004bf": "0x00000000000000000000000000000000000000000000000000000000695f79a9", + "0x00000000000000000000000000000000000000000000000000000000000024b7": "0xafdf92f43b0837f4d633ef396c1740296edc655f702270c55551d0fa9737fdd5", + "0x00000000000000000000000000000000000000000000000000000000000024e5": "0x15ad966176e619fdc13791c1cc4135076b85065b63faf875470296a757161d41", + "0x0000000000000000000000000000000000000000000000000000000000002508": "0xdf38a58a3b1a1ee3d2127e5beac0fb5fd6d7ba1eba3a3612dc25aed8ba1b3916", + "0x0000000000000000000000000000000000000000000000000000000000002523": "0x0d23cb0f24fb7e679ec91eb0a08e19146d9681fbe523e646c3c0fa9e855810e7", + "0x00000000000000000000000000000000000000000000000000000000000004f5": "0x00000000000000000000000000000000000000000000000000000000695f79df", + "0x00000000000000000000000000000000000000000000000000000000000004a3": "0x00000000000000000000000000000000000000000000000000000000695f798d", + "0x000000000000000000000000000000000000000000000000000000000000254f": "0xc6b00d525d4faef8ccbac99c7fca4fb1ac7780f129a8c5a9fcf965a385c16949", + "0x0000000000000000000000000000000000000000000000000000000000000514": "0x00000000000000000000000000000000000000000000000000000000695f79fe", + "0x00000000000000000000000000000000000000000000000000000000000004d8": "0x00000000000000000000000000000000000000000000000000000000695f79c2", + "0x00000000000000000000000000000000000000000000000000000000000024a0": "0x1354fd72915f9687d839e6c00976e89793b3ac12eec3136c0c90e61e1527fe94", + "0x00000000000000000000000000000000000000000000000000000000000024ad": "0xd36b073269f227fca28d79ba46844113276e2489fed61e3eb47292e823aed42c", + "0x0000000000000000000000000000000000000000000000000000000000002501": "0xd97a7afdbcba622a1909d16e52a8154a904ea5c18c85980112b289f472f9bccf", + "0x00000000000000000000000000000000000000000000000000000000000024e9": "0x15a6bbcce1e2fddafda048baeecc33bc6751003d136c81427e21c8693789a085", + "0x0000000000000000000000000000000000000000000000000000000000002527": "0x5792d530bbafe7dbb08827a41831ba411722745f1ddd5a65dfdd44d8fd844a7a", + "0x00000000000000000000000000000000000000000000000000000000000004d6": "0x00000000000000000000000000000000000000000000000000000000695f79c0", + "0x0000000000000000000000000000000000000000000000000000000000002559": "0xdf0400b5f6c1bb00f8b9c9c4e27ce898c774865ea9fc374e5924668c52949817", + "0x0000000000000000000000000000000000000000000000000000000000002554": "0x1e5a411172f218b33cfdae94361d635f74f53fb1836153b0acf047dc21fc0ad0", + "0x0000000000000000000000000000000000000000000000000000000000002561": "0x6c17ed9fadd145aa430641c5d14aa235bc0f78bb64b4efe7b6a87545766a52fc", + "0x00000000000000000000000000000000000000000000000000000000000024c6": "0x72f7b209b92b77000fe795cf6c6e8691d50e9fd048e062d59c7b136632450433", + "0x00000000000000000000000000000000000000000000000000000000000004a0": "0x00000000000000000000000000000000000000000000000000000000695f798a", + "0x00000000000000000000000000000000000000000000000000000000000004ca": "0x00000000000000000000000000000000000000000000000000000000695f79b4", + "0x0000000000000000000000000000000000000000000000000000000000000520": "0x00000000000000000000000000000000000000000000000000000000695f7a0a", + "0x00000000000000000000000000000000000000000000000000000000000004e8": "0x00000000000000000000000000000000000000000000000000000000695f79d2", + "0x000000000000000000000000000000000000000000000000000000000000054c": "0x00000000000000000000000000000000000000000000000000000000695f7a36", + "0x00000000000000000000000000000000000000000000000000000000000004dc": "0x00000000000000000000000000000000000000000000000000000000695f79c6", + "0x000000000000000000000000000000000000000000000000000000000000055c": "0x00000000000000000000000000000000000000000000000000000000695f7a46", + "0x00000000000000000000000000000000000000000000000000000000000024ce": "0x62ad3a005db65cac6d0c08ecfad5d9dcf3677a0e4f939d2a2f7d30e2bc370a8a", + "0x00000000000000000000000000000000000000000000000000000000000024bf": "0x564416e02b37e9a48a147eaa23c3e86d372747a8ade8849003667fbf226acb43", + "0x000000000000000000000000000000000000000000000000000000000000055f": "0x00000000000000000000000000000000000000000000000000000000695f7a49", + "0x00000000000000000000000000000000000000000000000000000000000004fd": "0x00000000000000000000000000000000000000000000000000000000695f79e7", + "0x000000000000000000000000000000000000000000000000000000000000252a": "0x5b768bb74c4eeaf0b9f2783f8a9a92d81c8d1812c50e1769fa35010e7856edba", + "0x000000000000000000000000000000000000000000000000000000000000052a": "0x00000000000000000000000000000000000000000000000000000000695f7a14", + "0x0000000000000000000000000000000000000000000000000000000000000542": "0x00000000000000000000000000000000000000000000000000000000695f7a2c", + "0x00000000000000000000000000000000000000000000000000000000000004d5": "0x00000000000000000000000000000000000000000000000000000000695f79bf", + "0x0000000000000000000000000000000000000000000000000000000000000569": "0x00000000000000000000000000000000000000000000000000000000695f7a53", + "0x0000000000000000000000000000000000000000000000000000000000002506": "0x960ff5b666d92ee98a865590d70f2b9b6d73fd9cb303e1b60f3ee4070b5e6fdb", + "0x0000000000000000000000000000000000000000000000000000000000002528": "0x1da0370457d0f24fc68926b62ba1cac02adef08607f987028da33c177ad24b9f", + "0x000000000000000000000000000000000000000000000000000000000000255b": "0x728a228610e899ef657129b9564c5109a26ea996d73a2d8178b5fe2b08809856", + "0x00000000000000000000000000000000000000000000000000000000000004c3": "0x00000000000000000000000000000000000000000000000000000000695f79ad", + "0x0000000000000000000000000000000000000000000000000000000000002545": "0xbbc5877d779df96e0d5b75acf57b3f2d4efdd469290fc06e4ec6153f4b794bff", + "0x0000000000000000000000000000000000000000000000000000000000002557": "0x9e4c68bacce558c5c7775aa8e6a01de1bc68266b36ae94a8ad3687a21b4b022c", + "0x00000000000000000000000000000000000000000000000000000000000004c8": "0x00000000000000000000000000000000000000000000000000000000695f79b2", + "0x00000000000000000000000000000000000000000000000000000000000004c1": "0x00000000000000000000000000000000000000000000000000000000695f79ab", + "0x00000000000000000000000000000000000000000000000000000000000004d2": "0x00000000000000000000000000000000000000000000000000000000695f79bc", + "0x0000000000000000000000000000000000000000000000000000000000002537": "0xa5e5ded052083b502f971774e1edc9309ff65cb49d7a110d2cbd0a3f2ab54834", + "0x0000000000000000000000000000000000000000000000000000000000002544": "0x7b113fa02a92c42140941c3a8b0013486e2fa485d932d98492add3ff86da338c", + "0x000000000000000000000000000000000000000000000000000000000000250e": "0x38d9bf6c41731925b2b1e7fca5ae35bc7a602077082d61d7b7e11b68e661198f", + "0x0000000000000000000000000000000000000000000000000000000000002495": "0xcf885d53122adeb47fffa2036d79916d296b5963a88564b30c97c3e21b9fc8b9", + "0x0000000000000000000000000000000000000000000000000000000000002530": "0x90dbc84f74d7c525e3444087b223b4b2de4212d619b9efb4baed8c90c276c5e7", + "0x00000000000000000000000000000000000000000000000000000000000004d3": "0x00000000000000000000000000000000000000000000000000000000695f79bd", + "0x00000000000000000000000000000000000000000000000000000000000004e6": "0x00000000000000000000000000000000000000000000000000000000695f79d0", + "0x000000000000000000000000000000000000000000000000000000000000053b": "0x00000000000000000000000000000000000000000000000000000000695f7a25", + "0x0000000000000000000000000000000000000000000000000000000000002549": "0x2460a7e68c3d090d1559079c648db5b358eb674e8b4d6e539df1dc968da3cfd5", + "0x00000000000000000000000000000000000000000000000000000000000004e2": "0x00000000000000000000000000000000000000000000000000000000695f79cc", + "0x0000000000000000000000000000000000000000000000000000000000000496": "0x00000000000000000000000000000000000000000000000000000000695f7980", + "0x00000000000000000000000000000000000000000000000000000000000004b7": "0x00000000000000000000000000000000000000000000000000000000695f79a1", + "0x00000000000000000000000000000000000000000000000000000000000024bc": "0xcd7a664c9caaccccb6167017937cb03ee2a596b9cf744e9568706d4dd6891e27", + "0x00000000000000000000000000000000000000000000000000000000000004e5": "0x00000000000000000000000000000000000000000000000000000000695f79cf", + "0x000000000000000000000000000000000000000000000000000000000000050e": "0x00000000000000000000000000000000000000000000000000000000695f79f8", + "0x00000000000000000000000000000000000000000000000000000000000004b5": "0x00000000000000000000000000000000000000000000000000000000695f799f", + "0x00000000000000000000000000000000000000000000000000000000000024df": "0xc81c12300c5a035855c23767062a03df22923f67f26cab4b3fab8b78abb1d766", + "0x0000000000000000000000000000000000000000000000000000000000002514": "0x53fdcf928c37393139b2dc4fb656bfd44acaa6477df5cd0b9356bb934ff1add6", + "0x0000000000000000000000000000000000000000000000000000000000000559": "0x00000000000000000000000000000000000000000000000000000000695f7a43", + "0x000000000000000000000000000000000000000000000000000000000000051a": "0x00000000000000000000000000000000000000000000000000000000695f7a04", + "0x0000000000000000000000000000000000000000000000000000000000002499": "0x2926a13c612819da95bee91c0a4130f56855493baad11a5e268d50113f9bbb0b", + "0x00000000000000000000000000000000000000000000000000000000000024a2": "0x2ee45bb716ba04d6298ca3801ec8d783592712113784820435d72560e8669892", + "0x0000000000000000000000000000000000000000000000000000000000000508": "0x00000000000000000000000000000000000000000000000000000000695f79f2", + "0x0000000000000000000000000000000000000000000000000000000000002560": "0xf1ac685b756a525ca92e6520fd3f19f20dcaa2ca650d316f27ca655f303f2913", + "0x00000000000000000000000000000000000000000000000000000000000004ff": "0x00000000000000000000000000000000000000000000000000000000695f79e9", + "0x00000000000000000000000000000000000000000000000000000000000004c2": "0x00000000000000000000000000000000000000000000000000000000695f79ac", + "0x00000000000000000000000000000000000000000000000000000000000004ea": "0x00000000000000000000000000000000000000000000000000000000695f79d4", + "0x000000000000000000000000000000000000000000000000000000000000055b": "0x00000000000000000000000000000000000000000000000000000000695f7a45", + "0x00000000000000000000000000000000000000000000000000000000000024ec": "0x72dbd1f7183226a92ccf0b287b0b023c60c6a3a2a996032159ddf128e389e5e7", + "0x0000000000000000000000000000000000000000000000000000000000002567": "0x3cd8b4cd04dbafce971dda2e7ef86256212e61f5d5ce62584999dcb16ca8f74a", + "0x0000000000000000000000000000000000000000000000000000000000000552": "0x00000000000000000000000000000000000000000000000000000000695f7a3c", + "0x00000000000000000000000000000000000000000000000000000000000004de": "0x00000000000000000000000000000000000000000000000000000000695f79c8", + "0x00000000000000000000000000000000000000000000000000000000000024fe": "0x26d5f4b4252a03f5a45ec779526916d6aefca103c9ffd972f95cee6c394aee82", + "0x0000000000000000000000000000000000000000000000000000000000002498": "0x829c5abc4d8e5a29ef8a2735f1b74a9f57132f836c642f33728b31d01275734c", + "0x000000000000000000000000000000000000000000000000000000000000049d": "0x00000000000000000000000000000000000000000000000000000000695f7987", + "0x000000000000000000000000000000000000000000000000000000000000052c": "0x00000000000000000000000000000000000000000000000000000000695f7a16", + "0x0000000000000000000000000000000000000000000000000000000000000551": "0x00000000000000000000000000000000000000000000000000000000695f7a3b", + "0x0000000000000000000000000000000000000000000000000000000000002541": "0x91fbb8b10efdf13980bf2a6f008c84d4c6b23ec9cb79e303adb59417648d9e5d", + "0x00000000000000000000000000000000000000000000000000000000000004ab": "0x00000000000000000000000000000000000000000000000000000000695f7995", + "0x0000000000000000000000000000000000000000000000000000000000000549": "0x00000000000000000000000000000000000000000000000000000000695f7a33", + "0x0000000000000000000000000000000000000000000000000000000000000530": "0x00000000000000000000000000000000000000000000000000000000695f7a1a", + "0x00000000000000000000000000000000000000000000000000000000000004ed": "0x00000000000000000000000000000000000000000000000000000000695f79d7", + "0x0000000000000000000000000000000000000000000000000000000000000564": "0x00000000000000000000000000000000000000000000000000000000695f7a4e", + "0x00000000000000000000000000000000000000000000000000000000000024eb": "0xfcf0ccefe17306264c4748e536a9d806846fa0dd7ef854d5bfda60c22e6a177e", + "0x000000000000000000000000000000000000000000000000000000000000250b": "0x69fb283b550ecc853ed93cf2811c46cb78df1a9b2296b60833b9c6a31ee94ae2", + "0x0000000000000000000000000000000000000000000000000000000000002524": "0x5220685e8bf7f4d2f3b35e8da1b58655ab0aa80cda0cc7358f011072c775acea", + "0x0000000000000000000000000000000000000000000000000000000000000541": "0x00000000000000000000000000000000000000000000000000000000695f7a2b", + "0x000000000000000000000000000000000000000000000000000000000000253d": "0xd42545c3627c7944fb877884e3caa6543fd66fa5e6c238f88512a7cb77866430", + "0x00000000000000000000000000000000000000000000000000000000000004da": "0x00000000000000000000000000000000000000000000000000000000695f79c4", + "0x0000000000000000000000000000000000000000000000000000000000002546": "0x5d9724e6f477ed7c5574ebbf1e557f9fa7d0ef436a55e5c4b50c9797a2ace4fd", + "0x00000000000000000000000000000000000000000000000000000000000024ba": "0x643ece163d3c17372f4e94ed8345cc66e918fc92a7560d987c4e9e8fda0d89c0", + "0x0000000000000000000000000000000000000000000000000000000000002515": "0x1780cdc2ff1ddcbd716145b03e53a9fdac131279e600efbc90a35526f27da1bd", + "0x0000000000000000000000000000000000000000000000000000000000002532": "0xe8fd029f7fcad0214abba95faf5e1d9f60973a428ce33adcd77e6745e6b1b0fd", + "0x0000000000000000000000000000000000000000000000000000000000000504": "0x00000000000000000000000000000000000000000000000000000000695f79ee", + "0x00000000000000000000000000000000000000000000000000000000000024a9": "0x4b5d69344be7794760f7397466e2c3479460e9e6ad461e2b254fae33b7e2633c", + "0x00000000000000000000000000000000000000000000000000000000000004fc": "0x00000000000000000000000000000000000000000000000000000000695f79e6", + "0x000000000000000000000000000000000000000000000000000000000000255c": "0x39ec432ad0d8c26a7bdad4aa81ddbc760ce8572a5e8083f2bdf4825817b0e270", + "0x00000000000000000000000000000000000000000000000000000000000024c5": "0x781dd1f429d8c336c3fc0fc0703032bfe9d2dd9fa2b351924cba52b40f9721c2", + "0x00000000000000000000000000000000000000000000000000000000000004b9": "0x00000000000000000000000000000000000000000000000000000000695f79a3", + "0x00000000000000000000000000000000000000000000000000000000000004d9": "0x00000000000000000000000000000000000000000000000000000000695f79c3", + "0x0000000000000000000000000000000000000000000000000000000000000536": "0x00000000000000000000000000000000000000000000000000000000695f7a20", + "0x000000000000000000000000000000000000000000000000000000000000051d": "0x00000000000000000000000000000000000000000000000000000000695f7a07", + "0x000000000000000000000000000000000000000000000000000000000000249f": "0x6c3caeb9dae08e831a92a8e064ec2075e6aa069cf73d8753f15eb0b03933f066", + "0x00000000000000000000000000000000000000000000000000000000000024b9": "0xfb49f3cc7b30caa176786737575b4357803a376c12d0a26b5adeb14a075ffab2", + "0x00000000000000000000000000000000000000000000000000000000000024f3": "0x331c3fc2fcab087c062ccdbf3db5b034d2ef5ab7a0b997a4712ed70f524b99c4", + "0x0000000000000000000000000000000000000000000000000000000000000529": "0x00000000000000000000000000000000000000000000000000000000695f7a13", + "0x00000000000000000000000000000000000000000000000000000000000024a1": "0x5520487bf520c94df6d6236a7722ad8402f9ca73fb012b53017af848465f5a4a", + "0x00000000000000000000000000000000000000000000000000000000000024f4": "0x450f6b2f09202ace5bf00411d0afced4ac898e53790c66d343430d8d130d8955", + "0x000000000000000000000000000000000000000000000000000000000000251d": "0x19e6b3b74160a7770cdd5c3ba9695dadc0dc0512b003962bd6d7bca52f2678e9", + "0x0000000000000000000000000000000000000000000000000000000000002507": "0xd7d0ef243bf6371d0075389f3b645e17a83563685a0e20a60fb6e0371d4c7cbe", + "0x00000000000000000000000000000000000000000000000000000000000004a5": "0x00000000000000000000000000000000000000000000000000000000695f798f", + "0x0000000000000000000000000000000000000000000000000000000000000545": "0x00000000000000000000000000000000000000000000000000000000695f7a2f", + "0x0000000000000000000000000000000000000000000000000000000000002493": "0xf28d4743307216f423d24d51525804cbbbb67b3aba1a502c91c11190a8795dc7", + "0x0000000000000000000000000000000000000000000000000000000000002529": "0x9150a1cceb915b84369b2fae53eaf2bc2df7e5029a489f71bd4319e669bf5298", + "0x00000000000000000000000000000000000000000000000000000000000004d1": "0x00000000000000000000000000000000000000000000000000000000695f79bb", + "0x000000000000000000000000000000000000000000000000000000000000253b": "0xbc03fd158e3fbe1891cc97fe57ac9d65097de1f7202549feabe06cba6a6bfd53", + "0x00000000000000000000000000000000000000000000000000000000000004bc": "0x00000000000000000000000000000000000000000000000000000000695f79a6", + "0x00000000000000000000000000000000000000000000000000000000000004b4": "0x00000000000000000000000000000000000000000000000000000000695f799e", + "0x000000000000000000000000000000000000000000000000000000000000251b": "0x3c1972844cd7539d0d99f757e1a3599a54fcbbaa255ee25bc4a085869871e95b", + "0x000000000000000000000000000000000000000000000000000000000000050b": "0x00000000000000000000000000000000000000000000000000000000695f79f5", + "0x00000000000000000000000000000000000000000000000000000000000004a2": "0x00000000000000000000000000000000000000000000000000000000695f798c", + "0x00000000000000000000000000000000000000000000000000000000000004e7": "0x00000000000000000000000000000000000000000000000000000000695f79d1", + "0x00000000000000000000000000000000000000000000000000000000000024f8": "0x72730e6cbb1616026657440339bb6a516e9bb50a048c2d845044fa548491775a", + "0x00000000000000000000000000000000000000000000000000000000000024ff": "0xec4f079f0f00c4d2b28ce9b7e310b3ecd2ed218fb857bd8acf7b37aaf5f5e2c6", + "0x0000000000000000000000000000000000000000000000000000000000002513": "0xbfa2cfc75a17c17d5842b0f0e29d8ddfca3e3d3ee70a39b6cce96d6f1d7ba23f", + "0x00000000000000000000000000000000000000000000000000000000000004f8": "0x00000000000000000000000000000000000000000000000000000000695f79e2", + "0x0000000000000000000000000000000000000000000000000000000000000523": "0x00000000000000000000000000000000000000000000000000000000695f7a0d", + "0x0000000000000000000000000000000000000000000000000000000000000535": "0x00000000000000000000000000000000000000000000000000000000695f7a1f", + "0x00000000000000000000000000000000000000000000000000000000000004a9": "0x00000000000000000000000000000000000000000000000000000000695f7993", + "0x00000000000000000000000000000000000000000000000000000000000024ca": "0xdebbcd99061f403aacf8ab890d288f6edb7e96c8229516fe9c8b7a9b5d9dbe82", + "0x00000000000000000000000000000000000000000000000000000000000004b6": "0x00000000000000000000000000000000000000000000000000000000695f79a0", + "0x00000000000000000000000000000000000000000000000000000000000024d4": "0x9f9d5615d510f3380c1531664c030dd714e671995b4cd61b2a72906c043a9266", + "0x00000000000000000000000000000000000000000000000000000000000024d9": "0x904f030e4231d16d26255007c8f41fa60fc0d7c42f3de327e0a24123ba3eaf39", + "0x00000000000000000000000000000000000000000000000000000000000024ef": "0xb35cde158f37a5f6877ad9f7ae8823922d07c75f2c816dd12af7ecde246da33c", + "0x000000000000000000000000000000000000000000000000000000000000055e": "0x00000000000000000000000000000000000000000000000000000000695f7a48", + "0x0000000000000000000000000000000000000000000000000000000000002505": "0xc9be68b0864eb87508592419c2d57f4706f89500b14fa850c07fd4e03d92d4eb", + "0x0000000000000000000000000000000000000000000000000000000000002555": "0xb17ebee6915339a78f0936c55292b01e53156766ad3431c58d57692357764e67", + "0x0000000000000000000000000000000000000000000000000000000000000537": "0x00000000000000000000000000000000000000000000000000000000695f7a21", + "0x0000000000000000000000000000000000000000000000000000000000000560": "0x00000000000000000000000000000000000000000000000000000000695f7a4a", + "0x0000000000000000000000000000000000000000000000000000000000000510": "0x00000000000000000000000000000000000000000000000000000000695f79fa", + "0x00000000000000000000000000000000000000000000000000000000000024a4": "0x9b672d5f37821426b237a43d0b0874678d8be29b7d001db8c9943cf57d4c2efd", + "0x000000000000000000000000000000000000000000000000000000000000254b": "0x74f7c6589a64a14d0427f9be8b64279962314320209b6dcc9d5308bbb5597074", + "0x00000000000000000000000000000000000000000000000000000000000004a8": "0x00000000000000000000000000000000000000000000000000000000695f7992", + "0x00000000000000000000000000000000000000000000000000000000000004a1": "0x00000000000000000000000000000000000000000000000000000000695f798b", + "0x000000000000000000000000000000000000000000000000000000000000249e": "0x26a6b59e1bb84953e355d74b1eabc9050477588668dc8746bbbfadf20c7717c5", + "0x00000000000000000000000000000000000000000000000000000000000004d0": "0x00000000000000000000000000000000000000000000000000000000695f79ba", + "0x000000000000000000000000000000000000000000000000000000000000255e": "0xe624d6746356f8e6c6e3e0126b04bf38dce52157b8d9a23f4de836e579b07e4c", + "0x00000000000000000000000000000000000000000000000000000000000004dd": "0x00000000000000000000000000000000000000000000000000000000695f79c7", + "0x00000000000000000000000000000000000000000000000000000000000004c0": "0x00000000000000000000000000000000000000000000000000000000695f79aa", + "0x00000000000000000000000000000000000000000000000000000000000004ef": "0x00000000000000000000000000000000000000000000000000000000695f79d9", + "0x0000000000000000000000000000000000000000000000000000000000000547": "0x00000000000000000000000000000000000000000000000000000000695f7a31", + "0x00000000000000000000000000000000000000000000000000000000000024cd": "0xb88680d3987f81681453ff4bf4f312788c42127ea4e16d46df4c897644b795b7", + "0x00000000000000000000000000000000000000000000000000000000000024cf": "0xb074e09eaf129c721106134a7d3f2d6d7c7b1cdec8de8e99942d29f9c1c2d1c7", + "0x00000000000000000000000000000000000000000000000000000000000004b2": "0x00000000000000000000000000000000000000000000000000000000695f799c", + "0x00000000000000000000000000000000000000000000000000000000000024d7": "0x2c2edd88e1412adfe9d75d979b6dc8c01e5251f6a4f8b5e564b6808c5dde5e55", + "0x0000000000000000000000000000000000000000000000000000000000002564": "0xcc493ed840e20686e07304121257b8f1848d07dc5c0b2ce5845342299c6f4c79", + "0x0000000000000000000000000000000000000000000000000000000000000497": "0x00000000000000000000000000000000000000000000000000000000695f7981", + "0x00000000000000000000000000000000000000000000000000000000000004ba": "0x00000000000000000000000000000000000000000000000000000000695f79a4", + "0x00000000000000000000000000000000000000000000000000000000000024fd": "0x8a115c4d75dbc08ffd380c1a89f9df58c58ba826c00121414d831dcc59d366e3", + "0x0000000000000000000000000000000000000000000000000000000000002566": "0xbb58eeb50fd2f345c57e3fc0bf5156b4f1ff505b20bb9edb576c4c1f28423433", + "0x00000000000000000000000000000000000000000000000000000000000004ee": "0x00000000000000000000000000000000000000000000000000000000695f79d8", + "0x0000000000000000000000000000000000000000000000000000000000000505": "0x00000000000000000000000000000000000000000000000000000000695f79ef", + "0x000000000000000000000000000000000000000000000000000000000000055a": "0x00000000000000000000000000000000000000000000000000000000695f7a44", + "0x00000000000000000000000000000000000000000000000000000000000024b0": "0xb8ee48bf56b15c690c4f975147aa714607d58a0e8e35db57af126f286fc6c31e", + "0x00000000000000000000000000000000000000000000000000000000000024e4": "0x65e6708ab951671b48fb9840fa92b4a5179c4bd6774e091c159107e27e714d8e", + "0x000000000000000000000000000000000000000000000000000000000000254a": "0x5b4e75f13115b1b17a3e71f32bd44ce4c770b4ba8cafb4386fef31b272b57343", + "0x00000000000000000000000000000000000000000000000000000000000004c7": "0x00000000000000000000000000000000000000000000000000000000695f79b1", + "0x000000000000000000000000000000000000000000000000000000000000251e": "0x5a876feae918017e9a04479b49ff47b89804063e654e80025d8ff1b70b1806df", + "0x0000000000000000000000000000000000000000000000000000000000002521": "0x2957ba7be0144a2a764f79814786616ea16bfb45233996cd195b7be8228b950c", + "0x000000000000000000000000000000000000000000000000000000000000252e": "0xa6eb80921fc091e7b0b982b120b16489326cfde482d3c3deb867ccb6a443eda3", + "0x00000000000000000000000000000000000000000000000000000000000004fe": "0x00000000000000000000000000000000000000000000000000000000695f79e8", + "0x00000000000000000000000000000000000000000000000000000000000004f7": "0x00000000000000000000000000000000000000000000000000000000695f79e1", + "0x00000000000000000000000000000000000000000000000000000000000024ee": "0xae394a91c0c518dd85f7e88387798960d016f7acda239209a2aab0f15a98b313", + "0x00000000000000000000000000000000000000000000000000000000000024c4": "0x72b1374f44c17232cf87e5a71f35c946fc889285e77058dbee20472fc0441888", + "0x000000000000000000000000000000000000000000000000000000000000249c": "0xdf548c7e453da2112e2f366d2c0e52c66f7ed9b9c3d429286692e180e2a303e7", + "0x00000000000000000000000000000000000000000000000000000000000024e6": "0x617d6b220bd422546f916ddaf614697cb4eb762b2f9d4847ab68760d737b9cd5", + "0x0000000000000000000000000000000000000000000000000000000000000553": "0x00000000000000000000000000000000000000000000000000000000695f7a3d", + "0x000000000000000000000000000000000000000000000000000000000000049c": "0x00000000000000000000000000000000000000000000000000000000695f7986", + "0x0000000000000000000000000000000000000000000000000000000000000561": "0x00000000000000000000000000000000000000000000000000000000695f7a4b", + "0x00000000000000000000000000000000000000000000000000000000000004eb": "0x00000000000000000000000000000000000000000000000000000000695f79d5", + "0x000000000000000000000000000000000000000000000000000000000000053f": "0x00000000000000000000000000000000000000000000000000000000695f7a29", + "0x0000000000000000000000000000000000000000000000000000000000002504": "0x2fa89a240fc278498e5e5ed17ce08e4645b01b18ab185e04926a1032b6f47bfd", + "0x0000000000000000000000000000000000000000000000000000000000002496": "0x5c2eb9d1fbd55ed73d32ee38efe901efc6ae91c7196903f68e11b0b43570cdeb", + "0x000000000000000000000000000000000000000000000000000000000000251f": "0x7d9313b474be5cc37789489686ec130fe585f5600da6bffc9b73c2e33caab1ee", + "0x00000000000000000000000000000000000000000000000000000000000024da": "0x5c3960011af0283b393b646998e36aef25c03146655025b53a3cc57b00137da0", + "0x00000000000000000000000000000000000000000000000000000000000004e0": "0x00000000000000000000000000000000000000000000000000000000695f79ca", + "0x000000000000000000000000000000000000000000000000000000000000050d": "0x00000000000000000000000000000000000000000000000000000000695f79f7", + "0x000000000000000000000000000000000000000000000000000000000000053d": "0x00000000000000000000000000000000000000000000000000000000695f7a27", + "0x00000000000000000000000000000000000000000000000000000000000024c9": "0x848509fa182e43c6d5b853142c49e29dd569eff7ed4dd49ea6aa7aafff922260", + "0x000000000000000000000000000000000000000000000000000000000000249b": "0x1a57fd685aa7814a8e43a8fc0aedf74258c2a998a409c0cadc86f162e9876e9e", + "0x00000000000000000000000000000000000000000000000000000000000024c0": "0xc47ec11c77b52621aff52d29e1c76ae0919fab9a42cfba41f0835118eb493e35", + "0x00000000000000000000000000000000000000000000000000000000000024f2": "0x432ab5efc6c5f23adcd96c4b7505da3a741f5c29373790f1feae75d719784ef4", + "0x00000000000000000000000000000000000000000000000000000000000004c5": "0x00000000000000000000000000000000000000000000000000000000695f79af", + "0x00000000000000000000000000000000000000000000000000000000000004bb": "0x00000000000000000000000000000000000000000000000000000000695f79a5", + "0x0000000000000000000000000000000000000000000000000000000000002512": "0xdfa1ad69debbf1ee5d5cb1aa5f7d2fd7d679464b491ffbaac3e26cef2ad1937b", + "0x0000000000000000000000000000000000000000000000000000000000002525": "0xa900ab0f6df7500f12a9f85f6f43812ffb00a1bd87595e8f32ad99f1a9f51dde", + "0x00000000000000000000000000000000000000000000000000000000000004cc": "0x00000000000000000000000000000000000000000000000000000000695f79b6", + "0x0000000000000000000000000000000000000000000000000000000000000556": "0x00000000000000000000000000000000000000000000000000000000695f7a40", + "0x0000000000000000000000000000000000000000000000000000000000000521": "0x00000000000000000000000000000000000000000000000000000000695f7a0b", + "0x0000000000000000000000000000000000000000000000000000000000000524": "0x00000000000000000000000000000000000000000000000000000000695f7a0e", + "0x0000000000000000000000000000000000000000000000000000000000000550": "0x00000000000000000000000000000000000000000000000000000000695f7a3a", + "0x000000000000000000000000000000000000000000000000000000000000249d": "0x1ab87ceb423306160bb3fc81dad9e06822740d3700f19da5c106d40a4c15515e", + "0x000000000000000000000000000000000000000000000000000000000000049b": "0x00000000000000000000000000000000000000000000000000000000695f7985", + "0x0000000000000000000000000000000000000000000000000000000000000503": "0x00000000000000000000000000000000000000000000000000000000695f79ed", + "0x00000000000000000000000000000000000000000000000000000000000024f5": "0x164ab610a5ac19731faeea2f45d8e6b7bc2657a0d88c20b6131d02553164ba06", + "0x0000000000000000000000000000000000000000000000000000000000002494": "0xae16416e10bb77f28530a58e4cf1552c3db01250560dead321fa696a4f7a05b7", + "0x00000000000000000000000000000000000000000000000000000000000024fa": "0x4daf956bbecbb3d3208cb9905c81221a453f1236f38ce980cbbe1634a4cb677f", + "0x00000000000000000000000000000000000000000000000000000000000024c3": "0xe12b9716ceaeef762991605f6c0c56735fb349223bf367cc384211f00f1d8f91", + "0x000000000000000000000000000000000000000000000000000000000000250f": "0xb9c33228b3bec215f5a7082575242a8df2b4fa5e5e96c9eb9f3ce059a6961535", + "0x00000000000000000000000000000000000000000000000000000000000004c9": "0x00000000000000000000000000000000000000000000000000000000695f79b3", + "0x00000000000000000000000000000000000000000000000000000000000024e2": "0xf070733af194f69574368ff4022d9203250c53c5cd477bd452c4a3e7a4fb8a34", + "0x00000000000000000000000000000000000000000000000000000000000024dd": "0x1099e493b6e3e8363048cb394f11b84694e7416caeba2edf3d56f7294e719898", + "0x00000000000000000000000000000000000000000000000000000000000024e7": "0x77cf43317391631762098e00b5752499a4543bb5e0deb98847190230a4492c8e", + "0x0000000000000000000000000000000000000000000000000000000000002522": "0x083d458119a59901ef30a3beefe06a3953af917574d5bf16ce448a2768acff49", + "0x0000000000000000000000000000000000000000000000000000000000002542": "0x7a2f3ad446b65328c8268a9b84c8d1471bfa741dc35727e75db9186eeee32d12", + "0x00000000000000000000000000000000000000000000000000000000000004aa": "0x00000000000000000000000000000000000000000000000000000000695f7994", + "0x0000000000000000000000000000000000000000000000000000000000000515": "0x00000000000000000000000000000000000000000000000000000000695f79ff", + "0x000000000000000000000000000000000000000000000000000000000000052b": "0x00000000000000000000000000000000000000000000000000000000695f7a15", + "0x000000000000000000000000000000000000000000000000000000000000252f": "0x8891e56d2f0d45e843cb6666aa5fa660b606be16eb8e99a8bccef6743a39cb80", + "0x0000000000000000000000000000000000000000000000000000000000002535": "0x403b0f20d953802ebe1386f0ef149123cf7333cd3178d36556a1e4d6258570fb", + "0x00000000000000000000000000000000000000000000000000000000000024ed": "0x01bb017511013958de78ef5d1b5d93f5be28bb1d79cac164f491fbad8a31fbef", + "0x000000000000000000000000000000000000000000000000000000000000254e": "0x3ebd2584e1c3758ac98ecac017d96741aac91a654a429d2056682068e36442ac", + "0x000000000000000000000000000000000000000000000000000000000000052d": "0x00000000000000000000000000000000000000000000000000000000695f7a17", + "0x0000000000000000000000000000000000000000000000000000000000000494": "0x00000000000000000000000000000000000000000000000000000000695f797e", + "0x0000000000000000000000000000000000000000000000000000000000002536": "0x70dbc50a408a3ab7cb6d6adacf0b41a3e5b383464683a23c239eea3b50c5a16c", + "0x000000000000000000000000000000000000000000000000000000000000254d": "0x657be283a9a51f33f9bd9524030e47d3f9389f401eeaedbf90fc1c5d9d160840", + "0x0000000000000000000000000000000000000000000000000000000000002563": "0x9b4bc7b3a3cd060487833f18ebf33037c13915fa57de873a7bbefbd3544744c4", + "0x0000000000000000000000000000000000000000000000000000000000000566": "0x00000000000000000000000000000000000000000000000000000000695f7a50", + "0x0000000000000000000000000000000000000000000000000000000000002550": "0x13853e487ff79c3f4fe8edc045d5e142de0346b4ef86a303b0e9076d934f4740", + "0x0000000000000000000000000000000000000000000000000000000000002552": "0xf6bfd18d184852b29a1ed4d420c0dde40573561c55cc71b51e3f3c60f171f96f", + "0x00000000000000000000000000000000000000000000000000000000000004f2": "0x00000000000000000000000000000000000000000000000000000000695f79dc", + "0x000000000000000000000000000000000000000000000000000000000000051b": "0x00000000000000000000000000000000000000000000000000000000695f7a05", + "0x000000000000000000000000000000000000000000000000000000000000049f": "0x00000000000000000000000000000000000000000000000000000000695f7989", + "0x000000000000000000000000000000000000000000000000000000000000051e": "0x00000000000000000000000000000000000000000000000000000000695f7a08", + "0x0000000000000000000000000000000000000000000000000000000000000498": "0x00000000000000000000000000000000000000000000000000000000695f7982", + "0x0000000000000000000000000000000000000000000000000000000000000518": "0x00000000000000000000000000000000000000000000000000000000695f7a02", + "0x00000000000000000000000000000000000000000000000000000000000024ab": "0x71059447b40a112c7dced0c339d2dd2e432bdc76c2e7a84e8350f38d9b165e8b", + "0x00000000000000000000000000000000000000000000000000000000000004cf": "0x00000000000000000000000000000000000000000000000000000000695f79b9", + "0x0000000000000000000000000000000000000000000000000000000000000555": "0x00000000000000000000000000000000000000000000000000000000695f7a3f", + "0x00000000000000000000000000000000000000000000000000000000000024bb": "0x8be39001037f57d13765121ea3522fefa81d07e680ef6ed3e4283fccf4366595", + "0x00000000000000000000000000000000000000000000000000000000000024f7": "0xa5f3369caf508324b080b79cb150a6d0c0881913ab2767c6f3666b6b922ee0ce", + "0x0000000000000000000000000000000000000000000000000000000000002553": "0xb084d3316bc06533932769c980bee629f925cc837465c987e19853d67f2e6964", + "0x0000000000000000000000000000000000000000000000000000000000002569": "0xcaaf2fa5f51769b29fafb210e4754a6b4b8ee9c0e2ecb068f3efb3219294e3c5", + "0x00000000000000000000000000000000000000000000000000000000000024d5": "0x007fe6c204327a79b77fc3de9b466a11aa399f31a8d85a95b4da4ba1ce266086", + "0x00000000000000000000000000000000000000000000000000000000000024c1": "0xb245bb23270021833a293c681a8e375e42f7d0614af936dbb1fdb803781d2c95", + "0x00000000000000000000000000000000000000000000000000000000000024d6": "0x35bf01ed2d0dc9304004014adfeb14bd24bf8729e458b79be2db1f16685ef87b", + "0x00000000000000000000000000000000000000000000000000000000000004a6": "0x00000000000000000000000000000000000000000000000000000000695f7990", + "0x00000000000000000000000000000000000000000000000000000000000004cd": "0x00000000000000000000000000000000000000000000000000000000695f79b7", + "0x00000000000000000000000000000000000000000000000000000000000004f3": "0x00000000000000000000000000000000000000000000000000000000695f79dd", + "0x0000000000000000000000000000000000000000000000000000000000002492": "0x86cc5f25c2cdc76e34dee9d975a376ca9b32121e993467f03baf491ed431c335", + "0x0000000000000000000000000000000000000000000000000000000000002497": "0x3cb726e9a07749d3caa9352d9ffd187b856b256ef7db2a49dfa123d42245b7c1", + "0x00000000000000000000000000000000000000000000000000000000000024a6": "0xb2467220df38b80f38d0254f8b8e2430de1e36d414259baf9dd587c34c5c87fd", + "0x0000000000000000000000000000000000000000000000000000000000002540": "0xfd3314c2f23ed0619d5e605d7658f338b495d843a91b7390ec9bd44d7075a85a", + "0x0000000000000000000000000000000000000000000000000000000000002568": "0x8d9365b0a7d273fa247dd53475f9eba624d53227f0ae9eee44513fa420774a3d", + "0x00000000000000000000000000000000000000000000000000000000000004cb": "0x00000000000000000000000000000000000000000000000000000000695f79b5", + "0x00000000000000000000000000000000000000000000000000000000000004f9": "0x00000000000000000000000000000000000000000000000000000000695f79e3", + "0x00000000000000000000000000000000000000000000000000000000000004f4": "0x00000000000000000000000000000000000000000000000000000000695f79de", + "0x00000000000000000000000000000000000000000000000000000000000004df": "0x00000000000000000000000000000000000000000000000000000000695f79c9", + "0x0000000000000000000000000000000000000000000000000000000000000527": "0x00000000000000000000000000000000000000000000000000000000695f7a11", + "0x0000000000000000000000000000000000000000000000000000000000002539": "0xc8f58a5eea354c6f05fbae399c52934fc06759eeb03fc61edb061cc16a74aeb4", + "0x000000000000000000000000000000000000000000000000000000000000056a": "0x00000000000000000000000000000000000000000000000000000000695f7a54", + "0x00000000000000000000000000000000000000000000000000000000000024f9": "0xa45484683d9e0337c4ec5678a94bae6e656e2cdae1e56d9fb588cf846e785944", + "0x00000000000000000000000000000000000000000000000000000000000024f1": "0xbc01b1b1acc2073b264f1622089ba4690cde2105de65c288643ecacc888dfbac", + "0x0000000000000000000000000000000000000000000000000000000000002558": "0x7d409ae8c0643f4588c13e4a885a6327fc5b642e50adf61b2ea1dd7f38c4b89c", + "0x00000000000000000000000000000000000000000000000000000000000004ce": "0x00000000000000000000000000000000000000000000000000000000695f79b8", + "0x0000000000000000000000000000000000000000000000000000000000000519": "0x00000000000000000000000000000000000000000000000000000000695f7a03", + "0x00000000000000000000000000000000000000000000000000000000000024b2": "0x78b26ca8ba489e8ce6c99eb0f1cedf64b7329cba276f4759f827c7d12e5651b7", + "0x00000000000000000000000000000000000000000000000000000000000024c2": "0x2cba5f33ccb7aaff580903be04c6643705312363af301e5f6b9e60c5df0edd22", + "0x0000000000000000000000000000000000000000000000000000000000000543": "0x00000000000000000000000000000000000000000000000000000000695f7a2d", + "0x00000000000000000000000000000000000000000000000000000000000024d8": "0xdf6ba2d9edc7600fe3ba112f4da542fc5874eefb1189965885b3e07359f7dce3", + "0x000000000000000000000000000000000000000000000000000000000000049a": "0x00000000000000000000000000000000000000000000000000000000695f7984", + "0x0000000000000000000000000000000000000000000000000000000000000526": "0x00000000000000000000000000000000000000000000000000000000695f7a10", + "0x000000000000000000000000000000000000000000000000000000000000249a": "0x0006381a4a46db4d8b62b6fe94120156241556d7679ed6a9119b86ee07c1d8bf", + "0x00000000000000000000000000000000000000000000000000000000000024e0": "0xf5a8cc0f2ea9dd2b2f3e88f4d32af44c126068d71ccf2254767981308c5912c9", + "0x0000000000000000000000000000000000000000000000000000000000000568": "0x00000000000000000000000000000000000000000000000000000000695f7a52", + "0x00000000000000000000000000000000000000000000000000000000000004ae": "0x00000000000000000000000000000000000000000000000000000000695f7998", + "0x000000000000000000000000000000000000000000000000000000000000050f": "0x00000000000000000000000000000000000000000000000000000000695f79f9", + "0x000000000000000000000000000000000000000000000000000000000000054e": "0x00000000000000000000000000000000000000000000000000000000695f7a38", + "0x0000000000000000000000000000000000000000000000000000000000000554": "0x00000000000000000000000000000000000000000000000000000000695f7a3e", + "0x0000000000000000000000000000000000000000000000000000000000000565": "0x00000000000000000000000000000000000000000000000000000000695f7a4f", + "0x00000000000000000000000000000000000000000000000000000000000024a3": "0x288d34e5ce42dcb98628e797884a8754b9a96dc0108d3f36cdae51c5c29c2a46", + "0x00000000000000000000000000000000000000000000000000000000000024a8": "0x81431c45de79acac3b5565a81edf208ea99acba4d3ae1c4a784b63a0ae6e1c43", + "0x00000000000000000000000000000000000000000000000000000000000024b4": "0xaf45e391520d5ed13b06214de11ec87b1dd42f0bfb47d830f9e0a9d6b9a18aef", + "0x00000000000000000000000000000000000000000000000000000000000024cc": "0x56a89ed526fa43ab01ddd7710b043a0593f904acba27932a41ceeabe05ef5de0", + "0x00000000000000000000000000000000000000000000000000000000000024db": "0x9f1689afb6f8bf320515d7e3806b29fe018cc75d697ed796f1cd5af9a34e679f", + "0x00000000000000000000000000000000000000000000000000000000000024f0": "0x4563111993e6145ed81742d8e93e50f900a07051d95806f29bc0c09aafd1e46f", + "0x000000000000000000000000000000000000000000000000000000000000053a": "0x00000000000000000000000000000000000000000000000000000000695f7a24", + "0x00000000000000000000000000000000000000000000000000000000000024af": "0xb4f804a9b1c7d2b12524a04aac0e53bf7a9eac73a515d7caafb083967c70c94e", + "0x0000000000000000000000000000000000000000000000000000000000000540": "0x00000000000000000000000000000000000000000000000000000000695f7a2a", + "0x00000000000000000000000000000000000000000000000000000000000024b6": "0x6857f2e8d97768a7508ec8f27516a5987a7d02ea3bc2f23a37e349b61b7a7990", + "0x00000000000000000000000000000000000000000000000000000000000024fb": "0xe58351c08fe4cb9e97356c0ae613be5dc30bb9ddd74cbc5ee8802ce6ddd8ff87", + "0x00000000000000000000000000000000000000000000000000000000000004fa": "0x00000000000000000000000000000000000000000000000000000000695f79e4", + "0x0000000000000000000000000000000000000000000000000000000000000507": "0x00000000000000000000000000000000000000000000000000000000695f79f1", + "0x000000000000000000000000000000000000000000000000000000000000052f": "0x00000000000000000000000000000000000000000000000000000000695f7a19", + "0x0000000000000000000000000000000000000000000000000000000000002502": "0xab94e5117aa3d8717a1e33c99fd6deb4d106fcb197c9b8486106dbc8aac1638d", + "0x000000000000000000000000000000000000000000000000000000000000250a": "0xd31f76f8ade8e9cadf3e54b97e28a8fdaa9bea8638cf9ee054c5ae49b472b250", + "0x0000000000000000000000000000000000000000000000000000000000000558": "0x00000000000000000000000000000000000000000000000000000000695f7a42", + "0x0000000000000000000000000000000000000000000000000000000000002548": "0xf0547f3c4ea2feef68794f8fea83b4819e93ab4f14c6c317f5da50beb89315d8", + "0x000000000000000000000000000000000000000000000000000000000000049e": "0x00000000000000000000000000000000000000000000000000000000695f7988", + "0x00000000000000000000000000000000000000000000000000000000000024bd": "0x6ea7fd762fb9af5d5b5ec88bcee5a0b5348d4e0c81935ea3fe7b196897daf05c", + "0x00000000000000000000000000000000000000000000000000000000000024be": "0x3d567b8a61af65dce22357b30603e7fb16feafb0a0db819ac69f42ac7cfd52e0", + "0x000000000000000000000000000000000000000000000000000000000000251a": "0xbc2a48ffd967f2b61fec2abe9b8fd13a66a196959576a90726205856acc5f32a", + "0x0000000000000000000000000000000000000000000000000000000000002538": "0x7af19eebd700ebf42e61db9153cd0a50621c7a6a40f61aa9f57df9d901b99402", + "0x000000000000000000000000000000000000000000000000000000000000254c": "0x6ed61617b19bac6939c9e28ffc5479e6c98425e9c6145118dbd9a758dc6174c2", + "0x0000000000000000000000000000000000000000000000000000000000002565": "0xd9f417a24115cd9a92cc4afc871249034052ff135bf3c67f5507f62bfb701aab", + "0x0000000000000000000000000000000000000000000000000000000000000495": "0x00000000000000000000000000000000000000000000000000000000695f797f", + "0x00000000000000000000000000000000000000000000000000000000000004ec": "0x00000000000000000000000000000000000000000000000000000000695f79d6", + "0x0000000000000000000000000000000000000000000000000000000000000511": "0x00000000000000000000000000000000000000000000000000000000695f79fb", + "0x000000000000000000000000000000000000000000000000000000000000054b": "0x00000000000000000000000000000000000000000000000000000000695f7a35", + "0x00000000000000000000000000000000000000000000000000000000000004f0": "0x00000000000000000000000000000000000000000000000000000000695f79da", + "0x000000000000000000000000000000000000000000000000000000000000252b": "0x6ea946a182ea74915648b8027ed927cfa969e3d661006bc88eeaec103d1b33ff", + "0x00000000000000000000000000000000000000000000000000000000000024a7": "0x05c05743ba603e78e201eb7a2dd3a3b66f2d6e14d2d66008e737bf65687130ea", + "0x000000000000000000000000000000000000000000000000000000000000252c": "0xe833e7acea24e1e18b86987441e3504a17fbaa54f0dc992e2682624cc0e685ee", + "0x0000000000000000000000000000000000000000000000000000000000002543": "0x99b304c3cbc5d7ff2778ed837be2e4dda77763edbf050c63961541eb3efffa68", + "0x0000000000000000000000000000000000000000000000000000000000000502": "0x00000000000000000000000000000000000000000000000000000000695f79ec", + "0x0000000000000000000000000000000000000000000000000000000000000501": "0x00000000000000000000000000000000000000000000000000000000695f79eb", + "0x00000000000000000000000000000000000000000000000000000000000004af": "0x00000000000000000000000000000000000000000000000000000000695f7999", + "0x00000000000000000000000000000000000000000000000000000000000004ad": "0x00000000000000000000000000000000000000000000000000000000695f7997", + "0x000000000000000000000000000000000000000000000000000000000000050c": "0x00000000000000000000000000000000000000000000000000000000695f79f6", + "0x00000000000000000000000000000000000000000000000000000000000024b3": "0x119799172976f5ed08aede776352cb5fd4cdecc51f58df9ffda6f80cd53f900b", + "0x00000000000000000000000000000000000000000000000000000000000024c8": "0xc9f312f6aed084610882ec0e039501c60f3d64a34b8a90181fca592cce071fd7", + "0x000000000000000000000000000000000000000000000000000000000000054f": "0x00000000000000000000000000000000000000000000000000000000695f7a39", + "0x00000000000000000000000000000000000000000000000000000000000024d0": "0xd6f1e1d16df2939050c6f50086626ead3fe99b6f21b10de25b36262d0c1524f3", + "0x000000000000000000000000000000000000000000000000000000000000250c": "0x9bd994cead66b6453e360ffc41f91e348d1bce0469ce1d59c1ecb2f7c5117cfc", + "0x00000000000000000000000000000000000000000000000000000000000004bd": "0x00000000000000000000000000000000000000000000000000000000695f79a7", + "0x00000000000000000000000000000000000000000000000000000000000004c4": "0x00000000000000000000000000000000000000000000000000000000695f79ae", + "0x00000000000000000000000000000000000000000000000000000000000004e4": "0x00000000000000000000000000000000000000000000000000000000695f79ce", + "0x00000000000000000000000000000000000000000000000000000000000004f1": "0x00000000000000000000000000000000000000000000000000000000695f79db", + "0x0000000000000000000000000000000000000000000000000000000000000531": "0x00000000000000000000000000000000000000000000000000000000695f7a1b", + "0x0000000000000000000000000000000000000000000000000000000000000525": "0x00000000000000000000000000000000000000000000000000000000695f7a0f", + "0x0000000000000000000000000000000000000000000000000000000000000532": "0x00000000000000000000000000000000000000000000000000000000695f7a1c", + "0x000000000000000000000000000000000000000000000000000000000000054d": "0x00000000000000000000000000000000000000000000000000000000695f7a37", + "0x0000000000000000000000000000000000000000000000000000000000000562": "0x00000000000000000000000000000000000000000000000000000000695f7a4c", + "0x00000000000000000000000000000000000000000000000000000000000024b5": "0x4386c0a968caba277169fecdb06cb8c9989187dd611d474327fab54d3f021e9e", + "0x00000000000000000000000000000000000000000000000000000000000024cb": "0x4e52dc03cdd9a9f3c504df016d0f435c8f00c8902e5594eafe02e36df8864d0a", + "0x0000000000000000000000000000000000000000000000000000000000000538": "0x00000000000000000000000000000000000000000000000000000000695f7a22", + "0x00000000000000000000000000000000000000000000000000000000000004db": "0x00000000000000000000000000000000000000000000000000000000695f79c5", + "0x00000000000000000000000000000000000000000000000000000000000004d7": "0x00000000000000000000000000000000000000000000000000000000695f79c1", + "0x0000000000000000000000000000000000000000000000000000000000000548": "0x00000000000000000000000000000000000000000000000000000000695f7a32", + "0x00000000000000000000000000000000000000000000000000000000000024de": "0x500e86b019442af1d19c37f5d439fabc8e9c58b64885e5a4c1f65f6362e13dcd", + "0x00000000000000000000000000000000000000000000000000000000000024ea": "0x46db3c740d9725c5ff204ea78d020df2fc356bd45f32f2084c3aabcf1a8bb5d3", + "0x0000000000000000000000000000000000000000000000000000000000002511": "0x90819fa41bb86d26d4e3dfd532bba041ad295ab2998f6c1f61b9242e34d201a1", + "0x0000000000000000000000000000000000000000000000000000000000000499": "0x00000000000000000000000000000000000000000000000000000000695f7983", + "0x00000000000000000000000000000000000000000000000000000000000004be": "0x00000000000000000000000000000000000000000000000000000000695f79a8", + "0x0000000000000000000000000000000000000000000000000000000000000493": "0x00000000000000000000000000000000000000000000000000000000695f797d", + "0x00000000000000000000000000000000000000000000000000000000000004b0": "0x00000000000000000000000000000000000000000000000000000000695f799a", + "0x0000000000000000000000000000000000000000000000000000000000000516": "0x00000000000000000000000000000000000000000000000000000000695f7a00", + "0x0000000000000000000000000000000000000000000000000000000000000533": "0x00000000000000000000000000000000000000000000000000000000695f7a1d", + "0x00000000000000000000000000000000000000000000000000000000000024d2": "0x89d95aacbf1606a6e40e1b6b017006df8cc4166e2cb48e244e4d96de06ff51ff", + "0x0000000000000000000000000000000000000000000000000000000000002500": "0x4db7739ea0317fe3ffb500ec4a0046bc13c1bdfde82319f0087042093582ddd4", + "0x0000000000000000000000000000000000000000000000000000000000002526": "0xeb5f53ef98715ffe4cf1fc1ac6a33614372cb97cd19193a5bcb9702e97acab6f", + "0x00000000000000000000000000000000000000000000000000000000000004a4": "0x00000000000000000000000000000000000000000000000000000000695f798e", + "0x00000000000000000000000000000000000000000000000000000000000024e3": "0xad6b8170e7c652853f76834ade13edba0b2cacbaabf70898fe47b902d4df25e1", + "0x000000000000000000000000000000000000000000000000000000000000252d": "0x7341324d153622d681fe31032fe9979cabcc08b7c9a3d367c65a5c84d681fb14", + "0x000000000000000000000000000000000000000000000000000000000000253a": "0xa9798d619eb84538ee5288398e0fcf2ba3bd9ce12cf774e02ce2735b96d242a8", + "0x0000000000000000000000000000000000000000000000000000000000002520": "0x592e8910ddf65ee20db5f092d5dccafeda0c227f30b0800f16cce47b045cb57b", + "0x0000000000000000000000000000000000000000000000000000000000002547": "0x0dab7c68c876129747dcffe57cdc2f5797df3e1b7d0d1f3ed164833b1978152e", + "0x0000000000000000000000000000000000000000000000000000000000000517": "0x00000000000000000000000000000000000000000000000000000000695f7a01", + "0x0000000000000000000000000000000000000000000000000000000000002551": "0x8b57ae89bb868f5b4972973f3cc41f8173e9ea29848036210bf91db6c328926f", + "0x000000000000000000000000000000000000000000000000000000000000053c": "0x00000000000000000000000000000000000000000000000000000000695f7a26", + "0x00000000000000000000000000000000000000000000000000000000000004fb": "0x00000000000000000000000000000000000000000000000000000000695f79e5", + "0x00000000000000000000000000000000000000000000000000000000000004a7": "0x00000000000000000000000000000000000000000000000000000000695f7991", + "0x000000000000000000000000000000000000000000000000000000000000253e": "0x396dea289bd52c697ef21715c6ed680a769b79188cf588f996782d131e26eb4a", + "0x000000000000000000000000000000000000000000000000000000000000253f": "0xaacb0329c88975de778f001694262da4f49b665b3942fb238e0780366773dd42", + "0x0000000000000000000000000000000000000000000000000000000000000557": "0x00000000000000000000000000000000000000000000000000000000695f7a41", + "0x00000000000000000000000000000000000000000000000000000000000024d1": "0x1df022e8e785d1e41ba012d08fbe56c15f61079199962325aaf54c8466c1198d", + "0x0000000000000000000000000000000000000000000000000000000000002510": "0xb422b89cbb040d2cb160dafa0c939ed362e96e49d09a1363262bfd03ee4cddc0", + "0x000000000000000000000000000000000000000000000000000000000000253c": "0x8e96edd0250601e0cd0bbfb48d60c38d90ca68f565d669460ab1754197990809", + "0x000000000000000000000000000000000000000000000000000000000000255a": "0x1a1bb6bd6173bc211c85bc61cac7e264dc65adb99988b5cf142a12071cff92a4", + "0x0000000000000000000000000000000000000000000000000000000000000506": "0x00000000000000000000000000000000000000000000000000000000695f79f0", + "0x00000000000000000000000000000000000000000000000000000000000024a5": "0x34068477202b312dfb66207b475592902a938e90d46eb27e7252a7c67beb205a", + "0x0000000000000000000000000000000000000000000000000000000000002518": "0xe1bd86299ce4c6d9463566b98304b454336f08ac83e3b29a8d07dc80c41c4e1d", + "0x00000000000000000000000000000000000000000000000000000000000024b1": "0xe9dd921e132d5a3969fb685d3b196e2fd1f478164831887b2d08f866b095738f", + "0x000000000000000000000000000000000000000000000000000000000000050a": "0x00000000000000000000000000000000000000000000000000000000695f79f4", + "0x0000000000000000000000000000000000000000000000000000000000000539": "0x00000000000000000000000000000000000000000000000000000000695f7a23", + "0x00000000000000000000000000000000000000000000000000000000000004f6": "0x00000000000000000000000000000000000000000000000000000000695f79e0", + "0x00000000000000000000000000000000000000000000000000000000000024b8": "0x4eb673e5d0823e20d90e7ace57c9ba6148792aaf7f89ca57b5008e5e31cf99ea", + "0x00000000000000000000000000000000000000000000000000000000000024e8": "0x0f1553d94bb7fd57649cdfce5c747aa84dd55ae823674724f091f0569c483e7a", + "0x0000000000000000000000000000000000000000000000000000000000002517": "0x4e71157a7e4c32b1d82ff0dd0f4989416a108d3d992df0cdfbcec3bedbf389f1", + "0x0000000000000000000000000000000000000000000000000000000000000567": "0x00000000000000000000000000000000000000000000000000000000695f7a51", + "0x00000000000000000000000000000000000000000000000000000000000004ac": "0x00000000000000000000000000000000000000000000000000000000695f7996", + "0x0000000000000000000000000000000000000000000000000000000000002516": "0x79559479ea68270db2157b7a5503261708f2b3fefe2fc7eaf923f29f22c47f33", + "0x0000000000000000000000000000000000000000000000000000000000000528": "0x00000000000000000000000000000000000000000000000000000000695f7a12", + "0x00000000000000000000000000000000000000000000000000000000000004e9": "0x00000000000000000000000000000000000000000000000000000000695f79d3", + "0x0000000000000000000000000000000000000000000000000000000000000522": "0x00000000000000000000000000000000000000000000000000000000695f7a0c", + "0x000000000000000000000000000000000000000000000000000000000000251c": "0xb6a5e95f10d82bc6c3cbac8ed8fddba3390eeb2621e9f57af67c16d69ea0f867", + "0x0000000000000000000000000000000000000000000000000000000000000512": "0x00000000000000000000000000000000000000000000000000000000695f79fc", + "0x000000000000000000000000000000000000000000000000000000000000255d": "0xd57f06c993842baa5382c5c6a81ef92a2e322bd68d7d8f2e9e5ac021a183769d", + "0x0000000000000000000000000000000000000000000000000000000000002556": "0x832e225955bc4a50d5cc94079d671585ec6e6ed2953c4978b0d5f98f97520e23", + "0x000000000000000000000000000000000000000000000000000000000000255f": "0x04a515132bfdde82b04f24ddd14ac4a706d3585e05c6c6944f5d3fa951505a1d", + "0x0000000000000000000000000000000000000000000000000000000000000509": "0x00000000000000000000000000000000000000000000000000000000695f79f3", + "0x00000000000000000000000000000000000000000000000000000000000004b8": "0x00000000000000000000000000000000000000000000000000000000695f79a2", + "0x0000000000000000000000000000000000000000000000000000000000000534": "0x00000000000000000000000000000000000000000000000000000000695f7a1e", + "0x000000000000000000000000000000000000000000000000000000000000053e": "0x00000000000000000000000000000000000000000000000000000000695f7a28", + "0x000000000000000000000000000000000000000000000000000000000000052e": "0x00000000000000000000000000000000000000000000000000000000695f7a18", + "0x0000000000000000000000000000000000000000000000000000000000000544": "0x00000000000000000000000000000000000000000000000000000000695f7a2e", + "0x00000000000000000000000000000000000000000000000000000000000024ae": "0xe26f0eaa1fa724c5d25716a1f5c5118edb0aedb39dff603c9e9a9a2a0a830f85", + "0x00000000000000000000000000000000000000000000000000000000000024fc": "0xd740457ce12f28a32dab5a2bd0d7a0333999a37e2f21ffe9c38101bab6fa3cef", + "0x0000000000000000000000000000000000000000000000000000000000002503": "0xa7618a8709555b27cd6efd1624f5d2b18946de5b972bdec4dbb10ee905fd3a78", + "0x00000000000000000000000000000000000000000000000000000000000024c7": "0xbb353e8f171762a9eacd5f58358690859ecf980dd0fe7f81b351cebf7dcda488", + "0x000000000000000000000000000000000000000000000000000000000000055d": "0x00000000000000000000000000000000000000000000000000000000695f7a47", + "0x0000000000000000000000000000000000000000000000000000000000002534": "0xb26acd3742fd04b8be070f64cb1b5a5786a9974c827a115980c81c1349d24242", + "0x00000000000000000000000000000000000000000000000000000000000004c6": "0x00000000000000000000000000000000000000000000000000000000695f79b0", + "0x000000000000000000000000000000000000000000000000000000000000054a": "0x00000000000000000000000000000000000000000000000000000000695f7a34", + "0x0000000000000000000000000000000000000000000000000000000000000563": "0x00000000000000000000000000000000000000000000000000000000695f7a4d", + "0x00000000000000000000000000000000000000000000000000000000000004e3": "0x00000000000000000000000000000000000000000000000000000000695f79cd", + "0x00000000000000000000000000000000000000000000000000000000000024d3": "0x881c005c52188a05021751672b398606dbe1459089a830c3f5a61c220efd6a8a", + "0x0000000000000000000000000000000000000000000000000000000000002531": "0x4cd4ceefadae1a10c7d7f6617df86ca513597075e454ce0d53bdf152231f8562", + "0x0000000000000000000000000000000000000000000000000000000000002562": "0xa3c2bc36ebc3be1ea7e1c2f62a4492b037ff4d5b052564e92b3b42701a9b2041", + "0x0000000000000000000000000000000000000000000000000000000000000513": "0x00000000000000000000000000000000000000000000000000000000695f79fd", + "0x000000000000000000000000000000000000000000000000000000000000051f": "0x00000000000000000000000000000000000000000000000000000000695f7a09", + "0x000000000000000000000000000000000000000000000000000000000000250d": "0x72156c957db83242bc0f3dfdd47773b9ca34adbcc7b488e2b3939daf164dcca5" + } + }, + "36": { + "address": "0x0165878A594ca255338adfa4d48449f69242Eb8F", + "code": "0x730165878a594ca255338adfa4d48449f69242eb8f3014608060405260043610610034575f3560e01c8063439fab9114610038575b5f5ffd5b818015610043575f5ffd5b50610057610052366004610683565b610059565b005b5f6100827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036100a8576040516282b42960e81b815260040160405180910390fd5b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f6100d584840185610760565b8051835491925090839060ff1916600183818111156100f6576100f6610802565b02179055505f7f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f1b60405161012b90610676565b908152602001604051809103905ff08015801561014a573d5f5f3e3d5ffd5b507f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f908152600285016020908152604080832080546001600160a01b0319166001600160a01b0386169081179091558151608081018352848152808401859052808301859052606081019190915260018085528089019093529220825181549495509293909291839160ff19169083818111156101ea576101ea610802565b02179055506020828101518254604080860151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178355606093840151600193840180546001600160a01b0319166001600160a01b0392831617905581516080810183525f808252818501819052818401819052918716958101959095526002815287840190925290208251815491929091839160ff199091169083818111156102ae576102ae610802565b021790555060208201518154604080850151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178255606090920151600190910180546001600160a01b0319166001600160a01b03909216919091179055515f907f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b799061035290610676565b908152602001604051809103905ff080158015610371573d5f5f3e3d5ffd5b507f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b795f908152600286016020908152604080832080546001600160a01b0319166001600160a01b038616908117909155815160808101835284815280840185905280830185905260608101919091528151637061726160e01b81850152607d60e31b6024820152825180820360080181526028909101835280519084012084526001808a019093529220825181549495509293909291839160ff191690838181111561043f5761043f610802565b021790555060208201518154604084015167ffffffffffffffff908116600160481b0267ffffffffffffffff60481b19919093166101000216610100600160881b031990911617178155606090910151600190910180546001600160a01b039092166001600160a01b03199092169190911790555f6104db7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f690565b60408501518155602080860151600180840180546fffffffffffffffffffffffffffffffff19166001600160801b0393841617905560c08801516002909401939093557f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f80546001600160a01b03969096166001600160c01b031990961695909517607d60a31b1790945560a08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23155606086015160808701518516600160801b02908516177f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c2305560e08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23380546101009889015190961690970270ffffffffffffffffffffffffffffffffff1990951660ff9091161793909317909455505f80527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e9052507f8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d805460ff19169091179055505050565b61032e8061081783390190565b5f5f60208385031215610694575f5ffd5b823567ffffffffffffffff8111156106aa575f5ffd5b8301601f810185136106ba575f5ffd5b803567ffffffffffffffff8111156106d0575f5ffd5b8560208284010111156106e1575f5ffd5b6020919091019590945092505050565b604051610120810167ffffffffffffffff8111828210171561072157634e487b7160e01b5f52604160045260245ffd5b60405290565b803560028110610735575f5ffd5b919050565b80356001600160801b0381168114610735575f5ffd5b803560ff81168114610735575f5ffd5b5f610120828403128015610772575f5ffd5b5061077b6106f1565b61078483610727565b81526107926020840161073a565b6020820152604083810135908201526107ad6060840161073a565b60608201526107be6080840161073a565b608082015260a0838101359082015260c080840135908201526107e360e08401610750565b60e08201526107f5610100840161073a565b6101008201529392505050565b634e487b7160e01b5f52602160045260245ffdfe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea2646970667358221220c0cb81d4a21d0eba005b3a8e586341c26034d8b6f4bc7492f673795b56a1044c64736f6c634300081c0033a2646970667358221220f976f98d9ad95ec6c4454218896ddf11e168fe0618b6db14199d0ee5634348af64736f6c634300081c0033000000000000000000000000", + "storage": {} + }, + "28": { + "address": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", + "storage": { + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf55933" + } + }, + "11": { + "address": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44", + "code": "0x608060405234801561000f575f5ffd5b50600436106102b1575f3560e01c80636d70f7ae1161017b578063bb45fef2116100e4578063e4cc3f901161009e578063f698da2511610079578063f698da25146107ce578063fabc1cbc146107d6578063fd8aa88d146107e9578063fe4b84df146107fc575f5ffd5b8063e4cc3f9014610788578063eea9064b1461079b578063f0e0e676146107ae575f5ffd5b8063bb45fef2146106b9578063bfae3fd2146106e6578063c448feb8146106f9578063c978f7ac1461072d578063ca8aa7c71461074e578063da8be86414610775575f5ffd5b80639104c319116101355780639104c319146106175780639435bb431461063257806399f5371b14610645578063a178848414610665578063a33a343314610684578063b7f06ebe14610697575f5ffd5b80636d70f7ae1461057a5780636e1744481461058d578063778e55f3146105a057806378296ec5146105ca578063886f1195146105dd5780639004134714610604575f5ffd5b806354b7c96c1161021d5780635c975abb116101d75780635c975abb146104d45780635d975e88146104dc5780635dd68579146104fd57806360a0d1ce1461051e57806365da12641461053157806366d5ba9314610559575f5ffd5b806354b7c96c1461045b57806354fd4d501461046e578063595c6a6714610483578063597b36da1461048b5780635ac86ab71461049e5780635ae679a7146104c1575f5ffd5b806339b70e381161026e57806339b70e381461036a5780633c651cf2146103a95780633cdeb5e0146103bc5780633e28391d146103ea5780634657e26a1461040d5780634665bcda14610434575f5ffd5b806304a4f979146102b55780630b9f487a146102ef5780630dd8dd0214610302578063136439dd1461032257806325df922e146103375780632aa6d88814610357575b5f5ffd5b6102dc7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6040519081526020015b60405180910390f35b6102dc6102fd366004614a7f565b61080f565b610315610310366004614b16565b610897565b6040516102e69190614b54565b610335610330366004614b8b565b610b09565b005b61034a610345366004614d20565b610b43565b6040516102e69190614dce565b610335610365366004614e30565b610ca3565b6103917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6040516001600160a01b0390911681526020016102e6565b6103356103b7366004614e8e565b610df7565b6103916103ca366004614ed1565b6001600160a01b039081165f908152609960205260409020600101541690565b6103fd6103f8366004614ed1565b610f4a565b60405190151581526020016102e6565b6103917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b6103917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b181565b610335610469366004614eec565b610f69565b610476610fd7565b6040516102e69190614f51565b610335611007565b6102dc61049936600461501f565b61101b565b6103fd6104ac366004615050565b606654600160ff9092169190911b9081161490565b6102dc6104cf366004615084565b61104a565b6066546102dc565b6104ef6104ea366004614b8b565b6111bc565b6040516102e69291906151b9565b61051061050b366004614ed1565b6111d9565b6040516102e692919061522b565b61033561052c366004615298565b611303565b61039161053f366004614ed1565b609a6020525f90815260409020546001600160a01b031681565b61056c610567366004614ed1565b6114ae565b6040516102e69291906152d7565b6103fd610588366004614ed1565b6117ae565b6102dc61059b366004614eec565b6117e6565b6102dc6105ae366004614eec565b609860209081525f928352604080842090915290825290205481565b6103356105d83660046152e9565b611890565b6103917f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b61034a610612366004615339565b611926565b61039173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610335610640366004615385565b6119fc565b610658610653366004614b8b565b611ab7565b6040516102e69190615421565b6102dc610673366004614ed1565b609f6020525f908152604090205481565b610315610692366004615433565b611bd3565b6103fd6106a5366004614b8b565b609e6020525f908152604090205460ff1681565b6103fd6106c736600461551a565b609c60209081525f928352604080842090915290825290205460ff1681565b6102dc6106f4366004614eec565b611beb565b60405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000321681526020016102e6565b61074061073b366004615339565b611c27565b6040516102e6929190615544565b6103917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b610315610783366004614ed1565b611eb4565b610335610796366004615563565b611fdd565b6103356107a9366004615433565b612015565b6107c16107bc3660046155e1565b612080565b6040516102e6919061568e565b6102dc612125565b6103356107e4366004614b8b565b6121de565b6103156107f7366004614ed1565b61224c565b61033561080a366004614b8b565b61226f565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad60208201526001600160a01b03808616928201929092528187166060820152908516608082015260a0810183905260c081018290525f9061088d9060e00160405160208183030381529060405280519060200120612380565b9695505050505050565b606060016108a4816123ae565b6108ac6123dc565b5f836001600160401b038111156108c5576108c5614ba2565b6040519080825280602002602001820160405280156108ee578160200160208202803683370190505b50335f908152609a60205260408120549192506001600160a01b03909116905b85811015610afa57868682818110610928576109286156a0565b905060200281019061093a91906156b4565b6109489060208101906156d2565b905087878381811061095c5761095c6156a0565b905060200281019061096e91906156b4565b61097890806156d2565b905014610998576040516343714afd60e01b815260040160405180910390fd5b5f610a0233848a8a868181106109b0576109b06156a0565b90506020028101906109c291906156b4565b6109cc90806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061243592505050565b9050610ad433848a8a86818110610a1b57610a1b6156a0565b9050602002810190610a2d91906156b4565b610a3790806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508e92508d9150889050818110610a7c57610a7c6156a0565b9050602002810190610a8e91906156b4565b610a9c9060208101906156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250889250612587915050565b848381518110610ae657610ae66156a0565b60209081029190910101525060010161090e565b5050600160c955949350505050565b610b11612b22565b6066548181168114610b365760405163c61dca5d60e01b815260040160405180910390fd5b610b3f82612bc5565b5050565b6001600160a01b038084165f908152609a60205260408120546060921690610b6c868387612435565b90505f85516001600160401b03811115610b8857610b88614ba2565b604051908082528060200260200182016040528015610bb1578160200160208202803683370190505b5090505f5b8651811015610c96576001600160a01b0388165f90815260a260205260408120885182908a9085908110610bec57610bec6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050610c70878381518110610c3e57610c3e6156a0565b6020026020010151858481518110610c5857610c586156a0565b602002602001015183612c029092919063ffffffff16565b838381518110610c8257610c826156a0565b602090810291909101015250600101610bb6565b50925050505b9392505050565b610cab6123dc565b610cb433610f4a565b15610cd257604051633bf2b50360e11b815260040160405180910390fd5b604051632b6241f360e11b815233600482015263ffffffff841660248201527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316906356c483e6906044015f604051808303815f87803b158015610d3c575f5ffd5b505af1158015610d4e573d5f5f3e3d5ffd5b50505050610d5c3385612c20565b610d663333612c82565b6040516001600160a01b038516815233907fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c19060200160405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051610ddf929190615717565b60405180910390a2610df1600160c955565b50505050565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161480610e565750336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b116145b610e735760405163045206a560e21b815260040160405180910390fd5b610e7b6123dc565b6001600160a01b038481165f908152609a602052604080822054905163152667d960e31b8152908316600482018190528684166024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015610efb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1f9190615745565b90505f610f2d878784612f0b565b9050610f3d838888888886612fed565b505050610df1600160c955565b6001600160a01b039081165f908152609a602052604090205416151590565b81610f7381613132565b610f905760405163932d94f760e01b815260040160405180910390fd5b610f986123dc565b610fa1836117ae565b610fbe576040516325ec6c1f60e01b815260040160405180910390fd5b610fc88383612c20565b610fd2600160c955565b505050565b60606110027f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b905090565b61100f612b22565b6110195f19612bc5565b565b5f8160405160200161102d9190615421565b604051602081830303815290604052805190602001209050919050565b5f336001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1614611094576040516323d871a560e01b815260040160405180910390fd5b61109c6123dc565b6001600160a01b038088165f9081526098602090815260408083209388168352929052908120546110da906001600160401b03808716908616613219565b90505f6110e989878787613231565b90506110f58183615774565b9250611103895f88856132ee565b604080516001600160a01b038881168252602082018690528b16917fdd611f4ef63f4385f1756c86ce1f1f389a9013ba6fa07daba8528291bc2d3c30910160405180910390a261115286613368565b6001600160a01b0316633fb99ca5898989876040518563ffffffff1660e01b81526004016111839493929190615787565b5f604051808303815f87803b15801561119a575f5ffd5b505af11580156111ac573d5f5f3e3d5ffd5b50505050505061088d600160c955565b6111c4614940565b60606111cf836133da565b9094909350915050565b6060805f6111e68461224c565b8051909150806001600160401b0381111561120357611203614ba2565b60405190808252806020026020018201604052801561123c57816020015b611229614940565b8152602001906001900390816112215790505b509350806001600160401b0381111561125757611257614ba2565b60405190808252806020026020018201604052801561128a57816020015b60608152602001906001900390816112755790505b5092505f5b818110156112fb576112b98382815181106112ac576112ac6156a0565b60200260200101516133da565b8683815181106112cb576112cb6156a0565b602002602001018684815181106112e4576112e46156a0565b60209081029190910101919091525260010161128f565b505050915091565b336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1161461134c57604051633213a66160e21b815260040160405180910390fd5b6113546123dc565b61135d83610f4a565b15610fc8576001600160a01b038381165f908152609a602052604080822054905163152667d960e31b81529083166004820181905273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa1580156113f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114189190615745565b6001600160a01b0386165f90815260a26020908152604080832073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac084528252808320815192830190915254815291925061147e866114766001600160401b0380871690891661362d565b849190613641565b90506114a0848873beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0846132ee565b50505050610fd2600160c955565b6040516394f649dd60e01b81526001600160a01b03828116600483015260609182915f9182917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816906394f649dd906024015f60405180830381865afa15801561151a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115419190810190615837565b60405163fe243a1760e01b81526001600160a01b03888116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac060248301529294509092505f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1169063fe243a1790604401602060405180830381865afa1580156115c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb91906158f2565b9050805f036115ff57509094909350915050565b5f8351600161160e9190615774565b6001600160401b0381111561162557611625614ba2565b60405190808252806020026020018201604052801561164e578160200160208202803683370190505b5090505f845160016116609190615774565b6001600160401b0381111561167757611677614ba2565b6040519080825280602002602001820160405280156116a0578160200160208202803683370190505b50905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0828651815181106116cb576116cb6156a0565b60200260200101906001600160a01b031690816001600160a01b03168152505082818651815181106116ff576116ff6156a0565b60209081029190910101525f5b85518110156117a057858181518110611727576117276156a0565b6020026020010151838281518110611741576117416156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050848181518110611773576117736156a0565b602002602001015182828151811061178d5761178d6156a0565b602090810291909101015260010161170c565b509097909650945050505050565b5f6001600160a01b038216158015906117e057506001600160a01b038083165f818152609a6020526040902054909116145b92915050565b60405163152667d960e31b81526001600160a01b03838116600483015282811660248301525f9182917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015611856573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187a9190615745565b90506118888484835f613231565b949350505050565b8261189a81613132565b6118b75760405163932d94f760e01b815260040160405180910390fd5b6118c0846117ae565b6118dd576040516325ec6c1f60e01b815260040160405180910390fd5b836001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051611918929190615717565b60405180910390a250505050565b60605f82516001600160401b0381111561194257611942614ba2565b60405190808252806020026020018201604052801561196b578160200160208202803683370190505b5090505f5b83518110156119f4576001600160a01b0385165f90815260986020526040812085519091908690849081106119a7576119a76156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548282815181106119e1576119e16156a0565b6020908102919091010152600101611970565b509392505050565b6002611a07816123ae565b611a0f6123dc565b855f5b81811015611aa257611a9a898983818110611a2f57611a2f6156a0565b9050602002810190611a419190615909565b611a4a9061591d565b888884818110611a5c57611a5c6156a0565b9050602002810190611a6e91906156d2565b888886818110611a8057611a806156a0565b9050602002016020810190611a959190615928565b61365f565b600101611a12565b5050611aae600160c955565b50505050505050565b611abf614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b03908116825260018301548116828501526002830154168185015260038201546060820152600482015463ffffffff1660808201526005820180548551818602810186019096528086529194929360a08601939290830182828015611b6d57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b4f575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc357602002820191905f5260205f20905b815481526020019060010190808311611baf575b5050505050815250509050919050565b6060611bde33611eb4565b9050610c9c848484612015565b6001600160a01b038083165f90815260a260209081526040808320938516835292815282822083519182019093529154825290610c9c90613aa1565b60608082516001600160401b03811115611c4357611c43614ba2565b604051908082528060200260200182016040528015611c6c578160200160208202803683370190505b50915082516001600160401b03811115611c8857611c88614ba2565b604051908082528060200260200182016040528015611cb1578160200160208202803683370190505b506001600160a01b038086165f908152609a6020526040812054929350911690611cdc868387612435565b90505f5b8551811015611ea9575f611d0c878381518110611cff57611cff6156a0565b6020026020010151613368565b9050806001600160a01b031663fe243a1789898581518110611d3057611d306156a0565b60200260200101516040518363ffffffff1660e01b8152600401611d6a9291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015611d85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da991906158f2565b858381518110611dbb57611dbb6156a0565b6020026020010181815250505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f898581518110611dfe57611dfe6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050611e82868481518110611e5057611e506156a0565b6020026020010151858581518110611e6a57611e6a6156a0565b6020026020010151836136419092919063ffffffff16565b878481518110611e9457611e946156a0565b60209081029190910101525050600101611ce0565b5050505b9250929050565b6060611ebe6123dc565b611ec782610f4a565b611ee45760405163a5c7c44560e01b815260040160405180910390fd5b611eed826117ae565b15611f0b576040516311ca333560e31b815260040160405180910390fd5b336001600160a01b03831614611fc3576001600160a01b038083165f908152609a602052604090205416611f3e81613132565b80611f6457506001600160a01b038181165f908152609960205260409020600101541633145b611f8157604051631e499a2360e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a3505b611fcc82613ac0565b9050611fd8600160c955565b919050565b6002611fe8816123ae565b611ff06123dc565b612004611ffc8661591d565b85858561365f565b61200e600160c955565b5050505050565b61201d6123dc565b61202633610f4a565b1561204457604051633bf2b50360e11b815260040160405180910390fd5b61204d836117ae565b61206a576040516325ec6c1f60e01b815260040160405180910390fd5b61207633848484613d00565b610fc83384612c82565b60605f83516001600160401b0381111561209c5761209c614ba2565b6040519080825280602002602001820160405280156120cf57816020015b60608152602001906001900390816120ba5790505b5090505f5b84518110156119f4576121008582815181106120f2576120f26156a0565b602002602001015185611926565b828281518110612112576121126156a0565b60209081029190910101526001016120d4565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea612192613dbf565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6121e6613e34565b6066548019821981161461220d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020015b60405180910390a25050565b6001600160a01b0381165f90815260a3602052604090206060906117e090613ee5565b5f54610100900460ff161580801561228d57505f54600160ff909116105b806122a65750303b1580156122a657505f5460ff166001145b61230e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561232f575f805461ff0019166101001790555b61233882612bc5565b8015610b3f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f612389612125565b60405161190160f01b602082015260228101919091526042810183905260620161102d565b606654600160ff83161b908116036123d95760405163840a48d560e01b815260040160405180910390fd5b50565b600260c9540361242e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401612305565b600260c955565b60605f82516001600160401b0381111561245157612451614ba2565b60405190808252806020026020018201604052801561247a578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663547afb8786866040518363ffffffff1660e01b81526004016124cc929190615943565b5f60405180830381865afa1580156124e6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261250d9190810190615966565b90505f5b845181101561257c5761255787868381518110612530576125306156a0565b602002602001015184848151811061254a5761254a6156a0565b6020026020010151612f0b565b838281518110612569576125696156a0565b6020908102919091010152600101612511565b509095945050505050565b5f6001600160a01b0386166125af576040516339b190bb60e11b815260040160405180910390fd5b83515f036125d05760405163796cc52560e01b815260040160405180910390fd5b5f84516001600160401b038111156125ea576125ea614ba2565b604051908082528060200260200182016040528015612613578160200160208202803683370190505b5090505f85516001600160401b0381111561263057612630614ba2565b604051908082528060200260200182016040528015612659578160200160208202803683370190505b5090505f5b8651811015612955575f61267d888381518110611cff57611cff6156a0565b90505f60a25f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8a85815181106126b6576126b66156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20905061272f8884815181106126f4576126f46156a0565b602002602001015188858151811061270e5761270e6156a0565b60209081029190910181015160408051928301905284548252909190613641565b848481518110612741576127416156a0565b602002602001018181525050612780888481518110612762576127626156a0565b60209081029190910181015160408051928301905283548252613ef1565b858481518110612792576127926156a0565b60209081029190910101526001600160a01b038a1615612827576127e98a8a85815181106127c2576127c26156a0565b60200260200101518786815181106127dc576127dc6156a0565b6020026020010151613f05565b6128278a8c8b8681518110612800576128006156a0565b602002602001015187878151811061281a5761281a6156a0565b60200260200101516132ee565b5f826001600160a01b031663724af4238d8c878151811061284a5761284a6156a0565b60200260200101518c8881518110612864576128646156a0565b60200260200101516040518463ffffffff1660e01b815260040161288a939291906159f5565b6020604051808303815f875af11580156128a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ca91906158f2565b9050805f03612947575f82557f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f8c8b868151811061290a5761290a6156a0565b602002602001015161292f856040518060200160405290815f82015481525050613aa1565b60405161293e939291906159f5565b60405180910390a15b50505080600101905061265e565b506001600160a01b0388165f908152609f6020526040812080549182919061297c83615a19565b91905055505f6040518060e001604052808b6001600160a01b031681526020018a6001600160a01b031681526020018b6001600160a01b031681526020018381526020014363ffffffff1681526020018981526020018581525090505f6129e28261101b565b5f818152609e602090815260408083208054600160ff19909116811790915560a4835292819020865181546001600160a01b03199081166001600160a01b039283161783558885015195830180548216968316969096179095559187015160028201805490951692169190911790925560608501516003830155608085015160048301805463ffffffff191663ffffffff90921691909117905560a085015180519394508593612a989260058501920190614999565b5060c08201518051612ab49160068401916020909101906149fc565b5050506001600160a01b038b165f90815260a360205260409020612ad89082613f6f565b507f26b2aae26516e8719ef50ea2f6831a2efbd4e37dccdf0f6936b27bc08e793e30818386604051612b0c93929190615a31565b60405180910390a19a9950505050505050505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612b84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba89190615a5b565b61101957604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61188882612c1a612c1387613aa1565b8690613f7a565b90613f7a565b6001600160a01b038281165f8181526099602090815260409182902060010180546001600160a01b0319169486169485179055905192835290917f773b54c04d756fcc5e678111f7d730de3be98192000799eee3d63716055a87c69101612240565b5f612c8c816123ae565b5f5f612c97856114ae565b915091505f612ca75f8685612435565b6001600160a01b038781165f818152609a602052604080822080546001600160a01b031916948b16948517905551939450919290917fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d874330491a35f5b8351811015611aae5773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612d3a57612d3a6156a0565b60200260200101516001600160a01b031603612eaa5760405163a3d75e0960e01b81526001600160a01b0388811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612db8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ddc9190615745565b90505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f878581518110612e1557612e156156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050612e89858481518110612e6757612e676156a0565b6020026020010151836001600160401b0316836136419092919063ffffffff16565b858481518110612e9b57612e9b6156a0565b60200260200101818152505050505b612f038688868481518110612ec157612ec16156a0565b60200260200101515f878681518110612edc57612edc6156a0565b6020026020010151878781518110612ef657612ef66156a0565b6020026020010151612fed565b600101612d01565b5f73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b03841601612fdd5760405163a3d75e0960e01b81526001600160a01b0385811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612f99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbd9190615745565b9050612fd56001600160401b0384811690831661362d565b915050610c9c565b506001600160401b031692915050565b805f0361300d57604051630a33bc6960e21b815260040160405180910390fd5b811561312a576001600160a01b038086165f90815260a26020908152604080832093881683529290522061304381858585613f8e565b6040805160208101909152815481527f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f908790879061308190613aa1565b604051613090939291906159f5565b60405180910390a16130a186610f4a565b15611aae576001600160a01b038088165f908152609860209081526040808320938916835292905290812080548592906130dc908490615774565b92505081905550866001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c878786604051613120939291906159f5565b60405180910390a2505b505050505050565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af11580156131b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e09190615a5b565b60605f6131e883614024565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f613227848385600161404b565b6118889085615a76565b6001600160a01b038085165f90815260a56020908152604080832093871683529290529081208190613262906140a6565b90505f6132c860016132947f000000000000000000000000000000000000000000000000000000000000003243615a89565b61329e9190615a89565b6001600160a01b03808a165f90815260a560209081526040808320938c16835292905220906140c0565b90505f6132d58284615a76565b90506132e28187876140dc565b98975050505050505050565b6001600160a01b038085165f90815260986020908152604080832093861683529290529081208054839290613324908490615a76565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051611918939291906159f5565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146133b3577f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075086117e0565b7f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b192915050565b6133e2614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b0390811682526001830154811682850152600283015416818501526003820154606082810191909152600483015463ffffffff1660808301526005830180548651818702810187019097528087529195929460a0860193929083018282801561349457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613476575b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156134ea57602002820191905f5260205f20905b8154815260200190600101908083116134d6575b50505050508152505091508160a00151516001600160401b0381111561351257613512614ba2565b60405190808252806020026020018201604052801561353b578160200160208202803683370190505b5090505f7f0000000000000000000000000000000000000000000000000000000000000032836080015161356f9190615aa5565b90505f4363ffffffff168263ffffffff16106135a05761359b845f015185602001518660a00151612435565b6135b7565b6135b7845f015185602001518660a00151856140fa565b90505f5b8460a00151518110156112fb576136088560c0015182815181106135e1576135e16156a0565b60200260200101518383815181106135fb576135fb6156a0565b6020026020010151614228565b84828151811061361a5761361a6156a0565b60209081029190910101526001016135bb565b5f610c9c8383670de0b6b3a7640000614233565b5f6118888261365961365287613aa1565b869061362d565b9061362d565b60a0840151518214613684576040516343714afd60e01b815260040160405180910390fd5b83604001516001600160a01b0316336001600160a01b0316146136ba576040516316110d3560e21b815260040160405180910390fd5b5f6136c48561101b565b5f818152609e602052604090205490915060ff166136f5576040516387c9d21960e01b815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000003287608001516137289190615aa5565b90508063ffffffff164363ffffffff1611613756576040516378f67ae160e11b815260040160405180910390fd5b61376d875f015188602001518960a00151846140fa565b87516001600160a01b03165f90815260a360205260409020909250613793915083614318565b505f82815260a46020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101805463ffffffff19169055906137ea6005830182614a35565b6137f7600683015f614a35565b50505f828152609e602052604090819020805460ff19169055517f1f40400889274ed07b24845e5054a87a0cab969eb1277aafe61ae352e7c32a00906138409084815260200190565b60405180910390a185516001600160a01b039081165f908152609a6020526040812054885160a08a0151919093169261387a918490612435565b90505f5b8860a0015151811015613a96575f6138a58a60a001518381518110611cff57611cff6156a0565b90505f6138db8b60c0015184815181106138c1576138c16156a0565b60200260200101518785815181106135fb576135fb6156a0565b9050805f036138eb575050613a8e565b87156139b957816001600160a01b0316632eae418c8c5f01518d60a00151868151811061391a5761391a6156a0565b60200260200101518d8d88818110613934576139346156a0565b90506020020160208101906139499190614ed1565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018490526084015f604051808303815f87803b15801561399e575f5ffd5b505af11580156139b0573d5f5f3e3d5ffd5b50505050613a8b565b5f5f836001600160a01b03166350ff72258e5f01518f60a0015188815181106139e4576139e46156a0565b6020026020010151866040518463ffffffff1660e01b8152600401613a0b939291906159f5565b60408051808303815f875af1158015613a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4a9190615ac1565b91509150613a88878e5f01518f60a001518881518110613a6c57613a6c6156a0565b602002602001015185858b8b81518110612ef657612ef66156a0565b50505b50505b60010161387e565b505050505050505050565b80515f9015613ab15781516117e0565b670de0b6b3a764000092915050565b60606001613acd816123ae565b6001600160a01b038084165f818152609a602052604080822080546001600160a01b0319811690915590519316928392917ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467691a35f5f613b2c866114ae565b9150915081515f03613b4057505050613cfa565b81516001600160401b03811115613b5957613b59614ba2565b604051908082528060200260200182016040528015613b82578160200160208202803683370190505b5094505f613b91878585612435565b90505f5b8351811015613cf4576040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050868481518110613c1557613c156156a0565b6020026020010151835f81518110613c2f57613c2f6156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110613c6157613c616156a0565b6020026020010151825f81518110613c7b57613c7b6156a0565b602002602001018181525050848481518110613c9957613c996156a0565b6020026020010151815f81518110613cb357613cb36156a0565b602002602001018181525050613ccc8b89858585612587565b8a8581518110613cde57613cde6156a0565b6020908102919091010152505050600101613b95565b50505050505b50919050565b6001600160a01b038084165f908152609960205260409020600101541680613d285750610df1565b6001600160a01b0381165f908152609c6020908152604080832085845290915290205460ff1615613d6c57604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381165f908152609c602090815260408083208584528252909120805460ff1916600117905583015161200e908290613db390889088908490889061080f565b85516020870151614323565b60605f613deb7f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b9050805f81518110613dff57613dff6156a0565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eb49190615ae3565b6001600160a01b0316336001600160a01b0316146110195760405163794821ff60e01b815260040160405180910390fd5b60605f610c9c83614375565b5f610c9c613efe84613aa1565b839061362d565b6001600160a01b038084165f90815260a5602090815260408083209386168352929052908120613f34906140a6565b9050610df143613f448484615774565b6001600160a01b038088165f90815260a560209081526040808320938a1683529290522091906143ce565b5f610c9c83836143d9565b5f610c9c83670de0b6b3a764000084614233565b825f03613fba57604080516020810190915284548152613fb3908290612c1a90613aa1565b8455610df1565b6040805160208101909152845481525f90613fd6908584613641565b90505f613fe38483615774565b90505f613ffe84612c1a613ff7888a615774565b8590613f7a565b80885590505f819003611aae5760405163172cec7360e31b815260040160405180910390fd5b5f60ff8216601f8111156117e057604051632cd44ac360e21b815260040160405180910390fd5b5f5f614058868686614233565b9050600183600281111561406e5761406e615afe565b14801561408a57505f848061408557614085615b12565b868809115b1561409d5761409a600182615774565b90505b95945050505050565b5f6140b18282614425565b6001600160e01b031692915050565b5f6140cc83838361446a565b6001600160e01b03169392505050565b5f6118886140ea8385615b26565b85906001600160401b031661362d565b60605f83516001600160401b0381111561411657614116614ba2565b60405190808252806020026020018201604052801561413f578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03166394d7d00c8787876040518463ffffffff1660e01b815260040161419393929190615b45565b5f60405180830381865afa1580156141ad573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141d49190810190615966565b90505f5b855181101561421c576141f788878381518110612530576125306156a0565b838281518110614209576142096156a0565b60209081029190910101526001016141d8565b50909695505050505050565b5f610c9c838361362d565b5f80805f19858709858702925082811083820303915050805f0361426a5783828161426057614260615b12565b0492505050610c9c565b8084116142b15760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401612305565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f610c9c83836144b3565b4281101561434457604051630819bdcd60e01b815260040160405180910390fd5b6143586001600160a01b0385168484614596565b610df157604051638baa579f60e01b815260040160405180910390fd5b6060815f018054806020026020016040519081016040528092919081815260200182805480156143c257602002820191905f5260205f20905b8154815260200190600101908083116143ae575b50505050509050919050565b610fd28383836145ea565b5f81815260018301602052604081205461441e57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556117e0565b505f6117e0565b81545f9080156144625761444b8461443e600184615a76565b5f91825260209091200190565b5464010000000090046001600160e01b0316611888565b509092915050565b82545f908161447b868683856146f0565b905080156144a9576144928661443e600184615a76565b5464010000000090046001600160e01b031661088d565b5091949350505050565b5f818152600183016020526040812054801561458d575f6144d5600183615a76565b85549091505f906144e890600190615a76565b9050818114614547575f865f018281548110614506576145066156a0565b905f5260205f200154905080875f018481548110614526576145266156a0565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061455857614558615b7e565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506117e0565b5f9150506117e0565b5f5f5f6145a38585614743565b90925090505f8160048111156145bb576145bb615afe565b1480156145d95750856001600160a01b0316826001600160a01b0316145b8061088d575061088d868686614782565b825480156146a2575f6146028561443e600185615a76565b60408051808201909152905463ffffffff8082168084526401000000009092046001600160e01b0316602084015291925090851610156146555760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff8086169116036146a057826146768661443e600186615a76565b80546001600160e01b03929092166401000000000263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216640100000000029190921617910155565b5f5b818310156119f4575f6147058484614869565b5f8781526020902090915063ffffffff86169082015463ffffffff16111561472f5780925061473d565b61473a816001615774565b93505b506146f2565b5f5f8251604103614777576020830151604084015160608501515f1a61476b87828585614883565b94509450505050611ead565b505f90506002611ead565b5f5f5f856001600160a01b0316631626ba7e60e01b86866040516024016147aa929190615b92565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516147e89190615baa565b5f60405180830381855afa9150503d805f8114614820576040519150601f19603f3d011682016040523d82523d5f602084013e614825565b606091505b509150915081801561483957506020815110155b801561088d57508051630b135d3f60e11b9061485e90830160209081019084016158f2565b149695505050505050565b5f6148776002848418615bc0565b610c9c90848416615774565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156148b857505f90506003614937565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614909573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614931575f60019250925050614937565b91505f90505b94509492505050565b6040518060e001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f63ffffffff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906149b7565b506149f8929150614a4c565b5090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec578251825591602001919060010190614a1a565b5080545f8255905f5260205f20908101906123d991905b5b808211156149f8575f8155600101614a4d565b6001600160a01b03811681146123d9575f5ffd5b8035611fd881614a60565b5f5f5f5f5f60a08688031215614a93575f5ffd5b8535614a9e81614a60565b94506020860135614aae81614a60565b93506040860135614abe81614a60565b94979396509394606081013594506080013592915050565b5f5f83601f840112614ae6575f5ffd5b5081356001600160401b03811115614afc575f5ffd5b6020830191508360208260051b8501011115611ead575f5ffd5b5f5f60208385031215614b27575f5ffd5b82356001600160401b03811115614b3c575f5ffd5b614b4885828601614ad6565b90969095509350505050565b602080825282518282018190525f918401906040840190835b8181101561257c578351835260209384019390920191600101614b6d565b5f60208284031215614b9b575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715614bd857614bd8614ba2565b60405290565b604080519081016001600160401b0381118282101715614bd857614bd8614ba2565b604051601f8201601f191681016001600160401b0381118282101715614c2857614c28614ba2565b604052919050565b5f6001600160401b03821115614c4857614c48614ba2565b5060051b60200190565b5f82601f830112614c61575f5ffd5b8135614c74614c6f82614c30565b614c00565b8082825260208201915060208360051b860101925085831115614c95575f5ffd5b602085015b83811015614cbb578035614cad81614a60565b835260209283019201614c9a565b5095945050505050565b5f82601f830112614cd4575f5ffd5b8135614ce2614c6f82614c30565b8082825260208201915060208360051b860101925085831115614d03575f5ffd5b602085015b83811015614cbb578035835260209283019201614d08565b5f5f5f60608486031215614d32575f5ffd5b8335614d3d81614a60565b925060208401356001600160401b03811115614d57575f5ffd5b614d6386828701614c52565b92505060408401356001600160401b03811115614d7e575f5ffd5b614d8a86828701614cc5565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614dc4578151865260209586019590910190600101614da6565b5093949350505050565b602081525f610c9c6020830184614d94565b803563ffffffff81168114611fd8575f5ffd5b5f5f83601f840112614e03575f5ffd5b5081356001600160401b03811115614e19575f5ffd5b602083019150836020828501011115611ead575f5ffd5b5f5f5f5f60608587031215614e43575f5ffd5b8435614e4e81614a60565b9350614e5c60208601614de0565b925060408501356001600160401b03811115614e76575f5ffd5b614e8287828801614df3565b95989497509550505050565b5f5f5f5f60808587031215614ea1575f5ffd5b8435614eac81614a60565b93506020850135614ebc81614a60565b93969395505050506040820135916060013590565b5f60208284031215614ee1575f5ffd5b8135610c9c81614a60565b5f5f60408385031215614efd575f5ffd5b8235614f0881614a60565b91506020830135614f1881614a60565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c9c6020830184614f23565b5f60e08284031215614f73575f5ffd5b614f7b614bb6565b9050614f8682614a74565b8152614f9460208301614a74565b6020820152614fa560408301614a74565b604082015260608281013590820152614fc060808301614de0565b608082015260a08201356001600160401b03811115614fdd575f5ffd5b614fe984828501614c52565b60a08301525060c08201356001600160401b03811115615007575f5ffd5b61501384828501614cc5565b60c08301525092915050565b5f6020828403121561502f575f5ffd5b81356001600160401b03811115615044575f5ffd5b61188884828501614f63565b5f60208284031215615060575f5ffd5b813560ff81168114610c9c575f5ffd5b6001600160401b03811681146123d9575f5ffd5b5f5f5f5f5f5f86880360e081121561509a575f5ffd5b87356150a581614a60565b96506040601f19820112156150b8575f5ffd5b506020870194506060870135935060808701356150d481614a60565b925060a08701356150e481615070565b915060c08701356150f481615070565b809150509295509295509295565b5f8151808452602084019350602083015f5b82811015614dc45781516001600160a01b0316865260209586019590910190600101615114565b80516001600160a01b03908116835260208083015182169084015260408083015190911690830152606080820151908301526080808201515f916151869085018263ffffffff169052565b5060a082015160e060a08501526151a060e0850182615102565b905060c083015184820360c086015261409d8282614d94565b604081525f6151cb604083018561513b565b828103602084015261409d8185614d94565b5f82825180855260208501945060208160051b830101602085015f5b8381101561421c57601f19858403018852615215838351614d94565b60209889019890935091909101906001016151f9565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b8281101561528257605f1987860301845261526d85835161513b565b94506020938401939190910190600101615251565b50505050828103602084015261409d81856151dd565b5f5f5f606084860312156152aa575f5ffd5b83356152b581614a60565b92506020840135915060408401356152cc81615070565b809150509250925092565b604081525f6151cb6040830185615102565b5f5f5f604084860312156152fb575f5ffd5b833561530681614a60565b925060208401356001600160401b03811115615320575f5ffd5b61532c86828701614df3565b9497909650939450505050565b5f5f6040838503121561534a575f5ffd5b823561535581614a60565b915060208301356001600160401b0381111561536f575f5ffd5b61537b85828601614c52565b9150509250929050565b5f5f5f5f5f5f6060878903121561539a575f5ffd5b86356001600160401b038111156153af575f5ffd5b6153bb89828a01614ad6565b90975095505060208701356001600160401b038111156153d9575f5ffd5b6153e589828a01614ad6565b90955093505060408701356001600160401b03811115615403575f5ffd5b61540f89828a01614ad6565b979a9699509497509295939492505050565b602081525f610c9c602083018461513b565b5f5f5f60608486031215615445575f5ffd5b833561545081614a60565b925060208401356001600160401b0381111561546a575f5ffd5b84016040818703121561547b575f5ffd5b615483614bde565b81356001600160401b03811115615498575f5ffd5b8201601f810188136154a8575f5ffd5b80356001600160401b038111156154c1576154c1614ba2565b6154d4601f8201601f1916602001614c00565b8181528960208385010111156154e8575f5ffd5b816020840160208301375f60209282018301528352928301359282019290925293969395505050506040919091013590565b5f5f6040838503121561552b575f5ffd5b823561553681614a60565b946020939093013593505050565b604081525f6151cb6040830185614d94565b80151581146123d9575f5ffd5b5f5f5f5f60608587031215615576575f5ffd5b84356001600160401b0381111561558b575f5ffd5b850160e0818803121561559c575f5ffd5b935060208501356001600160401b038111156155b6575f5ffd5b6155c287828801614ad6565b90945092505060408501356155d681615556565b939692955090935050565b5f5f604083850312156155f2575f5ffd5b82356001600160401b03811115615607575f5ffd5b8301601f81018513615617575f5ffd5b8035615625614c6f82614c30565b8082825260208201915060208360051b850101925087831115615646575f5ffd5b6020840193505b8284101561567157833561566081614a60565b82526020938401939091019061564d565b945050505060208301356001600160401b0381111561536f575f5ffd5b602081525f610c9c60208301846151dd565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156c8575f5ffd5b9190910192915050565b5f5f8335601e198436030181126156e7575f5ffd5b8301803591506001600160401b03821115615700575f5ffd5b6020019150600581901b3603821315611ead575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60208284031215615755575f5ffd5b8151610c9c81615070565b634e487b7160e01b5f52601160045260245ffd5b808201808211156117e0576117e0615760565b60a08101853561579681614a60565b6001600160a01b0316825263ffffffff6157b260208801614de0565b16602083015260408201949094526001600160a01b03929092166060830152608090910152919050565b5f82601f8301126157eb575f5ffd5b81516157f9614c6f82614c30565b8082825260208201915060208360051b86010192508583111561581a575f5ffd5b602085015b83811015614cbb57805183526020928301920161581f565b5f5f60408385031215615848575f5ffd5b82516001600160401b0381111561585d575f5ffd5b8301601f8101851361586d575f5ffd5b805161587b614c6f82614c30565b8082825260208201915060208360051b85010192508783111561589c575f5ffd5b6020840193505b828410156158c75783516158b681614a60565b8252602093840193909101906158a3565b8095505050505060208301516001600160401b038111156158e6575f5ffd5b61537b858286016157dc565b5f60208284031215615902575f5ffd5b5051919050565b5f823560de198336030181126156c8575f5ffd5b5f6117e03683614f63565b5f60208284031215615938575f5ffd5b8135610c9c81615556565b6001600160a01b03831681526040602082018190525f9061188890830184615102565b5f60208284031215615976575f5ffd5b81516001600160401b0381111561598b575f5ffd5b8201601f8101841361599b575f5ffd5b80516159a9614c6f82614c30565b8082825260208201915060208360051b8501019250868311156159ca575f5ffd5b6020840193505b8284101561088d5783516159e481615070565b8252602093840193909101906159d1565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60018201615a2a57615a2a615760565b5060010190565b838152606060208201525f615a49606083018561513b565b828103604084015261088d8185614d94565b5f60208284031215615a6b575f5ffd5b8151610c9c81615556565b818103818111156117e0576117e0615760565b63ffffffff82811682821603908111156117e0576117e0615760565b63ffffffff81811683821601908111156117e0576117e0615760565b5f5f60408385031215615ad2575f5ffd5b505080516020909101519092909150565b5f60208284031215615af3575f5ffd5b8151610c9c81614a60565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b6001600160401b0382811682821603908111156117e0576117e0615760565b6001600160a01b03841681526060602082018190525f90615b6890830185615102565b905063ffffffff83166040830152949350505050565b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f6118886040830184614f23565b5f82518060208501845e5f920191825250919050565b5f82615bda57634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212200ce9d6ea4724b26b24a945c3e7b815ac3f6f8bc1e775aec290a459ae8524680664736f6c634300081c00330000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "12": { + "address": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", + "code": "0x608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f5ffd5b61006c6100673660046102d7565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c610109565b5f546001600160a01b031661007b565b61006c6100bd3660046102d7565b61011c565b6100ca61019a565b6100d3816101f3565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b61011161019a565b61011a5f610288565b565b61012461019a565b6001600160a01b03811661018e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019781610288565b50565b5f546001600160a01b0316331461011a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610185565b6001600160a01b0381163b6102665760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b6064820152608401610185565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156102e7575f5ffd5b81356001600160a01b03811681146102fd575f5ffd5b939250505056fea2646970667358221220be4c7cc530907d473b805a59b00a64447acfd3e76912b0c8b378f7f85a7dcd7964736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000059b670e9fa9d0a427751af201d676719a970857b", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65" + } + }, + "44": { "address": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933", "code": "0x608060405234801561000f575f5ffd5b50600436106100e5575f3560e01c80639100674511610088578063ad8aca7711610063578063ad8aca77146101df578063df595cb8146101f2578063eb5a4e8714610205578063fddbdefd14610218575f5ffd5b80639100674514610196578063950d806e146101b9578063ad5f2210146101cc575f5ffd5b806354fd4d50116100c357806354fd4d5014610124578063628806ef146101425780636bddfa1f14610155578063882a3b3814610175575f5ffd5b806306641201146100e9578063268959e5146100fe5780634f906cf914610111575b5f5ffd5b6100fc6100f7366004610dbd565b61022b565b005b6100fc61010c366004610e0e565b61034c565b6100fc61011f366004610e0e565b610427565b61012c6104ca565b6040516101399190610e3f565b60405180910390f35b6100fc610150366004610e74565b6104fa565b610168610163366004610e74565b610588565b6040516101399190610ed0565b610188610183366004610e0e565b6105b1565b604051610139929190610ee2565b6101a96101a4366004610e0e565b610712565b6040519015158152602001610139565b6100fc6101c7366004610dbd565b610782565b6101686101da366004610e74565b610893565b6101a96101ed366004610e0e565b610939565b6101a9610200366004610dbd565b61095a565b6100fc610213366004610e0e565b6109af565b610168610226366004610f44565b610a7d565b836102368133610712565b61025357604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600160205260408120906102758585610abb565b6001600160a01b0387165f908152600484016020526040902090915061029b9082610ae8565b6102b85760405163262118cd60e01b815260040160405180910390fd5b6001600160a01b0386165f90815260048301602052604090206102db9082610aff565b505f81815260058301602052604090206102f59087610b0a565b50856001600160a01b0316876001600160a01b03167f18242326b6b862126970679759169f01f646bd55ec5bfcab85ba9f337a74e0c6878760405161033b929190610f84565b60405180910390a350505050505050565b816103578133610712565b61037457604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602081905260409091206002019061039b82610b1e565b116103b9576040516310ce892b60e31b815260040160405180910390fd5b6103c38184610b0a565b6103e057604051630716d81b60e51b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce906020015b60405180910390a250505050565b816104328133610712565b61044f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602052604090206104708184610b0a565b61048d5760405163bed8295f60e01b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fd706ed7ae044d795b49e54c9f519f663053951011985f663a862cd9ee72a9ac790602001610419565b60606104f57f76312e302e300000000000000000000000000000000000000000000000000006610b27565b905090565b6001600160a01b0381165f90815260016020526040902061051b8133610b0a565b6105385760405163bed8295f60e01b815260040160405180910390fd5b6105456002820133610b64565b506040513381526001600160a01b038316907fbf265e8326285a2747e33e54d5945f7111f2b5edb826eb8c08d4677779b3ff979060200160405180910390a25050565b6001600160a01b0381165f9081526001602052604090206060906105ab90610b78565b92915050565b6001600160a01b038083165f9081526001602090815260408083209385168352600490930190529081206060918291906105ea82610b1e565b90505f8167ffffffffffffffff81111561060657610606610fa7565b60405190808252806020026020018201604052801561062f578160200160208202803683370190505b5090505f8267ffffffffffffffff81111561064c5761064c610fa7565b604051908082528060200260200182016040528015610675578160200160208202803683370190505b5090505f5b83811015610704576106a861068f8683610b84565b606081901c9160a09190911b6001600160e01b03191690565b8483815181106106ba576106ba610fbb565b602002602001018484815181106106d3576106d3610fbb565b6001600160e01b0319909316602093840291909101909201919091526001600160a01b03909116905260010161067a565b509097909650945050505050565b6001600160a01b0382165f90815260016020526040812061073590600201610b1e565b5f0361075757816001600160a01b0316836001600160a01b03161490506105ab565b6001600160a01b0383165f90815260016020526040902061077b9060020183610b8f565b9392505050565b8361078d8133610712565b6107aa57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600160205260408120906107cc8585610abb565b6001600160a01b0387165f90815260048401602052604090209091506107f29082610ae8565b156108105760405163ad8efeb760e01b815260040160405180910390fd5b6001600160a01b0386165f90815260048301602052604090206108339082610bb0565b505f818152600583016020526040902061084d9087610b64565b50856001600160a01b0316876001600160a01b03167f037f03a2ad6b967df4a01779b6d2b4c85950df83925d9e31362b519422fc0169878760405161033b929190610f84565b6001600160a01b0381165f9081526001602052604090206060906108b990600201610b1e565b5f03610911576040805160018082528183019092525f916020808301908036833701905050905082815f815181106108f3576108f3610fbb565b6001600160a01b039092166020928302919091019091015292915050565b6001600160a01b0382165f9081526001602052604090206105ab90600201610b78565b919050565b6001600160a01b0382165f90815260016020526040812061077b9083610b8f565b5f6109658585610712565b806109a657506109a66109788484610abb565b6001600160a01b038088165f908152600160209081526040808320938a168352600490930190522090610ae8565b95945050505050565b816109ba8133610712565b6109d757604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602052604090206109fb6002820184610b8f565b15610a195760405163130160e560e31b815260040160405180910390fd5b610a238184610b64565b610a40576040516319abede360e11b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fb14b9a3d448c5b04f0e5b087b6f5193390db7955482a6ffb841e7b3ba61a460c90602001610419565b60605f610a8a8484610abb565b6001600160a01b0386165f90815260016020908152604080832084845260050190915290209091506109a690610b78565b60609190911b6bffffffffffffffffffffffff191660a09190911c6bffffffff0000000000000000161790565b5f818152600183016020526040812054151561077b565b5f61077b8383610bbb565b5f61077b836001600160a01b038416610bbb565b5f6105ab825490565b60605f610b3383610c9e565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f61077b836001600160a01b038416610cc5565b60605f61077b83610d11565b5f61077b8383610d6a565b6001600160a01b0381165f908152600183016020526040812054151561077b565b5f61077b8383610cc5565b5f8181526001830160205260408120548015610c95575f610bdd600183610fcf565b85549091505f90610bf090600190610fcf565b9050818114610c4f575f865f018281548110610c0e57610c0e610fbb565b905f5260205f200154905080875f018481548110610c2e57610c2e610fbb565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610c6057610c60610fee565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506105ab565b5f9150506105ab565b5f60ff8216601f8111156105ab57604051632cd44ac360e21b815260040160405180910390fd5b5f818152600183016020526040812054610d0a57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105ab565b505f6105ab565b6060815f01805480602002602001604051908101604052809291908181526020018280548015610d5e57602002820191905f5260205f20905b815481526020019060010190808311610d4a575b50505050509050919050565b5f825f018281548110610d7f57610d7f610fbb565b905f5260205f200154905092915050565b80356001600160a01b0381168114610934575f5ffd5b80356001600160e01b031981168114610934575f5ffd5b5f5f5f5f60808587031215610dd0575f5ffd5b610dd985610d90565b9350610de760208601610d90565b9250610df560408601610d90565b9150610e0360608601610da6565b905092959194509250565b5f5f60408385031215610e1f575f5ffd5b610e2883610d90565b9150610e3660208401610d90565b90509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215610e84575f5ffd5b61077b82610d90565b5f8151808452602084019350602083015f5b82811015610ec65781516001600160a01b0316865260209586019590910190600101610e9f565b5093949350505050565b602081525f61077b6020830184610e8d565b604081525f610ef46040830185610e8d565b82810360208401528084518083526020830191506020860192505f5b81811015610f385783516001600160e01b031916835260209384019390920191600101610f10565b50909695505050505050565b5f5f5f60608486031215610f56575f5ffd5b610f5f84610d90565b9250610f6d60208501610d90565b9150610f7b60408501610da6565b90509250925092565b6001600160a01b039290921682526001600160e01b031916602082015260400190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b818103818111156105ab57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220f435f20fa840f1162b93e62e212dbae650f94a34aecd8d0b08cf69b861667fea64736f6c634300081c003300", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "28": { - "address": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", - "storage": { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf55933", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" - } - }, - "47": { - "address": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf", - "code": "0x60806040526004361061021d575f3560e01c8063805ce31d1161011e578063b39053c5116100a8578063d58a8be41161006d578063d58a8be4146106cb578063df4ed829146106de578063f2e500b2146106fd578063f906d30914610710578063fe61cc491461072f575f5ffd5b8063b39053c5146105f9578063be8d42c014610618578063c536218f1461066e578063c66414c51461068d578063c9bd1e5b146106ac575f5ffd5b806390ffc4f9116100ee57806390ffc4f914610561578063928bc49d14610594578063988062ea146105b357806398ea5fca146105d2578063b0a23d44146105da575f5ffd5b8063805ce31d146104d55780638450a97c146104f7578063860929ee146105165780638ce2e33914610542575f5ffd5b80633ae65d7e116101aa57806346cd27511161016f57806346cd27511461045157806352054834146104705780635c60da1b146104835780635e6dae26146104975780636a64d9fb146104b6575f5ffd5b80633ae65d7e1461038a5780633f8bb4d9146103a9578063423e69b6146103c857806342e3ccfa14610413578063439fab9114610432575f5ffd5b806327c1d325116101f057806327c1d325146102cb5780632a6c3229146102ea5780632dd677b1146103295780632fb8ac581461034857806338004f6914610367575f5ffd5b80630705f4651461022157806309824a80146102565780630b6176461461026b57806326aa101f1461029c575b5f5ffd5b34801561022c575f5ffd5b5061024061023b3660046129ee565b61074e565b60405161024d9190612a19565b60405180910390f35b610269610264366004612a47565b6107c8565b005b348015610276575f5ffd5b5061027f610843565b604080519283526001600160801b0390911660208301520161024d565b3480156102a7575f5ffd5b506102bb6102b6366004612a47565b6108b7565b604051901515815260200161024d565b3480156102d6575f5ffd5b506102696102e5366004612aa6565b610933565b3480156102f5575f5ffd5b506103096103043660046129ee565b6109bb565b604080516001600160401b0393841681529290911660208301520161024d565b348015610334575f5ffd5b50610269610343366004612aa6565b610a39565b348015610353575f5ffd5b50610269610362366004612ae4565b610a91565b348015610372575f5ffd5b505f516020613ae35f395f51905f525460ff16610240565b348015610395575f5ffd5b506102696103a4366004612aa6565b610b3e565b3480156103b4575f5ffd5b506102696103c3366004612aa6565b610bb8565b3480156103d3575f5ffd5b506103fb7f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf81565b6040516001600160a01b03909116815260200161024d565b34801561041e575f5ffd5b5061026961042d366004612aa6565b610c10565b34801561043d575f5ffd5b5061026961044c366004612aa6565b610c68565b34801561045c575f5ffd5b5061026961046b366004612aa6565b610ca1565b61026961047e366004612b50565b610d1b565b34801561048e575f5ffd5b506103fb610da1565b3480156104a2575f5ffd5b506103fb6104b13660046129ee565b610dcf565b3480156104c1575f5ffd5b506102696104d0366004612ae4565b610dd9565b3480156104e0575f5ffd5b506104e9610e33565b60405190815260200161024d565b348015610502575f5ffd5b50610269610511366004612aa6565b610e9f565b348015610521575f5ffd5b5061052a610f19565b6040516001600160401b03909116815260200161024d565b34801561054d575f5ffd5b5061026961055c366004612c2f565b610f85565b34801561056c575f5ffd5b506103fb7f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf81565b34801561059f575f5ffd5b506104e96105ae366004612ccb565b6110fd565b3480156105be575f5ffd5b506102696105cd366004612aa6565b61119c565b6102696111f4565b3480156105e5575f5ffd5b506102696105f4366004612aa6565b61122e565b348015610604575f5ffd5b506102696106133660046129ee565b611286565b348015610623575f5ffd5b506104e9610632366004612a47565b6001600160a01b03165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e602052604090206001015490565b348015610679575f5ffd5b50610269610688366004612aa6565b6112e8565b348015610698575f5ffd5b506102bb6106a7366004612d32565b611340565b3480156106b7575f5ffd5b506102696106c6366004612aa6565b611389565b6102696106d9366004612d5b565b6113e1565b3480156106e9575f5ffd5b506102696106f8366004612db4565b611438565b61026961070b366004612e3f565b61191f565b34801561071b575f5ffd5b5061026961072a366004612aa6565b6119ac565b34801561073a575f5ffd5b506103fb6107493660046129ee565b611a04565b604051630705f46560e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f051290630705f46590602401602060405180830381865af415801561079e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f00565b92915050565b5f5c156107d3575f5ffd5b60015f5d6040516213049560e71b81526001600160a01b038216600482015273e7f1725e7734ce288f8367e1bb143e90bb3f0512906309824a80906024015f6040518083038186803b158015610827575f5ffd5b505af4158015610839573d5f5f3e3d5ffd5b505050505f5f5d50565b5f5f73e7f1725e7734ce288f8367e1bb143e90bb3f0512630b6176466040518163ffffffff1660e01b81526004016040805180830381865af415801561088b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108af9190612f1e565b915091509091565b6040516326aa101f60e01b81526001600160a01b03821660048201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f0512906326aa101f90602401602060405180830381865af415801561090f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f4d565b333014610952576040516282b42960e81b815260040160405180910390fd5b6040516316cba71360e21b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990635b2e9c4c9061098b9085908590600401612f94565b5f6040518083038186803b1580156109a1575f5ffd5b505af41580156109b3573d5f5f3e3d5ffd5b505050505050565b604051632a6c322960e01b8152600481018290525f90819073e7f1725e7734ce288f8367e1bb143e90bb3f051290632a6c3229906024016040805180830381865af4158015610a0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190612fa7565b91509150915091565b333014610a58576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f87570790638257f3d59061098b9085908590600401612f94565b333014610ab0576040516282b42960e81b815260040160405180910390fd5b60405163fe1aa59d60e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063fe1aa59d90610b0d9086907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9087908790600401612fd4565b5f6040518083038186803b158015610b23575f5ffd5b505af4158015610b35573d5f5f3e3d5ffd5b50505050505050565b333014610b5d576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b333014610bd7576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063253946459061098b9085908590600401612f94565b333014610c2f576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063ae8a4d989061098b9085908590600401612f94565b60405163439fab9160e01b8152730165878a594ca255338adfa4d48449f69242eb8f9063439fab919061098b9085908590600401612f94565b333014610cc0576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f5c15610d26575f5ffd5b60015f5d6040516326415bf360e21b815273e7f1725e7734ce288f8367e1bb143e90bb3f0512906399056fcc90610d6b9088903390899089908990899060040161306d565b5f6040518083038186803b158015610d81575f5ffd5b505af4158015610d93573d5f5f3e3d5ffd5b505050505f5f5d5050505050565b5f610dca7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b5f6107c282611a78565b333014610df8576040516282b42960e81b815260040160405180910390fd5b604051630e83f5b160e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063741fad8890610b0d90869086908690600401613102565b5f73e7f1725e7734ce288f8367e1bb143e90bb3f051263805ce31d6040518163ffffffff1660e01b8152600401602060405180830381865af4158015610e7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca919061311b565b333014610ebe576040516282b42960e81b815260040160405180910390fd5b60405163c31308d160e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063c31308d19061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f739fe46736679d2d9a65f0992f2272de9f3c7fa6e063fd10ebe56040518163ffffffff1660e01b8152600401602060405180830381865af4158015610f61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca9190613132565b5f5c15610f90575f5ffd5b60015f5d5f516020613ae35f395f51905f52610fe4610fb56040880160208901612d32565b66ffffffffffffff600882901c165f908152600484016020526040902054600160ff9092169190911b16151590565b1561100257604051633ab3447f60e11b815260040160405180910390fd5b6110466110156040880160208901612d32565b66ffffffffffffff600882901c165f90815260048401602052604090208054600160ff9093169290921b9091179055565b5f611052878787611ad0565b905061105e8185611b41565b61107b576040516309bde33960e01b815260040160405180910390fd5b505f61108687611be4565b90506110986040880160208901612d32565b6001600160401b03167f8856ab63954e6c2938803a4654fb704c8779757e7bfdbe94a578e341ec637a95886040013583866040516110e9939291909283529015156020830152604082015260600190565b60405180910390a250505f5f5d5050505050565b60405163928bc49d60e01b81526001600160a01b038416600482015263ffffffff831660248201526001600160801b03821660448201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063928bc49d90606401602060405180830381865af4158015611170573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611194919061311b565b949350505050565b3330146111bb576040516282b42960e81b815260040160405180910390fd5b60405163017b731160e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063017b73119061098b9085908590600401612f94565b604080513381523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1565b33301461124d576040516282b42960e81b815260040160405180910390fd5b604051630643752360e11b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990630c86ea469061098b9085908590600401612f94565b604051634a283cd960e01b815260048101829052739fe46736679d2d9a65f0992f2272de9f3c7fa6e090634a283cd9906024015f6040518083038186803b1580156112cf575f5ffd5b505af41580156112e1573d5f5f3e3d5ffd5b5050505050565b333014611307576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063ae8a4d989061098b9085908590600401612f94565b66ffffffffffffff600882901c165f9081527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96af6020526040812054600160ff84161b1615156107c2565b3330146113a8576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990638257f3d59061098b9085908590600401612f94565b5f5c156113ec575f5ffd5b60015f5d60ff831615611412576040516386eab41b60e01b815260040160405180910390fd5b61142f8460ff8516801561142857611428612a05565b8484611ca1565b5f5f5d50505050565b5f5c15611443575f5ffd5b60015f5d5f5a90505f6114568635611d5a565b80549091506114749061010090046001600160401b03166001613161565b6001600160401b031661148d6040880160208901612d32565b6001600160401b0316146114b457604051633ab3447f60e11b815260040160405180910390fd5b805461010090046001600160401b03168160016114d083613180565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505f8660405160200161150791906131cc565b6040516020818303038152906040528051906020012090505f61155d8787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250869250611db0915050565b905061156a81865f611df2565b611587576040516309bde33960e01b815260040160405180910390fd5b5f61159860a08a0160808b01612d32565b6001600160401b031690506115af6127108261327e565b60405a6115bd90603f613291565b6115c791906132a8565b10156115e657604051636eb14fc360e11b815260040160405180910390fd5b60015f6115f960608c0160408d016132c7565b600b81111561160a5761160a612a05565b036116795730638450a97c8361162360608e018e6132e0565b6040518463ffffffff1660e01b8152600401611640929190612f94565b5f604051808303815f88803b158015611657575f5ffd5b5087f193505050508015611669575060015b61167457505f611840565b611840565b600561168b60608c0160408d016132c7565b600b81111561169c5761169c612a05565b036116b5573063c9bd1e5b8361162360608e018e6132e0565b60016116c760608c0160408d016132c7565b600b8111156116d8576116d8612a05565b036116f15730633f8bb4d98361162360608e018e6132e0565b600761170360608c0160408d016132c7565b600b81111561171457611714612a05565b0361172d57306327c1d3258361162360608e018e6132e0565b600861173f60608c0160408d016132c7565b600b81111561175057611750612a05565b03611769573063b0a23d448361162360608e018e6132e0565b600961177b60608c0160408d016132c7565b600b81111561178c5761178c612a05565b036117a557306346cd27518361162360608e018e6132e0565b600a6117b760608c0160408d016132c7565b600b8111156117c8576117c8612a05565b036117e1573063c536218f8361162360608e018e6132e0565b600b6117f360608c0160408d016132c7565b600b81111561180457611804612a05565b0361183d5730636a64d9fb838c3561181f60608f018f6132e0565b6040518563ffffffff1660e01b815260040161164093929190613102565b505f5b5f5a61184c9088613322565b611854611e97565b61185e919061327e565b90505f61186f3a8d60a00135611ebb565b6118799083613291565b90505f61189361188d60c08f01358461327e565b47611ebb565b905061189d611ed0565b8111156118ae576118ae3382611edd565b8c60e001358d5f01357f617fdb0cb78f01551a192a3673208ec5eb09f20a90acf673c63a0dcb11745a7a8f60200160208101906118eb9190612d32565b604080516001600160401b03909216825288151560208301520160405180910390a35050505050505050505f5f5d50505050565b5f5c1561192a575f5ffd5b60015f5d604051631fccb47160e31b8152739fe46736679d2d9a65f0992f2272de9f3c7fa6e09063fe65a38890611973908b908b908b908b908b908b908b908b90600401613335565b5f6040518083038186803b158015611989575f5ffd5b505af415801561199b573d5f5f3e3d5ffd5b505050505f5f5d5050505050505050565b3330146119cb576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063253946459061098b9085908590600401612f94565b60405163fe61cc4960e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063fe61cc4990602401602060405180830381865af4158015611a54573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c291906133ef565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b031680611acb5760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f84604051602001611ae3919061346b565b604051602081830303815290604052805190602001209050611b388484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859250611db0915050565b95945050505050565b6040516372dd6c6d60e11b81525f90735fbdb2315678afecb367f032d93f642f64180aa39063e5bad8da90611b9e907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9087908790600401613605565b602060405180830381865af4158015611bb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bdd9190612f4d565b9392505050565b5f6001815b611bf6606085018561366f565b9050811015611c9a57611c38611c0f606086018661366f565b83818110611c1f57611c1f6136b4565b9050602002810190611c3191906136c8565b8535611f0b565b611c9257611c4c6040850160208601612d32565b6001600160401b03167fa6dc208277bb3da3666e7305baf550db2daf26f8f386a431a4b27cc7a02965a282604051611c8691815260200190565b60405180910390a25f91505b600101611be9565b5092915050565b6001600160801b03341115611cc9576040516330e972ad60e01b815260040160405180910390fd5b611cd381836136e6565b6001600160801b0316341015611cfc5760405163044044a560e21b815260040160405180910390fd5b5f611d078585612127565b9050611d12856121c7565b604080515f808252602082019092526112e19130918491611d43565b6060815260200190600190039081611d2e5790505b5060405180602001604052805f8152508787612271565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b0316611acb57604051636ddd9da960e01b815260040160405180910390fd5b5f81815b8451811015611dea57611de082868381518110611dd357611dd36136b4565b602002602001015161250c565b9150600101611db4565b509392505050565b6040516316db930b60e11b81525f90738a791620dd6260079bf849dc5567adc3f2fdc31890632db7261690611e58907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9061ea0360f01b9089908990899060040161374a565b602060405180830381865af4158015611e73573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111949190612f4d565b5f611ea436610bb8611ebb565b611eaf906010613291565b610dca90618b7261327e565b5f818310611ec95781611bdd565b5090919050565b5f610dca3a615208613291565b5f5f5f5f5f85875af1905080611f0657604051633d2cec6f60e21b815260040160405180910390fd5b505050565b5f615dc0611f1f6040850160208601612d32565b6001600160401b0316611f32919061327e565b60405a611f4090603f613291565b611f4a91906132a8565b1015611f69576040516360ee124760e01b815260040160405180910390fd5b5f611f7760208501856138ef565b60ff1603612001573063f906d309611f956040860160208701612d32565b6001600160401b0316611fab60408701876132e0565b6040518463ffffffff1660e01b8152600401611fc8929190612f94565b5f604051808303815f88803b158015611fdf575f5ffd5b5087f193505050508015611ff1575060015b611ffc57505f6107c2565b61211e565b600161201060208501856138ef565b60ff160361202e5730632dd677b1611f956040860160208701612d32565b600261203d60208501856138ef565b60ff160361205b5730633ae65d7e611f956040860160208701612d32565b600361206a60208501856138ef565b60ff160361208857306342e3ccfa611f956040860160208701612d32565b600461209760208501856138ef565b60ff16036120b5573063988062ea611f956040860160208701612d32565b60056120c460208501856138ef565b60ff16036121175730632fb8ac586120e26040860160208701612d32565b6001600160401b0316846120f960408801886132e0565b6040518563ffffffff1660e01b8152600401611fc893929190613102565b505f6107c2565b50600192915050565b604080518082019091525f8152606060208201526040518060400160405280600160ff1681526020016040518060400160405280866001600160a01b03168152602001855f81111561217b5761217b612a05565b60ff1690526040516121ae919060200181516001600160a01b0316815260209182015160ff169181019190915260400190565b60408051601f1981840301815291905290529392505050565b6121d9816001600160a01b0316612538565b6121f65760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e60208190526040909120805460ff16801561224457506122448161257e565b1561226257604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b612279612592565b6001600160801b033411156122a1576040516330e972ad60e01b815260040160405180910390fd5b6122ab81836136e6565b6001600160801b03163410156122d45760405163044044a560e21b815260040160405180910390fd5b5f6122fe7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79611a78565b90506123136001600160a01b03821634611edd565b8451600810156123365760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561235057612350613705565b60405190808252806020026020018201604052801561239557816020015b604080518082019091525f81526060602082015281526020019060019003908161236e5790505b5090505f5b86518110156123ea576123c58782815181106123b8576123b86136b4565b60200260200101516125d9565b8282815181106123d7576123d76136b4565b602090810291909101015260010161239a565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0545f516020613ae35f395f51905f529061242f906001600160401b03166001613161565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a8152602001888152602001868834612490919061390a565b61249a919061390a565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c916124f8916001600160401b0316908490613978565b60405180910390a150505050505050505050565b5f818310612526575f828152602084905260409020611bdd565b5f838152602083905260409020611bdd565b5f6001600160a01b0382163f158015906107c25750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f61258b82600101541590565b1592915050565b5f516020613ae35f395f51905f5280545f9060ff1660018111156125b8576125b8612a05565b146125d657604051633ac4266d60e11b815260040160405180910390fd5b50565b604080518082019091525f815260606020820152602082015160ff165f819003612622575f5f848060200190518101906126139190613a8d565b9250925050611b38828261263b565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166126ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b0316116126d75760405163162908e360e11b815260040160405180910390fd5b600181015461270d5760018201546126fa906001600160a01b03168633876127a5565b6127048585612821565b925050506107c2565b6127168161257e565b1561278c57604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b158015612768575f5ffd5b505af115801561277a573d5f5f3e3d5ffd5b50505050612704816001015485612888565b604051636890662960e01b815260040160405180910390fd5b6127b7836001600160a01b0316612538565b6127d45760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036127fd5760405163162908e360e11b815260040160405180910390fd5b61281b6001600160a01b03841683866001600160801b0385166128e2565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060016121ae565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a905291511695810195909552929390830191016121ae565b6040516001600160a01b038085166024830152831660448201526064810182905261281b90859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b0316836040516129509190613acc565b5f604051808303815f865af19150503d805f8114612989576040519150601f19603f3d011682016040523d82523d5f602084013e61298e565b606091505b50915091505f8280156129b95750815115806129b95750818060200190518101906129b99190612f4d565b90508015806129d057506001600160a01b0385163b155b156112e15760405163022e258160e11b815260040160405180910390fd5b5f602082840312156129fe575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310612a2d57612a2d612a05565b91905290565b6001600160a01b03811681146125d6575f5ffd5b5f60208284031215612a57575f5ffd5b8135611bdd81612a33565b5f5f83601f840112612a72575f5ffd5b5081356001600160401b03811115612a88575f5ffd5b602083019150836020828501011115612a9f575f5ffd5b9250929050565b5f5f60208385031215612ab7575f5ffd5b82356001600160401b03811115612acc575f5ffd5b612ad885828601612a62565b90969095509350505050565b5f5f5f60408486031215612af6575f5ffd5b8335925060208401356001600160401b03811115612b12575f5ffd5b612b1e86828701612a62565b9497909650939450505050565b63ffffffff811681146125d6575f5ffd5b6001600160801b03811681146125d6575f5ffd5b5f5f5f5f5f60a08688031215612b64575f5ffd5b8535612b6f81612a33565b94506020860135612b7f81612b2b565b935060408601356001600160401b03811115612b99575f5ffd5b860160408189031215612baa575f5ffd5b92506060860135612bba81612b3c565b91506080860135612bca81612b3c565b809150509295509295909350565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b6020830191508360208260051b8501011115612a9f575f5ffd5b5f6101008284031215612c29575f5ffd5b50919050565b5f5f5f5f5f60808688031215612c43575f5ffd5b85356001600160401b03811115612c58575f5ffd5b860160808189031215612c69575f5ffd5b945060208601356001600160401b03811115612c83575f5ffd5b612c8f88828901612bd8565b90955093505060408601356001600160401b03811115612cad575f5ffd5b612cb988828901612c18565b95989497509295606001359392505050565b5f5f5f60608486031215612cdd575f5ffd5b8335612ce881612a33565b92506020840135612cf881612b2b565b91506040840135612d0881612b3c565b809150509250925092565b6001600160401b03811681146125d6575f5ffd5b8035611acb81612d13565b5f60208284031215612d42575f5ffd5b8135611bdd81612d13565b60ff811681146125d6575f5ffd5b5f5f5f5f60808587031215612d6e575f5ffd5b8435612d7981612a33565b93506020850135612d8981612d4d565b92506040850135612d9981612b3c565b91506060850135612da981612b3c565b939692955090935050565b5f5f5f5f60608587031215612dc7575f5ffd5b84356001600160401b03811115612ddc575f5ffd5b612de887828801612c18565b94505060208501356001600160401b03811115612e03575f5ffd5b612e0f87828801612bd8565b90945092505060408501356001600160401b03811115612e2d575f5ffd5b85016101408188031215612da9575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612e56575f5ffd5b88356001600160401b03811115612e6b575f5ffd5b612e778b828c01612a62565b90995097505060208901356001600160401b03811115612e95575f5ffd5b612ea18b828c01612bd8565b90975095505060408901356001600160401b03811115612ebf575f5ffd5b612ecb8b828c01612a62565b9095509350506060890135612edf81612b3c565b91506080890135612eef81612b3c565b809150509295985092959890939650565b5f60208284031215612f10575f5ffd5b815160028110611bdd575f5ffd5b5f5f60408385031215612f2f575f5ffd5b82516020840151909250612f4281612b3c565b809150509250929050565b5f60208284031215612f5d575f5ffd5b81518015158114611bdd575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f611194602083018486612f6c565b5f5f60408385031215612fb8575f5ffd5b8251612fc381612d13565b6020840151909250612f4281612d13565b8481526001600160a01b03841660208201526060604082018190525f90612ffe9083018486612f6c565b9695505050505050565b6001600160a01b03841681526040602082018190525f90611b389083018486612f6c565b5f5f8335601e19843603018112613041575f5ffd5b83016020810192503590506001600160401b0381111561305f575f5ffd5b803603821315612a9f575f5ffd5b6001600160a01b0387811682528616602082015263ffffffff8516604082015260c060608201525f8435600381108015906130a6575f5ffd5b5060c08301526130b9602086018661302c565b604060e08501526130cf61010085018284612f6c565b925050506001600160801b03841660808301526130f760a08301846001600160801b03169052565b979650505050505050565b838152604060208201525f611b38604083018486612f6c565b5f6020828403121561312b575f5ffd5b5051919050565b5f60208284031215613142575f5ffd5b8151611bdd81612d13565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156107c2576107c261314d565b5f6001600160401b0382166001600160401b0381036131a1576131a161314d565b60010192915050565b8035600c8110611acb575f5ffd5b600c81106131c8576131c8612a05565b9052565b60208082528235828201525f908301356131e581612d13565b6001600160401b038116604084015250613201604084016131aa565b61320e60608401826131b8565b5061321c606084018461302c565b610100608085015261323361012085018284612f6c565b91505061324260808501612d27565b6001600160401b03811660a08501525060a084013560c08481019190915284013560e08085019190915290930135610100909201919091525090565b808201808211156107c2576107c261314d565b80820281158282048414176107c2576107c261314d565b5f826132c257634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156132d7575f5ffd5b611bdd826131aa565b5f5f8335601e198436030181126132f5575f5ffd5b8301803591506001600160401b0382111561330e575f5ffd5b602001915036819003821315612a9f575f5ffd5b818103818111156107c2576107c261314d565b60a081525f61334860a083018a8c612f6c565b82810360208401528088825260208201905060208960051b8301018a5f5b8b8110156133a457848303601f19018452613381828e61302c565b61338c858284612f6c565b60209687019690955093909301925050600101613366565b505084810360408601526133b981898b612f6c565b93505050506133d360608301856001600160801b03169052565b6001600160801b03831660808301529998505050505050505050565b5f602082840312156133ff575f5ffd5b8151611bdd81612a33565b5f5f8335601e1984360301811261341f575f5ffd5b83016020810192503590506001600160401b0381111561343d575f5ffd5b8060051b3603821315612a9f575f5ffd5b5f8235605e19833603018112613462575f5ffd5b90910192915050565b60208082528235828201525f9060a083019084013561348981612d13565b6001600160401b0381166040850152505f60408501359050806060850152506134b5606085018561340a565b6080808601528281845260c08601905060c08260051b8701019350825f5b838110156135555787860360bf190183526134ee828661344e565b80356134f981612d4d565b60ff168752602081013561350c81612d13565b6001600160401b03166020880152613527604082018261302c565b91506060604089015261353e606089018383612f6c565b9750505060209283019291909101906001016134d3565b5093979650505050505050565b803561356d81612d4d565b60ff168252602081013561358081612b2b565b63ffffffff1660208301526040818101359083015260608101356135a381612d13565b6001600160401b0316606083015260808101356135bf81612b2b565b63ffffffff16608083015260a090810135910152565b8183525f6001600160fb1b038311156135ec575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03841681526020810183905260606040820181905261362d90820183613562565b5f61363b60c084018461340a565b610100610120850152613653610160850182846135d5565b60e0959095013561014094909401939093525091949350505050565b5f5f8335601e19843603018112613684575f5ffd5b8301803591506001600160401b0382111561369d575f5ffd5b6020019150600581901b3603821315612a9f575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126136dc575f5ffd5b9190910192915050565b6001600160801b0381811683821601908111156107c2576107c261314d565b634e487b7160e01b5f52604160045260245ffd5b80358252602080820135908301525f613735604083018361340a565b60606040860152611b386060860182846135d5565b6001600160a01b03861681526001600160e01b0319851660208201526040810184905260a060608201525f833536859003609e19018112613789575f5ffd5b61014060a0840152840180356101e084015260208101356102008401526040810135610220840152606081013561024084015261028083016137ce608083018361340a565b925060a0610260860152818383526102a0860190506102a08460051b8701019250815f5b8581101561386e5787850361029f1901835261380e828561344e565b8035865260208101356001600160e01b0319811680821461382d575f5ffd5b602088015250613840604082018261302c565b915060606040880152613857606088018383612f6c565b9650505060209283019291909101906001016137f2565b5050505061387f602087018761344e565b848203609f190160c086015291506138978183613719565b9150506138aa60e0840160408701613562565b6138b861010086018661340a565b848303609f19016101a08601526138d08382846135d5565b6101208801356101c087015286151560808701529350612ffe92505050565b5f602082840312156138ff575f5ffd5b8135611bdd81612d4d565b6001600160801b0382811682821603908111156107c2576107c261314d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f6020820151604060208501526111946040850182613929565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b818110156139ff5761013f198786030183526139ea858551613957565b945060209384019392909201916001016139cd565b505050506040840151838203603f19016080850152613a1e8282613957565b9150506060840151603f198483030160a0850152613a3c8282613929565b9150506080840151613a5960c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b5f5f5f60608486031215613a9f575f5ffd5b8351613aaa81612d4d565b6020850151909350613abb81612a33565b6040850151909250612d0881612b3c565b5f82518060208501845e5f92019182525091905056fe0096e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96aba2646970667358221220f6c8abf1dfd431b5f7521d0ea361c25d201c21f86d9ff9461d41a5106960ec9b64736f6c634300081c003300000000000000", + "8": { + "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", + "code": "0x738a791620dd6260079bf849dc5567adc3f2fdc3183014608060405260043610610090575f3560e01c8063ab55562e11610063578063ab55562e146100fd578063af18d14214610105578063c82b5f451461010d578063ded905d514610115575f5ffd5b80632db726161461009457806379d0e91c146100bc5780637cb1a954146100e05780639ce504ff146100f6575b5f5ffd5b6100a76100a23660046109da565b61011c565b60405190151581526020015b60405180910390f35b6100c7600160f81b81565b6040516001600160f81b031990911681526020016100b3565b6100e8600581565b6040519081526020016100b3565b6100c75f81565b6100e8600681565b6100e8600481565b6100e8600881565b6100e85f81565b5f6101318461012b8580610a64565b84610278565b61013c57505f61026f565b6101496020840184610a82565b6020013583806020019061015d9190610a82565b351061016a57505f61026f565b5f61017e866101798680610a64565b610419565b90505f6101c7826101926020880188610a82565b356101a06020890189610a82565b602001358880602001906101b49190610a82565b6101c2906040810190610a96565b610434565b90505f6101e56101df36889003880160408901610b1d565b836104da565b90506001600160a01b03891663a401662b826102056101008a018a610a96565b8a61012001356040518563ffffffff1660e01b815260040161022a9493929190610bbc565b602060405180830381865afa158015610245573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102699190610c00565b93505050505b95945050505050565b5f5f82610285575f61028b565b600160f81b5b90505f5b61029c6080860186610a96565b905081101561040c575f6102b36080870187610a96565b838181106102c3576102c3610c1b565b90506020028101906102d59190610a82565b3514801561032157506102eb6080860186610a96565b828181106102fb576102fb610c1b565b905060200281019061030d9190610a82565b61031b906040810190610c2f565b90506021145b801561039657506001600160f81b031982166103406080870187610a96565b8381811061035057610350610c1b565b90506020028101906103629190610a82565b610370906040810190610c2f565b5f81811061038057610380610c1b565b9050013560f81c60f81b6001600160f81b031916145b80156103f457506103aa6080860186610a96565b828181106103ba576103ba610c1b565b90506020028101906103cc9190610a82565b6103da906040810190610c2f565b6103e8916001908290610c72565b6103f191610c99565b86145b1561040457600192505050610412565b60010161028f565b505f9150505b9392505050565b5f610424838361062c565b8051906020012090505b92915050565b5f85815b838110156104cf57866001166001148061045457508587600101145b1561048b5761048485858381811061046e5761046e610c1b565b90506020020135835f9182526020526040902090565b91506104b9565b6104b6828686848181106104a1576104a1610c1b565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501610438565b509695505050505050565b81515f90819060f81b6105128560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b856040015161058887606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b60605f823561063e60208501356106b8565b6040850135606086013561065d6106586080890189610a96565b6106e8565b604051602001610671959493929190610ccd565b60405160208183030381529060405290508361068d82516106b8565b826040516020016106a093929190610d00565b60405160208183030381529060405291505092915050565b606063ffffffff8211156106df57604051637404cccd60e11b815260040160405180910390fd5b61042e82610778565b60408051602081019091525f808252606091905b8381101561075c578161073186868481811061071a5761071a610c1b565b905060200281019061072c9190610a82565b6108d3565b604051602001610742929190610d24565b60408051601f1981840301815291905291506001016106fc565b50610766836106b8565b816040516020016106a0929190610d24565b6060603f8263ffffffff16116107b557604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff1611610814576107f16107dd6403fffffffc600285901b166001610d3a565b600881811b62ffff001691901c60ff161790565b60405160200161079f919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116108865761086360028363ffffffff16901b600261083f9190610d3a565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b60405160200161079f919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b16602182015260250161079f565b919050565b60608135600614806108e6575081356004145b806108f2575081356005145b1561094457813560f81b61090c6040840160208501610d62565b61092361091c6040860186610c2f565b90506106b8565b6109306040860186610c2f565b60405160200161079f959493929190610d7b565b813561097b575f61095b61091c6040850185610c2f565b6109686040850185610c2f565b60405160200161079f9493929190610dbb565b60071982350161099a57604051600160fb1b602082015260210161079f565b604051635422005560e11b815260040160405180910390fd5b80356001600160e01b0319811681146108ce575f5ffd5b80151581146109d7575f5ffd5b50565b5f5f5f5f5f60a086880312156109ee575f5ffd5b85356001600160a01b0381168114610a04575f5ffd5b9450610a12602087016109b3565b935060408601359250606086013567ffffffffffffffff811115610a34575f5ffd5b86016101408189031215610a46575f5ffd5b91506080860135610a56816109ca565b809150509295509295909350565b5f8235609e19833603018112610a78575f5ffd5b9190910192915050565b5f8235605e19833603018112610a78575f5ffd5b5f5f8335601e19843603018112610aab575f5ffd5b83018035915067ffffffffffffffff821115610ac5575f5ffd5b6020019150600581901b3603821315610adc575f5ffd5b9250929050565b803560ff811681146108ce575f5ffd5b803563ffffffff811681146108ce575f5ffd5b803567ffffffffffffffff811681146108ce575f5ffd5b5f60c0828403128015610b2e575f5ffd5b5060405160c0810167ffffffffffffffff81118282101715610b5e57634e487b7160e01b5f52604160045260245ffd5b604052610b6a83610ae3565b8152610b7860208401610af3565b602082015260408381013590820152610b9360608401610b06565b6060820152610ba460808401610af3565b608082015260a0928301359281019290925250919050565b84815260606020820181905281018390525f6001600160fb1b03841115610be1575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215610c10575f5ffd5b8151610412816109ca565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112610c44575f5ffd5b83018035915067ffffffffffffffff821115610c5e575f5ffd5b602001915036819003821315610adc575f5ffd5b5f5f85851115610c80575f5ffd5b83861115610c8c575f5ffd5b5050820193919092039150565b8035602083101561042e575f19602084900360031b1b1692915050565b5f81518060208401855e5f93019283525090919050565b8581525f610cde6020830187610cb6565b858152846020820152610cf46040820185610cb6565b98975050505050505050565b6001600160e01b0319841681525f61026f610d1e6004840186610cb6565b84610cb6565b5f610d32610d1e8386610cb6565b949350505050565b63ffffffff818116838216019081111561042e57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215610d72575f5ffd5b610412826109b3565b6001600160f81b0319861681526001600160e01b0319851660018201525f610da66005830186610cb6565b838582375f9301928352509095945050505050565b6001600160f81b0319851681525f610dd66001830186610cb6565b838582375f9301928352509094935050505056fea2646970667358221220c01d1eab658ad83869626a17b6ba270bf7c192e63427aa6f49cfaf85f01e51a064736f6c634300081c003300", "storage": {} }, - "48": { - "address": "0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", + "26": { + "address": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", "storage": { - "0x00000000000000000000000000000000000000000000000000000000000013a8": "0x00000000000000000000000000000000000000000000000000000000695d28a5", - "0x000000000000000000000000000000000000000000000000000000000000137d": "0x00000000000000000000000000000000000000000000000000000000695d287a", - "0x00000000000000000000000000000000000000000000000000000000000013a9": "0x00000000000000000000000000000000000000000000000000000000695d28a6", - "0x0000000000000000000000000000000000000000000000000000000000001397": "0x00000000000000000000000000000000000000000000000000000000695d2894", - "0x00000000000000000000000000000000000000000000000000000000000033a4": "0x4342000783fe0533e0a0cb41eb950df10cbeb5607e5d2db57098e8cbbd9f1a85", - "0x00000000000000000000000000000000000000000000000000000000000033a8": "0xb70342c912c6e3d843a6bc41f0dbf8031ded7f6d07acdfa2c0c6a129d2f4ace5", - "0x00000000000000000000000000000000000000000000000000000000000013a5": "0x00000000000000000000000000000000000000000000000000000000695d28a2", - "0x000000000000000000000000000000000000000000000000000000000000137b": "0x00000000000000000000000000000000000000000000000000000000695d2878", - "0x0000000000000000000000000000000000000000000000000000000000001381": "0x00000000000000000000000000000000000000000000000000000000695d287e", - "0x0000000000000000000000000000000000000000000000000000000000001387": "0x00000000000000000000000000000000000000000000000000000000695d2884", - "0x0000000000000000000000000000000000000000000000000000000000003383": "0x6a148eba136d43e22a06edd10b5b8ce3fd4a634d645142ecebce1e0727e57ed1", - "0x000000000000000000000000000000000000000000000000000000000000338d": "0x63f674c194d9dcbd3501cbac717874b7c0fcff81130093bfcf4e3168939d3c62", - "0x00000000000000000000000000000000000000000000000000000000000033ab": "0x47e0f1b59f9a743de2a72a5e88437750f956339693d3b47cb9694dfeeeffb59e", - "0x00000000000000000000000000000000000000000000000000000000000033ad": "0x945eec61fa290f0bd2924029bebbbb85b0295985a0f19959b5e875cebc795942", - "0x0000000000000000000000000000000000000000000000000000000000001383": "0x00000000000000000000000000000000000000000000000000000000695d2880", - "0x0000000000000000000000000000000000000000000000000000000000003390": "0x4c70f7ae1a389060b60ad5e16aa8bc281bc0afcbd068ee3e7af8e56b3e12d793", - "0x00000000000000000000000000000000000000000000000000000000000033a9": "0x9a5a29448d5bdc1697260bc80058f83584552cc6804909c86d44eb671767b86b", - "0x000000000000000000000000000000000000000000000000000000000000137e": "0x00000000000000000000000000000000000000000000000000000000695d287b", - "0x000000000000000000000000000000000000000000000000000000000000339c": "0x4ba2560699ebecaf362662e6758f9daec2bf8b4aa7b39db6352ddec09f453b0a", - "0x00000000000000000000000000000000000000000000000000000000000033b3": "0x3e5ade192cd5dc06768907601934695f8d8860cb2aeb71c4d92bcad2f82ffd61", - "0x0000000000000000000000000000000000000000000000000000000000001380": "0x00000000000000000000000000000000000000000000000000000000695d287d", - "0x00000000000000000000000000000000000000000000000000000000000013b3": "0x00000000000000000000000000000000000000000000000000000000695d28b0", - "0x00000000000000000000000000000000000000000000000000000000000013a2": "0x00000000000000000000000000000000000000000000000000000000695d289f", - "0x000000000000000000000000000000000000000000000000000000000000338e": "0x066d9a4f664adb663469fed074fa9ed90b2e4de2818a2ee657c46245a2715625", - "0x00000000000000000000000000000000000000000000000000000000000013af": "0x00000000000000000000000000000000000000000000000000000000695d28ac", - "0x00000000000000000000000000000000000000000000000000000000000013b4": "0x00000000000000000000000000000000000000000000000000000000695d28b1", - "0x00000000000000000000000000000000000000000000000000000000000013b5": "0x00000000000000000000000000000000000000000000000000000000695d28b2", - "0x00000000000000000000000000000000000000000000000000000000000033b1": "0x7830183c184f9cfd2c3e7ed7e4480ebeeb20b2763a9ddc8b3582e81268fade83", - "0x000000000000000000000000000000000000000000000000000000000000339a": "0x57634e253bba17325f3e653b82482fe932839fbb6f5df53404f2f43f4a5ed2fc", - "0x0000000000000000000000000000000000000000000000000000000000003395": "0x7482c843f744e2d5d24fda7b1aeb7c85613472742e6e0de7b97cfc0d9f23d0b4", - "0x000000000000000000000000000000000000000000000000000000000000138d": "0x00000000000000000000000000000000000000000000000000000000695d288a", - "0x00000000000000000000000000000000000000000000000000000000000013bb": "0x00000000000000000000000000000000000000000000000000000000695d28b8", - "0x00000000000000000000000000000000000000000000000000000000000013b1": "0x00000000000000000000000000000000000000000000000000000000695d28ae", - "0x000000000000000000000000000000000000000000000000000000000000338f": "0xac6e677a07ae4e29d84eea624f517b393c2cf41af7b0596f5665eb50c2ca6283", - "0x0000000000000000000000000000000000000000000000000000000000001382": "0x00000000000000000000000000000000000000000000000000000000695d287f", - "0x0000000000000000000000000000000000000000000000000000000000001391": "0x00000000000000000000000000000000000000000000000000000000695d288e", - "0x00000000000000000000000000000000000000000000000000000000000013ac": "0x00000000000000000000000000000000000000000000000000000000695d28a9", - "0x0000000000000000000000000000000000000000000000000000000000003392": "0x3270020af347feb96c68e975e5350f15565c3e2568728bc1a042140c41df393c", - "0x0000000000000000000000000000000000000000000000000000000000003387": "0x772dedc617ffee7cb1f78546bb17855f821fff7d85f47c0a88ecbd4b71c67392", - "0x00000000000000000000000000000000000000000000000000000000000033aa": "0x8c972869f45bb75dfcc8bb8cc7500214579870c4dc2270f2c9574dafef5ca0b0", - "0x000000000000000000000000000000000000000000000000000000000000339b": "0xa43017815eaa6594146dc6997e9c0b43e4faa3ff5a16b15a7ec7e04cd4d75132", - "0x000000000000000000000000000000000000000000000000000000000000337d": "0xc8b0393084b49e879b81554c18fc113c0e0485b507769f337533acaf0999d267", - "0x000000000000000000000000000000000000000000000000000000000000337e": "0xfa603d6ba8a1078f87c1258f050db4a4ba88c2eb917bbdf1219bf77dbbdd555d", - "0x000000000000000000000000000000000000000000000000000000000000139c": "0x00000000000000000000000000000000000000000000000000000000695d2899", - "0x00000000000000000000000000000000000000000000000000000000000013b0": "0x00000000000000000000000000000000000000000000000000000000695d28ad", - "0x0000000000000000000000000000000000000000000000000000000000003394": "0x3a0ad69d9bb4326858f8d53a35f55310b613fbafb230194ed1107e56abbe0a50", - "0x0000000000000000000000000000000000000000000000000000000000001386": "0x00000000000000000000000000000000000000000000000000000000695d2883", - "0x000000000000000000000000000000000000000000000000000000000000138f": "0x00000000000000000000000000000000000000000000000000000000695d288c", - "0x0000000000000000000000000000000000000000000000000000000000003389": "0xfa994968a6d9baf84441aacb0bc7c5e59bd1798585ccf22d1b92427c1164264c", - "0x00000000000000000000000000000000000000000000000000000000000033ba": "0x2da5b497030410c204c0480c098ac6a79026fde3ee8a3fc76267e527289fa223", - "0x000000000000000000000000000000000000000000000000000000000000337b": "0x95efbab8e1f493a477c57ff5bb80deb8afe683896bd5d558dc879e8d2e261dc0", - "0x00000000000000000000000000000000000000000000000000000000000013ae": "0x00000000000000000000000000000000000000000000000000000000695d28ab", - "0x000000000000000000000000000000000000000000000000000000000000139b": "0x00000000000000000000000000000000000000000000000000000000695d2898", - "0x000000000000000000000000000000000000000000000000000000000000339d": "0x504399e41a191ccaf0dab2fabd39a5b7096f7d0fe6194227669e00726774801a", - "0x00000000000000000000000000000000000000000000000000000000000033b9": "0x2149a2024b8234526e0b07c6e7152c14e22d505de44a7b45b2e41694871620fe", - "0x0000000000000000000000000000000000000000000000000000000000003385": "0x4afb9c5d887480c41a5caf290dadd5b63034d001aefe2ab561595b390096a828", - "0x00000000000000000000000000000000000000000000000000000000000033b8": "0x070bf421b4a3c873a04be2f041ea71584495ca8cd856742c4113be0feb08c321", - "0x000000000000000000000000000000000000000000000000000000000000337f": "0x08a697ca9e8bf527cd39c17a0812129627e97ca555c7c7c2fb522e652e93d87d", - "0x00000000000000000000000000000000000000000000000000000000000033a6": "0x6ee6d365719c92cc9afda61739bfd3b511e8595d586bfdc43ceb0be1ac6baf68", - "0x0000000000000000000000000000000000000000000000000000000000001390": "0x00000000000000000000000000000000000000000000000000000000695d288d", - "0x0000000000000000000000000000000000000000000000000000000000003397": "0xe79e13e13c04cf6e8abb01924219b13a27e05cdfeab112b4b4c6483036555761", - "0x000000000000000000000000000000000000000000000000000000000000339e": "0x3b10387eb997ace2ad3534f636f6728d0ef8388d91b164c40fe8d554c88894a2", - "0x0000000000000000000000000000000000000000000000000000000000001392": "0x00000000000000000000000000000000000000000000000000000000695d288f", - "0x0000000000000000000000000000000000000000000000000000000000001389": "0x00000000000000000000000000000000000000000000000000000000695d2886", - "0x0000000000000000000000000000000000000000000000000000000000001398": "0x00000000000000000000000000000000000000000000000000000000695d2895", - "0x0000000000000000000000000000000000000000000000000000000000001395": "0x00000000000000000000000000000000000000000000000000000000695d2892", - "0x00000000000000000000000000000000000000000000000000000000000013a7": "0x00000000000000000000000000000000000000000000000000000000695d28a4", - "0x00000000000000000000000000000000000000000000000000000000000033ac": "0x91ddd5680bb7cb8287345885314d8c96df10f4ace33ffcdc4c2015be27daea89", - "0x00000000000000000000000000000000000000000000000000000000000033b6": "0x9297d6edf6804273289c56db1abe3cdd792e63643b7e9c527c5baad2a7c1d169", - "0x00000000000000000000000000000000000000000000000000000000000013a1": "0x00000000000000000000000000000000000000000000000000000000695d289e", - "0x00000000000000000000000000000000000000000000000000000000000033b5": "0x3b099a726dc074e0f1a080006d3cad02c9d6082ec09a32134c2c8b7e15580f44", - "0x00000000000000000000000000000000000000000000000000000000000013ab": "0x00000000000000000000000000000000000000000000000000000000695d28a8", - "0x00000000000000000000000000000000000000000000000000000000000013a4": "0x00000000000000000000000000000000000000000000000000000000695d28a1", - "0x0000000000000000000000000000000000000000000000000000000000003386": "0x0b585965c985ec3e044ea1487987e1623fdf62a9b00468691eb23d1680aa2e63", - "0x000000000000000000000000000000000000000000000000000000000000138a": "0x00000000000000000000000000000000000000000000000000000000695d2887", - "0x00000000000000000000000000000000000000000000000000000000000033a1": "0xf8c6e17a4295d4cd2511d73f074410948407b21ed78b9b19b4a64d811c235fba", - "0x000000000000000000000000000000000000000000000000000000000000337a": "0x18aa3c41844105e4ccaa445d60ab5c9295741266f5756ffac92b8d36de21f45a", - "0x000000000000000000000000000000000000000000000000000000000000338c": "0xc3f504670c807586f10a22f9c3015f7fb10ff919c93a2b12faa00b5f94fc64c6", - "0x00000000000000000000000000000000000000000000000000000000000013ad": "0x00000000000000000000000000000000000000000000000000000000695d28aa", - "0x000000000000000000000000000000000000000000000000000000000000337c": "0xeef30bf2f2d4a469019557ed1645dc1d0bb8bce8fee7c0b5fdda501dd132ded8", - "0x0000000000000000000000000000000000000000000000000000000000001396": "0x00000000000000000000000000000000000000000000000000000000695d2893", - "0x000000000000000000000000000000000000000000000000000000000000138b": "0x00000000000000000000000000000000000000000000000000000000695d2888", - "0x00000000000000000000000000000000000000000000000000000000000013a0": "0x00000000000000000000000000000000000000000000000000000000695d289d", - "0x0000000000000000000000000000000000000000000000000000000000003382": "0x80467d0b950243485a14e27aeeef9ca32b479cc036eb653b8eb5b3d2a9f3b6e1", - "0x000000000000000000000000000000000000000000000000000000000000338a": "0x62062446e65963203ad9da89dcb06d14a37983b98c403b4fe41f7860f2b05604", - "0x0000000000000000000000000000000000000000000000000000000000003391": "0x8328530eabf004f3815c87474b5330bd22b02a9221626639e01dd0d23fa8f9bc", - "0x0000000000000000000000000000000000000000000000000000000000003384": "0xc77b9c0dc5b8f359faf4903d8f780397af7a9e006b0a29033734c192ebd3ee32", - "0x00000000000000000000000000000000000000000000000000000000000033a0": "0xd67943c214f0ef1f955ab6afa3fed63024f3678371707b2802e9fb7d7d352a48", - "0x00000000000000000000000000000000000000000000000000000000000013b9": "0x00000000000000000000000000000000000000000000000000000000695d28b6", - "0x0000000000000000000000000000000000000000000000000000000000003393": "0x117402ea6770ffda244e7153c6920968ec6670704af8d2a6517e31e0cb6594fe", - "0x00000000000000000000000000000000000000000000000000000000000013b8": "0x00000000000000000000000000000000000000000000000000000000695d28b5", - "0x000000000000000000000000000000000000000000000000000000000000139f": "0x00000000000000000000000000000000000000000000000000000000695d289c", - "0x0000000000000000000000000000000000000000000000000000000000003380": "0x058ccbdf40998e2133514120e13d2a110d041648a9b0a29d1dca7c67ad823b42", - "0x00000000000000000000000000000000000000000000000000000000000033b7": "0xc4b13e2daf860a22f989e4ccce4c8bb33f27f52d858980c658566d4fa488dde8", - "0x000000000000000000000000000000000000000000000000000000000000339f": "0x7f1d3fae52f3e20d6c002d476c93adf9619a195f3eb00625d4fbe9f4593dcccf", - "0x00000000000000000000000000000000000000000000000000000000000013a3": "0x00000000000000000000000000000000000000000000000000000000695d28a0", - "0x0000000000000000000000000000000000000000000000000000000000003381": "0x3c9f7e2be8414d645631dc0a436511b49066fa5033e65f3e6fb24e71855aa8de", - "0x00000000000000000000000000000000000000000000000000000000000033b2": "0xc451520546f51de5a7a477e45de02b8b618b2db9f82e31b7204f20a5406d1be9", - "0x0000000000000000000000000000000000000000000000000000000000001384": "0x00000000000000000000000000000000000000000000000000000000695d2881", - "0x00000000000000000000000000000000000000000000000000000000000033af": "0x9a5fbf31a91f436f72d4998b4d6f049e8fd84f0954a5c39ab1ccdb223a11f9cc", - "0x00000000000000000000000000000000000000000000000000000000000013b2": "0x00000000000000000000000000000000000000000000000000000000695d28af", - "0x000000000000000000000000000000000000000000000000000000000000138c": "0x00000000000000000000000000000000000000000000000000000000695d2889", - "0x0000000000000000000000000000000000000000000000000000000000001394": "0x00000000000000000000000000000000000000000000000000000000695d2891", - "0x000000000000000000000000000000000000000000000000000000000000139d": "0x00000000000000000000000000000000000000000000000000000000695d289a", - "0x0000000000000000000000000000000000000000000000000000000000001388": "0x00000000000000000000000000000000000000000000000000000000695d2885", - "0x00000000000000000000000000000000000000000000000000000000000013a6": "0x00000000000000000000000000000000000000000000000000000000695d28a3", - "0x0000000000000000000000000000000000000000000000000000000000003398": "0x92b9729f3fe436ae778e99a78eedb4394094e6fbbb4077c104da7ef9886fb111", - "0x00000000000000000000000000000000000000000000000000000000000033ae": "0x4fea9b7e9b44d8b0cf09a950772a3165ae28f15fe0edda4a6ea8eff9634a4b37", - "0x000000000000000000000000000000000000000000000000000000000000139e": "0x00000000000000000000000000000000000000000000000000000000695d289b", - "0x0000000000000000000000000000000000000000000000000000000000003399": "0x1bffce3aa67665598c4d795a85441f0ba1dec1cd7824ac6010d96acdce448d56", - "0x000000000000000000000000000000000000000000000000000000000000338b": "0xed4f5b2b22dd88643efcff1b01e5d8c5798a107c4b5b0b895a43fb5081be6133", - "0x00000000000000000000000000000000000000000000000000000000000013aa": "0x00000000000000000000000000000000000000000000000000000000695d28a7", - "0x00000000000000000000000000000000000000000000000000000000000013b7": "0x00000000000000000000000000000000000000000000000000000000695d28b4", - "0x0000000000000000000000000000000000000000000000000000000000003396": "0xc6ebe904bfaa9f3ee0eb7e529d8bdd6f56bd75bb44bae217c9bdbefd747c9c44", - "0x00000000000000000000000000000000000000000000000000000000000033a2": "0xf55a17d42fdd627efd1655647b097ccef1089c3a5f5e20fb4b48cd7dff0a880d", - "0x00000000000000000000000000000000000000000000000000000000000033b0": "0x3d558beb5d2b46b020abda368f4ebe167a6e0f7152b7bc82c4a550423c09e61a", - "0x000000000000000000000000000000000000000000000000000000000000139a": "0x00000000000000000000000000000000000000000000000000000000695d2897", - "0x0000000000000000000000000000000000000000000000000000000000001399": "0x00000000000000000000000000000000000000000000000000000000695d2896", - "0x00000000000000000000000000000000000000000000000000000000000013b6": "0x00000000000000000000000000000000000000000000000000000000695d28b3", - "0x00000000000000000000000000000000000000000000000000000000000033a3": "0x601ff34f401164550a43969b51c1cd0530923426d211d0c986b2e01dc9c5e429", - "0x00000000000000000000000000000000000000000000000000000000000013bc": "0x00000000000000000000000000000000000000000000000000000000695d28b9", - "0x00000000000000000000000000000000000000000000000000000000000033b4": "0xf223dab334235b9c78f3978a49b6221a85356d90a972731716233155eb0f517c", - "0x000000000000000000000000000000000000000000000000000000000000137c": "0x00000000000000000000000000000000000000000000000000000000695d2879", - "0x00000000000000000000000000000000000000000000000000000000000013ba": "0x00000000000000000000000000000000000000000000000000000000695d28b7", - "0x000000000000000000000000000000000000000000000000000000000000137f": "0x00000000000000000000000000000000000000000000000000000000695d287c", - "0x0000000000000000000000000000000000000000000000000000000000001385": "0x00000000000000000000000000000000000000000000000000000000695d2882", - "0x0000000000000000000000000000000000000000000000000000000000001393": "0x00000000000000000000000000000000000000000000000000000000695d2890", - "0x000000000000000000000000000000000000000000000000000000000000138e": "0x00000000000000000000000000000000000000000000000000000000695d288b", - "0x0000000000000000000000000000000000000000000000000000000000003388": "0x112c773bc9cb7b14268989e4758e98271ed9c77793ad8e661f3f9b6d2d5791ea", - "0x00000000000000000000000000000000000000000000000000000000000033a5": "0x1e62f56c25458cbd7ae9bfcbafd25a434d59e40c0d5959e756dd4b9703ac31bd", - "0x00000000000000000000000000000000000000000000000000000000000033bb": "0x2fb5508b6bdd0e2794f81aa8124362f653d957544c358db133e00f4cdc4113de", - "0x00000000000000000000000000000000000000000000000000000000000033a7": "0x69301d663f3fe2a575b7177fcf66e696597a23322b8ae9771435d6c1d668b55a" + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000004a679253410272dd5232b3ff7cf5dbb88f295319" } }, "33": { @@ -212,70 +548,62 @@ "storage": { "0xedc9a600799bdec0e14ee5042ef794e1b4738abf52d225059d6b470373867218": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000a85233c63b9ee964add6f2cffe00fd84eb32338f", - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc" - } - }, - "26": { - "address": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000004a679253410272dd5232b3ff7cf5dbb88f295319", + "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0x0000000000000000000000000000000000000000000000000000000000000001", "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" } }, - "8": { + "10": { + "address": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", + "code": "0x608060405260043610610079575f3560e01c80639623609d1161004c5780639623609d1461010957806399a88ec41461011c578063f2fde38b1461013b578063f3b7dead1461015a575f5ffd5b8063204e1c7a1461007d578063715018a6146100b85780637eff275e146100ce5780638da5cb5b146100ed575b5f5ffd5b348015610088575f5ffd5b5061009c610097366004610479565b610179565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c3575f5ffd5b506100cc610204565b005b3480156100d9575f5ffd5b506100cc6100e836600461049b565b610217565b3480156100f8575f5ffd5b505f546001600160a01b031661009c565b6100cc6101173660046104e6565b61027a565b348015610127575f5ffd5b506100cc61013636600461049b565b6102e5565b348015610146575f5ffd5b506100cc610155366004610479565b61031b565b348015610165575f5ffd5b5061009c610174366004610479565b610399565b5f5f5f836001600160a01b031660405161019d90635c60da1b60e01b815260040190565b5f60405180830381855afa9150503d805f81146101d5576040519150601f19603f3d011682016040523d82523d5f602084013e6101da565b606091505b5091509150816101e8575f5ffd5b808060200190518101906101fc91906105bd565b949350505050565b61020c6103bd565b6102155f610416565b565b61021f6103bd565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b5f604051808303815f87803b158015610260575f5ffd5b505af1158015610272573d5f5f3e3d5ffd5b505050505050565b6102826103bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102b290869086906004016105d8565b5f604051808303818588803b1580156102c9575f5ffd5b505af11580156102db573d5f5f3e3d5ffd5b5050505050505050565b6102ed6103bd565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe690602401610249565b6103236103bd565b6001600160a01b03811661038d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61039681610416565b50565b5f5f5f836001600160a01b031660405161019d906303e1469160e61b815260040190565b5f546001600160a01b031633146102155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114610396575f5ffd5b5f60208284031215610489575f5ffd5b813561049481610465565b9392505050565b5f5f604083850312156104ac575f5ffd5b82356104b781610465565b915060208301356104c781610465565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156104f8575f5ffd5b833561050381610465565b9250602084013561051381610465565b9150604084013567ffffffffffffffff81111561052e575f5ffd5b8401601f8101861361053e575f5ffd5b803567ffffffffffffffff811115610558576105586104d2565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610587576105876104d2565b60405281815282820160200188101561059e575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f602082840312156105cd575f5ffd5b815161049481610465565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f830116840101915050939250505056fea2646970667358221220cacf7e866443a3c2d9e85812b68958e3d7d01c8ba8e3d67bcb64df53180e1d8164736f6c634300081c0033000000000000000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65" + } + }, + "3": { + "address": "0xdf077F5F72071dF6e8B0a78071E496bA17b5Ee0c", + "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b7981565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea2646970667358221220c0cb81d4a21d0eba005b3a8e586341c26034d8b6f4bc7492f673795b56a1044c64736f6c634300081c00330000", + "storage": {} + }, + "22": { + "address": "0xac06641381166cf085281c45292147f833C622d7", + "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea2646970667358221220c0cb81d4a21d0eba005b3a8e586341c26034d8b6f4bc7492f673795b56a1044c64736f6c634300081c00330000", + "storage": {} + }, + "23": { + "address": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", + "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c8063a1060c88116100bf578063dce974b911610079578063dce974b914610334578063df5cf7231461035b578063ec76f44214610382578063f2fde38b146103b5578063f698da25146103c8578063fabc1cbc146103d0575f5ffd5b8063a1060c881461029a578063a364f4da146102ad578063a98fb355146102c0578063c825fe68146102d3578063cd6dc687146102fa578063d79aceab1461030d575f5ffd5b80635ac86ab7116101105780635ac86ab7146101fa5780635c975abb1461021d578063715018a61461022f578063886f1195146102375780638da5cb5b146102765780639926ee7d14610287575f5ffd5b8063136439dd1461014c578063374823b51461016157806349075da3146101a357806354fd4d50146101dd578063595c6a67146101f2575b5f5ffd5b61015f61015a3660046110dc565b6103e3565b005b61018e61016f366004611107565b609960209081525f928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b6101d06101b1366004611131565b609860209081525f928352604080842090915290825290205460ff1681565b60405161019a919061117c565b6101e561041d565b60405161019a91906111d0565b61015f61044d565b61018e6102083660046111e9565b606654600160ff9092169190911b9081161490565b6066545b60405190815260200161019a565b61015f610461565b61025e7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b03909116815260200161019a565b6033546001600160a01b031661025e565b61015f610295366004611277565b610472565b6102216102a8366004611364565b610673565b61015f6102bb3660046113a7565b6106f2565b61015f6102ce3660046113c2565b6107b9565b6102217f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61015f610308366004611107565b610800565b6102217fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102217f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b61025e7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b61015f6103903660046110dc565b335f90815260996020908152604080832093835292905220805460ff19166001179055565b61015f6103c33660046113a7565b61091c565b610221610995565b61015f6103de3660046110dc565b610a4e565b6103eb610ab4565b60665481811681146104105760405163c61dca5d60e01b815260040160405180910390fd5b61041982610b57565b5050565b60606104487f76312e302e300000000000000000000000000000000000000000000000000006610b94565b905090565b610455610ab4565b61045f5f19610b57565b565b610469610bd1565b61045f5f610c2b565b5f61047c81610c7c565b6001335f9081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156104b5576104b5611168565b036104d357604051631aa528bb60e11b815260040160405180910390fd5b6001600160a01b0383165f90815260996020908152604080832085830151845290915290205460ff161561051a57604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa15801561057e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a29190611430565b6105bf57604051639f88c8af60e01b815260040160405180910390fd5b6105e3836105d7853386602001518760400151610673565b84516040860151610ca7565b6001600160a01b0383165f81815260996020908152604080832086830151845282528083208054600160ff19918216811790925533808652609885528386208787529094529382902080549094168117909355519092917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610666919061117c565b60405180910390a3505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f906106e99060c00160405160208183030381529060405280519060200120610cff565b95945050505050565b5f6106fc81610c7c565b6001335f9081526098602090815260408083206001600160a01b038716845290915290205460ff16600181111561073557610735611168565b14610753576040516352df45c960e01b815260040160405180910390fd5b335f8181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916107ad919061117c565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371383836040516107f492919061144f565b60405180910390a25050565b5f54610100900460ff161580801561081e57505f54600160ff909116105b806108375750303b15801561083757505f5460ff166001145b61089f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156108c0575f805461ff0019166101001790555b6108c982610b57565b6108d283610c2b565b8015610917575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610924610bd1565b6001600160a01b0381166109895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b61099281610c2b565b50565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea610a02610d45565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610a56610dba565b60665480198219811614610a7d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107f4565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190611430565b61045f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b60605f610ba083610e6b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b0316331461045f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610896565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606654600160ff83161b908116036109925760405163840a48d560e01b815260040160405180910390fd5b42811015610cc857604051630819bdcd60e01b815260040160405180910390fd5b610cdc6001600160a01b0385168484610e98565b610cf957604051638baa579f60e01b815260040160405180910390fd5b50505050565b5f610d08610995565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f610d717f76312e302e300000000000000000000000000000000000000000000000000006610b94565b9050805f81518110610d8557610d8561147d565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3a9190611491565b6001600160a01b0316336001600160a01b03161461045f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610e9257604051632cd44ac360e21b815260040160405180910390fd5b92915050565b5f5f5f610ea58585610ef6565b90925090505f816004811115610ebd57610ebd611168565b148015610edb5750856001600160a01b0316826001600160a01b0316145b80610eec5750610eec868686610f38565b9695505050505050565b5f5f8251604103610f2a576020830151604084015160608501515f1a610f1e8782858561101f565b94509450505050610f31565b505f905060025b9250929050565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401610f609291906114ac565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f9e91906114cc565b5f60405180830381855afa9150503d805f8114610fd6576040519150601f19603f3d011682016040523d82523d5f602084013e610fdb565b606091505b5091509150818015610fef57506020815110155b8015610eec57508051630b135d3f60e11b9061101490830160209081019084016114e2565b149695505050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561105457505f905060036110d3565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156110a5573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166110cd575f600192509250506110d3565b91505f90505b94509492505050565b5f602082840312156110ec575f5ffd5b5035919050565b6001600160a01b0381168114610992575f5ffd5b5f5f60408385031215611118575f5ffd5b8235611123816110f3565b946020939093013593505050565b5f5f60408385031215611142575f5ffd5b823561114d816110f3565b9150602083013561115d816110f3565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061119c57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111e260208301846111a2565b9392505050565b5f602082840312156111f9575f5ffd5b813560ff811681146111e2575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561124057611240611209565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561126f5761126f611209565b604052919050565b5f5f60408385031215611288575f5ffd5b8235611293816110f3565b9150602083013567ffffffffffffffff8111156112ae575f5ffd5b8301606081860312156112bf575f5ffd5b6112c761121d565b813567ffffffffffffffff8111156112dd575f5ffd5b8201601f810187136112ed575f5ffd5b803567ffffffffffffffff81111561130757611307611209565b61131a601f8201601f1916602001611246565b81815288602083850101111561132e575f5ffd5b816020840160208301375f6020928201830152835283810135908301525060409182013591810191909152919491935090915050565b5f5f5f5f60808587031215611377575f5ffd5b8435611382816110f3565b93506020850135611392816110f3565b93969395505050506040820135916060013590565b5f602082840312156113b7575f5ffd5b81356111e2816110f3565b5f5f602083850312156113d3575f5ffd5b823567ffffffffffffffff8111156113e9575f5ffd5b8301601f810185136113f9575f5ffd5b803567ffffffffffffffff81111561140f575f5ffd5b856020828401011115611420575f5ffd5b6020919091019590945092505050565b5f60208284031215611440575f5ffd5b815180151581146111e2575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156114a1575f5ffd5b81516111e2816110f3565b828152604060208201525f6114c460408301846111a2565b949350505050565b5f82518060208501845e5f920191825250919050565b5f602082840312156114f2575f5ffd5b505191905056fea26469706673582212209dd9302aebda5bede3ce8ea07bceb8585e18de0b68227e2cdee1edd383b22cb564736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "7": { "address": "0x9d4454B023096f34B160D6B654540c56A1F81688", "code": "0x608060405260043610610021575f3560e01c8063439fab911461008a5761003f565b3661003f5760405163858d70bd60e01b815260040160405180910390fd5b5f6100687f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050365f5f375f5f365f845af43d5f5f3e808015610084573d5ff35b3d5ffd5b005b348015610095575f5ffd5b506100886100a43660046100bc565b6040516282b42960e81b815260040160405180910390fd5b5f5f602083850312156100cd575f5ffd5b823567ffffffffffffffff8111156100e3575f5ffd5b8301601f810185136100f3575f5ffd5b803567ffffffffffffffff811115610109575f5ffd5b85602082840101111561011a575f5ffd5b602091909101959094509250505056fea2646970667358221220ed4a5fba02ef24e1d515dabea678db17a950936d247811facfe128aca7a449ca64736f6c634300081c003300", "storage": { - "0x91839d9989408fbab863f2059ae80fee5216f58ec04fa3bffb021275bf7d4f24": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", - "0x173ec3ea915b0ecad49b752ec145e745446de67d464520dc696504b3980fccda": "0x000000000000000000000000ac06641381166cf085281c45292147f833c622d7", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230": "0x0000000000000000000000000000000100000000000000000000000000000001", - "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x6bd2118f0148c813209325d23233ce0b7f1042ab160c97a1c605fdedff377204": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", + "0x24c230e7f96dea56c14d16c737ac85f999d444fd74b5f3f00170ca4640c77b8f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c233": "0x0000000000000000000000000000000000000000000000000000000000000112", - "0xdf92d0c198eb2c08351629e12172b863967bc505b5d2fa9fdf58f7b97e45495f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", + "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f8": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x173ec3ea915b0ecad49b752ec145e745446de67d464520dc696504b3980fccda": "0x000000000000000000000000ac06641381166cf085281c45292147f833c622d7", "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c231": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x626b8e6b0a06114fed7a662a5b224ce123b32b155eef2616324caf5d9adeb4fa": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf", + "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x6bd2118f0148c813209325d23233ce0b7f1042ab160c97a1c605fdedff377204": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", "0x8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x24c230e7f96dea56c14d16c737ac85f999d444fd74b5f3f00170ca4640c77b8f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", - "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f8": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f": "0x0000000000000000000003e8df077f5f72071df6e8b0a78071e496ba17b5ee0c" - } - }, - "16": { - "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", - "code": "0x73e7f1725e7734ce288f8367e1bb143e90bb3f0512301460806040526004361061009b575f3560e01c80632a6c32291161006e5780632a6c322914610191578063805ce31d146101c5578063928bc49d146101db57806399056fcc146101ee578063fe61cc491461020d575f5ffd5b80630705f4651461009f57806309824a80146100c85780630b617646146100e957806326aa101f1461014a575b5f5ffd5b6100b26100ad366004611fdf565b61026c565b6040516100bf919061200a565b60405180910390f35b8180156100d3575f5ffd5b506100e76100e236600461203a565b610282565b005b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6547f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f754604080519283526001600160801b039091166020830152016100bf565b61018161015836600461203a565b6001600160a01b03165f9081525f5160206125e85f395f51905f52602052604090205460ff1690565b60405190151581526020016100bf565b6101a461019f366004611fdf565b61033b565b6040805167ffffffffffffffff9384168152929091166020830152016100bf565b6101cd61036a565b6040519081526020016100bf565b6101cd6101e936600461207c565b610380565b8180156101f9575f5ffd5b506100e76102083660046120bc565b6103e0565b61025461021b366004611fdf565b5f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016100bf565b5f5f61027783610494565b5460ff169392505050565b5f5160206125e85f395f51905f52610299826104ef565b60408051608081019091526001820154600160a01b900463ffffffff1681525f90602081016102c6610586565b815260028401546020909101906102e79086906001600160801b03166105e7565b81525f6020918201526040516001600160a01b03861681529192507ff78bb28d4b1d7da699e5c0bc2be29c2b04b5aab6aacf6298fe5304f9db9c6d7e910160405180910390a161033681610632565b505050565b5f5f5f61034784610494565b5467ffffffffffffffff6101008204811696600160481b90920416945092505050565b5f61037b610376610586565b610836565b905090565b6001600160a01b0383165f9081525f5160206125e85f395f51905f52602081905260408220805460ff166103c75760405163259ba1ad60e01b815260040160405180910390fd5b6103d461037686866108c7565b925050505b9392505050565b5f5160206125e85f395f51905f526001600160801b0382165f036104175760405163162908e360e11b815260040160405180910390fd5b6001600160a01b0387165f908152602082905260409020805460ff166104505760405163259ba1ad60e01b815260040160405180910390fd5b60018101546104745761046f61046a8989898989896109ae565b610632565b61048a565b61048a61046a82600101548a8a8a8a8a8a610b97565b5050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b03166104ea57604051636ddd9da960e01b815260040160405180910390fd5b919050565b610501816001600160a01b0316610cf9565b61051e5760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081525f5160206125e85f395f51905f5260208190526040909120805460ff168015610559575061055981610d3f565b1561057757604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b604080518082019091527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230546001600160801b031681527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23154602082015290565b60605f6105f346610d53565b5f6105fd86610dbc565b61060686610ded565b60405160200161061a959493929190612161565b60405160208183030381529060405290505b92915050565b805160408051637061726160e01b60208083019190915260e09390931b6001600160e01b031916602482015281516008818303018152602890910190915280519101205f61067f82610494565b905061068a81610e8c565b5f6106988460200151610836565b90505f84606001516001600160801b0316826106b491906121c4565b9050803410156106d757604051631c0b171360e31b815260040160405180910390fd5b60608501516001600160801b0316156107225761072285606001516001600160801b031661070f5f5160206125e85f395f51905f5290565b600101546001600160a01b031690610f08565b825461074090600160481b900467ffffffffffffffff1660016121d7565b835467ffffffffffffffff91909116600160481b0270ffffffffffffffff000000000000000000199091161783555f61077982346121f7565b9050610783610f31565b811115610794576107943382610f08565b83546040805160208101889052600160481b90920460c01b6001600160c01b031916908201525f9060480160405160208183030381529060405280519060200120905080867f7153f9357c8ea496bba60bf82e67143e27b64462b49041f8e689e1b05728f84f875f0160099054906101000a900467ffffffffffffffff168a6040015160405161082592919061220a565b60405180910390a350505050505050565b80517f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7545f917f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f691839161089c9161089791906001600160801b03166121c4565b610f3e565b90506108b0825f0154836002015483610f88565b84602001516108bf91906121c4565b949350505050565b604080518082019091525f80825260208201527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f545f5160206125e85f395f51905f5290600160a01b900463ffffffff9081169085160361093e576002810154600160801b90046001600160801b031682526109a1565b60058101546001600160801b0361010090910481169084161115610975576040516332ee86af60e11b815260040160405180910390fd5b6002810154610995908490600160801b90046001600160801b0316612250565b6001600160801b031682525b505f602082015292915050565b6109b6611f9a565b5f5160206125e85f395f51905f526001600160a01b038816156109f85760018101546109ed906001600160a01b031689898661100d565b5f6060830152610a08565b6001600160801b03831660608301525b6001810154600160a01b900463ffffffff168252610a2686856108c7565b6020830152600181015463ffffffff808816600160a01b9092041603610a9f57610a4f85611089565b15610a8657610a7c88610a61876110b2565b6002840154600160801b90046001600160801b0316866110c9565b6040830152610b38565b604051634851657960e11b815260040160405180910390fd5b836001600160801b03165f03610ac8576040516332ee86af60e11b815260040160405180910390fd5b610ad185611089565b15610b0057610a7c8887610ae4886110b2565b6002850154600160801b90046001600160801b03168888611127565b610b09856111ba565b15610a8657610a7c8887610b1c886111c2565b6002850154600160801b90046001600160801b031688886111d9565b8563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610b8492919061227d565b60405180910390a4509695505050505050565b610b9f611f9a565b5f5f5160206125e85f395f51905f52604051632770a7eb60e21b81526001600160a01b0389811660048301526001600160801b038616602483015291925090891690639dc29fac906044015f604051808303815f87803b158015610c01575f5ffd5b505af1158015610c13573d5f5f3e3d5ffd5b505050506001810154600160a01b900463ffffffff168252610c3586856108c7565b60208301525f6060830152600181015463ffffffff808816600160a01b90920416148015610c675750610c6785611089565b15610a8657610c9489610c79876110b2565b6002840154600160801b90046001600160801b031686611251565b60408301528563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610ce592919061227d565b60405180910390a450979650505050505050565b5f6001600160a01b0382163f1580159061062c5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f610d4c82600101541590565b1592915050565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051606082811b6001600160601b0319166020830152906034016040516020818303038152906040529050919050565b6eff000000ff000000ff000000ff0000600882811c9182166fff000000ff000000ff000000ff0000009390911b92831617601090811c6cff000000ff000000ff000000ff929092166dff000000ff000000ff000000ff00939093169290921790911b17602081811c6bffffffff00000000ffffffff166fffffffff00000000ffffffff000000009290911b9190911617604081811c91901b1760801b90565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff166001811115610ec457610ec4611ff6565b141580610ee657505f825460ff166001811115610ee357610ee3611ff6565b14155b15610f0457604051633ac4266d60e11b815260040160405180910390fd5b5050565b5f5f5f5f5f85875af190508061033657604051633d2cec6f60e21b815260040160405180910390fd5b5f61037b3a615208612323565b5f610f52670de0b6b3a76400005f1961234e565b821115610f7a57604051631cd951a760e01b8152600481018390526024015b60405180910390fd5b50670de0b6b3a76400000290565b5f5f5160206125e85f395f51905f5281610fa9670de0b6b3a7640000610f3e565b60058301549091505f90610fd390610fc39060ff16610f3e565b610fcd600a610f3e565b906112dd565b90505f610ff683610fea84610ff08c838d8d6113ed565b906113ed565b906113fb565b905061100181611412565b98975050505050505050565b61101f836001600160a01b0316610cf9565b61103c5760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036110655760405163162908e360e11b815260040160405180910390fd5b6110836001600160a01b03841683866001600160801b038516611425565b50505050565b5f60015b61109a602084018461236d565b60028111156110ab576110ab611ff6565b1492915050565b5f6110c06020830183612386565b61062c916123d0565b60605f6110d546610d53565b600160f81b6110e388610dbc565b5f886110ee88610ded565b6110f78a610ded565b60405160200161110e9897969594939291906123ed565b6040516020818303038152906040529050949350505050565b60605f61113346610d53565b600160f81b6111418a610dbc565b600160f81b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6111748a610ded565b61117d8a610ded565b6111868d610ded565b60405160200161119f9a9998979695949392919061245b565b60405160208183030381529060405290509695505050505050565b5f600261108d565b5f6111d06020830183612386565b61062c916124e3565b60605f6111e546610d53565b600160f81b6111f38a610dbc565b600160f91b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6112268a610ded565b61122f8a610ded565b6112388d610ded565b60405160200161119f9a9998979695949392919061252b565b60605f61125d46610d53565b600160f91b875f8861126e88610ded565b6112778a610ded565b6040516001600160f81b031998891660208201526001600160c01b031990971660218801529487166029870152602a8601939093529416604a840152604b8301939093526001600160801b0319928316606b83015291909116607b820152608b0161110e565b5f82828183036113065780156112f3575f6112fd565b670de0b6b3a76400005b9250505061062c565b670de0b6b3a7640000820361132757670de0b6b3a76400009250505061062c565b805f0361134057670de0b6b3a76400009250505061062c565b670de0b6b3a7640000810361135957849250505061062c565b670de0b6b3a764000082111561138a5761138361137e6113788761147e565b866113ed565b6115a6565b92506113e5565b5f6113aa6113a7846ec097ce7bc90715b34b9f100000000061234e565b90565b90505f6113c261137e6113bc8461147e565b886113ed565b90506113e06113a7826ec097ce7bc90715b34b9f100000000061234e565b945050505b505092915050565b5f6103d96113a784846115fa565b5f6103d96113a784670de0b6b3a7640000856116ac565b5f61062c670de0b6b3a76400008361234e565b6040516001600160a01b038085166024830152831660448201526064810182905261108390859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b17905261177b565b5f81670de0b6b3a76400008110156114ac5760405163036d32ef60e41b815260048101849052602401610f71565b5f61152e670de0b6b3a7640000830460016001600160801b03821160071b91821c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211871b91821c969096119490961792909217171791909117919091171790565b9050670de0b6b3a7640000810282821c670de0b6b3a763ffff1981016115575750949350505050565b671bc16d674ec800006706f05b59d3b200005b801561159a57670de0b6b3a7640000838002049250818310611592579283019260019290921c915b60011c61156a565b50919695505050505050565b5f81680a688906bd8affffff8111156115d55760405163b3b6ba1f60e01b815260048101849052602401610f71565b5f6115ec670de0b6b3a7640000604084901b61234e565b90506108bf6113a78261183a565b5f80805f19848609848602925082811083820303915050805f0361162b5750670de0b6b3a76400009004905061062c565b670de0b6b3a7640000811061165d57604051635173648d60e01b81526004810186905260248101859052604401610f71565b5f670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b5f80805f19858709858702925082811083820303915050805f036116e3578382816116d9576116d961233a565b04925050506103d9565b83811061171457604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610f71565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f836001600160a01b03168360405161179591906125bd565b5f604051808303815f865af19150503d805f81146117ce576040519150601f19603f3d011682016040523d82523d5f602084013e6117d3565b606091505b50915091505f8280156117fe5750815115806117fe5750818060200190518101906117fe91906125c8565b905080158061181557506001600160a01b0385163b155b156118335760405163022e258160e11b815260040160405180910390fd5b5050505050565b600160bf1b67ff000000000000008216156119475767800000000000000082161561186e5768016a09e667f3bcc9090260401c5b67400000000000000082161561188d576801306fe0a31b7152df0260401c5b6720000000000000008216156118ac576801172b83c7d517adce0260401c5b6710000000000000008216156118cb5768010b5586cf9890f62a0260401c5b6708000000000000008216156118ea576801059b0d31585743ae0260401c5b67040000000000000082161561190957680102c9a3e778060ee70260401c5b6702000000000000008216156119285768010163da9fb33356d80260401c5b67010000000000000082161561194757680100b1afa5abcbed610260401c5b66ff000000000000821615611a465766800000000000008216156119745768010058c86da1c09ea20260401c5b6640000000000000821615611992576801002c605e2e8cec500260401c5b66200000000000008216156119b057680100162f3904051fa10260401c5b66100000000000008216156119ce576801000b175effdc76ba0260401c5b66080000000000008216156119ec57680100058ba01fb9f96d0260401c5b6604000000000000821615611a0a5768010002c5cc37da94920260401c5b6602000000000000821615611a28576801000162e525ee05470260401c5b6601000000000000821615611a465768010000b17255775c040260401c5b65ff0000000000821615611b3c5765800000000000821615611a71576801000058b91b5bc9ae0260401c5b65400000000000821615611a8e57680100002c5c89d5ec6d0260401c5b65200000000000821615611aab5768010000162e43f4f8310260401c5b65100000000000821615611ac857680100000b1721bcfc9a0260401c5b65080000000000821615611ae55768010000058b90cf1e6e0260401c5b65040000000000821615611b02576801000002c5c863b73f0260401c5b65020000000000821615611b1f57680100000162e430e5a20260401c5b65010000000000821615611b3c576801000000b1721835510260401c5b64ff00000000821615611c2957648000000000821615611b6557680100000058b90c0b490260401c5b644000000000821615611b815768010000002c5c8601cc0260401c5b642000000000821615611b9d576801000000162e42fff00260401c5b641000000000821615611bb95768010000000b17217fbb0260401c5b640800000000821615611bd5576801000000058b90bfce0260401c5b640400000000821615611bf157680100000002c5c85fe30260401c5b640200000000821615611c0d5768010000000162e42ff10260401c5b640100000000821615611c2957680100000000b17217f80260401c5b63ff000000821615611d0d576380000000821615611c505768010000000058b90bfc0260401c5b6340000000821615611c6b576801000000002c5c85fe0260401c5b6320000000821615611c8657680100000000162e42ff0260401c5b6310000000821615611ca1576801000000000b17217f0260401c5b6308000000821615611cbc57680100000000058b90c00260401c5b6304000000821615611cd75768010000000002c5c8600260401c5b6302000000821615611cf2576801000000000162e4300260401c5b6301000000821615611d0d5768010000000000b172180260401c5b62ff0000821615611de85762800000821615611d32576801000000000058b90c0260401c5b62400000821615611d4c57680100000000002c5c860260401c5b62200000821615611d665768010000000000162e430260401c5b62100000821615611d8057680100000000000b17210260401c5b62080000821615611d9a5768010000000000058b910260401c5b62040000821615611db4576801000000000002c5c80260401c5b62020000821615611dce57680100000000000162e40260401c5b62010000821615611de8576801000000000000b1720260401c5b61ff00821615611eba57618000821615611e0b57680100000000000058b90260401c5b614000821615611e245768010000000000002c5d0260401c5b612000821615611e3d576801000000000000162e0260401c5b611000821615611e565768010000000000000b170260401c5b610800821615611e6f576801000000000000058c0260401c5b610400821615611e8857680100000000000002c60260401c5b610200821615611ea157680100000000000001630260401c5b610100821615611eba57680100000000000000b10260401c5b60ff821615611f83576080821615611edb57680100000000000000590260401c5b6040821615611ef3576801000000000000002c0260401c5b6020821615611f0b57680100000000000000160260401c5b6010821615611f23576801000000000000000b0260401c5b6008821615611f3b57680100000000000000060260401c5b6004821615611f5357680100000000000000030260401c5b6002821615611f6b57680100000000000000010260401c5b6001821615611f8357680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60405180608001604052805f63ffffffff168152602001611fcc60405180604001604052805f81526020015f81525090565b8152606060208201525f60409091015290565b5f60208284031215611fef575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061201e5761201e611ff6565b91905290565b80356001600160a01b03811681146104ea575f5ffd5b5f6020828403121561204a575f5ffd5b6103d982612024565b803563ffffffff811681146104ea575f5ffd5b80356001600160801b03811681146104ea575f5ffd5b5f5f5f6060848603121561208e575f5ffd5b61209784612024565b92506120a560208501612053565b91506120b360408501612066565b90509250925092565b5f5f5f5f5f5f60c087890312156120d1575f5ffd5b6120da87612024565b95506120e860208801612024565b94506120f660408801612053565b9350606087013567ffffffffffffffff811115612111575f5ffd5b87016040818a031215612122575f5ffd5b925061213060808801612066565b915061213e60a08801612066565b90509295509295509295565b5f81518060208401855e5f93019283525090919050565b6001600160f81b031986811682526001600160c01b031986166001830152841660098201525f612194600a83018561214a565b6001600160801b03199390931683525050601001949350505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561062c5761062c6121b0565b67ffffffffffffffff818116838216019081111561062c5761062c6121b0565b8181038181111561062c5761062c6121b0565b67ffffffffffffffff83168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b6001600160801b03818116838216019081111561062c5761062c6121b0565b8035600381106104ea575f5ffd5b604081525f61228b8461226f565b6003811061229b5761229b611ff6565b6040830152602084013536859003601e190181126122b7575f5ffd5b840160208101903567ffffffffffffffff8111156122d3575f5ffd5b8036038213156122e1575f5ffd5b60406060850152806080850152808260a08601375f60a0828601015260a0601f19601f830116850101925050506103d960208301846001600160801b03169052565b808202811582820484141761062c5761062c6121b0565b634e487b7160e01b5f52601260045260245ffd5b5f8261236857634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561237d575f5ffd5b6103d98261226f565b5f5f8335601e1984360301811261239b575f5ffd5b83018035915067ffffffffffffffff8211156123b5575f5ffd5b6020019150368190038213156123c9575f5ffd5b9250929050565b8035602083101561062c575f19602084900360031b1b1692915050565b6001600160f81b031989811682526001600160c01b031989166001830152871660098201525f612420600a83018861214a565b6001600160f81b0319969096168652505060018401929092526001600160801b03199081166021840152166031820152604101949350505050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61248e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b031994909416600186015260058501929092526001600160801b031990811660258501529081166035840152166045820152605501949350505050565b80356001600160601b03198116906014841015612524576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61255e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b03199490941660018601526001600160601b03199290921660058501526001600160801b031990811660198501529081166029840152166039820152604901949350505050565b5f6103d9828461214a565b5f602082840312156125d8575f5ffd5b815180151581146103d9575f5ffdfe8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22ea264697066735822122047ead480ec5464b4366963197a8a448d55497c4257973ecf20b3f47a24f14e4a64736f6c634300081c003300", - "storage": {} - }, - "12": { - "address": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44", - "code": "0x608060405234801561000f575f5ffd5b50600436106102b1575f3560e01c80636d70f7ae1161017b578063bb45fef2116100e4578063e4cc3f901161009e578063f698da2511610079578063f698da25146107ce578063fabc1cbc146107d6578063fd8aa88d146107e9578063fe4b84df146107fc575f5ffd5b8063e4cc3f9014610788578063eea9064b1461079b578063f0e0e676146107ae575f5ffd5b8063bb45fef2146106b9578063bfae3fd2146106e6578063c448feb8146106f9578063c978f7ac1461072d578063ca8aa7c71461074e578063da8be86414610775575f5ffd5b80639104c319116101355780639104c319146106175780639435bb431461063257806399f5371b14610645578063a178848414610665578063a33a343314610684578063b7f06ebe14610697575f5ffd5b80636d70f7ae1461057a5780636e1744481461058d578063778e55f3146105a057806378296ec5146105ca578063886f1195146105dd5780639004134714610604575f5ffd5b806354b7c96c1161021d5780635c975abb116101d75780635c975abb146104d45780635d975e88146104dc5780635dd68579146104fd57806360a0d1ce1461051e57806365da12641461053157806366d5ba9314610559575f5ffd5b806354b7c96c1461045b57806354fd4d501461046e578063595c6a6714610483578063597b36da1461048b5780635ac86ab71461049e5780635ae679a7146104c1575f5ffd5b806339b70e381161026e57806339b70e381461036a5780633c651cf2146103a95780633cdeb5e0146103bc5780633e28391d146103ea5780634657e26a1461040d5780634665bcda14610434575f5ffd5b806304a4f979146102b55780630b9f487a146102ef5780630dd8dd0214610302578063136439dd1461032257806325df922e146103375780632aa6d88814610357575b5f5ffd5b6102dc7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6040519081526020015b60405180910390f35b6102dc6102fd366004614a7f565b61080f565b610315610310366004614b16565b610897565b6040516102e69190614b54565b610335610330366004614b8b565b610b09565b005b61034a610345366004614d20565b610b43565b6040516102e69190614dce565b610335610365366004614e30565b610ca3565b6103917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6040516001600160a01b0390911681526020016102e6565b6103356103b7366004614e8e565b610df7565b6103916103ca366004614ed1565b6001600160a01b039081165f908152609960205260409020600101541690565b6103fd6103f8366004614ed1565b610f4a565b60405190151581526020016102e6565b6103917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b6103917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b181565b610335610469366004614eec565b610f69565b610476610fd7565b6040516102e69190614f51565b610335611007565b6102dc61049936600461501f565b61101b565b6103fd6104ac366004615050565b606654600160ff9092169190911b9081161490565b6102dc6104cf366004615084565b61104a565b6066546102dc565b6104ef6104ea366004614b8b565b6111bc565b6040516102e69291906151b9565b61051061050b366004614ed1565b6111d9565b6040516102e692919061522b565b61033561052c366004615298565b611303565b61039161053f366004614ed1565b609a6020525f90815260409020546001600160a01b031681565b61056c610567366004614ed1565b6114ae565b6040516102e69291906152d7565b6103fd610588366004614ed1565b6117ae565b6102dc61059b366004614eec565b6117e6565b6102dc6105ae366004614eec565b609860209081525f928352604080842090915290825290205481565b6103356105d83660046152e9565b611890565b6103917f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b61034a610612366004615339565b611926565b61039173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610335610640366004615385565b6119fc565b610658610653366004614b8b565b611ab7565b6040516102e69190615421565b6102dc610673366004614ed1565b609f6020525f908152604090205481565b610315610692366004615433565b611bd3565b6103fd6106a5366004614b8b565b609e6020525f908152604090205460ff1681565b6103fd6106c736600461551a565b609c60209081525f928352604080842090915290825290205460ff1681565b6102dc6106f4366004614eec565b611beb565b60405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000321681526020016102e6565b61074061073b366004615339565b611c27565b6040516102e6929190615544565b6103917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b610315610783366004614ed1565b611eb4565b610335610796366004615563565b611fdd565b6103356107a9366004615433565b612015565b6107c16107bc3660046155e1565b612080565b6040516102e6919061568e565b6102dc612125565b6103356107e4366004614b8b565b6121de565b6103156107f7366004614ed1565b61224c565b61033561080a366004614b8b565b61226f565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad60208201526001600160a01b03808616928201929092528187166060820152908516608082015260a0810183905260c081018290525f9061088d9060e00160405160208183030381529060405280519060200120612380565b9695505050505050565b606060016108a4816123ae565b6108ac6123dc565b5f836001600160401b038111156108c5576108c5614ba2565b6040519080825280602002602001820160405280156108ee578160200160208202803683370190505b50335f908152609a60205260408120549192506001600160a01b03909116905b85811015610afa57868682818110610928576109286156a0565b905060200281019061093a91906156b4565b6109489060208101906156d2565b905087878381811061095c5761095c6156a0565b905060200281019061096e91906156b4565b61097890806156d2565b905014610998576040516343714afd60e01b815260040160405180910390fd5b5f610a0233848a8a868181106109b0576109b06156a0565b90506020028101906109c291906156b4565b6109cc90806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061243592505050565b9050610ad433848a8a86818110610a1b57610a1b6156a0565b9050602002810190610a2d91906156b4565b610a3790806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508e92508d9150889050818110610a7c57610a7c6156a0565b9050602002810190610a8e91906156b4565b610a9c9060208101906156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250889250612587915050565b848381518110610ae657610ae66156a0565b60209081029190910101525060010161090e565b5050600160c955949350505050565b610b11612b22565b6066548181168114610b365760405163c61dca5d60e01b815260040160405180910390fd5b610b3f82612bc5565b5050565b6001600160a01b038084165f908152609a60205260408120546060921690610b6c868387612435565b90505f85516001600160401b03811115610b8857610b88614ba2565b604051908082528060200260200182016040528015610bb1578160200160208202803683370190505b5090505f5b8651811015610c96576001600160a01b0388165f90815260a260205260408120885182908a9085908110610bec57610bec6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050610c70878381518110610c3e57610c3e6156a0565b6020026020010151858481518110610c5857610c586156a0565b602002602001015183612c029092919063ffffffff16565b838381518110610c8257610c826156a0565b602090810291909101015250600101610bb6565b50925050505b9392505050565b610cab6123dc565b610cb433610f4a565b15610cd257604051633bf2b50360e11b815260040160405180910390fd5b604051632b6241f360e11b815233600482015263ffffffff841660248201527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316906356c483e6906044015f604051808303815f87803b158015610d3c575f5ffd5b505af1158015610d4e573d5f5f3e3d5ffd5b50505050610d5c3385612c20565b610d663333612c82565b6040516001600160a01b038516815233907fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c19060200160405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051610ddf929190615717565b60405180910390a2610df1600160c955565b50505050565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161480610e565750336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b116145b610e735760405163045206a560e21b815260040160405180910390fd5b610e7b6123dc565b6001600160a01b038481165f908152609a602052604080822054905163152667d960e31b8152908316600482018190528684166024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015610efb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1f9190615745565b90505f610f2d878784612f0b565b9050610f3d838888888886612fed565b505050610df1600160c955565b6001600160a01b039081165f908152609a602052604090205416151590565b81610f7381613132565b610f905760405163932d94f760e01b815260040160405180910390fd5b610f986123dc565b610fa1836117ae565b610fbe576040516325ec6c1f60e01b815260040160405180910390fd5b610fc88383612c20565b610fd2600160c955565b505050565b60606110027f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b905090565b61100f612b22565b6110195f19612bc5565b565b5f8160405160200161102d9190615421565b604051602081830303815290604052805190602001209050919050565b5f336001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1614611094576040516323d871a560e01b815260040160405180910390fd5b61109c6123dc565b6001600160a01b038088165f9081526098602090815260408083209388168352929052908120546110da906001600160401b03808716908616613219565b90505f6110e989878787613231565b90506110f58183615774565b9250611103895f88856132ee565b604080516001600160a01b038881168252602082018690528b16917fdd611f4ef63f4385f1756c86ce1f1f389a9013ba6fa07daba8528291bc2d3c30910160405180910390a261115286613368565b6001600160a01b0316633fb99ca5898989876040518563ffffffff1660e01b81526004016111839493929190615787565b5f604051808303815f87803b15801561119a575f5ffd5b505af11580156111ac573d5f5f3e3d5ffd5b50505050505061088d600160c955565b6111c4614940565b60606111cf836133da565b9094909350915050565b6060805f6111e68461224c565b8051909150806001600160401b0381111561120357611203614ba2565b60405190808252806020026020018201604052801561123c57816020015b611229614940565b8152602001906001900390816112215790505b509350806001600160401b0381111561125757611257614ba2565b60405190808252806020026020018201604052801561128a57816020015b60608152602001906001900390816112755790505b5092505f5b818110156112fb576112b98382815181106112ac576112ac6156a0565b60200260200101516133da565b8683815181106112cb576112cb6156a0565b602002602001018684815181106112e4576112e46156a0565b60209081029190910101919091525260010161128f565b505050915091565b336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1161461134c57604051633213a66160e21b815260040160405180910390fd5b6113546123dc565b61135d83610f4a565b15610fc8576001600160a01b038381165f908152609a602052604080822054905163152667d960e31b81529083166004820181905273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa1580156113f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114189190615745565b6001600160a01b0386165f90815260a26020908152604080832073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac084528252808320815192830190915254815291925061147e866114766001600160401b0380871690891661362d565b849190613641565b90506114a0848873beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0846132ee565b50505050610fd2600160c955565b6040516394f649dd60e01b81526001600160a01b03828116600483015260609182915f9182917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816906394f649dd906024015f60405180830381865afa15801561151a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115419190810190615837565b60405163fe243a1760e01b81526001600160a01b03888116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac060248301529294509092505f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1169063fe243a1790604401602060405180830381865afa1580156115c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb91906158f2565b9050805f036115ff57509094909350915050565b5f8351600161160e9190615774565b6001600160401b0381111561162557611625614ba2565b60405190808252806020026020018201604052801561164e578160200160208202803683370190505b5090505f845160016116609190615774565b6001600160401b0381111561167757611677614ba2565b6040519080825280602002602001820160405280156116a0578160200160208202803683370190505b50905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0828651815181106116cb576116cb6156a0565b60200260200101906001600160a01b031690816001600160a01b03168152505082818651815181106116ff576116ff6156a0565b60209081029190910101525f5b85518110156117a057858181518110611727576117276156a0565b6020026020010151838281518110611741576117416156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050848181518110611773576117736156a0565b602002602001015182828151811061178d5761178d6156a0565b602090810291909101015260010161170c565b509097909650945050505050565b5f6001600160a01b038216158015906117e057506001600160a01b038083165f818152609a6020526040902054909116145b92915050565b60405163152667d960e31b81526001600160a01b03838116600483015282811660248301525f9182917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015611856573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187a9190615745565b90506118888484835f613231565b949350505050565b8261189a81613132565b6118b75760405163932d94f760e01b815260040160405180910390fd5b6118c0846117ae565b6118dd576040516325ec6c1f60e01b815260040160405180910390fd5b836001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051611918929190615717565b60405180910390a250505050565b60605f82516001600160401b0381111561194257611942614ba2565b60405190808252806020026020018201604052801561196b578160200160208202803683370190505b5090505f5b83518110156119f4576001600160a01b0385165f90815260986020526040812085519091908690849081106119a7576119a76156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548282815181106119e1576119e16156a0565b6020908102919091010152600101611970565b509392505050565b6002611a07816123ae565b611a0f6123dc565b855f5b81811015611aa257611a9a898983818110611a2f57611a2f6156a0565b9050602002810190611a419190615909565b611a4a9061591d565b888884818110611a5c57611a5c6156a0565b9050602002810190611a6e91906156d2565b888886818110611a8057611a806156a0565b9050602002016020810190611a959190615928565b61365f565b600101611a12565b5050611aae600160c955565b50505050505050565b611abf614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b03908116825260018301548116828501526002830154168185015260038201546060820152600482015463ffffffff1660808201526005820180548551818602810186019096528086529194929360a08601939290830182828015611b6d57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b4f575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc357602002820191905f5260205f20905b815481526020019060010190808311611baf575b5050505050815250509050919050565b6060611bde33611eb4565b9050610c9c848484612015565b6001600160a01b038083165f90815260a260209081526040808320938516835292815282822083519182019093529154825290610c9c90613aa1565b60608082516001600160401b03811115611c4357611c43614ba2565b604051908082528060200260200182016040528015611c6c578160200160208202803683370190505b50915082516001600160401b03811115611c8857611c88614ba2565b604051908082528060200260200182016040528015611cb1578160200160208202803683370190505b506001600160a01b038086165f908152609a6020526040812054929350911690611cdc868387612435565b90505f5b8551811015611ea9575f611d0c878381518110611cff57611cff6156a0565b6020026020010151613368565b9050806001600160a01b031663fe243a1789898581518110611d3057611d306156a0565b60200260200101516040518363ffffffff1660e01b8152600401611d6a9291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015611d85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da991906158f2565b858381518110611dbb57611dbb6156a0565b6020026020010181815250505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f898581518110611dfe57611dfe6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050611e82868481518110611e5057611e506156a0565b6020026020010151858581518110611e6a57611e6a6156a0565b6020026020010151836136419092919063ffffffff16565b878481518110611e9457611e946156a0565b60209081029190910101525050600101611ce0565b5050505b9250929050565b6060611ebe6123dc565b611ec782610f4a565b611ee45760405163a5c7c44560e01b815260040160405180910390fd5b611eed826117ae565b15611f0b576040516311ca333560e31b815260040160405180910390fd5b336001600160a01b03831614611fc3576001600160a01b038083165f908152609a602052604090205416611f3e81613132565b80611f6457506001600160a01b038181165f908152609960205260409020600101541633145b611f8157604051631e499a2360e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a3505b611fcc82613ac0565b9050611fd8600160c955565b919050565b6002611fe8816123ae565b611ff06123dc565b612004611ffc8661591d565b85858561365f565b61200e600160c955565b5050505050565b61201d6123dc565b61202633610f4a565b1561204457604051633bf2b50360e11b815260040160405180910390fd5b61204d836117ae565b61206a576040516325ec6c1f60e01b815260040160405180910390fd5b61207633848484613d00565b610fc83384612c82565b60605f83516001600160401b0381111561209c5761209c614ba2565b6040519080825280602002602001820160405280156120cf57816020015b60608152602001906001900390816120ba5790505b5090505f5b84518110156119f4576121008582815181106120f2576120f26156a0565b602002602001015185611926565b828281518110612112576121126156a0565b60209081029190910101526001016120d4565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea612192613dbf565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6121e6613e34565b6066548019821981161461220d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020015b60405180910390a25050565b6001600160a01b0381165f90815260a3602052604090206060906117e090613ee5565b5f54610100900460ff161580801561228d57505f54600160ff909116105b806122a65750303b1580156122a657505f5460ff166001145b61230e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561232f575f805461ff0019166101001790555b61233882612bc5565b8015610b3f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f612389612125565b60405161190160f01b602082015260228101919091526042810183905260620161102d565b606654600160ff83161b908116036123d95760405163840a48d560e01b815260040160405180910390fd5b50565b600260c9540361242e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401612305565b600260c955565b60605f82516001600160401b0381111561245157612451614ba2565b60405190808252806020026020018201604052801561247a578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663547afb8786866040518363ffffffff1660e01b81526004016124cc929190615943565b5f60405180830381865afa1580156124e6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261250d9190810190615966565b90505f5b845181101561257c5761255787868381518110612530576125306156a0565b602002602001015184848151811061254a5761254a6156a0565b6020026020010151612f0b565b838281518110612569576125696156a0565b6020908102919091010152600101612511565b509095945050505050565b5f6001600160a01b0386166125af576040516339b190bb60e11b815260040160405180910390fd5b83515f036125d05760405163796cc52560e01b815260040160405180910390fd5b5f84516001600160401b038111156125ea576125ea614ba2565b604051908082528060200260200182016040528015612613578160200160208202803683370190505b5090505f85516001600160401b0381111561263057612630614ba2565b604051908082528060200260200182016040528015612659578160200160208202803683370190505b5090505f5b8651811015612955575f61267d888381518110611cff57611cff6156a0565b90505f60a25f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8a85815181106126b6576126b66156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20905061272f8884815181106126f4576126f46156a0565b602002602001015188858151811061270e5761270e6156a0565b60209081029190910181015160408051928301905284548252909190613641565b848481518110612741576127416156a0565b602002602001018181525050612780888481518110612762576127626156a0565b60209081029190910181015160408051928301905283548252613ef1565b858481518110612792576127926156a0565b60209081029190910101526001600160a01b038a1615612827576127e98a8a85815181106127c2576127c26156a0565b60200260200101518786815181106127dc576127dc6156a0565b6020026020010151613f05565b6128278a8c8b8681518110612800576128006156a0565b602002602001015187878151811061281a5761281a6156a0565b60200260200101516132ee565b5f826001600160a01b031663724af4238d8c878151811061284a5761284a6156a0565b60200260200101518c8881518110612864576128646156a0565b60200260200101516040518463ffffffff1660e01b815260040161288a939291906159f5565b6020604051808303815f875af11580156128a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ca91906158f2565b9050805f03612947575f82557f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f8c8b868151811061290a5761290a6156a0565b602002602001015161292f856040518060200160405290815f82015481525050613aa1565b60405161293e939291906159f5565b60405180910390a15b50505080600101905061265e565b506001600160a01b0388165f908152609f6020526040812080549182919061297c83615a19565b91905055505f6040518060e001604052808b6001600160a01b031681526020018a6001600160a01b031681526020018b6001600160a01b031681526020018381526020014363ffffffff1681526020018981526020018581525090505f6129e28261101b565b5f818152609e602090815260408083208054600160ff19909116811790915560a4835292819020865181546001600160a01b03199081166001600160a01b039283161783558885015195830180548216968316969096179095559187015160028201805490951692169190911790925560608501516003830155608085015160048301805463ffffffff191663ffffffff90921691909117905560a085015180519394508593612a989260058501920190614999565b5060c08201518051612ab49160068401916020909101906149fc565b5050506001600160a01b038b165f90815260a360205260409020612ad89082613f6f565b507f26b2aae26516e8719ef50ea2f6831a2efbd4e37dccdf0f6936b27bc08e793e30818386604051612b0c93929190615a31565b60405180910390a19a9950505050505050505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612b84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba89190615a5b565b61101957604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61188882612c1a612c1387613aa1565b8690613f7a565b90613f7a565b6001600160a01b038281165f8181526099602090815260409182902060010180546001600160a01b0319169486169485179055905192835290917f773b54c04d756fcc5e678111f7d730de3be98192000799eee3d63716055a87c69101612240565b5f612c8c816123ae565b5f5f612c97856114ae565b915091505f612ca75f8685612435565b6001600160a01b038781165f818152609a602052604080822080546001600160a01b031916948b16948517905551939450919290917fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d874330491a35f5b8351811015611aae5773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612d3a57612d3a6156a0565b60200260200101516001600160a01b031603612eaa5760405163a3d75e0960e01b81526001600160a01b0388811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612db8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ddc9190615745565b90505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f878581518110612e1557612e156156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050612e89858481518110612e6757612e676156a0565b6020026020010151836001600160401b0316836136419092919063ffffffff16565b858481518110612e9b57612e9b6156a0565b60200260200101818152505050505b612f038688868481518110612ec157612ec16156a0565b60200260200101515f878681518110612edc57612edc6156a0565b6020026020010151878781518110612ef657612ef66156a0565b6020026020010151612fed565b600101612d01565b5f73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b03841601612fdd5760405163a3d75e0960e01b81526001600160a01b0385811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612f99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbd9190615745565b9050612fd56001600160401b0384811690831661362d565b915050610c9c565b506001600160401b031692915050565b805f0361300d57604051630a33bc6960e21b815260040160405180910390fd5b811561312a576001600160a01b038086165f90815260a26020908152604080832093881683529290522061304381858585613f8e565b6040805160208101909152815481527f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f908790879061308190613aa1565b604051613090939291906159f5565b60405180910390a16130a186610f4a565b15611aae576001600160a01b038088165f908152609860209081526040808320938916835292905290812080548592906130dc908490615774565b92505081905550866001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c878786604051613120939291906159f5565b60405180910390a2505b505050505050565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af11580156131b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e09190615a5b565b60605f6131e883614024565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f613227848385600161404b565b6118889085615a76565b6001600160a01b038085165f90815260a56020908152604080832093871683529290529081208190613262906140a6565b90505f6132c860016132947f000000000000000000000000000000000000000000000000000000000000003243615a89565b61329e9190615a89565b6001600160a01b03808a165f90815260a560209081526040808320938c16835292905220906140c0565b90505f6132d58284615a76565b90506132e28187876140dc565b98975050505050505050565b6001600160a01b038085165f90815260986020908152604080832093861683529290529081208054839290613324908490615a76565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051611918939291906159f5565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146133b3577f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075086117e0565b7f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b192915050565b6133e2614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b0390811682526001830154811682850152600283015416818501526003820154606082810191909152600483015463ffffffff1660808301526005830180548651818702810187019097528087529195929460a0860193929083018282801561349457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613476575b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156134ea57602002820191905f5260205f20905b8154815260200190600101908083116134d6575b50505050508152505091508160a00151516001600160401b0381111561351257613512614ba2565b60405190808252806020026020018201604052801561353b578160200160208202803683370190505b5090505f7f0000000000000000000000000000000000000000000000000000000000000032836080015161356f9190615aa5565b90505f4363ffffffff168263ffffffff16106135a05761359b845f015185602001518660a00151612435565b6135b7565b6135b7845f015185602001518660a00151856140fa565b90505f5b8460a00151518110156112fb576136088560c0015182815181106135e1576135e16156a0565b60200260200101518383815181106135fb576135fb6156a0565b6020026020010151614228565b84828151811061361a5761361a6156a0565b60209081029190910101526001016135bb565b5f610c9c8383670de0b6b3a7640000614233565b5f6118888261365961365287613aa1565b869061362d565b9061362d565b60a0840151518214613684576040516343714afd60e01b815260040160405180910390fd5b83604001516001600160a01b0316336001600160a01b0316146136ba576040516316110d3560e21b815260040160405180910390fd5b5f6136c48561101b565b5f818152609e602052604090205490915060ff166136f5576040516387c9d21960e01b815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000003287608001516137289190615aa5565b90508063ffffffff164363ffffffff1611613756576040516378f67ae160e11b815260040160405180910390fd5b61376d875f015188602001518960a00151846140fa565b87516001600160a01b03165f90815260a360205260409020909250613793915083614318565b505f82815260a46020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101805463ffffffff19169055906137ea6005830182614a35565b6137f7600683015f614a35565b50505f828152609e602052604090819020805460ff19169055517f1f40400889274ed07b24845e5054a87a0cab969eb1277aafe61ae352e7c32a00906138409084815260200190565b60405180910390a185516001600160a01b039081165f908152609a6020526040812054885160a08a0151919093169261387a918490612435565b90505f5b8860a0015151811015613a96575f6138a58a60a001518381518110611cff57611cff6156a0565b90505f6138db8b60c0015184815181106138c1576138c16156a0565b60200260200101518785815181106135fb576135fb6156a0565b9050805f036138eb575050613a8e565b87156139b957816001600160a01b0316632eae418c8c5f01518d60a00151868151811061391a5761391a6156a0565b60200260200101518d8d88818110613934576139346156a0565b90506020020160208101906139499190614ed1565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018490526084015f604051808303815f87803b15801561399e575f5ffd5b505af11580156139b0573d5f5f3e3d5ffd5b50505050613a8b565b5f5f836001600160a01b03166350ff72258e5f01518f60a0015188815181106139e4576139e46156a0565b6020026020010151866040518463ffffffff1660e01b8152600401613a0b939291906159f5565b60408051808303815f875af1158015613a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4a9190615ac1565b91509150613a88878e5f01518f60a001518881518110613a6c57613a6c6156a0565b602002602001015185858b8b81518110612ef657612ef66156a0565b50505b50505b60010161387e565b505050505050505050565b80515f9015613ab15781516117e0565b670de0b6b3a764000092915050565b60606001613acd816123ae565b6001600160a01b038084165f818152609a602052604080822080546001600160a01b0319811690915590519316928392917ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467691a35f5f613b2c866114ae565b9150915081515f03613b4057505050613cfa565b81516001600160401b03811115613b5957613b59614ba2565b604051908082528060200260200182016040528015613b82578160200160208202803683370190505b5094505f613b91878585612435565b90505f5b8351811015613cf4576040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050868481518110613c1557613c156156a0565b6020026020010151835f81518110613c2f57613c2f6156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110613c6157613c616156a0565b6020026020010151825f81518110613c7b57613c7b6156a0565b602002602001018181525050848481518110613c9957613c996156a0565b6020026020010151815f81518110613cb357613cb36156a0565b602002602001018181525050613ccc8b89858585612587565b8a8581518110613cde57613cde6156a0565b6020908102919091010152505050600101613b95565b50505050505b50919050565b6001600160a01b038084165f908152609960205260409020600101541680613d285750610df1565b6001600160a01b0381165f908152609c6020908152604080832085845290915290205460ff1615613d6c57604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381165f908152609c602090815260408083208584528252909120805460ff1916600117905583015161200e908290613db390889088908490889061080f565b85516020870151614323565b60605f613deb7f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b9050805f81518110613dff57613dff6156a0565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eb49190615ae3565b6001600160a01b0316336001600160a01b0316146110195760405163794821ff60e01b815260040160405180910390fd5b60605f610c9c83614375565b5f610c9c613efe84613aa1565b839061362d565b6001600160a01b038084165f90815260a5602090815260408083209386168352929052908120613f34906140a6565b9050610df143613f448484615774565b6001600160a01b038088165f90815260a560209081526040808320938a1683529290522091906143ce565b5f610c9c83836143d9565b5f610c9c83670de0b6b3a764000084614233565b825f03613fba57604080516020810190915284548152613fb3908290612c1a90613aa1565b8455610df1565b6040805160208101909152845481525f90613fd6908584613641565b90505f613fe38483615774565b90505f613ffe84612c1a613ff7888a615774565b8590613f7a565b80885590505f819003611aae5760405163172cec7360e31b815260040160405180910390fd5b5f60ff8216601f8111156117e057604051632cd44ac360e21b815260040160405180910390fd5b5f5f614058868686614233565b9050600183600281111561406e5761406e615afe565b14801561408a57505f848061408557614085615b12565b868809115b1561409d5761409a600182615774565b90505b95945050505050565b5f6140b18282614425565b6001600160e01b031692915050565b5f6140cc83838361446a565b6001600160e01b03169392505050565b5f6118886140ea8385615b26565b85906001600160401b031661362d565b60605f83516001600160401b0381111561411657614116614ba2565b60405190808252806020026020018201604052801561413f578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03166394d7d00c8787876040518463ffffffff1660e01b815260040161419393929190615b45565b5f60405180830381865afa1580156141ad573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141d49190810190615966565b90505f5b855181101561421c576141f788878381518110612530576125306156a0565b838281518110614209576142096156a0565b60209081029190910101526001016141d8565b50909695505050505050565b5f610c9c838361362d565b5f80805f19858709858702925082811083820303915050805f0361426a5783828161426057614260615b12565b0492505050610c9c565b8084116142b15760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401612305565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f610c9c83836144b3565b4281101561434457604051630819bdcd60e01b815260040160405180910390fd5b6143586001600160a01b0385168484614596565b610df157604051638baa579f60e01b815260040160405180910390fd5b6060815f018054806020026020016040519081016040528092919081815260200182805480156143c257602002820191905f5260205f20905b8154815260200190600101908083116143ae575b50505050509050919050565b610fd28383836145ea565b5f81815260018301602052604081205461441e57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556117e0565b505f6117e0565b81545f9080156144625761444b8461443e600184615a76565b5f91825260209091200190565b5464010000000090046001600160e01b0316611888565b509092915050565b82545f908161447b868683856146f0565b905080156144a9576144928661443e600184615a76565b5464010000000090046001600160e01b031661088d565b5091949350505050565b5f818152600183016020526040812054801561458d575f6144d5600183615a76565b85549091505f906144e890600190615a76565b9050818114614547575f865f018281548110614506576145066156a0565b905f5260205f200154905080875f018481548110614526576145266156a0565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061455857614558615b7e565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506117e0565b5f9150506117e0565b5f5f5f6145a38585614743565b90925090505f8160048111156145bb576145bb615afe565b1480156145d95750856001600160a01b0316826001600160a01b0316145b8061088d575061088d868686614782565b825480156146a2575f6146028561443e600185615a76565b60408051808201909152905463ffffffff8082168084526401000000009092046001600160e01b0316602084015291925090851610156146555760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff8086169116036146a057826146768661443e600186615a76565b80546001600160e01b03929092166401000000000263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216640100000000029190921617910155565b5f5b818310156119f4575f6147058484614869565b5f8781526020902090915063ffffffff86169082015463ffffffff16111561472f5780925061473d565b61473a816001615774565b93505b506146f2565b5f5f8251604103614777576020830151604084015160608501515f1a61476b87828585614883565b94509450505050611ead565b505f90506002611ead565b5f5f5f856001600160a01b0316631626ba7e60e01b86866040516024016147aa929190615b92565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516147e89190615baa565b5f60405180830381855afa9150503d805f8114614820576040519150601f19603f3d011682016040523d82523d5f602084013e614825565b606091505b509150915081801561483957506020815110155b801561088d57508051630b135d3f60e11b9061485e90830160209081019084016158f2565b149695505050505050565b5f6148776002848418615bc0565b610c9c90848416615774565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156148b857505f90506003614937565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614909573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614931575f60019250925050614937565b91505f90505b94509492505050565b6040518060e001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f63ffffffff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906149b7565b506149f8929150614a4c565b5090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec578251825591602001919060010190614a1a565b5080545f8255905f5260205f20908101906123d991905b5b808211156149f8575f8155600101614a4d565b6001600160a01b03811681146123d9575f5ffd5b8035611fd881614a60565b5f5f5f5f5f60a08688031215614a93575f5ffd5b8535614a9e81614a60565b94506020860135614aae81614a60565b93506040860135614abe81614a60565b94979396509394606081013594506080013592915050565b5f5f83601f840112614ae6575f5ffd5b5081356001600160401b03811115614afc575f5ffd5b6020830191508360208260051b8501011115611ead575f5ffd5b5f5f60208385031215614b27575f5ffd5b82356001600160401b03811115614b3c575f5ffd5b614b4885828601614ad6565b90969095509350505050565b602080825282518282018190525f918401906040840190835b8181101561257c578351835260209384019390920191600101614b6d565b5f60208284031215614b9b575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715614bd857614bd8614ba2565b60405290565b604080519081016001600160401b0381118282101715614bd857614bd8614ba2565b604051601f8201601f191681016001600160401b0381118282101715614c2857614c28614ba2565b604052919050565b5f6001600160401b03821115614c4857614c48614ba2565b5060051b60200190565b5f82601f830112614c61575f5ffd5b8135614c74614c6f82614c30565b614c00565b8082825260208201915060208360051b860101925085831115614c95575f5ffd5b602085015b83811015614cbb578035614cad81614a60565b835260209283019201614c9a565b5095945050505050565b5f82601f830112614cd4575f5ffd5b8135614ce2614c6f82614c30565b8082825260208201915060208360051b860101925085831115614d03575f5ffd5b602085015b83811015614cbb578035835260209283019201614d08565b5f5f5f60608486031215614d32575f5ffd5b8335614d3d81614a60565b925060208401356001600160401b03811115614d57575f5ffd5b614d6386828701614c52565b92505060408401356001600160401b03811115614d7e575f5ffd5b614d8a86828701614cc5565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614dc4578151865260209586019590910190600101614da6565b5093949350505050565b602081525f610c9c6020830184614d94565b803563ffffffff81168114611fd8575f5ffd5b5f5f83601f840112614e03575f5ffd5b5081356001600160401b03811115614e19575f5ffd5b602083019150836020828501011115611ead575f5ffd5b5f5f5f5f60608587031215614e43575f5ffd5b8435614e4e81614a60565b9350614e5c60208601614de0565b925060408501356001600160401b03811115614e76575f5ffd5b614e8287828801614df3565b95989497509550505050565b5f5f5f5f60808587031215614ea1575f5ffd5b8435614eac81614a60565b93506020850135614ebc81614a60565b93969395505050506040820135916060013590565b5f60208284031215614ee1575f5ffd5b8135610c9c81614a60565b5f5f60408385031215614efd575f5ffd5b8235614f0881614a60565b91506020830135614f1881614a60565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c9c6020830184614f23565b5f60e08284031215614f73575f5ffd5b614f7b614bb6565b9050614f8682614a74565b8152614f9460208301614a74565b6020820152614fa560408301614a74565b604082015260608281013590820152614fc060808301614de0565b608082015260a08201356001600160401b03811115614fdd575f5ffd5b614fe984828501614c52565b60a08301525060c08201356001600160401b03811115615007575f5ffd5b61501384828501614cc5565b60c08301525092915050565b5f6020828403121561502f575f5ffd5b81356001600160401b03811115615044575f5ffd5b61188884828501614f63565b5f60208284031215615060575f5ffd5b813560ff81168114610c9c575f5ffd5b6001600160401b03811681146123d9575f5ffd5b5f5f5f5f5f5f86880360e081121561509a575f5ffd5b87356150a581614a60565b96506040601f19820112156150b8575f5ffd5b506020870194506060870135935060808701356150d481614a60565b925060a08701356150e481615070565b915060c08701356150f481615070565b809150509295509295509295565b5f8151808452602084019350602083015f5b82811015614dc45781516001600160a01b0316865260209586019590910190600101615114565b80516001600160a01b03908116835260208083015182169084015260408083015190911690830152606080820151908301526080808201515f916151869085018263ffffffff169052565b5060a082015160e060a08501526151a060e0850182615102565b905060c083015184820360c086015261409d8282614d94565b604081525f6151cb604083018561513b565b828103602084015261409d8185614d94565b5f82825180855260208501945060208160051b830101602085015f5b8381101561421c57601f19858403018852615215838351614d94565b60209889019890935091909101906001016151f9565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b8281101561528257605f1987860301845261526d85835161513b565b94506020938401939190910190600101615251565b50505050828103602084015261409d81856151dd565b5f5f5f606084860312156152aa575f5ffd5b83356152b581614a60565b92506020840135915060408401356152cc81615070565b809150509250925092565b604081525f6151cb6040830185615102565b5f5f5f604084860312156152fb575f5ffd5b833561530681614a60565b925060208401356001600160401b03811115615320575f5ffd5b61532c86828701614df3565b9497909650939450505050565b5f5f6040838503121561534a575f5ffd5b823561535581614a60565b915060208301356001600160401b0381111561536f575f5ffd5b61537b85828601614c52565b9150509250929050565b5f5f5f5f5f5f6060878903121561539a575f5ffd5b86356001600160401b038111156153af575f5ffd5b6153bb89828a01614ad6565b90975095505060208701356001600160401b038111156153d9575f5ffd5b6153e589828a01614ad6565b90955093505060408701356001600160401b03811115615403575f5ffd5b61540f89828a01614ad6565b979a9699509497509295939492505050565b602081525f610c9c602083018461513b565b5f5f5f60608486031215615445575f5ffd5b833561545081614a60565b925060208401356001600160401b0381111561546a575f5ffd5b84016040818703121561547b575f5ffd5b615483614bde565b81356001600160401b03811115615498575f5ffd5b8201601f810188136154a8575f5ffd5b80356001600160401b038111156154c1576154c1614ba2565b6154d4601f8201601f1916602001614c00565b8181528960208385010111156154e8575f5ffd5b816020840160208301375f60209282018301528352928301359282019290925293969395505050506040919091013590565b5f5f6040838503121561552b575f5ffd5b823561553681614a60565b946020939093013593505050565b604081525f6151cb6040830185614d94565b80151581146123d9575f5ffd5b5f5f5f5f60608587031215615576575f5ffd5b84356001600160401b0381111561558b575f5ffd5b850160e0818803121561559c575f5ffd5b935060208501356001600160401b038111156155b6575f5ffd5b6155c287828801614ad6565b90945092505060408501356155d681615556565b939692955090935050565b5f5f604083850312156155f2575f5ffd5b82356001600160401b03811115615607575f5ffd5b8301601f81018513615617575f5ffd5b8035615625614c6f82614c30565b8082825260208201915060208360051b850101925087831115615646575f5ffd5b6020840193505b8284101561567157833561566081614a60565b82526020938401939091019061564d565b945050505060208301356001600160401b0381111561536f575f5ffd5b602081525f610c9c60208301846151dd565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156c8575f5ffd5b9190910192915050565b5f5f8335601e198436030181126156e7575f5ffd5b8301803591506001600160401b03821115615700575f5ffd5b6020019150600581901b3603821315611ead575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60208284031215615755575f5ffd5b8151610c9c81615070565b634e487b7160e01b5f52601160045260245ffd5b808201808211156117e0576117e0615760565b60a08101853561579681614a60565b6001600160a01b0316825263ffffffff6157b260208801614de0565b16602083015260408201949094526001600160a01b03929092166060830152608090910152919050565b5f82601f8301126157eb575f5ffd5b81516157f9614c6f82614c30565b8082825260208201915060208360051b86010192508583111561581a575f5ffd5b602085015b83811015614cbb57805183526020928301920161581f565b5f5f60408385031215615848575f5ffd5b82516001600160401b0381111561585d575f5ffd5b8301601f8101851361586d575f5ffd5b805161587b614c6f82614c30565b8082825260208201915060208360051b85010192508783111561589c575f5ffd5b6020840193505b828410156158c75783516158b681614a60565b8252602093840193909101906158a3565b8095505050505060208301516001600160401b038111156158e6575f5ffd5b61537b858286016157dc565b5f60208284031215615902575f5ffd5b5051919050565b5f823560de198336030181126156c8575f5ffd5b5f6117e03683614f63565b5f60208284031215615938575f5ffd5b8135610c9c81615556565b6001600160a01b03831681526040602082018190525f9061188890830184615102565b5f60208284031215615976575f5ffd5b81516001600160401b0381111561598b575f5ffd5b8201601f8101841361599b575f5ffd5b80516159a9614c6f82614c30565b8082825260208201915060208360051b8501019250868311156159ca575f5ffd5b6020840193505b8284101561088d5783516159e481615070565b8252602093840193909101906159d1565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60018201615a2a57615a2a615760565b5060010190565b838152606060208201525f615a49606083018561513b565b828103604084015261088d8185614d94565b5f60208284031215615a6b575f5ffd5b8151610c9c81615556565b818103818111156117e0576117e0615760565b63ffffffff82811682821603908111156117e0576117e0615760565b63ffffffff81811683821601908111156117e0576117e0615760565b5f5f60408385031215615ad2575f5ffd5b505080516020909101519092909150565b5f60208284031215615af3575f5ffd5b8151610c9c81614a60565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b6001600160401b0382811682821603908111156117e0576117e0615760565b6001600160a01b03841681526060602082018190525f90615b6890830185615102565b905063ffffffff83166040830152949350505050565b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f6118886040830184614f23565b5f82518060208501845e5f920191825250919050565b5f82615bda57634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212200ce9d6ea4724b26b24a945c3e7b815ac3f6f8bc1e775aec290a459ae8524680664736f6c634300081c00330000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf", + "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f": "0x0000000000000000000003e8df077f5f72071df6e8b0a78071e496ba17b5ee0c", + "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230": "0x0000000000000000000000000000000100000000000000000000000000000001", + "0xdf92d0c198eb2c08351629e12172b863967bc505b5d2fa9fdf58f7b97e45495f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", + "0x91839d9989408fbab863f2059ae80fee5216f58ec04fa3bffb021275bf7d4f24": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c" } }, "6": { - "address": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", - "code": "0x608060405234801561000f575f5ffd5b50600436106103b3575f3560e01c8063886f1195116101f5578063de02e50311610114578063f6efbb59116100a9578063fabc1cbc11610079578063fabc1cbc14610a33578063fbf1e2c114610a46578063fce36c7d14610a59578063ff9f6cce14610a6c575f5ffd5b8063f6efbb59146109e7578063f74e8eac146109fa578063f8cd844814610a0d578063f96abf2e14610a20575f5ffd5b8063ed71e6a2116100e4578063ed71e6a214610967578063f22cef8514610994578063f2f07ab4146109a7578063f2fde38b146109d4575f5ffd5b8063de02e50314610907578063e063f81f1461091a578063e810ce211461092d578063ea4d3c9b14610940575f5ffd5b8063a50a1d9c1161018a578063bf21a8aa1161015a578063bf21a8aa14610879578063c46db606146108a0578063ca8aa7c7146108cd578063dcbb03b3146108f4575f5ffd5b8063a50a1d9c14610807578063aebd8bae1461081a578063b3dbb0e014610847578063bb7e451f1461085a575f5ffd5b80639cb9a5fa116101c55780639cb9a5fa146107a75780639d45c281146107ba5780639de4b35f146107e1578063a0169ddd146107f4575f5ffd5b8063886f11951461074c5780638da5cb5b146107735780639104c319146107845780639be3d4e41461079f575f5ffd5b80634596021c116102e15780635c975abb11610276578063715018a611610246578063715018a6146106ff5780637b8f8b0514610707578063863cb9a91461070f578063865c695314610722575f5ffd5b80635c975abb146106a25780635e9d8348146106aa57806363f6a798146106bd5780636d21117e146106d2575f5ffd5b806354fd4d50116102b157806354fd4d501461064f57806358baaa3e14610664578063595c6a67146106775780635ac86ab71461067f575f5ffd5b80634596021c146105d85780634657e26a146105eb5780634b943960146106125780634d18cc3514610638575f5ffd5b8063149bc8721161035757806339b70e381161032757806339b70e38146105745780633a8c07861461059b5780633ccc861d146105b25780633efe1db6146105c5575f5ffd5b8063149bc872146104d95780632b9f64a4146104fa57806336af41fa1461053a57806337838ed01461054d575f5ffd5b80630e9a53cf116103925780630e9a53cf1461043f5780630eb383451461048c578063131433b41461049f578063136439dd146104c6575f5ffd5b806218572c146103b757806304a0c502146103ee5780630ca298991461042a575b5f5ffd5b6103d96103c5366004613a33565b60d16020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6104157f0000000000000000000000000000000000000000000000000000000000278d0081565b60405163ffffffff90911681526020016103e5565b61043d610438366004613aab565b610a7f565b005b610447610d25565b6040516103e591905f6080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b61043d61049a366004613b07565b610e25565b6104157f0000000000000000000000000000000000000000000000000000000065fb788081565b61043d6104d4366004613b3e565b610ea5565b6104ec6104e7366004613b55565b610edf565b6040519081526020016103e5565b610522610508366004613a33565b60cc6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103e5565b61043d610548366004613b6f565b610f54565b6104157f000000000000000000000000000000000000000000000000000000000076a70081565b6105227f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b60cb5461041590600160a01b900463ffffffff1681565b61043d6105c0366004613bbe565b6110c5565b61043d6105d3366004613c14565b6110ec565b61043d6105e6366004613c3e565b6112c2565b6105227f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b610625610620366004613a33565b611325565b60405161ffff90911681526020016103e5565b60cb5461041590600160c01b900463ffffffff1681565b610657611380565b6040516103e59190613c90565b61043d610672366004613cc5565b6113b0565b61043d6113c4565b6103d961068d366004613cde565b606654600160ff9092169190911b9081161490565b6066546104ec565b6103d96106b8366004613cfe565b6113d8565b60cb5461062590600160e01b900461ffff1681565b6103d96106e0366004613d2f565b60cf60209081525f928352604080842090915290825290205460ff1681565b61043d611463565b60ca546104ec565b61043d61071d366004613a33565b611474565b6104ec610730366004613d59565b60cd60209081525f928352604080842090915290825290205481565b6105227f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6033546001600160a01b0316610522565b61052273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610447611485565b61043d6107b5366004613d85565b611521565b6104157f000000000000000000000000000000000000000000000000000000000001518081565b6106256107ef366004613dbc565b61169c565b61043d610802366004613a33565b61171f565b61043d610815366004613df8565b61172a565b6103d9610828366004613d2f565b60d260209081525f928352604080842090915290825290205460ff1681565b61043d610855366004613e11565b61173b565b6104ec610868366004613a33565b60ce6020525f908152604090205481565b6104157f00000000000000000000000000000000000000000000000000000000005c490081565b6103d96108ae366004613d2f565b60d060209081525f928352604080842090915290825290205460ff1681565b6105227f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b61043d610902366004613e3b565b611866565b610447610915366004613b3e565b6119b3565b610625610928366004613d59565b611a43565b61041561093b366004613b3e565b611aa8565b6105227f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b6103d9610975366004613d2f565b60d360209081525f928352604080842090915290825290205460ff1681565b61043d6109a2366004613d59565b611b29565b6103d96109b5366004613d2f565b60d760209081525f928352604080842090915290825290205460ff1681565b61043d6109e2366004613a33565b611c93565b61043d6109f5366004613e7f565b611d0e565b61043d610a08366004613edd565b611e43565b6104ec610a1b366004613b55565b61200a565b61043d610a2e366004613cc5565b61201a565b61043d610a41366004613b3e565b61214b565b60cb54610522906001600160a01b031681565b61043d610a67366004613b6f565b6121b8565b61043d610a7a366004613b6f565b6122e9565b6009610a8a8161244a565b610a976020850185613a33565b610aa081612475565b610abd5760405163932d94f760e01b815260040160405180910390fd5b610ac561251f565b6040516304c1b8eb60e31b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063260dc75890610b11908890600401613f48565b602060405180830381865afa158015610b2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b509190613f56565b610b6d57604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d135736858583818110610b8a57610b8a613f71565b9050602002810190610b9c9190613f85565b90505f60ce81610baf60208b018b613a33565b6001600160a01b031681526020808201929092526040015f90812054925090610bda908a018a613a33565b8284604051602001610bee939291906141ad565b6040516020818303038152906040528051906020012090505f610c1084612578565b9050600160d75f610c2460208e018e613a33565b6001600160a01b0316815260208082019290925260409081015f9081208682529092529020805460ff1916911515919091179055610c638360016141f0565b60ce5f610c7360208e018e613a33565b6001600160a01b03166001600160a01b031681526020019081526020015f208190555081336001600160a01b03167ffff0759ccb371dfb5691798724e70b4fa61cb3bfe730a33ac19fb86a48efc7568c8688604051610cd493929190614203565b60405180910390a3610d03333083610cf26040890160208a01613a33565b6001600160a01b0316929190612763565b505060019092019150610b6f9050565b50610d1e6001609755565b5050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca545b8015610dfd575f60ca610d60600184614228565b81548110610d7057610d70613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610ddf5750806040015163ffffffff164210155b15610dea5792915050565b5080610df58161423b565b915050610d4c565b5050604080516080810182525f80825260208201819052918101829052606081019190915290565b610e2d6127ce565b6001600160a01b0382165f81815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b03919091165f90815260d160205260409020805460ff1916911515919091179055565b610ead612828565b6066548181168114610ed25760405163c61dca5d60e01b815260040160405180910390fd5b610edb826128cb565b5050565b5f80610eee6020840184613a33565b8360200135604051602001610f379392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b6001610f5f8161244a565b335f90815260d1602052604090205460ff16610f8e57604051635c427cd960e01b815260040160405180910390fd5b610f9661251f565b5f5b828110156110b55736848483818110610fb357610fb3613f71565b9050602002810190610fc59190614250565b335f81815260ce60209081526040808320549051949550939192610fef92909185918791016142e2565b60405160208183030381529060405280519060200120905061101083612908565b335f90815260d0602090815260408083208484529091529020805460ff191660019081179091556110429083906141f0565b335f81815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290611089908890614308565b60405180910390a46110aa333060408601803590610cf29060208901613a33565b505050600101610f98565b506110c06001609755565b505050565b60026110d08161244a565b6110d861251f565b6110e283836129f3565b6110c06001609755565b60036110f78161244a565b60cb546001600160a01b0316331461112257604051635c427cd960e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161115557604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff161061117b576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb545f9061119a90600160a01b900463ffffffff164261431a565b6040805160808101825287815263ffffffff87811660208084018281528684168587018181525f6060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60026112cd8161244a565b6112d561251f565b5f5b838110156113145761130c8585838181106112f4576112f4613f71565b90506020028101906113069190614336565b846129f3565b6001016112d7565b5061131f6001609755565b50505050565b6001600160a01b0381165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff169082015261137a90612c7b565b92915050565b60606113ab7f76312e302e300000000000000000000000000000000000000000000000000006612ceb565b905090565b6113b86127ce565b6113c181612d28565b50565b6113cc612828565b6113d65f196128cb565b565b5f61145b8260ca6113ec6020830183613cc5565b63ffffffff168154811061140257611402613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152612d99565b506001919050565b61146b6127ce565b6113d65f612f3c565b61147c6127ce565b6113c181612f8d565b604080516080810182525f80825260208201819052918101829052606081019190915260ca80546114b890600190614228565b815481106114c8576114c8613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b600561152c8161244a565b8361153681612475565b6115535760405163932d94f760e01b815260040160405180910390fd5b61155b61251f565b5f5b83811015610d13573685858381811061157857611578613f71565b905060200281019061158a9190613f85565b6001600160a01b0388165f90815260ce60209081526040808320549051939450926115bb918b9185918791016141ad565b6040516020818303038152906040528051906020012090505f6115dd84612578565b6001600160a01b038b165f90815260d3602090815260408083208684529091529020805460ff1916600190811790915590915061161b9084906141f0565b6001600160a01b038b165f81815260ce60205260409081902092909255905183919033907ffc8888bffd711da60bc5092b33f677d81896fe80ecc677b84cfab8184462b6e09061166e9088908a9061434a565b60405180910390a461168c333083610cf26040890160208a01613a33565b50506001909201915061155d9050565b6001600160a01b0382165f90815260d66020526040812061171890826116cf6116ca36879003870187614362565b612fe8565b815260208082019290925260409081015f208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152612c7b565b9392505050565b33610edb818361304b565b6117326127ce565b6113c1816130ae565b60076117468161244a565b8261175081612475565b61176d5760405163932d94f760e01b815260040160405180910390fd5b60cb545f9061178990600160a01b900463ffffffff164261431a565b6001600160a01b0386165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152919250906117e290612c7b565b6001600160a01b0387165f90815260d560205260409020909150611807908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388169133917fd1e028bd664486a46ad26040e999cd2d22e1e9a094ee6afe19fcf64678f16f749181900360600190a3505050505050565b60066118718161244a565b8361187b81612475565b6118985760405163932d94f760e01b815260040160405180910390fd5b60cb545f906118b490600160a01b900463ffffffff164261431a565b6001600160a01b038781165f90815260d460209081526040808320938a1683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff169281019290925291925061191b90612c7b565b6001600160a01b038089165f90815260d460209081526040808320938b1683529290522090915061194d908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388811692908a169133917f48e198b6ae357e529204ee53a8e514c470ff77d9cc8e4f7207f8b5d490ae6934919081900360600190a450505050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca82815481106119e9576119e9613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b6001600160a01b038281165f90815260d46020908152604080832093851683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff16928101929092529061171890612c7b565b60ca545f905b63ffffffff811615611b0f578260ca611ac86001846143ca565b63ffffffff1681548110611ade57611ade613f71565b905f5260205f2090600202015f015403611afd576117186001826143ca565b80611b07816143e6565b915050611aae565b5060405163504570e360e01b815260040160405180910390fd5b81611b3381612475565b611b505760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa158015611bb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd89190613f56565b80611c6c575060405163ba1a84e560e01b81526001600160a01b0384811660048301525f917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed9091169063ba1a84e590602401602060405180830381865afa158015611c46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6a9190614404565b115b611c895760405163fb494ea160e01b815260040160405180910390fd5b6110c0838361304b565b611c9b6127ce565b6001600160a01b038116611d055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6113c181612f3c565b5f54610100900460ff1615808015611d2c57505f54600160ff909116105b80611d455750303b158015611d4557505f5460ff166001145b611da85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611cfc565b5f805460ff191660011790558015611dc9575f805461ff0019166101001790555b611dd2856128cb565b611ddb86612f3c565b611de484612f8d565b611ded83612d28565b611df6826130ae565b8015611e3b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6008611e4e8161244a565b83611e5881612475565b611e755760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063260dc75890611ec1908790600401613f48565b602060405180830381865afa158015611edc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f009190613f56565b611f1d57604051631fb1705560e21b815260040160405180910390fd5b60cb545f90611f3990600160a01b900463ffffffff164261431a565b6001600160a01b0387165f90815260d66020526040812091925090611f6b90826116cf6116ca368b90038b018b614362565b6001600160a01b0388165f90815260d660205260408120919250611fb09190611f9c6116ca368b90038b018b614362565b81526020019081526020015f208684613119565b866001600160a01b0316336001600160a01b03167f14918b3834ab6752eb2e1b489b6663a67810efb5f56f3944a97ede8ecf1fd9f18885858a604051611ff9949392919061441b565b60405180910390a350505050505050565b5f6001610eee6020840184613a33565b60036120258161244a565b60cb546001600160a01b0316331461205057604051635c427cd960e01b815260040160405180910390fd5b60ca5463ffffffff831610612078576040516394a8d38960e01b815260040160405180910390fd5b5f60ca8363ffffffff168154811061209257612092613f71565b905f5260205f20906002020190508060010160089054906101000a900460ff16156120d057604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061210157604051630c36f66560e21b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e905f90a2505050565b6121536131e8565b6066548019821981161461217a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6121c28161244a565b6121ca61251f565b5f5b828110156110b557368484838181106121e7576121e7613f71565b90506020028101906121f99190614250565b335f81815260ce6020908152604080832054905194955093919261222392909185918791016142e2565b60405160208183030381529060405280519060200120905061224483612908565b335f90815260cf602090815260408083208484529091529020805460ff191660019081179091556122769083906141f0565b335f81815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e6281906122bd908890614308565b60405180910390a46122de333060408601803590610cf29060208901613a33565b5050506001016121cc565b60046122f48161244a565b335f90815260d1602052604090205460ff1661232357604051635c427cd960e01b815260040160405180910390fd5b61232b61251f565b5f5b828110156110b5573684848381811061234857612348613f71565b905060200281019061235a9190614250565b335f81815260ce6020908152604080832054905194955093919261238492909185918791016142e2565b6040516020818303038152906040528051906020012090506123a583612908565b335f90815260d2602090815260408083208484529091529020805460ff191660019081179091556123d79083906141f0565b335f81815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b9061241e908890614308565b60405180910390a461243f333060408601803590610cf29060208901613a33565b50505060010161232d565b606654600160ff83161b908116036113c15760405163840a48d560e01b815260040160405180910390fd5b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af11580156124fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137a9190613f56565b6002609754036125715760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611cfc565b6002609755565b5f6125ab612586838061444f565b6125966080860160608701613cc5565b6125a660a0870160808801613cc5565b613299565b5f6125b9604084018461444f565b9050116125d95760405163796cc52560e01b815260040160405180910390fd5b426125ea60a0840160808501613cc5565b6125fa6080850160608601613cc5565b612604919061431a565b63ffffffff16106126285760405163150358a160e21b815260040160405180910390fd5b5f80805b612639604086018661444f565b905081101561272a5736612650604087018761444f565b8381811061266057612660613f71565b6040029190910191505f90506126796020830183613a33565b6001600160a01b0316036126a057604051630863a45360e11b815260040160405180910390fd5b6126ad6020820182613a33565b6001600160a01b0316836001600160a01b0316106126de576040516310fb47f160e31b815260040160405180910390fd5b5f816020013511612702576040516310eb483f60e21b815260040160405180910390fd5b61270f6020820182613a33565b925061271f6020820135856141f0565b93505060010161262c565b506f4b3b4ca85a86c47a098a223fffffffff82111561275c5760405163070b5a6f60e21b815260040160405180910390fd5b5092915050565b6040516001600160a01b038085166024830152831660448201526064810182905261131f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613597565b6033546001600160a01b031633146113d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611cfc565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561288a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ae9190613f56565b6113d657604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b612935612915828061444f565b6129256080850160608601613cc5565b6125a660a0860160808701613cc5565b5f816040013511612959576040516310eb483f60e21b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff8160400135111561298e5760405163070b5a6f60e21b815260040160405180910390fd5b6129be63ffffffff7f0000000000000000000000000000000000000000000000000000000000278d0016426141f0565b6129ce6080830160608401613cc5565b63ffffffff1611156113c157604051637ee2b44360e01b815260040160405180910390fd5b5f60ca612a036020850185613cc5565b63ffffffff1681548110612a1957612a19613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050612a798382612d99565b5f612a8a6080850160608601613a33565b6001600160a01b038082165f90815260cc60205260409020549192501680612aaf5750805b336001600160a01b03821614612ad857604051635c427cd960e01b815260040160405180910390fd5b5f5b612ae760a0870187614494565b9050811015611e3b5736612afe60e088018861444f565b83818110612b0e57612b0e613f71565b6001600160a01b0387165f90815260cd602090815260408083209302949094019450929091508290612b4290850185613a33565b6001600160a01b03166001600160a01b031681526020019081526020015f2054905080826020013511612b885760405163aa385e8160e01b815260040160405180910390fd5b5f612b97826020850135614228565b6001600160a01b0387165f90815260cd60209081526040822092935085018035929190612bc49087613a33565b6001600160a01b031681526020808201929092526040015f2091909155612c059089908390612bf590870187613a33565b6001600160a01b0316919061366a565b86516001600160a01b03808a1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce3190612c496020890189613a33565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101612ada565b5f816040015163ffffffff165f1480612cad5750815161ffff908116148015612cad5750816040015163ffffffff1642105b15612cc557505060cb54600160e01b900461ffff1690565b816040015163ffffffff16421015612cde57815161137a565b506020015190565b919050565b60605f612cf78361369a565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b806060015115612dbc57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff16421015612de757604051631437a2bb60e31b815260040160405180910390fd5b612df460c0830183614494565b9050612e0360a0840184614494565b905014612e23576040516343714afd60e01b815260040160405180910390fd5b612e3060e083018361444f565b9050612e3f60c0840184614494565b905014612e5f576040516343714afd60e01b815260040160405180910390fd5b8051612e8b90612e756040850160208601613cc5565b612e8260408601866144d9565b866060016136c1565b5f5b612e9a60a0840184614494565b90508110156110c057612f346080840135612eb860a0860186614494565b84818110612ec857612ec8613f71565b9050602002016020810190612edd9190613cc5565b612eea60c0870187614494565b85818110612efa57612efa613f71565b9050602002810190612f0c91906144d9565b612f1960e089018961444f565b87818110612f2957612f29613f71565b905060400201613765565b600101612e8d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb905f90a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b5f815f0151826020015163ffffffff1660405160200161303392919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261137a9061451b565b6001600160a01b038083165f81815260cc602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca3129190a4505050565b60cb546040805161ffff600160e01b9093048316815291831660208301527fe6cd4edfdcc1f6d130ab35f73d72378f3a642944fb4ee5bd84b7807a81ea1c4e910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b61271061ffff831611156131405760405163891c63df60e01b815260040160405180910390fd5b8254600160201b900463ffffffff16421161316e57604051637b1e25c560e01b815260040160405180910390fd5b8254600160201b900463ffffffff165f0361319557825461ffff191661ffff1783556131ac565b825462010000810461ffff1661ffff199091161783555b825463ffffffff909116600160201b0267ffffffff000000001961ffff90931662010000029290921667ffffffffffff00001990911617179055565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613244573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613268919061453e565b6001600160a01b0316336001600160a01b0316146113d65760405163794821ff60e01b815260040160405180910390fd5b826132b75760405163796cc52560e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000005c490063ffffffff168163ffffffff16111561330457604051630dd0b9f560e21b815260040160405180910390fd5b61332e7f00000000000000000000000000000000000000000000000000000000000151808261456d565b63ffffffff16156133525760405163ee66470560e01b815260040160405180910390fd5b5f8163ffffffff16116133785760405163cb3f434d60e01b815260040160405180910390fd5b6133a27f00000000000000000000000000000000000000000000000000000000000151808361456d565b63ffffffff16156133c657604051633c1a94f160e21b815260040160405180910390fd5b8163ffffffff167f000000000000000000000000000000000000000000000000000000000076a70063ffffffff16426133ff9190614228565b1115801561343957508163ffffffff167f0000000000000000000000000000000000000000000000000000000065fb788063ffffffff1611155b6134565760405163041aa75760e11b815260040160405180910390fd5b5f805b84811015611e3b575f86868381811061347457613474613f71565b61348a9260206040909202019081019150613a33565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063663c1de490602401602060405180830381865afa1580156134f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135179190613f56565b8061353e57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61355b57604051632efd965160e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03161061358d5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101613459565b5f6135eb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137a39092919063ffffffff16565b905080515f148061360b57508080602001905181019061360b9190613f56565b6110c05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611cfc565b6040516001600160a01b0383166024820152604481018290526110c090849063a9059cbb60e01b90606401612797565b5f60ff8216601f81111561137a57604051632cd44ac360e21b815260040160405180910390fd5b6136cc602083614594565b6001901b8463ffffffff16106136f45760405162c6c39d60e71b815260040160405180910390fd5b5f6136fe82610edf565b905061374884848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92508591505063ffffffff89166137b9565b611e3b576040516369ca16c960e01b815260040160405180910390fd5b613770602083614594565b6001901b8463ffffffff16106137995760405163054ff4df60e51b815260040160405180910390fd5b5f6136fe8261200a565b60606137b184845f856137ee565b949350505050565b5f836137d8576040516329e7276760e11b815260040160405180910390fd5b836137e48685856138c5565b1495945050505050565b60608247101561384f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611cfc565b5f5f866001600160a01b0316858760405161386a91906145a7565b5f6040518083038185875af1925050503d805f81146138a4576040519150601f19603f3d011682016040523d82523d5f602084013e6138a9565b606091505b50915091506138ba87838387613982565b979650505050505050565b5f83515f036138d5575081611718565b602084516138e391906145bd565b15613901576040516313717da960e21b815260040160405180910390fd5b8260205b85518111613962576139186002856145bd565b5f0361393957815f528086015160205260405f209150600284049350613950565b808601515f528160205260405f2091506002840493505b61395b6020826141f0565b9050613905565b5082156137b1576040516363df817160e01b815260040160405180910390fd5b606083156139f05782515f036139e9576001600160a01b0385163b6139e95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611cfc565b50816137b1565b6137b18383815115613a055781518083602001fd5b8060405162461bcd60e51b8152600401611cfc9190613c90565b6001600160a01b03811681146113c1575f5ffd5b5f60208284031215613a43575f5ffd5b813561171881613a1f565b5f60408284031215613a5e575f5ffd5b50919050565b5f5f83601f840112613a74575f5ffd5b5081356001600160401b03811115613a8a575f5ffd5b6020830191508360208260051b8501011115613aa4575f5ffd5b9250929050565b5f5f5f60608486031215613abd575f5ffd5b613ac78585613a4e565b925060408401356001600160401b03811115613ae1575f5ffd5b613aed86828701613a64565b9497909650939450505050565b80151581146113c1575f5ffd5b5f5f60408385031215613b18575f5ffd5b8235613b2381613a1f565b91506020830135613b3381613afa565b809150509250929050565b5f60208284031215613b4e575f5ffd5b5035919050565b5f60408284031215613b65575f5ffd5b6117188383613a4e565b5f5f60208385031215613b80575f5ffd5b82356001600160401b03811115613b95575f5ffd5b613ba185828601613a64565b90969095509350505050565b5f6101008284031215613a5e575f5ffd5b5f5f60408385031215613bcf575f5ffd5b82356001600160401b03811115613be4575f5ffd5b613bf085828601613bad565b9250506020830135613b3381613a1f565b803563ffffffff81168114612ce6575f5ffd5b5f5f60408385031215613c25575f5ffd5b82359150613c3560208401613c01565b90509250929050565b5f5f5f60408486031215613c50575f5ffd5b83356001600160401b03811115613c65575f5ffd5b613c7186828701613a64565b9094509250506020840135613c8581613a1f565b809150509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613cd5575f5ffd5b61171882613c01565b5f60208284031215613cee575f5ffd5b813560ff81168114611718575f5ffd5b5f60208284031215613d0e575f5ffd5b81356001600160401b03811115613d23575f5ffd5b6137b184828501613bad565b5f5f60408385031215613d40575f5ffd5b8235613d4b81613a1f565b946020939093013593505050565b5f5f60408385031215613d6a575f5ffd5b8235613d7581613a1f565b91506020830135613b3381613a1f565b5f5f5f60408486031215613d97575f5ffd5b8335613da281613a1f565b925060208401356001600160401b03811115613ae1575f5ffd5b5f5f60608385031215613dcd575f5ffd5b8235613dd881613a1f565b9150613c358460208501613a4e565b803561ffff81168114612ce6575f5ffd5b5f60208284031215613e08575f5ffd5b61171882613de7565b5f5f60408385031215613e22575f5ffd5b8235613e2d81613a1f565b9150613c3560208401613de7565b5f5f5f60608486031215613e4d575f5ffd5b8335613e5881613a1f565b92506020840135613e6881613a1f565b9150613e7660408501613de7565b90509250925092565b5f5f5f5f5f60a08688031215613e93575f5ffd5b8535613e9e81613a1f565b9450602086013593506040860135613eb581613a1f565b9250613ec360608701613c01565b9150613ed160808701613de7565b90509295509295909350565b5f5f5f60808486031215613eef575f5ffd5b8335613efa81613a1f565b9250613f098560208601613a4e565b9150613e7660608501613de7565b8035613f2281613a1f565b6001600160a01b0316825263ffffffff613f3e60208301613c01565b1660208301525050565b6040810161137a8284613f17565b5f60208284031215613f66575f5ffd5b815161171881613afa565b634e487b7160e01b5f52603260045260245ffd5b5f823560be19833603018112613f99575f5ffd5b9190910192915050565b5f5f8335601e19843603018112613fb8575f5ffd5b83016020810192503590506001600160401b03811115613fd6575f5ffd5b8060061b3603821315613aa4575f5ffd5b8183526020830192505f815f5b8481101561404a57813561400781613a1f565b6001600160a01b0316865260208201356bffffffffffffffffffffffff8116808214614031575f5ffd5b6020880152506040958601959190910190600101613ff4565b5093949350505050565b5f5f8335601e19843603018112614069575f5ffd5b83016020810192503590506001600160401b03811115614087575f5ffd5b803603821315613aa4575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f6140c88283613fa3565b60c085526140da60c086018284613fe7565b91505060208301356140eb81613a1f565b6001600160a01b031660208501526141066040840184613fa3565b858303604087015280835290915f91906020015b8183101561415557833561412d81613a1f565b6001600160a01b0316815260208481013590820152604093840193600193909301920161411a565b61416160608701613c01565b63ffffffff81166060890152935061417b60808701613c01565b63ffffffff81166080890152935061419660a0870187614054565b9450925086810360a08801526138ba818585614095565b60018060a01b0384168152826020820152606060408201525f6141d360608301846140bd565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561137a5761137a6141dc565b61420d8185613f17565b826040820152608060608201525f6141d360808301846140bd565b8181038181111561137a5761137a6141dc565b5f81614249576142496141dc565b505f190190565b5f8235609e19833603018112613f99575f5ffd5b5f61426f8283613fa3565b60a0855261428160a086018284613fe7565b915050602083013561429281613a1f565b6001600160a01b031660208501526040838101359085015263ffffffff6142bb60608501613c01565b16606085015263ffffffff6142d260808501613c01565b1660808501528091505092915050565b60018060a01b0384168152826020820152606060408201525f6141d36060830184614264565b602081525f6117186020830184614264565b63ffffffff818116838216019081111561137a5761137a6141dc565b5f823560fe19833603018112613f99575f5ffd5b828152604060208201525f6137b160408301846140bd565b5f6040828403128015614373575f5ffd5b50604080519081016001600160401b03811182821017156143a257634e487b7160e01b5f52604160045260245ffd5b60405282356143b081613a1f565b81526143be60208401613c01565b60208201529392505050565b63ffffffff828116828216039081111561137a5761137a6141dc565b5f63ffffffff8216806143fb576143fb6141dc565b5f190192915050565b5f60208284031215614414575f5ffd5b5051919050565b60a081016144298287613f17565b63ffffffff94909416604082015261ffff92831660608201529116608090910152919050565b5f5f8335601e19843603018112614464575f5ffd5b8301803591506001600160401b0382111561447d575f5ffd5b6020019150600681901b3603821315613aa4575f5ffd5b5f5f8335601e198436030181126144a9575f5ffd5b8301803591506001600160401b038211156144c2575f5ffd5b6020019150600581901b3603821315613aa4575f5ffd5b5f5f8335601e198436030181126144ee575f5ffd5b8301803591506001600160401b03821115614507575f5ffd5b602001915036819003821315613aa4575f5ffd5b80516020808301519190811015613a5e575f1960209190910360031b1b16919050565b5f6020828403121561454e575f5ffd5b815161171881613a1f565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff83168061458257614582614559565b8063ffffffff84160691505092915050565b5f826145a2576145a2614559565b500490565b5f82518060208501845e5f920191825250919050565b5f826145cb576145cb614559565b50069056fea26469706673582212206dbbfe6d9d917793b8f1980334a263452c714349f8a1f22c946501a37caf87fd64736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "2": { - "address": "0x1111111111111111111111111111111111111111", - "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c80632baeceb71461004e5780638381f58a146100585780638da5cb5b14610073578063d826f88f1461009e575b5f5ffd5b6100566100a6565b005b6100605f5481565b6040519081526020015b60405180910390f35b600154610086906001600160a01b031681565b6040516001600160a01b03909116815260200161006a565b61005661010d565b5f5f54116100fb5760405162461bcd60e51b815260206004820152601f60248201527f4e756d6265722073686f756c642062652067726561746572207468616e20300060448201526064015b60405180910390fd5b60015f54610109919061016d565b5f55565b6001546001600160a01b031633146101675760405162461bcd60e51b815260206004820152601760248201527f4f6e6c792063616c6c61626c65206279206f776e65722100000000000000000060448201526064016100f2565b600a5f55565b8181038181111561018c57634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220ac5899491afd834afd223fd632497d1c0c7593961eda22f04c58db4b504999cf64736f6c634300081c0033000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000000a", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } + "address": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0", + "code": "0x6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063c298557814602a575b5f5ffd5b5f60405190815260200160405180910390f3fea264697066735822122022ac219b35ffb81be6ac40f64b3aa0c62efd14025f34ec85b771c37562ecb39e64736f6c634300081c00330000", + "storage": {} }, "19": { "address": "0xc5a5C42992dECbae36851359345FE25997F5C42d", @@ -284,128 +612,57 @@ "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "5": { - "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", - "code": "0x739fe46736679d2d9a65f0992f2272de9f3c7fa6e03014608060405260043610610055575f3560e01c80634a283cd91461005957806376b1d08f1461007a578063fd10ebe514610099578063fe65a388146100d2575b5f5ffd5b818015610064575f5ffd5b50610078610073366004610aed565b6100f1565b005b610082600881565b60405160ff90911681526020015b60405180910390f35b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0546040516001600160401b039091168152602001610090565b8180156100dd575f5ffd5b506100786100ec366004610b67565b610202565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab906001600160a01b0316806101e4578260405161015990610ae0565b908152602001604051809103905ff080158015610178573d5f5f3e3d5ffd5b505f84815260028401602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251878152918201529192507f7c96960a1ebd8cc753b10836ea25bd7c9c4f8cd43590db1e8b3648cb0ec4cc89910160405180910390a1505050565b604051630d82532d60e21b815260040160405180910390fd5b505050565b61028d336102448a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061029792505050565b61024e888a610c98565b87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508891506102bf9050565b5050505050505050565b6040805180820182525f80825260606020928301528251808401909352825281019190915290565b6102c761056c565b6001600160801b033411156102ef576040516330e972ad60e01b815260040160405180910390fd5b6102f98183610d8e565b6001600160801b03163410156103225760405163044044a560e21b815260040160405180910390fd5b5f61034c7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b796105c5565b90506103616001600160a01b0382163461061d565b8451600810156103845760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561039e5761039e610c54565b6040519080825280602002602001820160405280156103e357816020015b604080518082019091525f8152606060208201528152602001906001900390816103bc5790505b5090505f5b86518110156104385761041387828151811061040657610406610dad565b6020026020010151610646565b82828151811061042557610425610dad565b60209081029190910101526001016103e8565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab9061048f906001600160401b03166001610dc1565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a81526020018881526020018688346104f09190610de0565b6104fa9190610de0565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c91610558916001600160401b0316908490610e56565b60405180910390a150505050505050505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff1660018111156105a4576105a4610f6b565b146105c257604051633ac4266d60e11b815260040160405180910390fd5b50565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106185760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f5f5f5f85875af19050806101fd57604051633d2cec6f60e21b815260040160405180910390fd5b604080518082019091525f815260606020820152602082015160ff165f819003610698575f5f848060200190518101906106809190610f7f565b925092505061068f82826106b1565b95945050505050565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166107245760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b03161161074d5760405163162908e360e11b815260040160405180910390fd5b6001810154610783576001820154610770906001600160a01b0316863387610821565b61077a858561089d565b9250505061081b565b61078c81610919565b1561080257604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b1580156107de575f5ffd5b505af11580156107f0573d5f5f3e3d5ffd5b5050505061077a81600101548561092d565b604051636890662960e01b815260040160405180910390fd5b92915050565b610833836001600160a01b0316610987565b6108505760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036108795760405163162908e360e11b815260040160405180910390fd5b6108976001600160a01b03841683866001600160801b0385166109cd565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060015b60408051601f1981840301815291905290529392505050565b5f61092682600101541590565b1592915050565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a90529151169581019590955292939083019101610900565b5f6001600160a01b0382163f1580159061081b5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b6040516001600160a01b038085166024830152831660448201526064810182905261089790859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b031683604051610a3b9190610fd9565b5f604051808303815f865af19150503d805f8114610a74576040519150601f19603f3d011682016040523d82523d5f602084013e610a79565b606091505b50915091505f828015610aa4575081511580610aa4575081806020019051810190610aa49190610fef565b9050801580610abb57506001600160a01b0385163b155b15610ad95760405163022e258160e11b815260040160405180910390fd5b5050505050565b61032e8061101683390190565b5f60208284031215610afd575f5ffd5b5035919050565b5f5f83601f840112610b14575f5ffd5b5081356001600160401b03811115610b2a575f5ffd5b602083019150836020828501011115610b41575f5ffd5b9250929050565b6001600160801b03811681146105c2575f5ffd5b803561061881610b48565b5f5f5f5f5f5f5f5f60a0898b031215610b7e575f5ffd5b88356001600160401b03811115610b93575f5ffd5b610b9f8b828c01610b04565b90995097505060208901356001600160401b03811115610bbd575f5ffd5b8901601f81018b13610bcd575f5ffd5b80356001600160401b03811115610be2575f5ffd5b8b60208260051b8401011115610bf6575f5ffd5b6020919091019650945060408901356001600160401b03811115610c18575f5ffd5b610c248b828c01610b04565b9095509350610c37905060608a01610b5c565b9150610c4560808a01610b5c565b90509295985092959890939650565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610c9057610c90610c54565b604052919050565b5f6001600160401b03831115610cb057610cb0610c54565b8260051b610cc060208201610c68565b84815290830190602081019036831115610cd8575f5ffd5b845b83811015610d705780356001600160401b03811115610cf7575f5ffd5b860136601f820112610d07575f5ffd5b80356001600160401b03811115610d2057610d20610c54565b610d33601f8201601f1916602001610c68565b818152366020838501011115610d47575f5ffd5b816020840160208301375f60208383010152808652505050602083019250602081019050610cda565b5095945050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561081b5761081b610d7a565b634e487b7160e01b5f52603260045260245ffd5b6001600160401b03818116838216019081111561081b5761081b610d7a565b6001600160801b03828116828216039081111561081b5761081b610d7a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f602082015160406020850152610e4e6040850182610dff565b949350505050565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b81811015610edd5761013f19878603018352610ec8858551610e2d565b94506020938401939290920191600101610eab565b505050506040840151838203603f19016080850152610efc8282610e2d565b9150506060840151603f198483030160a0850152610f1a8282610dff565b9150506080840151610f3760c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b634e487b7160e01b5f52602160045260245ffd5b5f5f5f60608486031215610f91575f5ffd5b835160ff81168114610fa1575f5ffd5b60208501519093506001600160a01b0381168114610fbd575f5ffd5b6040850151909250610fce81610b48565b809150509250925092565b5f82518060208501845e5f920191825250919050565b5f60208284031215610fff575f5ffd5b8151801515811461100e575f5ffd5b939250505056fe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea2646970667358221220c0cb81d4a21d0eba005b3a8e586341c26034d8b6f4bc7492f673795b56a1044c64736f6c634300081c0033a2646970667358221220ff9ad2d70749be87d0c380d588ef8b110f0571497cd39b7a7a730dff306b302764736f6c634300081c003300", - "storage": {} + "17": { + "address": "0x00000000219ab540356cBB839Cbe05303d7705Fa", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033000000000000000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", + "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", + "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c" + } }, "1": { "address": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", "code": "0x73cf7ed3acca5a467e9e704c703e8d87f634fb0fc9301460806040526004361061003f575f3560e01c806307bd0ac214610043578063d3b08db81461006c575b5f5ffd5b61005661005136600461046d565b61007f565b60405161006391906104d9565b60405180910390f35b61005661007a36600461050e565b610093565b606061008d825f0151610093565b92915050565b805180516060915f83815b83518163ffffffff1610156101385781848263ffffffff16815181106100c6576100c6610548565b60200260200101516040516020016100f6919060609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526101149291602001610573565b604051602081830303815290604052915080806101309061059b565b91505061009e565b50630e02a00760e31b5f8061014c876101de565b8465ff000000ff00600888811b91821664ff000000ff918a901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b6040516020016101c4969594939291906105bf565b604051602081830303815290604052945050505050919050565b6060603f8263ffffffff161161021b57604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff161161027a576102576102436403fffffffc600285901b166001610618565b600881811b62ffff001691901c60ff161790565b604051602001610205919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116102ec576102c960028363ffffffff16901b60026102a59190610618565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b604051602001610205919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b166021820152602501610205565b634e487b7160e01b5f52604160045260245ffd5b6040516020810167ffffffffffffffff8111828210171561036b5761036b610334565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561039a5761039a610334565b604052919050565b5f602082840312156103b2575f5ffd5b6103ba610348565b9050813567ffffffffffffffff8111156103d2575f5ffd5b8201601f810184136103e2575f5ffd5b803567ffffffffffffffff8111156103fc576103fc610334565b8060051b61040c60208201610371565b91825260208184018101929081019087841115610427575f5ffd5b6020850194505b8385101561046057843592506001600160a01b038316831461044e575f5ffd5b8282526020948501949091019061042e565b8552509295945050505050565b5f6020828403121561047d575f5ffd5b813567ffffffffffffffff811115610493575f5ffd5b8201602081850312156104a4575f5ffd5b6104ac610348565b813567ffffffffffffffff8111156104c2575f5ffd5b6104ce868285016103a2565b825250949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561051e575f5ffd5b813567ffffffffffffffff811115610534575f5ffd5b610540848285016103a2565b949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f610540610581838661055c565b8461055c565b634e487b7160e01b5f52601160045260245ffd5b5f63ffffffff821663ffffffff81036105b6576105b6610587565b60010192915050565b6001600160e01b0319871681526001600160f81b03198681166004830152851660058201525f6105fb6105f5600684018761055c565b8561055c565b6001600160c01b0319939093168352505060080195945050505050565b63ffffffff818116838216019081111561008d5761008d61058756fea264697066735822122064d14af60f7f121dcaa0364e895e1cb3e4e2892f0afa0f9f6a37ca15600bf89064736f6c634300081c003300", "storage": {} }, - "20": { - "address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", - "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806346fbf68e1461004e5780638568520614610085578063ce5484281461009a578063eab66d7a146100ad575b5f5ffd5b61007061005c36600461027a565b5f6020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009861009336600461029a565b6100d8565b005b6100986100a836600461027a565b610111565b6001546100c0906001600160a01b031681565b6040516001600160a01b03909116815260200161007c565b6001546001600160a01b031633146101035760405163794821ff60e01b815260040160405180910390fd5b61010d8282610148565b5050565b6001546001600160a01b0316331461013c5760405163794821ff60e01b815260040160405180910390fd5b610145816101cf565b50565b6001600160a01b03821661016f576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101f6576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b0381168114610275575f5ffd5b919050565b5f6020828403121561028a575f5ffd5b6102938261025f565b9392505050565b5f5f604083850312156102ab575f5ffd5b6102b48361025f565b9150602083013580151581146102c8575f5ffd5b80915050925092905056fea26469706673582212201a99f894857b167b091c80bd2c73660fbd5db1980dc2aba8a60483cf6658603864736f6c634300081c0033000000000000000000", - "storage": { - "0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", - "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "31": { - "address": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", - "storage": { - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000007a2088a1bfc9d81c55368ae168c2c02570cb814f", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "32": { - "address": "0x998abeb3E57409262aE5b751f60747921B33613E", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000032": "0x00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778", - "0x0000000000000000000000000000000000000000000000000000000000000064": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x000000000000000000000000000000000000000000084595161401484a000000", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "36": { - "address": "0x4c5859f0F772848b2D91F1D83E2Fe57935348029", - "code": "0x6080604052600436106100dc575f3560e01c806389628aae1161007c578063cb34386611610057578063cb34386614610252578063d5d2334e14610271578063dc3d04ec14610290578063de1164bb146102af575f5ffd5b806389628aae146101de578063996c826d14610214578063b5ad921514610233575f5ffd5b8063421a48f1116100b7578063421a48f114610178578063634e941e146101975780636bec7a8a146101ab57806373238eea146101bf575f5ffd5b806307619439146100e757806334a408de14610135578063385050a014610157575f5ffd5b366100e357005b5f5ffd5b3480156100f2575f5ffd5b50610120610101366004610b58565b600260209081525f928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b348015610140575f5ffd5b506101496102e2565b60405190815260200161012c565b348015610162575f5ffd5b50610176610171366004610bca565b610305565b005b348015610183575f5ffd5b50610176610192366004610c41565b6103bb565b3480156101a2575f5ffd5b50600154610149565b3480156101b6575f5ffd5b50610149610559565b3480156101ca575f5ffd5b506101496101d9366004610d51565b61058e565b3480156101e9575f5ffd5b505f546101fc906001600160a01b031681565b6040516001600160a01b03909116815260200161012c565b34801561021f575f5ffd5b5061017661022e366004610d68565b6105d5565b34801561023e575f5ffd5b5061014961024d366004610d51565b6106b0565b34801561025d575f5ffd5b5061017661026c366004610dd6565b6106cf565b34801561027c575f5ffd5b5061012061028b366004610b58565b610739565b34801561029b575f5ffd5b506101766102aa366004610d51565b610766565b3480156102ba575f5ffd5b506101fc7f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d81565b6001545f9080156102fd576102f8600182610e0c565b6102ff565b5f5b91505090565b336001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d161461034e57604051631d398edb60e21b815260040160405180910390fd5b5f61035e88888888888888610841565b905061036a8882610a44565b604080518781526020810183905288916001600160a01b038b16917fe70fa5d19a11141e50cd498b4c414117e245020b932ad936b6849c801ead0c6d91015b60405180910390a35050505050505050565b336001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d161461040457604051631d398edb60e21b815260040160405180910390fd5b88871415806104135750888114155b8061041e5750888514155b806104295750888314155b156104475760405163512509d360e11b815260040160405180910390fd5b5f805b8a8110156104f7576104e38d8d8d8481811061046857610468610e1f565b905060200201358c8c8581811061048157610481610e1f565b905060200201358b8b8681811061049a5761049a610e1f565b905060200201358a8a878181106104b3576104b3610e1f565b905060200201358989888181106104cc576104cc610e1f565b90506020028101906104de9190610e33565b610841565b6104ed9083610e79565b915060010161044a565b506105028c82610a44565b8b6001600160a01b03167fcbf0ff2d6fe9e6a847d3c0ef7bbd651ffa2f2202ffcf87fe3525de0a52c377ce8c8c8c8c86604051610543959493929190610ebc565b60405180910390a2505050505050505050505050565b6001545f9080156102fd5760016105708183610e0c565b8154811061058057610580610e1f565b905f5260205f2001546102ff565b6001545f9082106105b25760405163b4bf916f60e01b815260040160405180910390fd5b600182815481106105c5576105c5610e1f565b905f5260205f2001549050919050565b336001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d161461061e57604051631d398edb60e21b815260040160405180910390fd5b6001545f036106405760405163497e1e9560e01b815260040160405180910390fd5b600180545f9161064f91610e0c565b90505f61066188838989898989610841565b905061066d8882610a44565b604080518881526020810183905283916001600160a01b038b16917fe70fa5d19a11141e50cd498b4c414117e245020b932ad936b6849c801ead0c6d91016103a9565b600181815481106106bf575f80fd5b5f91825260209091200154905081565b336001600160a01b037f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d161461071857604051631d398edb60e21b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382165f90815260026020908152604080832084845290915290205460ff165b92915050565b5f546001600160a01b0316331461079057604051630c19625760e41b815260040160405180910390fd5b6001545f9061079f575f6107c8565b600180546107ae908290610e0c565b815481106107be576107be610e1f565b905f5260205f2001545b6001805480820182555f919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf681018490556040805183815260208101839052929350909184917fa6375fe0b7c0c893b64bdb62ecaef8ac300fe0be36b61a01c53df136f18bdc31910160405180910390a2505050565b6001545f9087106108655760405163b4bf916f60e01b815260040160405180910390fd5b6001600160a01b0388165f9081526002602090815260408083208a845290915290205460ff16156108a957604051636aecca4960e11b815260040160405180910390fd5b604051631a984a0160e31b81526001600160a01b03808a16600483015289915f917f000000000000000000000000809d550fca64d94bd9f66e60752a544199cfac3d169063d4c2500890602401602060405180830381865afa158015610911573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109359190610ef5565b90506001600160a01b0381161561094a578091505b5f8260088a811b63ff00ff001662ff00ff918c901c9190911617601081811b91901c1760e01b60405160609290921b6bffffffffffffffffffffffff191660208301526001600160e01b031916603482015260380160405160208183030381529060405290505f818051906020012090505f6109e560018d815481106109d2576109d2610e1f565b905f5260205f200154838b8d8c8c610ab9565b905080610a055760405163582f497d60e11b815260040160405180910390fd5b5050506001600160a01b039099165f9081526002602090815260408083209a835299905297909720805460ff1916600117905550939695505050505050565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610a8d576040519150601f19603f3d011682016040523d82523d5f602084013e610a92565b606091505b5050905080610ab45760405163baf91eeb60e01b815260040160405180910390fd5b505050565b5f838510610ac857505f610b27565b855f5b83811015610b21575f858583818110610ae657610ae6610e1f565b905060200201359050808310610b08575f818152602084905260409020610b16565b5f8381526020829052604090205b925050600101610acb565b50871490505b9695505050505050565b6001600160a01b0381168114610b45575f5ffd5b50565b8035610b5381610b31565b919050565b5f5f60408385031215610b69575f5ffd5b8235610b7481610b31565b946020939093013593505050565b5f5f83601f840112610b92575f5ffd5b50813567ffffffffffffffff811115610ba9575f5ffd5b6020830191508360208260051b8501011115610bc3575f5ffd5b9250929050565b5f5f5f5f5f5f5f60c0888a031215610be0575f5ffd5b8735610beb81610b31565b96506020880135955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115610c22575f5ffd5b610c2e8a828b01610b82565b989b979a50959850939692959293505050565b5f5f5f5f5f5f5f5f5f5f5f60c08c8e031215610c5b575f5ffd5b610c648c610b48565b9a5060208c013567ffffffffffffffff811115610c7f575f5ffd5b610c8b8e828f01610b82565b909b5099505060408c013567ffffffffffffffff811115610caa575f5ffd5b610cb68e828f01610b82565b90995097505060608c013567ffffffffffffffff811115610cd5575f5ffd5b610ce18e828f01610b82565b90975095505060808c013567ffffffffffffffff811115610d00575f5ffd5b610d0c8e828f01610b82565b90955093505060a08c013567ffffffffffffffff811115610d2b575f5ffd5b610d378e828f01610b82565b915080935050809150509295989b509295989b9093969950565b5f60208284031215610d61575f5ffd5b5035919050565b5f5f5f5f5f5f60a08789031215610d7d575f5ffd5b8635610d8881610b31565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff811115610db8575f5ffd5b610dc489828a01610b82565b979a9699509497509295939492505050565b5f60208284031215610de6575f5ffd5b8135610df181610b31565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561076057610760610df8565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112610e48575f5ffd5b83018035915067ffffffffffffffff821115610e62575f5ffd5b6020019150600581901b3603821315610bc3575f5ffd5b8082018082111561076057610760610df8565b8183525f6001600160fb1b03831115610ea3575f5ffd5b8260051b80836020870137939093016020019392505050565b606081525f610ecf606083018789610e8c565b8281036020840152610ee2818688610e8c565b9150508260408301529695505050505050565b5f60208284031215610f05575f5ffd5b8151610df181610b3156fea26469706673582212205dedbc9bcca794696ae9be392650fb1718b1e57473f18be8f08c483004874b8164736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000ac06641381166cf085281c45292147f833c622d7" - } - }, - "42": { - "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707", - "code": "0x735fc8d32690cc91d4c39d9d3abcbd16989f875707301460806040526004361061006b575f3560e01c8063017b73111461006f578063253946451461009057806365529675146100af5780638257f3d5146100ce578063ae8a4d98146100ed578063fe1aa59d1461010c575b5f5ffd5b81801561007a575f5ffd5b5061008e61008936600461080c565b61012b565b005b81801561009b575f5ffd5b5061008e6100aa36600461080c565b610155565b8180156100ba575f5ffd5b5061008e6100c9366004610860565b6101db565b8180156100d9575f5ffd5b5061008e6100e836600461080c565b610267565b8180156100f8575f5ffd5b5061008e61010736600461080c565b6102f8565b818015610117575f5ffd5b5061008e6101263660046108ae565b610328565b5f610138828401846109a7565b9050610150815f0151826020015183604001516103a5565b505050565b5f61016282840184610a68565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c73936101aa9390929091600401610b1b565b5f6040518083038186803b1580156101c0575f5ffd5b505af41580156101d2573d5f5f3e3d5ffd5b50505050505050565b5f6101e882840184610b4a565b90505f6102147f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79610414565b82519091506001600160a01b0316610248576102438582846020015185604001516001600160801b031661046c565b610260565b6102608582845f0151856020015186604001516104c9565b5050505050565b5f61027482840184610b7b565b80517e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab805492935091829060ff1916600183818111156102b5576102b5610bc9565b021790555081516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916102ea91610bdd565b60405180910390a150505050565b5f61030582840184610c03565b9050610322815f015182602001518360400151846060015161052e565b50505050565b5f61033582840184610cbd565b90505f61034186610414565b90505f825f01518360200151846040015160405160240161036493929190610d45565b60408051601f198184030181529190526020810180516001600160e01b031663c6b295c160e01b179052905061039b828783610679565b5050505050505050565b5f6103af84610705565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610402575f5ffd5b505af115801561039b573d5f5f3e3d5ffd5b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806104675760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506104c1848683610679565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506101d2858783610679565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156105a457604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516105b4906107bb565b6105c093929190610d78565b604051809103905ff0801580156105d9573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016106ab929190610db0565b5f604051808303815f875af11580156106c6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106ed9190810190610ddb565b915091506106fb8282610796565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b031661077a5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156107a55750806107b5565b81511561006b5781518083602001fd5b92915050565b610c3580610e6883390190565b5f5f83601f8401126107d8575f5ffd5b5081356001600160401b038111156107ee575f5ffd5b602083019150836020828501011115610805575f5ffd5b9250929050565b5f5f6020838503121561081d575f5ffd5b82356001600160401b03811115610832575f5ffd5b61083e858286016107c8565b90969095509350505050565b80356001600160a01b0381168114610467575f5ffd5b5f5f5f60408486031215610872575f5ffd5b61087b8461084a565b925060208401356001600160401b03811115610895575f5ffd5b6108a1868287016107c8565b9497909650939450505050565b5f5f5f5f606085870312156108c1575f5ffd5b843593506108d16020860161084a565b925060408501356001600160401b038111156108eb575f5ffd5b6108f7878288016107c8565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561093957610939610903565b60405290565b604051608081016001600160401b038111828210171561093957610939610903565b604051601f8201601f191681016001600160401b038111828210171561098957610989610903565b604052919050565b80356001600160801b0381168114610467575f5ffd5b5f60608284031280156109b8575f5ffd5b506109c1610917565b823581526109d16020840161084a565b60208201526109e260408401610991565b60408201529392505050565b5f6001600160401b03821115610a0657610a06610903565b50601f01601f191660200190565b5f82601f830112610a23575f5ffd5b8135602083015f610a3b610a36846109ee565b610961565b9050828152858383011115610a4e575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610a78575f5ffd5b81356001600160401b03811115610a8d575f5ffd5b820160608185031215610a9e575f5ffd5b610aa6610917565b610aaf8261084a565b81526020828101359082015260408201356001600160401b03811115610ad3575f5ffd5b610adf86828501610a14565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610b416060830184610aed565b95945050505050565b5f6060828403128015610b5b575f5ffd5b50610b64610917565b610b6d8361084a565b81526109d16020840161084a565b5f6020828403128015610b8c575f5ffd5b50604051602081016001600160401b0381118282101715610baf57610baf610903565b604052823560028110610bc0575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610bfd57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610c13575f5ffd5b81356001600160401b03811115610c28575f5ffd5b820160808185031215610c39575f5ffd5b610c4161093f565b8135815260208201356001600160401b03811115610c5d575f5ffd5b610c6986828501610a14565b60208301525060408201356001600160401b03811115610c87575f5ffd5b610c9386828501610a14565b6040830152506060820135915060ff82168214610cae575f5ffd5b60608101919091529392505050565b5f60208284031215610ccd575f5ffd5b81356001600160401b03811115610ce2575f5ffd5b820160608185031215610cf3575f5ffd5b610cfb610917565b610d048261084a565b815260208201356001600160401b03811115610d1e575f5ffd5b610d2a86828501610a14565b60208301525060408201356040820152809250505092915050565b6001600160a01b03841681526060602082018190525f90610d6890830185610aed565b9050826040830152949350505050565b606081525f610d8a6060830186610aed565b8281036020840152610d9c8186610aed565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f90610dd390830184610aed565b949350505050565b5f5f60408385031215610dec575f5ffd5b82518015158114610dfb575f5ffd5b60208401519092506001600160401b03811115610e16575f5ffd5b8301601f81018513610e26575f5ffd5b8051610e34610a36826109ee565b818152866020838501011115610e48575f5ffd5b8160208401602083015e5f60208383010152809350505050925092905056fe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea26469706673582212206e92e725aba5f5550fb3f5ffd2c5ed89d59eb518a48403936f0c95f5ffcfb03c64736f6c634300081c0033a264697066735822122057c86ab7845ab189514742f4c1a1279eb154e0f4c7de005facec0db80fa75a9164736f6c634300081c003300", - "storage": {} - }, - "37": { - "address": "0x0165878A594ca255338adfa4d48449f69242Eb8F", - "code": "0x730165878a594ca255338adfa4d48449f69242eb8f3014608060405260043610610034575f3560e01c8063439fab9114610038575b5f5ffd5b818015610043575f5ffd5b50610057610052366004610683565b610059565b005b5f6100827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036100a8576040516282b42960e81b815260040160405180910390fd5b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f6100d584840185610760565b8051835491925090839060ff1916600183818111156100f6576100f6610802565b02179055505f7f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f1b60405161012b90610676565b908152602001604051809103905ff08015801561014a573d5f5f3e3d5ffd5b507f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f908152600285016020908152604080832080546001600160a01b0319166001600160a01b0386169081179091558151608081018352848152808401859052808301859052606081019190915260018085528089019093529220825181549495509293909291839160ff19169083818111156101ea576101ea610802565b02179055506020828101518254604080860151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178355606093840151600193840180546001600160a01b0319166001600160a01b0392831617905581516080810183525f808252818501819052818401819052918716958101959095526002815287840190925290208251815491929091839160ff199091169083818111156102ae576102ae610802565b021790555060208201518154604080850151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178255606090920151600190910180546001600160a01b0319166001600160a01b03909216919091179055515f907f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b799061035290610676565b908152602001604051809103905ff080158015610371573d5f5f3e3d5ffd5b507f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b795f908152600286016020908152604080832080546001600160a01b0319166001600160a01b038616908117909155815160808101835284815280840185905280830185905260608101919091528151637061726160e01b81850152607d60e31b6024820152825180820360080181526028909101835280519084012084526001808a019093529220825181549495509293909291839160ff191690838181111561043f5761043f610802565b021790555060208201518154604084015167ffffffffffffffff908116600160481b0267ffffffffffffffff60481b19919093166101000216610100600160881b031990911617178155606090910151600190910180546001600160a01b039092166001600160a01b03199092169190911790555f6104db7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f690565b60408501518155602080860151600180840180546fffffffffffffffffffffffffffffffff19166001600160801b0393841617905560c08801516002909401939093557f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f80546001600160a01b03969096166001600160c01b031990961695909517607d60a31b1790945560a08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23155606086015160808701518516600160801b02908516177f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c2305560e08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23380546101009889015190961690970270ffffffffffffffffffffffffffffffffff1990951660ff9091161793909317909455505f80527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e9052507f8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d805460ff19169091179055505050565b61032e8061081783390190565b5f5f60208385031215610694575f5ffd5b823567ffffffffffffffff8111156106aa575f5ffd5b8301601f810185136106ba575f5ffd5b803567ffffffffffffffff8111156106d0575f5ffd5b8560208284010111156106e1575f5ffd5b6020919091019590945092505050565b604051610120810167ffffffffffffffff8111828210171561072157634e487b7160e01b5f52604160045260245ffd5b60405290565b803560028110610735575f5ffd5b919050565b80356001600160801b0381168114610735575f5ffd5b803560ff81168114610735575f5ffd5b5f610120828403128015610772575f5ffd5b5061077b6106f1565b61078483610727565b81526107926020840161073a565b6020820152604083810135908201526107ad6060840161073a565b60608201526107be6080840161073a565b608082015260a0838101359082015260c080840135908201526107e360e08401610750565b60e08201526107f5610100840161073a565b6101008201529392505050565b634e487b7160e01b5f52602160045260245ffdfe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea2646970667358221220c0cb81d4a21d0eba005b3a8e586341c26034d8b6f4bc7492f673795b56a1044c64736f6c634300081c0033a2646970667358221220f976f98d9ad95ec6c4454218896ddf11e168fe0618b6db14199d0ee5634348af64736f6c634300081c0033000000000000000000000000", - "storage": {} - }, - "30": { - "address": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", - "storage": { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b570", - "0x6f48904484b35701cf1f41ad9068b394adf7e2f8a59d2309a04d10a155eaa72b": "0x0000000000000000000000004c5859f0f772848b2d91f1d83e2fe57935348029", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x00000000000000000000000014dc79964da2c08b23698b3d3cc7ca32193d9955", - "0x0000000000000000000000000000000000000000000000000000000000000099": "0x0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688" - } - }, "34": { "address": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x000003e80000000000001c2090f79bf6eb2c4f870365e785982e1f101e93b906", "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" - } - }, - "41": { - "address": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF", - "code": "0x60806040526004361061003e575f3560e01c806305b1137b1461004257806325ccedec14610063578063c6b295c114610082578063d0e30db014610061575b5f5ffd5b34801561004d575f5ffd5b5061006161005c36600461025e565b6100a1565b005b34801561006e575f5ffd5b5061006161007d366004610288565b6100b8565b34801561008d575f5ffd5b5061006161009c3660046102ef565b6100da565b6100b46001600160a01b038316826100f7565b5050565b6100d56001600160a01b038416836001600160801b038416610120565b505050565b5f6100e6848484610171565b9050806100f1575f5ffd5b50505050565b5f5f5f5f5f85875af19050806100d557604051633d2cec6f60e21b815260040160405180910390fd5b6040516001600160a01b0383166024820152604481018290526100d590849060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610188565b5f5f5f5f85516020870186895af195945050505050565b5f5f836001600160a01b0316836040516101a291906103be565b5f604051808303815f865af19150503d805f81146101db576040519150601f19603f3d011682016040523d82523d5f602084013e6101e0565b606091505b50915091505f82801561020b57508151158061020b57508180602001905181019061020b91906103d4565b905080158061022257506001600160a01b0385163b155b156102405760405163022e258160e11b815260040160405180910390fd5b5050505050565b6001600160a01b038116811461025b575f5ffd5b50565b5f5f6040838503121561026f575f5ffd5b823561027a81610247565b946020939093013593505050565b5f5f5f6060848603121561029a575f5ffd5b83356102a581610247565b925060208401356102b581610247565b915060408401356001600160801b03811681146102d0575f5ffd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610301575f5ffd5b833561030c81610247565b9250602084013567ffffffffffffffff811115610327575f5ffd5b8401601f81018613610337575f5ffd5b803567ffffffffffffffff811115610351576103516102db565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610380576103806102db565b604052818152828201602001881015610397575f5ffd5b816020840160208301375f9181016020019190915293969395505050506040919091013590565b5f82518060208501845e5f920191825250919050565b5f602082840312156103e4575f5ffd5b815180151581146103f3575f5ffd5b939250505056fea2646970667358221220e15b63f91e6991821f65737cac336991d5cc359c4ff89ae5c1bfc80c0760985864736f6c634300081c003300", - "storage": {} - }, - "17": { - "address": "0x00000000219ab540356cBB839Cbe05303d7705Fa", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033000000000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", - "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784", - "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c" + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001" } }, "35": { @@ -415,101 +672,79 @@ "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "4": { - "address": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570", - "code": "0x60806040526004361061028b575f3560e01c8063a0169ddd11610155578063ce7b5e4b116100be578063e481af9d11610078578063e481af9d14610808578063ec8d974a14610827578063f2fde38b14610846578063fc299dee14610865578063fce36c7d14610884578063fe776c2a146108a2575f5ffd5b8063ce7b5e4b14610708578063d156b91114610727578063d4c250081461076f578063de1164bb146107a3578063e0d52aef146107b5578063e2148f5a146107e9575f5ffd5b8063b7b791e71161010f578063b7b791e714610659578063ba55088014610678578063be6ab6ef14610697578063c1a8e2c5146106ab578063c63fd502146106ca578063c968095b146106e9575f5ffd5b8063a0169ddd1461058f578063a364f4da146105ae578063a8315705146105cd578063a98fb355146105ec578063a9a899cd1461060b578063b52657871461062a575f5ffd5b806360d83ebb116101f75780638da5cb5b116101b15780638da5cb5b146104da5780638f661996146104f75780638f8ee5521461050a5780639926ee7d146105325780639da16d8e146105515780639df63f8914610570575f5ffd5b806360d83ebb1461042b578063715018a61461044a578063769993421461045e57806383821e8e1461047d578063847d634f1461049c57806385d11611146104bb575f5ffd5b8063303ca95611610248578063303ca9561461036257806333cfb7b71461038157806336ff3e4c146103ad5780633bc28c8c146103cc57806357e44355146103eb57806359b005341461040c575f5ffd5b80630ca298991461028f5780631500cd8d146102b05780631785f53c146102cf5780631fdb0cfd146102ee578063279432eb1461030d5780632fb31ef11461032c575b5f5ffd5b34801561029a575f5ffd5b506102ae6102a936600461293f565b6108d0565b005b3480156102bb575f5ffd5b506102ae6102ca3660046129b8565b610b55565b3480156102da575f5ffd5b506102ae6102e93660046129b8565b610ba6565b3480156102f9575f5ffd5b506102ae6103083660046129d3565b610c2e565b348015610318575f5ffd5b506102ae6103273660046129b8565b610cba565b348015610337575f5ffd5b506099546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b34801561036d575f5ffd5b506102ae61037c366004612a27565b610d16565b34801561038c575f5ffd5b506103a061039b3660046129b8565b610e37565b6040516103599190612a87565b3480156103b8575f5ffd5b506102ae6103c7366004612ae5565b610e7f565b3480156103d7575f5ffd5b506102ae6103e63660046129b8565b610f34565b3480156103f6575f5ffd5b506103ff610f95565b6040516103599190612b87565b348015610417575f5ffd5b506102ae6104263660046129b8565b6111aa565b348015610436575f5ffd5b506102ae610445366004612b99565b611294565b348015610455575f5ffd5b506102ae611306565b348015610469575f5ffd5b506102ae610478366004612bce565b611319565b348015610488575f5ffd5b506102ae610497366004612c03565b611373565b3480156104a7575f5ffd5b506102ae6104b6366004612c39565b61158a565b3480156104c6575f5ffd5b506102ae6104d5366004612c77565b611613565b3480156104e5575f5ffd5b506033546001600160a01b0316610345565b6102ae610505366004612d98565b6116d4565b348015610515575f5ffd5b5061051d5f81565b60405163ffffffff9091168152602001610359565b34801561053d575f5ffd5b506102ae61054c366004612dc9565b611794565b34801561055c575f5ffd5b506102ae61056b3660046129b8565b611802565b34801561057b575f5ffd5b506102ae61058a366004612e10565b61185e565b34801561059a575f5ffd5b506102ae6105a93660046129b8565b611910565b3480156105b9575f5ffd5b506102ae6105c83660046129b8565b611966565b3480156105d8575f5ffd5b506102ae6105e7366004612c39565b6119d4565b3480156105f7575f5ffd5b506102ae610606366004612f81565b611a2e565b348015610616575f5ffd5b506102ae6106253660046129b8565b611a84565b348015610635575f5ffd5b506106496106443660046129b8565b611ad4565b6040519015158152602001610359565b348015610664575f5ffd5b506102ae610673366004612b99565b611b50565b348015610683575f5ffd5b506102ae6106923660046129d3565b611bb5565b3480156106a2575f5ffd5b506103a0611c0f565b3480156106b6575f5ffd5b506102ae6106c5366004612fd4565b611cb7565b3480156106d5575f5ffd5b506102ae6106e4366004613080565b611d1f565b3480156106f4575f5ffd5b506102ae610703366004612c39565b611edf565b348015610713575f5ffd5b506102ae610722366004612bce565b611f39565b348015610732575f5ffd5b506103ff6040518060400160405280601a81526020017f68747470733a2f2f64617461686176656e2e6e6574776f726b2f00000000000081525081565b34801561077a575f5ffd5b506103456107893660046129b8565b609a6020525f90815260409020546001600160a01b031681565b3480156107ae575f5ffd5b5030610345565b3480156107c0575f5ffd5b506103456107cf36600461313f565b60666020525f90815260409020546001600160a01b031681565b3480156107f4575f5ffd5b506102ae6108033660046129b8565b611f93565b348015610813575f5ffd5b50604080515f8152602081019091526103a0565b348015610832575f5ffd5b506102ae610841366004613158565b611fe6565b348015610851575f5ffd5b506102ae6108603660046129b8565b6121c5565b348015610870575f5ffd5b50606554610345906001600160a01b031681565b34801561088f575f5ffd5b506102ae61089e366004612c39565b5050565b3480156108ad575f5ffd5b506106496108bc3660046129b8565b60986020525f908152604090205460ff1681565b6108d861223e565b5f5b81811015610a41575f805b8484848181106108f7576108f7613227565b9050602002810190610909919061323b565b610917906040810190613259565b90508110156109815784848481811061093257610932613227565b9050602002810190610944919061323b565b610952906040810190613259565b8281811061096257610962613227565b9050604002016020013582610977919061329e565b91506001016108e5565b506109ce33308387878781811061099a5761099a613227565b90506020028101906109ac919061323b565b6109bd9060408101906020016129b8565b6001600160a01b0316929190612269565b610a387f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae82868686818110610a0557610a05613227565b9050602002810190610a17919061323b565b610a289060408101906020016129b8565b6001600160a01b031691906122da565b506001016108da565b50604051630ca2989960e01b81526001600160a01b037f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae1690630ca2989990610a92908690869086906004016133d7565b5f604051808303815f87803b158015610aa9575f5ffd5b505af1158015610abb573d5f5f3e3d5ffd5b505060405162461bcd60e51b815260206004820152605460248201527f536572766963654d616e61676572426173653a206372656174654f706572617460448201527f6f7244697265637465644f70657261746f72536574526577617264735375626d6064820152731a5cdcda5bdb881a5cc819195c1c9958d85d195960621b608482015260a4019150610b4c9050565b60405180910390fd5b610b5d612384565b609980546001600160a01b0319166001600160a01b0383169081179091556040517f6a8a174b559440c4e231f06fda7f0eb644f79306c33292fbb95f7602bef9aaf9905f90a250565b610bae612384565b60405163268959e560e01b81523060048201526001600160a01b0382811660248301527f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c169063268959e5906044015b5f604051808303815f87803b158015610c15575f5ffd5b505af1158015610c27573d5f5f3e3d5ffd5b5050505050565b610c36612384565b604051634a86c03760e11b81526001600160a01b037f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c169063950d806e90610c88903090879087908790600401613575565b5f604051808303815f87803b158015610c9f575f5ffd5b505af1158015610cb1573d5f5f3e3d5ffd5b50505050505050565b610cc2612384565b60405163eb5a4e8760e01b81523060048201526001600160a01b0382811660248301527f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c169063eb5a4e8790604401610bfe565b6001600160a01b0383163014610d3f57604051631280731d60e21b815260040160405180910390fd5b60018114610d605760405163f37f411760e01b815260040160405180910390fd5b5f82828281610d7157610d71613227565b9050602002016020810190610d86919061313f565b63ffffffff1614610daa5760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b0384165f908152609a6020526040812080546001600160a01b03191690558290829081610de057610de0613227565b9050602002016020810190610df5919061313f565b63ffffffff16846001600160a01b03167f2638d53da645bac898f1b50bd1d6d2a4d389e3141e209c988488abced5c3c54c60405160405180910390a350505050565b60606001600160a01b038216610e79575f5b604051908082528060200260200182016040528015610e72578160200160208202803683370190505b5092915050565b5f610e49565b63ffffffff87165f908152606660205260409020546001600160a01b031680610ebb57604051636ce6e39d60e11b815260040160405180910390fd5b610ec533896123de565b6040516301c2828560e51b81526001600160a01b0382169063385050a090610efd9033908b908b908b908b908b908b906004016135d8565b5f604051808303815f87803b158015610f14575f5ffd5b505af1158015610f26573d5f5f3e3d5ffd5b505050505050505050505050565b610f3c612384565b6065546001600160a01b0316610f51826124a4565b816001600160a01b0316816001600160a01b03167fa499ec18d14a183a8ce150f6d1a61fe68e989121c8aa695bafde5305f1eee81c60405160405180910390a35050565b6040805180820182523081525f602082018190529151633743aedd60e11b8152606092907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690636e875dba90610ff890859060040161361e565b5f60405180830381865afa158015611012573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110399190810190613644565b90505f81516001600160401b0381111561105557611055612e7b565b60405190808252806020026020018201604052801561107e578160200160208202803683370190505b5090505f5b825181101561110d57609a5f8483815181106110a1576110a1613227565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f9054906101000a90046001600160a01b03168282815181106110ed576110ed613227565b6001600160a01b0390921660209283029190910190910152600101611083565b5060408051602080820183528382528251908101835281815291516303de856160e11b815290919073cf7ed3acca5a467e9e704c703e8d87f634fb0fc9906307bd0ac29061115f9084906004016136dd565b5f60405180830381865af4158015611179573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526111a0919081019061373f565b9550505050505090565b6040805180820182523081525f602082015290516333869dd160e11b81527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03169063670d3ba29061120990339085906004016137b3565b602060405180830381865afa158015611224573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124891906137e9565b6112655760405163668191af60e11b815260040160405180910390fd5b50335f908152609a6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b61129c612384565b63ffffffff82165f908152606660205260409020546001600160a01b0316806112d857604051636ce6e39d60e11b815260040160405180910390fd5b60405163659a1c3360e11b81526001600160a01b03838116600483015282169063cb34386690602401610c88565b61130e612384565b6113175f612505565b565b611321612384565b604051630287f75160e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed16906350feea2090610c88903090879087908790600401613846565b61137b61223e565b5f805b61138b6040840184613259565b90508110156113d0576113a16040840184613259565b828181106113b1576113b1613227565b90506040020160200135826113c6919061329e565b915060010161137e565b506114067f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae82610a2860408601602087016129b8565b6040805160018082528183019092525f91816020015b6114676040518060c00160405280606081526020015f6001600160a01b03168152602001606081526020015f63ffffffff1681526020015f63ffffffff168152602001606081525090565b81526020019060019003908161141c57905050905061148583613994565b815f8151811061149757611497613227565b6020908102919091018101919091526040805180820182523081525f9281019290925251630ca2989960e01b81527f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae6001600160a01b031690630ca29899906115069084908690600401613aa2565b5f604051808303815f87803b15801561151d575f5ffd5b505af115801561152f573d5f5f3e3d5ffd5b505050507fb6d94e6419560f5b19430e640113c0926ed3c399cb053a26a2324b5b29f18e81838580604001906115659190613259565b60405161157c939250918252602082015260400190565b60405180910390a150505050565b611592612384565b604051630130fc2760e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063261f84e0906115e290309086908690600401613c43565b5f604051808303815f87803b1580156115f9575f5ffd5b505af115801561160b573d5f5f3e3d5ffd5b505050505050565b63ffffffff8b165f908152606660205260409020546001600160a01b03168061164f57604051636ce6e39d60e11b815260040160405180910390fd5b611659338d6123de565b60405163421a48f160e01b81526001600160a01b0382169063421a48f1906116999033908f908f908f908f908f908f908f908f908f908f90600401613ce7565b5f604051808303815f87803b1580156116b0575f5ffd5b505af11580156116c2573d5f5f3e3d5ffd5b50505050505050505050505050505050565b6116dc612384565b5f6116e5610f95565b6099549091506001600160a01b031663f2e500b234835f60405190808252806020026020018201604052801561172f57816020015b606081526020019060019003908161171a5790505b5060405180602001604052805f81525088886040518763ffffffff1660e01b8152600401611761959493929190613dbc565b5f604051808303818588803b158015611778575f5ffd5b505af115801561178a573d5f5f3e3d5ffd5b5050505050505050565b60405162461bcd60e51b815260206004820152603760248201527f536572766963654d616e61676572426173653a2072656769737465724f70657260448201527f61746f72546f41565320697320646570726563617465640000000000000000006064820152608401610b4c565b61180a612384565b604051634f906cf960e01b81523060048201526001600160a01b0382811660248301527f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c1690634f906cf990604401610bfe565b63ffffffff86165f908152606660205260409020546001600160a01b03168061189a57604051636ce6e39d60e11b815260040160405180910390fd5b6118a433886123de565b60405163996c826d60e01b81526001600160a01b0382169063996c826d906118da9033908a908a908a908a908a90600401613e66565b5f604051808303815f87803b1580156118f1575f5ffd5b505af1158015611903573d5f5f3e3d5ffd5b5050505050505050505050565b611918612384565b60405163a0169ddd60e01b81526001600160a01b0382811660048301527f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae169063a0169ddd90602401610bfe565b60405162461bcd60e51b815260206004820152603b60248201527f536572766963654d616e61676572426173653a20646572656769737465724f7060448201527f657261746f7246726f6d415653206973206465707265636174656400000000006064820152608401610b4c565b6119dc612384565b60405163b66bd98960e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063b66bd989906115e29030905f9087908790600401613846565b611a36612384565b60405163a982182160e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a982182190610bfe9030908590600401613ea5565b611a8c612384565b6001600160a01b0381165f81815260986020526040808220805460ff19169055517fdf2097d1af3ac651476385ff7048eefcbc11072c13100fa1d966effaf2ea3e549190a250565b5f306001600160a01b031663de1164bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b11573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b359190613ec8565b6001600160a01b0316826001600160a01b0316149050919050565b611b58612384565b63ffffffff82165f8181526066602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519092917f27edaab75145ee342b0e713bf4e77340f11892871c5021dc92da21d3cc7fb54191a35050565b611bbd612384565b604051630664120160e01b81526001600160a01b037f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c1690630664120190610c88903090879087908790600401613575565b6040805180820182523081525f6020820152905163105dea1f60e21b8152606091907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c90611c7090849060040161361e565b5f60405180830381865afa158015611c8a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cb19190810190613ee3565b91505090565b604080516060810182526001600160a01b0380851682523060208301528183018490529151636e3492b560e01b815290917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1690636e3492b590610c88908490600401613f72565b6001600160a01b0385163014611d4857604051631280731d60e21b815260040160405180910390fd5b60018314611d695760405163b1698da560e01b815260040160405180910390fd5b5f84848281611d7a57611d7a613227565b9050602002016020810190611d8f919061313f565b63ffffffff1614611db35760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b0386165f9081526098602052604090205460ff16611deb57604051630444d2e160e21b815260040160405180910390fd5b60148114611e3b5760405162461bcd60e51b815260206004820181905260248201527f496e76616c696420736f6c6f636861696e2061646472657373206c656e6774686044820152606401610b4c565b611e458183613fe0565b6001600160a01b0387165f908152609a6020526040812080546001600160a01b03191660609390931c929092179091558490849081611e8657611e86613227565b9050602002016020810190611e9b919061313f565b63ffffffff16866001600160a01b03167f3ed331d6c3431aecc422f169b89a3c24f9e23cef141e10631262a3fc865f513a60405160405180910390a3505050505050565b611ee7612384565b604051630287f75160e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed16906350feea20906115e29030905f9087908790600401613846565b611f41612384565b60405163b66bd98960e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063b66bd98990610c88903090879087908790600401613846565b611f9b612384565b6001600160a01b0381165f81815260986020526040808220805460ff19166001179055517f5045083cd90f33bcbd2689f0152c6fd980a5bc506dff19aed51f534e2a49ecee9190a250565b5f54610100900460ff161580801561200457505f54600160ff909116105b8061201d5750303b15801561201d57505f5460ff166001145b6120805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b4c565b5f805460ff1916600117905580156120a1575f805461ff0019166101001790555b6120ab8585612556565b604080518082018252601a81527f68747470733a2f2f64617461686176656e2e6e6574776f726b2f0000000000006020820152905163a982182160e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169163a982182191612129913091600401613ea5565b5f604051808303815f87803b158015612140575f5ffd5b505af1158015612152573d5f5f3e3d5ffd5b5050505061215f836125d2565b609980546001600160a01b0319166001600160a01b0384161790558015610c27575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6121cd612384565b6001600160a01b0381166122325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b4c565b61223b81612505565b50565b6065546001600160a01b0316331461131757604051638e79fdb560e01b815260040160405180910390fd5b6040516001600160a01b03808516602483015283166044820152606481018290526122d49085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612697565b50505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015612327573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061234b9190614020565b90506122d48463095ea7b360e01b85612364868661329e565b6040516001600160a01b039092166024830152604482015260640161229d565b6033546001600160a01b031633146113175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b4c565b60408051808201825230815263ffffffff8316602082015290516333869dd160e11b81527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03169063670d3ba29061244390869085906004016137b3565b602060405180830381865afa15801561245e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248291906137e9565b61249f576040516325555eff60e11b815260040160405180910390fd5b505050565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a15050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166125c05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610b4c565b6125c982612505565b61089e816124a4565b6040805160018082528183019092525f91816020015b604080518082019091525f8152606060208201528152602001906001900390816125e857905050905060405180604001604052805f63ffffffff16815260200183815250815f8151811061263e5761263e613227565b6020908102919091010152604051630130fc2760e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063261f84e0906115e29030908590600401614037565b5f6126eb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661276a9092919063ffffffff16565b905080515f148061270b57508080602001905181019061270b91906137e9565b61249f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b4c565b606061277884845f85612782565b90505b9392505050565b6060824710156127e35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b4c565b5f5f866001600160a01b031685876040516127fe91906140ed565b5f6040518083038185875af1925050503d805f8114612838576040519150601f19603f3d011682016040523d82523d5f602084013e61283d565b606091505b509150915061284e8783838761285b565b925050505b949350505050565b606083156128c95782515f036128c2576001600160a01b0385163b6128c25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b4c565b5081612853565b61285383838151156128de5781518083602001fd5b8060405162461bcd60e51b8152600401610b4c9190612b87565b5f5f83601f840112612908575f5ffd5b5081356001600160401b0381111561291e575f5ffd5b6020830191508360208260051b8501011115612938575f5ffd5b9250929050565b5f5f5f8385036060811215612952575f5ffd5b604081121561295f575f5ffd5b5083925060408401356001600160401b0381111561297b575f5ffd5b612987868287016128f8565b9497909650939450505050565b6001600160a01b038116811461223b575f5ffd5b80356129b381612994565b919050565b5f602082840312156129c8575f5ffd5b813561277b81612994565b5f5f5f606084860312156129e5575f5ffd5b83356129f081612994565b92506020840135612a0081612994565b915060408401356001600160e01b031981168114612a1c575f5ffd5b809150509250925092565b5f5f5f5f60608587031215612a3a575f5ffd5b8435612a4581612994565b93506020850135612a5581612994565b925060408501356001600160401b03811115612a6f575f5ffd5b612a7b878288016128f8565b95989497509550505050565b602080825282518282018190525f918401906040840190835b81811015612ac75783516001600160a01b0316835260209384019390920191600101612aa0565b509095945050505050565b803563ffffffff811681146129b3575f5ffd5b5f5f5f5f5f5f5f60c0888a031215612afb575f5ffd5b612b0488612ad2565b96506020880135955060408801359450606088013593506080880135925060a08801356001600160401b03811115612b3a575f5ffd5b612b468a828b016128f8565b989b979a50959850939692959293505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61277b6020830184612b59565b5f5f60408385031215612baa575f5ffd5b612bb383612ad2565b91506020830135612bc381612994565b809150509250929050565b5f5f5f60408486031215612be0575f5ffd5b612be984612ad2565b925060208401356001600160401b0381111561297b575f5ffd5b5f60208284031215612c13575f5ffd5b81356001600160401b03811115612c28575f5ffd5b820160c0818503121561277b575f5ffd5b5f5f60208385031215612c4a575f5ffd5b82356001600160401b03811115612c5f575f5ffd5b612c6b858286016128f8565b90969095509350505050565b5f5f5f5f5f5f5f5f5f5f5f60c08c8e031215612c91575f5ffd5b612c9a8c612ad2565b9a5060208c01356001600160401b03811115612cb4575f5ffd5b612cc08e828f016128f8565b909b5099505060408c01356001600160401b03811115612cde575f5ffd5b612cea8e828f016128f8565b90995097505060608c01356001600160401b03811115612d08575f5ffd5b612d148e828f016128f8565b90975095505060808c01356001600160401b03811115612d32575f5ffd5b612d3e8e828f016128f8565b90955093505060a08c01356001600160401b03811115612d5c575f5ffd5b612d688e828f016128f8565b915080935050809150509295989b509295989b9093969950565b80356001600160801b03811681146129b3575f5ffd5b5f5f60408385031215612da9575f5ffd5b612db283612d82565b9150612dc060208401612d82565b90509250929050565b5f5f60408385031215612dda575f5ffd5b8235612de581612994565b915060208301356001600160401b03811115612dff575f5ffd5b830160608186031215612bc3575f5ffd5b5f5f5f5f5f5f60a08789031215612e25575f5ffd5b612e2e87612ad2565b955060208701359450604087013593506060870135925060808701356001600160401b03811115612e5d575f5ffd5b612e6989828a016128f8565b979a9699509497509295939492505050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715612eb157612eb1612e7b565b60405290565b60405160c081016001600160401b0381118282101715612eb157612eb1612e7b565b604051601f8201601f191681016001600160401b0381118282101715612f0157612f01612e7b565b604052919050565b5f6001600160401b03821115612f2157612f21612e7b565b50601f01601f191660200190565b5f82601f830112612f3e575f5ffd5b8135612f51612f4c82612f09565b612ed9565b818152846020838601011115612f65575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215612f91575f5ffd5b81356001600160401b03811115612fa6575f5ffd5b61285384828501612f2f565b5f6001600160401b03821115612fca57612fca612e7b565b5060051b60200190565b5f5f60408385031215612fe5575f5ffd5b8235612ff081612994565b915060208301356001600160401b0381111561300a575f5ffd5b8301601f8101851361301a575f5ffd5b8035613028612f4c82612fb2565b8082825260208201915060208360051b850101925087831115613049575f5ffd5b6020840193505b828410156130725761306184612ad2565b825260209384019390910190613050565b809450505050509250929050565b5f5f5f5f5f5f60808789031215613095575f5ffd5b86356130a081612994565b955060208701356130b081612994565b945060408701356001600160401b038111156130ca575f5ffd5b6130d689828a016128f8565b90955093505060608701356001600160401b038111156130f4575f5ffd5b8701601f81018913613104575f5ffd5b80356001600160401b03811115613119575f5ffd5b89602082840101111561312a575f5ffd5b60208201935080925050509295509295509295565b5f6020828403121561314f575f5ffd5b61277b82612ad2565b5f5f5f5f6080858703121561316b575f5ffd5b843561317681612994565b9350602085013561318681612994565b925060408501356001600160401b038111156131a0575f5ffd5b8501601f810187136131b0575f5ffd5b80356131be612f4c82612fb2565b8082825260208201915060208360051b8501019250898311156131df575f5ffd5b6020840193505b8284101561320a5783356131f981612994565b8252602093840193909101906131e6565b945061321c92505050606086016129a8565b905092959194509250565b634e487b7160e01b5f52603260045260245ffd5b5f823560be1983360301811261324f575f5ffd5b9190910192915050565b5f5f8335601e1984360301811261326e575f5ffd5b8301803591506001600160401b03821115613287575f5ffd5b6020019150600681901b3603821315612938575f5ffd5b808201808211156132bd57634e487b7160e01b5f52601160045260245ffd5b92915050565b5f5f8335601e198436030181126132d8575f5ffd5b83016020810192503590506001600160401b038111156132f6575f5ffd5b8060061b3603821315612938575f5ffd5b80356001600160601b03811681146129b3575f5ffd5b8183526020830192505f815f5b8481101561336457813561333d81612994565b6001600160a01b03168652602082810135908701526040958601959091019060010161332a565b5093949350505050565b5f5f8335601e19843603018112613383575f5ffd5b83016020810192503590506001600160401b038111156133a1575f5ffd5b803603821315612938575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f6060820185356133e781612994565b6001600160a01b0316835263ffffffff61340360208801612ad2565b166020840152606060408401528390526080600584901b83018101908301855f60be1936839003015b8782101561356757868503607f19018452823581811261344a575f5ffd5b890160c0860161345a82806132c3565b60c0895291829052905f9060e089015b818310156134b557833561347d81612994565b6001600160a01b031681526001600160601b0361349c60208601613307565b166020820152604093840193600193909301920161346a565b6134c1602086016129a8565b6001600160a01b03811660208c015293506134df60408601866132c3565b9450925089810360408b01526134f681858561331d565b935050505061350760608301612ad2565b63ffffffff16606088015261351e60808301612ad2565b63ffffffff16608088015261353660a083018361336e565b925087820360a089015261354b8284836133af565b975050505060208301925060208401935060018201915061342c565b509298975050505050505050565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b8183525f6001600160fb1b038311156135bf575f5ffd5b8260051b80836020870137939093016020019392505050565b60018060a01b038816815286602082015285604082015284606082015283608082015260c060a08201525f61361160c0830184866135a8565b9998505050505050505050565b81516001600160a01b0316815260208083015163ffffffff1690820152604081016132bd565b5f60208284031215613654575f5ffd5b81516001600160401b03811115613669575f5ffd5b8201601f81018413613679575f5ffd5b8051613687612f4c82612fb2565b8082825260208201915060208360051b8501019250868311156136a8575f5ffd5b6020840193505b828410156136d35783516136c281612994565b8252602093840193909101906136af565b9695505050505050565b6020808252825182820182905251604083018290528051606084018190525f929190910190829060808501905b808310156137355783516001600160a01b03168252602093840193600193909301929091019061370a565b5095945050505050565b5f6020828403121561374f575f5ffd5b81516001600160401b03811115613764575f5ffd5b8201601f81018413613774575f5ffd5b8051613782612f4c82612f09565b818152856020838501011115613796575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b6001600160a01b03831681526060810161277b602083018480516001600160a01b0316825260209081015163ffffffff16910152565b5f602082840312156137f9575f5ffd5b8151801515811461277b575f5ffd5b8183526020830192505f815f5b8481101561336457813561382881612994565b6001600160a01b031686526020958601959190910190600101613815565b6001600160a01b038516815263ffffffff841660208201526060604082018190525f906136d39083018486613808565b5f82601f830112613885575f5ffd5b8135613893612f4c82612fb2565b8082825260208201915060208360061b8601019250858311156138b4575f5ffd5b602085015b8381101561373557604081880312156138d0575f5ffd5b6138d8612e8f565b81356138e381612994565b81526138f160208301613307565b6020820152808452506020830192506040810190506138b9565b5f82601f83011261391a575f5ffd5b8135613928612f4c82612fb2565b8082825260208201915060208360061b860101925085831115613949575f5ffd5b602085015b838110156137355760408188031215613965575f5ffd5b61396d612e8f565b813561397881612994565b815260208281013581830152908452929092019160400161394e565b5f60c082360312156139a4575f5ffd5b6139ac612eb7565b82356001600160401b038111156139c1575f5ffd5b6139cd36828601613876565b8252506139dc602084016129a8565b602082015260408301356001600160401b038111156139f9575f5ffd5b613a053682860161390b565b604083015250613a1760608401612ad2565b6060820152613a2860808401612ad2565b608082015260a08301356001600160401b03811115613a45575f5ffd5b613a5136828601612f2f565b60a08301525092915050565b5f8151808452602084019350602083015f5b8281101561336457815180516001600160a01b031687526020908101518188015260409096019590910190600101613a6f565b82516001600160a01b0316815260208084015163ffffffff16908201525f606082016060604084015280845180835260808501915060808160051b8601019250602086015f5b82811015613bf257868503607f190184528151805160c080885281519088018190526020909101905f9060e08901905b80831015613b5857835180516001600160a01b031683526020908101516001600160601b0316818401529093019260019290920191604090910190613b18565b5060208401519250613b7560208a01846001600160a01b03169052565b6040840151925088810360408a0152613b8e8184613a5d565b925050506060820151613ba9606089018263ffffffff169052565b506080820151613bc1608089018263ffffffff169052565b5060a0820151915086810360a0880152613bdb8183612b59565b965050506020938401939190910190600101613ae8565b5092979650505050505050565b5f5f8335601e19843603018112613c14575f5ffd5b83016020810192503590506001600160401b03811115613c32575f5ffd5b8060051b3603821315612938575f5ffd5b6001600160a01b038416815260406020820181905281018290525f6060600584901b830181019083018583603e1936839003015b8782101561356757868503605f190184528235818112613c95575f5ffd5b890163ffffffff613ca582612ad2565b168652613cb56020820182613bff565b915060406020880152613ccc604088018383613808565b96505050602083019250602084019350600182019150613c77565b6001600160a01b038c16815260c0602082018190525f90613d0b9083018c8e6135a8565b8281036040840152613d1e818b8d6135a8565b90508281036060840152613d3381898b6135a8565b90508281036080840152613d488187896135a8565b83810360a08501528481529050602080820190600586901b830101865f5b87811015613da457848303601f19018452613d81828a613bff565b613d8c8582846135a8565b60209687019690955093909301925050600101613d66565b50508093505050509c9b505050505050505050505050565b60a081525f613dce60a0830188612b59565b828103602084015280875180835260208301915060208160051b84010160208a015f5b83811015613e2357601f19868403018552613e0d838351612b59565b6020958601959093509190910190600101613df1565b50508581036040870152613e37818a612b59565b945050505050613e5260608301856001600160801b03169052565b6001600160801b03831660808301526136d3565b60018060a01b038716815285602082015284604082015283606082015260a060808201525f613e9960a0830184866135a8565b98975050505050505050565b6001600160a01b03831681526040602082018190525f9061277890830184612b59565b5f60208284031215613ed8575f5ffd5b815161277b81612994565b5f60208284031215613ef3575f5ffd5b81516001600160401b03811115613f08575f5ffd5b8201601f81018413613f18575f5ffd5b8051613f26612f4c82612fb2565b8082825260208201915060208360051b850101925086831115613f47575f5ffd5b6020840193505b828410156136d3578351613f6181612994565b825260209384019390910190613f4e565b602080825282516001600160a01b039081168383015283820151166040808401919091528301516060808401528051608084018190525f929190910190829060a08501905b808310156137355763ffffffff8451168252602082019150602084019350600183019250613fb7565b80356bffffffffffffffffffffffff198116906014841015610e72576bffffffffffffffffffffffff1960149490940360031b84901b1690921692915050565b5f60208284031215614030575f5ffd5b5051919050565b5f6040820160018060a01b03851683526040602084015280845180835260608501915060608160051b8601019250602086015f5b82811015613bf257868503605f190184528151805163ffffffff168652602090810151604082880181905281519088018190529101905f9060608801905b808310156140d55783516001600160a01b031682526020820191506020840193506001830192506140a9565b5096505050602093840193919091019060010161406b565b5f82518060208501845e5f92019182525091905056fea26469706673582212208cc459d3aa1ab1e8f8a989678bc2692556528dde2321dda852d42a4b1ec0365164736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "38": { - "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "code": "0x735fbdb2315678afecb367f032d93f642f64180aa33014608060405260043610610034575f3560e01c8063e5bad8da14610038575b5f5ffd5b61004b610046366004610256565b61005f565b604051901515815260200160405180910390f35b5f80610079610073368590038501856102fc565b85610104565b90506001600160a01b03851663a401662b8261009860c087018761039b565b8760e001356040518563ffffffff1660e01b81526004016100bc94939291906103e8565b602060405180830381865afa1580156100d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100fb919061042c565b95945050505050565b81515f90819060f81b61013c8560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b85604001516101b287606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b5f5f5f60608486031215610268575f5ffd5b83356001600160a01b038116811461027e575f5ffd5b925060208401359150604084013567ffffffffffffffff8111156102a0575f5ffd5b840161010081870312156102b2575f5ffd5b809150509250925092565b803560ff811681146102cd575f5ffd5b919050565b803563ffffffff811681146102cd575f5ffd5b803567ffffffffffffffff811681146102cd575f5ffd5b5f60c082840312801561030d575f5ffd5b5060405160c0810167ffffffffffffffff8111828210171561033d57634e487b7160e01b5f52604160045260245ffd5b604052610349836102bd565b8152610357602084016102d2565b602082015260408381013590820152610372606084016102e5565b6060820152610383608084016102d2565b608082015260a0928301359281019290925250919050565b5f5f8335601e198436030181126103b0575f5ffd5b83018035915067ffffffffffffffff8211156103ca575f5ffd5b6020019150600581901b36038213156103e1575f5ffd5b9250929050565b84815260606020820181905281018390525f6001600160fb1b0384111561040d575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f6020828403121561043c575f5ffd5b8151801515811461044b575f5ffd5b939250505056fea26469706673582212209f46199c5a6587f6df682c951ec670f911e6e382b25c7b93a0443dd7f0a17b0764736f6c634300081c003300", - "storage": {} - }, - "10": { - "address": "0xc6e7DF5E7b4f2A278906862b61205850344D4e7d", - "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637a8b2637116100bf578063ce7c2ac211610079578063ce7c2ac2146102d7578063d9caed12146102ea578063e3dae51c146102fd578063f3e7387514610310578063fabc1cbc14610323578063fdc371ce14610336575f5ffd5b80637a8b26371461025c578063886f11951461026f5780638c871019146102965780638f6a6240146102a9578063ab5921e1146102bc578063c4d66de8146102c4575f5ffd5b8063485cc95511610110578063485cc955146101e257806354fd4d50146101f5578063553ca5f81461020a578063595c6a671461021d5780635ac86ab7146102255780635c975abb14610254575f5ffd5b8063136439dd1461014c5780632495a5991461016157806339b70e38146101915780633a98ef39146101b857806347e7ef24146101cf575b5f5ffd5b61015f61015a3660046111cb565b610349565b005b603254610174906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101747f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6101c160335481565b604051908152602001610188565b6101c16101dd3660046111f6565b610383565b61015f6101f0366004611220565b6104b2565b6101fd61059d565b6040516101889190611257565b6101c161021836600461128c565b6105cd565b61015f6105e0565b6102446102333660046112bc565b6001805460ff9092161b9081161490565b6040519015158152602001610188565b6001546101c1565b6101c161026a3660046111cb565b6105f4565b6101747f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6101c16102a43660046111cb565b61063d565b6101c16102b736600461128c565b610647565b6101fd610654565b61015f6102d236600461128c565b610674565b6101c16102e536600461128c565b61073a565b6101c16102f83660046112d7565b6107cc565b6101c161030b3660046111cb565b6108ce565b6101c161031e3660046111cb565b610905565b61015f6103313660046111cb565b61090f565b606454610174906001600160a01b031681565b61035161097c565b60015481811681146103765760405163c61dca5d60e01b815260040160405180910390fd5b61037f82610a1f565b5050565b5f5f61038e81610a5c565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816146103d7576040516348da714f60e01b815260040160405180910390fd5b6103e18484610a92565b6033545f6103f16103e883611329565b90505f6103e86103ff610b4b565b6104099190611329565b90505f610416878361133c565b905080610423848961134f565b61042d9190611366565b9550855f0361044f57604051630c392ed360e11b815260040160405180910390fd5b6104598685611329565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561048e57604051632f14e8a360e11b815260040160405180910390fd5b6104a7826103e86033546104a29190611329565b610bb5565b505050505092915050565b5f54610100900460ff16158080156104d057505f54600160ff909116105b806104e95750303b1580156104e957505f5460ff166001145b61050e5760405162461bcd60e51b815260040161050590611385565b60405180910390fd5b5f805460ff19166001179055801561052f575f805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03851617905561055382610c01565b8015610598575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60606105c87f76312e302e300000000000000000000000000000000000000000000000000006610d4c565b905090565b5f6105da61026a8361073a565b92915050565b6105e861097c565b6105f25f19610a1f565b565b5f5f6103e86033546106069190611329565b90505f6103e8610614610b4b565b61061e9190611329565b90508161062b858361134f565b6106359190611366565b949350505050565b5f6105da826108ce565b5f6105da61031e8361073a565b60606040518060800160405280604d8152602001611456604d9139905090565b5f54610100900460ff161580801561069257505f54600160ff909116105b806106ab5750303b1580156106ab57505f5460ff166001145b6106c75760405162461bcd60e51b815260040161050590611385565b5f805460ff1916600117905580156106e8575f805461ff0019166101001790555b6106f182610c01565b801561037f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa1580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105da91906113d3565b5f60016107d881610a5c565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610821576040516348da714f60e01b815260040160405180910390fd5b61082c858585610d89565b6033548084111561085057604051630b469df360e41b815260040160405180910390fd5b5f61085d6103e883611329565b90505f6103e861086b610b4b565b6108759190611329565b905081610882878361134f565b61088c9190611366565b9450610898868461133c565b6033556108b86108a8868361133c565b6103e86033546104a29190611329565b6108c3888887610dcf565b505050509392505050565b5f5f6103e86033546108e09190611329565b90505f6103e86108ee610b4b565b6108f89190611329565b90508061062b838661134f565b5f6105da826105f4565b610917610ec8565b6001548019821981161461093e5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109de573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0291906113ea565b6105f257604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610a71816001805460ff9092161b9081161490565b15610a8f5760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161480610abb57506064546001600160a01b038381169116145b610ad857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b039081169083160361037f57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e906024015f604051808303815f87803b158015610b31575f5ffd5b505af1158015610b43573d5f5f3e3d5ffd5b505050505050565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c891906113d3565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610be984670de0b6b3a764000061134f565b610bf39190611366565b60405190815260200161072e565b5f54610100900460ff16610c6b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610505565b603280546001600160a01b0319166001600160a01b038316179055610c8f5f610a1f565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d259190611409565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b60605f610d5883610f79565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6032546001600160a01b0383811691161480610db257506064546001600160a01b038381169116145b61059857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610eb45760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015610e35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5991906113ea565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb0906024015f604051808303815f87803b158015610e9d575f5ffd5b505af1158015610eaf573d5f5f3e3d5ffd5b505050505b6105986001600160a01b0383168483610fa0565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190611424565b6001600160a01b0316336001600160a01b0316146105f25760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f8111156105da57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610598928692915f9161102f9185169084906110ae565b905080515f148061104f57508080602001905181019061104f91906113ea565b6105985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610505565b606061063584845f85855f5f866001600160a01b031685876040516110d3919061143f565b5f6040518083038185875af1925050503d805f811461110d576040519150601f19603f3d011682016040523d82523d5f602084013e611112565b606091505b50915091506111238783838761112e565b979650505050505050565b6060831561119c5782515f03611195576001600160a01b0385163b6111955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610505565b5081610635565b61063583838151156111b15781518083602001fd5b8060405162461bcd60e51b81526004016105059190611257565b5f602082840312156111db575f5ffd5b5035919050565b6001600160a01b0381168114610a8f575f5ffd5b5f5f60408385031215611207575f5ffd5b8235611212816111e2565b946020939093013593505050565b5f5f60408385031215611231575f5ffd5b823561123c816111e2565b9150602083013561124c816111e2565b809150509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561129c575f5ffd5b81356112a7816111e2565b9392505050565b60ff81168114610a8f575f5ffd5b5f602082840312156112cc575f5ffd5b81356112a7816112ae565b5f5f5f606084860312156112e9575f5ffd5b83356112f4816111e2565b92506020840135611304816111e2565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105da576105da611315565b818103818111156105da576105da611315565b80820281158282048414176105da576105da611315565b5f8261138057634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e3575f5ffd5b5051919050565b5f602082840312156113fa575f5ffd5b815180151581146112a7575f5ffd5b5f60208284031215611419575f5ffd5b81516112a7816112ae565b5f60208284031215611434575f5ffd5b81516112a7816111e2565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220e368a34a430519f5e8420f0d165bca57ada54b2f1ba846645707cb93e4cf8c2564736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "14": { + "13": { "address": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", "code": "0x732279b7a0a67db372996a5fab50d91eaa73d2ebe63014608060405260043610610034575f3560e01c8063a3499c7314610038575b5f5ffd5b818015610043575f5ffd5b50610057610052366004610230565b610059565b005b61006b836001600160a01b03166101b3565b610088576040516303777f6960e51b815260040160405180910390fd5b81836001600160a01b03163f146100b2576040516323e13ec960e21b815260040160405180910390fd5b6100da837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b5f5f846001600160a01b0316836040516024016100f79190610309565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161012c919061033e565b5f60405180830381855af49150503d805f8114610164576040519150601f19603f3d011682016040523d82523d5f602084013e610169565b606091505b509150915061017882826101fd565b506040516001600160a01b038616907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a25050505050565b5f6001600160a01b0382163f158015906101f757507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4706001600160a01b0383163f14155b92915050565b6060821561020c5750806101f7565b8151156100345781518083602001fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610242575f5ffd5b83356001600160a01b0381168114610258575f5ffd5b925060208401359150604084013567ffffffffffffffff81111561027a575f5ffd5b8401601f8101861361028a575f5ffd5b803567ffffffffffffffff8111156102a4576102a461021c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156102d3576102d361021c565b6040528181528282016020018810156102ea575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f82518060208501845e5f92019182525091905056fea2646970667358221220bbacc51062e4416855428f4038497dcbe05b32e0e6a349ef760378c2ed1f44d364736f6c634300081c0033000000", "storage": {} }, - "11": { - "address": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", - "code": "0x608060405260043610610079575f3560e01c80639623609d1161004c5780639623609d1461010957806399a88ec41461011c578063f2fde38b1461013b578063f3b7dead1461015a575f5ffd5b8063204e1c7a1461007d578063715018a6146100b85780637eff275e146100ce5780638da5cb5b146100ed575b5f5ffd5b348015610088575f5ffd5b5061009c610097366004610479565b610179565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c3575f5ffd5b506100cc610204565b005b3480156100d9575f5ffd5b506100cc6100e836600461049b565b610217565b3480156100f8575f5ffd5b505f546001600160a01b031661009c565b6100cc6101173660046104e6565b61027a565b348015610127575f5ffd5b506100cc61013636600461049b565b6102e5565b348015610146575f5ffd5b506100cc610155366004610479565b61031b565b348015610165575f5ffd5b5061009c610174366004610479565b610399565b5f5f5f836001600160a01b031660405161019d90635c60da1b60e01b815260040190565b5f60405180830381855afa9150503d805f81146101d5576040519150601f19603f3d011682016040523d82523d5f602084013e6101da565b606091505b5091509150816101e8575f5ffd5b808060200190518101906101fc91906105bd565b949350505050565b61020c6103bd565b6102155f610416565b565b61021f6103bd565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b5f604051808303815f87803b158015610260575f5ffd5b505af1158015610272573d5f5f3e3d5ffd5b505050505050565b6102826103bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102b290869086906004016105d8565b5f604051808303818588803b1580156102c9575f5ffd5b505af11580156102db573d5f5f3e3d5ffd5b5050505050505050565b6102ed6103bd565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe690602401610249565b6103236103bd565b6001600160a01b03811661038d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61039681610416565b50565b5f5f5f836001600160a01b031660405161019d906303e1469160e61b815260040190565b5f546001600160a01b031633146102155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114610396575f5ffd5b5f60208284031215610489575f5ffd5b813561049481610465565b9392505050565b5f5f604083850312156104ac575f5ffd5b82356104b781610465565b915060208301356104c781610465565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156104f8575f5ffd5b833561050381610465565b9250602084013561051381610465565b9150604084013567ffffffffffffffff81111561052e575f5ffd5b8401601f8101861361053e575f5ffd5b803567ffffffffffffffff811115610558576105586104d2565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610587576105876104d2565b60405281815282820160200188101561059e575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f602082840312156105cd575f5ffd5b815161049481610465565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f830116840101915050939250505056fea2646970667358221220cacf7e866443a3c2d9e85812b68958e3d7d01c8ba8e3d67bcb64df53180e1d8164736f6c634300081c0033000000000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65" - } - }, - "23": { - "address": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", - "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c8063a1060c88116100bf578063dce974b911610079578063dce974b914610334578063df5cf7231461035b578063ec76f44214610382578063f2fde38b146103b5578063f698da25146103c8578063fabc1cbc146103d0575f5ffd5b8063a1060c881461029a578063a364f4da146102ad578063a98fb355146102c0578063c825fe68146102d3578063cd6dc687146102fa578063d79aceab1461030d575f5ffd5b80635ac86ab7116101105780635ac86ab7146101fa5780635c975abb1461021d578063715018a61461022f578063886f1195146102375780638da5cb5b146102765780639926ee7d14610287575f5ffd5b8063136439dd1461014c578063374823b51461016157806349075da3146101a357806354fd4d50146101dd578063595c6a67146101f2575b5f5ffd5b61015f61015a3660046110dc565b6103e3565b005b61018e61016f366004611107565b609960209081525f928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b6101d06101b1366004611131565b609860209081525f928352604080842090915290825290205460ff1681565b60405161019a919061117c565b6101e561041d565b60405161019a91906111d0565b61015f61044d565b61018e6102083660046111e9565b606654600160ff9092169190911b9081161490565b6066545b60405190815260200161019a565b61015f610461565b61025e7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b03909116815260200161019a565b6033546001600160a01b031661025e565b61015f610295366004611277565b610472565b6102216102a8366004611364565b610673565b61015f6102bb3660046113a7565b6106f2565b61015f6102ce3660046113c2565b6107b9565b6102217f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61015f610308366004611107565b610800565b6102217fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102217f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b61025e7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b61015f6103903660046110dc565b335f90815260996020908152604080832093835292905220805460ff19166001179055565b61015f6103c33660046113a7565b61091c565b610221610995565b61015f6103de3660046110dc565b610a4e565b6103eb610ab4565b60665481811681146104105760405163c61dca5d60e01b815260040160405180910390fd5b61041982610b57565b5050565b60606104487f76312e302e300000000000000000000000000000000000000000000000000006610b94565b905090565b610455610ab4565b61045f5f19610b57565b565b610469610bd1565b61045f5f610c2b565b5f61047c81610c7c565b6001335f9081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156104b5576104b5611168565b036104d357604051631aa528bb60e11b815260040160405180910390fd5b6001600160a01b0383165f90815260996020908152604080832085830151845290915290205460ff161561051a57604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa15801561057e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a29190611430565b6105bf57604051639f88c8af60e01b815260040160405180910390fd5b6105e3836105d7853386602001518760400151610673565b84516040860151610ca7565b6001600160a01b0383165f81815260996020908152604080832086830151845282528083208054600160ff19918216811790925533808652609885528386208787529094529382902080549094168117909355519092917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610666919061117c565b60405180910390a3505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f906106e99060c00160405160208183030381529060405280519060200120610cff565b95945050505050565b5f6106fc81610c7c565b6001335f9081526098602090815260408083206001600160a01b038716845290915290205460ff16600181111561073557610735611168565b14610753576040516352df45c960e01b815260040160405180910390fd5b335f8181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916107ad919061117c565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371383836040516107f492919061144f565b60405180910390a25050565b5f54610100900460ff161580801561081e57505f54600160ff909116105b806108375750303b15801561083757505f5460ff166001145b61089f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156108c0575f805461ff0019166101001790555b6108c982610b57565b6108d283610c2b565b8015610917575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610924610bd1565b6001600160a01b0381166109895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b61099281610c2b565b50565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea610a02610d45565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610a56610dba565b60665480198219811614610a7d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107f4565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190611430565b61045f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b60605f610ba083610e6b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b0316331461045f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610896565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606654600160ff83161b908116036109925760405163840a48d560e01b815260040160405180910390fd5b42811015610cc857604051630819bdcd60e01b815260040160405180910390fd5b610cdc6001600160a01b0385168484610e98565b610cf957604051638baa579f60e01b815260040160405180910390fd5b50505050565b5f610d08610995565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f610d717f76312e302e300000000000000000000000000000000000000000000000000006610b94565b9050805f81518110610d8557610d8561147d565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3a9190611491565b6001600160a01b0316336001600160a01b03161461045f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610e9257604051632cd44ac360e21b815260040160405180910390fd5b92915050565b5f5f5f610ea58585610ef6565b90925090505f816004811115610ebd57610ebd611168565b148015610edb5750856001600160a01b0316826001600160a01b0316145b80610eec5750610eec868686610f38565b9695505050505050565b5f5f8251604103610f2a576020830151604084015160608501515f1a610f1e8782858561101f565b94509450505050610f31565b505f905060025b9250929050565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401610f609291906114ac565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f9e91906114cc565b5f60405180830381855afa9150503d805f8114610fd6576040519150601f19603f3d011682016040523d82523d5f602084013e610fdb565b606091505b5091509150818015610fef57506020815110155b8015610eec57508051630b135d3f60e11b9061101490830160209081019084016114e2565b149695505050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561105457505f905060036110d3565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156110a5573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166110cd575f600192509250506110d3565b91505f90505b94509492505050565b5f602082840312156110ec575f5ffd5b5035919050565b6001600160a01b0381168114610992575f5ffd5b5f5f60408385031215611118575f5ffd5b8235611123816110f3565b946020939093013593505050565b5f5f60408385031215611142575f5ffd5b823561114d816110f3565b9150602083013561115d816110f3565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061119c57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111e260208301846111a2565b9392505050565b5f602082840312156111f9575f5ffd5b813560ff811681146111e2575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561124057611240611209565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561126f5761126f611209565b604052919050565b5f5f60408385031215611288575f5ffd5b8235611293816110f3565b9150602083013567ffffffffffffffff8111156112ae575f5ffd5b8301606081860312156112bf575f5ffd5b6112c761121d565b813567ffffffffffffffff8111156112dd575f5ffd5b8201601f810187136112ed575f5ffd5b803567ffffffffffffffff81111561130757611307611209565b61131a601f8201601f1916602001611246565b81815288602083850101111561132e575f5ffd5b816020840160208301375f6020928201830152835283810135908301525060409182013591810191909152919491935090915050565b5f5f5f5f60808587031215611377575f5ffd5b8435611382816110f3565b93506020850135611392816110f3565b93969395505050506040820135916060013590565b5f602082840312156113b7575f5ffd5b81356111e2816110f3565b5f5f602083850312156113d3575f5ffd5b823567ffffffffffffffff8111156113e9575f5ffd5b8301601f810185136113f9575f5ffd5b803567ffffffffffffffff81111561140f575f5ffd5b856020828401011115611420575f5ffd5b6020919091019590945092505050565b5f60208284031215611440575f5ffd5b815180151581146111e2575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156114a1575f5ffd5b81516111e2816110f3565b828152604060208201525f6114c460408301846111a2565b949350505050565b5f82518060208501845e5f920191825250919050565b5f602082840312156114f2575f5ffd5b505191905056fea26469706673582212209dd9302aebda5bede3ce8ea07bceb8585e18de0b68227e2cdee1edd383b22cb564736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, "29": { "address": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed", "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", "storage": { - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x165183f4d7a8ecead93a30c1491a78d70b212627d72d451cc2b61e9844bb6182": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x54ab5bc83c0127df10d352dbba9557880cef93f87419916bd513c73a26e9de39": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x38de7073e27519f272741044a68ab5a51022aa002af20801e32867226a9bb4bd": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x4bad58e84dc127f47e7265bd5e504be070126f63f93af282fe2a4f1acbb07707": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d", "0x9254291d7d424716ad6728e8cf28d7329070cafa88280734e18f0a5f711cc416": "0x000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e", - "0x288c6faa56b91953378099dc2014a331affa988ca357fe83ca55e72915585282": "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x288c6faa56b91953378099dc2014a331affa988ca357fe83ca55e72915585282": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x4bad58e84dc127f47e7265bd5e504be070126f63f93af282fe2a4f1acbb07707": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x165183f4d7a8ecead93a30c1491a78d70b212627d72d451cc2b61e9844bb6182": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d", + "0x38de7073e27519f272741044a68ab5a51022aa002af20801e32867226a9bb4bd": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x54ab5bc83c0127df10d352dbba9557880cef93f87419916bd513c73a26e9de39": "0x0000000000000000000000000000000000000000000000000000000000000001" } }, - "25": { - "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", - "code": "0x73a513e6e4b8f2a923d98304ec87f64353c4d5c853301460806040526004361061009b575f3560e01c806338412ce51161006e57806338412ce514610150578063480ff0651461016f5780636f378c061461018e578063957cae98146101ad578063c7f62387146101c0575f5ffd5b806319a79b481461009f5780631b8d43b0146100c057806320606b70146100f457806330adf81f14610129575b5f5ffd5b8180156100aa575f5ffd5b506100be6100b9366004610a4d565b6101df565b005b8180156100cb575f5ffd5b506100df6100da366004610acf565b610346565b60405190151581526020015b60405180910390f35b61011b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6040519081526020016100eb565b61011b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b81801561015b575f5ffd5b506100df61016a366004610b10565b61036b565b81801561017a575f5ffd5b506100be610189366004610b10565b610384565b818015610199575f5ffd5b506100df6101a8366004610b10565b6103cf565b61011b6101bb366004610b43565b6103dc565b8180156101cb575f5ffd5b506100be6101da366004610b10565b6103ec565b834211156102005760405163068568f360e21b815260040160405180910390fd5b5f61020a8961042d565b6001600160a01b0389165f90815260028c016020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c9290919061025983610b6e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016102d292919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f6102f7828686866104dc565b9050886001600160a01b0316816001600160a01b03161461032b57604051638baa579f60e01b815260040160405180910390fd5b6103398b8a8a8a6001610502565b5050505050505050505050565b5f610353858533856105f0565b506103608585858561067c565b506001949350505050565b5f61037a843385856001610502565b5060019392505050565b5f6001600160a01b0383166103bd57604051639cfea58360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b506103ca835f84846106f8565b505050565b5f61037a8433858561067c565b5f6103e68261042d565b92915050565b5f6001600160a01b038316610420576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b506103ca83835f846106f8565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8260405161045d9190610b86565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c001604051602081830303815290604052805190602001209050919050565b5f5f5f6104eb87878787610829565b915091506104f8816108e6565b5095945050505050565b5f6001600160a01b038516610536576040516322f051b160e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b03841661056b5760405163270af7ed60e11b81526001600160a01b0390911660048201526024016103b4565b506001600160a01b038085165f908152600187016020908152604080832093871683529290522082905580156105e957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105e091815260200190565b60405180910390a35b5050505050565b6001600160a01b038084165f90815260018601602090815260408083209386168352929052908120545f198114610670578381848082101561065e57604051630c95cf2760e11b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506106708686868685035f610502565b50600195945050505050565b5f6001600160a01b0384166106b0576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b0383166106e557604051639cfea58360e01b81526001600160a01b0390911660048201526024016103b4565b506106f2848484846106f8565b50505050565b6001600160a01b0383166107245780846003015f8282546107199190610c22565b9091555061079a9050565b6001600160a01b0383165f90815260208590526040902054838183808210156107795760405163db42144d60e01b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506001600160a01b0384165f9081526020869052604090209082900390555b6001600160a01b0382166107b85760038401805482900390556107d6565b6001600160a01b0382165f9081526020859052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161081b91815260200190565b60405180910390a350505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561085e57505f905060036108dd565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108af573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166108d7575f600192509250506108dd565b91505f90505b94509492505050565b5f8160048111156108f9576108f9610c35565b036109015750565b600181600481111561091557610915610c35565b036109625760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103b4565b600281600481111561097657610976610c35565b036109c35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103b4565b60038160048111156109d7576109d7610c35565b03610a2f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103b4565b50565b80356001600160a01b0381168114610a48575f5ffd5b919050565b5f5f5f5f5f5f5f5f5f6101208a8c031215610a66575f5ffd5b8935985060208a01359750610a7d60408b01610a32565b9650610a8b60608b01610a32565b955060808a0135945060a08a0135935060c08a013560ff81168114610aae575f5ffd5b989b979a50959894979396929550929360e081013593506101000135919050565b5f5f5f5f60808587031215610ae2575f5ffd5b84359350610af260208601610a32565b9250610b0060408601610a32565b9396929550929360600135925050565b5f5f5f60608486031215610b22575f5ffd5b83359250610b3260208501610a32565b929592945050506040919091013590565b5f60208284031215610b53575f5ffd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610b7f57610b7f610b5a565b5060010190565b5f5f83545f8160011c90506001821680610ba157607f821691505b602082108103610bbf57634e487b7160e01b5f52602260045260245ffd5b808015610bd35760018114610be857610c16565b60ff1984168752821515830287019450610c16565b5f888152602090205f5b84811015610c0e57815489820152600190910190602001610bf2565b505082870194505b50929695505050505050565b808201808211156103e6576103e6610b5a565b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220e80be273f8d8f280fc105b4d925852e7d2ff9cde2278e4bdbeffce2ddea71f7564736f6c634300081c0033000000000000000000000000", + "37": { + "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "code": "0x735fbdb2315678afecb367f032d93f642f64180aa33014608060405260043610610034575f3560e01c8063e5bad8da14610038575b5f5ffd5b61004b610046366004610256565b61005f565b604051901515815260200160405180910390f35b5f80610079610073368590038501856102fc565b85610104565b90506001600160a01b03851663a401662b8261009860c087018761039b565b8760e001356040518563ffffffff1660e01b81526004016100bc94939291906103e8565b602060405180830381865afa1580156100d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100fb919061042c565b95945050505050565b81515f90819060f81b61013c8560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b85604001516101b287606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b5f5f5f60608486031215610268575f5ffd5b83356001600160a01b038116811461027e575f5ffd5b925060208401359150604084013567ffffffffffffffff8111156102a0575f5ffd5b840161010081870312156102b2575f5ffd5b809150509250925092565b803560ff811681146102cd575f5ffd5b919050565b803563ffffffff811681146102cd575f5ffd5b803567ffffffffffffffff811681146102cd575f5ffd5b5f60c082840312801561030d575f5ffd5b5060405160c0810167ffffffffffffffff8111828210171561033d57634e487b7160e01b5f52604160045260245ffd5b604052610349836102bd565b8152610357602084016102d2565b602082015260408381013590820152610372606084016102e5565b6060820152610383608084016102d2565b608082015260a0928301359281019290925250919050565b5f5f8335601e198436030181126103b0575f5ffd5b83018035915067ffffffffffffffff8211156103ca575f5ffd5b6020019150600581901b36038213156103e1575f5ffd5b9250929050565b84815260606020820181905281018390525f6001600160fb1b0384111561040d575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f6020828403121561043c575f5ffd5b8151801515811461044b575f5ffd5b939250505056fea26469706673582212209f46199c5a6587f6df682c951ec670f911e6e382b25c7b93a0443dd7f0a17b0764736f6c634300081c003300", "storage": {} }, - "46": { - "address": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf", - "code": "0x608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806366ae69a011610093578063a77cf3d211610063578063a77cf3d214610238578063ad209a9b1461024b578063bb51f1eb14610272578063df0dd0d514610285575f5ffd5b806366ae69a0146101b05780636f55bd32146101db5780638ab81d1314610202578063a401662b14610215575f5ffd5b806341c9634e116100ce57806341c9634e1461013e578063591d99ee146101545780635da57fe91461017b578063623b223d1461019b575f5ffd5b80630a7c8faa146100f45780632cdea7171461011e5780633666751314610136575b5f5ffd5b610100610dad60f31b81565b6040516001600160f01b031990911681526020015b60405180910390f35b61012661030f565b60405161011594939291906124a2565b610126610390565b6101465f5481565b604051908152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000481565b61018e610189366004612572565b61040f565b60405161011591906125b9565b6101ae6101a9366004612621565b610447565b005b6001546101c3906001600160401b031681565b6040516001600160401b039091168152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000281565b61018e610210366004612702565b6107d9565b610228610223366004612749565b6108b0565b6040519015158152602001610115565b6101ae610246366004612797565b6108bf565b6101467f000000000000000000000000000000000000000000000000000000000000001881565b6101ae6102803660046127ae565b610a37565b6102d3610293366004612797565b600a6020525f90815260409020805460018201546002909201546001600160401b0382169263ffffffff600160401b8404811693600160601b9004169185565b604080516001600160401b0396909616865263ffffffff948516602087015292909316918401919091526060830152608082015260a001610115565b6002805460035460408051600480546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20905b815481526020019060010190808311610364575b50505050508152602001600182015481525050905084565b6006805460075460408051600880546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20908154815260200190600101908083116103645750505050508152602001600182015481525050905084565b60608282101561043257604051635c85a0e760e01b815260040160405180910390fd5b61043d848484610ea1565b90505b9392505050565b5f6104518a610f2b565b8051906020012090505f61046e33835f9182526020526040902090565b905061047c818c8c8c61101d565b5f5f90505f6002905060065f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906104b89190612843565b6001600160401b0316036104d2575060019050600661052c565b60025f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906105059190612843565b6001600160401b03161461052c57604051636033c4fd60e11b815260040160405180910390fd5b61053b84848e8e858f8f61110c565b5f6105458e6112c2565b905082156106d657600654610564906001600160801b0316600161287d565b6001600160801b031661057d60808b0160608c01612843565b6001600160401b0316146105a3576040516263964160e91b815260040160405180910390fd5b5f6105c0826105b18c6113f4565b805190602001208b8b8b6114a8565b9050806105e05760405163128597bb60e01b815260040160405180910390fd5b60068054600160801b8082046001600160801b0390811690910291161760029081556007546003556008805460049061061c908290849061240d565b5060019182015491015550610639905060808b0160608c01612843565b600680546001600160801b0319166001600160401b039290921691909117905561066960a08b0160808c0161289c565b600680546001600160801b031663ffffffff92909216600160801b0291909117905560a08a0180356007556106b0906106a59060808d0161289c565b63ffffffff16611517565b805180516008916106c691839160200190612455565b5060208201518160010155905050505b5f8190556106e760208f018f61289c565b63ffffffff1660015f6101000a8154816001600160401b0302191690836001600160401b03160217905550600a5f8581526020019081526020015f205f5f82015f6101000a8154906001600160401b0302191690555f820160086101000a81549063ffffffff02191690555f8201600c6101000a81549063ffffffff0219169055600182015f9055600282015f905550507fd95fe1258d152dc91c81b09380498adc76ed36a6079bcb2ed31eff622ae2d0f1818f5f0160208101906107ac919061289c565b6040805192835263ffffffff90911660208301520160405180910390a15050505050505050505050505050565b60605f600a5f6107f233885f9182526020526040902090565b81526020019081526020015f20905083836040516020016108149291906128bf565b6040516020818303038152906040528051906020012081600201541461084d576040516333b4605560e11b815260040160405180910390fd5b6108a781600101548585808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855463ffffffff600160401b820481169350600160601b9091041690506115bc565b95945050505050565b5f6108a75f54868686866114a8565b335f9081526020829052604081205f818152600a602052604081208054929350916001600160401b03169003610908576040516319a1b6d960e21b815260040160405180910390fd5b60018101541561092b5760405163e31d900560e01b815260040160405180910390fd5b8054610961907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b4310156109815760405163c77c194960e01b815260040160405180910390fd5b80547f0000000000000000000000000000000000000000000000000000000000000018906109d9907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b6109e391906128e6565b431115610a2c575f828152600a602052604080822080546001600160801b0319168155600181018390556002019190915580516340d3544760e01b815290519081900360040190fd5b446001909101555050565b6001546001600160401b0316610a50602086018661289c565b63ffffffff1611610a74576040516303d618e560e41b815260040160405180910390fd5b600280545f906001600160801b0316610a936040880160208901612843565b6001600160401b031603610ad757610ab0600460608501356116a4565b9050610ad26060840135610ac961ffff8416600161170e565b6004919061172c565b610b54565b6006546001600160801b0316610af36040880160208901612843565b6001600160401b031603610b3b57610b10600860608501356116a4565b9050610b326060840135610b2961ffff8416600161170e565b6008919061172c565b60069150610b54565b604051636033c4fd60e11b815260040160405180910390fd5b610b7f82610b6860a08601608087016128f9565b6060860135610b7a60a088018861291f565b6117d3565b1580610bc75750610bc58585808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050506060850135611842565b155b15610be557604051637000a9fd60e11b815260040160405180910390fd5b5f610bef87610f2b565b80516020909101209050610c0960a08501608086016128f9565b6001600160a01b0316610c3282610c236020880188612964565b87602001358860400135611886565b6001600160a01b031614610c5957604051638baa579f60e01b815260040160405180910390fd5b8254610c7490600160801b90046001600160801b03166118ac565b85141580610ce857508254610c9890600160801b90046001600160801b03166118c5565b610ce68787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508754600160801b90046001600160801b031691506118f49050565b105b15610d06576040516333b4605560e11b815260040160405180910390fd5b6040805160a081018252436001600160401b031681528454600160801b900463ffffffff811660208301529091820190610d6e906001600160801b031661ffff86167f0000000000000000000000000000000000000000000000000000000000000002611c6e565b63ffffffff1681526020015f81526020018787604051602001610d929291906128bf565b60405160208183030381529060405280519060200120815250600a5f610dc133855f9182526020526040902090565b815260208082019290925260409081015f2083518154858501519386015163ffffffff908116600160601b0263ffffffff60601b1991909516600160401b026bffffffffffffffffffffffff199092166001600160401b03909316929092171716919091178155606083015160018201556080909201516002909201919091557fbee983fc706c692efb9b0240bddc5666c010a53af55ed5fb42d226e7e4293869903390610e71908a018a61289c565b604080516001600160a01b03909316835263ffffffff90911660208301520160405180910390a150505050505050565b6060610eac826118ac565b6001600160401b03811115610ec357610ec3612984565b604051908082528060200260200182016040528015610eec578160200160208202803683370190505b5090505f5b83811015610f2357610f1b82868684818110610f0f57610f0f612998565b90506020020135611cc6565b600101610ef1565b509392505050565b6060610f42610f3d604084018461291f565b611d1d565b610f79610f52602085018561289c565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b610ff5610f8c6040860160208701612843565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051602001611007939291906129c3565b6040516020818303038152906040529050919050565b5f848152600a60205260408120805490916001600160401b039091169003611058576040516319a1b6d960e21b815260040160405180910390fd5b80600101545f0361107c576040516378ef3a4760e01b815260040160405180910390fd5b6001546001600160401b0316611095602086018661289c565b63ffffffff16116110b9576040516303d618e560e41b815260040160405180910390fd5b82826040516020016110cc9291906128bf565b60405160208183030381529060405280519060200120816002015414611105576040516333b4605560e11b815260040160405180910390fd5b5050505050565b5f868152600a602052604090208054600160601b900463ffffffff1682811461114857604051630f8b88ed60e11b815260040160405180910390fd5b5f61119d83600101548989808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508a54600160801b90046001600160801b031691508690506115bc565b90505f5b848110156112b557368686838181106111bc576111bc612998565b90506020028101906111ce91906129f6565b90506111f6886111e460a08401608085016128f9565b6060840135610b7a60a086018661291f565b61121357604051637000a9fd60e11b815260040160405180910390fd5b611221838260600135611842565b61123e57604051637000a9fd60e11b815260040160405180910390fd5b61124e60a08201608083016128f9565b6001600160a01b03166112778d6112686020850185612964565b84602001358560400135611886565b6001600160a01b03161461129e57604051638baa579f60e01b815260040160405180910390fd5b6112ac838260600135611e04565b506001016111a1565b5050505050505050505050565b5f805b6112d2604084018461291f565b90508110156113da57610dad60f31b6112ee604085018561291f565b838181106112fe576112fe612998565b90506020028101906113109190612a14565b61131e906020810190612a28565b6001600160f01b031916036113d25761133a604084018461291f565b8281811061134a5761134a612998565b905060200281019061135c9190612a14565b61136a906020810190612a4f565b905060201461138c57604051633efce24360e11b815260040160405180910390fd5b611399604084018461291f565b828181106113a9576113a9612998565b90506020028101906113bb9190612a14565b6113c9906020810190612a4f565b61044091612a91565b6001016112c5565b5060405163484ab7df60e01b815260040160405180910390fd5b606061140c6114066020840184612964565b60f81b90565b61141f610f52604085016020860161289c565b6040840135611437610f8c6080870160608801612843565b61144a610f5260a088016080890161289c565b6040516001600160f81b031990951660208601526001600160e01b0319938416602186015260258501929092526001600160c01b031916604584015216604d82015260a0830135605182015260c08301356071820152609101611007565b5f6101008311156114cc57604051632f43154560e11b815260040160405180910390fd5b845f5b8481101561150a57611500828787848181106114ed576114ed612998565b905060200201358387901c600116611e38565b91506001016114cf565b5090951495945050505050565b60408051808201909152606081525f60208201525f611537601084612ac2565b15611543576001611545565b5f5b60ff16611553601085612ad5565b61155d91906128e6565b90506040518060400160405280826001600160401b0381111561158257611582612984565b6040519080825280602002602001820160405280156115ab578160200160208202803683370190505b508152602001939093525090919050565b60606115c7836118ac565b84511415806115de57506115db84846118f4565b82115b156115fc576040516302fb251f60e51b815260040160405180910390fd5b83516001600160401b0381111561161557611615612984565b60405190808252806020026020018201604052801561163e578160200160208202803683370190505b5090505f805b8382101561169a575f611658888388611e61565b90506116648782611842565b158061167557506116758482611842565b156116835750600101611644565b61168d8482611cc6565b5060019182019101611644565b5050949350505050565b5f826001015482106116c957604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83166116dd816010612ae8565b60ff16855f0183815481106116f4576116f4612998565b905f5260205f200154901c61ffff16925050505b92915050565b5f82820161ffff80851690821610156104405761ffff915050611708565b8260010154821061175057604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83165f611765826010612ae8565b60ff1661ffff901b1990505f82601061177e9190612ae8565b60ff168561ffff16901b90508082885f0186815481106117a0576117a0612998565b905f5260205f2001541617875f0185815481106117bf576117bf612998565b5f9182526020909120015550505050505050565b6040516bffffffffffffffffffffffff19606086901b1660208201525f90819060340160408051808303601f190181529190528051602090910120600188015488549192506118379183908890600160801b90046001600160801b03168888611e84565b979650505050505050565b5f5f600883901c90506118778385838151811061186157611861612998565b6020026020010151611eaf90919063ffffffff16565b60ff1660011491505092915050565b5f5f5f61189587878787611eb9565b915091506118a281611f76565b5095945050505050565b5f6101006118bb8360ff6128e6565b6117089190612ad5565b5f60038211156118f05760036118dc600184612b0b565b6118e69190612ad5565b6117089083612b0b565b5090565b5f81158061190157508251155b1561190d57505f611708565b5f610100830460ff8416825b82811080156119285750865181105b15611abd575f87828151811061194057611940612998565b602002602001015190505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b0382160190508085019450508080600101915050611919565b505f81118015611acd5750855182105b15611c64575f6001826001901b0390505f81888581518110611af157611af1612998565b60200260200101511690505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b038216019050808501945050505b5090949350505050565b5f81611c7b8560016120c7565b611c8590826128e6565b9050611c928460016120c7565b611c9d906002612b1e565b611ca89060016128e6565b611cb290826128e6565b90506108a781611cc1876118c5565b612104565b5f600882901c9050611cfa82848381518110611ce457611ce4612998565b602002602001015161211990919063ffffffff16565b838281518110611d0c57611d0c612998565b602002602001018181525050505050565b60605f611d2983612126565b90505f5b83811015610f235781858583818110611d4857611d48612998565b9050602002810190611d5a9190612a14565b611d68906020810190612a28565b611da4878785818110611d7d57611d7d612998565b9050602002810190611d8f9190612a14565b611d9d906020810190612a4f565b9050612126565b878785818110611db657611db6612998565b9050602002810190611dc89190612a14565b611dd6906020810190612a4f565b604051602001611dea959493929190612b35565b60408051601f198184030181529190529150600101611d2d565b5f600882901c9050611cfa82848381518110611e2257611e22612998565b602002602001015161215690919063ffffffff16565b5f818015611e4c57835f5284602052611e54565b845f52836020525b505060405f209392505050565b5f815f03611e7057505f610440565b505f92835260209190915260409091200690565b5f838510611e9357505f611ea5565b611ea08686868686612164565b871490505b9695505050505050565b60ff161c60011690565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611eee57505f90506003611f6d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f3f573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116611f67575f60019250925050611f6d565b91505f90505b94509492505050565b5f816004811115611f8957611f89612b71565b03611f915750565b6001816004811115611fa557611fa5612b71565b03611ff75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561200b5761200b612b71565b036120585760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611fee565b600381600481111561206c5761206c612b71565b036120c45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611fee565b50565b5f5f6120d28461220a565b90506120dd8361229d565b80156120ec575083816001901b105b6120f6575f6120f9565b60015b60ff16019392505050565b5f8183106121125781610440565b5090919050565b600160ff919091161b1790565b606063ffffffff82111561214d57604051637404cccd60e11b815260040160405180910390fd5b611708826122c9565b600160ff919091161b191690565b5f85815b838110156121ff57866001166001148061218457508587600101145b156121bb576121b485858381811061219e5761219e612998565b90506020020135835f9182526020526040902090565b91506121e9565b6121e6828686848181106121d1576121d1612998565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501612168565b509695505050505050565b5f80608083901c1561221e57608092831c92015b604083901c1561223057604092831c92015b602083901c1561224257602092831c92015b601083901c1561225457601092831c92015b600883901c1561226657600892831c92015b600483901c1561227857600492831c92015b600283901c1561228a57600292831c92015b600183901c156117085760010192915050565b5f60028260038111156122b2576122b2612b71565b6122bc9190612b85565b60ff166001149050919050565b6060603f8263ffffffff16116122f457604051603f60fa1b60fa84901b166020820152602101611007565b613fff8263ffffffff16116123535761233061231c6403fffffffc600285901b166001612ba6565b600881811b62ffff001691901c60ff161790565b604051602001611007919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116123c5576123a260028363ffffffff16901b600261237e9190612ba6565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b604051602001611007919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b166021820152602501611007565b828054828255905f5260205f20908101928215612449575f5260205f209182015b8281111561244957825482559160010191906001019061242e565b506118f092915061248e565b828054828255905f5260205f20908101928215612449579160200282015b82811115612449578251825591602001919060010190612473565b5b808211156118f0575f815560010161248f565b6001600160801b03851681526001600160801b0384166020820152826040820152608060608201525f60c0820183516040608085015281815180845260e0860191506020830193505f92505b8083101561251157835182526020820191506020840193506001830192506124ee565b50602086015160a086015280935050505095945050505050565b5f5f83601f84011261253b575f5ffd5b5081356001600160401b03811115612551575f5ffd5b6020830191508360208260051b850101111561256b575f5ffd5b9250929050565b5f5f5f60408486031215612584575f5ffd5b83356001600160401b03811115612599575f5ffd5b6125a58682870161252b565b909790965060209590950135949350505050565b602080825282518282018190525f918401906040840190835b818110156125f05783518352602093840193909201916001016125d2565b509095945050505050565b5f6060828403121561260b575f5ffd5b50919050565b5f60e0828403121561260b575f5ffd5b5f5f5f5f5f5f5f5f5f6101808a8c03121561263a575f5ffd5b89356001600160401b0381111561264f575f5ffd5b61265b8c828d016125fb565b99505060208a01356001600160401b03811115612676575f5ffd5b6126828c828d0161252b565b90995097505060408a01356001600160401b038111156126a0575f5ffd5b6126ac8c828d0161252b565b90975095506126c090508b60608c01612611565b93506101408a01356001600160401b038111156126db575f5ffd5b6126e78c828d0161252b565b9a9d999c50979a969995989497966101600135949350505050565b5f5f5f60408486031215612714575f5ffd5b8335925060208401356001600160401b03811115612730575f5ffd5b61273c8682870161252b565b9497909650939450505050565b5f5f5f5f6060858703121561275c575f5ffd5b8435935060208501356001600160401b03811115612778575f5ffd5b6127848782880161252b565b9598909750949560400135949350505050565b5f602082840312156127a7575f5ffd5b5035919050565b5f5f5f5f606085870312156127c1575f5ffd5b84356001600160401b038111156127d6575f5ffd5b6127e2878288016125fb565b94505060208501356001600160401b038111156127fd575f5ffd5b6128098782880161252b565b90945092505060408501356001600160401b03811115612827575f5ffd5b850160c08188031215612838575f5ffd5b939692955090935050565b5f60208284031215612853575f5ffd5b81356001600160401b0381168114610440575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561170857611708612869565b5f602082840312156128ac575f5ffd5b813563ffffffff81168114610440575f5ffd5b5f6001600160fb1b038311156128d3575f5ffd5b8260051b80858437919091019392505050565b8082018082111561170857611708612869565b5f60208284031215612909575f5ffd5b81356001600160a01b0381168114610440575f5ffd5b5f5f8335601e19843603018112612934575f5ffd5b8301803591506001600160401b0382111561294d575f5ffd5b6020019150600581901b360382131561256b575f5ffd5b5f60208284031215612974575f5ffd5b813560ff81168114610440575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f6129ce82866129ac565b6001600160e01b031994909416845250506001600160c01b0319166004820152600c01919050565b5f823560be19833603018112612a0a575f5ffd5b9190910192915050565b5f8235603e19833603018112612a0a575f5ffd5b5f60208284031215612a38575f5ffd5b81356001600160f01b031981168114610440575f5ffd5b5f5f8335601e19843603018112612a64575f5ffd5b8301803591506001600160401b03821115612a7d575f5ffd5b60200191503681900382131561256b575f5ffd5b80356020831015611708575f19602084900360031b1b1692915050565b634e487b7160e01b5f52601260045260245ffd5b5f82612ad057612ad0612aae565b500690565b5f82612ae357612ae3612aae565b500490565b60ff8181168382160290811690818114612b0457612b04612869565b5092915050565b8181038181111561170857611708612869565b808202811582820484141761170857611708612869565b5f612b4082886129ac565b6001600160f01b031987168152612b5a60028201876129ac565b9050838582375f9301928352509095945050505050565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680612b9757612b97612aae565b8060ff84160691505092915050565b63ffffffff81811683821601908111156117085761170861286956fe33333333333333333333333333333333333333333333333333333333333333330000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f555555555555555555555555555555555555555555555555555555555555555500ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffa26469706673582212203af1e852e76149687fdd45ba604c70832aa6c558a5b4649af898e0fb9a2a242c64736f6c634300081c003300", + "38": { + "address": "0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f", + "code": "0x608060405234801561000f575f5ffd5b506004361061026b575f3560e01c80637ecebe001161014b578063ca8aa7c7116100bf578063f2fde38b11610084578063f2fde38b1461062f578063f3b4a00014610642578063f698da251461064c578063fabc1cbc14610654578063fd98042314610667578063fe243a171461067a575f5ffd5b8063ca8aa7c71461059b578063cbc2bd62146105c2578063de44acb6146105d5578063df5cf723146105f5578063e7a050aa1461061c575f5ffd5b80638da5cb5b116101105780638da5cb5b1461052b57806394f649dd1461053c578063967fc0d21461054f5780639ac01d6114610562578063b5d8b5b814610575578063c665670214610588575f5ffd5b80637ecebe001461047f578063829fca731461049e578063886f1195146104b157806388c10299146104f05780638b8aac3c14610503575f5ffd5b806350ff7225116101e25780635de08ff2116101a75780635de08ff2146103fc578063663c1de41461040f578063715018a614610431578063724af4231461043957806376fb162b1461044c5780637def15641461045f575f5ffd5b806350ff72251461037c57806354fd4d50146103a4578063595c6a67146103b95780635ac86ab7146103c15780635c975abb146103f4575f5ffd5b806332e89ace1161023357806332e89ace146102f157806336a8c500146103045780633f292b081461031a5780633fb99ca51461032f57806348825e94146103425780634b6d5d6e14610369575f5ffd5b8063136439dd1461026f5780631794bb3c146102845780632d44def6146102975780632eae418c146102bd57806331f8fb4c146102d0575b5f5ffd5b61028261027d366004612e33565b6106a4565b005b610282610292366004612e5e565b6106de565b6102aa6102a5366004612eb2565b610804565b6040519081526020015b60405180910390f35b6102826102cb366004612ef0565b6108b6565b6102e36102de366004612f3e565b610982565b6040516102b4929190612fda565b6102aa6102ff36600461304b565b610b10565b61030c610b95565b6040516102b4929190613125565b610322610cb0565b6040516102b4919061317b565b61028261033d3660046131d8565b610d98565b6102aa7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61028261037736600461321c565b610ee0565b61038f61038a366004612e5e565b61102d565b604080519283526020830191909152016102b4565b6103ac6110a1565b6040516102b49190613265565b6102826110d1565b6103e46103cf366004613277565b609854600160ff9092169190911b9081161490565b60405190151581526020016102b4565b6098546102aa565b61028261040a366004613297565b6110e5565b6103e461041d36600461321c565b60d16020525f908152604090205460ff1681565b610282611238565b6102aa610447366004612e5e565b611249565b6102aa61045a366004612eb2565b6112a6565b61047261046d366004613306565b6112f5565b6040516102b49190613320565b6102aa61048d36600461321c565b60ca6020525f908152604090205481565b6102aa6104ac366004612f3e565b611327565b6104d87f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b0390911681526020016102b4565b6104726104fe366004612f3e565b611361565b6102aa61051136600461321c565b6001600160a01b03165f90815260ce602052604090205490565b6033546001600160a01b03166104d8565b6102e361054a36600461321c565b611498565b60cb546104d8906001600160a01b031681565b6102aa610570366004613332565b61160f565b610282610583366004613297565b6116a0565b61028261059636600461321c565b6117e7565b6104d87f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b6104d86105d0366004613393565b61180a565b6105e86105e336600461321c565b61183e565b6040516102b491906133bd565b6104d87f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b6102aa61062a366004612e5e565b6118b1565b61028261063d36600461321c565b6118e4565b6104d8620e16e481565b6102aa61195a565b610282610662366004612e33565b611a13565b6102aa61067536600461321c565b611a80565b6102aa6106883660046133cf565b60cd60209081525f928352604080842090915290825290205481565b6106ac611a95565b60985481811681146106d15760405163c61dca5d60e01b815260040160405180910390fd5b6106da82611b38565b5050565b5f54610100900460ff16158080156106fc57505f54600160ff909116105b806107155750303b15801561071557505f5460ff166001145b61077d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561079e575f805461ff0019166101001790555b6107a782611b38565b6107b084611b75565b6107b983611bc6565b80156107fe575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f61080d611c2f565b6108a38484847f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e896040518263ffffffff1660e01b815260040161085f919061344f565b602060405180830381865afa15801561087a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089e919061345d565b611c88565b90506108af6001606555565b9392505050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146108ff5760405163f739589b60e01b815260040160405180910390fd5b610907611c2f565b604051636ce5768960e11b81526001600160a01b0384169063d9caed129061093790879086908690600401613478565b6020604051808303815f875af1158015610953573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610977919061349c565b506107fe6001606555565b6060805f60d7816109a061099b368990038901896134b3565b611e90565b81526020019081526020015f205f8581526020019081526020015f2090505f6109c882611ef3565b90505f81516001600160401b038111156109e4576109e4613007565b604051908082528060200260200182016040528015610a0d578160200160208202803683370190505b5090505f82516001600160401b03811115610a2a57610a2a613007565b604051908082528060200260200182016040528015610a53578160200160208202803683370190505b5090505f5b8351811015610b0057838181518110610a7357610a7361350f565b6020026020010151838281518110610a8d57610a8d61350f565b60200260200101906001600160a01b031690816001600160a01b031681525050610ad9848281518110610ac257610ac261350f565b602002602001015186611eff90919063ffffffff16565b9050828281518110610aed57610aed61350f565b6020908102919091010152600101610a58565b50909450925050505b9250929050565b5f5f610b1b81611f23565b610b23611c2f565b6001600160a01b0385165f90815260ca6020526040902054610b5486610b4d818c8c8c878c61160f565b8688611f4e565b6001600160a01b0386165f90815260ca60205260409020600182019055610b7d868a8a8a611fa0565b925050610b8a6001606555565b509695505050505050565b6060805f610ba360d461210d565b90505f816001600160401b03811115610bbe57610bbe613007565b604051908082528060200260200182016040528015610be7578160200160208202803683370190505b5090505f826001600160401b03811115610c0357610c03613007565b604051908082528060200260200182016040528015610c2c578160200160208202803683370190505b5090505f5b83811015610ca5575f5f610c4660d484612117565b9150915081858481518110610c5d57610c5d61350f565b60200260200101906001600160a01b031690816001600160a01b03168152505080848481518110610c9057610c9061350f565b60209081029190910101525050600101610c31565b509094909350915050565b60605f610cbd60d8612125565b90505f816001600160401b03811115610cd857610cd8613007565b604051908082528060200260200182016040528015610d1c57816020015b604080518082019091525f8082526020820152815260200190600190039081610cf65790505b5090505f5b82811015610d9157610d6c610d3760d88361212e565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610d7e57610d7e61350f565b6020908102919091010152600101610d21565b5092915050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610de15760405163f739589b60e01b815260040160405180910390fd5b610de9611c2f565b5f60d781610dff61099b368990038901896134b3565b815260208082019290925260409081015f90812087825290925290209050610e28818484612139565b610e455760405163ca354fa360e01b815260040160405180910390fd5b610e62610e5a61099b368890038801886134b3565b60d89061214e565b50610e978460da5f610e7c61099b368b90038b018b6134b3565b81526020019081526020015f2061214e90919063ffffffff16565b507f5f5209798bbac45a16d2dc3bc67319fab26ee00153916d6f07b69f8a134a1e8b85858585604051610ecd9493929190613523565b60405180910390a1506107fe6001606555565b610ee8611c2f565b5f610ef460d483611eff565b915050610f0260d483612159565b50604080516001600160a01b0384168152602081018390527fd9d082c3ec4f3a3ffa55c324939a06407f5fbcb87d5e0ce3b9508c92c84ed839910160405180910390a1801561101f57816001600160a01b031663d9caed12620e16e4846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbe919061345d565b846040518463ffffffff1660e01b8152600401610fdd93929190613478565b6020604051808303815f875af1158015610ff9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101d919061349c565b505b5061102a6001606555565b50565b5f80336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146110785760405163f739589b60e01b815260040160405180910390fd5b611080611c2f565b61108b85858561216d565b915091506110996001606555565b935093915050565b60606110cc7f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b905090565b6110d9611a95565b6110e35f19611b38565b565b60cb546001600160a01b03163314611110576040516320ba3ff960e21b815260040160405180910390fd5b611118611c2f565b805f5b8181101561122c5760d15f8585848181106111385761113861350f565b905060200201602081019061114d919061321c565b6001600160a01b0316815260208101919091526040015f205460ff1661122457600160d15f8686858181106111845761118461350f565b9050602002016020810190611199919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8484838181106111f3576111f361350f565b9050602002016020810190611208919061321c565b6040516001600160a01b03909116815260200160405180910390a15b60010161111b565b50506106da6001606555565b611240612312565b6110e35f611b75565b5f336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146112935760405163f739589b60e01b815260040160405180910390fd5b61129b611c2f565b6108a384848461236c565b5f806112eb8360d7836112c161099b368b90038b018b6134b3565b81526020019081526020015f205f8781526020019081526020015f20611eff90919063ffffffff16565b9695505050505050565b606061132160da5f61130f61099b368790038701876134b3565b81526020019081526020015f2061241a565b92915050565b5f6108af60d78261134061099b368890038801886134b3565b81526020019081526020015f205f8481526020019081526020015f2061210d565b606061136b611c2f565b5f6113a560d78261138461099b368990038901896134b3565b81526020019081526020015f205f8581526020019081526020015f20611ef3565b80519091505f816001600160401b038111156113c3576113c3613007565b6040519080825280602002602001820160405280156113ec578160200160208202803683370190505b5090505f5b828110156114895761146487878684815181106114105761141061350f565b60200260200101517f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e8c6040518263ffffffff1660e01b815260040161085f919061344f565b8282815181106114765761147661350f565b60209081029190910101526001016113f1565b50925050506113216001606555565b6001600160a01b0381165f90815260ce6020526040812054606091829190816001600160401b038111156114ce576114ce613007565b6040519080825280602002602001820160405280156114f7578160200160208202803683370190505b5090505f5b82811015611585576001600160a01b0386165f90815260cd6020908152604080832060ce909252822080549192918490811061153a5761153a61350f565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205482518390839081106115725761157261350f565b60209081029190910101526001016114fc565b5060ce5f866001600160a01b03166001600160a01b031681526020019081526020015f2081818054806020026020016040519081016040528092919081815260200182805480156115fd57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115df575b50505050509150935093505050915091565b604080517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922460208201526001600160a01b03808916928201929092528187166060820152908516608082015260a0810184905260c0810183905260e081018290525f90611695906101000160405160208183030381529060405280519060200120612426565b979650505050505050565b60cb546001600160a01b031633146116cb576040516320ba3ff960e21b815260040160405180910390fd5b6116d3611c2f565b805f5b8181101561122c5760d15f8585848181106116f3576116f361350f565b9050602002016020810190611708919061321c565b6001600160a01b0316815260208101919091526040015f205460ff16156117df575f60d15f86868581811061173f5761173f61350f565b9050602002016020810190611754919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba0308484838181106117ae576117ae61350f565b90506020020160208101906117c3919061321c565b6040516001600160a01b03909116815260200160405180910390a15b6001016116d6565b6117ef612312565b6117f7611c2f565b61180081611bc6565b61102a6001606555565b60ce602052815f5260405f208181548110611823575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6001600160a01b0381165f90815260ce60209081526040918290208054835181840281018401909452808452606093928301828280156118a557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611887575b50505050509050919050565b5f5f6118bc81611f23565b6118c4611c2f565b6118d033868686611fa0565b91506118dc6001606555565b509392505050565b6118ec612312565b6001600160a01b0381166119515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610774565b61102a81611b75565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6119c761246c565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611a1b6124e1565b60985480198219811614611a425760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f5f611a8d60d484611eff565b949350505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190613555565b6110e357604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b600260655403611c815760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610774565b6002606555565b5f8060d781611c9f61099b368a90038a018a6134b3565b815260208082019290925260409081015f90812088825290925281209150611cc78286611eff565b9150611cd590508286612159565b505f8115611dec57856001600160a01b031663d9caed1286886001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4d919061345d565b856040518463ffffffff1660e01b8152600401611d6c93929190613478565b6020604051808303815f875af1158015611d88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dac919061349c565b90507fe6413aa0c789e437b0a06bf64b20926584f066c79a2d8b80a759c85472f7b0af88888885604051611de39493929190613523565b60405180910390a15b5f611df684611ef3565b519050805f03611e8457611e348860da5f611e1961099b368f90038f018f6134b3565b81526020019081526020015f2061259290919063ffffffff16565b50611e5f60da5f611e4d61099b368e90038e018e6134b3565b81526020019081526020015f20612125565b5f03611e8457611e82611e7a61099b368c90038c018c6134b3565b60d890612592565b505b50979650505050505050565b5f815f0151826020015163ffffffff16604051602001611edb92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261132190613574565b60605f6108af8361259d565b5f808080611f16866001600160a01b0387166125a8565b9097909650945050505050565b609854600160ff83161b9081160361102a5760405163840a48d560e01b815260040160405180910390fd5b42811015611f6f57604051630819bdcd60e01b815260040160405180910390fd5b611f836001600160a01b03851684846125e0565b6107fe57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260d16020526040812054849060ff16611fda57604051632efd965160e11b815260040160405180910390fd5b611fef6001600160a01b038516338786612634565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303815f875af115801561203b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205f919061349c565b91505f5f61206e88888661216d565b604051631e328e7960e11b81526001600160a01b038b811660048301528a8116602483015260448201849052606482018390529294509092507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8290911690633c651cf2906084015f604051808303815f87803b1580156120ec575f5ffd5b505af11580156120fe573d5f5f3e3d5ffd5b50505050505050949350505050565b5f6113218261268c565b5f808080611f168686612696565b5f611321825490565b5f6108af83836126bf565b5f611a8d846001600160a01b038516846126e5565b5f6108af8383612701565b5f6108af836001600160a01b03841661274d565b5f806001600160a01b038516612196576040516316f2ccc960e01b815260040160405180910390fd5b825f036121b6576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038086165f90815260cd602090815260408083209388168352929052908120549081900361225c576001600160a01b0386165f90815260ce60209081526040909120541061221e576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b038681165f90815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169187169190911790555b61226684826135ab565b6001600160a01b038088165f90815260cd60209081526040808320938a16835292905281902091909155517f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62906122c290889088908890613478565b60405180910390a1959294509192505050565b60605f6122e183612769565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b031633146110e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610774565b5f815f0361238d576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038085165f90815260cd6020908152604080832093871683529290522054808311156123d357604051634b18b19360e01b815260040160405180910390fd5b6123dd83826135be565b6001600160a01b038087165f90815260cd602090815260408083209389168352929052908120829055909150819003611a8d57611a8d8585612790565b60605f6108af8361290e565b5f61242f61195a565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f6124987f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b9050805f815181106124ac576124ac61350f565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612561919061345d565b6001600160a01b0316336001600160a01b0316146110e35760405163794821ff60e01b815260040160405180910390fd5b5f6108af8383612966565b60606113218261241a565b5f8181526002830160205260408120548190806125d5576125c98585612a49565b92505f9150610b099050565b600192509050610b09565b5f5f5f6125ed8585612a54565b90925090505f816004811115612605576126056135d1565b1480156126235750856001600160a01b0316826001600160a01b0316145b806112eb57506112eb868686612a93565b6107fe846323b872dd60e01b85858560405160240161265593929190613478565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b7a565b5f61132182612125565b5f80806126a3858561212e565b5f81815260029690960160205260409095205494959350505050565b5f825f0182815481106126d4576126d461350f565b905f5260205f200154905092915050565b5f8281526002840160205260408120829055611a8d848461214e565b5f81815260018301602052604081205461274657508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611321565b505f611321565b5f81815260028301602052604081208190556108af8383612592565b5f60ff8216601f81111561132157604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b0382165f90815260ce6020526040812054905b818110156128a2576001600160a01b038481165f90815260ce60205260409020805491851691839081106127e0576127e061350f565b5f918252602090912001546001600160a01b03160361289a576001600160a01b0384165f90815260ce60205260409020805461281e906001906135be565b8154811061282e5761282e61350f565b5f9182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061286a5761286a61350f565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506128a2565b6001016127aa565b8181036128c257604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b0384165f90815260ce602052604090208054806128e8576128e86135e5565b5f8281526020902081015f1990810180546001600160a01b031916905501905550505050565b6060815f018054806020026020016040519081016040528092919081815260200182805480156118a557602002820191905f5260205f20905b8154815260200190600101908083116129475750505050509050919050565b5f8181526001830160205260408120548015612a40575f6129886001836135be565b85549091505f9061299b906001906135be565b90508181146129fa575f865f0182815481106129b9576129b961350f565b905f5260205f200154905080875f0184815481106129d9576129d961350f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612a0b57612a0b6135e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611321565b5f915050611321565b5f6108af8383612c52565b5f5f8251604103612a88576020830151604084015160608501515f1a612a7c87828585612c69565b94509450505050610b09565b505f90506002610b09565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401612abb9291906135f9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612af99190613611565b5f60405180830381855afa9150503d805f8114612b31576040519150601f19603f3d011682016040523d82523d5f602084013e612b36565b606091505b5091509150818015612b4a57506020815110155b80156112eb57508051630b135d3f60e11b90612b6f908301602090810190840161349c565b149695505050505050565b5f612bce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d269092919063ffffffff16565b905080515f1480612bee575080806020019051810190612bee9190613555565b612c4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610774565b505050565b5f81815260018301602052604081205415156108af565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612c9e57505f90506003612d1d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612cef573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612d17575f60019250925050612d1d565b91505f90505b94509492505050565b6060611a8d84845f85855f5f866001600160a01b03168587604051612d4b9190613611565b5f6040518083038185875af1925050503d805f8114612d85576040519150601f19603f3d011682016040523d82523d5f602084013e612d8a565b606091505b50915091506116958783838760608315612e045782515f03612dfd576001600160a01b0385163b612dfd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610774565b5081611a8d565b611a8d8383815115612e195781518083602001fd5b8060405162461bcd60e51b81526004016107749190613265565b5f60208284031215612e43575f5ffd5b5035919050565b6001600160a01b038116811461102a575f5ffd5b5f5f5f60608486031215612e70575f5ffd5b8335612e7b81612e4a565b92506020840135612e8b81612e4a565b929592945050506040919091013590565b5f60408284031215612eac575f5ffd5b50919050565b5f5f5f60808486031215612ec4575f5ffd5b612ece8585612e9c565b9250604084013591506060840135612ee581612e4a565b809150509250925092565b5f5f5f5f60808587031215612f03575f5ffd5b8435612f0e81612e4a565b93506020850135612f1e81612e4a565b92506040850135612f2e81612e4a565b9396929550929360600135925050565b5f5f60608385031215612f4f575f5ffd5b612f598484612e9c565b946040939093013593505050565b5f8151808452602084019350602083015f5b82811015612fa05781516001600160a01b0316865260209586019590910190600101612f79565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612fa0578151865260209586019590910190600101612fbc565b604081525f612fec6040830185612f67565b8281036020840152612ffe8185612faa565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561304357613043613007565b604052919050565b5f5f5f5f5f5f60c08789031215613060575f5ffd5b863561306b81612e4a565b9550602087013561307b81612e4a565b945060408701359350606087013561309281612e4a565b92506080870135915060a08701356001600160401b038111156130b3575f5ffd5b8701601f810189136130c3575f5ffd5b80356001600160401b038111156130dc576130dc613007565b6130ef601f8201601f191660200161301b565b8181528a6020838501011115613103575f5ffd5b816020840160208301375f602083830101528093505050509295509295509295565b604080825283519082018190525f9060208501906060840190835b818110156131675783516001600160a01b0316835260209384019390920191600101613140565b505083810360208501526112eb8186612faa565b602080825282518282018190525f918401906040840190835b818110156131cd57835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101613194565b509095945050505050565b5f5f5f5f60a085870312156131eb575f5ffd5b6131f58686612e9c565b935060408501359250606085013561320c81612e4a565b9396929550929360800135925050565b5f6020828403121561322c575f5ffd5b81356108af81612e4a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6108af6020830184613237565b5f60208284031215613287575f5ffd5b813560ff811681146108af575f5ffd5b5f5f602083850312156132a8575f5ffd5b82356001600160401b038111156132bd575f5ffd5b8301601f810185136132cd575f5ffd5b80356001600160401b038111156132e2575f5ffd5b8560208260051b84010111156132f6575f5ffd5b6020919091019590945092505050565b5f60408284031215613316575f5ffd5b6108af8383612e9c565b602081525f6108af6020830184612faa565b5f5f5f5f5f5f60c08789031215613347575f5ffd5b863561335281612e4a565b9550602087013561336281612e4a565b9450604087013561337281612e4a565b959894975094956060810135955060808101359460a0909101359350915050565b5f5f604083850312156133a4575f5ffd5b82356133af81612e4a565b946020939093013593505050565b602081525f6108af6020830184612f67565b5f5f604083850312156133e0575f5ffd5b82356133eb81612e4a565b915060208301356133fb81612e4a565b809150509250929050565b803563ffffffff81168114613419575f5ffd5b919050565b803561342981612e4a565b6001600160a01b0316825263ffffffff61344560208301613406565b1660208301525050565b60408101611321828461341e565b5f6020828403121561346d575f5ffd5b81516108af81612e4a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f602082840312156134ac575f5ffd5b5051919050565b5f60408284031280156134c4575f5ffd5b50604080519081016001600160401b03811182821017156134e7576134e7613007565b60405282356134f581612e4a565b815261350360208401613406565b60208201529392505050565b634e487b7160e01b5f52603260045260245ffd5b60a08101613531828761341e565b60408201949094526001600160a01b03929092166060830152608090910152919050565b5f60208284031215613565575f5ffd5b815180151581146108af575f5ffd5b80516020808301519190811015612eac575f1960209190910360031b1b16919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561132157611321613597565b8181038181111561132157611321613597565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f611a8d6040830184613237565b5f82518060208501845e5f92019182525091905056fea2646970667358221220bc0f3bd67d68441e4962c97aca77871e5222a94272edd1bef90610223213528664736f6c634300081c003300000000000000", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000200000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000200000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000007": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", - "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000002" + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "13": { - "address": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", - "code": "0x608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f5ffd5b61006c6100673660046102d7565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c610109565b5f546001600160a01b031661007b565b61006c6100bd3660046102d7565b61011c565b6100ca61019a565b6100d3816101f3565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b61011161019a565b61011a5f610288565b565b61012461019a565b6001600160a01b03811661018e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019781610288565b50565b5f546001600160a01b0316331461011a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610185565b6001600160a01b0381163b6102665760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b6064820152608401610185565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156102e7575f5ffd5b81356001600160a01b03811681146102fd575f5ffd5b939250505056fea2646970667358221220be4c7cc530907d473b805a59b00a64447acfd3e76912b0c8b378f7f85a7dcd7964736f6c634300081c003300", + "40": { + "address": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF", + "code": "0x60806040526004361061003e575f3560e01c806305b1137b1461004257806325ccedec14610063578063c6b295c114610082578063d0e30db014610061575b5f5ffd5b34801561004d575f5ffd5b5061006161005c36600461025e565b6100a1565b005b34801561006e575f5ffd5b5061006161007d366004610288565b6100b8565b34801561008d575f5ffd5b5061006161009c3660046102ef565b6100da565b6100b46001600160a01b038316826100f7565b5050565b6100d56001600160a01b038416836001600160801b038416610120565b505050565b5f6100e6848484610171565b9050806100f1575f5ffd5b50505050565b5f5f5f5f5f85875af19050806100d557604051633d2cec6f60e21b815260040160405180910390fd5b6040516001600160a01b0383166024820152604481018290526100d590849060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610188565b5f5f5f5f85516020870186895af195945050505050565b5f5f836001600160a01b0316836040516101a291906103be565b5f604051808303815f865af19150503d805f81146101db576040519150601f19603f3d011682016040523d82523d5f602084013e6101e0565b606091505b50915091505f82801561020b57508151158061020b57508180602001905181019061020b91906103d4565b905080158061022257506001600160a01b0385163b155b156102405760405163022e258160e11b815260040160405180910390fd5b5050505050565b6001600160a01b038116811461025b575f5ffd5b50565b5f5f6040838503121561026f575f5ffd5b823561027a81610247565b946020939093013593505050565b5f5f5f6060848603121561029a575f5ffd5b83356102a581610247565b925060208401356102b581610247565b915060408401356001600160801b03811681146102d0575f5ffd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610301575f5ffd5b833561030c81610247565b9250602084013567ffffffffffffffff811115610327575f5ffd5b8401601f81018613610337575f5ffd5b803567ffffffffffffffff811115610351576103516102db565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610380576103806102db565b604052818152828201602001881015610397575f5ffd5b816020840160208301375f9181016020019190915293969395505050506040919091013590565b5f82518060208501845e5f920191825250919050565b5f602082840312156103e4575f5ffd5b815180151581146103f3575f5ffd5b939250505056fea2646970667358221220e15b63f91e6991821f65737cac336991d5cc359c4ff89ae5c1bfc80c0760985864736f6c634300081c003300", + "storage": {} + }, + "24": { + "address": "0xBeaAFDA2E17fC95E69Dc06878039d274E0d2B21A", + "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c11131481565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea2646970667358221220c0cb81d4a21d0eba005b3a8e586341c26034d8b6f4bc7492f673795b56a1044c64736f6c634300081c00330000", + "storage": {} + }, + "16": { + "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "code": "0x73e7f1725e7734ce288f8367e1bb143e90bb3f0512301460806040526004361061009b575f3560e01c80632a6c32291161006e5780632a6c322914610191578063805ce31d146101c5578063928bc49d146101db57806399056fcc146101ee578063fe61cc491461020d575f5ffd5b80630705f4651461009f57806309824a80146100c85780630b617646146100e957806326aa101f1461014a575b5f5ffd5b6100b26100ad366004611fdf565b61026c565b6040516100bf919061200a565b60405180910390f35b8180156100d3575f5ffd5b506100e76100e236600461203a565b610282565b005b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6547f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f754604080519283526001600160801b039091166020830152016100bf565b61018161015836600461203a565b6001600160a01b03165f9081525f5160206125e85f395f51905f52602052604090205460ff1690565b60405190151581526020016100bf565b6101a461019f366004611fdf565b61033b565b6040805167ffffffffffffffff9384168152929091166020830152016100bf565b6101cd61036a565b6040519081526020016100bf565b6101cd6101e936600461207c565b610380565b8180156101f9575f5ffd5b506100e76102083660046120bc565b6103e0565b61025461021b366004611fdf565b5f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016100bf565b5f5f61027783610494565b5460ff169392505050565b5f5160206125e85f395f51905f52610299826104ef565b60408051608081019091526001820154600160a01b900463ffffffff1681525f90602081016102c6610586565b815260028401546020909101906102e79086906001600160801b03166105e7565b81525f6020918201526040516001600160a01b03861681529192507ff78bb28d4b1d7da699e5c0bc2be29c2b04b5aab6aacf6298fe5304f9db9c6d7e910160405180910390a161033681610632565b505050565b5f5f5f61034784610494565b5467ffffffffffffffff6101008204811696600160481b90920416945092505050565b5f61037b610376610586565b610836565b905090565b6001600160a01b0383165f9081525f5160206125e85f395f51905f52602081905260408220805460ff166103c75760405163259ba1ad60e01b815260040160405180910390fd5b6103d461037686866108c7565b925050505b9392505050565b5f5160206125e85f395f51905f526001600160801b0382165f036104175760405163162908e360e11b815260040160405180910390fd5b6001600160a01b0387165f908152602082905260409020805460ff166104505760405163259ba1ad60e01b815260040160405180910390fd5b60018101546104745761046f61046a8989898989896109ae565b610632565b61048a565b61048a61046a82600101548a8a8a8a8a8a610b97565b5050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b03166104ea57604051636ddd9da960e01b815260040160405180910390fd5b919050565b610501816001600160a01b0316610cf9565b61051e5760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081525f5160206125e85f395f51905f5260208190526040909120805460ff168015610559575061055981610d3f565b1561057757604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b604080518082019091527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230546001600160801b031681527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23154602082015290565b60605f6105f346610d53565b5f6105fd86610dbc565b61060686610ded565b60405160200161061a959493929190612161565b60405160208183030381529060405290505b92915050565b805160408051637061726160e01b60208083019190915260e09390931b6001600160e01b031916602482015281516008818303018152602890910190915280519101205f61067f82610494565b905061068a81610e8c565b5f6106988460200151610836565b90505f84606001516001600160801b0316826106b491906121c4565b9050803410156106d757604051631c0b171360e31b815260040160405180910390fd5b60608501516001600160801b0316156107225761072285606001516001600160801b031661070f5f5160206125e85f395f51905f5290565b600101546001600160a01b031690610f08565b825461074090600160481b900467ffffffffffffffff1660016121d7565b835467ffffffffffffffff91909116600160481b0270ffffffffffffffff000000000000000000199091161783555f61077982346121f7565b9050610783610f31565b811115610794576107943382610f08565b83546040805160208101889052600160481b90920460c01b6001600160c01b031916908201525f9060480160405160208183030381529060405280519060200120905080867f7153f9357c8ea496bba60bf82e67143e27b64462b49041f8e689e1b05728f84f875f0160099054906101000a900467ffffffffffffffff168a6040015160405161082592919061220a565b60405180910390a350505050505050565b80517f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7545f917f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f691839161089c9161089791906001600160801b03166121c4565b610f3e565b90506108b0825f0154836002015483610f88565b84602001516108bf91906121c4565b949350505050565b604080518082019091525f80825260208201527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f545f5160206125e85f395f51905f5290600160a01b900463ffffffff9081169085160361093e576002810154600160801b90046001600160801b031682526109a1565b60058101546001600160801b0361010090910481169084161115610975576040516332ee86af60e11b815260040160405180910390fd5b6002810154610995908490600160801b90046001600160801b0316612250565b6001600160801b031682525b505f602082015292915050565b6109b6611f9a565b5f5160206125e85f395f51905f526001600160a01b038816156109f85760018101546109ed906001600160a01b031689898661100d565b5f6060830152610a08565b6001600160801b03831660608301525b6001810154600160a01b900463ffffffff168252610a2686856108c7565b6020830152600181015463ffffffff808816600160a01b9092041603610a9f57610a4f85611089565b15610a8657610a7c88610a61876110b2565b6002840154600160801b90046001600160801b0316866110c9565b6040830152610b38565b604051634851657960e11b815260040160405180910390fd5b836001600160801b03165f03610ac8576040516332ee86af60e11b815260040160405180910390fd5b610ad185611089565b15610b0057610a7c8887610ae4886110b2565b6002850154600160801b90046001600160801b03168888611127565b610b09856111ba565b15610a8657610a7c8887610b1c886111c2565b6002850154600160801b90046001600160801b031688886111d9565b8563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610b8492919061227d565b60405180910390a4509695505050505050565b610b9f611f9a565b5f5f5160206125e85f395f51905f52604051632770a7eb60e21b81526001600160a01b0389811660048301526001600160801b038616602483015291925090891690639dc29fac906044015f604051808303815f87803b158015610c01575f5ffd5b505af1158015610c13573d5f5f3e3d5ffd5b505050506001810154600160a01b900463ffffffff168252610c3586856108c7565b60208301525f6060830152600181015463ffffffff808816600160a01b90920416148015610c675750610c6785611089565b15610a8657610c9489610c79876110b2565b6002840154600160801b90046001600160801b031686611251565b60408301528563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610ce592919061227d565b60405180910390a450979650505050505050565b5f6001600160a01b0382163f1580159061062c5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f610d4c82600101541590565b1592915050565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051606082811b6001600160601b0319166020830152906034016040516020818303038152906040529050919050565b6eff000000ff000000ff000000ff0000600882811c9182166fff000000ff000000ff000000ff0000009390911b92831617601090811c6cff000000ff000000ff000000ff929092166dff000000ff000000ff000000ff00939093169290921790911b17602081811c6bffffffff00000000ffffffff166fffffffff00000000ffffffff000000009290911b9190911617604081811c91901b1760801b90565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff166001811115610ec457610ec4611ff6565b141580610ee657505f825460ff166001811115610ee357610ee3611ff6565b14155b15610f0457604051633ac4266d60e11b815260040160405180910390fd5b5050565b5f5f5f5f5f85875af190508061033657604051633d2cec6f60e21b815260040160405180910390fd5b5f61037b3a615208612323565b5f610f52670de0b6b3a76400005f1961234e565b821115610f7a57604051631cd951a760e01b8152600481018390526024015b60405180910390fd5b50670de0b6b3a76400000290565b5f5f5160206125e85f395f51905f5281610fa9670de0b6b3a7640000610f3e565b60058301549091505f90610fd390610fc39060ff16610f3e565b610fcd600a610f3e565b906112dd565b90505f610ff683610fea84610ff08c838d8d6113ed565b906113ed565b906113fb565b905061100181611412565b98975050505050505050565b61101f836001600160a01b0316610cf9565b61103c5760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036110655760405163162908e360e11b815260040160405180910390fd5b6110836001600160a01b03841683866001600160801b038516611425565b50505050565b5f60015b61109a602084018461236d565b60028111156110ab576110ab611ff6565b1492915050565b5f6110c06020830183612386565b61062c916123d0565b60605f6110d546610d53565b600160f81b6110e388610dbc565b5f886110ee88610ded565b6110f78a610ded565b60405160200161110e9897969594939291906123ed565b6040516020818303038152906040529050949350505050565b60605f61113346610d53565b600160f81b6111418a610dbc565b600160f81b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6111748a610ded565b61117d8a610ded565b6111868d610ded565b60405160200161119f9a9998979695949392919061245b565b60405160208183030381529060405290509695505050505050565b5f600261108d565b5f6111d06020830183612386565b61062c916124e3565b60605f6111e546610d53565b600160f81b6111f38a610dbc565b600160f91b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6112268a610ded565b61122f8a610ded565b6112388d610ded565b60405160200161119f9a9998979695949392919061252b565b60605f61125d46610d53565b600160f91b875f8861126e88610ded565b6112778a610ded565b6040516001600160f81b031998891660208201526001600160c01b031990971660218801529487166029870152602a8601939093529416604a840152604b8301939093526001600160801b0319928316606b83015291909116607b820152608b0161110e565b5f82828183036113065780156112f3575f6112fd565b670de0b6b3a76400005b9250505061062c565b670de0b6b3a7640000820361132757670de0b6b3a76400009250505061062c565b805f0361134057670de0b6b3a76400009250505061062c565b670de0b6b3a7640000810361135957849250505061062c565b670de0b6b3a764000082111561138a5761138361137e6113788761147e565b866113ed565b6115a6565b92506113e5565b5f6113aa6113a7846ec097ce7bc90715b34b9f100000000061234e565b90565b90505f6113c261137e6113bc8461147e565b886113ed565b90506113e06113a7826ec097ce7bc90715b34b9f100000000061234e565b945050505b505092915050565b5f6103d96113a784846115fa565b5f6103d96113a784670de0b6b3a7640000856116ac565b5f61062c670de0b6b3a76400008361234e565b6040516001600160a01b038085166024830152831660448201526064810182905261108390859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b17905261177b565b5f81670de0b6b3a76400008110156114ac5760405163036d32ef60e41b815260048101849052602401610f71565b5f61152e670de0b6b3a7640000830460016001600160801b03821160071b91821c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211871b91821c969096119490961792909217171791909117919091171790565b9050670de0b6b3a7640000810282821c670de0b6b3a763ffff1981016115575750949350505050565b671bc16d674ec800006706f05b59d3b200005b801561159a57670de0b6b3a7640000838002049250818310611592579283019260019290921c915b60011c61156a565b50919695505050505050565b5f81680a688906bd8affffff8111156115d55760405163b3b6ba1f60e01b815260048101849052602401610f71565b5f6115ec670de0b6b3a7640000604084901b61234e565b90506108bf6113a78261183a565b5f80805f19848609848602925082811083820303915050805f0361162b5750670de0b6b3a76400009004905061062c565b670de0b6b3a7640000811061165d57604051635173648d60e01b81526004810186905260248101859052604401610f71565b5f670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b5f80805f19858709858702925082811083820303915050805f036116e3578382816116d9576116d961233a565b04925050506103d9565b83811061171457604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610f71565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f836001600160a01b03168360405161179591906125bd565b5f604051808303815f865af19150503d805f81146117ce576040519150601f19603f3d011682016040523d82523d5f602084013e6117d3565b606091505b50915091505f8280156117fe5750815115806117fe5750818060200190518101906117fe91906125c8565b905080158061181557506001600160a01b0385163b155b156118335760405163022e258160e11b815260040160405180910390fd5b5050505050565b600160bf1b67ff000000000000008216156119475767800000000000000082161561186e5768016a09e667f3bcc9090260401c5b67400000000000000082161561188d576801306fe0a31b7152df0260401c5b6720000000000000008216156118ac576801172b83c7d517adce0260401c5b6710000000000000008216156118cb5768010b5586cf9890f62a0260401c5b6708000000000000008216156118ea576801059b0d31585743ae0260401c5b67040000000000000082161561190957680102c9a3e778060ee70260401c5b6702000000000000008216156119285768010163da9fb33356d80260401c5b67010000000000000082161561194757680100b1afa5abcbed610260401c5b66ff000000000000821615611a465766800000000000008216156119745768010058c86da1c09ea20260401c5b6640000000000000821615611992576801002c605e2e8cec500260401c5b66200000000000008216156119b057680100162f3904051fa10260401c5b66100000000000008216156119ce576801000b175effdc76ba0260401c5b66080000000000008216156119ec57680100058ba01fb9f96d0260401c5b6604000000000000821615611a0a5768010002c5cc37da94920260401c5b6602000000000000821615611a28576801000162e525ee05470260401c5b6601000000000000821615611a465768010000b17255775c040260401c5b65ff0000000000821615611b3c5765800000000000821615611a71576801000058b91b5bc9ae0260401c5b65400000000000821615611a8e57680100002c5c89d5ec6d0260401c5b65200000000000821615611aab5768010000162e43f4f8310260401c5b65100000000000821615611ac857680100000b1721bcfc9a0260401c5b65080000000000821615611ae55768010000058b90cf1e6e0260401c5b65040000000000821615611b02576801000002c5c863b73f0260401c5b65020000000000821615611b1f57680100000162e430e5a20260401c5b65010000000000821615611b3c576801000000b1721835510260401c5b64ff00000000821615611c2957648000000000821615611b6557680100000058b90c0b490260401c5b644000000000821615611b815768010000002c5c8601cc0260401c5b642000000000821615611b9d576801000000162e42fff00260401c5b641000000000821615611bb95768010000000b17217fbb0260401c5b640800000000821615611bd5576801000000058b90bfce0260401c5b640400000000821615611bf157680100000002c5c85fe30260401c5b640200000000821615611c0d5768010000000162e42ff10260401c5b640100000000821615611c2957680100000000b17217f80260401c5b63ff000000821615611d0d576380000000821615611c505768010000000058b90bfc0260401c5b6340000000821615611c6b576801000000002c5c85fe0260401c5b6320000000821615611c8657680100000000162e42ff0260401c5b6310000000821615611ca1576801000000000b17217f0260401c5b6308000000821615611cbc57680100000000058b90c00260401c5b6304000000821615611cd75768010000000002c5c8600260401c5b6302000000821615611cf2576801000000000162e4300260401c5b6301000000821615611d0d5768010000000000b172180260401c5b62ff0000821615611de85762800000821615611d32576801000000000058b90c0260401c5b62400000821615611d4c57680100000000002c5c860260401c5b62200000821615611d665768010000000000162e430260401c5b62100000821615611d8057680100000000000b17210260401c5b62080000821615611d9a5768010000000000058b910260401c5b62040000821615611db4576801000000000002c5c80260401c5b62020000821615611dce57680100000000000162e40260401c5b62010000821615611de8576801000000000000b1720260401c5b61ff00821615611eba57618000821615611e0b57680100000000000058b90260401c5b614000821615611e245768010000000000002c5d0260401c5b612000821615611e3d576801000000000000162e0260401c5b611000821615611e565768010000000000000b170260401c5b610800821615611e6f576801000000000000058c0260401c5b610400821615611e8857680100000000000002c60260401c5b610200821615611ea157680100000000000001630260401c5b610100821615611eba57680100000000000000b10260401c5b60ff821615611f83576080821615611edb57680100000000000000590260401c5b6040821615611ef3576801000000000000002c0260401c5b6020821615611f0b57680100000000000000160260401c5b6010821615611f23576801000000000000000b0260401c5b6008821615611f3b57680100000000000000060260401c5b6004821615611f5357680100000000000000030260401c5b6002821615611f6b57680100000000000000010260401c5b6001821615611f8357680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60405180608001604052805f63ffffffff168152602001611fcc60405180604001604052805f81526020015f81525090565b8152606060208201525f60409091015290565b5f60208284031215611fef575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061201e5761201e611ff6565b91905290565b80356001600160a01b03811681146104ea575f5ffd5b5f6020828403121561204a575f5ffd5b6103d982612024565b803563ffffffff811681146104ea575f5ffd5b80356001600160801b03811681146104ea575f5ffd5b5f5f5f6060848603121561208e575f5ffd5b61209784612024565b92506120a560208501612053565b91506120b360408501612066565b90509250925092565b5f5f5f5f5f5f60c087890312156120d1575f5ffd5b6120da87612024565b95506120e860208801612024565b94506120f660408801612053565b9350606087013567ffffffffffffffff811115612111575f5ffd5b87016040818a031215612122575f5ffd5b925061213060808801612066565b915061213e60a08801612066565b90509295509295509295565b5f81518060208401855e5f93019283525090919050565b6001600160f81b031986811682526001600160c01b031986166001830152841660098201525f612194600a83018561214a565b6001600160801b03199390931683525050601001949350505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561062c5761062c6121b0565b67ffffffffffffffff818116838216019081111561062c5761062c6121b0565b8181038181111561062c5761062c6121b0565b67ffffffffffffffff83168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b6001600160801b03818116838216019081111561062c5761062c6121b0565b8035600381106104ea575f5ffd5b604081525f61228b8461226f565b6003811061229b5761229b611ff6565b6040830152602084013536859003601e190181126122b7575f5ffd5b840160208101903567ffffffffffffffff8111156122d3575f5ffd5b8036038213156122e1575f5ffd5b60406060850152806080850152808260a08601375f60a0828601015260a0601f19601f830116850101925050506103d960208301846001600160801b03169052565b808202811582820484141761062c5761062c6121b0565b634e487b7160e01b5f52601260045260245ffd5b5f8261236857634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561237d575f5ffd5b6103d98261226f565b5f5f8335601e1984360301811261239b575f5ffd5b83018035915067ffffffffffffffff8211156123b5575f5ffd5b6020019150368190038213156123c9575f5ffd5b9250929050565b8035602083101561062c575f19602084900360031b1b1692915050565b6001600160f81b031989811682526001600160c01b031989166001830152871660098201525f612420600a83018861214a565b6001600160f81b0319969096168652505060018401929092526001600160801b03199081166021840152166031820152604101949350505050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61248e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b031994909416600186015260058501929092526001600160801b031990811660258501529081166035840152166045820152605501949350505050565b80356001600160601b03198116906014841015612524576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61255e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b03199490941660018601526001600160601b03199290921660058501526001600160801b031990811660198501529081166029840152166039820152604901949350505050565b5f6103d9828461214a565b5f602082840312156125d8575f5ffd5b815180151581146103d9575f5ffdfe8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22ea264697066735822122047ead480ec5464b4366963197a8a448d55497c4257973ecf20b3f47a24f14e4a64736f6c634300081c003300", + "storage": {} + }, + "31": { + "address": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000059b670e9fa9d0a427751af201d676719a970857b" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000007a2088a1bfc9d81c55368ae168c2c02570cb814f" } }, - "7": { - "address": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0", - "code": "0x6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063c298557814602a575b5f5ffd5b5f60405190815260200160405180910390f3fea264697066735822122022ac219b35ffb81be6ac40f64b3aa0c62efd14025f34ec85b771c37562ecb39e64736f6c634300081c00330000", + "0": { + "address": "0x00000961Ef480Eb55e80D19ad83579A64c007002", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd00", "storage": {} }, - "22": { - "address": "0xac06641381166cf085281c45292147f833C622d7", - "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea2646970667358221220c0cb81d4a21d0eba005b3a8e586341c26034d8b6f4bc7492f673795b56a1044c64736f6c634300081c00330000", + "4": { + "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", + "code": "0x739fe46736679d2d9a65f0992f2272de9f3c7fa6e03014608060405260043610610055575f3560e01c80634a283cd91461005957806376b1d08f1461007a578063fd10ebe514610099578063fe65a388146100d2575b5f5ffd5b818015610064575f5ffd5b50610078610073366004610aed565b6100f1565b005b610082600881565b60405160ff90911681526020015b60405180910390f35b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0546040516001600160401b039091168152602001610090565b8180156100dd575f5ffd5b506100786100ec366004610b67565b610202565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab906001600160a01b0316806101e4578260405161015990610ae0565b908152602001604051809103905ff080158015610178573d5f5f3e3d5ffd5b505f84815260028401602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251878152918201529192507f7c96960a1ebd8cc753b10836ea25bd7c9c4f8cd43590db1e8b3648cb0ec4cc89910160405180910390a1505050565b604051630d82532d60e21b815260040160405180910390fd5b505050565b61028d336102448a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061029792505050565b61024e888a610c98565b87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508891506102bf9050565b5050505050505050565b6040805180820182525f80825260606020928301528251808401909352825281019190915290565b6102c761056c565b6001600160801b033411156102ef576040516330e972ad60e01b815260040160405180910390fd5b6102f98183610d8e565b6001600160801b03163410156103225760405163044044a560e21b815260040160405180910390fd5b5f61034c7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b796105c5565b90506103616001600160a01b0382163461061d565b8451600810156103845760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561039e5761039e610c54565b6040519080825280602002602001820160405280156103e357816020015b604080518082019091525f8152606060208201528152602001906001900390816103bc5790505b5090505f5b86518110156104385761041387828151811061040657610406610dad565b6020026020010151610646565b82828151811061042557610425610dad565b60209081029190910101526001016103e8565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab9061048f906001600160401b03166001610dc1565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a81526020018881526020018688346104f09190610de0565b6104fa9190610de0565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c91610558916001600160401b0316908490610e56565b60405180910390a150505050505050505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff1660018111156105a4576105a4610f6b565b146105c257604051633ac4266d60e11b815260040160405180910390fd5b50565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106185760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f5f5f5f85875af19050806101fd57604051633d2cec6f60e21b815260040160405180910390fd5b604080518082019091525f815260606020820152602082015160ff165f819003610698575f5f848060200190518101906106809190610f7f565b925092505061068f82826106b1565b95945050505050565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166107245760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b03161161074d5760405163162908e360e11b815260040160405180910390fd5b6001810154610783576001820154610770906001600160a01b0316863387610821565b61077a858561089d565b9250505061081b565b61078c81610919565b1561080257604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b1580156107de575f5ffd5b505af11580156107f0573d5f5f3e3d5ffd5b5050505061077a81600101548561092d565b604051636890662960e01b815260040160405180910390fd5b92915050565b610833836001600160a01b0316610987565b6108505760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036108795760405163162908e360e11b815260040160405180910390fd5b6108976001600160a01b03841683866001600160801b0385166109cd565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060015b60408051601f1981840301815291905290529392505050565b5f61092682600101541590565b1592915050565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a90529151169581019590955292939083019101610900565b5f6001600160a01b0382163f1580159061081b5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b6040516001600160a01b038085166024830152831660448201526064810182905261089790859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b031683604051610a3b9190610fd9565b5f604051808303815f865af19150503d805f8114610a74576040519150601f19603f3d011682016040523d82523d5f602084013e610a79565b606091505b50915091505f828015610aa4575081511580610aa4575081806020019051810190610aa49190610fef565b9050801580610abb57506001600160a01b0385163b155b15610ad95760405163022e258160e11b815260040160405180910390fd5b5050505050565b61032e8061101683390190565b5f60208284031215610afd575f5ffd5b5035919050565b5f5f83601f840112610b14575f5ffd5b5081356001600160401b03811115610b2a575f5ffd5b602083019150836020828501011115610b41575f5ffd5b9250929050565b6001600160801b03811681146105c2575f5ffd5b803561061881610b48565b5f5f5f5f5f5f5f5f60a0898b031215610b7e575f5ffd5b88356001600160401b03811115610b93575f5ffd5b610b9f8b828c01610b04565b90995097505060208901356001600160401b03811115610bbd575f5ffd5b8901601f81018b13610bcd575f5ffd5b80356001600160401b03811115610be2575f5ffd5b8b60208260051b8401011115610bf6575f5ffd5b6020919091019650945060408901356001600160401b03811115610c18575f5ffd5b610c248b828c01610b04565b9095509350610c37905060608a01610b5c565b9150610c4560808a01610b5c565b90509295985092959890939650565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610c9057610c90610c54565b604052919050565b5f6001600160401b03831115610cb057610cb0610c54565b8260051b610cc060208201610c68565b84815290830190602081019036831115610cd8575f5ffd5b845b83811015610d705780356001600160401b03811115610cf7575f5ffd5b860136601f820112610d07575f5ffd5b80356001600160401b03811115610d2057610d20610c54565b610d33601f8201601f1916602001610c68565b818152366020838501011115610d47575f5ffd5b816020840160208301375f60208383010152808652505050602083019250602081019050610cda565b5095945050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561081b5761081b610d7a565b634e487b7160e01b5f52603260045260245ffd5b6001600160401b03818116838216019081111561081b5761081b610d7a565b6001600160801b03828116828216039081111561081b5761081b610d7a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f602082015160406020850152610e4e6040850182610dff565b949350505050565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b81811015610edd5761013f19878603018352610ec8858551610e2d565b94506020938401939290920191600101610eab565b505050506040840151838203603f19016080850152610efc8282610e2d565b9150506060840151603f198483030160a0850152610f1a8282610dff565b9150506080840151610f3760c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b634e487b7160e01b5f52602160045260245ffd5b5f5f5f60608486031215610f91575f5ffd5b835160ff81168114610fa1575f5ffd5b60208501519093506001600160a01b0381168114610fbd575f5ffd5b6040850151909250610fce81610b48565b809150509250925092565b5f82518060208501845e5f920191825250919050565b5f60208284031215610fff575f5ffd5b8151801515811461100e575f5ffd5b939250505056fe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea2646970667358221220c0cb81d4a21d0eba005b3a8e586341c26034d8b6f4bc7492f673795b56a1044c64736f6c634300081c0033a2646970667358221220ff9ad2d70749be87d0c380d588ef8b110f0571497cd39b7a7a730dff306b302764736f6c634300081c003300", "storage": {} }, - "21": { - "address": "0x0000BBdDc7CE488642fb579F8B00f3a590007251", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd00", - "storage": {} + "14": { + "address": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570", + "code": "0x608060405260043610610249575f3560e01c8063a364f4da11610134578063ce7b5e4b116100b3578063e481af9d11610078578063e481af9d14610704578063ec8d974a14610723578063f2fde38b14610742578063fc299dee14610761578063fce36c7d14610780578063fe776c2a1461079e575f5ffd5b8063ce7b5e4b14610638578063d156b91114610657578063d4c250081461069f578063de1164bb146106d3578063e2148f5a146106e5575f5ffd5b8063ba550880116100f9578063ba5508801461059b578063be6ab6ef146105ba578063c1a8e2c5146105db578063c63fd502146105fa578063c968095b14610619575f5ffd5b8063a364f4da146104f0578063a83157051461050f578063a98fb3551461052e578063a9a899cd1461054d578063b52657871461056c575f5ffd5b806359b00534116101cb5780638da5cb5b116101905780638da5cb5b1461043b5780638f661996146104585780638f8ee5521461046b5780639926ee7d146104935780639da16d8e146104b2578063a0169ddd146104d1575f5ffd5b806359b00534146103ab578063715018a6146103ca57806376999342146103de57806383821e8e146103fd578063847d634f1461041c575f5ffd5b80632fb31ef1116102115780632fb31ef1146102ea578063303ca9561461032057806333cfb7b71461033f5780633bc28c8c1461036b57806357e443551461038a575f5ffd5b80630ca298991461024d5780631500cd8d1461026e5780631785f53c1461028d5780631fdb0cfd146102ac578063279432eb146102cb575b5f5ffd5b348015610258575f5ffd5b5061026c61026736600461247b565b6107cc565b005b348015610279575f5ffd5b5061026c6102883660046124f4565b610a51565b348015610298575f5ffd5b5061026c6102a73660046124f4565b610aa2565b3480156102b7575f5ffd5b5061026c6102c636600461250f565b610b2a565b3480156102d6575f5ffd5b5061026c6102e53660046124f4565b610bb6565b3480156102f5575f5ffd5b506098546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b34801561032b575f5ffd5b5061026c61033a366004612563565b610c12565b34801561034a575f5ffd5b5061035e6103593660046124f4565b610d33565b60405161031791906125c3565b348015610376575f5ffd5b5061026c6103853660046124f4565b610d7b565b348015610395575f5ffd5b5061039e610ddc565b604051610317919061263c565b3480156103b6575f5ffd5b5061026c6103c53660046124f4565b610ff1565b3480156103d5575f5ffd5b5061026c6110db565b3480156103e9575f5ffd5b5061026c6103f8366004612661565b6110ee565b348015610408575f5ffd5b5061026c610417366004612696565b611148565b348015610427575f5ffd5b5061026c6104363660046126cc565b61135f565b348015610446575f5ffd5b506033546001600160a01b0316610303565b61026c610466366004612720565b6113e8565b348015610476575f5ffd5b5061047e5f81565b60405163ffffffff9091168152602001610317565b34801561049e575f5ffd5b5061026c6104ad366004612751565b6114a8565b3480156104bd575f5ffd5b5061026c6104cc3660046124f4565b611516565b3480156104dc575f5ffd5b5061026c6104eb3660046124f4565b611572565b3480156104fb575f5ffd5b5061026c61050a3660046124f4565b6115c8565b34801561051a575f5ffd5b5061026c6105293660046126cc565b611636565b348015610539575f5ffd5b5061026c6105483660046128a9565b611690565b348015610558575f5ffd5b5061026c6105673660046124f4565b6116e6565b348015610577575f5ffd5b5061058b6105863660046124f4565b611736565b6040519015158152602001610317565b3480156105a6575f5ffd5b5061026c6105b536600461250f565b6117b2565b3480156105c5575f5ffd5b506105ce61180c565b604051610317919061291d565b3480156105e6575f5ffd5b5061026c6105f5366004612951565b6118b4565b348015610605575f5ffd5b5061026c6106143660046129fd565b61191c565b348015610624575f5ffd5b5061026c6106333660046126cc565b611adc565b348015610643575f5ffd5b5061026c610652366004612661565b611b36565b348015610662575f5ffd5b5061039e6040518060400160405280601a81526020017f68747470733a2f2f64617461686176656e2e6e6574776f726b2f00000000000081525081565b3480156106aa575f5ffd5b506103036106b93660046124f4565b60996020525f90815260409020546001600160a01b031681565b3480156106de575f5ffd5b5030610303565b3480156106f0575f5ffd5b5061026c6106ff3660046124f4565b611b90565b34801561070f575f5ffd5b50604080515f81526020810190915261035e565b34801561072e575f5ffd5b5061026c61073d366004612abc565b611be3565b34801561074d575f5ffd5b5061026c61075c3660046124f4565b611dc2565b34801561076c575f5ffd5b50606554610303906001600160a01b031681565b34801561078b575f5ffd5b5061026c61079a3660046126cc565b5050565b3480156107a9575f5ffd5b5061058b6107b83660046124f4565b60976020525f908152604090205460ff1681565b6107d4611e3b565b5f5b8181101561093d575f805b8484848181106107f3576107f3612b8b565b90506020028101906108059190612b9f565b610813906040810190612bbd565b905081101561087d5784848481811061082e5761082e612b8b565b90506020028101906108409190612b9f565b61084e906040810190612bbd565b8281811061085e5761085e612b8b565b90506040020160200135826108739190612c02565b91506001016107e1565b506108ca33308387878781811061089657610896612b8b565b90506020028101906108a89190612b9f565b6108b99060408101906020016124f4565b6001600160a01b0316929190611e66565b6109347f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae8286868681811061090157610901612b8b565b90506020028101906109139190612b9f565b6109249060408101906020016124f4565b6001600160a01b03169190611ed7565b506001016107d6565b50604051630ca2989960e01b81526001600160a01b037f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae1690630ca298999061098e90869086908690600401612d31565b5f604051808303815f87803b1580156109a5575f5ffd5b505af11580156109b7573d5f5f3e3d5ffd5b505060405162461bcd60e51b815260206004820152605460248201527f536572766963654d616e61676572426173653a206372656174654f706572617460448201527f6f7244697265637465644f70657261746f72536574526577617264735375626d6064820152731a5cdcda5bdb881a5cc819195c1c9958d85d195960621b608482015260a4019150610a489050565b60405180910390fd5b610a59611f81565b609880546001600160a01b0319166001600160a01b0383169081179091556040517f6a8a174b559440c4e231f06fda7f0eb644f79306c33292fbb95f7602bef9aaf9905f90a250565b610aaa611f81565b60405163268959e560e01b81523060048201526001600160a01b0382811660248301527f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c169063268959e5906044015b5f604051808303815f87803b158015610b11575f5ffd5b505af1158015610b23573d5f5f3e3d5ffd5b5050505050565b610b32611f81565b604051634a86c03760e11b81526001600160a01b037f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c169063950d806e90610b84903090879087908790600401612ecf565b5f604051808303815f87803b158015610b9b575f5ffd5b505af1158015610bad573d5f5f3e3d5ffd5b50505050505050565b610bbe611f81565b60405163eb5a4e8760e01b81523060048201526001600160a01b0382811660248301527f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c169063eb5a4e8790604401610afa565b6001600160a01b0383163014610c3b57604051631280731d60e21b815260040160405180910390fd5b60018114610c5c5760405163f37f411760e01b815260040160405180910390fd5b5f82828281610c6d57610c6d612b8b565b9050602002016020810190610c829190612f02565b63ffffffff1614610ca65760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b0384165f90815260996020526040812080546001600160a01b03191690558290829081610cdc57610cdc612b8b565b9050602002016020810190610cf19190612f02565b63ffffffff16846001600160a01b03167f2638d53da645bac898f1b50bd1d6d2a4d389e3141e209c988488abced5c3c54c60405160405180910390a350505050565b60606001600160a01b038216610d75575f5b604051908082528060200260200182016040528015610d6e578160200160208202803683370190505b5092915050565b5f610d45565b610d83611f81565b6065546001600160a01b0316610d9882611fdb565b816001600160a01b0316816001600160a01b03167fa499ec18d14a183a8ce150f6d1a61fe68e989121c8aa695bafde5305f1eee81c60405160405180910390a35050565b6040805180820182523081525f602082018190529151633743aedd60e11b8152606092907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690636e875dba90610e3f908590600401612f1b565b5f60405180830381865afa158015610e59573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e809190810190612f41565b90505f81516001600160401b03811115610e9c57610e9c6127a3565b604051908082528060200260200182016040528015610ec5578160200160208202803683370190505b5090505f5b8251811015610f545760995f848381518110610ee857610ee8612b8b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f9054906101000a90046001600160a01b0316828281518110610f3457610f34612b8b565b6001600160a01b0390921660209283029190910190910152600101610eca565b5060408051602080820183528382528251908101835281815291516303de856160e11b815290919073cf7ed3acca5a467e9e704c703e8d87f634fb0fc9906307bd0ac290610fa6908490600401612fda565b5f60405180830381865af4158015610fc0573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fe7919081019061303c565b9550505050505090565b6040805180820182523081525f602082015290516333869dd160e11b81527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03169063670d3ba29061105090339085906004016130b0565b602060405180830381865afa15801561106b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061108f91906130e6565b6110ac5760405163668191af60e11b815260040160405180910390fd5b50335f90815260996020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6110e3611f81565b6110ec5f61203c565b565b6110f6611f81565b604051630287f75160e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed16906350feea2090610b84903090879087908790600401613143565b611150611e3b565b5f805b6111606040840184612bbd565b90508110156111a5576111766040840184612bbd565b8281811061118657611186612b8b565b905060400201602001358261119b9190612c02565b9150600101611153565b506111db7f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae8261092460408601602087016124f4565b6040805160018082528183019092525f91816020015b61123c6040518060c00160405280606081526020015f6001600160a01b03168152602001606081526020015f63ffffffff1681526020015f63ffffffff168152602001606081525090565b8152602001906001900390816111f157905050905061125a83613291565b815f8151811061126c5761126c612b8b565b6020908102919091018101919091526040805180820182523081525f9281019290925251630ca2989960e01b81527f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae6001600160a01b031690630ca29899906112db908490869060040161339f565b5f604051808303815f87803b1580156112f2575f5ffd5b505af1158015611304573d5f5f3e3d5ffd5b505050507fb6d94e6419560f5b19430e640113c0926ed3c399cb053a26a2324b5b29f18e818385806040019061133a9190612bbd565b604051611351939250918252602082015260400190565b60405180910390a150505050565b611367611f81565b604051630130fc2760e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063261f84e0906113b7903090869086906004016134fc565b5f604051808303815f87803b1580156113ce575f5ffd5b505af11580156113e0573d5f5f3e3d5ffd5b505050505050565b6113f0611f81565b5f6113f9610ddc565b6098549091506001600160a01b031663f2e500b234835f60405190808252806020026020018201604052801561144357816020015b606081526020019060019003908161142e5790505b5060405180602001604052805f81525088886040518763ffffffff1660e01b81526004016114759594939291906135d2565b5f604051808303818588803b15801561148c575f5ffd5b505af115801561149e573d5f5f3e3d5ffd5b5050505050505050565b60405162461bcd60e51b815260206004820152603760248201527f536572766963654d616e61676572426173653a2072656769737465724f70657260448201527f61746f72546f41565320697320646570726563617465640000000000000000006064820152608401610a48565b61151e611f81565b604051634f906cf960e01b81523060048201526001600160a01b0382811660248301527f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c1690634f906cf990604401610afa565b61157a611f81565b60405163a0169ddd60e01b81526001600160a01b0382811660048301527f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae169063a0169ddd90602401610afa565b60405162461bcd60e51b815260206004820152603b60248201527f536572766963654d616e61676572426173653a20646572656769737465724f7060448201527f657261746f7246726f6d415653206973206465707265636174656400000000006064820152608401610a48565b61163e611f81565b60405163b66bd98960e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063b66bd989906113b79030905f9087908790600401613143565b611698611f81565b60405163a982182160e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a982182190610afa903090859060040161367c565b6116ee611f81565b6001600160a01b0381165f81815260976020526040808220805460ff19169055517fdf2097d1af3ac651476385ff7048eefcbc11072c13100fa1d966effaf2ea3e549190a250565b5f306001600160a01b031663de1164bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611773573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611797919061369f565b6001600160a01b0316826001600160a01b0316149050919050565b6117ba611f81565b604051630664120160e01b81526001600160a01b037f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c1690630664120190610b84903090879087908790600401612ecf565b6040805180820182523081525f6020820152905163105dea1f60e21b8152606091907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c9061186d908490600401612f1b565b5f60405180830381865afa158015611887573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118ae91908101906136ba565b91505090565b604080516060810182526001600160a01b0380851682523060208301528183018490529151636e3492b560e01b815290917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1690636e3492b590610b84908490600401613749565b6001600160a01b038516301461194557604051631280731d60e21b815260040160405180910390fd5b600183146119665760405163b1698da560e01b815260040160405180910390fd5b5f8484828161197757611977612b8b565b905060200201602081019061198c9190612f02565b63ffffffff16146119b05760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b0386165f9081526097602052604090205460ff166119e857604051630444d2e160e21b815260040160405180910390fd5b60148114611a385760405162461bcd60e51b815260206004820181905260248201527f496e76616c696420736f6c6f636861696e2061646472657373206c656e6774686044820152606401610a48565b611a4281836137b7565b6001600160a01b0387165f90815260996020526040812080546001600160a01b03191660609390931c929092179091558490849081611a8357611a83612b8b565b9050602002016020810190611a989190612f02565b63ffffffff16866001600160a01b03167f3ed331d6c3431aecc422f169b89a3c24f9e23cef141e10631262a3fc865f513a60405160405180910390a3505050505050565b611ae4611f81565b604051630287f75160e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed16906350feea20906113b79030905f9087908790600401613143565b611b3e611f81565b60405163b66bd98960e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063b66bd98990610b84903090879087908790600401613143565b611b98611f81565b6001600160a01b0381165f81815260976020526040808220805460ff19166001179055517f5045083cd90f33bcbd2689f0152c6fd980a5bc506dff19aed51f534e2a49ecee9190a250565b5f54610100900460ff1615808015611c0157505f54600160ff909116105b80611c1a5750303b158015611c1a57505f5460ff166001145b611c7d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a48565b5f805460ff191660011790558015611c9e575f805461ff0019166101001790555b611ca8858561208d565b604080518082018252601a81527f68747470733a2f2f64617461686176656e2e6e6574776f726b2f0000000000006020820152905163a982182160e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169163a982182191611d2691309160040161367c565b5f604051808303815f87803b158015611d3d575f5ffd5b505af1158015611d4f573d5f5f3e3d5ffd5b50505050611d5c83612109565b609880546001600160a01b0319166001600160a01b0384161790558015610b23575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b611dca611f81565b6001600160a01b038116611e2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a48565b611e388161203c565b50565b6065546001600160a01b031633146110ec57604051638e79fdb560e01b815260040160405180910390fd5b6040516001600160a01b0380851660248301528316604482015260648101829052611ed19085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526121ce565b50505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015611f24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4891906137f7565b9050611ed18463095ea7b360e01b85611f618686612c02565b6040516001600160a01b0390921660248301526044820152606401611e9a565b6033546001600160a01b031633146110ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a48565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a15050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166120f75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610a48565b6121008261203c565b61079a81611fdb565b6040805160018082528183019092525f91816020015b604080518082019091525f81526060602082015281526020019060019003908161211f57905050905060405180604001604052805f63ffffffff16815260200183815250815f8151811061217557612175612b8b565b6020908102919091010152604051630130fc2760e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063261f84e0906113b7903090859060040161380e565b5f612222826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122a69092919063ffffffff16565b905080515f148061224257508080602001905181019061224291906130e6565b6122a15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a48565b505050565b60606122b484845f856122be565b90505b9392505050565b60608247101561231f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a48565b5f5f866001600160a01b0316858760405161233a9190613890565b5f6040518083038185875af1925050503d805f8114612374576040519150601f19603f3d011682016040523d82523d5f602084013e612379565b606091505b509150915061238a87838387612397565b925050505b949350505050565b606083156124055782515f036123fe576001600160a01b0385163b6123fe5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a48565b508161238f565b61238f838381511561241a5781518083602001fd5b8060405162461bcd60e51b8152600401610a48919061263c565b5f5f83601f840112612444575f5ffd5b5081356001600160401b0381111561245a575f5ffd5b6020830191508360208260051b8501011115612474575f5ffd5b9250929050565b5f5f5f838503606081121561248e575f5ffd5b604081121561249b575f5ffd5b5083925060408401356001600160401b038111156124b7575f5ffd5b6124c386828701612434565b9497909650939450505050565b6001600160a01b0381168114611e38575f5ffd5b80356124ef816124d0565b919050565b5f60208284031215612504575f5ffd5b81356122b7816124d0565b5f5f5f60608486031215612521575f5ffd5b833561252c816124d0565b9250602084013561253c816124d0565b915060408401356001600160e01b031981168114612558575f5ffd5b809150509250925092565b5f5f5f5f60608587031215612576575f5ffd5b8435612581816124d0565b93506020850135612591816124d0565b925060408501356001600160401b038111156125ab575f5ffd5b6125b787828801612434565b95989497509550505050565b602080825282518282018190525f918401906040840190835b818110156126035783516001600160a01b03168352602093840193909201916001016125dc565b509095945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6122b7602083018461260e565b803563ffffffff811681146124ef575f5ffd5b5f5f5f60408486031215612673575f5ffd5b61267c8461264e565b925060208401356001600160401b038111156124b7575f5ffd5b5f602082840312156126a6575f5ffd5b81356001600160401b038111156126bb575f5ffd5b820160c081850312156122b7575f5ffd5b5f5f602083850312156126dd575f5ffd5b82356001600160401b038111156126f2575f5ffd5b6126fe85828601612434565b90969095509350505050565b80356001600160801b03811681146124ef575f5ffd5b5f5f60408385031215612731575f5ffd5b61273a8361270a565b91506127486020840161270a565b90509250929050565b5f5f60408385031215612762575f5ffd5b823561276d816124d0565b915060208301356001600160401b03811115612787575f5ffd5b830160608186031215612798575f5ffd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b03811182821017156127d9576127d96127a3565b60405290565b60405160c081016001600160401b03811182821017156127d9576127d96127a3565b604051601f8201601f191681016001600160401b0381118282101715612829576128296127a3565b604052919050565b5f6001600160401b03821115612849576128496127a3565b50601f01601f191660200190565b5f82601f830112612866575f5ffd5b813561287961287482612831565b612801565b81815284602083860101111561288d575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156128b9575f5ffd5b81356001600160401b038111156128ce575f5ffd5b61238f84828501612857565b5f8151808452602084019350602083015f5b828110156129135781516001600160a01b03168652602095860195909101906001016128ec565b5093949350505050565b602081525f6122b760208301846128da565b5f6001600160401b03821115612947576129476127a3565b5060051b60200190565b5f5f60408385031215612962575f5ffd5b823561296d816124d0565b915060208301356001600160401b03811115612987575f5ffd5b8301601f81018513612997575f5ffd5b80356129a56128748261292f565b8082825260208201915060208360051b8501019250878311156129c6575f5ffd5b6020840193505b828410156129ef576129de8461264e565b8252602093840193909101906129cd565b809450505050509250929050565b5f5f5f5f5f5f60808789031215612a12575f5ffd5b8635612a1d816124d0565b95506020870135612a2d816124d0565b945060408701356001600160401b03811115612a47575f5ffd5b612a5389828a01612434565b90955093505060608701356001600160401b03811115612a71575f5ffd5b8701601f81018913612a81575f5ffd5b80356001600160401b03811115612a96575f5ffd5b896020828401011115612aa7575f5ffd5b60208201935080925050509295509295509295565b5f5f5f5f60808587031215612acf575f5ffd5b8435612ada816124d0565b93506020850135612aea816124d0565b925060408501356001600160401b03811115612b04575f5ffd5b8501601f81018713612b14575f5ffd5b8035612b226128748261292f565b8082825260208201915060208360051b850101925089831115612b43575f5ffd5b6020840193505b82841015612b6e578335612b5d816124d0565b825260209384019390910190612b4a565b9450612b8092505050606086016124e4565b905092959194509250565b634e487b7160e01b5f52603260045260245ffd5b5f823560be19833603018112612bb3575f5ffd5b9190910192915050565b5f5f8335601e19843603018112612bd2575f5ffd5b8301803591506001600160401b03821115612beb575f5ffd5b6020019150600681901b3603821315612474575f5ffd5b80820180821115612c2157634e487b7160e01b5f52601160045260245ffd5b92915050565b5f5f8335601e19843603018112612c3c575f5ffd5b83016020810192503590506001600160401b03811115612c5a575f5ffd5b8060061b3603821315612474575f5ffd5b80356001600160601b03811681146124ef575f5ffd5b8183526020830192505f815f5b84811015612913578135612ca1816124d0565b6001600160a01b031686526020828101359087015260409586019590910190600101612c8e565b5f5f8335601e19843603018112612cdd575f5ffd5b83016020810192503590506001600160401b03811115612cfb575f5ffd5b803603821315612474575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f606082018535612d41816124d0565b6001600160a01b0316835263ffffffff612d5d6020880161264e565b166020840152606060408401528390526080600584901b83018101908301855f60be1936839003015b87821015612ec157868503607f190184528235818112612da4575f5ffd5b890160c08601612db48280612c27565b60c0895291829052905f9060e089015b81831015612e0f578335612dd7816124d0565b6001600160a01b031681526001600160601b03612df660208601612c6b565b1660208201526040938401936001939093019201612dc4565b612e1b602086016124e4565b6001600160a01b03811660208c01529350612e396040860186612c27565b9450925089810360408b0152612e50818585612c81565b9350505050612e616060830161264e565b63ffffffff166060880152612e786080830161264e565b63ffffffff166080880152612e9060a0830183612cc8565b925087820360a0890152612ea5828483612d09565b9750505050602083019250602084019350600182019150612d86565b509298975050505050505050565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b5f60208284031215612f12575f5ffd5b6122b78261264e565b81516001600160a01b0316815260208083015163ffffffff169082015260408101612c21565b5f60208284031215612f51575f5ffd5b81516001600160401b03811115612f66575f5ffd5b8201601f81018413612f76575f5ffd5b8051612f846128748261292f565b8082825260208201915060208360051b850101925086831115612fa5575f5ffd5b6020840193505b82841015612fd0578351612fbf816124d0565b825260209384019390910190612fac565b9695505050505050565b6020808252825182820182905251604083018290528051606084018190525f929190910190829060808501905b808310156130325783516001600160a01b031682526020938401936001939093019290910190613007565b5095945050505050565b5f6020828403121561304c575f5ffd5b81516001600160401b03811115613061575f5ffd5b8201601f81018413613071575f5ffd5b805161307f61287482612831565b818152856020838501011115613093575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b6001600160a01b0383168152606081016122b7602083018480516001600160a01b0316825260209081015163ffffffff16910152565b5f602082840312156130f6575f5ffd5b815180151581146122b7575f5ffd5b8183526020830192505f815f5b84811015612913578135613125816124d0565b6001600160a01b031686526020958601959190910190600101613112565b6001600160a01b038516815263ffffffff841660208201526060604082018190525f90612fd09083018486613105565b5f82601f830112613182575f5ffd5b81356131906128748261292f565b8082825260208201915060208360061b8601019250858311156131b1575f5ffd5b602085015b8381101561303257604081880312156131cd575f5ffd5b6131d56127b7565b81356131e0816124d0565b81526131ee60208301612c6b565b6020820152808452506020830192506040810190506131b6565b5f82601f830112613217575f5ffd5b81356132256128748261292f565b8082825260208201915060208360061b860101925085831115613246575f5ffd5b602085015b838110156130325760408188031215613262575f5ffd5b61326a6127b7565b8135613275816124d0565b815260208281013581830152908452929092019160400161324b565b5f60c082360312156132a1575f5ffd5b6132a96127df565b82356001600160401b038111156132be575f5ffd5b6132ca36828601613173565b8252506132d9602084016124e4565b602082015260408301356001600160401b038111156132f6575f5ffd5b61330236828601613208565b6040830152506133146060840161264e565b60608201526133256080840161264e565b608082015260a08301356001600160401b03811115613342575f5ffd5b61334e36828601612857565b60a08301525092915050565b5f8151808452602084019350602083015f5b8281101561291357815180516001600160a01b03168752602090810151818801526040909601959091019060010161336c565b82516001600160a01b0316815260208084015163ffffffff16908201525f606082016060604084015280845180835260808501915060808160051b8601019250602086015f5b828110156134ef57868503607f190184528151805160c080885281519088018190526020909101905f9060e08901905b8083101561345557835180516001600160a01b031683526020908101516001600160601b0316818401529093019260019290920191604090910190613415565b506020840151925061347260208a01846001600160a01b03169052565b6040840151925088810360408a015261348b818461335a565b9250505060608201516134a6606089018263ffffffff169052565b5060808201516134be608089018263ffffffff169052565b5060a0820151915086810360a08801526134d8818361260e565b9650505060209384019391909101906001016133e5565b5092979650505050505050565b6001600160a01b038416815260406020820181905281018290525f6060600584901b830181019083018583603e1936839003015b87821015612ec157868503605f19018452823581811261354e575f5ffd5b890163ffffffff61355e8261264e565b1686526020810135601e19823603018112613577575f5ffd5b016020810190356001600160401b03811115613591575f5ffd5b8060051b36038213156135a2575f5ffd5b604060208801526135b7604088018284613105565b96505050602083019250602084019350600182019150613530565b60a081525f6135e460a083018861260e565b828103602084015280875180835260208301915060208160051b84010160208a015f5b8381101561363957601f1986840301855261362383835161260e565b6020958601959093509190910190600101613607565b5050858103604087015261364d818a61260e565b94505050505061366860608301856001600160801b03169052565b6001600160801b0383166080830152612fd0565b6001600160a01b03831681526040602082018190525f906122b49083018461260e565b5f602082840312156136af575f5ffd5b81516122b7816124d0565b5f602082840312156136ca575f5ffd5b81516001600160401b038111156136df575f5ffd5b8201601f810184136136ef575f5ffd5b80516136fd6128748261292f565b8082825260208201915060208360051b85010192508683111561371e575f5ffd5b6020840193505b82841015612fd0578351613738816124d0565b825260209384019390910190613725565b602080825282516001600160a01b039081168383015283820151166040808401919091528301516060808401528051608084018190525f929190910190829060a08501905b808310156130325763ffffffff845116825260208201915060208401935060018301925061378e565b80356bffffffffffffffffffffffff198116906014841015610d6e576bffffffffffffffffffffffff1960149490940360031b84901b1690921692915050565b5f60208284031215613807575f5ffd5b5051919050565b5f6040820160018060a01b03851683526040602084015280845180835260608501915060608160051b8601019250602086015f5b828110156134ef57605f19878603018452815163ffffffff8151168652602081015190506040602087015261387a60408701826128da565b9550506020938401939190910190600101613842565b5f82518060208501845e5f92019182525091905056fea264697066735822122097507258175bfbd17ffc397aa38e95f5cc53f009278bf0251b1066504204ee9464736f6c634300081c0033000000000000000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } }, "15": { "address": "0x7a2088a1bFc9d81c55368AE168C2C02570cB814F", @@ -518,85 +753,292 @@ "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, + "39": { + "address": "0xf5059a5D33d5853360D16C683c16e67980206f36", + "code": "0x608060405234801561000f575f5ffd5b5060043610610187575f3560e01c80637a8b2637116100d9578063c4d66de811610093578063df6fadc11161006e578063df6fadc114610361578063e3dae51c1461037c578063f3e738751461038f578063fabc1cbc146103a2575f5ffd5b8063c4d66de814610328578063ce7c2ac21461033b578063d9caed121461034e575f5ffd5b80637a8b2637146102ad578063886f1195146102c05780638c871019146102e75780638f6a6240146102fa578063a6ab36f21461030d578063ab5921e114610320575f5ffd5b806347e7ef2411610144578063595c6a671161011f578063595c6a67146102655780635ac86ab71461026d5780635c975abb1461029c57806361b01b5d146102a4575f5ffd5b806347e7ef241461022a57806354fd4d501461023d578063553ca5f814610252575f5ffd5b806311c70c9d1461018b578063136439dd146101a05780632495a599146101b357806339b70e38146101e35780633a98ef391461020a57806343fe08b014610221575b5f5ffd5b61019e6101993660046111b1565b6103b5565b005b61019e6101ae3660046111d1565b6103cb565b6032546101c6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101c67f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b61021360335481565b6040519081526020016101da565b61021360645481565b6102136102383660046111fc565b610401565b610245610530565b6040516101da9190611226565b61021361026036600461125b565b610560565b61019e610573565b61028c61027b36600461128b565b6001805460ff9092161b9081161490565b60405190151581526020016101da565b600154610213565b61021360655481565b6102136102bb3660046111d1565b610587565b6101c67f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6102136102f53660046111d1565b6105d0565b61021361030836600461125b565b6105da565b61019e61031b3660046112a6565b6105e7565b6102456106c2565b61019e61033636600461125b565b6106e2565b61021361034936600461125b565b6107a8565b61021361035c3660046112dc565b61083a565b606454606554604080519283526020830191909152016101da565b61021361038a3660046111d1565b61093c565b61021361039d3660046111d1565b610973565b61019e6103b03660046111d1565b61097d565b6103bd6109ea565b6103c78282610a9b565b5050565b6103d3610b3f565b60015481811681146103f85760405163c61dca5d60e01b815260040160405180910390fd5b6103c782610be2565b5f5f61040c81610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610455576040516348da714f60e01b815260040160405180910390fd5b61045f8484610c55565b6033545f61046f6103e88361132e565b90505f6103e861047d610cac565b610487919061132e565b90505f6104948783611341565b9050806104a18489611354565b6104ab919061136b565b9550855f036104cd57604051630c392ed360e11b815260040160405180910390fd5b6104d7868561132e565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561050c57604051632f14e8a360e11b815260040160405180910390fd5b610525826103e8603354610520919061132e565b610d16565b505050505092915050565b606061055b7f76312e302e300000000000000000000000000000000000000000000000000006610d62565b905090565b5f61056d6102bb836107a8565b92915050565b61057b610b3f565b6105855f19610be2565b565b5f5f6103e8603354610599919061132e565b90505f6103e86105a7610cac565b6105b1919061132e565b9050816105be8583611354565b6105c8919061136b565b949350505050565b5f61056d8261093c565b5f61056d61039d836107a8565b5f54610100900460ff161580801561060557505f54600160ff909116105b8061061e5750303b15801561061e57505f5460ff166001145b6106435760405162461bcd60e51b815260040161063a9061138a565b60405180910390fd5b5f805460ff191660011790558015610664575f805461ff0019166101001790555b61066e8484610a9b565b61067782610d9f565b80156106bc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60606040518060800160405280604d815260200161145b604d9139905090565b5f54610100900460ff161580801561070057505f54600160ff909116105b806107195750303b15801561071957505f5460ff166001145b6107355760405162461bcd60e51b815260040161063a9061138a565b5f805460ff191660011790558015610756575f805461ff0019166101001790555b61075f82610d9f565b80156103c7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa158015610816573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056d91906113d8565b5f600161084681610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161461088f576040516348da714f60e01b815260040160405180910390fd5b61089a858585610eea565b603354808411156108be57604051630b469df360e41b815260040160405180910390fd5b5f6108cb6103e88361132e565b90505f6103e86108d9610cac565b6108e3919061132e565b9050816108f08783611354565b6108fa919061136b565b94506109068684611341565b6033556109266109168683611341565b6103e8603354610520919061132e565b610931888887610f1d565b505050509392505050565b5f5f6103e860335461094e919061132e565b90505f6103e861095c610cac565b610966919061132e565b9050806105be8386611354565b5f61056d82610587565b6109856109ea565b600154801982198116146109ac5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6a91906113ef565b6001600160a01b0316336001600160a01b0316146105855760405163794821ff60e01b815260040160405180910390fd5b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610b345760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610ba1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc5919061140a565b61058557604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610c34816001805460ff9092161b9081161490565b15610c525760405163840a48d560e01b815260040160405180910390fd5b50565b606454811115610c785760405163052b07b760e21b815260040160405180910390fd5b606554610c83610cac565b1115610ca25760405163d86bae6760e01b815260040160405180910390fd5b6103c78282610f31565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cf2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055b91906113d8565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610d4a84670de0b6b3a7640000611354565b610d54919061136b565b60405190815260200161079c565b60605f610d6e83610f5f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610e095760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161063a565b603280546001600160a01b0319166001600160a01b038316179055610e2d5f610be2565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec39190611429565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610f1857604051630312abdd60e61b815260040160405180910390fd5b505050565b610f186001600160a01b0383168483610f86565b6032546001600160a01b038381169116146103c757604051630312abdd60e61b815260040160405180910390fd5b5f60ff8216601f81111561056d57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610f18928692915f91611015918516908490611094565b905080515f1480611035575080806020019051810190611035919061140a565b610f185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063a565b60606105c884845f85855f5f866001600160a01b031685876040516110b99190611444565b5f6040518083038185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b509150915061110987838387611114565b979650505050505050565b606083156111825782515f0361117b576001600160a01b0385163b61117b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063a565b50816105c8565b6105c883838151156111975781518083602001fd5b8060405162461bcd60e51b815260040161063a9190611226565b5f5f604083850312156111c2575f5ffd5b50508035926020909101359150565b5f602082840312156111e1575f5ffd5b5035919050565b6001600160a01b0381168114610c52575f5ffd5b5f5f6040838503121561120d575f5ffd5b8235611218816111e8565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561126b575f5ffd5b8135611276816111e8565b9392505050565b60ff81168114610c52575f5ffd5b5f6020828403121561129b575f5ffd5b81356112768161127d565b5f5f5f606084860312156112b8575f5ffd5b833592506020840135915060408401356112d1816111e8565b809150509250925092565b5f5f5f606084860312156112ee575f5ffd5b83356112f9816111e8565b92506020840135611309816111e8565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561056d5761056d61131a565b8181038181111561056d5761056d61131a565b808202811582820484141761056d5761056d61131a565b5f8261138557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e8575f5ffd5b5051919050565b5f602082840312156113ff575f5ffd5b8151611276816111e8565b5f6020828403121561141a575f5ffd5b81518015158114611276575f5ffd5b5f60208284031215611439575f5ffd5b81516112768161127d565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212202364f3b8737212f17e605f14c9fd3bec2a55ff6018d7ff47899660784b9c8d8a64736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "9": { + "address": "0xc6e7DF5E7b4f2A278906862b61205850344D4e7d", + "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637a8b2637116100bf578063ce7c2ac211610079578063ce7c2ac2146102d7578063d9caed12146102ea578063e3dae51c146102fd578063f3e7387514610310578063fabc1cbc14610323578063fdc371ce14610336575f5ffd5b80637a8b26371461025c578063886f11951461026f5780638c871019146102965780638f6a6240146102a9578063ab5921e1146102bc578063c4d66de8146102c4575f5ffd5b8063485cc95511610110578063485cc955146101e257806354fd4d50146101f5578063553ca5f81461020a578063595c6a671461021d5780635ac86ab7146102255780635c975abb14610254575f5ffd5b8063136439dd1461014c5780632495a5991461016157806339b70e38146101915780633a98ef39146101b857806347e7ef24146101cf575b5f5ffd5b61015f61015a3660046111cb565b610349565b005b603254610174906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101747f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6101c160335481565b604051908152602001610188565b6101c16101dd3660046111f6565b610383565b61015f6101f0366004611220565b6104b2565b6101fd61059d565b6040516101889190611257565b6101c161021836600461128c565b6105cd565b61015f6105e0565b6102446102333660046112bc565b6001805460ff9092161b9081161490565b6040519015158152602001610188565b6001546101c1565b6101c161026a3660046111cb565b6105f4565b6101747f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6101c16102a43660046111cb565b61063d565b6101c16102b736600461128c565b610647565b6101fd610654565b61015f6102d236600461128c565b610674565b6101c16102e536600461128c565b61073a565b6101c16102f83660046112d7565b6107cc565b6101c161030b3660046111cb565b6108ce565b6101c161031e3660046111cb565b610905565b61015f6103313660046111cb565b61090f565b606454610174906001600160a01b031681565b61035161097c565b60015481811681146103765760405163c61dca5d60e01b815260040160405180910390fd5b61037f82610a1f565b5050565b5f5f61038e81610a5c565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816146103d7576040516348da714f60e01b815260040160405180910390fd5b6103e18484610a92565b6033545f6103f16103e883611329565b90505f6103e86103ff610b4b565b6104099190611329565b90505f610416878361133c565b905080610423848961134f565b61042d9190611366565b9550855f0361044f57604051630c392ed360e11b815260040160405180910390fd5b6104598685611329565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561048e57604051632f14e8a360e11b815260040160405180910390fd5b6104a7826103e86033546104a29190611329565b610bb5565b505050505092915050565b5f54610100900460ff16158080156104d057505f54600160ff909116105b806104e95750303b1580156104e957505f5460ff166001145b61050e5760405162461bcd60e51b815260040161050590611385565b60405180910390fd5b5f805460ff19166001179055801561052f575f805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03851617905561055382610c01565b8015610598575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60606105c87f76312e302e300000000000000000000000000000000000000000000000000006610d4c565b905090565b5f6105da61026a8361073a565b92915050565b6105e861097c565b6105f25f19610a1f565b565b5f5f6103e86033546106069190611329565b90505f6103e8610614610b4b565b61061e9190611329565b90508161062b858361134f565b6106359190611366565b949350505050565b5f6105da826108ce565b5f6105da61031e8361073a565b60606040518060800160405280604d8152602001611456604d9139905090565b5f54610100900460ff161580801561069257505f54600160ff909116105b806106ab5750303b1580156106ab57505f5460ff166001145b6106c75760405162461bcd60e51b815260040161050590611385565b5f805460ff1916600117905580156106e8575f805461ff0019166101001790555b6106f182610c01565b801561037f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa1580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105da91906113d3565b5f60016107d881610a5c565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610821576040516348da714f60e01b815260040160405180910390fd5b61082c858585610d89565b6033548084111561085057604051630b469df360e41b815260040160405180910390fd5b5f61085d6103e883611329565b90505f6103e861086b610b4b565b6108759190611329565b905081610882878361134f565b61088c9190611366565b9450610898868461133c565b6033556108b86108a8868361133c565b6103e86033546104a29190611329565b6108c3888887610dcf565b505050509392505050565b5f5f6103e86033546108e09190611329565b90505f6103e86108ee610b4b565b6108f89190611329565b90508061062b838661134f565b5f6105da826105f4565b610917610ec8565b6001548019821981161461093e5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109de573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0291906113ea565b6105f257604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610a71816001805460ff9092161b9081161490565b15610a8f5760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161480610abb57506064546001600160a01b038381169116145b610ad857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b039081169083160361037f57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e906024015f604051808303815f87803b158015610b31575f5ffd5b505af1158015610b43573d5f5f3e3d5ffd5b505050505050565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c891906113d3565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610be984670de0b6b3a764000061134f565b610bf39190611366565b60405190815260200161072e565b5f54610100900460ff16610c6b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610505565b603280546001600160a01b0319166001600160a01b038316179055610c8f5f610a1f565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d259190611409565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b60605f610d5883610f79565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6032546001600160a01b0383811691161480610db257506064546001600160a01b038381169116145b61059857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610eb45760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015610e35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5991906113ea565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb0906024015f604051808303815f87803b158015610e9d575f5ffd5b505af1158015610eaf573d5f5f3e3d5ffd5b505050505b6105986001600160a01b0383168483610fa0565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190611424565b6001600160a01b0316336001600160a01b0316146105f25760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f8111156105da57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610598928692915f9161102f9185169084906110ae565b905080515f148061104f57508080602001905181019061104f91906113ea565b6105985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610505565b606061063584845f85855f5f866001600160a01b031685876040516110d3919061143f565b5f6040518083038185875af1925050503d805f811461110d576040519150601f19603f3d011682016040523d82523d5f602084013e611112565b606091505b50915091506111238783838761112e565b979650505050505050565b6060831561119c5782515f03611195576001600160a01b0385163b6111955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610505565b5081610635565b61063583838151156111b15781518083602001fd5b8060405162461bcd60e51b81526004016105059190611257565b5f602082840312156111db575f5ffd5b5035919050565b6001600160a01b0381168114610a8f575f5ffd5b5f5f60408385031215611207575f5ffd5b8235611212816111e2565b946020939093013593505050565b5f5f60408385031215611231575f5ffd5b823561123c816111e2565b9150602083013561124c816111e2565b809150509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561129c575f5ffd5b81356112a7816111e2565b9392505050565b60ff81168114610a8f575f5ffd5b5f602082840312156112cc575f5ffd5b81356112a7816112ae565b5f5f5f606084860312156112e9575f5ffd5b83356112f4816111e2565b92506020840135611304816111e2565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105da576105da611315565b818103818111156105da576105da611315565b80820281158282048414176105da576105da611315565b5f8261138057634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e3575f5ffd5b5051919050565b5f602082840312156113fa575f5ffd5b815180151581146112a7575f5ffd5b5f60208284031215611419575f5ffd5b81516112a7816112ae565b5f60208284031215611434575f5ffd5b81516112a7816111e2565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220e368a34a430519f5e8420f0d165bca57ada54b2f1ba846645707cb93e4cf8c2564736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "43": { + "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", + "code": "0x73dc64a140aa3e981100a9beca4e685f962f0cf6c93014608060405260043610610090575f3560e01c8063741fad8811610063578063741fad88146101125780638257f3d514610131578063ae8a4d9814610150578063c31308d11461016f575f5ffd5b80630c86ea461461009457806325394645146100b55780635b2e9c4c146100d457806365529675146100f3575b5f5ffd5b81801561009f575f5ffd5b506100b36100ae366004610a3a565b61018e565b005b8180156100c0575f5ffd5b506100b36100cf366004610a3a565b610229565b8180156100df575f5ffd5b506100b36100ee366004610a3a565b6102af565b8180156100fe575f5ffd5b506100b361010d366004610a8f565b610337565b81801561011d575f5ffd5b506100b361012c366004610adf565b6103aa565b81801561013c575f5ffd5b506100b361014b366004610a3a565b610433565b81801561015b575f5ffd5b506100b361016a366004610a3a565b6104c4565b81801561017a575f5ffd5b506100b3610189366004610a8f565b6104ee565b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f65f6101bc84840185610baf565b8051835560208101516001840180546fffffffffffffffffffffffffffffffff19166001600160801b039092169190911790556040808201516002850155519091507f5e3c25378b5946068b94aa2ea10c4c1e215cc975f994322b159ddc9237a973d4905f90a150505050565b5f61023682840184610c6d565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c739361027e9390929091600401610d22565b5f6040518083038186803b158015610294575f5ffd5b505af41580156102a6573d5f5f3e3d5ffd5b50505050505050565b7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e5f6102dd84840185610d51565b805160208201516001600160801b03908116600160801b0291161760028401556040808201516003850155519091507f4793c0cb5bef4b1fdbbfbcf17e06991844eb881088b012442af17a12ff38d5cd905f90a150505050565b5f61034482840184610d86565b90505f610353825f01516105c4565b60208301519091506001600160a01b031661038a576103858582846040015185606001516001600160801b031661061c565b6103a3565b6103a38582846020015185604001518660600151610679565b5050505050565b60408051637061726160e01b602080830191909152607d60e31b602483015282516008818403018152602890920190925280519101206103eb9084906106de565b15610408576040516282b42960e81b815260040160405180910390fd5b5f61041582840184610de4565b905061042d815f0151826020015183604001516106e9565b50505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f61046084840185610e2f565b8051835491925090839060ff19166001838181111561048157610481610e7d565b021790555080516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916104b691610e91565b60405180910390a150505050565b5f6104d182840184610eb7565b905061042d815f0151826020015183604001518460600151610762565b5f6104fb82840184610f71565b90505f61050a825f01516105c4565b90508160200151515f03610531576040516309e256f760e21b815260040160405180910390fd5b5f5f836020015180602001905181019061054b919061104f565b90925090505f82801561056057610560610e7d565b036102a6575f5f5f8380602001905181019061057c919061109f565b919450925090506001600160a01b0383166105ab576105a68a8784846001600160801b031661061c565b6105b8565b6105b88a87858585610679565b50505050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106175760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506106718486836108ad565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506102a68587836108ad565b818114155b92915050565b5f6106f384610939565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610746575f5ffd5b505af1158015610758573d5f5f3e3d5ffd5b5050505050505050565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156107d857604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516107e8906109e9565b6107f4939291906110e9565b604051809103905ff08015801561080d573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016108df929190611121565b5f604051808303815f875af11580156108fa573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610921919081019061114c565b9150915061092f82826109ca565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b03166109ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156109d95750806106e3565b8151156100905781518083602001fd5b610c358061116d83390190565b5f5f83601f840112610a06575f5ffd5b5081356001600160401b03811115610a1c575f5ffd5b602083019150836020828501011115610a33575f5ffd5b9250929050565b5f5f60208385031215610a4b575f5ffd5b82356001600160401b03811115610a60575f5ffd5b610a6c858286016109f6565b90969095509350505050565b6001600160a01b0381168114610a8c575f5ffd5b50565b5f5f5f60408486031215610aa1575f5ffd5b8335610aac81610a78565b925060208401356001600160401b03811115610ac6575f5ffd5b610ad2868287016109f6565b9497909650939450505050565b5f5f5f60408486031215610af1575f5ffd5b8335925060208401356001600160401b03811115610ac6575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715610b4357610b43610b0d565b60405290565b604051608081016001600160401b0381118282101715610b4357610b43610b0d565b604051601f8201601f191681016001600160401b0381118282101715610b9357610b93610b0d565b604052919050565b6001600160801b0381168114610a8c575f5ffd5b5f6060828403128015610bc0575f5ffd5b50610bc9610b21565b823581526020830135610bdb81610b9b565b60208201526040928301359281019290925250919050565b5f6001600160401b03821115610c0b57610c0b610b0d565b50601f01601f191660200190565b5f82601f830112610c28575f5ffd5b8135602083015f610c40610c3b84610bf3565b610b6b565b9050828152858383011115610c53575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610c7d575f5ffd5b81356001600160401b03811115610c92575f5ffd5b820160608185031215610ca3575f5ffd5b610cab610b21565b8135610cb681610a78565b81526020828101359082015260408201356001600160401b03811115610cda575f5ffd5b610ce686828501610c19565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610d486060830184610cf4565b95945050505050565b5f6060828403128015610d62575f5ffd5b50610d6b610b21565b8235610d7681610b9b565b81526020830135610bdb81610b9b565b5f6080828403128015610d97575f5ffd5b50610da0610b49565b823581526020830135610db281610a78565b60208201526040830135610dc581610a78565b60408201526060830135610dd881610b9b565b60608201529392505050565b5f6060828403128015610df5575f5ffd5b50610dfe610b21565b823581526020830135610e1081610a78565b60208201526040830135610e2381610b9b565b60408201529392505050565b5f6020828403128015610e40575f5ffd5b50604051602081016001600160401b0381118282101715610e6357610e63610b0d565b604052823560028110610e74575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610eb157634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610ec7575f5ffd5b81356001600160401b03811115610edc575f5ffd5b820160808185031215610eed575f5ffd5b610ef5610b49565b8135815260208201356001600160401b03811115610f11575f5ffd5b610f1d86828501610c19565b60208301525060408201356001600160401b03811115610f3b575f5ffd5b610f4786828501610c19565b6040830152506060820135915060ff82168214610f62575f5ffd5b60608101919091529392505050565b5f60208284031215610f81575f5ffd5b81356001600160401b03811115610f96575f5ffd5b820160408185031215610fa7575f5ffd5b604080519081016001600160401b0381118282101715610fc957610fc9610b0d565b6040528135815260208201356001600160401b03811115610fe8575f5ffd5b610ff486828501610c19565b602083015250949350505050565b5f82601f830112611011575f5ffd5b815161101f610c3b82610bf3565b818152846020838601011115611033575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f60408385031215611060575f5ffd5b82516001811061106e575f5ffd5b60208401519092506001600160401b03811115611089575f5ffd5b61109585828601611002565b9150509250929050565b5f5f5f606084860312156110b1575f5ffd5b83516110bc81610a78565b60208501519093506110cd81610a78565b60408501519092506110de81610b9b565b809150509250925092565b606081525f6110fb6060830186610cf4565b828103602084015261110d8186610cf4565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f9061114490830184610cf4565b949350505050565b5f5f6040838503121561115d575f5ffd5b8251801515811461106e575f5ffdfe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea26469706673582212206e92e725aba5f5550fb3f5ffd2c5ed89d59eb518a48403936f0c95f5ffcfb03c64736f6c634300081c0033a264697066735822122021e02665450ab1dc327f4f151b72d6f0fd9bb0003aa73c10c59567af9cef984764736f6c634300081c0033000000000000000000000000", + "storage": {} + }, + "46": { + "address": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf", + "code": "0x60806040526004361061021d575f3560e01c8063805ce31d1161011e578063b39053c5116100a8578063d58a8be41161006d578063d58a8be4146106cb578063df4ed829146106de578063f2e500b2146106fd578063f906d30914610710578063fe61cc491461072f575f5ffd5b8063b39053c5146105f9578063be8d42c014610618578063c536218f1461066e578063c66414c51461068d578063c9bd1e5b146106ac575f5ffd5b806390ffc4f9116100ee57806390ffc4f914610561578063928bc49d14610594578063988062ea146105b357806398ea5fca146105d2578063b0a23d44146105da575f5ffd5b8063805ce31d146104d55780638450a97c146104f7578063860929ee146105165780638ce2e33914610542575f5ffd5b80633ae65d7e116101aa57806346cd27511161016f57806346cd27511461045157806352054834146104705780635c60da1b146104835780635e6dae26146104975780636a64d9fb146104b6575f5ffd5b80633ae65d7e1461038a5780633f8bb4d9146103a9578063423e69b6146103c857806342e3ccfa14610413578063439fab9114610432575f5ffd5b806327c1d325116101f057806327c1d325146102cb5780632a6c3229146102ea5780632dd677b1146103295780632fb8ac581461034857806338004f6914610367575f5ffd5b80630705f4651461022157806309824a80146102565780630b6176461461026b57806326aa101f1461029c575b5f5ffd5b34801561022c575f5ffd5b5061024061023b3660046129ee565b61074e565b60405161024d9190612a19565b60405180910390f35b610269610264366004612a47565b6107c8565b005b348015610276575f5ffd5b5061027f610843565b604080519283526001600160801b0390911660208301520161024d565b3480156102a7575f5ffd5b506102bb6102b6366004612a47565b6108b7565b604051901515815260200161024d565b3480156102d6575f5ffd5b506102696102e5366004612aa6565b610933565b3480156102f5575f5ffd5b506103096103043660046129ee565b6109bb565b604080516001600160401b0393841681529290911660208301520161024d565b348015610334575f5ffd5b50610269610343366004612aa6565b610a39565b348015610353575f5ffd5b50610269610362366004612ae4565b610a91565b348015610372575f5ffd5b505f516020613ae35f395f51905f525460ff16610240565b348015610395575f5ffd5b506102696103a4366004612aa6565b610b3e565b3480156103b4575f5ffd5b506102696103c3366004612aa6565b610bb8565b3480156103d3575f5ffd5b506103fb7f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf81565b6040516001600160a01b03909116815260200161024d565b34801561041e575f5ffd5b5061026961042d366004612aa6565b610c10565b34801561043d575f5ffd5b5061026961044c366004612aa6565b610c68565b34801561045c575f5ffd5b5061026961046b366004612aa6565b610ca1565b61026961047e366004612b50565b610d1b565b34801561048e575f5ffd5b506103fb610da1565b3480156104a2575f5ffd5b506103fb6104b13660046129ee565b610dcf565b3480156104c1575f5ffd5b506102696104d0366004612ae4565b610dd9565b3480156104e0575f5ffd5b506104e9610e33565b60405190815260200161024d565b348015610502575f5ffd5b50610269610511366004612aa6565b610e9f565b348015610521575f5ffd5b5061052a610f19565b6040516001600160401b03909116815260200161024d565b34801561054d575f5ffd5b5061026961055c366004612c2f565b610f85565b34801561056c575f5ffd5b506103fb7f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf81565b34801561059f575f5ffd5b506104e96105ae366004612ccb565b6110fd565b3480156105be575f5ffd5b506102696105cd366004612aa6565b61119c565b6102696111f4565b3480156105e5575f5ffd5b506102696105f4366004612aa6565b61122e565b348015610604575f5ffd5b506102696106133660046129ee565b611286565b348015610623575f5ffd5b506104e9610632366004612a47565b6001600160a01b03165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e602052604090206001015490565b348015610679575f5ffd5b50610269610688366004612aa6565b6112e8565b348015610698575f5ffd5b506102bb6106a7366004612d32565b611340565b3480156106b7575f5ffd5b506102696106c6366004612aa6565b611389565b6102696106d9366004612d5b565b6113e1565b3480156106e9575f5ffd5b506102696106f8366004612db4565b611438565b61026961070b366004612e3f565b61191f565b34801561071b575f5ffd5b5061026961072a366004612aa6565b6119ac565b34801561073a575f5ffd5b506103fb6107493660046129ee565b611a04565b604051630705f46560e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f051290630705f46590602401602060405180830381865af415801561079e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f00565b92915050565b5f5c156107d3575f5ffd5b60015f5d6040516213049560e71b81526001600160a01b038216600482015273e7f1725e7734ce288f8367e1bb143e90bb3f0512906309824a80906024015f6040518083038186803b158015610827575f5ffd5b505af4158015610839573d5f5f3e3d5ffd5b505050505f5f5d50565b5f5f73e7f1725e7734ce288f8367e1bb143e90bb3f0512630b6176466040518163ffffffff1660e01b81526004016040805180830381865af415801561088b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108af9190612f1e565b915091509091565b6040516326aa101f60e01b81526001600160a01b03821660048201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f0512906326aa101f90602401602060405180830381865af415801561090f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f4d565b333014610952576040516282b42960e81b815260040160405180910390fd5b6040516316cba71360e21b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990635b2e9c4c9061098b9085908590600401612f94565b5f6040518083038186803b1580156109a1575f5ffd5b505af41580156109b3573d5f5f3e3d5ffd5b505050505050565b604051632a6c322960e01b8152600481018290525f90819073e7f1725e7734ce288f8367e1bb143e90bb3f051290632a6c3229906024016040805180830381865af4158015610a0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190612fa7565b91509150915091565b333014610a58576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f87570790638257f3d59061098b9085908590600401612f94565b333014610ab0576040516282b42960e81b815260040160405180910390fd5b60405163fe1aa59d60e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063fe1aa59d90610b0d9086907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9087908790600401612fd4565b5f6040518083038186803b158015610b23575f5ffd5b505af4158015610b35573d5f5f3e3d5ffd5b50505050505050565b333014610b5d576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b333014610bd7576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063253946459061098b9085908590600401612f94565b333014610c2f576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063ae8a4d989061098b9085908590600401612f94565b60405163439fab9160e01b8152730165878a594ca255338adfa4d48449f69242eb8f9063439fab919061098b9085908590600401612f94565b333014610cc0576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f5c15610d26575f5ffd5b60015f5d6040516326415bf360e21b815273e7f1725e7734ce288f8367e1bb143e90bb3f0512906399056fcc90610d6b9088903390899089908990899060040161306d565b5f6040518083038186803b158015610d81575f5ffd5b505af4158015610d93573d5f5f3e3d5ffd5b505050505f5f5d5050505050565b5f610dca7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b5f6107c282611a78565b333014610df8576040516282b42960e81b815260040160405180910390fd5b604051630e83f5b160e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063741fad8890610b0d90869086908690600401613102565b5f73e7f1725e7734ce288f8367e1bb143e90bb3f051263805ce31d6040518163ffffffff1660e01b8152600401602060405180830381865af4158015610e7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca919061311b565b333014610ebe576040516282b42960e81b815260040160405180910390fd5b60405163c31308d160e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063c31308d19061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f739fe46736679d2d9a65f0992f2272de9f3c7fa6e063fd10ebe56040518163ffffffff1660e01b8152600401602060405180830381865af4158015610f61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca9190613132565b5f5c15610f90575f5ffd5b60015f5d5f516020613ae35f395f51905f52610fe4610fb56040880160208901612d32565b66ffffffffffffff600882901c165f908152600484016020526040902054600160ff9092169190911b16151590565b1561100257604051633ab3447f60e11b815260040160405180910390fd5b6110466110156040880160208901612d32565b66ffffffffffffff600882901c165f90815260048401602052604090208054600160ff9093169290921b9091179055565b5f611052878787611ad0565b905061105e8185611b41565b61107b576040516309bde33960e01b815260040160405180910390fd5b505f61108687611be4565b90506110986040880160208901612d32565b6001600160401b03167f8856ab63954e6c2938803a4654fb704c8779757e7bfdbe94a578e341ec637a95886040013583866040516110e9939291909283529015156020830152604082015260600190565b60405180910390a250505f5f5d5050505050565b60405163928bc49d60e01b81526001600160a01b038416600482015263ffffffff831660248201526001600160801b03821660448201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063928bc49d90606401602060405180830381865af4158015611170573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611194919061311b565b949350505050565b3330146111bb576040516282b42960e81b815260040160405180910390fd5b60405163017b731160e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063017b73119061098b9085908590600401612f94565b604080513381523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1565b33301461124d576040516282b42960e81b815260040160405180910390fd5b604051630643752360e11b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990630c86ea469061098b9085908590600401612f94565b604051634a283cd960e01b815260048101829052739fe46736679d2d9a65f0992f2272de9f3c7fa6e090634a283cd9906024015f6040518083038186803b1580156112cf575f5ffd5b505af41580156112e1573d5f5f3e3d5ffd5b5050505050565b333014611307576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063ae8a4d989061098b9085908590600401612f94565b66ffffffffffffff600882901c165f9081527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96af6020526040812054600160ff84161b1615156107c2565b3330146113a8576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990638257f3d59061098b9085908590600401612f94565b5f5c156113ec575f5ffd5b60015f5d60ff831615611412576040516386eab41b60e01b815260040160405180910390fd5b61142f8460ff8516801561142857611428612a05565b8484611ca1565b5f5f5d50505050565b5f5c15611443575f5ffd5b60015f5d5f5a90505f6114568635611d5a565b80549091506114749061010090046001600160401b03166001613161565b6001600160401b031661148d6040880160208901612d32565b6001600160401b0316146114b457604051633ab3447f60e11b815260040160405180910390fd5b805461010090046001600160401b03168160016114d083613180565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505f8660405160200161150791906131cc565b6040516020818303038152906040528051906020012090505f61155d8787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250869250611db0915050565b905061156a81865f611df2565b611587576040516309bde33960e01b815260040160405180910390fd5b5f61159860a08a0160808b01612d32565b6001600160401b031690506115af6127108261327e565b60405a6115bd90603f613291565b6115c791906132a8565b10156115e657604051636eb14fc360e11b815260040160405180910390fd5b60015f6115f960608c0160408d016132c7565b600b81111561160a5761160a612a05565b036116795730638450a97c8361162360608e018e6132e0565b6040518463ffffffff1660e01b8152600401611640929190612f94565b5f604051808303815f88803b158015611657575f5ffd5b5087f193505050508015611669575060015b61167457505f611840565b611840565b600561168b60608c0160408d016132c7565b600b81111561169c5761169c612a05565b036116b5573063c9bd1e5b8361162360608e018e6132e0565b60016116c760608c0160408d016132c7565b600b8111156116d8576116d8612a05565b036116f15730633f8bb4d98361162360608e018e6132e0565b600761170360608c0160408d016132c7565b600b81111561171457611714612a05565b0361172d57306327c1d3258361162360608e018e6132e0565b600861173f60608c0160408d016132c7565b600b81111561175057611750612a05565b03611769573063b0a23d448361162360608e018e6132e0565b600961177b60608c0160408d016132c7565b600b81111561178c5761178c612a05565b036117a557306346cd27518361162360608e018e6132e0565b600a6117b760608c0160408d016132c7565b600b8111156117c8576117c8612a05565b036117e1573063c536218f8361162360608e018e6132e0565b600b6117f360608c0160408d016132c7565b600b81111561180457611804612a05565b0361183d5730636a64d9fb838c3561181f60608f018f6132e0565b6040518563ffffffff1660e01b815260040161164093929190613102565b505f5b5f5a61184c9088613322565b611854611e97565b61185e919061327e565b90505f61186f3a8d60a00135611ebb565b6118799083613291565b90505f61189361188d60c08f01358461327e565b47611ebb565b905061189d611ed0565b8111156118ae576118ae3382611edd565b8c60e001358d5f01357f617fdb0cb78f01551a192a3673208ec5eb09f20a90acf673c63a0dcb11745a7a8f60200160208101906118eb9190612d32565b604080516001600160401b03909216825288151560208301520160405180910390a35050505050505050505f5f5d50505050565b5f5c1561192a575f5ffd5b60015f5d604051631fccb47160e31b8152739fe46736679d2d9a65f0992f2272de9f3c7fa6e09063fe65a38890611973908b908b908b908b908b908b908b908b90600401613335565b5f6040518083038186803b158015611989575f5ffd5b505af415801561199b573d5f5f3e3d5ffd5b505050505f5f5d5050505050505050565b3330146119cb576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063253946459061098b9085908590600401612f94565b60405163fe61cc4960e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063fe61cc4990602401602060405180830381865af4158015611a54573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c291906133ef565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b031680611acb5760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f84604051602001611ae3919061346b565b604051602081830303815290604052805190602001209050611b388484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859250611db0915050565b95945050505050565b6040516372dd6c6d60e11b81525f90735fbdb2315678afecb367f032d93f642f64180aa39063e5bad8da90611b9e907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9087908790600401613605565b602060405180830381865af4158015611bb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bdd9190612f4d565b9392505050565b5f6001815b611bf6606085018561366f565b9050811015611c9a57611c38611c0f606086018661366f565b83818110611c1f57611c1f6136b4565b9050602002810190611c3191906136c8565b8535611f0b565b611c9257611c4c6040850160208601612d32565b6001600160401b03167fa6dc208277bb3da3666e7305baf550db2daf26f8f386a431a4b27cc7a02965a282604051611c8691815260200190565b60405180910390a25f91505b600101611be9565b5092915050565b6001600160801b03341115611cc9576040516330e972ad60e01b815260040160405180910390fd5b611cd381836136e6565b6001600160801b0316341015611cfc5760405163044044a560e21b815260040160405180910390fd5b5f611d078585612127565b9050611d12856121c7565b604080515f808252602082019092526112e19130918491611d43565b6060815260200190600190039081611d2e5790505b5060405180602001604052805f8152508787612271565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b0316611acb57604051636ddd9da960e01b815260040160405180910390fd5b5f81815b8451811015611dea57611de082868381518110611dd357611dd36136b4565b602002602001015161250c565b9150600101611db4565b509392505050565b6040516316db930b60e11b81525f90738a791620dd6260079bf849dc5567adc3f2fdc31890632db7261690611e58907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9061ea0360f01b9089908990899060040161374a565b602060405180830381865af4158015611e73573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111949190612f4d565b5f611ea436610bb8611ebb565b611eaf906010613291565b610dca90618b7261327e565b5f818310611ec95781611bdd565b5090919050565b5f610dca3a615208613291565b5f5f5f5f5f85875af1905080611f0657604051633d2cec6f60e21b815260040160405180910390fd5b505050565b5f615dc0611f1f6040850160208601612d32565b6001600160401b0316611f32919061327e565b60405a611f4090603f613291565b611f4a91906132a8565b1015611f69576040516360ee124760e01b815260040160405180910390fd5b5f611f7760208501856138ef565b60ff1603612001573063f906d309611f956040860160208701612d32565b6001600160401b0316611fab60408701876132e0565b6040518463ffffffff1660e01b8152600401611fc8929190612f94565b5f604051808303815f88803b158015611fdf575f5ffd5b5087f193505050508015611ff1575060015b611ffc57505f6107c2565b61211e565b600161201060208501856138ef565b60ff160361202e5730632dd677b1611f956040860160208701612d32565b600261203d60208501856138ef565b60ff160361205b5730633ae65d7e611f956040860160208701612d32565b600361206a60208501856138ef565b60ff160361208857306342e3ccfa611f956040860160208701612d32565b600461209760208501856138ef565b60ff16036120b5573063988062ea611f956040860160208701612d32565b60056120c460208501856138ef565b60ff16036121175730632fb8ac586120e26040860160208701612d32565b6001600160401b0316846120f960408801886132e0565b6040518563ffffffff1660e01b8152600401611fc893929190613102565b505f6107c2565b50600192915050565b604080518082019091525f8152606060208201526040518060400160405280600160ff1681526020016040518060400160405280866001600160a01b03168152602001855f81111561217b5761217b612a05565b60ff1690526040516121ae919060200181516001600160a01b0316815260209182015160ff169181019190915260400190565b60408051601f1981840301815291905290529392505050565b6121d9816001600160a01b0316612538565b6121f65760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e60208190526040909120805460ff16801561224457506122448161257e565b1561226257604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b612279612592565b6001600160801b033411156122a1576040516330e972ad60e01b815260040160405180910390fd5b6122ab81836136e6565b6001600160801b03163410156122d45760405163044044a560e21b815260040160405180910390fd5b5f6122fe7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79611a78565b90506123136001600160a01b03821634611edd565b8451600810156123365760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561235057612350613705565b60405190808252806020026020018201604052801561239557816020015b604080518082019091525f81526060602082015281526020019060019003908161236e5790505b5090505f5b86518110156123ea576123c58782815181106123b8576123b86136b4565b60200260200101516125d9565b8282815181106123d7576123d76136b4565b602090810291909101015260010161239a565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0545f516020613ae35f395f51905f529061242f906001600160401b03166001613161565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a8152602001888152602001868834612490919061390a565b61249a919061390a565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c916124f8916001600160401b0316908490613978565b60405180910390a150505050505050505050565b5f818310612526575f828152602084905260409020611bdd565b5f838152602083905260409020611bdd565b5f6001600160a01b0382163f158015906107c25750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f61258b82600101541590565b1592915050565b5f516020613ae35f395f51905f5280545f9060ff1660018111156125b8576125b8612a05565b146125d657604051633ac4266d60e11b815260040160405180910390fd5b50565b604080518082019091525f815260606020820152602082015160ff165f819003612622575f5f848060200190518101906126139190613a8d565b9250925050611b38828261263b565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166126ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b0316116126d75760405163162908e360e11b815260040160405180910390fd5b600181015461270d5760018201546126fa906001600160a01b03168633876127a5565b6127048585612821565b925050506107c2565b6127168161257e565b1561278c57604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b158015612768575f5ffd5b505af115801561277a573d5f5f3e3d5ffd5b50505050612704816001015485612888565b604051636890662960e01b815260040160405180910390fd5b6127b7836001600160a01b0316612538565b6127d45760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036127fd5760405163162908e360e11b815260040160405180910390fd5b61281b6001600160a01b03841683866001600160801b0385166128e2565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060016121ae565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a905291511695810195909552929390830191016121ae565b6040516001600160a01b038085166024830152831660448201526064810182905261281b90859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b0316836040516129509190613acc565b5f604051808303815f865af19150503d805f8114612989576040519150601f19603f3d011682016040523d82523d5f602084013e61298e565b606091505b50915091505f8280156129b95750815115806129b95750818060200190518101906129b99190612f4d565b90508015806129d057506001600160a01b0385163b155b156112e15760405163022e258160e11b815260040160405180910390fd5b5f602082840312156129fe575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310612a2d57612a2d612a05565b91905290565b6001600160a01b03811681146125d6575f5ffd5b5f60208284031215612a57575f5ffd5b8135611bdd81612a33565b5f5f83601f840112612a72575f5ffd5b5081356001600160401b03811115612a88575f5ffd5b602083019150836020828501011115612a9f575f5ffd5b9250929050565b5f5f60208385031215612ab7575f5ffd5b82356001600160401b03811115612acc575f5ffd5b612ad885828601612a62565b90969095509350505050565b5f5f5f60408486031215612af6575f5ffd5b8335925060208401356001600160401b03811115612b12575f5ffd5b612b1e86828701612a62565b9497909650939450505050565b63ffffffff811681146125d6575f5ffd5b6001600160801b03811681146125d6575f5ffd5b5f5f5f5f5f60a08688031215612b64575f5ffd5b8535612b6f81612a33565b94506020860135612b7f81612b2b565b935060408601356001600160401b03811115612b99575f5ffd5b860160408189031215612baa575f5ffd5b92506060860135612bba81612b3c565b91506080860135612bca81612b3c565b809150509295509295909350565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b6020830191508360208260051b8501011115612a9f575f5ffd5b5f6101008284031215612c29575f5ffd5b50919050565b5f5f5f5f5f60808688031215612c43575f5ffd5b85356001600160401b03811115612c58575f5ffd5b860160808189031215612c69575f5ffd5b945060208601356001600160401b03811115612c83575f5ffd5b612c8f88828901612bd8565b90955093505060408601356001600160401b03811115612cad575f5ffd5b612cb988828901612c18565b95989497509295606001359392505050565b5f5f5f60608486031215612cdd575f5ffd5b8335612ce881612a33565b92506020840135612cf881612b2b565b91506040840135612d0881612b3c565b809150509250925092565b6001600160401b03811681146125d6575f5ffd5b8035611acb81612d13565b5f60208284031215612d42575f5ffd5b8135611bdd81612d13565b60ff811681146125d6575f5ffd5b5f5f5f5f60808587031215612d6e575f5ffd5b8435612d7981612a33565b93506020850135612d8981612d4d565b92506040850135612d9981612b3c565b91506060850135612da981612b3c565b939692955090935050565b5f5f5f5f60608587031215612dc7575f5ffd5b84356001600160401b03811115612ddc575f5ffd5b612de887828801612c18565b94505060208501356001600160401b03811115612e03575f5ffd5b612e0f87828801612bd8565b90945092505060408501356001600160401b03811115612e2d575f5ffd5b85016101408188031215612da9575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612e56575f5ffd5b88356001600160401b03811115612e6b575f5ffd5b612e778b828c01612a62565b90995097505060208901356001600160401b03811115612e95575f5ffd5b612ea18b828c01612bd8565b90975095505060408901356001600160401b03811115612ebf575f5ffd5b612ecb8b828c01612a62565b9095509350506060890135612edf81612b3c565b91506080890135612eef81612b3c565b809150509295985092959890939650565b5f60208284031215612f10575f5ffd5b815160028110611bdd575f5ffd5b5f5f60408385031215612f2f575f5ffd5b82516020840151909250612f4281612b3c565b809150509250929050565b5f60208284031215612f5d575f5ffd5b81518015158114611bdd575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f611194602083018486612f6c565b5f5f60408385031215612fb8575f5ffd5b8251612fc381612d13565b6020840151909250612f4281612d13565b8481526001600160a01b03841660208201526060604082018190525f90612ffe9083018486612f6c565b9695505050505050565b6001600160a01b03841681526040602082018190525f90611b389083018486612f6c565b5f5f8335601e19843603018112613041575f5ffd5b83016020810192503590506001600160401b0381111561305f575f5ffd5b803603821315612a9f575f5ffd5b6001600160a01b0387811682528616602082015263ffffffff8516604082015260c060608201525f8435600381108015906130a6575f5ffd5b5060c08301526130b9602086018661302c565b604060e08501526130cf61010085018284612f6c565b925050506001600160801b03841660808301526130f760a08301846001600160801b03169052565b979650505050505050565b838152604060208201525f611b38604083018486612f6c565b5f6020828403121561312b575f5ffd5b5051919050565b5f60208284031215613142575f5ffd5b8151611bdd81612d13565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156107c2576107c261314d565b5f6001600160401b0382166001600160401b0381036131a1576131a161314d565b60010192915050565b8035600c8110611acb575f5ffd5b600c81106131c8576131c8612a05565b9052565b60208082528235828201525f908301356131e581612d13565b6001600160401b038116604084015250613201604084016131aa565b61320e60608401826131b8565b5061321c606084018461302c565b610100608085015261323361012085018284612f6c565b91505061324260808501612d27565b6001600160401b03811660a08501525060a084013560c08481019190915284013560e08085019190915290930135610100909201919091525090565b808201808211156107c2576107c261314d565b80820281158282048414176107c2576107c261314d565b5f826132c257634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156132d7575f5ffd5b611bdd826131aa565b5f5f8335601e198436030181126132f5575f5ffd5b8301803591506001600160401b0382111561330e575f5ffd5b602001915036819003821315612a9f575f5ffd5b818103818111156107c2576107c261314d565b60a081525f61334860a083018a8c612f6c565b82810360208401528088825260208201905060208960051b8301018a5f5b8b8110156133a457848303601f19018452613381828e61302c565b61338c858284612f6c565b60209687019690955093909301925050600101613366565b505084810360408601526133b981898b612f6c565b93505050506133d360608301856001600160801b03169052565b6001600160801b03831660808301529998505050505050505050565b5f602082840312156133ff575f5ffd5b8151611bdd81612a33565b5f5f8335601e1984360301811261341f575f5ffd5b83016020810192503590506001600160401b0381111561343d575f5ffd5b8060051b3603821315612a9f575f5ffd5b5f8235605e19833603018112613462575f5ffd5b90910192915050565b60208082528235828201525f9060a083019084013561348981612d13565b6001600160401b0381166040850152505f60408501359050806060850152506134b5606085018561340a565b6080808601528281845260c08601905060c08260051b8701019350825f5b838110156135555787860360bf190183526134ee828661344e565b80356134f981612d4d565b60ff168752602081013561350c81612d13565b6001600160401b03166020880152613527604082018261302c565b91506060604089015261353e606089018383612f6c565b9750505060209283019291909101906001016134d3565b5093979650505050505050565b803561356d81612d4d565b60ff168252602081013561358081612b2b565b63ffffffff1660208301526040818101359083015260608101356135a381612d13565b6001600160401b0316606083015260808101356135bf81612b2b565b63ffffffff16608083015260a090810135910152565b8183525f6001600160fb1b038311156135ec575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03841681526020810183905260606040820181905261362d90820183613562565b5f61363b60c084018461340a565b610100610120850152613653610160850182846135d5565b60e0959095013561014094909401939093525091949350505050565b5f5f8335601e19843603018112613684575f5ffd5b8301803591506001600160401b0382111561369d575f5ffd5b6020019150600581901b3603821315612a9f575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126136dc575f5ffd5b9190910192915050565b6001600160801b0381811683821601908111156107c2576107c261314d565b634e487b7160e01b5f52604160045260245ffd5b80358252602080820135908301525f613735604083018361340a565b60606040860152611b386060860182846135d5565b6001600160a01b03861681526001600160e01b0319851660208201526040810184905260a060608201525f833536859003609e19018112613789575f5ffd5b61014060a0840152840180356101e084015260208101356102008401526040810135610220840152606081013561024084015261028083016137ce608083018361340a565b925060a0610260860152818383526102a0860190506102a08460051b8701019250815f5b8581101561386e5787850361029f1901835261380e828561344e565b8035865260208101356001600160e01b0319811680821461382d575f5ffd5b602088015250613840604082018261302c565b915060606040880152613857606088018383612f6c565b9650505060209283019291909101906001016137f2565b5050505061387f602087018761344e565b848203609f190160c086015291506138978183613719565b9150506138aa60e0840160408701613562565b6138b861010086018661340a565b848303609f19016101a08601526138d08382846135d5565b6101208801356101c087015286151560808701529350612ffe92505050565b5f602082840312156138ff575f5ffd5b8135611bdd81612d4d565b6001600160801b0382811682821603908111156107c2576107c261314d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f6020820151604060208501526111946040850182613929565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b818110156139ff5761013f198786030183526139ea858551613957565b945060209384019392909201916001016139cd565b505050506040840151838203603f19016080850152613a1e8282613957565b9150506060840151603f198483030160a0850152613a3c8282613929565b9150506080840151613a5960c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b5f5f5f60608486031215613a9f575f5ffd5b8351613aaa81612d4d565b6020850151909350613abb81612a33565b6040850151909250612d0881612b3c565b5f82518060208501845e5f92019182525091905056fe0096e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96aba2646970667358221220f6c8abf1dfd431b5f7521d0ea361c25d201c21f86d9ff9461d41a5106960ec9b64736f6c634300081c003300000000000000", + "storage": {} + }, + "5": { + "address": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", + "code": "0x608060405234801561000f575f5ffd5b50600436106103b3575f3560e01c8063886f1195116101f5578063de02e50311610114578063f6efbb59116100a9578063fabc1cbc11610079578063fabc1cbc14610a33578063fbf1e2c114610a46578063fce36c7d14610a59578063ff9f6cce14610a6c575f5ffd5b8063f6efbb59146109e7578063f74e8eac146109fa578063f8cd844814610a0d578063f96abf2e14610a20575f5ffd5b8063ed71e6a2116100e4578063ed71e6a214610967578063f22cef8514610994578063f2f07ab4146109a7578063f2fde38b146109d4575f5ffd5b8063de02e50314610907578063e063f81f1461091a578063e810ce211461092d578063ea4d3c9b14610940575f5ffd5b8063a50a1d9c1161018a578063bf21a8aa1161015a578063bf21a8aa14610879578063c46db606146108a0578063ca8aa7c7146108cd578063dcbb03b3146108f4575f5ffd5b8063a50a1d9c14610807578063aebd8bae1461081a578063b3dbb0e014610847578063bb7e451f1461085a575f5ffd5b80639cb9a5fa116101c55780639cb9a5fa146107a75780639d45c281146107ba5780639de4b35f146107e1578063a0169ddd146107f4575f5ffd5b8063886f11951461074c5780638da5cb5b146107735780639104c319146107845780639be3d4e41461079f575f5ffd5b80634596021c116102e15780635c975abb11610276578063715018a611610246578063715018a6146106ff5780637b8f8b0514610707578063863cb9a91461070f578063865c695314610722575f5ffd5b80635c975abb146106a25780635e9d8348146106aa57806363f6a798146106bd5780636d21117e146106d2575f5ffd5b806354fd4d50116102b157806354fd4d501461064f57806358baaa3e14610664578063595c6a67146106775780635ac86ab71461067f575f5ffd5b80634596021c146105d85780634657e26a146105eb5780634b943960146106125780634d18cc3514610638575f5ffd5b8063149bc8721161035757806339b70e381161032757806339b70e38146105745780633a8c07861461059b5780633ccc861d146105b25780633efe1db6146105c5575f5ffd5b8063149bc872146104d95780632b9f64a4146104fa57806336af41fa1461053a57806337838ed01461054d575f5ffd5b80630e9a53cf116103925780630e9a53cf1461043f5780630eb383451461048c578063131433b41461049f578063136439dd146104c6575f5ffd5b806218572c146103b757806304a0c502146103ee5780630ca298991461042a575b5f5ffd5b6103d96103c5366004613a33565b60d16020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6104157f0000000000000000000000000000000000000000000000000000000000278d0081565b60405163ffffffff90911681526020016103e5565b61043d610438366004613aab565b610a7f565b005b610447610d25565b6040516103e591905f6080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b61043d61049a366004613b07565b610e25565b6104157f0000000000000000000000000000000000000000000000000000000065fb788081565b61043d6104d4366004613b3e565b610ea5565b6104ec6104e7366004613b55565b610edf565b6040519081526020016103e5565b610522610508366004613a33565b60cc6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103e5565b61043d610548366004613b6f565b610f54565b6104157f000000000000000000000000000000000000000000000000000000000076a70081565b6105227f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b60cb5461041590600160a01b900463ffffffff1681565b61043d6105c0366004613bbe565b6110c5565b61043d6105d3366004613c14565b6110ec565b61043d6105e6366004613c3e565b6112c2565b6105227f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b610625610620366004613a33565b611325565b60405161ffff90911681526020016103e5565b60cb5461041590600160c01b900463ffffffff1681565b610657611380565b6040516103e59190613c90565b61043d610672366004613cc5565b6113b0565b61043d6113c4565b6103d961068d366004613cde565b606654600160ff9092169190911b9081161490565b6066546104ec565b6103d96106b8366004613cfe565b6113d8565b60cb5461062590600160e01b900461ffff1681565b6103d96106e0366004613d2f565b60cf60209081525f928352604080842090915290825290205460ff1681565b61043d611463565b60ca546104ec565b61043d61071d366004613a33565b611474565b6104ec610730366004613d59565b60cd60209081525f928352604080842090915290825290205481565b6105227f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6033546001600160a01b0316610522565b61052273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610447611485565b61043d6107b5366004613d85565b611521565b6104157f000000000000000000000000000000000000000000000000000000000001518081565b6106256107ef366004613dbc565b61169c565b61043d610802366004613a33565b61171f565b61043d610815366004613df8565b61172a565b6103d9610828366004613d2f565b60d260209081525f928352604080842090915290825290205460ff1681565b61043d610855366004613e11565b61173b565b6104ec610868366004613a33565b60ce6020525f908152604090205481565b6104157f00000000000000000000000000000000000000000000000000000000005c490081565b6103d96108ae366004613d2f565b60d060209081525f928352604080842090915290825290205460ff1681565b6105227f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b61043d610902366004613e3b565b611866565b610447610915366004613b3e565b6119b3565b610625610928366004613d59565b611a43565b61041561093b366004613b3e565b611aa8565b6105227f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b6103d9610975366004613d2f565b60d360209081525f928352604080842090915290825290205460ff1681565b61043d6109a2366004613d59565b611b29565b6103d96109b5366004613d2f565b60d760209081525f928352604080842090915290825290205460ff1681565b61043d6109e2366004613a33565b611c93565b61043d6109f5366004613e7f565b611d0e565b61043d610a08366004613edd565b611e43565b6104ec610a1b366004613b55565b61200a565b61043d610a2e366004613cc5565b61201a565b61043d610a41366004613b3e565b61214b565b60cb54610522906001600160a01b031681565b61043d610a67366004613b6f565b6121b8565b61043d610a7a366004613b6f565b6122e9565b6009610a8a8161244a565b610a976020850185613a33565b610aa081612475565b610abd5760405163932d94f760e01b815260040160405180910390fd5b610ac561251f565b6040516304c1b8eb60e31b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063260dc75890610b11908890600401613f48565b602060405180830381865afa158015610b2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b509190613f56565b610b6d57604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d135736858583818110610b8a57610b8a613f71565b9050602002810190610b9c9190613f85565b90505f60ce81610baf60208b018b613a33565b6001600160a01b031681526020808201929092526040015f90812054925090610bda908a018a613a33565b8284604051602001610bee939291906141ad565b6040516020818303038152906040528051906020012090505f610c1084612578565b9050600160d75f610c2460208e018e613a33565b6001600160a01b0316815260208082019290925260409081015f9081208682529092529020805460ff1916911515919091179055610c638360016141f0565b60ce5f610c7360208e018e613a33565b6001600160a01b03166001600160a01b031681526020019081526020015f208190555081336001600160a01b03167ffff0759ccb371dfb5691798724e70b4fa61cb3bfe730a33ac19fb86a48efc7568c8688604051610cd493929190614203565b60405180910390a3610d03333083610cf26040890160208a01613a33565b6001600160a01b0316929190612763565b505060019092019150610b6f9050565b50610d1e6001609755565b5050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca545b8015610dfd575f60ca610d60600184614228565b81548110610d7057610d70613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610ddf5750806040015163ffffffff164210155b15610dea5792915050565b5080610df58161423b565b915050610d4c565b5050604080516080810182525f80825260208201819052918101829052606081019190915290565b610e2d6127ce565b6001600160a01b0382165f81815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b03919091165f90815260d160205260409020805460ff1916911515919091179055565b610ead612828565b6066548181168114610ed25760405163c61dca5d60e01b815260040160405180910390fd5b610edb826128cb565b5050565b5f80610eee6020840184613a33565b8360200135604051602001610f379392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b6001610f5f8161244a565b335f90815260d1602052604090205460ff16610f8e57604051635c427cd960e01b815260040160405180910390fd5b610f9661251f565b5f5b828110156110b55736848483818110610fb357610fb3613f71565b9050602002810190610fc59190614250565b335f81815260ce60209081526040808320549051949550939192610fef92909185918791016142e2565b60405160208183030381529060405280519060200120905061101083612908565b335f90815260d0602090815260408083208484529091529020805460ff191660019081179091556110429083906141f0565b335f81815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290611089908890614308565b60405180910390a46110aa333060408601803590610cf29060208901613a33565b505050600101610f98565b506110c06001609755565b505050565b60026110d08161244a565b6110d861251f565b6110e283836129f3565b6110c06001609755565b60036110f78161244a565b60cb546001600160a01b0316331461112257604051635c427cd960e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161115557604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff161061117b576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb545f9061119a90600160a01b900463ffffffff164261431a565b6040805160808101825287815263ffffffff87811660208084018281528684168587018181525f6060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60026112cd8161244a565b6112d561251f565b5f5b838110156113145761130c8585838181106112f4576112f4613f71565b90506020028101906113069190614336565b846129f3565b6001016112d7565b5061131f6001609755565b50505050565b6001600160a01b0381165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff169082015261137a90612c7b565b92915050565b60606113ab7f76312e302e300000000000000000000000000000000000000000000000000006612ceb565b905090565b6113b86127ce565b6113c181612d28565b50565b6113cc612828565b6113d65f196128cb565b565b5f61145b8260ca6113ec6020830183613cc5565b63ffffffff168154811061140257611402613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152612d99565b506001919050565b61146b6127ce565b6113d65f612f3c565b61147c6127ce565b6113c181612f8d565b604080516080810182525f80825260208201819052918101829052606081019190915260ca80546114b890600190614228565b815481106114c8576114c8613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b600561152c8161244a565b8361153681612475565b6115535760405163932d94f760e01b815260040160405180910390fd5b61155b61251f565b5f5b83811015610d13573685858381811061157857611578613f71565b905060200281019061158a9190613f85565b6001600160a01b0388165f90815260ce60209081526040808320549051939450926115bb918b9185918791016141ad565b6040516020818303038152906040528051906020012090505f6115dd84612578565b6001600160a01b038b165f90815260d3602090815260408083208684529091529020805460ff1916600190811790915590915061161b9084906141f0565b6001600160a01b038b165f81815260ce60205260409081902092909255905183919033907ffc8888bffd711da60bc5092b33f677d81896fe80ecc677b84cfab8184462b6e09061166e9088908a9061434a565b60405180910390a461168c333083610cf26040890160208a01613a33565b50506001909201915061155d9050565b6001600160a01b0382165f90815260d66020526040812061171890826116cf6116ca36879003870187614362565b612fe8565b815260208082019290925260409081015f208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152612c7b565b9392505050565b33610edb818361304b565b6117326127ce565b6113c1816130ae565b60076117468161244a565b8261175081612475565b61176d5760405163932d94f760e01b815260040160405180910390fd5b60cb545f9061178990600160a01b900463ffffffff164261431a565b6001600160a01b0386165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152919250906117e290612c7b565b6001600160a01b0387165f90815260d560205260409020909150611807908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388169133917fd1e028bd664486a46ad26040e999cd2d22e1e9a094ee6afe19fcf64678f16f749181900360600190a3505050505050565b60066118718161244a565b8361187b81612475565b6118985760405163932d94f760e01b815260040160405180910390fd5b60cb545f906118b490600160a01b900463ffffffff164261431a565b6001600160a01b038781165f90815260d460209081526040808320938a1683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff169281019290925291925061191b90612c7b565b6001600160a01b038089165f90815260d460209081526040808320938b1683529290522090915061194d908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388811692908a169133917f48e198b6ae357e529204ee53a8e514c470ff77d9cc8e4f7207f8b5d490ae6934919081900360600190a450505050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca82815481106119e9576119e9613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b6001600160a01b038281165f90815260d46020908152604080832093851683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff16928101929092529061171890612c7b565b60ca545f905b63ffffffff811615611b0f578260ca611ac86001846143ca565b63ffffffff1681548110611ade57611ade613f71565b905f5260205f2090600202015f015403611afd576117186001826143ca565b80611b07816143e6565b915050611aae565b5060405163504570e360e01b815260040160405180910390fd5b81611b3381612475565b611b505760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa158015611bb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd89190613f56565b80611c6c575060405163ba1a84e560e01b81526001600160a01b0384811660048301525f917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed9091169063ba1a84e590602401602060405180830381865afa158015611c46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6a9190614404565b115b611c895760405163fb494ea160e01b815260040160405180910390fd5b6110c0838361304b565b611c9b6127ce565b6001600160a01b038116611d055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6113c181612f3c565b5f54610100900460ff1615808015611d2c57505f54600160ff909116105b80611d455750303b158015611d4557505f5460ff166001145b611da85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611cfc565b5f805460ff191660011790558015611dc9575f805461ff0019166101001790555b611dd2856128cb565b611ddb86612f3c565b611de484612f8d565b611ded83612d28565b611df6826130ae565b8015611e3b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6008611e4e8161244a565b83611e5881612475565b611e755760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063260dc75890611ec1908790600401613f48565b602060405180830381865afa158015611edc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f009190613f56565b611f1d57604051631fb1705560e21b815260040160405180910390fd5b60cb545f90611f3990600160a01b900463ffffffff164261431a565b6001600160a01b0387165f90815260d66020526040812091925090611f6b90826116cf6116ca368b90038b018b614362565b6001600160a01b0388165f90815260d660205260408120919250611fb09190611f9c6116ca368b90038b018b614362565b81526020019081526020015f208684613119565b866001600160a01b0316336001600160a01b03167f14918b3834ab6752eb2e1b489b6663a67810efb5f56f3944a97ede8ecf1fd9f18885858a604051611ff9949392919061441b565b60405180910390a350505050505050565b5f6001610eee6020840184613a33565b60036120258161244a565b60cb546001600160a01b0316331461205057604051635c427cd960e01b815260040160405180910390fd5b60ca5463ffffffff831610612078576040516394a8d38960e01b815260040160405180910390fd5b5f60ca8363ffffffff168154811061209257612092613f71565b905f5260205f20906002020190508060010160089054906101000a900460ff16156120d057604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061210157604051630c36f66560e21b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e905f90a2505050565b6121536131e8565b6066548019821981161461217a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6121c28161244a565b6121ca61251f565b5f5b828110156110b557368484838181106121e7576121e7613f71565b90506020028101906121f99190614250565b335f81815260ce6020908152604080832054905194955093919261222392909185918791016142e2565b60405160208183030381529060405280519060200120905061224483612908565b335f90815260cf602090815260408083208484529091529020805460ff191660019081179091556122769083906141f0565b335f81815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e6281906122bd908890614308565b60405180910390a46122de333060408601803590610cf29060208901613a33565b5050506001016121cc565b60046122f48161244a565b335f90815260d1602052604090205460ff1661232357604051635c427cd960e01b815260040160405180910390fd5b61232b61251f565b5f5b828110156110b5573684848381811061234857612348613f71565b905060200281019061235a9190614250565b335f81815260ce6020908152604080832054905194955093919261238492909185918791016142e2565b6040516020818303038152906040528051906020012090506123a583612908565b335f90815260d2602090815260408083208484529091529020805460ff191660019081179091556123d79083906141f0565b335f81815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b9061241e908890614308565b60405180910390a461243f333060408601803590610cf29060208901613a33565b50505060010161232d565b606654600160ff83161b908116036113c15760405163840a48d560e01b815260040160405180910390fd5b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af11580156124fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137a9190613f56565b6002609754036125715760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611cfc565b6002609755565b5f6125ab612586838061444f565b6125966080860160608701613cc5565b6125a660a0870160808801613cc5565b613299565b5f6125b9604084018461444f565b9050116125d95760405163796cc52560e01b815260040160405180910390fd5b426125ea60a0840160808501613cc5565b6125fa6080850160608601613cc5565b612604919061431a565b63ffffffff16106126285760405163150358a160e21b815260040160405180910390fd5b5f80805b612639604086018661444f565b905081101561272a5736612650604087018761444f565b8381811061266057612660613f71565b6040029190910191505f90506126796020830183613a33565b6001600160a01b0316036126a057604051630863a45360e11b815260040160405180910390fd5b6126ad6020820182613a33565b6001600160a01b0316836001600160a01b0316106126de576040516310fb47f160e31b815260040160405180910390fd5b5f816020013511612702576040516310eb483f60e21b815260040160405180910390fd5b61270f6020820182613a33565b925061271f6020820135856141f0565b93505060010161262c565b506f4b3b4ca85a86c47a098a223fffffffff82111561275c5760405163070b5a6f60e21b815260040160405180910390fd5b5092915050565b6040516001600160a01b038085166024830152831660448201526064810182905261131f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613597565b6033546001600160a01b031633146113d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611cfc565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561288a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ae9190613f56565b6113d657604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b612935612915828061444f565b6129256080850160608601613cc5565b6125a660a0860160808701613cc5565b5f816040013511612959576040516310eb483f60e21b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff8160400135111561298e5760405163070b5a6f60e21b815260040160405180910390fd5b6129be63ffffffff7f0000000000000000000000000000000000000000000000000000000000278d0016426141f0565b6129ce6080830160608401613cc5565b63ffffffff1611156113c157604051637ee2b44360e01b815260040160405180910390fd5b5f60ca612a036020850185613cc5565b63ffffffff1681548110612a1957612a19613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050612a798382612d99565b5f612a8a6080850160608601613a33565b6001600160a01b038082165f90815260cc60205260409020549192501680612aaf5750805b336001600160a01b03821614612ad857604051635c427cd960e01b815260040160405180910390fd5b5f5b612ae760a0870187614494565b9050811015611e3b5736612afe60e088018861444f565b83818110612b0e57612b0e613f71565b6001600160a01b0387165f90815260cd602090815260408083209302949094019450929091508290612b4290850185613a33565b6001600160a01b03166001600160a01b031681526020019081526020015f2054905080826020013511612b885760405163aa385e8160e01b815260040160405180910390fd5b5f612b97826020850135614228565b6001600160a01b0387165f90815260cd60209081526040822092935085018035929190612bc49087613a33565b6001600160a01b031681526020808201929092526040015f2091909155612c059089908390612bf590870187613a33565b6001600160a01b0316919061366a565b86516001600160a01b03808a1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce3190612c496020890189613a33565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101612ada565b5f816040015163ffffffff165f1480612cad5750815161ffff908116148015612cad5750816040015163ffffffff1642105b15612cc557505060cb54600160e01b900461ffff1690565b816040015163ffffffff16421015612cde57815161137a565b506020015190565b919050565b60605f612cf78361369a565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b806060015115612dbc57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff16421015612de757604051631437a2bb60e31b815260040160405180910390fd5b612df460c0830183614494565b9050612e0360a0840184614494565b905014612e23576040516343714afd60e01b815260040160405180910390fd5b612e3060e083018361444f565b9050612e3f60c0840184614494565b905014612e5f576040516343714afd60e01b815260040160405180910390fd5b8051612e8b90612e756040850160208601613cc5565b612e8260408601866144d9565b866060016136c1565b5f5b612e9a60a0840184614494565b90508110156110c057612f346080840135612eb860a0860186614494565b84818110612ec857612ec8613f71565b9050602002016020810190612edd9190613cc5565b612eea60c0870187614494565b85818110612efa57612efa613f71565b9050602002810190612f0c91906144d9565b612f1960e089018961444f565b87818110612f2957612f29613f71565b905060400201613765565b600101612e8d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb905f90a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b5f815f0151826020015163ffffffff1660405160200161303392919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261137a9061451b565b6001600160a01b038083165f81815260cc602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca3129190a4505050565b60cb546040805161ffff600160e01b9093048316815291831660208301527fe6cd4edfdcc1f6d130ab35f73d72378f3a642944fb4ee5bd84b7807a81ea1c4e910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b61271061ffff831611156131405760405163891c63df60e01b815260040160405180910390fd5b8254600160201b900463ffffffff16421161316e57604051637b1e25c560e01b815260040160405180910390fd5b8254600160201b900463ffffffff165f0361319557825461ffff191661ffff1783556131ac565b825462010000810461ffff1661ffff199091161783555b825463ffffffff909116600160201b0267ffffffff000000001961ffff90931662010000029290921667ffffffffffff00001990911617179055565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613244573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613268919061453e565b6001600160a01b0316336001600160a01b0316146113d65760405163794821ff60e01b815260040160405180910390fd5b826132b75760405163796cc52560e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000005c490063ffffffff168163ffffffff16111561330457604051630dd0b9f560e21b815260040160405180910390fd5b61332e7f00000000000000000000000000000000000000000000000000000000000151808261456d565b63ffffffff16156133525760405163ee66470560e01b815260040160405180910390fd5b5f8163ffffffff16116133785760405163cb3f434d60e01b815260040160405180910390fd5b6133a27f00000000000000000000000000000000000000000000000000000000000151808361456d565b63ffffffff16156133c657604051633c1a94f160e21b815260040160405180910390fd5b8163ffffffff167f000000000000000000000000000000000000000000000000000000000076a70063ffffffff16426133ff9190614228565b1115801561343957508163ffffffff167f0000000000000000000000000000000000000000000000000000000065fb788063ffffffff1611155b6134565760405163041aa75760e11b815260040160405180910390fd5b5f805b84811015611e3b575f86868381811061347457613474613f71565b61348a9260206040909202019081019150613a33565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063663c1de490602401602060405180830381865afa1580156134f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135179190613f56565b8061353e57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61355b57604051632efd965160e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03161061358d5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101613459565b5f6135eb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137a39092919063ffffffff16565b905080515f148061360b57508080602001905181019061360b9190613f56565b6110c05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611cfc565b6040516001600160a01b0383166024820152604481018290526110c090849063a9059cbb60e01b90606401612797565b5f60ff8216601f81111561137a57604051632cd44ac360e21b815260040160405180910390fd5b6136cc602083614594565b6001901b8463ffffffff16106136f45760405162c6c39d60e71b815260040160405180910390fd5b5f6136fe82610edf565b905061374884848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92508591505063ffffffff89166137b9565b611e3b576040516369ca16c960e01b815260040160405180910390fd5b613770602083614594565b6001901b8463ffffffff16106137995760405163054ff4df60e51b815260040160405180910390fd5b5f6136fe8261200a565b60606137b184845f856137ee565b949350505050565b5f836137d8576040516329e7276760e11b815260040160405180910390fd5b836137e48685856138c5565b1495945050505050565b60608247101561384f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611cfc565b5f5f866001600160a01b0316858760405161386a91906145a7565b5f6040518083038185875af1925050503d805f81146138a4576040519150601f19603f3d011682016040523d82523d5f602084013e6138a9565b606091505b50915091506138ba87838387613982565b979650505050505050565b5f83515f036138d5575081611718565b602084516138e391906145bd565b15613901576040516313717da960e21b815260040160405180910390fd5b8260205b85518111613962576139186002856145bd565b5f0361393957815f528086015160205260405f209150600284049350613950565b808601515f528160205260405f2091506002840493505b61395b6020826141f0565b9050613905565b5082156137b1576040516363df817160e01b815260040160405180910390fd5b606083156139f05782515f036139e9576001600160a01b0385163b6139e95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611cfc565b50816137b1565b6137b18383815115613a055781518083602001fd5b8060405162461bcd60e51b8152600401611cfc9190613c90565b6001600160a01b03811681146113c1575f5ffd5b5f60208284031215613a43575f5ffd5b813561171881613a1f565b5f60408284031215613a5e575f5ffd5b50919050565b5f5f83601f840112613a74575f5ffd5b5081356001600160401b03811115613a8a575f5ffd5b6020830191508360208260051b8501011115613aa4575f5ffd5b9250929050565b5f5f5f60608486031215613abd575f5ffd5b613ac78585613a4e565b925060408401356001600160401b03811115613ae1575f5ffd5b613aed86828701613a64565b9497909650939450505050565b80151581146113c1575f5ffd5b5f5f60408385031215613b18575f5ffd5b8235613b2381613a1f565b91506020830135613b3381613afa565b809150509250929050565b5f60208284031215613b4e575f5ffd5b5035919050565b5f60408284031215613b65575f5ffd5b6117188383613a4e565b5f5f60208385031215613b80575f5ffd5b82356001600160401b03811115613b95575f5ffd5b613ba185828601613a64565b90969095509350505050565b5f6101008284031215613a5e575f5ffd5b5f5f60408385031215613bcf575f5ffd5b82356001600160401b03811115613be4575f5ffd5b613bf085828601613bad565b9250506020830135613b3381613a1f565b803563ffffffff81168114612ce6575f5ffd5b5f5f60408385031215613c25575f5ffd5b82359150613c3560208401613c01565b90509250929050565b5f5f5f60408486031215613c50575f5ffd5b83356001600160401b03811115613c65575f5ffd5b613c7186828701613a64565b9094509250506020840135613c8581613a1f565b809150509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613cd5575f5ffd5b61171882613c01565b5f60208284031215613cee575f5ffd5b813560ff81168114611718575f5ffd5b5f60208284031215613d0e575f5ffd5b81356001600160401b03811115613d23575f5ffd5b6137b184828501613bad565b5f5f60408385031215613d40575f5ffd5b8235613d4b81613a1f565b946020939093013593505050565b5f5f60408385031215613d6a575f5ffd5b8235613d7581613a1f565b91506020830135613b3381613a1f565b5f5f5f60408486031215613d97575f5ffd5b8335613da281613a1f565b925060208401356001600160401b03811115613ae1575f5ffd5b5f5f60608385031215613dcd575f5ffd5b8235613dd881613a1f565b9150613c358460208501613a4e565b803561ffff81168114612ce6575f5ffd5b5f60208284031215613e08575f5ffd5b61171882613de7565b5f5f60408385031215613e22575f5ffd5b8235613e2d81613a1f565b9150613c3560208401613de7565b5f5f5f60608486031215613e4d575f5ffd5b8335613e5881613a1f565b92506020840135613e6881613a1f565b9150613e7660408501613de7565b90509250925092565b5f5f5f5f5f60a08688031215613e93575f5ffd5b8535613e9e81613a1f565b9450602086013593506040860135613eb581613a1f565b9250613ec360608701613c01565b9150613ed160808701613de7565b90509295509295909350565b5f5f5f60808486031215613eef575f5ffd5b8335613efa81613a1f565b9250613f098560208601613a4e565b9150613e7660608501613de7565b8035613f2281613a1f565b6001600160a01b0316825263ffffffff613f3e60208301613c01565b1660208301525050565b6040810161137a8284613f17565b5f60208284031215613f66575f5ffd5b815161171881613afa565b634e487b7160e01b5f52603260045260245ffd5b5f823560be19833603018112613f99575f5ffd5b9190910192915050565b5f5f8335601e19843603018112613fb8575f5ffd5b83016020810192503590506001600160401b03811115613fd6575f5ffd5b8060061b3603821315613aa4575f5ffd5b8183526020830192505f815f5b8481101561404a57813561400781613a1f565b6001600160a01b0316865260208201356bffffffffffffffffffffffff8116808214614031575f5ffd5b6020880152506040958601959190910190600101613ff4565b5093949350505050565b5f5f8335601e19843603018112614069575f5ffd5b83016020810192503590506001600160401b03811115614087575f5ffd5b803603821315613aa4575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f6140c88283613fa3565b60c085526140da60c086018284613fe7565b91505060208301356140eb81613a1f565b6001600160a01b031660208501526141066040840184613fa3565b858303604087015280835290915f91906020015b8183101561415557833561412d81613a1f565b6001600160a01b0316815260208481013590820152604093840193600193909301920161411a565b61416160608701613c01565b63ffffffff81166060890152935061417b60808701613c01565b63ffffffff81166080890152935061419660a0870187614054565b9450925086810360a08801526138ba818585614095565b60018060a01b0384168152826020820152606060408201525f6141d360608301846140bd565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561137a5761137a6141dc565b61420d8185613f17565b826040820152608060608201525f6141d360808301846140bd565b8181038181111561137a5761137a6141dc565b5f81614249576142496141dc565b505f190190565b5f8235609e19833603018112613f99575f5ffd5b5f61426f8283613fa3565b60a0855261428160a086018284613fe7565b915050602083013561429281613a1f565b6001600160a01b031660208501526040838101359085015263ffffffff6142bb60608501613c01565b16606085015263ffffffff6142d260808501613c01565b1660808501528091505092915050565b60018060a01b0384168152826020820152606060408201525f6141d36060830184614264565b602081525f6117186020830184614264565b63ffffffff818116838216019081111561137a5761137a6141dc565b5f823560fe19833603018112613f99575f5ffd5b828152604060208201525f6137b160408301846140bd565b5f6040828403128015614373575f5ffd5b50604080519081016001600160401b03811182821017156143a257634e487b7160e01b5f52604160045260245ffd5b60405282356143b081613a1f565b81526143be60208401613c01565b60208201529392505050565b63ffffffff828116828216039081111561137a5761137a6141dc565b5f63ffffffff8216806143fb576143fb6141dc565b5f190192915050565b5f60208284031215614414575f5ffd5b5051919050565b60a081016144298287613f17565b63ffffffff94909416604082015261ffff92831660608201529116608090910152919050565b5f5f8335601e19843603018112614464575f5ffd5b8301803591506001600160401b0382111561447d575f5ffd5b6020019150600681901b3603821315613aa4575f5ffd5b5f5f8335601e198436030181126144a9575f5ffd5b8301803591506001600160401b038211156144c2575f5ffd5b6020019150600581901b3603821315613aa4575f5ffd5b5f5f8335601e198436030181126144ee575f5ffd5b8301803591506001600160401b03821115614507575f5ffd5b602001915036819003821315613aa4575f5ffd5b80516020808301519190811015613a5e575f1960209190910360031b1b16919050565b5f6020828403121561454e575f5ffd5b815161171881613a1f565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff83168061458257614582614559565b8063ffffffff84160691505092915050565b5f826145a2576145a2614559565b500490565b5f82518060208501845e5f920191825250919050565b5f826145cb576145cb614559565b50069056fea26469706673582212206dbbfe6d9d917793b8f1980334a263452c714349f8a1f22c946501a37caf87fd64736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, "18": { "address": "0x0000F90827F1C53a10cb7A02335B175320002935", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604657602036036042575f35600143038111604257611fff81430311604257611fff9006545f5260205ff35b5f5ffd5b5f35611fff60014303065500", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x1c7ccb99763ccafc72aef9cc02023e6ee7a01633162dbc3feec50ea313e7e360", - "0x0000000000000000000000000000000000000000000000000000000000000039": "0xf189f68933d9a1b34a8b3913feca15ae81f59aaa545355f9ab403a32fe42b505", - "0x0000000000000000000000000000000000000000000000000000000000000021": "0x119e9aa45f6ed72dde607d5f63f22886ae278972ce2f59b2e16aadc63ea0e4f5", - "0x0000000000000000000000000000000000000000000000000000000000000041": "0xd53ca6cfe3831f12d171b7505d2a09890df32a91064138edc4326a615edcaf18", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x96843b48916cac1b807845f7c9d4a70166c9c189110c48ba4ffb3ddcd148c757", - "0x0000000000000000000000000000000000000000000000000000000000000027": "0x579dcef070e821af17fdc43437eedf70ea02f722906d2e7743074ee0f2a1aadb", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0x4553672f22613e57fe1c8d907d953a854f472f0469de73431c6efa96a3d26bbf", - "0x0000000000000000000000000000000000000000000000000000000000000009": "0xa9ca4229fe8d94c757444a588d1e2b74e73e298609d734e34dd40a261eae1a0c", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0x892a7e0f32744e24e40d0bde4ca3fa9a84b193575d9e11004cf9b75bc841f3cb", - "0x000000000000000000000000000000000000000000000000000000000000003c": "0x8a55fba33acaba8efb7ffe3dc40d4c4bc13a659f690200824b41f3825282f9ec", - "0x000000000000000000000000000000000000000000000000000000000000001a": "0xe19bf76a9b82e4480d45c36f240b4398d6f753d536998584e592142720977b74", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0xbcff14a7c6a48a6dda50cd8dc3d4cdb1112409f2b037e7797255006e6dd87e4c", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0xd6183fd84bdb9246aa40ab17c261a7d2ccdab176ea80805edd220c68e80bd658", - "0x000000000000000000000000000000000000000000000000000000000000003b": "0x64f40c7f2ff39fd3907baa06caca5fd405fdcc6e4deebaf3199edb174611ae62", - "0x000000000000000000000000000000000000000000000000000000000000000c": "0xbf8538613ae14bd69359d03bef5850e89c55a877d38b250e86bdffdee79dbaa4", - "0x0000000000000000000000000000000000000000000000000000000000000014": "0xc05bf38b10299d62db889edb8956dd8b0e97802be239d28cd629f898264985cb", - "0x0000000000000000000000000000000000000000000000000000000000000022": "0x70cd0ddc7a4f76aeca7714c2c9790a7038b1470fb89d5a6ce88febb35f0c7dd3", - "0x0000000000000000000000000000000000000000000000000000000000000023": "0x2843bea5501361c0fa8b3d575504b1cdd663bb64210912759ac290f59795b2e7", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0xef3a14292ed7130c7603a37b531e46d6a42294d45a8683ebc7eb1f714757efc4", - "0x0000000000000000000000000000000000000000000000000000000000000031": "0xdc492565c4172cc443f4f16162f0d3e612fce06d9abfd3ab134b7dec0896042e", - "0x0000000000000000000000000000000000000000000000000000000000000007": "0xf783d844f5c2a5d6bb6f88391fd2bf48d4b532b79a1642c1960dcf55856e8c02", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf6207ca50b41d9067caed60d979fb1743003ed75d06b3b14066e7463f0540403", - "0x0000000000000000000000000000000000000000000000000000000000000035": "0x081c2e1ba812ef6630866f870aae1ccf16abcc27f580da38165fddff6cd6e31f", - "0x000000000000000000000000000000000000000000000000000000000000001d": "0x9cc9babe434337b97d4080d20bf99cf7696e4982150d31e9c5b627ea2159d60e", - "0x0000000000000000000000000000000000000000000000000000000000000020": "0x1305609451eaf1ca6f477b3d616c2f26f7176da7282883b984e94162bd4023ee", - "0x000000000000000000000000000000000000000000000000000000000000000b": "0xdfe60d3672f48afdc9b488bbe191ebf363d67d7e4b6311c0464d25acfd55a5ca", - "0x0000000000000000000000000000000000000000000000000000000000000036": "0x3d1536a059233fdc1cc5198593e693e60e2d58cebca629fd6402239133d3f172", - "0x000000000000000000000000000000000000000000000000000000000000000f": "0x5c0aeba10559911a89a0c91f18073b12b943f74b0de27b73e48980d38b448436", - "0x0000000000000000000000000000000000000000000000000000000000000011": "0x9b82496a7ca660840a8523e34a6841816c3cff2da375b0c96e0d3ffb59c6de18", - "0x000000000000000000000000000000000000000000000000000000000000003d": "0xb3455855f3a222c468233507c368947db26bfaae6a606e8d77b8242dd13e43c3", - "0x0000000000000000000000000000000000000000000000000000000000000024": "0xa58c2e15ee89e06fd7ea79b2872f81e1e0c44c325985b6e6c8ed2719fbf449cf", - "0x000000000000000000000000000000000000000000000000000000000000002c": "0x182c9f960037ae10831d02bed1194dabebd7a5602de006109fb78d1250fb23b7", - "0x000000000000000000000000000000000000000000000000000000000000002b": "0x0a596d9c73829905df7c6ebff95a21c6e6bca855ec6d49129c36707d6c3d4cfc", - "0x0000000000000000000000000000000000000000000000000000000000000019": "0x1d7d3f9c1fa669529626a5440c5e7d519951c7b91634f89dccfac7f8b869fe27", - "0x000000000000000000000000000000000000000000000000000000000000002a": "0xf90b5d4b4910aed92c5b790a922d31151553d23eda1d90f3adac2d525357eb39", - "0x0000000000000000000000000000000000000000000000000000000000000025": "0x96cd59ce5dd8ad6ba1319c21e595394e9a94000c5ddebba607e723b9d1e47e1e", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x6df41381ad3e20512ed26c18d1e09ef818e3df9880df965050dbfe0ff95ffb27", - "0x000000000000000000000000000000000000000000000000000000000000002e": "0x57360cf128c978ff945494e84c3741334433ff85c25be954a04d5fd7fc7e8c6e", - "0x000000000000000000000000000000000000000000000000000000000000000e": "0x4c6a8a948520137dbfe94150d6aed5dbbd1742777e01d9d7fb0918796b70cb87", - "0x0000000000000000000000000000000000000000000000000000000000000038": "0x0c02089891e6948d5e24f1429429d5c49206fc16b7e96200ab34f8645c9f4512", - "0x000000000000000000000000000000000000000000000000000000000000001f": "0x5fc90b53b89a885e94dab62910c6ac5f6be77fcc6d99e9e36fddfafd020b9fba", - "0x0000000000000000000000000000000000000000000000000000000000000012": "0x99566b44db007dcd7d5233acb5454d4d4cf3abfd240640eec360d6cca374e96f", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x8b212d9cd0e63c3d417644ad1aae62ab7a1bbf6974ff79fea8eee4c911f9029c", - "0x0000000000000000000000000000000000000000000000000000000000000017": "0x2f43b9874f13684d2469ee2d63926a89b6ba2ff468af214fe0215d379c37be0f", - "0x000000000000000000000000000000000000000000000000000000000000001b": "0x6dff6c374d06752ca6f1c87c7897e308d65b33bf13698352c1abd37d613e1f80", - "0x000000000000000000000000000000000000000000000000000000000000000a": "0x2ac8dc6f265159498b9be97d21cbb56677331330a1864b5796c9b706ed091249", - "0x0000000000000000000000000000000000000000000000000000000000000029": "0xc369184a8e2796eef31b7d1aff7b541af217bf28fcaa8e2bf7bb72350dc6625e", - "0x000000000000000000000000000000000000000000000000000000000000001e": "0x9f2c47909a05a6586d1534654a3e1fddcbfab9ecabbe60662fc6afdc8be47daf", - "0x000000000000000000000000000000000000000000000000000000000000002d": "0x385735840cede3eb16b9a0d3b0a8058031d17ca5f7af278fe46d8ceed114a364", - "0x0000000000000000000000000000000000000000000000000000000000000015": "0xcef9f2c07e86a8330cc8b98bc8971a8ca96573f01f4c86d395885b684ba78750", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x656fd303dad7d60b9c06a10713aea17a8e2ca469fc84d9ae6de1f96389cf774d", - "0x000000000000000000000000000000000000000000000000000000000000003a": "0x1a62ec2811057f49cb753235d5c801f1c58abeb5ecc827f9776725ca8142be26", - "0x0000000000000000000000000000000000000000000000000000000000000016": "0xd35f667595b3eb07c9dd950b0fe5d7ab4ef6f0b462b4d54123aaf81b4908ed76", - "0x0000000000000000000000000000000000000000000000000000000000000026": "0x387dbf5b5e57b10a870463d85dbe46742cf6db3c25d6a45c14e2eddab118b816", - "0x0000000000000000000000000000000000000000000000000000000000000030": "0xe74c94e114885002a31b6a6297bbd62d01c02876ddc9839eb65f1b8a3131998c", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0xc9b40531c5e53893671a6f282d058b5738b7976e543c2286fd45bfff75cc26a7", - "0x000000000000000000000000000000000000000000000000000000000000003f": "0xc53716da97d3b55b2db875af678f06d8e3db9e0948a0887486bf5a5c51bfd6d7", - "0x0000000000000000000000000000000000000000000000000000000000000040": "0x7056d003e45162f9e22ae10eba2abc42304da21586ecfe5bb242c6ef2edd33d3", - "0x0000000000000000000000000000000000000000000000000000000000000013": "0x4a2f67d293e0418d710ba17a5d2929035faa7630843e1ce8b83140163bbfab12", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0xd547c13e704d7a970dc38bb8a0b9e83f30aad7a215e4b01ba7162425b1a93168", - "0x0000000000000000000000000000000000000000000000000000000000000018": "0x8c47d7c7a7c06be928266c25d4b8025c82d89149024f882303037b5ee6575abd", - "0x0000000000000000000000000000000000000000000000000000000000000028": "0x8aa5e4a2d90d66fac532cbb58c30c801f402bc81ae9e2b56a005eac7bc31281a", - "0x000000000000000000000000000000000000000000000000000000000000000d": "0xa64e97b335c41db3cb37903f272e77a44d149f53234af52a175a76543b1c17de", - "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb978db7ff5f3f557e0c15dee7424994d7d4df80e819bbe81f8f0550621552d61", - "0x000000000000000000000000000000000000000000000000000000000000001c": "0x905e60c9b9d5f2898053d0084acd4fab253ce15e8a5ecb86c8f39cdd4c12731e", - "0x0000000000000000000000000000000000000000000000000000000000000010": "0x0973cee6d8080a6c6ba835b32f9505cd56d9a5406fb8577b536f818b61966abf" + "0x0000000000000000000000000000000000000000000000000000000000000017": "0xd9a1f173c5402b393792f7ffbf2216c74eac802716e1ff573e68bc1d3827add8", + "0x0000000000000000000000000000000000000000000000000000000000000053": "0xd5ab7349901e52e56fd3fcb7c4139e6989200fb0e1d2cfc96be9f78a074facbb", + "0x0000000000000000000000000000000000000000000000000000000000000086": "0x46bd803e513296fee1a02b8f1973aa50e42f9cc1313b0facfcde195436803288", + "0x00000000000000000000000000000000000000000000000000000000000000c9": "0xd8d2ef9f13e6f781656fffe371cceee4cfef65bbdcb0bd9aaeb7d25413a57708", + "0x0000000000000000000000000000000000000000000000000000000000000022": "0x04141b0247f48ee8d4b1e011fea0e5895de0fc5683bc81612350ed09f5cfa6cf", + "0x000000000000000000000000000000000000000000000000000000000000009d": "0xd4a77c0fb4b305847b80c7a291664a8f3c40d668ebcb74e03f260486608d1742", + "0x0000000000000000000000000000000000000000000000000000000000000050": "0xbdb03f8f0cac733c3bea8a1e2e0d8ebd75bdc8ca0f5304b1c73385b3071b5911", + "0x0000000000000000000000000000000000000000000000000000000000000029": "0xe968cf819f8ff6b28926678f84560c1ce8dd2413b9e6c41f141ee84251658a4b", + "0x00000000000000000000000000000000000000000000000000000000000000a7": "0x9951b696739cb78c6d1e41f92314be950f52e4b30192eb7a83f49cd4c0755f19", + "0x00000000000000000000000000000000000000000000000000000000000000c8": "0x95a96a364d133a2fa79f2203f7308d4bdddd18367e0d9cbe8cce97e16c12e269", + "0x0000000000000000000000000000000000000000000000000000000000000067": "0xc7d5d3132bee0c254002c3ddbf7166753177f313b6337d2ddeea11eb11d0772a", + "0x0000000000000000000000000000000000000000000000000000000000000043": "0xff5d07b3c6ec6480fc0be1870139740d2b20013b94ed9b883614c947a086a374", + "0x0000000000000000000000000000000000000000000000000000000000000036": "0x9a14a7a375c1188baa76dd7cc8d800a3ffb11f321d2cbd06a2c39f61661d6e5d", + "0x000000000000000000000000000000000000000000000000000000000000005a": "0x6b7927cbaef9238904ebe4058c5fef03188451f90724fd071d91487270bd0146", + "0x0000000000000000000000000000000000000000000000000000000000000018": "0xf050f73dffd68f8a9afb3a335f15461c1f259d587fae886e874ca6ccdd61897e", + "0x0000000000000000000000000000000000000000000000000000000000000057": "0x02a716a4322e5840dc35e5975eb65696405369d34899c1f5950ecb08893b14e0", + "0x000000000000000000000000000000000000000000000000000000000000001c": "0x770fc60279bb933a8378181a22f07db3bf6f491a1882b6d540478d036683b3a5", + "0x0000000000000000000000000000000000000000000000000000000000000089": "0x2306743a8e9d16d45de60019c9731843864dbebd1995b2560a9be672d1d5d39c", + "0x00000000000000000000000000000000000000000000000000000000000000c2": "0xb4d4ae06f04abebb6e02eb838841eafd0d674e3c13d4d733ce5e8dcb57ee222a", + "0x00000000000000000000000000000000000000000000000000000000000000cc": "0x73271f576371fddbd30598c74adf590cd40574452eb4a4099bc44f51c87e473f", + "0x000000000000000000000000000000000000000000000000000000000000003a": "0x106d4412e4cf93560a92aadcd72b5f6b85bab6f376945bac5511fa47d4c100c5", + "0x00000000000000000000000000000000000000000000000000000000000000b3": "0x7d94b40f19d6322646f137aa67d960344c844f8bd2b925ef5017d44bc4407509", + "0x0000000000000000000000000000000000000000000000000000000000000013": "0x750a2e06c85d58875c705679722541a6c29f6964d42e12c6e7a3897302fba486", + "0x0000000000000000000000000000000000000000000000000000000000000035": "0x114cc85ec366b0bccdd5671e202267c8ec45550f359e11b63d210679951452e6", + "0x000000000000000000000000000000000000000000000000000000000000009a": "0x0f4c59c510c1d0e3f6b94ffd2e0edbcdfb71bfdab313d04be591fd6cdce8f692", + "0x0000000000000000000000000000000000000000000000000000000000000046": "0x48b4f973264ba359fe0e1bca8e261e190a84f58cba5552d50d648a4330899de1", + "0x0000000000000000000000000000000000000000000000000000000000000019": "0x3b6e5cb2740d21990bee02100f6d727a07523b579f1c0a74b8366de6b2b4db10", + "0x00000000000000000000000000000000000000000000000000000000000000a6": "0x472d2409e738877c7af5cb1d4922d9357c75bd1e7857f49f72a19bbf024e84a3", + "0x00000000000000000000000000000000000000000000000000000000000000c6": "0x9bb240831c1cda6b953102b7f59db60168af0e6e8807c26e1edd1a2e403a5f41", + "0x0000000000000000000000000000000000000000000000000000000000000068": "0xca0bfcaec536cac6d63bf1438a5f705f10907d83a0a3349c7831ad0a05286db6", + "0x000000000000000000000000000000000000000000000000000000000000003c": "0xc0d49a3cdf0184267fcbd2ea86b0becf823e946d2fb5a4042a5c8dc9a47b462a", + "0x000000000000000000000000000000000000000000000000000000000000008e": "0x445aed1b118103cd7ea77678dbaf7bf31343d4f157ad526c67895e1c6e4b0ef4", + "0x00000000000000000000000000000000000000000000000000000000000000a3": "0xbfbc060d9f7faa25f6d161bf108b91d6a2fa812cfc82736e1c4e567c1308a7e8", + "0x0000000000000000000000000000000000000000000000000000000000000093": "0xc95bc566434f667b3a881fbe8741a21555f2f31d551adb983d2aa0190d4dd5d0", + "0x000000000000000000000000000000000000000000000000000000000000002a": "0xb67a7a33c212ff4b5bd907b8875eaa11e923dddd921299bde5327173b3798971", + "0x0000000000000000000000000000000000000000000000000000000000000028": "0xaee9925680a9ea18419a42edab4d1566585d0b8cad7873500fd14a0fff2cafba", + "0x00000000000000000000000000000000000000000000000000000000000000b2": "0xf0a0f2be0815bf4a5378e0ccbe15747aa273d5be706dbcb9fb592f58c27902bc", + "0x00000000000000000000000000000000000000000000000000000000000000a4": "0x1abcc23fb6ee4076111ada72a52fe73b08a3c9b1ed19e4396594fa3a3de37e9f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x48ca5fd8b794945cc71ab1f532dd1dc1bc07d44147d5515822a139cf524ce05b", + "0x0000000000000000000000000000000000000000000000000000000000000058": "0x19cb82bb7a8f2a1f986e84de199244d30768c8eeefc8d55b00d31a958871f87c", + "0x00000000000000000000000000000000000000000000000000000000000000d2": "0x96550ad64146b137b6dcfeb796da6abce781362d1404e79fe3961aeaa060f00f", + "0x0000000000000000000000000000000000000000000000000000000000000039": "0x98b42a3203b86136387ac190f34c1d9e8150c5596e264349ba62375ee5880702", + "0x0000000000000000000000000000000000000000000000000000000000000059": "0xfad13eba6a0eaebc0746b4ac1a95376e827045317c0c636b5ee4b1547fc1f321", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0xa232b6a70a2c7ebaae791ba474a93952daa1c50bd4d31c35c4f04daea000c5c3", + "0x000000000000000000000000000000000000000000000000000000000000008d": "0xfa1452851c6e44c0d9172ed7a49a0e6fe36d7d9fee7e254fed06f9200174d9a5", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0x7ace544866ec89753b300c9ccdb284f047aa2ce8e6c641daa090fdef98c2c880", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0x509cfead0df33c76dfd8e0a32a8a216d4fd9915956192c1fd5dd3209c0817efe", + "0x0000000000000000000000000000000000000000000000000000000000000087": "0x92875ba0c9d2ea0e7b2c51ee9a48c75163cfdc35e5df167e0309a79310ff232f", + "0x000000000000000000000000000000000000000000000000000000000000007a": "0x147223083d0eda8459c1140978a65f1504238977e75a0d8057014d1caf489fb6", + "0x00000000000000000000000000000000000000000000000000000000000000a8": "0x5f15b2665f663f711bb5500647834e95fe91484113feec0f40e3383e42c6286d", + "0x00000000000000000000000000000000000000000000000000000000000000ab": "0x4d7f9073fd46dd5b59f51fde677c8e0776da28347735bc14bd08092e098244f5", + "0x0000000000000000000000000000000000000000000000000000000000000027": "0x9f1e4ff326b3e860570e613a090ea8198454c6cb4e805eb44e45e5997a582a8f", + "0x0000000000000000000000000000000000000000000000000000000000000061": "0x1e12c4792cf316d1055b29b4437b7819ad8fefc176854a1bfffa64aa502a16b3", + "0x00000000000000000000000000000000000000000000000000000000000000af": "0x51b3fa547fc43dc23955539298a97b0829e7899df8182730443251706aed6a8c", + "0x00000000000000000000000000000000000000000000000000000000000000ce": "0x4bf6abf4f7b815598823a4a12ecf52b541eb4927f6c981c93205b833162ccbd5", + "0x00000000000000000000000000000000000000000000000000000000000000d0": "0xfaa8bcb70f21ba77a0cf9b9107ce252d3f50ca848861142cf7d742a726e47357", + "0x0000000000000000000000000000000000000000000000000000000000000082": "0x22a30bf2012ceed28aa3aa486f96fa20c7ef3b683acf9539c0e174c18895eafc", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0xdd30caea5dcc438a2777a0b9146bc9af9c22e99d9e96ebf898da74a526408242", + "0x0000000000000000000000000000000000000000000000000000000000000091": "0x7214a42476c7dd271f7560bfd93f0247bd393ab519124ed8bf84eea0e0fe0517", + "0x0000000000000000000000000000000000000000000000000000000000000094": "0xb8c9137e8dba3a85580faf0c3ac1d96f117a5ca732d8b46fa362d4c9f23a0673", + "0x0000000000000000000000000000000000000000000000000000000000000095": "0xc7be106a6ed3db9a3d0db64d9382f01a60851f4a1e8a6ad32c85b6b3f2835701", + "0x00000000000000000000000000000000000000000000000000000000000000bd": "0xd5aff22d8bf203ebcf2069d7cad141565c7403929a9aab94a3906d8244b06e89", + "0x000000000000000000000000000000000000000000000000000000000000002f": "0x115ddd060d59119e40df332856d5581595b50798f9c077fc3a1f87c917f623f0", + "0x0000000000000000000000000000000000000000000000000000000000000048": "0x0da2eaa6ba903b780d2a01b42fcb98186aadc8fb8491d2132737f7a025f0ee96", + "0x00000000000000000000000000000000000000000000000000000000000000d6": "0xe9a3b4bab7793df1bf43d54ab2688b270a58a1498e64272555a38d1c8d631c02", + "0x0000000000000000000000000000000000000000000000000000000000000081": "0x5f70102735a1338d390629d58cad69212d32f3537135d68e46e4c5a7318ed21f", + "0x00000000000000000000000000000000000000000000000000000000000000cb": "0xd32757f7baba113846464b4918fbda7dda55c33839fc856e1f677e9de4a77fa6", + "0x00000000000000000000000000000000000000000000000000000000000000aa": "0xe30542462cbcf1a6e2359999692a218b71d33af5550ba65b518d07c83742d22f", + "0x00000000000000000000000000000000000000000000000000000000000000cf": "0xaf96a67cedd89b91fde57b45030c3e080b1868532b9599b9ca8c78e87431ef6d", + "0x00000000000000000000000000000000000000000000000000000000000000b9": "0x2a6d3219ac0baea5a58ffa93c6c7440607aa44268f0795fb2911ad8a917fc962", + "0x00000000000000000000000000000000000000000000000000000000000000d1": "0x655f9f76f5401f0b5f0d7c7e2eb23fe86625e43d5eff355bd1759e6bb6990945", + "0x0000000000000000000000000000000000000000000000000000000000000040": "0xe089a9dc1562032555161ad97c9a94ace92731dee4576b4770bc28b290b13cde", + "0x0000000000000000000000000000000000000000000000000000000000000088": "0x38bd7c0133acc8eb48170fbcb67877773117b56ad419e63748094fa31c0e00f3", + "0x00000000000000000000000000000000000000000000000000000000000000b5": "0x972b653a29cf3ce44fdedeb52546b5ffad8920a6ea6faebf03cf0c7df773706a", + "0x000000000000000000000000000000000000000000000000000000000000007d": "0x183409a85ba2ea00929ecdbfb4dfd2bb770ef94d3f77bd73546cc1c0be08e9a2", + "0x00000000000000000000000000000000000000000000000000000000000000a0": "0x06e7dcaa7ef589b0dc156a126befceae3ecac1beb27eec01cf413104ab8bc733", + "0x000000000000000000000000000000000000000000000000000000000000006c": "0x228acc21988e769d818e3d6f2b98a955f7b578e15156265f3d71d105f7f7cd5b", + "0x000000000000000000000000000000000000000000000000000000000000001f": "0xda4e28df7651210192187f0506070991076cd0eb305d9ecbf31db5e8e253ba60", + "0x0000000000000000000000000000000000000000000000000000000000000010": "0x249eeadfeaf1b9377bc3073fdebec01a62d6129ac4f9422ef22da1d34e94f46d", + "0x00000000000000000000000000000000000000000000000000000000000000ad": "0x8a61b27a2b9555205e441f3c40d90cdaded681746dc6c5d8eb3237c776ad995f", + "0x000000000000000000000000000000000000000000000000000000000000002b": "0x2c8ab59c245dffa14aa7eee3857535c8a52f755d25fbe51672858b6aaff0d964", + "0x0000000000000000000000000000000000000000000000000000000000000070": "0x36d4982def53266b853f42a53787b8e6ba563ffed08dc173319e61731c4220e2", + "0x00000000000000000000000000000000000000000000000000000000000000bb": "0x0822bed85127511f5bbc10552f073f6654de8a4d09a8a4cc8f385db6b56af19b", + "0x0000000000000000000000000000000000000000000000000000000000000073": "0x9e85a24f0ec034bdc910fadbe37babb614f10e33e4b079482ef4bf416be99fec", + "0x0000000000000000000000000000000000000000000000000000000000000011": "0x445cb1dfa0fc5ce7650c209d86b708eeb49e7d046bdbf3f05afe843325e25c84", + "0x0000000000000000000000000000000000000000000000000000000000000034": "0xfb06909c17491c31cf3ec19f16e90aafb8e790068a4f8a4a8824a9c121cc24c9", + "0x000000000000000000000000000000000000000000000000000000000000001d": "0x74764cc17c441f44cb74621d2d539c6009edc0d6a9479038eff234f4d25bb187", + "0x000000000000000000000000000000000000000000000000000000000000003d": "0x1615fd932914c94c18e86d3fb3101d93024fbb9f18c17baeefcba2e4ad5617a1", + "0x0000000000000000000000000000000000000000000000000000000000000062": "0x11e22668ffe1a3480264f0b09e9faf2b21b352b530f121add3acb4db04d8373b", + "0x0000000000000000000000000000000000000000000000000000000000000083": "0x6beb51bd9b29d90982ba15c42551249fb24bcd39cc86850e3618e5c983596efb", + "0x00000000000000000000000000000000000000000000000000000000000000bf": "0x41b26c889f560bef1b44a916913baccd1025750ab98176a7bf4ad234496ae50d", + "0x0000000000000000000000000000000000000000000000000000000000000054": "0x43c31e1ac8104002e0112b2b5eaca264b0712d32c9e62fd7f17143becbdb06b3", + "0x0000000000000000000000000000000000000000000000000000000000000055": "0x870823d9a3fd469ff2a1801484834dcc937ac4c68480039f2bc64edfd97af31b", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x5acc90a992cc6940c15cdd5358925ee5a84c050eee3324f9fd14531de50fbc2d", + "0x000000000000000000000000000000000000000000000000000000000000004b": "0x86dc78defd461ec71c0f53c4dde0163ce2c24c97f334641db9c66e124a2568a8", + "0x0000000000000000000000000000000000000000000000000000000000000030": "0x1c658c603b41f60bb776b38a94245b21f4b29dd05a7346d7951cb8165a874ec3", + "0x00000000000000000000000000000000000000000000000000000000000000a5": "0x08789c9d53ac81820bd24c80637261819925044a59ff1a4fd6644ade8a65a020", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0x46e4dd6ffce960b6c566ce7ba50d186bee8812791017ad428a2e56bdd91574f3", + "0x00000000000000000000000000000000000000000000000000000000000000ca": "0x2e7cc31d0743dbb759e48617ec5853a50d761df47d38793dcee46f8f0fe9d484", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0xd6cee7ac64bb887b717c6ac8ef7d6172b798c8f405358b385c74dde4dfb710d4", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0x21f4e1da20390fa8211874fc294aca0812e9e09ef43b90007b4ca12e92c16768", + "0x000000000000000000000000000000000000000000000000000000000000004e": "0x0d33b6f1ef524352f29ea2c07b310e9a2fae9b323f3160ed0572fe01652a5d2a", + "0x000000000000000000000000000000000000000000000000000000000000004a": "0xb74dfbac0f3b4f19356db707b1289a718c2c4c447771472e8480274c5e67106b", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0xb66b5b29d4fe0eedeae2bc80ea581ef078bfe5c3704bfeb0096755c21babc4a9", + "0x0000000000000000000000000000000000000000000000000000000000000031": "0x234096a8e0efe87e135093500e8005700eaf5514133350cb63481b359cedaa2b", + "0x0000000000000000000000000000000000000000000000000000000000000052": "0x46b6bb33138c87c97a70f3f1e64a9c3629f32edc04ee36d1aa83d8560f37f48e", + "0x000000000000000000000000000000000000000000000000000000000000000f": "0xe65437e6481901c48b2bb4082d65ab1da67481a3890b8436f152fc4440b29eb9", + "0x0000000000000000000000000000000000000000000000000000000000000075": "0x6f98039a12b7c357eb73469658cd71d8ce4f8260a9e89ee77074a4d53d0fba25", + "0x0000000000000000000000000000000000000000000000000000000000000076": "0x2b95704365b6dd60e3164537dd962d5f8dd5cbb96536b936dde1473d1f723a16", + "0x0000000000000000000000000000000000000000000000000000000000000077": "0x6b989ea6404124d62c0ee6ac076a9e66e0c8c36948af35956b1aa31ccb3a0711", + "0x0000000000000000000000000000000000000000000000000000000000000078": "0xa69d3dd2ad3a029e5c9f70865e5f4e2c5527785d361a3b9be1c0a19186ce1b4a", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0xe2d4228e7411f08d65447a58a9f6c60f9fb05df50f66b27cc5694566349f7eae", + "0x000000000000000000000000000000000000000000000000000000000000009b": "0xe98c8dff5435709241dbfa6e77ca209bc26d26e54f065b3b377b7d80d2b561db", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x4d6fb2cb26283c797c93ecf99befcda07dc17b99b0619da74a62f8954510da19", + "0x0000000000000000000000000000000000000000000000000000000000000060": "0x2245663f77bd572373201790d7a993c74d463a80a9c52394ca7912f77bb53f17", + "0x000000000000000000000000000000000000000000000000000000000000009c": "0xb5f062834ea288cf8b83d28200c922aad9f08f2c51d0db31bfa15696e4de6a35", + "0x000000000000000000000000000000000000000000000000000000000000009f": "0x111c39a80a73929c6975e150c41364a0f5f4dacd873fea644f1d5e2241c63c48", + "0x0000000000000000000000000000000000000000000000000000000000000080": "0xf5336ff0d8f290b7489e3388aa5874c24f1eaaeecb485c50074408e7a84a7407", + "0x0000000000000000000000000000000000000000000000000000000000000084": "0x868e2554528df0fc979c5bfb373b189ec81a12ef3de0ed3659503a37a62de392", + "0x0000000000000000000000000000000000000000000000000000000000000015": "0x13726aaa01b75f25df5ad62077f641d9649ecfb588a816ec381047d63903ca01", + "0x00000000000000000000000000000000000000000000000000000000000000be": "0xf66a8a775e380cb2fb617a90638fd98f350f5eff8cde9b11ea5f419f99448334", + "0x00000000000000000000000000000000000000000000000000000000000000c5": "0x7bd2996263c7f20b57044073da083a9413ac07898f96105d972726f778c4db1f", + "0x00000000000000000000000000000000000000000000000000000000000000b7": "0x027cf1237a25c23436b21204b0852905dc720179bf7a24fe2378ba0b83651b92", + "0x000000000000000000000000000000000000000000000000000000000000005e": "0x0f85ce6d20a4c7090c0d9dc2d962997ca9ddba8183ebe40161b7ed07328ccebf", + "0x00000000000000000000000000000000000000000000000000000000000000c7": "0xadd4638c1a2b828539a79b4ab9fe0d5041e82b130f091e19a5d61435cfaf614f", + "0x000000000000000000000000000000000000000000000000000000000000005c": "0x77ff1488505d2b4c972977aefdf5fbc727a846a9c9bed71d974e10f7c79a2aba", + "0x0000000000000000000000000000000000000000000000000000000000000037": "0xb839c423b055b43a51fd8b783c338fa3a647623a25e623fdcb4d43dde1d41505", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0xd91087547a22380dc03d314ee3c770c037aca7c59ad95d0d5d1d47fecae8e1f5", + "0x00000000000000000000000000000000000000000000000000000000000000b1": "0xe1947cda3662ec63da928afffc51b07163d956cef6b2af8695f5b8fca0494264", + "0x0000000000000000000000000000000000000000000000000000000000000090": "0xd8910769975877802cf2c6ecaf3ebf4e0149c75afc970a13318e714309cbfba9", + "0x00000000000000000000000000000000000000000000000000000000000000c0": "0xcc3b7e5fbe8ac89b32b135c4e0fa4a3bb9bb6444a23b504d7698b4dcfe2705ea", + "0x00000000000000000000000000000000000000000000000000000000000000c4": "0x90a4023629382f3eb483b49217cef7f6ad6e8796774c7da4fea94578a309b632", + "0x000000000000000000000000000000000000000000000000000000000000005d": "0x5633fa152ed7524b444a6d4d35742e5f5f405b0f7ba6821d95cf17f530d2d786", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x67192d853cf17656742f49af056be903d6daed481c338da0431f98fdcf3c9045", + "0x0000000000000000000000000000000000000000000000000000000000000066": "0x6e96859c7abdaabf31f3eae3406a42ac1372ef457770254a66da210c41900688", + "0x00000000000000000000000000000000000000000000000000000000000000a1": "0x16f90b1818ea98911df1f3943b14f5f4fa8438ea73c85bab944506fcdb2b31bd", + "0x00000000000000000000000000000000000000000000000000000000000000ac": "0xc2012a9853e38fd7588924a0de4f59e0c21e7bfbbd5eb99f7226d614d9b0faed", + "0x00000000000000000000000000000000000000000000000000000000000000b4": "0xed737243c5fb5fd765cdbfa909d015d0fa368937e4dfe4666555af7168d07a71", + "0x00000000000000000000000000000000000000000000000000000000000000d4": "0x464649f28f75e3a054422db64ed2058dd10818fe72a7fcde129c26c1b2fef70a", + "0x000000000000000000000000000000000000000000000000000000000000006b": "0x5121114d681ea5d701e36015b8a29239b94457753f34fd48d7acceba0eacaa88", + "0x00000000000000000000000000000000000000000000000000000000000000cd": "0x62005d3cf05f674a5af0031e63cbcdc6745f1eb9efa7fe2651ce8b76983a587e", + "0x000000000000000000000000000000000000000000000000000000000000001e": "0x4ee0983481f4b51df815e0691c6b246a5f92ddb0b8ba71c651d1f4ba5d09b655", + "0x000000000000000000000000000000000000000000000000000000000000003b": "0x1f8f388d4a821731d32111f2bcb4392d52b5d1c9eb30dd3122174253a3300113", + "0x000000000000000000000000000000000000000000000000000000000000005b": "0xea24f1e7ee68b69790160f52b0b0ee4d74c96977e4e1fb0f161c51881b1f2dd8", + "0x0000000000000000000000000000000000000000000000000000000000000074": "0x83988cfcd09a6ee4502011defb714920a1accbc65c5d203b9cea4481648216bc", + "0x0000000000000000000000000000000000000000000000000000000000000098": "0xbb932ad265372ea06f7adfb003e8d04a9366b3ba09c81cec5a333eda98123fda", + "0x00000000000000000000000000000000000000000000000000000000000000d5": "0xdc41ca6d4f256fd9615448888ea7e3373356ff566107a17edf237651e67c728c", + "0x00000000000000000000000000000000000000000000000000000000000000c3": "0x0452ac2ebad96b5c4395e2e38fb34860924eadd2675339024cc787cceef63628", + "0x0000000000000000000000000000000000000000000000000000000000000044": "0x1334a654c84372e17b20a3520f4c49fd5b15d5a762a77ee800a0ea6efa0ba3ae", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x9549ce625e9799c16b64582cd71fd6866ed17bd696782df1df527fe81d66d497", + "0x000000000000000000000000000000000000000000000000000000000000002d": "0x1e1d1dfe0c49e05d6497cfcb3fcf516269150ebe189367f23711e3edbd4dd9a6", + "0x000000000000000000000000000000000000000000000000000000000000003e": "0xcf09cdde155a00be6f1062714cae151c181a80abc207e6b0b18a5f4a5b3a2158", + "0x0000000000000000000000000000000000000000000000000000000000000042": "0x58cdde38cf8cc120c03a0de0ca5869a0fb21329dddc3f62f062d194b39896adb", + "0x0000000000000000000000000000000000000000000000000000000000000047": "0x981e3f829c4e3f0d9de8f75e2c277443a4c53ab76895b5edc9f318c007ed9d9d", + "0x0000000000000000000000000000000000000000000000000000000000000064": "0xa5ff381ae01b26be94c04bb00905d9fcdb4d7116632c44b1cbff0ce9b865b55e", + "0x0000000000000000000000000000000000000000000000000000000000000012": "0xe4ab119eda383dfa3aa825650e6eac8b95441d84f4dff61e7bbdc290c1984d71", + "0x0000000000000000000000000000000000000000000000000000000000000038": "0x7c24e0ba79c072b08490b79115baf787e38b8b8ec31b27db88449f240ceda1df", + "0x000000000000000000000000000000000000000000000000000000000000005f": "0x1ed673d1199825bbb4de8eef47d008528c39bf4e87aebb1cafaf35f3e3c76f7f", + "0x0000000000000000000000000000000000000000000000000000000000000021": "0x027e16128958525d5e64c82f15edab291f2bf84db692f2508cfdbaeeceab9483", + "0x000000000000000000000000000000000000000000000000000000000000006d": "0x32bde6c20210b297caf6f7e468f4f77c917d08069326aeb5756107b90c12bcfb", + "0x0000000000000000000000000000000000000000000000000000000000000072": "0xb5d84526dbdf42e0770c91bb96c72b701d5f54a40b1540b2da99d28e0810c816", + "0x000000000000000000000000000000000000000000000000000000000000007b": "0xf8a596a76addd1382820fab636cbcb5d467da2ddc6bab9636a4c253c9ab18817", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x8a8df2b4ae279b1460561fb170fc155d57d43ccd3c29517811fce12e00b636d7", + "0x000000000000000000000000000000000000000000000000000000000000007c": "0x5705dbc77bdede62b6ea30a1683cda12660aed7f930da9e4c63bbf3b752dbb15", + "0x000000000000000000000000000000000000000000000000000000000000007e": "0x112d33fae3b4484609a9bc226e769d3d0fd7f6231a5685fd6a8d79571fd41547", + "0x0000000000000000000000000000000000000000000000000000000000000079": "0xecd2cc174573342d1a1072950cf67e3bccb38daa9d945efacb48b56ca925293e", + "0x000000000000000000000000000000000000000000000000000000000000004f": "0xb568fb236d5443d7d57ddb7c39a4228693fe1dcd167478f7b91018ff4757b8d8", + "0x000000000000000000000000000000000000000000000000000000000000008f": "0xe32d5e89c7948e9de7cde864be53cee9ff560467665d0fc14e19b14d19627be4", + "0x0000000000000000000000000000000000000000000000000000000000000092": "0x34d5730c0a8e7120757fd2eaeee86b431fce3e41850dd52a128af57794bb76cf", + "0x00000000000000000000000000000000000000000000000000000000000000a9": "0x854e13a2c53d399fd77c6df8b21a83a3ab001e291a9f2d650fb2a57b63f7a81d", + "0x000000000000000000000000000000000000000000000000000000000000004d": "0xd85b91a187cef79d4b11412e81cba297a6623a336cef32f91ee38d188ba924a4", + "0x0000000000000000000000000000000000000000000000000000000000000045": "0x0610b55a317c32b9656d60263d3f504135de162f95f785486e9feee5e1131007", + "0x000000000000000000000000000000000000000000000000000000000000008c": "0xfc6cdd4b0533614f036fec7ee6777169fea2fbe880431553d800826802726264", + "0x00000000000000000000000000000000000000000000000000000000000000d3": "0x2b31cd53a563aae5085b5eca7bff458673deb378af4897d03cba2434aef486d0", + "0x0000000000000000000000000000000000000000000000000000000000000049": "0x873b5baf23f1c4fc68a98056ea0d202ea69c92472592faeebd6df9f2437a93fd", + "0x0000000000000000000000000000000000000000000000000000000000000014": "0x4fd2dd5ec23b7042edabef1afed9794a52983adf176294a9e7489ded282c274f", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x6da9631a3e5c5fe4893801c6a6127d298e19d556c9e84077babee181db2a0732", + "0x000000000000000000000000000000000000000000000000000000000000006e": "0xe4a6c3f2d40877700371de9850ec9a5bae615752e7a12d3f1c68101b1f2b69fa", + "0x000000000000000000000000000000000000000000000000000000000000008a": "0xb7f5b792740876c84443025de54d95a9c792ed87dce0dd8c66895918ed521127", + "0x0000000000000000000000000000000000000000000000000000000000000063": "0x1b4c5597983d779b3aa13441269cfe7c03859ea23439333b4107aad560db32e2", + "0x0000000000000000000000000000000000000000000000000000000000000020": "0x426cae3901c65e06b6ba737ff3edbd3f0c19be3cc47ba73feece384ba5245bdb", + "0x000000000000000000000000000000000000000000000000000000000000002e": "0xc130369b221e423cb9a83d2aed566ade438d01bf317338b645b89495670b7d83", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x73dea63ed9d2f109d9362ae325b1cda596a87cb018c3850c90a90d16a6d854f0", + "0x000000000000000000000000000000000000000000000000000000000000001a": "0x41864b2285dfc224b72903379e523c5513c237da25f9a1a6575074560a44015e", + "0x000000000000000000000000000000000000000000000000000000000000007f": "0xf274c635dbfc08c852552f5be4873308ee1a7bae03c9ec2ba9f1eb04a18841ad", + "0x0000000000000000000000000000000000000000000000000000000000000099": "0x86cbc5dac52c755e7c8e9f41049a005fdba6b257fd5284caac973bf16e07ee8e", + "0x000000000000000000000000000000000000000000000000000000000000009e": "0x69234238bb67cf4aa4c2cab1b792c9d1e8fd1f0561a5bf74d5dd60b1600bf71f", + "0x00000000000000000000000000000000000000000000000000000000000000a2": "0x808e1b3f874e6eb522070532a8e695e9e669a8b4b8d222450747809214754ad1", + "0x00000000000000000000000000000000000000000000000000000000000000b8": "0xe505f4d42f1141e459a01a9917eed3e77bcfaf4bb4a812c0be9b810123262819", + "0x0000000000000000000000000000000000000000000000000000000000000023": "0x07917ba58ea76642236d490be12720746c964f283af99aba9e955a8a5312a64f", + "0x000000000000000000000000000000000000000000000000000000000000001b": "0x7e5b02df9115a74b115b51196b25d940eea8617152ece9528871a4708604e9e4", + "0x000000000000000000000000000000000000000000000000000000000000006f": "0xe8e88db07bf186a3e7f87599a02115c2cc0ec3a6f7f447bbfaf09d4d7af6d8e5", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0x025636bd96d40c6aa67710e19e8a05d833d0aa4e5235b2bb7e1dbffcf7343b0e", + "0x0000000000000000000000000000000000000000000000000000000000000071": "0x19c296dce22cca7f1624b8d20e8f0303fcf144edcb1cdef4092c6b97b868b47f", + "0x00000000000000000000000000000000000000000000000000000000000000c1": "0xc44ef20cb2895d57c15060f9b8ceb9ecf5b7649e50a43a0ba092b2b92d64603d", + "0x0000000000000000000000000000000000000000000000000000000000000056": "0xdd8088febf09a6d1b75f12ff94c9888e1df5d18700e6fb5c312a7e672c628c02", + "0x0000000000000000000000000000000000000000000000000000000000000069": "0x4b46d9a0f93bb493c43ca9fc62c59b70add01afbbc8d59694b22804390229ddf", + "0x00000000000000000000000000000000000000000000000000000000000000ae": "0xaf08191de42b019b171a4813effa9355d7aace38a8b17c4d58251f4e91ed644b", + "0x000000000000000000000000000000000000000000000000000000000000002c": "0xc7eadbf551f06ddf71bf98f5a8edaaa266455eb03a820e5fc9bda5199372158c", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x5e05870de7082f0332ea773d63924bdbe1035244634fa0635206ab19d4093e93", + "0x0000000000000000000000000000000000000000000000000000000000000016": "0x98967d6271943dfafed255344c3bea1cd1e2b92da57a0bbe5d86fbe94a44f4ae", + "0x0000000000000000000000000000000000000000000000000000000000000024": "0x1bd0f7e1a79fd008e2d3572f752e1f0821f9b0837012cb2432eaddb61e831cc8", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0xcdfe8157d5f7532d5efcc2e7e15203070f0a5452736756eb31e84e09147b8165", + "0x0000000000000000000000000000000000000000000000000000000000000096": "0x137b010752b68570377a0fb62b6f7067a0a30e2bfb3febca9f0be5a382402724", + "0x00000000000000000000000000000000000000000000000000000000000000b0": "0x21fb54a874dfd7bbed8dd9d7632845a48f8fd85d4940f59e23b1c4223a23db8b", + "0x00000000000000000000000000000000000000000000000000000000000000ba": "0xf499b7be1b873b0a9f55d8984059796d86bb74161eb2ee9e14a5c96904b8eca4", + "0x000000000000000000000000000000000000000000000000000000000000004c": "0xb5e6805c3196c5e1f792c6d48226b376dd67a98955b8f32c053dbb9a4fbcbe4e", + "0x00000000000000000000000000000000000000000000000000000000000000bc": "0x354ff58a377d0dc14d91680f9fe849a47f0fcfae02213e363fcbf3d6622a1af7", + "0x0000000000000000000000000000000000000000000000000000000000000041": "0xef225ed580517e41e989ad7a88952262e8a83564a9bdcabdfbbcefcfd0cb0d40", + "0x0000000000000000000000000000000000000000000000000000000000000025": "0xbaccaa2c7f78e2d3833b411c2ed26a1a4262aa58b3d1c4f40b8cdbd04d353bb9", + "0x00000000000000000000000000000000000000000000000000000000000000b6": "0xaaddcfb53ede306858e35c2de8adac247fd8958583f4cd552d5593f2f58db051", + "0x000000000000000000000000000000000000000000000000000000000000006a": "0xc3ee2e53cc74f1d75d6f2ce01a776620dc7528d9f75d18ef65e7752e455b7aaf", + "0x00000000000000000000000000000000000000000000000000000000000000d7": "0x8a0808c1d5ef26a5cfc1182c5c068226554e6d4575679c1ed5614c73097ab421", + "0x000000000000000000000000000000000000000000000000000000000000008b": "0xf87fc2f45b00a87a7b393d8b7524de3c8fc6336f7798823c4d2bfed5fa9c77d0", + "0x0000000000000000000000000000000000000000000000000000000000000051": "0xacb3648841d65676f68313cef5ee36827da7c8112f911688a7d55949d504e388", + "0x0000000000000000000000000000000000000000000000000000000000000085": "0x758270ca1db65d6c36ea2ef36357195950b78c0136ea558c986d36527fa913db" + } + }, + "21": { + "address": "0x0000BBdDc7CE488642fb579F8B00f3a590007251", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd00", + "storage": {} + }, + "20": { + "address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", + "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806346fbf68e1461004e5780638568520614610085578063ce5484281461009a578063eab66d7a146100ad575b5f5ffd5b61007061005c36600461027a565b5f6020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009861009336600461029a565b6100d8565b005b6100986100a836600461027a565b610111565b6001546100c0906001600160a01b031681565b6040516001600160a01b03909116815260200161007c565b6001546001600160a01b031633146101035760405163794821ff60e01b815260040160405180910390fd5b61010d8282610148565b5050565b6001546001600160a01b0316331461013c5760405163794821ff60e01b815260040160405180910390fd5b610145816101cf565b50565b6001600160a01b03821661016f576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101f6576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b0381168114610275575f5ffd5b919050565b5f6020828403121561028a575f5ffd5b6102938261025f565b9392505050565b5f5f604083850312156102ab575f5ffd5b6102b48361025f565b9150602083013580151581146102c8575f5ffd5b80915050925092905056fea26469706673582212201a99f894857b167b091c80bd2c73660fbd5db1980dc2aba8a60483cf6658603864736f6c634300081c0033000000000000000000", + "storage": { + "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc" } }, "27": { "address": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", "storage": { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000322813fd9a801c5507c9de605d63cea4f2ce6c44", "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000322813fd9a801c5507c9de605d63cea4f2ce6c44" + } + }, + "30": { + "address": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122025d3647015ce5fbf6598734d2f8409af4720f6e0c4814337f198d40dfa394c4664736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0x00000000000000000000000014dc79964da2c08b23698b3d3cc7ca32193d9955", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b570", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", + "0x0000000000000000000000000000000000000000000000000000000000000098": "0x0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" } } } diff --git a/contracts/script/deploy/DeployBase.s.sol b/contracts/script/deploy/DeployBase.s.sol index df441b2e..2c112a9e 100644 --- a/contracts/script/deploy/DeployBase.s.sol +++ b/contracts/script/deploy/DeployBase.s.sol @@ -39,9 +39,6 @@ import {IETHPOSDeposit} from "eigenlayer-contracts/src/contracts/interfaces/IETH // DataHaven imports import {DataHavenServiceManager} from "../../src/DataHavenServiceManager.sol"; -import {MerkleUtils} from "../../src/libraries/MerkleUtils.sol"; -import {RewardsRegistry} from "../../src/middleware/RewardsRegistry.sol"; -import {IRewardsRegistry} from "../../src/interfaces/IRewardsRegistry.sol"; import {ValidatorsUtils} from "../../script/utils/ValidatorsUtils.sol"; // Shared structs @@ -132,9 +129,7 @@ abstract contract DeployBase is Script, DeployParams, Accounts { // Deploy DataHaven contracts (same for both modes) ( DataHavenServiceManager serviceManager, - DataHavenServiceManager serviceManagerImplementation, - RewardsRegistry rewardsRegistry, - bytes4 updateRewardsMerkleRootSelector + DataHavenServiceManager serviceManagerImplementation ) = _deployDataHavenContracts(avsConfig, proxyAdmin, gateway); Logging.logFooter(); @@ -142,14 +137,7 @@ abstract contract DeployBase is Script, DeployParams, Accounts { // Final configuration (same for both modes) Logging.logHeader("FINAL CONFIGURATION"); - if (_txExecutionEnabled) { - vm.broadcast(_avsOwnerPrivateKey); - serviceManager.setRewardsAgent(0, address(rewardsAgentAddress)); - Logging.logStep("Agent set in RewardsRegistry"); - } else { - Logging.logInfo("TX EXECUTION DISABLED: call setRewardsAgent via multisig"); - } - Logging.logContractDeployed("Agent Address", rewardsAgentAddress); + Logging.logContractDeployed("Rewards Agent Address", rewardsAgentAddress); Logging.logFooter(); _logProgress(); @@ -160,15 +148,10 @@ abstract contract DeployBase is Script, DeployParams, Accounts { gateway, serviceManager, serviceManagerImplementation, - rewardsRegistry, rewardsAgentAddress ); - _outputRewardsInfo( - rewardsAgentAddress, - snowbridgeConfig.rewardsMessageOrigin, - updateRewardsMerkleRootSelector - ); + _outputRewardsAgentInfo(rewardsAgentAddress, snowbridgeConfig.rewardsMessageOrigin); } /** @@ -253,7 +236,7 @@ abstract contract DeployBase is Script, DeployParams, Accounts { AVSConfig memory avsConfig, ProxyAdmin proxyAdmin, IGatewayV2 gateway - ) internal returns (DataHavenServiceManager, DataHavenServiceManager, RewardsRegistry, bytes4) { + ) internal returns (DataHavenServiceManager, DataHavenServiceManager) { Logging.logHeader("DATAHAVEN CUSTOM CONTRACTS DEPLOYMENT"); // Deploy the Service Manager @@ -278,15 +261,6 @@ abstract contract DeployBase is Script, DeployParams, Accounts { _createServiceManagerProxy(serviceManagerImplementation, proxyAdmin, initParams); Logging.logContractDeployed("ServiceManager Proxy", address(serviceManager)); - // Deploy RewardsRegistry - vm.broadcast(_deployerPrivateKey); - RewardsRegistry rewardsRegistry = new RewardsRegistry( - address(serviceManager), - address(0) // Will be set to the Agent address after creation - ); - Logging.logContractDeployed("RewardsRegistry", address(rewardsRegistry)); - bytes4 updateRewardsMerkleRootSelector = IRewardsRegistry.updateRewardsMerkleRoot.selector; - Logging.logSection("Configuring Service Manager"); // Register the DataHaven service in the AllocationManager @@ -298,22 +272,7 @@ abstract contract DeployBase is Script, DeployParams, Accounts { Logging.logInfo("TX EXECUTION DISABLED: call updateAVSMetadataURI via multisig"); } - // Set the RewardsRegistry in the ServiceManager - uint32 validatorsSetId = serviceManager.VALIDATORS_SET_ID(); - if (_txExecutionEnabled) { - vm.broadcast(_avsOwnerPrivateKey); - serviceManager.setRewardsRegistry(validatorsSetId, rewardsRegistry); - Logging.logStep("RewardsRegistry set in ServiceManager"); - } else { - Logging.logInfo("TX EXECUTION DISABLED: call setRewardsRegistry via multisig"); - } - - return ( - serviceManager, - serviceManagerImplementation, - rewardsRegistry, - updateRewardsMerkleRootSelector - ); + return (serviceManager, serviceManagerImplementation); } /** @@ -334,24 +293,19 @@ abstract contract DeployBase is Script, DeployParams, Accounts { IGatewayV2 gateway, DataHavenServiceManager serviceManager, DataHavenServiceManager serviceManagerImplementation, - RewardsRegistry rewardsRegistry, address rewardsAgent ) internal virtual; /** - * @notice Output rewards info (shared across all deployment types) + * @notice Output rewards agent info (shared across all deployment types) */ - function _outputRewardsInfo( + function _outputRewardsAgentInfo( address rewardsAgent, - bytes32 rewardsAgentOrigin, - bytes4 updateRewardsMerkleRootSelector + bytes32 rewardsAgentOrigin ) internal { Logging.logHeader("REWARDS AGENT INFO"); Logging.logContractDeployed("RewardsAgent", rewardsAgent); Logging.logAgentOrigin("RewardsAgentOrigin", vm.toString(rewardsAgentOrigin)); - Logging.logFunctionSelector( - "updateRewardsMerkleRootSelector", vm.toString(updateRewardsMerkleRootSelector) - ); Logging.logFooter(); // Write to deployment file for future reference @@ -365,33 +319,11 @@ abstract contract DeployBase is Script, DeployParams, Accounts { // Create JSON with rewards info string memory json = "{"; json = string.concat(json, '"RewardsAgent": "', vm.toString(rewardsAgent), '",'); - json = string.concat(json, '"RewardsAgentOrigin": "', vm.toString(rewardsAgentOrigin), '",'); - json = string.concat( - json, - '"updateRewardsMerkleRootSelector": "', - _trimToBytes4(vm.toString(updateRewardsMerkleRootSelector)), - '"' - ); + json = string.concat(json, '"RewardsAgentOrigin": "', vm.toString(rewardsAgentOrigin), '"'); json = string.concat(json, "}"); // Write to file vm.writeFile(rewardsInfoPath, json); Logging.logInfo(string.concat("Rewards info saved to: ", rewardsInfoPath)); } - - /** - * @notice Helper function to trim a padded hex string to only the first 4 bytes - */ - function _trimToBytes4( - string memory paddedHex - ) internal pure returns (string memory) { - bytes memory data = bytes(paddedHex); - bytes memory trimmed = new bytes(10); // 0x + 8 hex chars = 10 total chars - - for (uint256 i = 0; i < 10; i++) { - trimmed[i] = data[i]; - } - - return string(trimmed); - } } diff --git a/contracts/script/deploy/DeployLocal.s.sol b/contracts/script/deploy/DeployLocal.s.sol index 755412a3..d5bf3649 100644 --- a/contracts/script/deploy/DeployLocal.s.sol +++ b/contracts/script/deploy/DeployLocal.s.sol @@ -24,9 +24,6 @@ import {OperatingMode} from "snowbridge/src/types/Common.sol"; import {ud60x18} from "snowbridge/lib/prb-math/src/UD60x18.sol"; import {BeefyClient} from "snowbridge/src/BeefyClient.sol"; -// DataHaven imports for function signatures -import {RewardsRegistry} from "../../src/middleware/RewardsRegistry.sol"; - // Additional imports specific to local deployment import { ERC20PresetFixedSupply @@ -70,8 +67,6 @@ import { import {EmptyContract} from "eigenlayer-contracts/src/test/mocks/EmptyContract.sol"; import {DataHavenServiceManager} from "../../src/DataHavenServiceManager.sol"; -import {RewardsRegistry} from "../../src/middleware/RewardsRegistry.sol"; -import {IRewardsRegistry} from "../../src/interfaces/IRewardsRegistry.sol"; /** * @title DeployLocal @@ -207,7 +202,6 @@ contract DeployLocal is DeployBase { IGatewayV2 gateway, DataHavenServiceManager serviceManager, DataHavenServiceManager serviceManagerImplementation, - RewardsRegistry rewardsRegistry, address rewardsAgent ) internal override { Logging.logHeader("DEPLOYMENT SUMMARY"); @@ -220,7 +214,6 @@ contract DeployLocal is DeployBase { Logging.logSection("DataHaven Contracts"); Logging.logContractDeployed("ServiceManager", address(serviceManager)); - Logging.logContractDeployed("RewardsRegistry", address(rewardsRegistry)); Logging.logSection("EigenLayer Core Contracts"); Logging.logContractDeployed("DelegationManager", address(delegation)); @@ -270,9 +263,6 @@ contract DeployLocal is DeployBase { vm.toString(address(serviceManagerImplementation)), '",' ); - json = string.concat( - json, '"RewardsRegistry": "', vm.toString(address(rewardsRegistry)), '",' - ); json = string.concat(json, '"RewardsAgent": "', vm.toString(rewardsAgent), '",'); // EigenLayer contracts diff --git a/contracts/script/deploy/DeployTestnet.s.sol b/contracts/script/deploy/DeployTestnet.s.sol index 037af8fc..21d64399 100644 --- a/contracts/script/deploy/DeployTestnet.s.sol +++ b/contracts/script/deploy/DeployTestnet.s.sol @@ -12,9 +12,6 @@ import {IGatewayV2} from "snowbridge/src/v2/IGateway.sol"; // Logging import import {Logging} from "../utils/Logging.sol"; -// DataHaven imports for function signatures -import {RewardsRegistry} from "../../src/middleware/RewardsRegistry.sol"; - // EigenLayer core contract imports for type casting import {AllocationManager} from "eigenlayer-contracts/src/contracts/core/AllocationManager.sol"; import {AVSDirectory} from "eigenlayer-contracts/src/contracts/core/AVSDirectory.sol"; @@ -139,7 +136,6 @@ contract DeployTestnet is DeployBase { IGatewayV2 gateway, DataHavenServiceManager serviceManager, DataHavenServiceManager serviceManagerImplementation, - RewardsRegistry rewardsRegistry, address rewardsAgent ) internal override { Logging.logHeader("DEPLOYMENT SUMMARY"); @@ -152,7 +148,6 @@ contract DeployTestnet is DeployBase { Logging.logSection("DataHaven Contracts"); Logging.logContractDeployed("ServiceManager", address(serviceManager)); - Logging.logContractDeployed("RewardsRegistry", address(rewardsRegistry)); Logging.logSection( string.concat("EigenLayer Core Contracts (Existing on ", _getDeploymentMode(), ")") @@ -190,9 +185,6 @@ contract DeployTestnet is DeployBase { vm.toString(address(serviceManagerImplementation)), '",' ); - json = string.concat( - json, '"RewardsRegistry": "', vm.toString(address(rewardsRegistry)), '",' - ); json = string.concat(json, '"RewardsAgent": "', vm.toString(rewardsAgent), '",'); // EigenLayer contracts (existing on testnet) diff --git a/contracts/script/utils/DHScriptStorage.s.sol b/contracts/script/utils/DHScriptStorage.s.sol index ee2a1932..b86bf608 100644 --- a/contracts/script/utils/DHScriptStorage.s.sol +++ b/contracts/script/utils/DHScriptStorage.s.sol @@ -6,7 +6,6 @@ import {Script} from "forge-std/Script.sol"; // DataHaven imports import {DataHavenServiceManager} from "../../src/DataHavenServiceManager.sol"; -import {RewardsRegistry} from "../../src/middleware/RewardsRegistry.sol"; /** * @title DHScriptStorage @@ -15,7 +14,6 @@ import {RewardsRegistry} from "../../src/middleware/RewardsRegistry.sol"; contract DHScriptStorage is Script { // DataHaven Contract declarations DataHavenServiceManager public serviceManager; - RewardsRegistry public rewardsRegistry; /** * @notice Loads the DataHaven contracts from the deployment file. @@ -30,7 +28,5 @@ contract DHScriptStorage is Script { // Store the contract addresses serviceManager = DataHavenServiceManager(vm.parseJsonAddress(deploymentFile, ".ServiceManager")); - rewardsRegistry = - RewardsRegistry(payable(vm.parseJsonAddress(deploymentFile, ".RewardsRegistry"))); } } diff --git a/contracts/src/interfaces/IRewardsRegistry.sol b/contracts/src/interfaces/IRewardsRegistry.sol deleted file mode 100644 index 07fee9e6..00000000 --- a/contracts/src/interfaces/IRewardsRegistry.sol +++ /dev/null @@ -1,182 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity >=0.5.0; - -/** - * @title Interface for errors in the RewardsRegistry contract - */ -interface IRewardsRegistryErrors { - /// @notice Thrown when a function is called by an address that is not the AVS. - error OnlyAVS(); - /// @notice Thrown when a function is called by an address that is not the RewardsAgent. - error OnlyRewardsAgent(); - /// @notice Thrown when a provided merkle proof is invalid. - error InvalidMerkleProof(); - /// @notice Thrown when rewards transfer fails. - error RewardsTransferFailed(); - /// @notice Thrown when the rewards merkle root is not set. - error RewardsMerkleRootNotSet(); - /// @notice Thrown when trying to access a merkle root index that doesn't exist. - error InvalidMerkleRootIndex(); - /// @notice Thrown when trying to claim rewards for a root index that has already been claimed. - error RewardsAlreadyClaimedForIndex(); - /// @notice Thrown when the arrays provided to the batch claim function have mismatched lengths. - error ArrayLengthMismatch(); -} - -/** - * @title Interface for events in the RewardsRegistry contract - */ -interface IRewardsRegistryEvents { - /** - * @notice Emitted when a new merkle root is set - * @param oldRoot The previous merkle root - * @param newRoot The new merkle root - * @param newRootIndex The index of the new root in the history - */ - event RewardsMerkleRootUpdated(bytes32 oldRoot, bytes32 indexed newRoot, uint256 newRootIndex); - - /** - * @notice Emitted when rewards are claimed for a specific root index - * @param operatorAddress Address of the operator that received the rewards - * @param rootIndex Index of the merkle root that the operator claimed rewards from - * @param points Points earned by the operator - * @param rewardsAmount Amount of rewards transferred - */ - event RewardsClaimedForIndex( - address indexed operatorAddress, - uint256 indexed rootIndex, - uint256 points, - uint256 rewardsAmount - ); - - /** - * @notice Emitted when rewards are claimed for multiple root indices in a batch - * @param operatorAddress Address of the operator that received the rewards - * @param rootIndices Array of merkle root indices that the operator claimed rewards from - * @param points Array of points earned by the operator for each root index - * @param totalRewardsAmount Total amount of rewards transferred to the operator - */ - event RewardsBatchClaimedForIndices( - address indexed operatorAddress, - uint256[] rootIndices, - uint256[] points, - uint256 totalRewardsAmount - ); -} - -/** - * @title Interface for the RewardsRegistry contract - * @notice Contract for managing operator rewards through a Merkle root verification process - */ -interface IRewardsRegistry is IRewardsRegistryErrors, IRewardsRegistryEvents { - /** - * @notice Update the rewards merkle root - * @param newMerkleRoot New merkle root to be set - * @dev Only callable by the rewards agent - */ - function updateRewardsMerkleRoot( - bytes32 newMerkleRoot - ) external; - - /** - * @notice Claim rewards for an operator from a specific merkle root index using Substrate/Snowbridge positional Merkle proofs. - * @param operatorAddress Address of the operator to receive rewards - * @param rootIndex Index of the merkle root to claim from - * @param operatorPoints Points earned by the operator - * @param numberOfLeaves The total number of leaves in the Merkle tree - * @param leafIndex The index of the operator's leaf in the Merkle tree - * @param proof Positional Merkle proof (from leaf to root) - * @dev Only callable by the AVS (Service Manager) - */ - function claimRewards( - address operatorAddress, - uint256 rootIndex, - uint256 operatorPoints, - uint256 numberOfLeaves, - uint256 leafIndex, - bytes32[] calldata proof - ) external; - - /** - * @notice Claim rewards for an operator from the latest merkle root using Substrate/Snowbridge positional Merkle proofs. - * @param operatorAddress Address of the operator to receive rewards - * @param operatorPoints Points earned by the operator - * @param numberOfLeaves The total number of leaves in the Merkle tree - * @param leafIndex The index of the operator's leaf in the Merkle tree - * @param proof Positional Merkle proof (from leaf to root) - * @dev Only callable by the AVS (Service Manager) - */ - function claimLatestRewards( - address operatorAddress, - uint256 operatorPoints, - uint256 numberOfLeaves, - uint256 leafIndex, - bytes32[] calldata proof - ) external; - - /** - * @notice Claim rewards for an operator from multiple merkle root indices using Substrate/Snowbridge positional Merkle proofs. - * @param operatorAddress Address of the operator to receive rewards - * @param rootIndices Array of merkle root indices to claim from - * @param operatorPoints Array of points earned by the operator for each root - * @param numberOfLeaves Array with the total number of leaves for each Merkle tree - * @param leafIndices Array of leaf indices for the operator in each Merkle tree - * @param proofs Array of positional Merkle proofs for each claim - * @dev Only callable by the AVS (Service Manager) - */ - function claimRewardsBatch( - address operatorAddress, - uint256[] calldata rootIndices, - uint256[] calldata operatorPoints, - uint256[] calldata numberOfLeaves, - uint256[] calldata leafIndices, - bytes32[][] calldata proofs - ) external; - - /** - * @notice Sets the rewards agent address in the RewardsRegistry contract - * @param rewardsAgent New rewards agent address - * @dev Only callable by the AVS (Service Manager) - */ - function setRewardsAgent( - address rewardsAgent - ) external; - - /** - * @notice Get the merkle root at a specific index - * @param index Index of the merkle root to retrieve - * @return The merkle root at the specified index - */ - function getMerkleRootByIndex( - uint256 index - ) external view returns (bytes32); - - /** - * @notice Get the latest merkle root index - * @return The index of the latest merkle root (returns 0 if no roots exist) - */ - function getLatestMerkleRootIndex() external view returns (uint256); - - /** - * @notice Get the latest merkle root - * @return The latest merkle root (returns bytes32(0) if no roots exist) - */ - function getLatestMerkleRoot() external view returns (bytes32); - - /** - * @notice Get the total number of merkle roots in history - * @return The total count of merkle roots - */ - function getMerkleRootHistoryLength() external view returns (uint256); - - /** - * @notice Check if an operator has claimed rewards for a specific root index - * @param operatorAddress Address of the operator - * @param rootIndex Index of the merkle root to check - * @return True if the operator has claimed rewards for this root index, false otherwise - */ - function hasClaimedByIndex( - address operatorAddress, - uint256 rootIndex - ) external view returns (bool); -} diff --git a/contracts/src/interfaces/IServiceManager.sol b/contracts/src/interfaces/IServiceManager.sol index 38e37fe4..b92cd4dc 100644 --- a/contracts/src/interfaces/IServiceManager.sol +++ b/contracts/src/interfaces/IServiceManager.sol @@ -13,7 +13,6 @@ import { } from "eigenlayer-contracts/src/contracts/interfaces/IAllocationManager.sol"; import {IStrategy} from "eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol"; import {IAVSRegistrar} from "eigenlayer-contracts/src/contracts/interfaces/IAVSRegistrar.sol"; -import {IRewardsRegistry} from "./IRewardsRegistry.sol"; interface IServiceManagerErrors { /// @notice Thrown when a function is called by an address that is not the RegistryCoordinator. @@ -24,8 +23,6 @@ interface IServiceManagerErrors { error OnlyStakeRegistry(); /// @notice Thrown when a slashing proposal delay has not been met yet. error DelayPeriodNotPassed(); - /// @notice Thrown when the operator set does not have a rewards registry set. - error NoRewardsRegistryForOperatorSet(); /// @notice Thrown when the operator is not part of the specified operator set. error OperatorNotInOperatorSet(); } @@ -37,13 +34,6 @@ interface IServiceManagerEvents { * @param newRewardsInitiator The new rewards initiator address. */ event RewardsInitiatorUpdated(address prevRewardsInitiator, address newRewardsInitiator); - - /** - * @notice Emitted when a rewards registry is set for an operator set. - * @param operatorSetId The ID of the operator set. - * @param rewardsRegistry The address of the rewards registry. - */ - event RewardsRegistrySet(uint32 indexed operatorSetId, address indexed rewardsRegistry); } interface IServiceManager is IServiceManagerUI, IServiceManagerErrors, IServiceManagerEvents { @@ -135,77 +125,4 @@ interface IServiceManager is IServiceManagerUI, IServiceManagerErrors, IServiceM * @return The address of the AVS */ function avs() external view returns (address); - - /** - * @notice Sets the rewards registry for an operator set - * @param operatorSetId The ID of the operator set - * @param rewardsRegistry The address of the rewards registry - * @dev Only callable by the owner - */ - function setRewardsRegistry( - uint32 operatorSetId, - IRewardsRegistry rewardsRegistry - ) external; - - /** - * @notice Claim rewards for an operator from a specific merkle root index using Substrate/Snowbridge positional Merkle proofs - * @param operatorSetId The ID of the operator set - * @param rootIndex Index of the merkle root to claim from - * @param operatorPoints Points earned by the operator - * @param numberOfLeaves The total number of leaves in the Merkle tree - * @param leafIndex The index of the operator's leaf in the Merkle tree - * @param proof Positional Merkle proof (from leaf to root) - */ - function claimOperatorRewards( - uint32 operatorSetId, - uint256 rootIndex, - uint256 operatorPoints, - uint256 numberOfLeaves, - uint256 leafIndex, - bytes32[] calldata proof - ) external; - - /** - * @notice Claim rewards for an operator from the latest merkle root using Substrate/Snowbridge positional Merkle proofs - * @param operatorSetId The ID of the operator set - * @param operatorPoints Points earned by the operator - * @param numberOfLeaves The total number of leaves in the Merkle tree - * @param leafIndex The index of the operator's leaf in the Merkle tree - * @param proof Positional Merkle proof (from leaf to root) - */ - function claimLatestOperatorRewards( - uint32 operatorSetId, - uint256 operatorPoints, - uint256 numberOfLeaves, - uint256 leafIndex, - bytes32[] calldata proof - ) external; - - /** - * @notice Claim rewards for an operator from multiple merkle root indices using Substrate/Snowbridge positional Merkle proofs - * @param operatorSetId The ID of the operator set - * @param rootIndices Array of merkle root indices to claim from - * @param operatorPoints Array of points earned by the operator for each root - * @param numberOfLeaves Array with the total number of leaves for each Merkle tree - * @param leafIndices Array of leaf indices for the operator in each Merkle tree - * @param proofs Array of positional Merkle proofs for each claim - */ - function claimOperatorRewardsBatch( - uint32 operatorSetId, - uint256[] calldata rootIndices, - uint256[] calldata operatorPoints, - uint256[] calldata numberOfLeaves, - uint256[] calldata leafIndices, - bytes32[][] calldata proofs - ) external; - - /** - * @notice Sets the rewards agent address in the RewardsRegistry contract - * @param rewardsAgent New rewards agent address - * @dev Only callable by the owner - */ - function setRewardsAgent( - uint32 operatorSetId, - address rewardsAgent - ) external; } diff --git a/contracts/src/libraries/SortedMerkleProof.sol b/contracts/src/libraries/SortedMerkleProof.sol deleted file mode 100644 index 9b22b25f..00000000 --- a/contracts/src/libraries/SortedMerkleProof.sol +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -/** - * @title SortedMerkleProof - * @notice Verifies sorted-hash Merkle proofs (pair order determined by hash value). - * This matches the runtime merkle tree used in DataHaven rewards. - */ -library SortedMerkleProof { - /** - * @notice Verify that a leaf is part of a sorted-hash Merkle tree. - * @param root the root of the merkle tree - * @param leaf the leaf hash - * @param position the position of the leaf (only used for bounds check) - * @param width the number of leaves in the tree - * @param proof the array of proofs from leaf to root - */ - function verify( - bytes32 root, - bytes32 leaf, - uint256 position, - uint256 width, - bytes32[] calldata proof - ) internal pure returns (bool) { - if (position >= width) { - return false; - } - - bytes32 node = leaf; - for (uint256 i = 0; i < proof.length; i++) { - bytes32 sibling = proof[i]; - node = node < sibling ? efficientHash(node, sibling) : efficientHash(sibling, node); - } - return node == root; - } - - /** - * @notice Efficiently hashes two bytes32 values using assembly - */ - function efficientHash( - bytes32 a, - bytes32 b - ) internal pure returns (bytes32 value) { - assembly { - mstore(0x00, a) - mstore(0x20, b) - value := keccak256(0x00, 0x40) - } - } -} diff --git a/contracts/src/middleware/RewardsRegistry.sol b/contracts/src/middleware/RewardsRegistry.sol deleted file mode 100644 index 5a9e5bb7..00000000 --- a/contracts/src/middleware/RewardsRegistry.sol +++ /dev/null @@ -1,295 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import {SortedMerkleProof} from "../libraries/SortedMerkleProof.sol"; -import {ScaleCodec} from "snowbridge/src/utils/ScaleCodec.sol"; -import {IDataHavenServiceManager} from "../interfaces/IDataHavenServiceManager.sol"; -import {RewardsRegistryStorage} from "./RewardsRegistryStorage.sol"; - -/** - * @title RewardsRegistry - * @notice Contract for managing operator rewards through a Merkle root verification process - */ -contract RewardsRegistry is RewardsRegistryStorage { - /** - * @notice Constructor to set up the rewards registry - * @param _avs Address of the AVS (Service Manager) - * @param _rewardsAgent Address of the rewards agent contract - */ - constructor( - address _avs, - address _rewardsAgent - ) RewardsRegistryStorage(_avs, _rewardsAgent) {} - - /** - * @notice Modifier to restrict function access to the rewards agent only - */ - modifier onlyRewardsAgent() { - if (msg.sender != rewardsAgent) { - revert OnlyRewardsAgent(); - } - _; - } - - /** - * @notice Modifier to restrict function access to the AVS only - */ - modifier onlyAVS() { - if (msg.sender != avs) { - revert OnlyAVS(); - } - _; - } - - /** - * @notice Update the rewards merkle root - * @param newMerkleRoot New merkle root to be set - * @dev Only callable by the rewards agent - */ - function updateRewardsMerkleRoot( - bytes32 newMerkleRoot - ) external override onlyRewardsAgent { - // Get the old root (bytes32(0) if no roots exist) - bytes32 oldRoot = merkleRootHistory.length > 0 - ? merkleRootHistory[merkleRootHistory.length - 1] - : bytes32(0); - - // Add the new root to the history - uint256 newRootIndex = merkleRootHistory.length; - merkleRootHistory.push(newMerkleRoot); - - // Emit the corresponding event - emit RewardsMerkleRootUpdated(oldRoot, newMerkleRoot, newRootIndex); - } - - /** - * @notice Update the rewards agent address - * @param _rewardsAgent New rewards agent address - * @dev Only callable by the AVS - */ - function setRewardsAgent( - address _rewardsAgent - ) external onlyAVS { - rewardsAgent = _rewardsAgent; - } - - /** - * @notice Claim rewards for an operator from a specific merkle root index using sorted-hash Merkle proofs. - * @param operatorAddress Address of the operator to receive rewards - * @param rootIndex Index of the merkle root to claim from - * @param operatorPoints Points earned by the operator - * @param numberOfLeaves The total number of leaves in the Merkle tree - * @param leafIndex The index of the operator's leaf in the Merkle tree - * @param proof Positional Merkle proof (from leaf to root) - * @dev Only callable by the AVS (Service Manager) - */ - function claimRewards( - address operatorAddress, - uint256 rootIndex, - uint256 operatorPoints, - uint256 numberOfLeaves, - uint256 leafIndex, - bytes32[] calldata proof - ) external override onlyAVS { - uint256 rewardsAmount = _validateClaim( - operatorAddress, rootIndex, operatorPoints, numberOfLeaves, leafIndex, proof - ); - _transferRewards(operatorAddress, rewardsAmount); - - emit RewardsClaimedForIndex(operatorAddress, rootIndex, operatorPoints, rewardsAmount); - } - - /** - * @notice Claim rewards for an operator from the latest merkle root using sorted-hash Merkle proofs. - * @param operatorAddress Address of the operator to receive rewards - * @param operatorPoints Points earned by the operator - * @param numberOfLeaves The total number of leaves in the Merkle tree - * @param leafIndex The index of the operator's leaf in the Merkle tree - * @param proof Positional Merkle proof (from leaf to root) - * @dev Only callable by the AVS (Service Manager) - */ - function claimLatestRewards( - address operatorAddress, - uint256 operatorPoints, - uint256 numberOfLeaves, - uint256 leafIndex, - bytes32[] calldata proof - ) external override onlyAVS { - if (merkleRootHistory.length == 0) { - revert RewardsMerkleRootNotSet(); - } - uint256 latestIndex = merkleRootHistory.length - 1; - uint256 rewardsAmount = _validateClaim( - operatorAddress, latestIndex, operatorPoints, numberOfLeaves, leafIndex, proof - ); - _transferRewards(operatorAddress, rewardsAmount); - - emit RewardsClaimedForIndex(operatorAddress, latestIndex, operatorPoints, rewardsAmount); - } - - /** - * @notice Claim rewards for an operator from multiple merkle root indices using sorted-hash Merkle proofs. - * @param operatorAddress Address of the operator to receive rewards - * @param rootIndices Array of merkle root indices to claim from - * @param operatorPoints Array of points earned by the operator for each root - * @param numberOfLeaves Array with the total number of leaves for each Merkle tree - * @param leafIndices Array of leaf indices for the operator in each Merkle tree - * @param proofs Array of sorted-hash Merkle proofs for each claim - * @dev Only callable by the AVS (Service Manager) - */ - function claimRewardsBatch( - address operatorAddress, - uint256[] calldata rootIndices, - uint256[] calldata operatorPoints, - uint256[] calldata numberOfLeaves, - uint256[] calldata leafIndices, - bytes32[][] calldata proofs - ) external override onlyAVS { - if ( - rootIndices.length != operatorPoints.length || rootIndices.length != proofs.length - || rootIndices.length != numberOfLeaves.length - || rootIndices.length != leafIndices.length - ) { - revert ArrayLengthMismatch(); - } - - uint256 totalRewards = 0; - for (uint256 i = 0; i < rootIndices.length; i++) { - totalRewards += _validateClaim( - operatorAddress, - rootIndices[i], - operatorPoints[i], - numberOfLeaves[i], - leafIndices[i], - proofs[i] - ); - } - - _transferRewards(operatorAddress, totalRewards); - - emit RewardsBatchClaimedForIndices( - operatorAddress, rootIndices, operatorPoints, totalRewards - ); - } - - /** - * @notice Internal function to validate a claim and calculate rewards using sorted-hash Merkle proofs. - * @param operatorAddress Address of the operator to receive rewards - * @param rootIndex Index of the merkle root to claim from - * @param operatorPoints Points earned by the operator - * @param numberOfLeaves The total number of leaves in the Merkle tree - * @param leafIndex The index of the operator's leaf in the Merkle tree - * @param proof Positional Merkle proof (from leaf to root) - * @return rewardsAmount The amount of rewards calculated - */ - function _validateClaim( - address operatorAddress, - uint256 rootIndex, - uint256 operatorPoints, - uint256 numberOfLeaves, - uint256 leafIndex, - bytes32[] calldata proof - ) internal returns (uint256 rewardsAmount) { - if (rootIndex >= merkleRootHistory.length) { - revert InvalidMerkleRootIndex(); - } - - if (operatorClaimedByIndex[operatorAddress][rootIndex]) { - revert RewardsAlreadyClaimedForIndex(); - } - - // Compute Substrate-compatible leaf: keccak256(SCALE(accountId || u32LE points)) - // For DataHaven, AccountId comes from the AVS mapping (validatorEthAddressToSolochainAddress) if set. - address leafAccount = operatorAddress; - address mappedSolochain = - IDataHavenServiceManager(avs).validatorEthAddressToSolochainAddress(operatorAddress); - if (mappedSolochain != address(0)) { - leafAccount = mappedSolochain; - } - bytes memory preimage = - abi.encodePacked(leafAccount, ScaleCodec.encodeU32(uint32(operatorPoints))); - bytes32 substrateLeaf = keccak256(preimage); - - bool ok = SortedMerkleProof.verify( - merkleRootHistory[rootIndex], substrateLeaf, leafIndex, numberOfLeaves, proof - ); - if (!ok) revert InvalidMerkleProof(); - - rewardsAmount = operatorPoints; - operatorClaimedByIndex[operatorAddress][rootIndex] = true; - } - - /** - * @notice Internal function to transfer rewards to an operator - * @param operatorAddress Address of the operator to receive rewards - * @param rewardsAmount Amount of rewards to transfer - */ - function _transferRewards( - address operatorAddress, - uint256 rewardsAmount - ) internal { - // Transfer rewards to the operator - (bool success,) = operatorAddress.call{value: rewardsAmount}(""); - if (!success) { - revert RewardsTransferFailed(); - } - } - - /** - * @notice Get the merkle root at a specific index - * @param index Index of the merkle root to retrieve - * @return The merkle root at the specified index - */ - function getMerkleRootByIndex( - uint256 index - ) external view override returns (bytes32) { - if (index >= merkleRootHistory.length) { - revert InvalidMerkleRootIndex(); - } - return merkleRootHistory[index]; - } - - /** - * @notice Get the latest merkle root index - * @return The index of the latest merkle root (returns 0 if no roots exist) - */ - function getLatestMerkleRootIndex() external view override returns (uint256) { - uint256 length = merkleRootHistory.length; - return length == 0 ? 0 : length - 1; - } - - /** - * @notice Get the latest merkle root - * @return The latest merkle root (returns bytes32(0) if no roots exist) - */ - function getLatestMerkleRoot() external view override returns (bytes32) { - uint256 length = merkleRootHistory.length; - return length == 0 ? bytes32(0) : merkleRootHistory[length - 1]; - } - - /** - * @notice Get the total number of merkle roots in history - * @return The total count of merkle roots - */ - function getMerkleRootHistoryLength() external view override returns (uint256) { - return merkleRootHistory.length; - } - - /** - * @notice Check if an operator has claimed rewards for a specific root index - * @param operatorAddress Address of the operator - * @param rootIndex Index of the merkle root to check - * @return True if the operator has claimed rewards for this root index - */ - function hasClaimedByIndex( - address operatorAddress, - uint256 rootIndex - ) external view override returns (bool) { - return operatorClaimedByIndex[operatorAddress][rootIndex]; - } - - /** - * @notice Function to receive ETH - */ - receive() external payable {} -} diff --git a/contracts/src/middleware/RewardsRegistryStorage.sol b/contracts/src/middleware/RewardsRegistryStorage.sol deleted file mode 100644 index ac6d4ac2..00000000 --- a/contracts/src/middleware/RewardsRegistryStorage.sol +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import {IRewardsRegistry} from "../interfaces/IRewardsRegistry.sol"; - -/** - * @title Storage variables for the RewardsRegistry contract - * @notice This storage contract is separate from the logic to simplify the upgrade process - */ -abstract contract RewardsRegistryStorage is IRewardsRegistry { - /** - * - * IMMUTABLES - * - */ - /// @notice Address of the AVS (Service Manager) - address public immutable avs; - - /** - * - * STATE VARIABLES - * - */ - - /// @notice Address of the rewards agent contract - address public rewardsAgent; - - /// @notice History of all merkle roots, accessible by index - bytes32[] public merkleRootHistory; - - /// @notice Mapping from operator to merkle root index to claimed status - mapping(address => mapping(uint256 => bool)) public operatorClaimedByIndex; - - /** - * @notice Constructor to set up the immutable AVS address - * @param _avs Address of the AVS (Service Manager) - * @param _rewardsAgent Address of the rewards agent contract - */ - constructor( - address _avs, - address _rewardsAgent - ) { - avs = _avs; - rewardsAgent = _rewardsAgent; - } - - // storage gap for upgradeability - uint256[49] private __GAP; -} diff --git a/contracts/src/middleware/ServiceManagerBase.sol b/contracts/src/middleware/ServiceManagerBase.sol index 192c1456..e8d71b1e 100644 --- a/contracts/src/middleware/ServiceManagerBase.sol +++ b/contracts/src/middleware/ServiceManagerBase.sol @@ -25,7 +25,6 @@ import { } from "eigenlayer-contracts/src/contracts/interfaces/IPermissionController.sol"; import {IServiceManager, IServiceManagerUI} from "../interfaces/IServiceManager.sol"; -import {IRewardsRegistry} from "../interfaces/IRewardsRegistry.sol"; import {ServiceManagerBaseStorage} from "./ServiceManagerBaseStorage.sol"; /** @@ -254,117 +253,6 @@ abstract contract ServiceManagerBase is ServiceManagerBaseStorage, IAVSRegistrar revert("ServiceManagerBase: setRewardsInitiator is deprecated"); } - /** - * @notice Sets the rewards registry for an operator set - * @param operatorSetId The ID of the operator set - * @param rewardsRegistry The address of the rewards registry - * @dev Only callable by the owner - */ - function setRewardsRegistry( - uint32 operatorSetId, - IRewardsRegistry rewardsRegistry - ) external virtual override onlyOwner { - operatorSetToRewardsRegistry[operatorSetId] = rewardsRegistry; - emit RewardsRegistrySet(operatorSetId, address(rewardsRegistry)); - } - - /** - * @notice Claim rewards for an operator from a specific merkle root index using Substrate/Snowbridge positional Merkle proofs - * @param operatorSetId The ID of the operator set - * @param rootIndex Index of the merkle root to claim from - * @param operatorPoints Points earned by the operator - * @param numberOfLeaves The total number of leaves in the Merkle tree - * @param leafIndex The index of the operator's leaf in the Merkle tree - * @param proof Positional Merkle proof (from leaf to root) - */ - function claimOperatorRewards( - uint32 operatorSetId, - uint256 rootIndex, - uint256 operatorPoints, - uint256 numberOfLeaves, - uint256 leafIndex, - bytes32[] calldata proof - ) external virtual override { - IRewardsRegistry rewardsRegistry = operatorSetToRewardsRegistry[operatorSetId]; - if (address(rewardsRegistry) == address(0)) { - revert NoRewardsRegistryForOperatorSet(); - } - _ensureOperatorIsPartOfOperatorSet(msg.sender, operatorSetId); - rewardsRegistry.claimRewards( - msg.sender, rootIndex, operatorPoints, numberOfLeaves, leafIndex, proof - ); - } - - /** - * @notice Claim rewards for an operator from the latest merkle root using Substrate/Snowbridge positional Merkle proofs - * @param operatorSetId The ID of the operator set - * @param operatorPoints Points earned by the operator - * @param numberOfLeaves The total number of leaves in the Merkle tree - * @param leafIndex The index of the operator's leaf in the Merkle tree - * @param proof Positional Merkle proof (from leaf to root) - */ - function claimLatestOperatorRewards( - uint32 operatorSetId, - uint256 operatorPoints, - uint256 numberOfLeaves, - uint256 leafIndex, - bytes32[] calldata proof - ) external virtual override { - IRewardsRegistry rewardsRegistry = operatorSetToRewardsRegistry[operatorSetId]; - if (address(rewardsRegistry) == address(0)) { - revert NoRewardsRegistryForOperatorSet(); - } - _ensureOperatorIsPartOfOperatorSet(msg.sender, operatorSetId); - rewardsRegistry.claimLatestRewards( - msg.sender, operatorPoints, numberOfLeaves, leafIndex, proof - ); - } - - /** - * @notice Claim rewards for an operator from multiple merkle root indices using Substrate/Snowbridge positional Merkle proofs - * @param operatorSetId The ID of the operator set - * @param rootIndices Array of merkle root indices to claim from - * @param operatorPoints Array of points earned by the operator for each root - * @param numberOfLeaves Array with the total number of leaves for each Merkle tree - * @param leafIndices Array of leaf indices for the operator in each Merkle tree - * @param proofs Array of positional Merkle proofs for each claim - */ - function claimOperatorRewardsBatch( - uint32 operatorSetId, - uint256[] calldata rootIndices, - uint256[] calldata operatorPoints, - uint256[] calldata numberOfLeaves, - uint256[] calldata leafIndices, - bytes32[][] calldata proofs - ) external virtual override { - IRewardsRegistry rewardsRegistry = operatorSetToRewardsRegistry[operatorSetId]; - if (address(rewardsRegistry) == address(0)) { - revert NoRewardsRegistryForOperatorSet(); - } - _ensureOperatorIsPartOfOperatorSet(msg.sender, operatorSetId); - rewardsRegistry.claimRewardsBatch( - msg.sender, rootIndices, operatorPoints, numberOfLeaves, leafIndices, proofs - ); - } - - /** - * @notice Sets the rewards agent address in the RewardsRegistry contract - * @param operatorSetId The ID of the operator set - * @param rewardsAgent New rewards agent address - * @dev Only callable by the owner - */ - function setRewardsAgent( - uint32 operatorSetId, - address rewardsAgent - ) external virtual override onlyOwner { - IRewardsRegistry rewardsRegistry = operatorSetToRewardsRegistry[operatorSetId]; - if (address(rewardsRegistry) == address(0)) { - revert NoRewardsRegistryForOperatorSet(); - } - - rewardsRegistry.setRewardsAgent(rewardsAgent); - } - /** * @notice Forwards a call to Eigenlayer's RewardsCoordinator contract to set the address of the entity that can call `processClaim` on behalf of this contract. * @param claimer The address of the entity that can call `processClaim` on behalf of the earner diff --git a/contracts/src/middleware/ServiceManagerBaseStorage.sol b/contracts/src/middleware/ServiceManagerBaseStorage.sol index a504075a..263246c3 100644 --- a/contracts/src/middleware/ServiceManagerBaseStorage.sol +++ b/contracts/src/middleware/ServiceManagerBaseStorage.sol @@ -17,7 +17,6 @@ import { } from "eigenlayer-contracts/src/contracts/interfaces/IPermissionController.sol"; import {IServiceManager} from "../interfaces/IServiceManager.sol"; -import {IRewardsRegistry} from "../interfaces/IRewardsRegistry.sol"; /** * @title Storage variables for the `ServiceManagerBase` contract. @@ -43,9 +42,6 @@ abstract contract ServiceManagerBaseStorage is IServiceManager, OwnableUpgradeab /// @notice The address of the entity that can initiate rewards address public rewardsInitiator; - /// @notice Mapping from operator set ID to its respective RewardsRegistry - mapping(uint32 => IRewardsRegistry) public operatorSetToRewardsRegistry; - /// @notice Sets the (immutable) rewardsCoordinator`, `_permissionController`, and `_allocationManager` addresses constructor( IRewardsCoordinator __rewardsCoordinator, diff --git a/contracts/test/RewardsRegistry.t.sol b/contracts/test/RewardsRegistry.t.sol deleted file mode 100644 index ef5921fd..00000000 --- a/contracts/test/RewardsRegistry.t.sol +++ /dev/null @@ -1,679 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -/* solhint-disable func-name-mixedcase */ - -import {Test, console, stdError} from "forge-std/Test.sol"; - -import {AVSDeployer} from "./utils/AVSDeployer.sol"; -import {RewardsRegistry} from "../src/middleware/RewardsRegistry.sol"; -import {IRewardsRegistry, IRewardsRegistryErrors} from "../src/interfaces/IRewardsRegistry.sol"; -import {ScaleCodec} from "snowbridge/src/utils/ScaleCodec.sol"; - -contract RewardsRegistryTest is AVSDeployer { - address public nonRewardsAgent; - address public operatorAddress; - - // Test data - bytes32 public merkleRoot; - bytes32 public newMerkleRoot; - uint256 public operatorPoints; - uint256 public leafIndex; - uint256 public numberOfLeaves; - bytes32[] public validProof; - bytes32[] public invalidProof; - - // Events - event RewardsMerkleRootUpdated(bytes32 oldRoot, bytes32 indexed newRoot, uint256 newRootIndex); - event RewardsClaimedForIndex( - address indexed operatorAddress, - uint256 indexed rootIndex, - uint256 points, - uint256 rewardsAmount - ); - event RewardsBatchClaimedForIndices( - address indexed operatorAddress, - uint256[] rootIndices, - uint256[] points, - uint256 totalRewardsAmount - ); - - function setUp() public { - _deployMockEigenLayerAndAVS(); - - // Set up test addresses - nonRewardsAgent = address(0x5678); - operatorAddress = address(0xABCD); - - // Set up test data - operatorPoints = 100; - leafIndex = 0; // Position of our leaf in the tree - numberOfLeaves = 2; // Simple tree with 2 leaves - - // For sorted-hash Merkle proofs, we need to use SCALE encoding - // Our leaf (the one we want to prove exists in the tree) - bytes memory preimage = - abi.encodePacked(operatorAddress, ScaleCodec.encodeU32(uint32(operatorPoints))); - bytes32 leaf = keccak256(preimage); - - // Sibling leaf (another element in the Merkle tree) - bytes memory siblingPreimage = - abi.encodePacked(address(0x1234), ScaleCodec.encodeU32(uint32(50))); - bytes32 siblingLeaf = keccak256(siblingPreimage); - - // For sorted-hash merkle proof, smaller hash goes first - merkleRoot = leaf < siblingLeaf - ? keccak256(abi.encodePacked(leaf, siblingLeaf)) - : keccak256(abi.encodePacked(siblingLeaf, leaf)); - - // The proof to verify our leaf is just the sibling leaf - validProof = new bytes32[](1); - validProof[0] = siblingLeaf; - - // For tests that need a second Merkle root - bytes memory newSiblingPreimage = - abi.encodePacked(address(0x5678), ScaleCodec.encodeU32(uint32(75))); - bytes32 newSiblingLeaf = keccak256(newSiblingPreimage); - // For sorted-hash merkle proof, smaller hash goes first - newMerkleRoot = leaf < newSiblingLeaf - ? keccak256(abi.encodePacked(leaf, newSiblingLeaf)) - : keccak256(abi.encodePacked(newSiblingLeaf, leaf)); - - // An invalid proof - invalidProof = new bytes32[](1); - invalidProof[0] = keccak256(abi.encodePacked("wrong sibling")); - } - - // Helper to test our proof construction - function test_verifyProofConstruction() public { - // Test that our proof construction is valid using the contract's internal validation - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - vm.deal(address(rewardsRegistry), 1000 ether); - - vm.prank(address(serviceManager)); - // This should not revert if the proof is valid - rewardsRegistry.claimLatestRewards( - operatorAddress, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 0), - "Proof verification should succeed" - ); - } - - /** - * - * Constructor Tests * - * - */ - function test_constructor() public view { - assertEq( - rewardsRegistry.avs(), address(serviceManager), "AVS address should be set correctly" - ); - assertEq( - rewardsRegistry.rewardsAgent(), - mockRewardsAgent, - "Rewards agent address should be set correctly" - ); - } - - /** - * - * updateRewardsMerkleRoot Tests * - * - */ - function test_updateRewardsMerkleRoot() public { - vm.prank(mockRewardsAgent); - - vm.expectEmit(true, true, true, true); - emit RewardsMerkleRootUpdated(bytes32(0), merkleRoot, 0); - - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - assertEq(rewardsRegistry.getLatestMerkleRoot(), merkleRoot, "Merkle root should be updated"); - } - - function test_updateRewardsMerkleRoot_NotRewardsAgent() public { - vm.prank(nonRewardsAgent); - - vm.expectRevert(abi.encodeWithSelector(IRewardsRegistryErrors.OnlyRewardsAgent.selector)); - - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - } - - function test_updateRewardsMerkleRoot_EmitEvent() public { - // First update - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - // Second update with expectation of emitting event with correct old and new roots - vm.prank(mockRewardsAgent); - - vm.expectEmit(true, true, true, true); - emit RewardsMerkleRootUpdated(merkleRoot, newMerkleRoot, 1); - - rewardsRegistry.updateRewardsMerkleRoot(newMerkleRoot); - } - - /** - * - * setRewardsAgent Tests * - * - */ - function test_setRewardsAgent() public { - address newRewardsAgent = address(0x9876); - - vm.prank(address(serviceManager)); - rewardsRegistry.setRewardsAgent(newRewardsAgent); - - assertEq(rewardsRegistry.rewardsAgent(), newRewardsAgent, "Rewards agent should be updated"); - } - - function test_setRewardsAgent_NotAVS() public { - vm.prank(nonRewardsAgent); - - vm.expectRevert(abi.encodeWithSelector(IRewardsRegistryErrors.OnlyAVS.selector)); - - rewardsRegistry.setRewardsAgent(address(0x9876)); - } - - /** - * - * claimRewards Tests * - * - */ - function test_claimLatestRewards() public { - // First update merkle root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - // Add ETH to contract for rewards - vm.deal(address(rewardsRegistry), 1000 ether); - - uint256 initialBalance = operatorAddress.balance; - - vm.prank(address(serviceManager)); - - vm.expectEmit(true, true, true, true); - emit RewardsClaimedForIndex(operatorAddress, 0, operatorPoints, operatorPoints); - - rewardsRegistry.claimLatestRewards( - operatorAddress, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - - // Verify state changes - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 0), - "Operator should have claimed from the latest root index" - ); - assertEq( - operatorAddress.balance, - initialBalance + operatorPoints, - "Operator should receive correct rewards" - ); - } - - function test_claimLatestRewards_NotAVS() public { - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - vm.prank(nonRewardsAgent); - - vm.expectRevert(abi.encodeWithSelector(IRewardsRegistryErrors.OnlyAVS.selector)); - - rewardsRegistry.claimLatestRewards( - operatorAddress, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - } - - function test_claimLatestRewards_AlreadyClaimed() public { - // First update merkle root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - // Add ETH to contract for rewards - vm.deal(address(rewardsRegistry), 1000 ether); - - // First claim succeeds - vm.prank(address(serviceManager)); - rewardsRegistry.claimLatestRewards( - operatorAddress, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - - // Second claim fails - vm.prank(address(serviceManager)); - vm.expectRevert( - abi.encodeWithSelector(IRewardsRegistryErrors.RewardsAlreadyClaimedForIndex.selector) - ); - rewardsRegistry.claimLatestRewards( - operatorAddress, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - } - - function test_claimLatestRewards_InvalidProof() public { - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - vm.prank(address(serviceManager)); - vm.expectRevert(abi.encodeWithSelector(IRewardsRegistryErrors.InvalidMerkleProof.selector)); - rewardsRegistry.claimLatestRewards( - operatorAddress, operatorPoints, numberOfLeaves, leafIndex, invalidProof - ); - } - - function test_claimLatestRewards_NoMerkleRoot() public { - // No merkle roots exist yet - vm.prank(address(serviceManager)); - vm.expectRevert( - abi.encodeWithSelector(IRewardsRegistryErrors.RewardsMerkleRootNotSet.selector) - ); - rewardsRegistry.claimLatestRewards( - operatorAddress, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - } - - function test_claimLatestRewards_DifferentRoot() public { - // First merkle root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - // Add ETH to contract for rewards - vm.deal(address(rewardsRegistry), 1000 ether); - - // First claim succeeds - vm.prank(address(serviceManager)); - rewardsRegistry.claimLatestRewards( - operatorAddress, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - - // Update to new merkle root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(newMerkleRoot); - - // Create a new valid proof for the new root - bytes32[] memory newProof = new bytes32[](1); - bytes memory newSiblingPreimage = - abi.encodePacked(address(0x5678), ScaleCodec.encodeU32(uint32(75))); - bytes32 newSiblingLeaf = keccak256(newSiblingPreimage); - newProof[0] = newSiblingLeaf; - - // Operator can claim again with new merkle root - vm.prank(address(serviceManager)); - rewardsRegistry.claimLatestRewards( - operatorAddress, operatorPoints, numberOfLeaves, leafIndex, newProof - ); - - // Verify both indices are now claimed - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 0), - "Operator should have claimed from first root index" - ); - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 1), - "Operator should have claimed from second root index" - ); - } - - function test_claimLatestRewards_InsufficientBalance() public { - // Set merkle root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - // No ETH in contract for rewards - ensure contract has 0 balance - vm.deal(address(rewardsRegistry), 0); - - vm.prank(address(serviceManager)); - vm.expectRevert( - abi.encodeWithSelector(IRewardsRegistryErrors.RewardsTransferFailed.selector) - ); - rewardsRegistry.claimLatestRewards( - operatorAddress, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - } - - function test_receive() public { - // Test that the contract can receive ETH - uint256 amount = 1 ether; - vm.deal(address(this), amount); - - (bool success,) = address(rewardsRegistry).call{value: amount}(""); - assertTrue(success, "Contract should be able to receive ETH"); - assertEq(address(rewardsRegistry).balance, amount, "Contract balance should increase"); - } - - /** - * - * Merkle Root History Tests * - * - */ - function test_getMerkleRootByIndex() public { - // Add first root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - // Add second root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(newMerkleRoot); - - // Test accessing by index - assertEq( - rewardsRegistry.getMerkleRootByIndex(0), - merkleRoot, - "First root should be accessible by index 0" - ); - assertEq( - rewardsRegistry.getMerkleRootByIndex(1), - newMerkleRoot, - "Second root should be accessible by index 1" - ); - } - - function test_getMerkleRootByIndex_InvalidIndex() public { - // Add one root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - // Try to access invalid index - vm.expectRevert( - abi.encodeWithSelector(IRewardsRegistryErrors.InvalidMerkleRootIndex.selector) - ); - rewardsRegistry.getMerkleRootByIndex(1); - } - - function test_getLatestMerkleRootIndex() public { - // Initially should return 0 when no roots exist - assertEq( - rewardsRegistry.getLatestMerkleRootIndex(), 0, "Should return 0 when no roots exist" - ); - - // Add first root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - assertEq(rewardsRegistry.getLatestMerkleRootIndex(), 0, "Should return 0 for first root"); - - // Add second root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(newMerkleRoot); - assertEq(rewardsRegistry.getLatestMerkleRootIndex(), 1, "Should return 1 for second root"); - } - - function test_getMerkleRootHistoryLength() public { - // Initially should be 0 - assertEq(rewardsRegistry.getMerkleRootHistoryLength(), 0, "Should be 0 initially"); - - // Add first root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - assertEq(rewardsRegistry.getMerkleRootHistoryLength(), 1, "Should be 1 after first root"); - - // Add second root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(newMerkleRoot); - assertEq(rewardsRegistry.getMerkleRootHistoryLength(), 2, "Should be 2 after second root"); - } - - function test_historyPreservesQuickAccess() public { - // Add multiple roots - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(newMerkleRoot); - - // Latest root should be accessible directly without index - assertEq( - rewardsRegistry.getLatestMerkleRoot(), - newMerkleRoot, - "getLatestMerkleRoot should return latest root" - ); - - // But we should also be able to access by index - assertEq( - rewardsRegistry.getMerkleRootByIndex(1), - newMerkleRoot, - "Latest root should also be accessible by index" - ); - assertEq( - rewardsRegistry.getMerkleRootByIndex(0), - merkleRoot, - "Previous root should be accessible by index" - ); - } - - /** - * - * Index-based Claim Tests * - * - */ - function test_claimRewards() public { - // Add multiple roots - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(newMerkleRoot); - - // Add ETH to contract for rewards - vm.deal(address(rewardsRegistry), 1000 ether); - - uint256 initialBalance = operatorAddress.balance; - - // Claim from first root (index 0) - vm.prank(address(serviceManager)); - - vm.expectEmit(true, true, true, true); - emit RewardsClaimedForIndex(operatorAddress, 0, operatorPoints, operatorPoints); - - rewardsRegistry.claimRewards( - operatorAddress, 0, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - - // Verify state changes - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 0), - "Operator should have claimed from index 0" - ); - assertEq( - operatorAddress.balance, - initialBalance + operatorPoints, - "Operator should receive correct rewards" - ); - } - - function test_claimRewards_InvalidIndex() public { - vm.deal(address(rewardsRegistry), 1000 ether); - - vm.prank(address(serviceManager)); - vm.expectRevert( - abi.encodeWithSelector(IRewardsRegistryErrors.InvalidMerkleRootIndex.selector) - ); - rewardsRegistry.claimRewards( - operatorAddress, 0, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - } - - function test_claimRewards_AlreadyClaimed() public { - // Add root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - vm.deal(address(rewardsRegistry), 1000 ether); - - // First claim succeeds - vm.prank(address(serviceManager)); - rewardsRegistry.claimRewards( - operatorAddress, 0, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - - // Second claim fails - vm.prank(address(serviceManager)); - vm.expectRevert( - abi.encodeWithSelector(IRewardsRegistryErrors.RewardsAlreadyClaimedForIndex.selector) - ); - rewardsRegistry.claimRewards( - operatorAddress, 0, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - } - - function test_hasClaimedByIndex() public { - // Add root - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - vm.deal(address(rewardsRegistry), 1000 ether); - - // Initially not claimed - assertFalse( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 0), - "Should not have claimed initially" - ); - - // Claim - vm.prank(address(serviceManager)); - rewardsRegistry.claimRewards( - operatorAddress, 0, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - - // Now claimed - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 0), "Should have claimed after claim" - ); - } - - /** - * - * Batch Claim Tests * - * - */ - function test_claimRewardsBatch() public { - // Add multiple roots - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(newMerkleRoot); - - vm.deal(address(rewardsRegistry), 1000 ether); - - // Prepare batch claim data - uint256[] memory rootIndices = new uint256[](2); - rootIndices[0] = 0; - rootIndices[1] = 1; - - uint256[] memory points = new uint256[](2); - points[0] = operatorPoints; - points[1] = operatorPoints; - - bytes32[][] memory proofs = new bytes32[][](2); - proofs[0] = validProof; - - // Create proof for second root - bytes32[] memory newProof = new bytes32[](1); - bytes memory newSiblingPreimage = - abi.encodePacked(address(0x5678), ScaleCodec.encodeU32(uint32(75))); - bytes32 newSiblingLeaf = keccak256(newSiblingPreimage); - newProof[0] = newSiblingLeaf; - proofs[1] = newProof; - - uint256 initialBalance = operatorAddress.balance; - - // Batch claim - vm.prank(address(serviceManager)); - vm.expectEmit(true, true, true, true); - emit RewardsBatchClaimedForIndices(operatorAddress, rootIndices, points, operatorPoints * 2); - uint256[] memory widths = new uint256[](2); - widths[0] = numberOfLeaves; - widths[1] = numberOfLeaves; - uint256[] memory leafIdxs = new uint256[](2); - leafIdxs[0] = leafIndex; - leafIdxs[1] = leafIndex; - rewardsRegistry.claimRewardsBatch( - operatorAddress, rootIndices, points, widths, leafIdxs, proofs - ); - - // Verify both indices are claimed - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 0), - "Should have claimed from index 0" - ); - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 1), - "Should have claimed from index 1" - ); - - // Verify total rewards received - assertEq( - operatorAddress.balance, - initialBalance + (operatorPoints * 2), - "Should receive rewards from both claims" - ); - } - - function test_claimRewardsBatch_ArrayLengthMismatch() public { - uint256[] memory rootIndices = new uint256[](2); - uint256[] memory points = new uint256[](1); // Wrong length - bytes32[][] memory proofs = new bytes32[][](2); - - vm.prank(address(serviceManager)); - vm.expectRevert(abi.encodeWithSelector(IRewardsRegistryErrors.ArrayLengthMismatch.selector)); - uint256[] memory widths = new uint256[](2); - uint256[] memory leafIdxs = new uint256[](2); - rewardsRegistry.claimRewardsBatch( - operatorAddress, rootIndices, points, widths, leafIdxs, proofs - ); - } - - function test_claimRewardsBatch_PartialClaimFailure() public { - // Add roots - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(newMerkleRoot); - - vm.deal(address(rewardsRegistry), 1000 ether); - - // Claim from index 0 first - vm.prank(address(serviceManager)); - rewardsRegistry.claimRewards( - operatorAddress, 0, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - - // Now try batch claim that includes already claimed index 0 - uint256[] memory rootIndices = new uint256[](2); - rootIndices[0] = 0; // Already claimed - rootIndices[1] = 1; - - uint256[] memory points = new uint256[](2); - points[0] = operatorPoints; - points[1] = operatorPoints; - - bytes32[][] memory proofs = new bytes32[][](2); - proofs[0] = validProof; - - bytes32[] memory newProof = new bytes32[](1); - bytes memory newSiblingPreimage = - abi.encodePacked(address(0x5678), ScaleCodec.encodeU32(uint32(75))); - bytes32 newSiblingLeaf = keccak256(newSiblingPreimage); - newProof[0] = newSiblingLeaf; - proofs[1] = newProof; - - // Should fail because index 0 is already claimed - vm.prank(address(serviceManager)); - vm.expectRevert( - abi.encodeWithSelector(IRewardsRegistryErrors.RewardsAlreadyClaimedForIndex.selector) - ); - uint256[] memory widths = new uint256[](2); - widths[0] = numberOfLeaves; - widths[1] = numberOfLeaves; - uint256[] memory leafIdxs = new uint256[](2); - leafIdxs[0] = leafIndex; - leafIdxs[1] = leafIndex; - rewardsRegistry.claimRewardsBatch( - operatorAddress, rootIndices, points, widths, leafIdxs, proofs - ); - } -} diff --git a/contracts/test/ServiceManagerRewardsRegistry.t.sol b/contracts/test/ServiceManagerRewardsRegistry.t.sol deleted file mode 100644 index 65854208..00000000 --- a/contracts/test/ServiceManagerRewardsRegistry.t.sol +++ /dev/null @@ -1,709 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -/* solhint-disable func-name-mixedcase */ - -import {Test, console, stdError} from "forge-std/Test.sol"; -import { - IAllocationManager -} from "eigenlayer-contracts/src/contracts/interfaces/IAllocationManager.sol"; - -import {AVSDeployer} from "./utils/AVSDeployer.sol"; -import {RewardsRegistry} from "../src/middleware/RewardsRegistry.sol"; -import {IRewardsRegistry, IRewardsRegistryErrors} from "../src/interfaces/IRewardsRegistry.sol"; -import {ServiceManagerMock} from "./mocks/ServiceManagerMock.sol"; -import {IServiceManager, IServiceManagerErrors} from "../src/interfaces/IServiceManager.sol"; -import {ScaleCodec} from "snowbridge/src/utils/ScaleCodec.sol"; - -contract ServiceManagerRewardsRegistryTest is AVSDeployer { - // Test addresses - address public operatorAddress; - address public nonOperatorAddress; - - // Test data - uint32 public operatorSetId; - bytes32 public merkleRoot; - bytes32 public secondMerkleRoot; - bytes32 public thirdMerkleRoot; - uint256 public operatorPoints; - uint256 public secondOperatorPoints; - uint256 public thirdOperatorPoints; - uint256 public leafIndex; - uint256 public numberOfLeaves; - bytes32[] public validProof; - bytes32[] public secondValidProof; - bytes32[] public thirdValidProof; - - // Events - event RewardsRegistrySet(uint32 indexed operatorSetId, address indexed rewardsRegistry); - event RewardsClaimedForIndex( - address indexed operatorAddress, - uint256 indexed rootIndex, - uint256 points, - uint256 rewardsAmount - ); - event RewardsBatchClaimedForIndices( - address indexed operatorAddress, - uint256[] rootIndices, - uint256[] points, - uint256 totalRewardsAmount - ); - - function setUp() public { - _deployMockEigenLayerAndAVS(); - - // Set up test addresses - operatorAddress = address(0xABCD); - nonOperatorAddress = address(0x5678); - - // Configure test data - operatorSetId = 1; - operatorPoints = 100; - secondOperatorPoints = 200; - thirdOperatorPoints = 150; - leafIndex = 0; // Position of our leaf in the tree - numberOfLeaves = 2; // Simple tree with 2 leaves - - // Create multiple merkle trees for comprehensive batch testing - _createFirstMerkleTree(); - _createSecondMerkleTree(); - _createThirdMerkleTree(); - - // Set up the rewards registry for the operator set - vm.prank(avsOwner); - serviceManager.setRewardsRegistry(operatorSetId, IRewardsRegistry(address(rewardsRegistry))); - - // Set all three merkle roots to create a history - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(merkleRoot); - - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(secondMerkleRoot); - - vm.prank(mockRewardsAgent); - rewardsRegistry.updateRewardsMerkleRoot(thirdMerkleRoot); - - // Add funds to the registry for rewards - vm.deal(address(rewardsRegistry), 1000 ether); - } - - function _createFirstMerkleTree() internal { - // Create first merkle tree with SCALE encoding - bytes memory preimage = - abi.encodePacked(operatorAddress, ScaleCodec.encodeU32(uint32(operatorPoints))); - bytes32 leaf = keccak256(preimage); - - bytes memory siblingPreimage = - abi.encodePacked(address(0x1111), ScaleCodec.encodeU32(uint32(50))); - bytes32 siblingLeaf = keccak256(siblingPreimage); - - // For sorted-hash merkle proof, smaller hash goes first - merkleRoot = leaf < siblingLeaf - ? keccak256(abi.encodePacked(leaf, siblingLeaf)) - : keccak256(abi.encodePacked(siblingLeaf, leaf)); - validProof = new bytes32[](1); - validProof[0] = siblingLeaf; - } - - function _createSecondMerkleTree() internal { - // Create second merkle tree with different points using SCALE encoding - bytes memory preimage = - abi.encodePacked(operatorAddress, ScaleCodec.encodeU32(uint32(secondOperatorPoints))); - bytes32 leaf = keccak256(preimage); - - bytes memory siblingPreimage = - abi.encodePacked(address(0x2222), ScaleCodec.encodeU32(uint32(75))); - bytes32 siblingLeaf = keccak256(siblingPreimage); - - // For sorted-hash merkle proof, smaller hash goes first - secondMerkleRoot = leaf < siblingLeaf - ? keccak256(abi.encodePacked(leaf, siblingLeaf)) - : keccak256(abi.encodePacked(siblingLeaf, leaf)); - secondValidProof = new bytes32[](1); - secondValidProof[0] = siblingLeaf; - } - - function _createThirdMerkleTree() internal { - // Create third merkle tree with different points using SCALE encoding - bytes memory preimage = - abi.encodePacked(operatorAddress, ScaleCodec.encodeU32(uint32(thirdOperatorPoints))); - bytes32 leaf = keccak256(preimage); - - bytes memory siblingPreimage = - abi.encodePacked(address(0x3333), ScaleCodec.encodeU32(uint32(60))); - bytes32 siblingLeaf = keccak256(siblingPreimage); - - // For sorted-hash merkle proof, smaller hash goes first - thirdMerkleRoot = leaf < siblingLeaf - ? keccak256(abi.encodePacked(leaf, siblingLeaf)) - : keccak256(abi.encodePacked(siblingLeaf, leaf)); - thirdValidProof = new bytes32[](1); - thirdValidProof[0] = siblingLeaf; - } - - function test_setRewardsRegistry() public { - uint32 newOperatorSetId = 2; - RewardsRegistry newRewardsRegistry = - new RewardsRegistry(address(serviceManager), mockRewardsAgent); - - vm.prank(avsOwner); - vm.expectEmit(true, true, true, true); - emit RewardsRegistrySet(newOperatorSetId, address(newRewardsRegistry)); - - serviceManager.setRewardsRegistry( - newOperatorSetId, IRewardsRegistry(address(newRewardsRegistry)) - ); - - assertEq( - address(serviceManager.operatorSetToRewardsRegistry(newOperatorSetId)), - address(newRewardsRegistry), - "Rewards registry should be set correctly" - ); - } - - function test_setRewardsRegistry_NotOwner() public { - uint32 newOperatorSetId = 2; - RewardsRegistry newRewardsRegistry = - new RewardsRegistry(address(serviceManager), mockRewardsAgent); - - vm.prank(nonOperatorAddress); - vm.expectRevert(bytes("Ownable: caller is not the owner")); - - serviceManager.setRewardsRegistry( - newOperatorSetId, IRewardsRegistry(address(newRewardsRegistry)) - ); - } - - function test_claimLatestOperatorRewards() public { - uint256 initialBalance = operatorAddress.balance; - - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - - vm.prank(operatorAddress); - vm.expectEmit(true, true, true, true); - emit RewardsClaimedForIndex(operatorAddress, 2, thirdOperatorPoints, thirdOperatorPoints); - - serviceManager.claimLatestOperatorRewards( - operatorSetId, thirdOperatorPoints, numberOfLeaves, leafIndex, thirdValidProof - ); - - assertEq( - operatorAddress.balance, - initialBalance + thirdOperatorPoints, - "Operator should receive correct rewards" - ); - } - - function test_claimLatestOperatorRewards_NoRewardsRegistry() public { - uint32 invalidSetId = 999; - - vm.prank(operatorAddress); - vm.expectRevert( - abi.encodeWithSelector(IServiceManagerErrors.NoRewardsRegistryForOperatorSet.selector) - ); - - serviceManager.claimLatestOperatorRewards( - invalidSetId, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - } - - function test_claimLatestOperatorRewards_AlreadyClaimed() public { - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - - // First claim (uses latest merkle root - index 2) - vm.prank(operatorAddress); - serviceManager.claimLatestOperatorRewards( - operatorSetId, thirdOperatorPoints, numberOfLeaves, leafIndex, thirdValidProof - ); - - // Second claim should fail - vm.prank(operatorAddress); - vm.expectRevert( - abi.encodeWithSelector(IRewardsRegistryErrors.RewardsAlreadyClaimedForIndex.selector) - ); - - serviceManager.claimLatestOperatorRewards( - operatorSetId, thirdOperatorPoints, numberOfLeaves, leafIndex, thirdValidProof - ); - } - - function test_claimOperatorRewards() public { - uint256 initialBalance = operatorAddress.balance; - - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - - vm.prank(operatorAddress); - vm.expectEmit(true, true, true, true); - emit RewardsClaimedForIndex(operatorAddress, 0, operatorPoints, operatorPoints); - - serviceManager.claimOperatorRewards( - operatorSetId, 0, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - - assertEq( - operatorAddress.balance, - initialBalance + operatorPoints, - "Operator should receive correct rewards" - ); - } - - function test_claimOperatorRewards_DifferentIndices() public { - uint256 initialBalance = operatorAddress.balance; - - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - - // Claim from index 1 (second merkle root) - vm.prank(operatorAddress); - serviceManager.claimOperatorRewards( - operatorSetId, 1, secondOperatorPoints, numberOfLeaves, leafIndex, secondValidProof - ); - - assertEq( - operatorAddress.balance, - initialBalance + secondOperatorPoints, - "Operator should receive rewards from second root" - ); - - // Claim from index 2 (third merkle root) - vm.prank(operatorAddress); - serviceManager.claimOperatorRewards( - operatorSetId, 2, thirdOperatorPoints, numberOfLeaves, leafIndex, thirdValidProof - ); - - assertEq( - operatorAddress.balance, - initialBalance + secondOperatorPoints + thirdOperatorPoints, - "Operator should receive rewards from both roots" - ); - - // Verify claim status - assertFalse( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 0), "Index 0 should not be claimed" - ); - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 1), "Index 1 should be claimed" - ); - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 2), "Index 2 should be claimed" - ); - } - - function test_claimOperatorRewards_InvalidIndex() public { - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - - vm.prank(operatorAddress); - vm.expectRevert( - abi.encodeWithSelector(IRewardsRegistryErrors.InvalidMerkleRootIndex.selector) - ); - serviceManager.claimOperatorRewards( - operatorSetId, 999, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - } - - function test_claimOperatorRewards_AlreadyClaimed() public { - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - - // First claim - vm.prank(operatorAddress); - serviceManager.claimOperatorRewards( - operatorSetId, 0, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - - // Second claim should fail - vm.prank(operatorAddress); - vm.expectRevert( - abi.encodeWithSelector(IRewardsRegistryErrors.RewardsAlreadyClaimedForIndex.selector) - ); - serviceManager.claimOperatorRewards( - operatorSetId, - 0, - operatorPoints, - 2, // numberOfLeaves (operator + sibling) - 0, // leafIndex (assuming operator leaf comes first) - validProof - ); - } - - function test_claimOperatorRewardsBatch() public { - // Test claiming from multiple different merkle root indices - uint256[] memory rootIndices = new uint256[](3); - rootIndices[0] = 0; // First merkle root - rootIndices[1] = 1; // Second merkle root - rootIndices[2] = 2; // Third merkle root - - uint256[] memory points = new uint256[](3); - points[0] = operatorPoints; - points[1] = secondOperatorPoints; - points[2] = thirdOperatorPoints; - - bytes32[][] memory proofs = new bytes32[][](3); - proofs[0] = validProof; - proofs[1] = secondValidProof; - proofs[2] = thirdValidProof; - - uint256 expectedTotalRewards = operatorPoints + secondOperatorPoints + thirdOperatorPoints; - uint256 initialBalance = operatorAddress.balance; - - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - - vm.prank(operatorAddress); - vm.expectEmit(true, true, true, true); - emit RewardsBatchClaimedForIndices( - operatorAddress, rootIndices, points, expectedTotalRewards - ); - - uint256[] memory widths = new uint256[](3); - widths[0] = 2; - widths[1] = 2; - widths[2] = 2; - uint256[] memory leafIdxs = new uint256[](3); - leafIdxs[0] = 0; - leafIdxs[1] = 0; - leafIdxs[2] = 0; - - serviceManager.claimOperatorRewardsBatch( - operatorSetId, rootIndices, points, widths, leafIdxs, proofs - ); - - // Verify final balance includes all rewards - assertEq( - operatorAddress.balance, - initialBalance + expectedTotalRewards, - "Operator should receive rewards from all three claims" - ); - - // Verify all indices are now claimed - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 0), - "Operator should have claimed from index 0" - ); - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 1), - "Operator should have claimed from index 1" - ); - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 2), - "Operator should have claimed from index 2" - ); - } - - function test_claimOperatorRewardsBatch_PartialBatch() public { - // Test claiming from only some of the available merkle roots - uint256[] memory rootIndices = new uint256[](2); - rootIndices[0] = 0; // First merkle root - rootIndices[1] = 2; // Third merkle root (skipping second) - - uint256[] memory points = new uint256[](2); - points[0] = operatorPoints; - points[1] = thirdOperatorPoints; - - bytes32[][] memory proofs = new bytes32[][](2); - proofs[0] = validProof; - proofs[1] = thirdValidProof; - - uint256 expectedTotalRewards = operatorPoints + thirdOperatorPoints; - uint256 initialBalance = operatorAddress.balance; - - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - - vm.prank(operatorAddress); - uint256[] memory widths2 = new uint256[](2); - widths2[0] = 2; - widths2[1] = 2; - uint256[] memory leafIdxs2 = new uint256[](2); - leafIdxs2[0] = 0; - leafIdxs2[1] = 0; - serviceManager.claimOperatorRewardsBatch( - operatorSetId, rootIndices, points, widths2, leafIdxs2, proofs - ); - - // Verify balance and claim status - assertEq( - operatorAddress.balance, - initialBalance + expectedTotalRewards, - "Operator should receive rewards from claimed indices" - ); - - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 0), - "Operator should have claimed from index 0" - ); - assertFalse( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 1), - "Operator should NOT have claimed from index 1" - ); - assertTrue( - rewardsRegistry.hasClaimedByIndex(operatorAddress, 2), - "Operator should have claimed from index 2" - ); - } - - function test_claimOperatorRewardsBatch_ArrayLengthMismatch() public { - uint256[] memory rootIndices = new uint256[](2); - uint256[] memory points = new uint256[](1); // Wrong length - bytes32[][] memory proofs = new bytes32[][](2); - - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - - vm.prank(operatorAddress); - vm.expectRevert(abi.encodeWithSelector(IRewardsRegistryErrors.ArrayLengthMismatch.selector)); - - uint256[] memory numLeaves = new uint256[](3); - numLeaves[0] = 2; - numLeaves[1] = 2; - numLeaves[2] = 2; - - uint256[] memory leafIndices = new uint256[](3); - leafIndices[0] = 0; - leafIndices[1] = 0; - leafIndices[2] = 0; - - serviceManager.claimOperatorRewardsBatch( - operatorSetId, rootIndices, points, numLeaves, leafIndices, proofs - ); - } - - function test_claimOperatorRewardsBatch_AlreadyClaimedIndex() public { - // First claim from index 1 - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - - vm.prank(operatorAddress); - serviceManager.claimOperatorRewards( - operatorSetId, - 1, - secondOperatorPoints, - 2, // numberOfLeaves (operator + sibling) - 0, // leafIndex (assuming operator leaf comes first) - secondValidProof - ); - - // Now try to batch claim including the already claimed index 1 - uint256[] memory rootIndices = new uint256[](2); - rootIndices[0] = 0; - rootIndices[1] = 1; // Already claimed - - uint256[] memory points = new uint256[](2); - points[0] = operatorPoints; - points[1] = secondOperatorPoints; - - bytes32[][] memory proofs = new bytes32[][](2); - proofs[0] = validProof; - proofs[1] = secondValidProof; - - vm.prank(operatorAddress); - vm.expectRevert( - abi.encodeWithSelector(IRewardsRegistryErrors.RewardsAlreadyClaimedForIndex.selector) - ); - - uint256[] memory numLeaves = new uint256[](2); - numLeaves[0] = 2; - numLeaves[1] = 2; - - uint256[] memory leafIndices = new uint256[](2); - leafIndices[0] = 0; - leafIndices[1] = 0; - - serviceManager.claimOperatorRewardsBatch( - operatorSetId, rootIndices, points, numLeaves, leafIndices, proofs - ); - } - - function test_claimOperatorRewardsBatch_EmptyBatch() public { - uint256[] memory rootIndices = new uint256[](0); - uint256[] memory points = new uint256[](0); - bytes32[][] memory proofs = new bytes32[][](0); - - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - - uint256 initialBalance = operatorAddress.balance; - - uint256[] memory numLeaves = new uint256[](0); - uint256[] memory leafIndices = new uint256[](0); - - vm.prank(operatorAddress); - serviceManager.claimOperatorRewardsBatch( - operatorSetId, rootIndices, points, numLeaves, leafIndices, proofs - ); - - // Balance should remain unchanged - assertEq( - operatorAddress.balance, - initialBalance, - "Balance should remain unchanged for empty batch" - ); - } - - function test_integration_multipleOperatorSets() public { - // Set up a second operator set with a different registry - uint32 secondOperatorSetId = 2; - RewardsRegistry secondRegistry = - new RewardsRegistry(address(serviceManager), mockRewardsAgent); - - // Set up the second registry - vm.prank(avsOwner); - serviceManager.setRewardsRegistry( - secondOperatorSetId, IRewardsRegistry(address(secondRegistry)) - ); - - // Create a different merkle root for the second registry using SCALE encoding - bytes memory secondLeafPreimage = - abi.encodePacked(operatorAddress, ScaleCodec.encodeU32(uint32(operatorPoints))); - bytes32 secondLeaf = keccak256(secondLeafPreimage); - - bytes memory secondSiblingPreimage = - abi.encodePacked(address(0x4444), ScaleCodec.encodeU32(uint32(80))); - bytes32 secondSiblingLeaf = keccak256(secondSiblingPreimage); - - // For sorted-hash merkle proof, smaller hash goes first - bytes32 secondRegistryMerkleRoot = secondLeaf < secondSiblingLeaf - ? keccak256(abi.encodePacked(secondLeaf, secondSiblingLeaf)) - : keccak256(abi.encodePacked(secondSiblingLeaf, secondLeaf)); - - // Set the merkle root in the second registry - vm.prank(mockRewardsAgent); - secondRegistry.updateRewardsMerkleRoot(secondRegistryMerkleRoot); - - // Fund the second registry - vm.deal(address(secondRegistry), 1000 ether); - - // Create proof for second registry - bytes32[] memory secondProof = new bytes32[](1); - secondProof[0] = secondSiblingLeaf; - - // Claim from first registry (uses latest merkle root - index 2) - uint256 initialBalance = operatorAddress.balance; - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - vm.prank(operatorAddress); - serviceManager.claimLatestOperatorRewards( - operatorSetId, thirdOperatorPoints, numberOfLeaves, leafIndex, thirdValidProof - ); // Use latest root - - // Verify balance after first claim - assertEq( - operatorAddress.balance, - initialBalance + thirdOperatorPoints, - "Operator should receive correct rewards from first registry" - ); - - // Claim from second registry - uint256 balanceAfterFirstClaim = operatorAddress.balance; - vm.prank(operatorAddress); - serviceManager.claimLatestOperatorRewards( - secondOperatorSetId, operatorPoints, numberOfLeaves, leafIndex, secondProof - ); - - // Verify balance after second claim - assertEq( - operatorAddress.balance, - balanceAfterFirstClaim + operatorPoints, - "Operator should receive correct rewards from second registry" - ); - } - - function test_claimLatestOperatorRewards_NotInOperatorSet() public { - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(false) // Operator is NOT in the set - ); - - vm.prank(operatorAddress); - vm.expectRevert( - abi.encodeWithSelector(IServiceManagerErrors.OperatorNotInOperatorSet.selector) - ); - serviceManager.claimLatestOperatorRewards( - operatorSetId, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - } - - function test_claimOperatorRewards_NotInOperatorSet() public { - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(false) // Operator is NOT in the set - ); - - vm.prank(operatorAddress); - vm.expectRevert( - abi.encodeWithSelector(IServiceManagerErrors.OperatorNotInOperatorSet.selector) - ); - serviceManager.claimOperatorRewards( - operatorSetId, 0, operatorPoints, numberOfLeaves, leafIndex, validProof - ); - } - - function test_claimOperatorRewardsBatch_NotInOperatorSet() public { - uint256[] memory rootIndices = new uint256[](1); - rootIndices[0] = 0; - uint256[] memory points = new uint256[](1); - points[0] = operatorPoints; - bytes32[][] memory proofs = new bytes32[][](1); - proofs[0] = validProof; - - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(false) // Operator is NOT in the set - ); - - vm.prank(operatorAddress); - vm.expectRevert( - abi.encodeWithSelector(IServiceManagerErrors.OperatorNotInOperatorSet.selector) - ); - uint256[] memory widths3 = new uint256[](1); - widths3[0] = 2; - uint256[] memory leafIdxs3 = new uint256[](1); - leafIdxs3[0] = 0; - serviceManager.claimOperatorRewardsBatch( - operatorSetId, rootIndices, points, widths3, leafIdxs3, proofs - ); - } -} diff --git a/contracts/test/SnowbridgeIntegration.t.sol b/contracts/test/SnowbridgeIntegration.t.sol index 70ee322b..c120dc60 100644 --- a/contracts/test/SnowbridgeIntegration.t.sol +++ b/contracts/test/SnowbridgeIntegration.t.sol @@ -3,38 +3,14 @@ pragma solidity ^0.8.13; /* solhint-disable func-name-mixedcase */ -import {InboundMessageV2} from "snowbridge/src/Types.sol"; -import {CommandV2, CommandKind, IGatewayV2} from "snowbridge/src/Types.sol"; -import { - CallContractParams, - Payload, - Message, - MessageKind, - Asset, - AssetKind -} from "snowbridge/src/v2/Types.sol"; -import {BeefyVerification} from "snowbridge/src/BeefyVerification.sol"; -import {BeefyClient} from "snowbridge/src/BeefyClient.sol"; -import { - IAllocationManager -} from "eigenlayer-contracts/src/contracts/interfaces/IAllocationManager.sol"; +import {IGatewayV2} from "snowbridge/src/Types.sol"; +import {Payload, Message, MessageKind, Asset} from "snowbridge/src/v2/Types.sol"; import {OperatorSet} from "eigenlayer-contracts/src/contracts/libraries/OperatorSetLib.sol"; -import {MerkleUtils} from "../src/libraries/MerkleUtils.sol"; -import { - IRewardsRegistryEvents, - IRewardsRegistryErrors -} from "../src/interfaces/IRewardsRegistry.sol"; import {SnowbridgeAndAVSDeployer} from "./utils/SnowbridgeAndAVSDeployer.sol"; -import {ScaleCodec} from "snowbridge/src/utils/ScaleCodec.sol"; import "forge-std/Test.sol"; contract SnowbridgeIntegrationTest is SnowbridgeAndAVSDeployer { - // Storage variables to reduce stack depth - uint128[] internal _validatorPoints; - address[] internal _validatorAddresses; - bytes32 internal _validatorPointsMerkleRoot; - function setUp() public { _deployMockAllContracts(); } @@ -48,131 +24,6 @@ contract SnowbridgeIntegrationTest is SnowbridgeAndAVSDeployer { } } - function test_constructor() public view { - assertEq( - rewardsRegistry.rewardsAgent(), - address(rewardsAgent), - "Rewards agent address should be set correctly" - ); - - assertEq( - gateway.agentOf(REWARDS_MESSAGE_ORIGIN), - address(rewardsAgent), - "Rewards agent should be set correctly" - ); - } - - function test_newRewardsMessage() public { - // Setup validator data. - _setupValidatorData(); - - // Create and submit the rewards message. - InboundMessageV2 memory updateRewardsMessage = _createRewardsMessage(); - - // Build messages merkle tree - // We want a proof of the first message, i.e. the actual rewards message - bytes32[] memory messagesProof = - _buildMessagesProofForGoodRewardsMessage(updateRewardsMessage); - - // Create BEEFY proof. - BeefyVerification.Proof memory beefyProof = _createBeefyProof(); - - // This is to mock that the `BeefyClient.verifyMMRLeafProof` function returns true - // despite the fact that we never registered a BEEFY leaf with this message in the - // `BeefyClient` contract. - _mockBeefyVerification(); - - // Submit message to Gateway. - // We don't care about the rewardAddress that will get the Snowbridge rewards for relaying this message. - bytes32 rewardAddress = keccak256(abi.encodePacked("rewardAddress")); - vm.expectEmit(address(gateway)); - emit IGatewayV2.InboundMessageDispatched(0, bytes32(0), true, rewardAddress); - gateway.v2_submit(updateRewardsMessage, messagesProof, beefyProof, rewardAddress); - - // Fund the RewardsRegistry to be able to distribute rewards - vm.deal(address(rewardsRegistry), 1000000 ether); - - // Build proof for the first validator to claim rewards. - bytes32[] memory rewardsProofFirstValidator = - _buildValidatorPointsProof(_validatorAddresses, _validatorPoints, 0); - - // Claim rewards for the first validator. - vm.mockCall( - address(allocationManager), - abi.encodeWithSelector(IAllocationManager.isMemberOfOperatorSet.selector), - abi.encode(true) - ); - vm.startPrank(_validatorAddresses[0]); - vm.expectEmit(address(rewardsRegistry)); - emit IRewardsRegistryEvents.RewardsClaimedForIndex( - _validatorAddresses[0], 0, _validatorPoints[0], uint256(_validatorPoints[0]) - ); - serviceManager.claimLatestOperatorRewards( - 0, _validatorPoints[0], 10, 0, rewardsProofFirstValidator - ); - vm.stopPrank(); - - // Check that the validator has received the rewards. - assertEq( - address(_validatorAddresses[0]).balance, - _validatorPoints[0], - "Validator should receive rewards" - ); - - // Build proof for the last validator to claim rewards. - bytes32[] memory rewardsProofLastValidator = - _buildValidatorPointsProof(_validatorAddresses, _validatorPoints, 9); - - // Claim rewards for the last validator. - vm.startPrank(_validatorAddresses[9]); - vm.expectEmit(address(rewardsRegistry)); - emit IRewardsRegistryEvents.RewardsClaimedForIndex( - _validatorAddresses[9], 0, _validatorPoints[9], uint256(_validatorPoints[9]) - ); - serviceManager.claimLatestOperatorRewards( - 0, _validatorPoints[9], 10, 9, rewardsProofLastValidator - ); - vm.stopPrank(); - - // Check that the last validator has received the rewards. - assertEq( - address(_validatorAddresses[9]).balance, - _validatorPoints[9], - "Last validator should receive rewards" - ); - } - - function test_newRewardsMessage_OnlyRewardsAgent() public { - // Setup validator data. - _setupValidatorData(); - - // Create and submit the rewards message. - InboundMessageV2 memory updateRewardsMessage = _createRewardsMessage(); - - // Build messages merkle tree. - // We want a proof of the third message, i.e. the attempt at setting the new rewards root - // with a wrong origin. - (InboundMessageV2 memory badUpdateRewardsMessage, bytes32[] memory messagesProof) = - _buildMessagesProofForBadRewardsMessage(updateRewardsMessage); - - // Create BEEFY proof. - BeefyVerification.Proof memory beefyProof = _createBeefyProof(); - - // This is to mock that the `BeefyClient.verifyMMRLeafProof` function returns true - // despite the fact that we never registered a BEEFY leaf with this message in the - // `BeefyClient` contract. - _mockBeefyVerification(); - - // Submit message to Gateway. - // We don't care about the rewardAddress that will get the Snowbridge rewards for relaying this message. - // We expect this to fail in the RewardsRegistry contract because the Agent trying to - // set the new rewards root is not the authorised Agent. Therefore there should be an - // event emitted by the Gateway saying that the message was dispatched but it failed. - bytes32 rewardAddress = keccak256(abi.encodePacked("rewardAddress")); - emit IGatewayV2.InboundMessageDispatched(0, bytes32(0), false, rewardAddress); - gateway.v2_submit(badUpdateRewardsMessage, messagesProof, beefyProof, rewardAddress); - } - function test_sendNewValidatorsSetMessage() public { // Check that the current validators signed as operators have a registered address for the DataHaven solochain. address[] memory currentOperators = allocationManager.getMembers( @@ -205,202 +56,4 @@ contract SnowbridgeIntegrationTest is SnowbridgeAndAVSDeployer { cheats.prank(avsOwner); serviceManager.sendNewValidatorSet{value: 2 ether}(1 ether, 1 ether); } - - function _setupValidatorData() internal { - // Build validator points and addresses. - _validatorPoints = new uint128[](10); - _validatorPoints[0] = uint128(1111); - _validatorPoints[1] = uint128(2222); - _validatorPoints[2] = uint128(3333); - _validatorPoints[3] = uint128(4444); - _validatorPoints[4] = uint128(5555); - _validatorPoints[5] = uint128(6666); - _validatorPoints[6] = uint128(7777); - _validatorPoints[7] = uint128(8888); - _validatorPoints[8] = uint128(9999); - _validatorPoints[9] = uint128(101010); - - _validatorAddresses = new address[](10); - _validatorAddresses[0] = address(0xFFFF1); - _validatorAddresses[1] = address(0xFFFF2); - _validatorAddresses[2] = address(0xFFFF3); - _validatorAddresses[3] = address(0xFFFF4); - _validatorAddresses[4] = address(0xFFFF5); - _validatorAddresses[5] = address(0xFFFF6); - _validatorAddresses[6] = address(0xFFFF7); - _validatorAddresses[7] = address(0xFFFF8); - _validatorAddresses[8] = address(0xFFFF9); - _validatorAddresses[9] = address(0xFFFFA); - - _validatorPointsMerkleRoot = - _buildValidatorPointsMerkleTree(_validatorAddresses, _validatorPoints); - } - - function _createRewardsMessage() internal view returns (InboundMessageV2 memory) { - CallContractParams memory updateRewardsCommandParams = CallContractParams({ - target: address(rewardsRegistry), - data: abi.encodeWithSelector( - bytes4(keccak256("updateRewardsMerkleRoot(bytes32)")), _validatorPointsMerkleRoot - ), - value: 0 - }); - - CommandV2 memory updateRewardsCommand = CommandV2({ - kind: CommandKind.CallContract, - gas: 1000000, - payload: abi.encode(updateRewardsCommandParams) - }); - - CommandV2[] memory commands = new CommandV2[](1); - commands[0] = updateRewardsCommand; - - return InboundMessageV2({ - origin: REWARDS_MESSAGE_ORIGIN, nonce: 0, topic: bytes32(0), commands: commands - }); - } - - function _buildMessagesProofForGoodRewardsMessage( - InboundMessageV2 memory updateRewardsMessage - ) internal pure returns (bytes32[] memory) { - InboundMessageV2[] memory messages = new InboundMessageV2[](3); - // The first message is the actual rewards message that we want to submit and then claim. - messages[0] = updateRewardsMessage; - - // The second message is a dummy message with a different origin. - messages[1] = InboundMessageV2({ - origin: WRONG_MESSAGE_ORIGIN, nonce: 1, topic: bytes32(0), commands: new CommandV2[](0) - }); - - // The third message is an attempt at setting the new rewards root, but with a wrong origin - // i.e. not the origin of the authorised Agent. - messages[2] = InboundMessageV2({ - origin: WRONG_MESSAGE_ORIGIN, - nonce: 2, - topic: bytes32(0), - commands: updateRewardsMessage.commands - }); - - return _buildMessagesProof(messages, 0); - } - - function _buildMessagesProofForBadRewardsMessage( - InboundMessageV2 memory goodUpdateRewardsMessage - ) internal pure returns (InboundMessageV2 memory, bytes32[] memory) { - InboundMessageV2[] memory messages = new InboundMessageV2[](3); - // The first message is the actual rewards message that we want to submit and then claim. - messages[0] = goodUpdateRewardsMessage; - - // The second message is a dummy message with a different origin. - messages[1] = InboundMessageV2({ - origin: WRONG_MESSAGE_ORIGIN, nonce: 1, topic: bytes32(0), commands: new CommandV2[](0) - }); - - // The third message is an attempt at setting the new rewards root, but with a wrong origin - // i.e. not the origin of the authorised Agent. - messages[2] = InboundMessageV2({ - origin: WRONG_MESSAGE_ORIGIN, - nonce: 2, - topic: bytes32(0), - commands: goodUpdateRewardsMessage.commands - }); - - return (messages[2], _buildMessagesProof(messages, 2)); - } - - function _createBeefyProof() internal pure returns (BeefyVerification.Proof memory) { - // Build BEEFY partial leaf. - BeefyVerification.MMRLeafPartial memory partialLeaf = BeefyVerification.MMRLeafPartial({ - version: 0, - parentNumber: 18122022, - parentHash: keccak256(abi.encode(18122022)), - nextAuthoritySetID: 18122022, - nextAuthoritySetLen: 10, - nextAuthoritySetRoot: keccak256(abi.encode(18122022)) - }); - - // Build BEEFY proof. - // Any non-empty BEEFY proof will do for the mock. - bytes32[] memory proof = new bytes32[](1); - proof[0] = keccak256(abi.encode(18122022)); - - return - BeefyVerification.Proof({leafPartial: partialLeaf, leafProof: proof, leafProofOrder: 0}); - } - - function _mockBeefyVerification() internal { - // Mock the BeefyVerification.verifyBeefyMMRLeaf to always return true - bytes memory encodedReturn = abi.encode(true); - - // Create the function selector for verifyBeefyMMRLeaf - bytes4 selector = BeefyClient.verifyMMRLeafProof.selector; - - // Mock any call to this function with any parameters to return true - vm.mockCall(address(beefyClient), abi.encodeWithSelector(selector), encodedReturn); - } - - function _buildValidatorPointsMerkleTree( - address[] memory validators, - uint128[] memory points - ) internal pure returns (bytes32) { - require( - validators.length == points.length, - "Validators and points arrays must be of the same length" - ); - - bytes32[] memory leaves = new bytes32[](validators.length); - for (uint256 i = 0; i < validators.length; i++) { - // Use SCALE encoding for Substrate compatibility - bytes memory preimage = - abi.encodePacked(validators[i], ScaleCodec.encodeU32(uint32(points[i]))); - leaves[i] = keccak256(preimage); - } - - // We calculate the merkle root without sorting for Substrate positional merkle tree. - return MerkleUtils.calculateMerkleRoot(leaves, false); - } - - function _buildValidatorPointsProof( - address[] memory validators, - uint128[] memory points, - uint256 leafIndex - ) internal pure returns (bytes32[] memory) { - require( - validators.length == points.length, - "Validators and points arrays must be of the same length" - ); - - bytes32[] memory leaves = new bytes32[](validators.length); - for (uint256 i = 0; i < validators.length; i++) { - // Use SCALE encoding for Substrate compatibility - bytes memory preimage = - abi.encodePacked(validators[i], ScaleCodec.encodeU32(uint32(points[i]))); - leaves[i] = keccak256(preimage); - } - - return MerkleUtils.buildMerkleProof(leaves, leafIndex, false); - } - - function _buildMessagesMerkleTree( - InboundMessageV2[] memory messages - ) internal pure returns (bytes32) { - bytes32[] memory leaves = new bytes32[](messages.length); - for (uint256 i = 0; i < messages.length; i++) { - leaves[i] = keccak256(abi.encode(messages[i])); - } - - // We calculate the merkle root by sorting the pair before hashing (See Open Zeppelin Merkle Tree lib). - return MerkleUtils.calculateMerkleRoot(leaves, true); - } - - function _buildMessagesProof( - InboundMessageV2[] memory messages, - uint256 leafIndex - ) internal pure returns (bytes32[] memory) { - bytes32[] memory leaves = new bytes32[](messages.length); - for (uint256 i = 0; i < messages.length; i++) { - leaves[i] = keccak256(abi.encode(messages[i])); - } - - return MerkleUtils.buildMerkleProof(leaves, leafIndex, true); - } } diff --git a/contracts/test/mocks/ServiceManagerMock.sol b/contracts/test/mocks/ServiceManagerMock.sol index c7a98c86..6b696731 100644 --- a/contracts/test/mocks/ServiceManagerMock.sol +++ b/contracts/test/mocks/ServiceManagerMock.sol @@ -10,7 +10,6 @@ import { import { IAllocationManager } from "eigenlayer-contracts/src/contracts/interfaces/IAllocationManager.sol"; -import {IRewardsRegistry} from "../../src/interfaces/IRewardsRegistry.sol"; import {ServiceManagerBase} from "../../src/middleware/ServiceManagerBase.sol"; @@ -35,17 +34,6 @@ contract ServiceManagerMock is ServiceManagerBase { __ServiceManagerBase_init(initialOwner, rewardsInitiator); } - /** - * @notice Get the rewards registry for an operator set (exposing for testing) - * @param operatorSetId The ID of the operator set - * @return The rewards registry for the operator set - */ - function getOperatorSetRewardsRegistry( - uint32 operatorSetId - ) external view returns (IRewardsRegistry) { - return operatorSetToRewardsRegistry[operatorSetId]; - } - /** * @notice Override the internal _ensureOperatorIsPartOfOperatorSet function to simplify testing * @param operator The operator address diff --git a/contracts/test/utils/AVSDeployer.sol b/contracts/test/utils/AVSDeployer.sol index c5df92ca..be16353a 100644 --- a/contracts/test/utils/AVSDeployer.sol +++ b/contracts/test/utils/AVSDeployer.sol @@ -30,7 +30,6 @@ import {StrategyManager} from "eigenlayer-contracts/src/contracts/core/StrategyM import {IEigenPodManager} from "eigenlayer-contracts/src/contracts/interfaces/IEigenPodManager.sol"; import {ERC20FixedSupply} from "./ERC20FixedSupply.sol"; import {IServiceManager} from "../../src/interfaces/IServiceManager.sol"; -import {RewardsRegistry} from "../../src/middleware/RewardsRegistry.sol"; import {DataHavenServiceManager} from "../../src/DataHavenServiceManager.sol"; // Mocks import {RewardsCoordinatorMock} from "../mocks/RewardsCoordinatorMock.sol"; @@ -50,15 +49,11 @@ contract AVSDeployer is Test { // AVS contracts DataHavenServiceManager public serviceManager; DataHavenServiceManager public serviceManagerImplementation; - RewardsRegistry public rewardsRegistry; address public vetoCommitteeMember = address(uint160(uint256(keccak256("vetoCommitteeMember")))); uint32 public vetoWindowBlocks = 100; // 100 blocks veto window for tests - // RewardsRegistry roles and parameters - address public mockRewardsAgent = address(uint160(uint256(keccak256("rewardsAgent")))); - // EigenLayer contracts StrategyManager public strategyManager; StrategyManager public strategyManagerImplementation; @@ -273,16 +268,6 @@ contract AVSDeployer is Test { ); cheats.stopPrank(); console.log("ServiceManager implementation deployed"); - - // Deploy the RewardsRegistry contract - cheats.prank(regularDeployer); - rewardsRegistry = new RewardsRegistry(address(serviceManager), mockRewardsAgent); - - // Set the rewards registry in the ServiceManager - cheats.prank(avsOwner); - serviceManager.setRewardsRegistry(0, rewardsRegistry); - - console.log("RewardsRegistry deployed and configured"); } function _setUpDefaultStrategiesAndMultipliers() internal virtual { diff --git a/contracts/test/utils/SnowbridgeAndAVSDeployer.sol b/contracts/test/utils/SnowbridgeAndAVSDeployer.sol index 42da525c..a449c44b 100644 --- a/contracts/test/utils/SnowbridgeAndAVSDeployer.sol +++ b/contracts/test/utils/SnowbridgeAndAVSDeployer.sol @@ -150,11 +150,6 @@ contract SnowbridgeAndAVSDeployer is AVSDeployer { console.log("Rewards agent deployed at", address(rewardsAgent)); - cheats.prank(avsOwner); - serviceManager.setRewardsAgent(0, address(rewardsAgent)); - - console.log("Rewards agent set for operator set 0"); - cheats.prank(regularDeployer); gateway.v2_createAgent(WRONG_MESSAGE_ORIGIN); diff --git a/operator/Cargo.lock b/operator/Cargo.lock index 9af03d3c..e8b615c0 100644 --- a/operator/Cargo.lock +++ b/operator/Cargo.lock @@ -2664,7 +2664,6 @@ dependencies = [ "pallet-external-validator-slashes", "pallet-external-validators", "pallet-external-validators-rewards", - "pallet-external-validators-rewards-runtime-api", "pallet-file-system", "pallet-file-system-runtime-api", "pallet-grandpa", @@ -2959,7 +2958,6 @@ dependencies = [ "pallet-external-validator-slashes", "pallet-external-validators", "pallet-external-validators-rewards", - "pallet-external-validators-rewards-runtime-api", "pallet-file-system", "pallet-file-system-runtime-api", "pallet-grandpa", @@ -3111,7 +3109,6 @@ dependencies = [ "pallet-external-validator-slashes", "pallet-external-validators", "pallet-external-validators-rewards", - "pallet-external-validators-rewards-runtime-api", "pallet-file-system", "pallet-file-system-runtime-api", "pallet-grandpa", @@ -9124,7 +9121,6 @@ dependencies = [ "parity-scale-codec", "scale-info", "snowbridge-core 0.12.0", - "snowbridge-merkle-tree", "snowbridge-outbound-queue-primitives", "sp-core", "sp-io", @@ -9133,16 +9129,6 @@ dependencies = [ "sp-std", ] -[[package]] -name = "pallet-external-validators-rewards-runtime-api" -version = "0.12.0" -dependencies = [ - "parity-scale-codec", - "snowbridge-merkle-tree", - "sp-api", - "sp-core", -] - [[package]] name = "pallet-fast-unstake" version = "38.1.0" diff --git a/operator/Cargo.toml b/operator/Cargo.toml index b4976e81..81fa3f40 100644 --- a/operator/Cargo.toml +++ b/operator/Cargo.toml @@ -42,7 +42,6 @@ pallet-evm-precompile-registry = { path = "./precompiles/precompile-registry", d pallet-external-validator-slashes = { path = "./pallets/external-validator-slashes", default-features = false } pallet-external-validators = { path = "./pallets/external-validators", default-features = false } pallet-external-validators-rewards = { path = "./pallets/external-validators-rewards", default-features = false } -pallet-external-validators-rewards-runtime-api = { path = "./pallets/external-validators-rewards/runtime-api", default-features = false } pallet-outbound-commitment-store = { path = "./pallets/outbound-commitment-store", default-features = false } # Crates.io (wasm) diff --git a/operator/pallets/external-validators-rewards/Cargo.toml b/operator/pallets/external-validators-rewards/Cargo.toml index 3cad27ed..aeaa7f32 100644 --- a/operator/pallets/external-validators-rewards/Cargo.toml +++ b/operator/pallets/external-validators-rewards/Cargo.toml @@ -32,7 +32,6 @@ pallet-external-validators = { workspace = true } pallet-session = { workspace = true, features = [ "historical" ] } snowbridge-core = { workspace = true } -snowbridge-merkle-tree = { workspace = true } snowbridge-outbound-queue-primitives = { workspace = true } [dev-dependencies] @@ -54,7 +53,6 @@ std = [ "parity-scale-codec/std", "scale-info/std", "snowbridge-core/std", - "snowbridge-merkle-tree/std", "snowbridge-outbound-queue-primitives/std", "sp-core/std", "sp-io/std", diff --git a/operator/pallets/external-validators-rewards/runtime-api/Cargo.toml b/operator/pallets/external-validators-rewards/runtime-api/Cargo.toml deleted file mode 100644 index bb0f54ab..00000000 --- a/operator/pallets/external-validators-rewards/runtime-api/Cargo.toml +++ /dev/null @@ -1,28 +0,0 @@ -[package] -name = "pallet-external-validators-rewards-runtime-api" -authors = { workspace = true } -description = "Runtime API definition of pallet-external-validators-rewards" -edition = "2021" -license = "GPL-3.0-only" -version = { workspace = true } - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -parity-scale-codec = { workspace = true } -snowbridge-merkle-tree = { workspace = true } -sp-api = { workspace = true } -sp-core = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "parity-scale-codec/std", - "snowbridge-merkle-tree/std", - "sp-api/std", - "sp-core/std", -] diff --git a/operator/pallets/external-validators-rewards/runtime-api/src/lib.rs b/operator/pallets/external-validators-rewards/runtime-api/src/lib.rs deleted file mode 100644 index 713d6078..00000000 --- a/operator/pallets/external-validators-rewards/runtime-api/src/lib.rs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! Runtime API for External Validators Rewards pallet - -#![cfg_attr(not(feature = "std"), no_std)] - -use snowbridge_merkle_tree::MerkleProof; - -sp_api::decl_runtime_apis! { - pub trait ExternalValidatorsRewardsApi - where - AccountId: parity_scale_codec::Codec, - EraIndex: parity_scale_codec::Codec, - { - fn generate_rewards_merkle_proof(account_id: AccountId, era_index: EraIndex) -> Option; - fn verify_rewards_merkle_proof(merkle_proof: MerkleProof) -> bool; - } -} diff --git a/operator/pallets/external-validators-rewards/src/lib.rs b/operator/pallets/external-validators-rewards/src/lib.rs index 473c0038..278f402f 100644 --- a/operator/pallets/external-validators-rewards/src/lib.rs +++ b/operator/pallets/external-validators-rewards/src/lib.rs @@ -38,7 +38,6 @@ use { frame_support::traits::{Get, ValidatorSet}, pallet_external_validators::traits::{ExternalIndexProvider, OnEraEnd, OnEraStart}, parity_scale_codec::{Decode, Encode}, - snowbridge_merkle_tree::{merkle_proof, merkle_root, verify_proof, MerkleProof}, sp_core::{H160, H256}, sp_runtime::{ traits::{Hash, Zero}, @@ -185,7 +184,6 @@ pub mod pallet { era_index: EraIndex, total_points: u128, inflation_amount: u128, - rewards_merkle_root: H256, }, } @@ -197,58 +195,26 @@ pub mod pallet { } impl EraRewardPoints { - // Helper function used to generate the following utils: - // - rewards_merkle_root: merkle root corresponding [(validatorId, rewardPoints)] - // for the era_index specified. - // - leaves: that were used to generate the previous merkle root. - // - leaf_index: index of the validatorId's leaf in the previous leaves array (if any). - // - total_points: number of total points of the era_index specified. - // - individual_points: (address, points) tuples for each validator. - // - inflation_amount: total inflation tokens to distribute. - // - era_start_timestamp: timestamp when the era started (seconds since Unix epoch). - pub fn generate_era_rewards_utils>( + /// Generate utils needed for EigenLayer rewards submission: + /// - total_points: number of total points of the era_index specified. + /// - individual_points: (address, points) tuples for each validator. + /// - inflation_amount: total inflation tokens to distribute. + /// - era_start_timestamp: timestamp when the era started (seconds since Unix epoch). + pub fn generate_era_rewards_utils( &self, era_index: EraIndex, - maybe_account_id_check: Option, inflation_amount: u128, era_start_timestamp: u32, ) -> Option { - let mut leaves = Vec::with_capacity(self.individual.len()); - let mut leaf_index = None; let mut individual_points = Vec::with_capacity(self.individual.len()); - if let Some(account) = &maybe_account_id_check { - if !self.individual.contains_key(account) { - log::error!( - target: "ext_validators_rewards", - "AccountId {:?} not found for era {:?}!", - account, - era_index - ); - return None; - } - } - - for (index, (account_id, reward_points)) in self.individual.iter().enumerate() { - let encoded = (account_id, reward_points).encode(); - let hashed = ::hash(&encoded); - - leaves.push(hashed); - + for (account_id, reward_points) in self.individual.iter() { // Convert AccountId to H160 for EigenLayer rewards submission. // In DataHaven, AccountId is H160, so encode() produces exactly 20 bytes. individual_points .push((H160::from_slice(&account_id.encode()[..20]), *reward_points)); - - if let Some(ref check_account_id) = maybe_account_id_check { - if account_id == check_account_id { - leaf_index = Some(index as u64); - } - } } - let rewards_merkle_root = merkle_root::(leaves.iter().cloned()); - let total_points: u128 = individual_points.iter().map(|(_, pts)| *pts as u128).sum(); if total_points.is_zero() { @@ -258,9 +224,6 @@ pub mod pallet { Some(EraRewardsUtils { era_index, era_start_timestamp, - rewards_merkle_root, - leaves, - leaf_index, total_points, individual_points, inflation_amount, @@ -311,33 +274,6 @@ pub mod pallet { }) } - pub fn generate_rewards_merkle_proof( - account_id: T::AccountId, - era_index: EraIndex, - ) -> Option { - let era_rewards = RewardPointsForEra::::get(&era_index); - // Pass 0 for inflation_amount and era_start_timestamp as they're not needed for merkle proof generation - let utils = era_rewards.generate_era_rewards_utils::<::Hashing>( - era_index, - Some(account_id), - 0, - 0, - )?; - utils.leaf_index.map(|index| { - merkle_proof::<::Hashing, _>(utils.leaves.into_iter(), index) - }) - } - - pub fn verify_rewards_merkle_proof(merkle_proof: MerkleProof) -> bool { - verify_proof::<::Hashing, _, _>( - &merkle_proof.root, - merkle_proof.proof, - merkle_proof.number_of_leaves, - merkle_proof.leaf_index, - merkle_proof.leaf, - ) - } - /// Helper to build, validate and deliver an outbound message. /// Logs any error and returns None on failure. fn send_rewards_message(utils: &EraRewardsUtils) -> Option { @@ -696,13 +632,11 @@ pub mod pallet { // Generate era rewards utils with the scaled inflation amount. // This ensures the message to EigenLayer matches the actual minted amount. - let utils = match RewardPointsForEra::::get(&era_index) - .generate_era_rewards_utils::<::Hashing>( - era_index, - None, - scaled_inflation, - era_start_timestamp, - ) { + let utils = match RewardPointsForEra::::get(&era_index).generate_era_rewards_utils( + era_index, + scaled_inflation, + era_start_timestamp, + ) { Some(utils) => utils, None => { // Returns None when total_points is zero or no validators have rewards @@ -736,7 +670,6 @@ pub mod pallet { era_index, total_points: utils.total_points, inflation_amount: scaled_inflation, - rewards_merkle_root: utils.rewards_merkle_root, }); } } diff --git a/operator/pallets/external-validators-rewards/src/tests.rs b/operator/pallets/external-validators-rewards/src/tests.rs index b1f6a4d8..986c624c 100644 --- a/operator/pallets/external-validators-rewards/src/tests.rs +++ b/operator/pallets/external-validators-rewards/src/tests.rs @@ -138,7 +138,11 @@ fn test_on_era_end() { }); let points = vec![10u32, 30u32, 50u32]; let total_points: u32 = points.iter().cloned().sum(); - let accounts = vec![H160::from_low_u64_be(1), H160::from_low_u64_be(3), H160::from_low_u64_be(5)]; + let accounts = vec![ + H160::from_low_u64_be(1), + H160::from_low_u64_be(3), + H160::from_low_u64_be(5), + ]; let accounts_points: Vec<_> = accounts .iter() .cloned() @@ -154,18 +158,17 @@ fn test_on_era_end() { ExternalValidatorsRewards::on_era_end(1); let era_rewards = pallet_external_validators_rewards::RewardPointsForEra::::get(1); - let inflation = ::EraInflationProvider::get(); - // Use 0 for era_start_timestamp in tests since we're only checking merkle root - let rewards_utils = era_rewards.generate_era_rewards_utils::<::Hashing>(1, None, inflation, 0); - - let root = rewards_utils.unwrap().rewards_merkle_root; + let inflation = + ::EraInflationProvider::get(); + // Use 0 for era_start_timestamp in tests + let rewards_utils = era_rewards.generate_era_rewards_utils(1, inflation, 0); + assert!(rewards_utils.is_some()); System::assert_last_event(RuntimeEvent::ExternalValidatorsRewards( crate::Event::RewardsMessageSent { message_id: Default::default(), era_index: 1, total_points: total_points as u128, inflation_amount: inflation, - rewards_merkle_root: root, }, )); }) @@ -184,8 +187,11 @@ fn test_on_era_end_with_zero_inflation() { mock.era_inflation = Some(0); }); let points = vec![10u32, 30u32, 50u32]; - let total_points: u32 = points.iter().cloned().sum(); - let accounts = vec![H160::from_low_u64_be(1), H160::from_low_u64_be(3), H160::from_low_u64_be(5)]; + let accounts = vec![ + H160::from_low_u64_be(1), + H160::from_low_u64_be(3), + H160::from_low_u64_be(5), + ]; let accounts_points: Vec<_> = accounts .iter() .cloned() @@ -195,23 +201,17 @@ fn test_on_era_end_with_zero_inflation() { ExternalValidatorsRewards::on_era_end(1); let era_rewards = pallet_external_validators_rewards::RewardPointsForEra::::get(1); - let inflation = ::EraInflationProvider::get(); - let rewards_utils = era_rewards.generate_era_rewards_utils::<::Hashing>(1, None, inflation, 0); - let root = rewards_utils.unwrap().rewards_merkle_root; - let expected_not_thrown_event = RuntimeEvent::ExternalValidatorsRewards( - crate::Event::RewardsMessageSent { - message_id: Default::default(), - era_index: 1, - total_points: total_points as u128, - inflation_amount: inflation, - rewards_merkle_root: root, - } - ); + let inflation = + ::EraInflationProvider::get(); + let rewards_utils = era_rewards.generate_era_rewards_utils(1, inflation, 0); + assert!(rewards_utils.is_some()); + // With zero inflation, no RewardsMessageSent event should be emitted let events = System::events(); assert!( - !events - .iter() - .any(|record| record.event == expected_not_thrown_event), + !events.iter().any(|record| matches!( + &record.event, + RuntimeEvent::ExternalValidatorsRewards(crate::Event::RewardsMessageSent { .. }) + )), "event should not have been thrown", ); }) @@ -229,7 +229,11 @@ fn test_on_era_end_with_zero_points() { }); }); let points = vec![0u32, 0u32, 0u32]; - let accounts = vec![H160::from_low_u64_be(1), H160::from_low_u64_be(3), H160::from_low_u64_be(5)]; + let accounts = vec![ + H160::from_low_u64_be(1), + H160::from_low_u64_be(3), + H160::from_low_u64_be(5), + ]; let accounts_points: Vec<_> = accounts .iter() .cloned() @@ -243,10 +247,7 @@ fn test_on_era_end_with_zero_points() { let era_rewards = pallet_external_validators_rewards::RewardPointsForEra::::get(1); let inflation = ::EraInflationProvider::get(); - let rewards_utils = era_rewards - .generate_era_rewards_utils::<::Hashing>( - 1, None, inflation, 0, - ); + let rewards_utils = era_rewards.generate_era_rewards_utils(1, inflation, 0); assert!( rewards_utils.is_none(), "generate_era_rewards_utils should return None when total_points is zero" diff --git a/operator/pallets/external-validators-rewards/src/types.rs b/operator/pallets/external-validators-rewards/src/types.rs index d6ef3bdb..cb62aa47 100644 --- a/operator/pallets/external-validators-rewards/src/types.rs +++ b/operator/pallets/external-validators-rewards/src/types.rs @@ -18,15 +18,11 @@ use snowbridge_outbound_queue_primitives::SendError; use sp_core::{H160, H256}; use sp_std::vec::Vec; -/// Utils needed to generate/verify merkle roots/proofs inside this pallet. -/// Also contains data needed for EigenLayer rewards submission. +/// Data needed for EigenLayer rewards submission via Snowbridge. #[derive(Debug, PartialEq, Eq, Clone)] pub struct EraRewardsUtils { pub era_index: u32, pub era_start_timestamp: u32, - pub rewards_merkle_root: H256, - pub leaves: Vec, - pub leaf_index: Option, pub total_points: u128, pub individual_points: Vec<(H160, u32)>, pub inflation_amount: u128, diff --git a/operator/runtime/common/src/rewards_adapter.rs b/operator/runtime/common/src/rewards_adapter.rs index d9a845e6..330bf4b5 100644 --- a/operator/runtime/common/src/rewards_adapter.rs +++ b/operator/runtime/common/src/rewards_adapter.rs @@ -741,9 +741,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 7, era_start_timestamp: TEST_ERA_START_TIMESTAMP, - rewards_merkle_root: H256::zero(), - leaves: vec![], - leaf_index: None, total_points: 100u128, individual_points: vec![ (H160::from_low_u64_be(2), 40), @@ -802,9 +799,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 7, era_start_timestamp: TEST_ERA_START_TIMESTAMP, - rewards_merkle_root: H256::zero(), - leaves: vec![], - leaf_index: None, total_points: 3u128, individual_points: vec![(H160::from_low_u64_be(1), 1), (H160::from_low_u64_be(2), 2)], inflation_amount: 100u128, @@ -843,9 +837,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 7, era_start_timestamp: TEST_ERA_START_TIMESTAMP, - rewards_merkle_root: H256::zero(), - leaves: vec![], - leaf_index: None, total_points: 1u128, individual_points: vec![(H160::from_low_u64_be(1), 1)], inflation_amount: 100u128, @@ -861,9 +852,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 7, era_start_timestamp: TEST_ERA_START_TIMESTAMP, - rewards_merkle_root: H256::zero(), - leaves: vec![], - leaf_index: None, total_points: 1000u128, individual_points: vec![(H160::from_low_u64_be(1), 1)], inflation_amount: 1u128, @@ -878,9 +866,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 7, era_start_timestamp: TEST_ERA_START_TIMESTAMP, - rewards_merkle_root: H256::zero(), - leaves: vec![], - leaf_index: None, total_points: 0u128, individual_points: vec![(H160::from_low_u64_be(1), 1)], inflation_amount: 100u128, @@ -895,9 +880,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 7, era_start_timestamp: TEST_ERA_START_TIMESTAMP, - rewards_merkle_root: H256::zero(), - leaves: vec![], - leaf_index: None, total_points: 1u128, individual_points: vec![(H160::from_low_u64_be(1), u32::MAX)], inflation_amount: u128::MAX, @@ -912,9 +894,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 7, era_start_timestamp: TEST_ERA_START_TIMESTAMP, - rewards_merkle_root: H256::zero(), - leaves: vec![], - leaf_index: None, total_points: 1u128, individual_points: vec![(H160::from_low_u64_be(1), 1)], inflation_amount: 100u128, @@ -929,9 +908,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 7, era_start_timestamp: TEST_ERA_START_TIMESTAMP, - rewards_merkle_root: H256::zero(), - leaves: vec![], - leaf_index: None, total_points: 100u128, individual_points: vec![ (H160::from_low_u64_be(2), 40), diff --git a/operator/runtime/mainnet/Cargo.toml b/operator/runtime/mainnet/Cargo.toml index e9813f32..265739cd 100644 --- a/operator/runtime/mainnet/Cargo.toml +++ b/operator/runtime/mainnet/Cargo.toml @@ -54,7 +54,6 @@ pallet-evm-precompile-simple = { workspace = true } pallet-external-validator-slashes = { workspace = true } pallet-external-validators = { workspace = true } pallet-external-validators-rewards = { workspace = true } -pallet-external-validators-rewards-runtime-api = { workspace = true } pallet-grandpa = { workspace = true } pallet-identity = { workspace = true } pallet-im-online = { workspace = true } @@ -219,7 +218,6 @@ std = [ "pallet-evm-precompile-registry/std", "pallet-external-validators/std", "pallet-external-validators-rewards/std", - "pallet-external-validators-rewards-runtime-api/std", "pallet-external-validator-slashes/std", "pallet-grandpa/std", "pallet-identity/std", diff --git a/operator/runtime/mainnet/src/configs/mod.rs b/operator/runtime/mainnet/src/configs/mod.rs index 53b614a9..9e9fa522 100644 --- a/operator/runtime/mainnet/src/configs/mod.rs +++ b/operator/runtime/mainnet/src/configs/mod.rs @@ -1741,9 +1741,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 1, era_start_timestamp: 1_700_000_000, - rewards_merkle_root: H256::random(), - leaves: vec![H256::random()], - leaf_index: Some(1), total_points: 1000, individual_points: vec![ (H160::from_low_u64_be(1), 500), @@ -1803,9 +1800,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 1, era_start_timestamp: 1_700_000_000, - rewards_merkle_root: H256::random(), - leaves: vec![H256::random()], - leaf_index: Some(1), total_points: 1000, individual_points: vec![(op1, 600), (op2, 400)], inflation_amount: 1_000_000_000, // 1 billion smallest units diff --git a/operator/runtime/mainnet/src/lib.rs b/operator/runtime/mainnet/src/lib.rs index 926a36f9..209eadf3 100644 --- a/operator/runtime/mainnet/src/lib.rs +++ b/operator/runtime/mainnet/src/lib.rs @@ -54,7 +54,6 @@ pub use frame_system::Call as SystemCall; pub use pallet_balances::Call as BalancesCall; use pallet_ethereum::{Call::transact, Transaction as EthereumTransaction}; use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, Runner}; -use pallet_external_validators::traits::EraIndex; use pallet_file_system::types::StorageRequestMetadata; use pallet_file_system_runtime_api::*; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; @@ -72,7 +71,6 @@ pub use pallet_timestamp::Call as TimestampCall; use shp_file_metadata::ChunkId; use smallvec::smallvec; use snowbridge_core::AgentId; -use snowbridge_merkle_tree::MerkleProof; use sp_api::impl_runtime_apis; use sp_consensus_beefy::{ ecdsa_crypto::{AuthorityId as BeefyId, Signature as BeefySignature}, @@ -944,19 +942,6 @@ impl_runtime_apis! { } } - impl pallet_external_validators_rewards_runtime_api::ExternalValidatorsRewardsApi for Runtime - where - EraIndex: codec::Codec, - { - fn generate_rewards_merkle_proof(account_id: AccountId, era_index: EraIndex) -> Option { - ExternalValidatorsRewards::generate_rewards_merkle_proof(account_id, era_index) - } - - fn verify_rewards_merkle_proof(merkle_proof: MerkleProof) -> bool { - ExternalValidatorsRewards::verify_rewards_merkle_proof(merkle_proof) - } - } - #[cfg(feature = "runtime-benchmarks")] impl frame_benchmarking::Benchmark for Runtime { fn benchmark_metadata(extra: bool) -> ( diff --git a/operator/runtime/stagenet/Cargo.toml b/operator/runtime/stagenet/Cargo.toml index 76eba252..d17581e0 100644 --- a/operator/runtime/stagenet/Cargo.toml +++ b/operator/runtime/stagenet/Cargo.toml @@ -54,7 +54,6 @@ pallet-evm-precompile-simple = { workspace = true } pallet-external-validator-slashes = { workspace = true } pallet-external-validators = { workspace = true } pallet-external-validators-rewards = { workspace = true } -pallet-external-validators-rewards-runtime-api = { workspace = true } pallet-grandpa = { workspace = true } pallet-identity = { workspace = true } pallet-im-online = { workspace = true } @@ -219,7 +218,6 @@ std = [ "pallet-evm-precompile-registry/std", "pallet-external-validators/std", "pallet-external-validators-rewards/std", - "pallet-external-validators-rewards-runtime-api/std", "pallet-external-validator-slashes/std", "pallet-grandpa/std", "pallet-identity/std", diff --git a/operator/runtime/stagenet/src/configs/mod.rs b/operator/runtime/stagenet/src/configs/mod.rs index 89d113db..0338c3ef 100644 --- a/operator/runtime/stagenet/src/configs/mod.rs +++ b/operator/runtime/stagenet/src/configs/mod.rs @@ -1736,9 +1736,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 1, era_start_timestamp: 1_700_000_000, - rewards_merkle_root: H256::random(), - leaves: vec![H256::random()], - leaf_index: Some(1), total_points: 1000, individual_points: vec![ (H160::from_low_u64_be(1), 500), @@ -1791,9 +1788,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 1, era_start_timestamp: 1_700_000_000, - rewards_merkle_root: H256::random(), - leaves: vec![H256::random()], - leaf_index: Some(1), total_points: 1000, individual_points: vec![(H160::from_low_u64_be(1), 600), (H160::from_low_u64_be(2), 400)], inflation_amount: 1_000_000_000, diff --git a/operator/runtime/stagenet/src/lib.rs b/operator/runtime/stagenet/src/lib.rs index 8f48c58a..edecd84d 100644 --- a/operator/runtime/stagenet/src/lib.rs +++ b/operator/runtime/stagenet/src/lib.rs @@ -51,7 +51,6 @@ pub use frame_system::Call as SystemCall; pub use pallet_balances::Call as BalancesCall; use pallet_ethereum::{Call::transact, Transaction as EthereumTransaction}; use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, Runner}; -use pallet_external_validators::traits::EraIndex; use pallet_file_system::types::StorageRequestMetadata; use pallet_file_system_runtime_api::*; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; @@ -69,7 +68,6 @@ pub use pallet_timestamp::Call as TimestampCall; use shp_file_metadata::ChunkId; use smallvec::smallvec; use snowbridge_core::AgentId; -use snowbridge_merkle_tree::MerkleProof; use sp_api::impl_runtime_apis; use sp_consensus_beefy::{ ecdsa_crypto::{AuthorityId as BeefyId, Signature as BeefySignature}, @@ -946,19 +944,6 @@ impl_runtime_apis! { } } - impl pallet_external_validators_rewards_runtime_api::ExternalValidatorsRewardsApi for Runtime - where - EraIndex: codec::Codec, - { - fn generate_rewards_merkle_proof(account_id: AccountId, era_index: EraIndex) -> Option { - ExternalValidatorsRewards::generate_rewards_merkle_proof(account_id, era_index) - } - - fn verify_rewards_merkle_proof(merkle_proof: MerkleProof) -> bool { - ExternalValidatorsRewards::verify_rewards_merkle_proof(merkle_proof) - } - } - #[cfg(feature = "runtime-benchmarks")] impl frame_benchmarking::Benchmark for Runtime { fn benchmark_metadata(extra: bool) -> ( diff --git a/operator/runtime/testnet/Cargo.toml b/operator/runtime/testnet/Cargo.toml index 4df7a63d..ce5a3ef7 100644 --- a/operator/runtime/testnet/Cargo.toml +++ b/operator/runtime/testnet/Cargo.toml @@ -55,7 +55,6 @@ pallet-evm-precompile-simple = { workspace = true } pallet-external-validator-slashes = { workspace = true } pallet-external-validators = { workspace = true } pallet-external-validators-rewards = { workspace = true } -pallet-external-validators-rewards-runtime-api = { workspace = true } pallet-grandpa = { workspace = true } pallet-identity = { workspace = true } pallet-im-online = { workspace = true } @@ -279,7 +278,6 @@ std = [ "pallet-outbound-commitment-store/std", "pallet-external-validators/std", "pallet-external-validators-rewards/std", - "pallet-external-validators-rewards-runtime-api/std", "pallet-external-validator-slashes/std", "pallet-datahaven-native-transfer/std", # StorageHub diff --git a/operator/runtime/testnet/src/configs/mod.rs b/operator/runtime/testnet/src/configs/mod.rs index 2196c92f..3ae8be15 100644 --- a/operator/runtime/testnet/src/configs/mod.rs +++ b/operator/runtime/testnet/src/configs/mod.rs @@ -1759,9 +1759,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 1, era_start_timestamp: 1_700_000_000, - rewards_merkle_root: H256::random(), - leaves: vec![H256::random()], - leaf_index: Some(1), total_points: 1000, individual_points: vec![ (H160::from_low_u64_be(1), 500), @@ -1814,9 +1811,6 @@ mod tests { let rewards_utils = EraRewardsUtils { era_index: 1, era_start_timestamp: 1_700_000_000, - rewards_merkle_root: H256::random(), - leaves: vec![H256::random()], - leaf_index: Some(1), total_points: 1000, individual_points: vec![(H160::from_low_u64_be(1), 600), (H160::from_low_u64_be(2), 400)], inflation_amount: 1_000_000_000, diff --git a/operator/runtime/testnet/src/lib.rs b/operator/runtime/testnet/src/lib.rs index 108636c8..99cfb000 100644 --- a/operator/runtime/testnet/src/lib.rs +++ b/operator/runtime/testnet/src/lib.rs @@ -54,7 +54,6 @@ pub use frame_system::Call as SystemCall; pub use pallet_balances::Call as BalancesCall; use pallet_ethereum::{Call::transact, Transaction as EthereumTransaction}; use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, Runner}; -use pallet_external_validators::traits::EraIndex; use pallet_file_system::types::StorageRequestMetadata; use pallet_file_system_runtime_api::*; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; @@ -72,7 +71,6 @@ pub use pallet_timestamp::Call as TimestampCall; use shp_file_metadata::ChunkId; use smallvec::smallvec; use snowbridge_core::AgentId; -use snowbridge_merkle_tree::MerkleProof; use sp_api::impl_runtime_apis; use sp_consensus_beefy::{ ecdsa_crypto::{AuthorityId as BeefyId, Signature as BeefySignature}, @@ -944,19 +942,6 @@ impl_runtime_apis! { } } - impl pallet_external_validators_rewards_runtime_api::ExternalValidatorsRewardsApi for Runtime - where - EraIndex: codec::Codec, - { - fn generate_rewards_merkle_proof(account_id: AccountId, era_index: EraIndex) -> Option { - ExternalValidatorsRewards::generate_rewards_merkle_proof(account_id, era_index) - } - - fn verify_rewards_merkle_proof(merkle_proof: MerkleProof) -> bool { - ExternalValidatorsRewards::verify_rewards_merkle_proof(merkle_proof) - } - } - #[cfg(feature = "runtime-benchmarks")] impl frame_benchmarking::Benchmark for Runtime { fn benchmark_metadata(extra: bool) -> ( diff --git a/test/.papi/descriptors/package.json b/test/.papi/descriptors/package.json index 3a1814dc..02dc38d2 100644 --- a/test/.papi/descriptors/package.json +++ b/test/.papi/descriptors/package.json @@ -1,5 +1,5 @@ { - "version": "0.1.0-autogenerated.3899565146829206681", + "version": "0.1.0-autogenerated.8790957017458825602", "name": "@polkadot-api/descriptors", "files": [ "dist" diff --git a/test/.papi/metadata/datahaven.scale b/test/.papi/metadata/datahaven.scale index e39e92a1..7420f4aa 100644 Binary files a/test/.papi/metadata/datahaven.scale and b/test/.papi/metadata/datahaven.scale differ diff --git a/test/cli/handlers/contracts/status.ts b/test/cli/handlers/contracts/status.ts index 52cd1159..a6d34e05 100644 --- a/test/cli/handlers/contracts/status.ts +++ b/test/cli/handlers/contracts/status.ts @@ -74,11 +74,9 @@ const showDatahavenContractStatus = async (chain: string, rpcUrl: string) => { try { const contracts = [ { name: "DataHavenServiceManager", key: "ServiceManagerImplementation" }, - { name: "RewardsRegistry", key: "RewardsRegistry" }, { name: "Snowbridge BeefyClient", key: "BeefyClient" }, { name: "Snowbridge AgentExecutor", key: "AgentExecutor" }, - { name: "Snowbridge Gateway", key: "Gateway" }, - { name: "Snowbridge Agent", key: "RewardsAgent" } + { name: "Snowbridge Gateway", key: "Gateway" } ]; logger.info("DataHaven contracts"); diff --git a/test/cli/handlers/contracts/verify.ts b/test/cli/handlers/contracts/verify.ts index 18f6fc5c..063ec23e 100644 --- a/test/cli/handlers/contracts/verify.ts +++ b/test/cli/handlers/contracts/verify.ts @@ -49,13 +49,6 @@ export const verifyContracts = async (options: ContractsVerifyOptions) => { ], constructorArgTypes: ["address", "address", "address"] }, - { - name: "RewardsRegistry", - address: deployments.RewardsRegistry, - artifactName: "RewardsRegistry", - constructorArgs: [deployments.ServiceManager, deployments.RewardsAgent], - constructorArgTypes: ["address", "address"] - }, { name: "Gateway", address: deployments.Gateway, diff --git a/test/cli/handlers/deploy/relayer.ts b/test/cli/handlers/deploy/relayer.ts index 74f5e2c3..2a3bc0ed 100644 --- a/test/cli/handlers/deploy/relayer.ts +++ b/test/cli/handlers/deploy/relayer.ts @@ -70,10 +70,8 @@ export const deployRelayers = async (options: DeployOptions, launchedNetwork: La const anvilDeployments = await parseDeploymentsFile(); const beefyClientAddress = anvilDeployments.BeefyClient; const gatewayAddress = anvilDeployments.Gateway; - const rewardsRegistryAddress = anvilDeployments.RewardsRegistry; invariant(beefyClientAddress, "❌ BeefyClient address not found in anvil.json"); invariant(gatewayAddress, "❌ Gateway address not found in anvil.json"); - invariant(rewardsRegistryAddress, "❌ RewardsRegistry address not found in anvil.json"); logger.debug(`Ensuring output directory exists: ${RELAYER_CONFIG_DIR}`); await $`mkdir -p ${RELAYER_CONFIG_DIR}`.quiet(); @@ -118,7 +116,6 @@ export const deployRelayers = async (options: DeployOptions, launchedNetwork: La substrateWsEndpoint, beefyClientAddress, gatewayAddress, - rewardsRegistryAddress, ethClEndpoint }, pk: { diff --git a/test/contract-bindings/generated.ts b/test/contract-bindings/generated.ts index 964d8afd..53f25c9a 100644 --- a/test/contract-bindings/generated.ts +++ b/test/contract-bindings/generated.ts @@ -2114,47 +2114,6 @@ export const dataHavenServiceManagerAbi = [ outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }], stateMutability: 'view', }, - { - type: 'function', - inputs: [ - { name: 'operatorSetId', internalType: 'uint32', type: 'uint32' }, - { name: 'operatorPoints', internalType: 'uint256', type: 'uint256' }, - { name: 'numberOfLeaves', internalType: 'uint256', type: 'uint256' }, - { name: 'leafIndex', internalType: 'uint256', type: 'uint256' }, - { name: 'proof', internalType: 'bytes32[]', type: 'bytes32[]' }, - ], - name: 'claimLatestOperatorRewards', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: 'operatorSetId', internalType: 'uint32', type: 'uint32' }, - { name: 'rootIndex', internalType: 'uint256', type: 'uint256' }, - { name: 'operatorPoints', internalType: 'uint256', type: 'uint256' }, - { name: 'numberOfLeaves', internalType: 'uint256', type: 'uint256' }, - { name: 'leafIndex', internalType: 'uint256', type: 'uint256' }, - { name: 'proof', internalType: 'bytes32[]', type: 'bytes32[]' }, - ], - name: 'claimOperatorRewards', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: 'operatorSetId', internalType: 'uint32', type: 'uint32' }, - { name: 'rootIndices', internalType: 'uint256[]', type: 'uint256[]' }, - { name: 'operatorPoints', internalType: 'uint256[]', type: 'uint256[]' }, - { name: 'numberOfLeaves', internalType: 'uint256[]', type: 'uint256[]' }, - { name: 'leafIndices', internalType: 'uint256[]', type: 'uint256[]' }, - { name: 'proofs', internalType: 'bytes32[][]', type: 'bytes32[][]' }, - ], - name: 'claimOperatorRewardsBatch', - outputs: [], - stateMutability: 'nonpayable', - }, { type: 'function', inputs: [ @@ -2323,15 +2282,6 @@ export const dataHavenServiceManagerAbi = [ outputs: [], stateMutability: 'nonpayable', }, - { - type: 'function', - inputs: [{ name: '', internalType: 'uint32', type: 'uint32' }], - name: 'operatorSetToRewardsRegistry', - outputs: [ - { name: '', internalType: 'contract IRewardsRegistry', type: 'address' }, - ], - stateMutability: 'view', - }, { type: 'function', inputs: [], @@ -2474,16 +2424,6 @@ export const dataHavenServiceManagerAbi = [ outputs: [], stateMutability: 'nonpayable', }, - { - type: 'function', - inputs: [ - { name: 'operatorSetId', internalType: 'uint32', type: 'uint32' }, - { name: 'rewardsAgent', internalType: 'address', type: 'address' }, - ], - name: 'setRewardsAgent', - outputs: [], - stateMutability: 'nonpayable', - }, { type: 'function', inputs: [ @@ -2493,20 +2433,6 @@ export const dataHavenServiceManagerAbi = [ outputs: [], stateMutability: 'nonpayable', }, - { - type: 'function', - inputs: [ - { name: 'operatorSetId', internalType: 'uint32', type: 'uint32' }, - { - name: 'rewardsRegistry', - internalType: 'contract IRewardsRegistry', - type: 'address', - }, - ], - name: 'setRewardsRegistry', - outputs: [], - stateMutability: 'nonpayable', - }, { type: 'function', inputs: [ @@ -2726,25 +2652,6 @@ export const dataHavenServiceManagerAbi = [ ], name: 'RewardsInitiatorUpdated', }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'operatorSetId', - internalType: 'uint32', - type: 'uint32', - indexed: true, - }, - { - name: 'rewardsRegistry', - internalType: 'address', - type: 'address', - indexed: true, - }, - ], - name: 'RewardsRegistrySet', - }, { type: 'event', anonymous: false, @@ -2809,7 +2716,6 @@ export const dataHavenServiceManagerAbi = [ { type: 'error', inputs: [], name: 'DelayPeriodNotPassed' }, { type: 'error', inputs: [], name: 'IncorrectAVSAddress' }, { type: 'error', inputs: [], name: 'InvalidOperatorSetId' }, - { type: 'error', inputs: [], name: 'NoRewardsRegistryForOperatorSet' }, { type: 'error', inputs: [], name: 'OnlyRegistryCoordinator' }, { type: 'error', inputs: [], name: 'OnlyRewardsInitiator' }, { type: 'error', inputs: [], name: 'OnlyStakeRegistry' }, @@ -8174,245 +8080,6 @@ export const rewardsCoordinatorAbi = [ { type: 'error', inputs: [], name: 'UnauthorizedCaller' }, ] as const -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// RewardsRegistry -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -export const rewardsRegistryAbi = [ - { - type: 'constructor', - inputs: [ - { name: '_avs', internalType: 'address', type: 'address' }, - { name: '_rewardsAgent', internalType: 'address', type: 'address' }, - ], - stateMutability: 'nonpayable', - }, - { type: 'receive', stateMutability: 'payable' }, - { - type: 'function', - inputs: [], - name: 'avs', - outputs: [{ name: '', internalType: 'address', type: 'address' }], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [ - { name: 'operatorAddress', internalType: 'address', type: 'address' }, - { name: 'operatorPoints', internalType: 'uint256', type: 'uint256' }, - { name: 'numberOfLeaves', internalType: 'uint256', type: 'uint256' }, - { name: 'leafIndex', internalType: 'uint256', type: 'uint256' }, - { name: 'proof', internalType: 'bytes32[]', type: 'bytes32[]' }, - ], - name: 'claimLatestRewards', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: 'operatorAddress', internalType: 'address', type: 'address' }, - { name: 'rootIndex', internalType: 'uint256', type: 'uint256' }, - { name: 'operatorPoints', internalType: 'uint256', type: 'uint256' }, - { name: 'numberOfLeaves', internalType: 'uint256', type: 'uint256' }, - { name: 'leafIndex', internalType: 'uint256', type: 'uint256' }, - { name: 'proof', internalType: 'bytes32[]', type: 'bytes32[]' }, - ], - name: 'claimRewards', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: 'operatorAddress', internalType: 'address', type: 'address' }, - { name: 'rootIndices', internalType: 'uint256[]', type: 'uint256[]' }, - { name: 'operatorPoints', internalType: 'uint256[]', type: 'uint256[]' }, - { name: 'numberOfLeaves', internalType: 'uint256[]', type: 'uint256[]' }, - { name: 'leafIndices', internalType: 'uint256[]', type: 'uint256[]' }, - { name: 'proofs', internalType: 'bytes32[][]', type: 'bytes32[][]' }, - ], - name: 'claimRewardsBatch', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [], - name: 'getLatestMerkleRoot', - outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [], - name: 'getLatestMerkleRootIndex', - outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256' }], - name: 'getMerkleRootByIndex', - outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [], - name: 'getMerkleRootHistoryLength', - outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [ - { name: 'operatorAddress', internalType: 'address', type: 'address' }, - { name: 'rootIndex', internalType: 'uint256', type: 'uint256' }, - ], - name: 'hasClaimedByIndex', - outputs: [{ name: '', internalType: 'bool', type: 'bool' }], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], - name: 'merkleRootHistory', - outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [ - { name: '', internalType: 'address', type: 'address' }, - { name: '', internalType: 'uint256', type: 'uint256' }, - ], - name: 'operatorClaimedByIndex', - outputs: [{ name: '', internalType: 'bool', type: 'bool' }], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [], - name: 'rewardsAgent', - outputs: [{ name: '', internalType: 'address', type: 'address' }], - stateMutability: 'view', - }, - { - type: 'function', - inputs: [ - { name: '_rewardsAgent', internalType: 'address', type: 'address' }, - ], - name: 'setRewardsAgent', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'function', - inputs: [ - { name: 'newMerkleRoot', internalType: 'bytes32', type: 'bytes32' }, - ], - name: 'updateRewardsMerkleRoot', - outputs: [], - stateMutability: 'nonpayable', - }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'operatorAddress', - internalType: 'address', - type: 'address', - indexed: true, - }, - { - name: 'rootIndices', - internalType: 'uint256[]', - type: 'uint256[]', - indexed: false, - }, - { - name: 'points', - internalType: 'uint256[]', - type: 'uint256[]', - indexed: false, - }, - { - name: 'totalRewardsAmount', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - ], - name: 'RewardsBatchClaimedForIndices', - }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'operatorAddress', - internalType: 'address', - type: 'address', - indexed: true, - }, - { - name: 'rootIndex', - internalType: 'uint256', - type: 'uint256', - indexed: true, - }, - { - name: 'points', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - { - name: 'rewardsAmount', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - ], - name: 'RewardsClaimedForIndex', - }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'oldRoot', - internalType: 'bytes32', - type: 'bytes32', - indexed: false, - }, - { - name: 'newRoot', - internalType: 'bytes32', - type: 'bytes32', - indexed: true, - }, - { - name: 'newRootIndex', - internalType: 'uint256', - type: 'uint256', - indexed: false, - }, - ], - name: 'RewardsMerkleRootUpdated', - }, - { type: 'error', inputs: [], name: 'ArrayLengthMismatch' }, - { type: 'error', inputs: [], name: 'InvalidMerkleProof' }, - { type: 'error', inputs: [], name: 'InvalidMerkleRootIndex' }, - { type: 'error', inputs: [], name: 'OnlyAVS' }, - { type: 'error', inputs: [], name: 'OnlyRewardsAgent' }, - { type: 'error', inputs: [], name: 'RewardsAlreadyClaimedForIndex' }, - { type: 'error', inputs: [], name: 'RewardsMerkleRootNotSet' }, - { type: 'error', inputs: [], name: 'RewardsTransferFailed' }, -] as const - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // StrategyBaseTVLLimits ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -11235,15 +10902,6 @@ export const readDataHavenServiceManagerGetRestakeableStrategies = functionName: 'getRestakeableStrategies', }) -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"operatorSetToRewardsRegistry"` - */ -export const readDataHavenServiceManagerOperatorSetToRewardsRegistry = - /*#__PURE__*/ createReadContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'operatorSetToRewardsRegistry', - }) - /** * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"owner"` */ @@ -11350,33 +11008,6 @@ export const writeDataHavenServiceManagerAddValidatorToAllowlist = functionName: 'addValidatorToAllowlist', }) -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"claimLatestOperatorRewards"` - */ -export const writeDataHavenServiceManagerClaimLatestOperatorRewards = - /*#__PURE__*/ createWriteContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'claimLatestOperatorRewards', - }) - -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"claimOperatorRewards"` - */ -export const writeDataHavenServiceManagerClaimOperatorRewards = - /*#__PURE__*/ createWriteContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'claimOperatorRewards', - }) - -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"claimOperatorRewardsBatch"` - */ -export const writeDataHavenServiceManagerClaimOperatorRewardsBatch = - /*#__PURE__*/ createWriteContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'claimOperatorRewardsBatch', - }) - /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"createAVSRewardsSubmission"` */ @@ -11548,15 +11179,6 @@ export const writeDataHavenServiceManagerSetClaimerFor = functionName: 'setClaimerFor', }) -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setRewardsAgent"` - */ -export const writeDataHavenServiceManagerSetRewardsAgent = - /*#__PURE__*/ createWriteContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'setRewardsAgent', - }) - /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setRewardsInitiator"` */ @@ -11566,15 +11188,6 @@ export const writeDataHavenServiceManagerSetRewardsInitiator = functionName: 'setRewardsInitiator', }) -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setRewardsRegistry"` - */ -export const writeDataHavenServiceManagerSetRewardsRegistry = - /*#__PURE__*/ createWriteContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'setRewardsRegistry', - }) - /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setSnowbridgeGateway"` */ @@ -11662,33 +11275,6 @@ export const simulateDataHavenServiceManagerAddValidatorToAllowlist = functionName: 'addValidatorToAllowlist', }) -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"claimLatestOperatorRewards"` - */ -export const simulateDataHavenServiceManagerClaimLatestOperatorRewards = - /*#__PURE__*/ createSimulateContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'claimLatestOperatorRewards', - }) - -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"claimOperatorRewards"` - */ -export const simulateDataHavenServiceManagerClaimOperatorRewards = - /*#__PURE__*/ createSimulateContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'claimOperatorRewards', - }) - -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"claimOperatorRewardsBatch"` - */ -export const simulateDataHavenServiceManagerClaimOperatorRewardsBatch = - /*#__PURE__*/ createSimulateContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'claimOperatorRewardsBatch', - }) - /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"createAVSRewardsSubmission"` */ @@ -11860,15 +11446,6 @@ export const simulateDataHavenServiceManagerSetClaimerFor = functionName: 'setClaimerFor', }) -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setRewardsAgent"` - */ -export const simulateDataHavenServiceManagerSetRewardsAgent = - /*#__PURE__*/ createSimulateContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'setRewardsAgent', - }) - /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setRewardsInitiator"` */ @@ -11878,15 +11455,6 @@ export const simulateDataHavenServiceManagerSetRewardsInitiator = functionName: 'setRewardsInitiator', }) -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setRewardsRegistry"` - */ -export const simulateDataHavenServiceManagerSetRewardsRegistry = - /*#__PURE__*/ createSimulateContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'setRewardsRegistry', - }) - /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setSnowbridgeGateway"` */ @@ -11992,15 +11560,6 @@ export const watchDataHavenServiceManagerRewardsInitiatorUpdatedEvent = eventName: 'RewardsInitiatorUpdated', }) -/** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `eventName` set to `"RewardsRegistrySet"` - */ -export const watchDataHavenServiceManagerRewardsRegistrySetEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: dataHavenServiceManagerAbi, - eventName: 'RewardsRegistrySet', - }) - /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `eventName` set to `"RewardsSubmitted"` */ @@ -15901,229 +15460,6 @@ export const watchRewardsCoordinatorUnpausedEvent = eventName: 'Unpaused', }) -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ - */ -export const readRewardsRegistry = /*#__PURE__*/ createReadContract({ - abi: rewardsRegistryAbi, -}) - -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"avs"` - */ -export const readRewardsRegistryAvs = /*#__PURE__*/ createReadContract({ - abi: rewardsRegistryAbi, - functionName: 'avs', -}) - -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"getLatestMerkleRoot"` - */ -export const readRewardsRegistryGetLatestMerkleRoot = - /*#__PURE__*/ createReadContract({ - abi: rewardsRegistryAbi, - functionName: 'getLatestMerkleRoot', - }) - -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"getLatestMerkleRootIndex"` - */ -export const readRewardsRegistryGetLatestMerkleRootIndex = - /*#__PURE__*/ createReadContract({ - abi: rewardsRegistryAbi, - functionName: 'getLatestMerkleRootIndex', - }) - -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"getMerkleRootByIndex"` - */ -export const readRewardsRegistryGetMerkleRootByIndex = - /*#__PURE__*/ createReadContract({ - abi: rewardsRegistryAbi, - functionName: 'getMerkleRootByIndex', - }) - -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"getMerkleRootHistoryLength"` - */ -export const readRewardsRegistryGetMerkleRootHistoryLength = - /*#__PURE__*/ createReadContract({ - abi: rewardsRegistryAbi, - functionName: 'getMerkleRootHistoryLength', - }) - -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"hasClaimedByIndex"` - */ -export const readRewardsRegistryHasClaimedByIndex = - /*#__PURE__*/ createReadContract({ - abi: rewardsRegistryAbi, - functionName: 'hasClaimedByIndex', - }) - -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"merkleRootHistory"` - */ -export const readRewardsRegistryMerkleRootHistory = - /*#__PURE__*/ createReadContract({ - abi: rewardsRegistryAbi, - functionName: 'merkleRootHistory', - }) - -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"operatorClaimedByIndex"` - */ -export const readRewardsRegistryOperatorClaimedByIndex = - /*#__PURE__*/ createReadContract({ - abi: rewardsRegistryAbi, - functionName: 'operatorClaimedByIndex', - }) - -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"rewardsAgent"` - */ -export const readRewardsRegistryRewardsAgent = /*#__PURE__*/ createReadContract( - { abi: rewardsRegistryAbi, functionName: 'rewardsAgent' }, -) - -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ - */ -export const writeRewardsRegistry = /*#__PURE__*/ createWriteContract({ - abi: rewardsRegistryAbi, -}) - -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"claimLatestRewards"` - */ -export const writeRewardsRegistryClaimLatestRewards = - /*#__PURE__*/ createWriteContract({ - abi: rewardsRegistryAbi, - functionName: 'claimLatestRewards', - }) - -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"claimRewards"` - */ -export const writeRewardsRegistryClaimRewards = - /*#__PURE__*/ createWriteContract({ - abi: rewardsRegistryAbi, - functionName: 'claimRewards', - }) - -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"claimRewardsBatch"` - */ -export const writeRewardsRegistryClaimRewardsBatch = - /*#__PURE__*/ createWriteContract({ - abi: rewardsRegistryAbi, - functionName: 'claimRewardsBatch', - }) - -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"setRewardsAgent"` - */ -export const writeRewardsRegistrySetRewardsAgent = - /*#__PURE__*/ createWriteContract({ - abi: rewardsRegistryAbi, - functionName: 'setRewardsAgent', - }) - -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"updateRewardsMerkleRoot"` - */ -export const writeRewardsRegistryUpdateRewardsMerkleRoot = - /*#__PURE__*/ createWriteContract({ - abi: rewardsRegistryAbi, - functionName: 'updateRewardsMerkleRoot', - }) - -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ - */ -export const simulateRewardsRegistry = /*#__PURE__*/ createSimulateContract({ - abi: rewardsRegistryAbi, -}) - -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"claimLatestRewards"` - */ -export const simulateRewardsRegistryClaimLatestRewards = - /*#__PURE__*/ createSimulateContract({ - abi: rewardsRegistryAbi, - functionName: 'claimLatestRewards', - }) - -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"claimRewards"` - */ -export const simulateRewardsRegistryClaimRewards = - /*#__PURE__*/ createSimulateContract({ - abi: rewardsRegistryAbi, - functionName: 'claimRewards', - }) - -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"claimRewardsBatch"` - */ -export const simulateRewardsRegistryClaimRewardsBatch = - /*#__PURE__*/ createSimulateContract({ - abi: rewardsRegistryAbi, - functionName: 'claimRewardsBatch', - }) - -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"setRewardsAgent"` - */ -export const simulateRewardsRegistrySetRewardsAgent = - /*#__PURE__*/ createSimulateContract({ - abi: rewardsRegistryAbi, - functionName: 'setRewardsAgent', - }) - -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `functionName` set to `"updateRewardsMerkleRoot"` - */ -export const simulateRewardsRegistryUpdateRewardsMerkleRoot = - /*#__PURE__*/ createSimulateContract({ - abi: rewardsRegistryAbi, - functionName: 'updateRewardsMerkleRoot', - }) - -/** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link rewardsRegistryAbi}__ - */ -export const watchRewardsRegistryEvent = /*#__PURE__*/ createWatchContractEvent( - { abi: rewardsRegistryAbi }, -) - -/** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `eventName` set to `"RewardsBatchClaimedForIndices"` - */ -export const watchRewardsRegistryRewardsBatchClaimedForIndicesEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: rewardsRegistryAbi, - eventName: 'RewardsBatchClaimedForIndices', - }) - -/** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `eventName` set to `"RewardsClaimedForIndex"` - */ -export const watchRewardsRegistryRewardsClaimedForIndexEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: rewardsRegistryAbi, - eventName: 'RewardsClaimedForIndex', - }) - -/** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link rewardsRegistryAbi}__ and `eventName` set to `"RewardsMerkleRootUpdated"` - */ -export const watchRewardsRegistryRewardsMerkleRootUpdatedEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: rewardsRegistryAbi, - eventName: 'RewardsMerkleRootUpdated', - }) - /** * Wraps __{@link readContract}__ with `abi` set to __{@link strategyBaseTvlLimitsAbi}__ */ diff --git a/test/launcher/relayers.ts b/test/launcher/relayers.ts index 7e572277..27fca347 100644 --- a/test/launcher/relayers.ts +++ b/test/launcher/relayers.ts @@ -53,7 +53,6 @@ export type SolochainConfig = { substrateWsEndpoint: string; beefyClientAddress: string; gatewayAddress: string; - rewardsRegistryAddress: string; ethClEndpoint: string; }; @@ -172,7 +171,6 @@ export const generateRelayerConfig = async ( cfg.source.beacon.datastore.location = "/relay-data"; cfg.sink.ethereum.endpoint = config.ethElRpcEndpoint; cfg.sink.contracts.Gateway = config.gatewayAddress; - cfg["reward-address"] = config.rewardsRegistryAddress; await Bun.write(outputFilePath, JSON.stringify(cfg, null, 4)); logger.success(`Updated solochain config written to ${outputFilePath}`); @@ -436,10 +434,8 @@ export const launchRelayers = async ( const deployments = await parseDeploymentsFile(); const beefyClientAddress = deployments.BeefyClient; const gatewayAddress = deployments.Gateway; - const rewardsRegistryAddress = deployments.RewardsRegistry; invariant(beefyClientAddress, "❌ BeefyClient address not found in anvil.json"); invariant(gatewayAddress, "❌ Gateway address not found in anvil.json"); - invariant(rewardsRegistryAddress, "❌ RewardsRegistry address not found in anvil.json"); logger.debug(`Ensuring output directory exists: ${RELAYER_CONFIG_DIR}`); await $`mkdir -p ${RELAYER_CONFIG_DIR}`.quiet(); @@ -493,7 +489,6 @@ export const launchRelayers = async ( substrateWsEndpoint, beefyClientAddress, gatewayAddress, - rewardsRegistryAddress, ethClEndpoint }, pk: { diff --git a/test/scripts/deploy-contracts.ts b/test/scripts/deploy-contracts.ts index d1958411..934426ef 100644 --- a/test/scripts/deploy-contracts.ts +++ b/test/scripts/deploy-contracts.ts @@ -1,12 +1,7 @@ import { $ } from "bun"; import { CHAIN_CONFIGS, loadChainConfig } from "configs/contracts/config"; import invariant from "tiny-invariant"; -import { - logger, - parseDeploymentsFile, - parseRewardsInfoFile, - runShellCommandWithLogger -} from "utils"; +import { logger, parseDeploymentsFile, runShellCommandWithLogger } from "utils"; import type { ParameterCollection } from "utils/parameters"; import { encodeFunctionData } from "viem"; import { privateKeyToAccount } from "viem/accounts"; @@ -100,11 +95,7 @@ export const executeDeployment = async ( env }); - // After deployment, read the: - // - Gateway address - // - RewardsAgent address - // - RewardsAgentOrigin (bytes32) - // and add it to parameters if collection is provided + // After deployment, read the Gateway address and add it to parameters if collection is provided if (parameterCollection) { await updateParameters(parameterCollection, chain); } @@ -121,10 +112,7 @@ export const updateParameters = async ( ) => { try { const deployments = await parseDeploymentsFile(chain); - const rewardsInfo = await parseRewardsInfoFile(chain); const gatewayAddress = deployments.Gateway; - const rewardsAgentOrigin = rewardsInfo.RewardsAgentOrigin; - const updateRewardsMerkleRootSelector = rewardsInfo.updateRewardsMerkleRootSelector; const serviceManagerAddress = deployments.ServiceManager; if (gatewayAddress) { @@ -138,26 +126,6 @@ export const updateParameters = async ( logger.warn("⚠️ Gateway address not found in deployments file"); } - if (updateRewardsMerkleRootSelector) { - logger.debug(`📝 Adding RewardsUpdateSelector parameter: ${updateRewardsMerkleRootSelector}`); - parameterCollection.addParameter({ - name: "RewardsUpdateSelector", - value: updateRewardsMerkleRootSelector - }); - } else { - logger.warn("⚠️ updateRewardsMerkleRootSelector not found in rewards info file"); - } - - if (rewardsAgentOrigin) { - logger.debug(`📝 Adding RewardsAgentOrigin parameter: ${rewardsAgentOrigin}`); - parameterCollection.addParameter({ - name: "RewardsAgentOrigin", - value: rewardsAgentOrigin - }); - } else { - logger.warn("⚠️ RewardsAgentOrigin not found in deployments file"); - } - if (serviceManagerAddress) { logger.debug(`📝 Adding DatahavenServiceManagerAddress parameter: ${serviceManagerAddress}`); parameterCollection.addParameter({ @@ -282,14 +250,11 @@ const buildDeploymentEnv = (options: ContractDeploymentOptions) => { const emitOwnerTransactionCalldata = async (chain?: string) => { try { const deployments = await parseDeploymentsFile(chain); - const rewardsInfo = await parseRewardsInfoFile(chain); const serviceManager = deployments.ServiceManager; - const rewardsRegistry = deployments.RewardsRegistry; - const rewardsAgent = rewardsInfo.RewardsAgent; - if (!serviceManager || !rewardsRegistry || !rewardsAgent) { - logger.warn("⚠️ Missing deployment artifacts; cannot produce multisig calldata."); + if (!serviceManager) { + logger.warn("⚠️ Missing ServiceManager address; cannot produce multisig calldata."); return; } @@ -304,28 +269,6 @@ const emitOwnerTransactionCalldata = async (chain?: string) => { functionName: "updateAVSMetadataURI", args: [""] }) - }, - { - label: "Attach RewardsRegistry", - description: "DataHavenServiceManager.setRewardsRegistry(VALIDATORS_SET_ID, address)", - to: serviceManager, - value: "0", - data: encodeFunctionData({ - abi: dataHavenServiceManagerAbi, - functionName: "setRewardsRegistry", - args: [0, rewardsRegistry] - }) - }, - { - label: "Set Rewards Agent", - description: "DataHavenServiceManager.setRewardsAgent(VALIDATORS_SET_ID, address)", - to: serviceManager, - value: "0", - data: encodeFunctionData({ - abi: dataHavenServiceManagerAbi, - functionName: "setRewardsAgent", - args: [0, rewardsAgent] - }) } ]; diff --git a/test/suites/rewards-message.test.ts b/test/suites/rewards-message.test.ts deleted file mode 100644 index 651f1082..00000000 --- a/test/suites/rewards-message.test.ts +++ /dev/null @@ -1,257 +0,0 @@ -import { beforeAll, describe, expect, it } from "bun:test"; -import { ANVIL_FUNDED_ACCOUNTS, CROSS_CHAIN_TIMEOUTS, logger } from "utils"; -import { type Address, decodeEventLog, type Hex, isAddressEqual, padHex } from "viem"; -import validatorSet from "../configs/validator-set.json"; -import { BaseTestSuite } from "../framework"; -import { getContractInstance, parseRewardsInfoFile } from "../utils/contracts"; -import { waitForDataHavenEvent, waitForEthereumEvent } from "../utils/events"; - -class RewardsMessageTestSuite extends BaseTestSuite { - constructor() { - super({ - suiteName: "rewards-message" - }); - - this.setupHooks(); - } -} - -const suite = new RewardsMessageTestSuite(); - -describe("Rewards Message Flow", () => { - let rewardsRegistry!: any; - let serviceManager!: any; - let publicClient!: any; - let dhApi!: any; - let eraIndex!: number; - let totalPoints!: bigint; - let newRootIndex!: bigint; - - beforeAll(async () => { - const connectors = suite.getTestConnectors(); - publicClient = connectors.publicClient; - dhApi = connectors.dhApi; - - rewardsRegistry = await getContractInstance("RewardsRegistry"); - serviceManager = await getContractInstance("ServiceManager"); - }); - - it("should verify rewards infrastructure deployment", async () => { - const rewardsInfo = await parseRewardsInfoFile(); - const gateway = await getContractInstance("Gateway"); - - expect(rewardsRegistry.address).toBeDefined(); - expect(rewardsInfo.RewardsAgent).toBeDefined(); - expect(gateway.address).toBeDefined(); - - const [agentAddress, avsAddress] = await Promise.all([ - publicClient.readContract({ - address: rewardsRegistry.address, - abi: rewardsRegistry.abi, - functionName: "rewardsAgent", - args: [] - }) as Promise
, - publicClient.readContract({ - address: rewardsRegistry.address, - abi: rewardsRegistry.abi, - functionName: "avs", - args: [] - }) as Promise
- ]); - expect(isAddressEqual(agentAddress, rewardsInfo.RewardsAgent as Address)).toBe(true); - expect(isAddressEqual(avsAddress, serviceManager.address as Address)).toBe(true); - }); - - it("should wait for era end and update merkle root on Ethereum", async () => { - // Get current era and Ethereum block for event filtering - const [currentEra, fromBlock] = await Promise.all([ - dhApi.query.ExternalValidators.ActiveEra.getValue(), - publicClient.getBlockNumber() - ]); - - const currentEraIndex = currentEra?.index ?? 0; - logger.debug(`Waiting for RewardsMessageSent for era ${currentEraIndex}`); - - const payload = await waitForDataHavenEvent({ - api: dhApi, - pallet: "ExternalValidatorsRewards", - event: "RewardsMessageSent", - filter: (e) => e.era_index === currentEraIndex, - timeout: CROSS_CHAIN_TIMEOUTS.DH_TO_ETH_MS - }); - - expect(payload).toBeDefined(); - const merkleRoot: Hex = payload.rewards_merkle_root.asHex() as Hex; - totalPoints = payload.total_points; - eraIndex = payload.era_index; - expect(totalPoints).toBeGreaterThan(0n); - - // Wait for RewardsMerkleRootUpdated - const expectedRoot: Hex = padHex(merkleRoot, { size: 32 }); - const rootUpdatedEvent = await waitForEthereumEvent({ - client: publicClient, - address: rewardsRegistry.address, - abi: rewardsRegistry.abi, - eventName: "RewardsMerkleRootUpdated", - args: { newRoot: expectedRoot }, - fromBlock, - timeout: CROSS_CHAIN_TIMEOUTS.DH_TO_ETH_MS - }); - - const rootDecoded = decodeEventLog({ - abi: rewardsRegistry.abi, - data: rootUpdatedEvent.data, - topics: rootUpdatedEvent.topics - }) as { args: { oldRoot: Hex; newRoot: Hex; newRootIndex: bigint } }; - - // Store the new root index for claiming tests - newRootIndex = rootDecoded.args.newRootIndex; - - // Verify the stored root matches - const storedRoot: Hex = (await publicClient.readContract({ - address: rewardsRegistry.address, - abi: rewardsRegistry.abi, - functionName: "merkleRootHistory", - args: [newRootIndex] - })) as Hex; - - expect(storedRoot.toLowerCase()).toEqual(expectedRoot.toLowerCase()); - }); - - it("should successfully claim rewards for validator", async () => { - // Fund RewardsRegistry for reward payouts - const { walletClient: fundingWallet } = suite.getTestConnectors(); - const fundingTx = await fundingWallet.sendTransaction({ - to: rewardsRegistry.address as Address, - value: totalPoints, - chain: null - }); - const fundingReceipt = await publicClient.waitForTransactionReceipt({ hash: fundingTx }); - expect(fundingReceipt.status).toBe("success"); - - // Get era reward points and pick first validator - const rewardPoints = - await dhApi.query.ExternalValidatorsRewards.RewardPointsForEra.getValue(eraIndex); - expect(rewardPoints).toBeDefined(); - expect(rewardPoints.total).toBeGreaterThan(0); - - const relayerEthAccount = ANVIL_FUNDED_ACCOUNTS[1].publicKey.toLowerCase(); - const pick = rewardPoints.individual.find(([account]: [any, any]) => { - const v = validatorSet.validators.find( - (cfg) => cfg.solochainAddress.toLowerCase() === String(account).toLowerCase() - ); - return v && v.publicKey.toLowerCase() !== relayerEthAccount; - }); - const [validatorAccount, points] = (pick ?? rewardPoints.individual[0]) as [any, any]; - const match = validatorSet.validators.find( - (v) => v.solochainAddress.toLowerCase() === String(validatorAccount).toLowerCase() - ); - if (!match) { - throw new Error( - `Validator config not found for solochain address ${String(validatorAccount)}` - ); - } - - // Generate merkle proof via runtime API - const merkleProof = await dhApi.apis.ExternalValidatorsRewardsApi.generate_rewards_merkle_proof( - String(validatorAccount), - eraIndex - ); - expect(merkleProof).toBeDefined(); - - // Get validator credentials and create operator wallet - const factory = suite.getConnectorFactory(); - const operatorWallet = factory.createWalletClient(match!.privateKey as `0x${string}`); - const resolvedOperator: Address = operatorWallet.account.address; - - // Ensure claim not already recorded - const claimedBefore = (await publicClient.readContract({ - address: rewardsRegistry.address, - abi: rewardsRegistry.abi, - functionName: "hasClaimedByIndex", - args: [resolvedOperator, newRootIndex] - })) as boolean; - expect(claimedBefore).toBe(false); - - // Record balances at a specific block to avoid stale RPC reads - const balanceBlockNumber = Number(await publicClient.getBlockNumber()); - const operatorBalanceBefore = await publicClient.getBalance({ - address: resolvedOperator, - blockNumber: balanceBlockNumber - }); - const registryBalanceBefore = BigInt( - await publicClient.getBalance({ - address: rewardsRegistry.address as Address, - blockNumber: balanceBlockNumber - }) - ); - - // Submit claim transaction - const claimTx = await operatorWallet.writeContract({ - address: serviceManager.address as Address, - abi: serviceManager.abi, - functionName: "claimOperatorRewards", - chain: null, - args: [ - 0, // strategy index - newRootIndex, - BigInt(points), - BigInt(merkleProof.number_of_leaves), - BigInt(merkleProof.leaf_index), - merkleProof.proof.map((node: { asHex: () => string }) => node.asHex()) as readonly Hex[] - ] - }); - - // Wait for transaction confirmation - const claimReceipt = await publicClient.waitForTransactionReceipt({ hash: claimTx }); - expect(claimReceipt.status).toBe("success"); - logger.debug( - `Claim tx type: ${claimReceipt.type}, effectiveGasPrice: ${claimReceipt.effectiveGasPrice}, gasUsed: ${claimReceipt.gasUsed}` - ); - - // Decode and validate claim event from receipt - const claimLog = claimReceipt.logs.find( - (log: { address: string }) => - log.address.toLowerCase() === rewardsRegistry.address.toLowerCase() - )!; - const { args: claimArgs } = decodeEventLog({ - abi: rewardsRegistry.abi, - data: claimLog.data, - topics: claimLog.topics - }) as { - args: { operatorAddress: Address; rootIndex: bigint; points: bigint; rewardsAmount: bigint }; - }; - - expect(isAddressEqual(claimArgs.operatorAddress, resolvedOperator)).toBe(true); - expect(claimArgs.rootIndex).toEqual(newRootIndex); - expect(claimArgs.points).toEqual(BigInt(points)); - expect(claimArgs.rewardsAmount).toBeGreaterThan(0n); - - const claimedAfter = (await publicClient.readContract({ - address: rewardsRegistry.address, - abi: rewardsRegistry.abi, - functionName: "hasClaimedByIndex", - args: [resolvedOperator, newRootIndex] - })) as boolean; - expect(claimedAfter).toBe(true); - - // Validate RewardsRegistry balance decrease matches claimed rewards - const claimBlockNumber = Number(claimReceipt.blockNumber); - const registryBalanceAfter = await publicClient.getBalance({ - address: rewardsRegistry.address as Address, - blockNumber: claimBlockNumber - }); - expect(registryBalanceBefore - registryBalanceAfter).toEqual(claimArgs.rewardsAmount); - expect(claimArgs.rewardsAmount).toEqual(BigInt(points)); - - // Validate operator received rewards (accounting for gas) - const operatorBalanceAfter = await publicClient.getBalance({ - address: resolvedOperator, - blockNumber: claimBlockNumber - }); - const gasCost = BigInt(claimReceipt.gasUsed) * BigInt(claimReceipt.effectiveGasPrice); - const netBalanceChange = BigInt(operatorBalanceAfter) - BigInt(operatorBalanceBefore); - // Operator balance should have changed by: rewards - gasCost - expect(netBalanceChange + gasCost).toEqual(claimArgs.rewardsAmount); - }); -}); diff --git a/test/utils/contracts.ts b/test/utils/contracts.ts index 3433e718..48803aee 100644 --- a/test/utils/contracts.ts +++ b/test/utils/contracts.ts @@ -11,11 +11,6 @@ const ethAddressCustom = z.custom<`0x${string}`>( (val) => typeof val === "string" && ethAddressRegex.test(val), { message: "Invalid Ethereum address" } ); -const ethBytes32Regex = /^0x[a-fA-F0-9]{64}$/; -const ethBytes32 = z.string().regex(ethBytes32Regex, "Invalid Ethereum bytes32"); -const ethBytes4Regex = /^0x[a-fA-F0-9]{8}$/; -const ethBytes4 = z.string().regex(ethBytes4Regex, "Invalid Ethereum bytes4"); - const DeployedStrategySchema = z.object({ address: ethAddress, underlyingToken: ethAddress, @@ -29,8 +24,6 @@ const DeploymentsSchema = z.object({ Gateway: ethAddressCustom, ServiceManager: ethAddressCustom, ServiceManagerImplementation: ethAddressCustom, - RewardsRegistry: ethAddressCustom, - RewardsAgent: ethAddressCustom, DelegationManager: ethAddressCustom, StrategyManager: ethAddressCustom, AVSDirectory: ethAddressCustom, @@ -46,14 +39,6 @@ const DeploymentsSchema = z.object({ export type Deployments = z.infer; -const RewardsInfoSchema = z.object({ - RewardsAgent: ethAddressCustom, - RewardsAgentOrigin: ethBytes32, - updateRewardsMerkleRootSelector: ethBytes4 -}); - -export type RewardsInfo = z.infer; - export const parseDeploymentsFile = async (network = "anvil"): Promise => { const deploymentsPath = `../contracts/deployments/${network}.json`; const deploymentsFile = Bun.file(deploymentsPath); @@ -73,24 +58,6 @@ export const parseDeploymentsFile = async (network = "anvil"): Promise => { - const rewardsInfoPath = `../contracts/deployments/${network}-rewards-info.json`; - const rewardsInfoFile = Bun.file(rewardsInfoPath); - if (!(await rewardsInfoFile.exists())) { - logger.error(`File ${rewardsInfoPath} does not exist`); - throw new Error(`Error reading ${network} rewards info file`); - } - const rewardsInfoJson = await rewardsInfoFile.json(); - try { - const parsedRewardsInfo = RewardsInfoSchema.parse(rewardsInfoJson); - logger.debug(`Successfully parsed ${network} rewards info file.`); - return parsedRewardsInfo; - } catch (error) { - logger.error(`Failed to parse ${network} rewards info file:`, error); - throw new Error(`Invalid ${network} rewards info file format`); - } -}; - // Add to this if we add any new contracts const abiMap = { BeefyClient: generated.beefyClientAbi, @@ -98,8 +65,6 @@ const abiMap = { Gateway: generated.gatewayAbi, ServiceManager: generated.dataHavenServiceManagerAbi, ServiceManagerImplementation: generated.dataHavenServiceManagerAbi, - RewardsRegistry: generated.rewardsRegistryAbi, - RewardsAgent: generated.agentAbi, DelegationManager: generated.delegationManagerAbi, StrategyManager: generated.strategyManagerAbi, AVSDirectory: generated.avsDirectoryAbi, @@ -111,7 +76,7 @@ const abiMap = { ETHPOSDeposit: generated.iethposDepositAbi, BaseStrategyImplementation: generated.strategyBaseTvlLimitsAbi, DeployedStrategies: erc20Abi -} as const satisfies Record, Abi>; +} as const satisfies Record, Abi>; type ContractName = keyof typeof abiMap; type AbiFor = (typeof abiMap)[C]; diff --git a/test/wagmi.config.ts b/test/wagmi.config.ts index d2520010..56a37878 100644 --- a/test/wagmi.config.ts +++ b/test/wagmi.config.ts @@ -12,7 +12,6 @@ export default defineConfig({ "AgentExecutor.sol/**", "Gateway.sol/**", "TransparentUpgradeableProxy.sol/**", - "RewardsRegistry.sol/**", "Agent.sol/**", "StrategyManager.sol/**", "AVSDirectory.sol/**",