diff --git a/artifacts/contracts/OrionConfig.sol/OrionConfig.json b/artifacts/contracts/OrionConfig.sol/OrionConfig.json index 4abe34ea..d5a376f8 100644 --- a/artifacts/contracts/OrionConfig.sol/OrionConfig.json +++ b/artifacts/contracts/OrionConfig.sol/OrionConfig.json @@ -118,6 +118,19 @@ "name": "GuardianUpdated", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "maxFulfillBatchSize", + "type": "uint256" + } + ], + "name": "MaxFulfillBatchSizeUpdated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -616,6 +629,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "maxFulfillBatchSize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "minDepositAmount", @@ -825,6 +851,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "size", + "type": "uint256" + } + ], + "name": "setMaxFulfillBatchSize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -969,8 +1008,8 @@ "type": "function" } ], - "bytecode": "0x60a060405234801561000f575f5ffd5b506040516122a83803806122a883398101604081905261002e91610295565b826001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610065816101a6565b506001600160a01b03821661008d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100b45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03828116608052600380546001600160a01b03191691831691821790556007805461ffff60a01b1916610e0960a01b17905562093a80600a556040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801561012d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061015191906102d5565b6001600160a01b0382165f908152601160205260409020805460ff191660ff92909216919091179055610185600b826101c2565b50610191600d846101c2565b5061019d600f846101c2565b505050506102fc565b600180546001600160a01b03191690556101bf816101df565b50565b5f6101d6836001600160a01b03841661022e565b90505b92915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f81815260018301602052604081205461027357508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556101d9565b505f6101d9565b80516001600160a01b0381168114610290575f5ffd5b919050565b5f5f5f606084860312156102a7575f5ffd5b6102b08461027a565b92506102be6020850161027a565b91506102cc6040850161027a565b90509250925092565b5f602082840312156102e5575f5ffd5b815160ff811681146102f5575f5ffd5b9392505050565b608051611f716103375f395f818161061601528181610bbd01528181610f72015281816110c80152818161115a01526112960152611f715ff3fe608060405234801561000f575f5ffd5b506004361061024f575f3560e01c8063015df993146102535780630912ae6d1461027c5780630a8b78c7146102935780632095b01e146102a857806323a06a1c146102bb5780632a80cda3146102ce5780632b1a3a8b146102e1578063348ec5c8146102f45780633a0dad8e146103075780633af32abf1461031a5780633e3679d31461033d5780633ea7fbdb14610350578063452a93201461036357806355fba94e14610376578063567ba71314610389578063595c6a67146103af5780635f248368146103b7578063645006ca146103d257806366e87e7f146103db5780636f8d52b8146103ee578063715018a6146103f75780637158da7c146103ff578063785c7cf61461041257806379ba50971461043d5780637a0cb7841461044557806381408ce514610458578063849ede231461046b578063862a5f061461047e5780638771de87146104915780638a0dac4a146104a45780638a2ddd03146104b75780638da5cb5b146104bf5780638ee573ac146104c7578063b6dfcd8b146104e9578063ba968666146104fc578063c047417c1461050f578063c30dd72714610522578063d11f1c3514610535578063d1717c7d14610548578063d5460ab51461055c578063d86cd44e14610565578063e0876b441461057a578063e30c39781461058d578063e8ffccb714610595578063ed04f218146105a8578063edcf9c1f146105bb578063f05e5d4c146105c3578063f2fde38b146105d6578063f3cc6993146105e9578063f764eb45146105fe578063f851a44014610611575b5f5ffd5b600754610266906001600160a01b031681565b6040516102739190611bcf565b60405180910390f35b61028560095481565b604051908152602001610273565b6102a66102a1366004611bf7565b610638565b005b6102a66102b6366004611bf7565b6106b3565b6102a66102c9366004611c12565b61072e565b6102a66102dc366004611c5a565b610901565b6102a66102ef366004611bf7565b610980565b600454610266906001600160a01b031681565b600554610266906001600160a01b031681565b61032d610328366004611bf7565b610a37565b6040519015158152602001610273565b6102a661034b366004611c5a565b610a49565b6102a661035e366004611bf7565b610ac8565b600254610266906001600160a01b031681565b6102a6610384366004611bf7565b610b68565b60075461039d90600160a81b900460ff1681565b60405160ff9091168152602001610273565b6102a6610b9c565b6103bf610ce3565b60405161ffff9091168152602001610273565b61028560085481565b6102a66103e9366004611c71565b610cf3565b610285600a5481565b6102a6610d97565b600354610266906001600160a01b031681565b61039d610420366004611bf7565b6001600160a01b03165f9081526011602052604090205460ff1690565b6102a6610daa565b6102a6610453366004611ca5565b610df2565b6102a6610466366004611bf7565b610ed4565b600654610266906001600160a01b031681565b6102a661048c366004611bf7565b610f67565b61032d61049f366004611bf7565b6110b1565b6102a66104b2366004611bf7565b6110bd565b6102a661114f565b61026661127d565b61039d6104d5366004611bf7565b60116020525f908152604090205460ff1681565b6102a66104f7366004611bf7565b61128b565b6102a661050a366004611c5a565b611484565b6102a661051d366004611bf7565b6114e3565b6102a6610530366004611bf7565b6114f7565b61032d610543366004611bf7565b611572565b60075461039d90600160a01b900460ff1681565b6103bf61032081565b61056d61157e565b6040516102739190611cd8565b61032d610588366004611bf7565b611631565b61026661164e565b6102a66105a3366004611bf7565b61165d565b61056d6105b6366004611d23565b61170d565b61032d6117e9565b61032d6105d1366004611bf7565b6118f9565b6102a66105e4366004611bf7565b611905565b6007546103bf90600160b01b900461ffff1681565b61032d61060c366004611bf7565b61196b565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b610640611977565b6001600160a01b0381166106675760405163d92e233d60e01b815260040160405180910390fd5b6004546001600160a01b03161561069157604051630ea075bf60e21b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6106bb611977565b6001600160a01b0381166106e25760405163d92e233d60e01b815260040160405180910390fd5b6007546001600160a01b03161561070c57604051630ea075bf60e21b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b610736611977565b61073e6117e9565b61075b576040516312aecd8160e01b815260040160405180910390fd5b5f610767600b856119a9565b90508061078757604051630ea075bf60e21b815260040160405180910390fd5b836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107e79190611d3c565b6001600160a01b038581165f9081526011602052604090819020805460ff191660ff949094169390931790925560075491516302707eef60e51b8152911690634e0fdde09061083c9087908790600401611d5c565b5f604051808303815f87803b158015610853575f5ffd5b505af1158015610865573d5f5f3e3d5ffd5b50506005546040516359017aa960e01b81526001600160a01b0390911692506359017aa9915061089b9087908690600401611d5c565b5f604051808303815f87803b1580156108b2575f5ffd5b505af11580156108c4573d5f5f3e3d5ffd5b50506040516001600160a01b03871692507fdcbd8d9d0373041250f6c25b6b7aeccb3e9ff291e510ef85bb9f8ac09ceb6f6491505f90a250505050565b610909611977565b6109116117e9565b61092e576040516312aecd8160e01b815260040160405180910390fd5b805f0361094e576040516317dbc4cb60e21b815260040160405180910390fd5b600881905560405181907fb443c8bd39a1b60d415144f9148c6f90c2b68a553eb90c62cef5e44979db009d905f90a250565b610988611977565b604051633c17975360e21b8152309063f05e5d4c906109ab908490600401611bcf565b602060405180830381865afa1580156109c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ea9190611d76565b610a075760405163e6c4247b60e01b815260040160405180910390fd5b5f610a13600f836119c4565b905080610a335760405163e6c4247b60e01b815260040160405180910390fd5b5050565b5f610a43600b836119d8565b92915050565b610a51611977565b610a596117e9565b610a76576040516312aecd8160e01b815260040160405180910390fd5b805f03610a96576040516317dbc4cb60e21b815260040160405180910390fd5b600981905560405181907fae6971e30edc181eba4e21b6f0d1238924e807e69aa92f89401c1a836dd71547905f90a250565b610ad0611977565b610ad86117e9565b610af5576040516312aecd8160e01b815260040160405180910390fd5b6001600160a01b038116610b1c5760405163d92e233d60e01b815260040160405180910390fd5b6006546001600160a01b031615610b4657604051630ea075bf60e21b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610b70611977565b5f610b7c600d836119a9565b905080610a3357604051630ea075bf60e21b815260040160405180910390fd5b6002546001600160a01b03163314801590610be05750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b15610bfe57604051631a27eac360e11b815260040160405180910390fd5b6004805460408051638456cb5960e01b815290516001600160a01b0390921692638456cb5992828201925f929082900301818387803b158015610c3f575f5ffd5b505af1158015610c51573d5f5f3e3d5ffd5b5050505060055f9054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610ca1575f5ffd5b505af1158015610cb3573d5f5f3e3d5ffd5b50506040513392507f3fb8cabbd30f03312e3221b5b1c7ce132ca5d72cf36143a1d6d33b11ad4eba2491505f90a2565b5f610cee600b6119ec565b905090565b610cfb611977565b610d036117e9565b610d20576040516312aecd8160e01b815260040160405180910390fd5b61032061ffff82161115610d47576040516317dbc4cb60e21b815260040160405180910390fd5b6007805461ffff60b01b1916600160b01b61ffff84811682029290921792839055604051920416907f6c0e50288cc602be5dd504ce35358e01341e3c4f93e2e02b5a030a59bfdb84e2905f90a250565b610d9f611977565b610da85f6119f5565b565b3380610db461164e565b6001600160a01b031614610de6578060405163118cdaa760e01b8152600401610ddd9190611bcf565b60405180910390fd5b610def816119f5565b50565b6006546001600160a01b03163314610e1d57604051631a27eac360e11b815260040160405180910390fd5b6001600160a01b038216610e445760405163d92e233d60e01b815260040160405180910390fd5b5f6001826001811115610e5957610e59611d95565b03610e7057610e696014846119a9565b9050610e7e565b610e7b6012846119a9565b90505b80610e9c57604051630ea075bf60e21b815260040160405180910390fd5b6040516001600160a01b038416907f9a7094a648c0524f3d62b9167886d30be0e68cf53863fe556edda348f189445a905f90a2505050565b610edc611977565b604051638771de8760e01b81523090638771de8790610eff908490600401611bcf565b602060405180830381865afa158015610f1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3e9190611d76565b610f5b5760405163e6c4247b60e01b815260040160405180910390fd5b5f610a13600d836119c4565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fb057604051631a27eac360e11b815260040160405180910390fd5b610fb86117e9565b610fd5576040516312aecd8160e01b815260040160405180910390fd5b604051633821dad160e21b8152309063e0876b4490610ff8908490600401611bcf565b602060405180830381865afa158015611013573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110379190611d76565b6110545760405163e6c4247b60e01b815260040160405180910390fd5b61105f6016826119a9565b50806001600160a01b031663ca78e8396040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611098575f5ffd5b505af11580156110aa573d5f5f3e3d5ffd5b5050505050565b5f610a43600d836119d8565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461110657604051631a27eac360e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f6bb7ff33e730289800c62ad882105a144a74010d2bdbb9a942544a3005ad55bf905f90a250565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461119857604051631a27eac360e11b815260040160405180910390fd5b6004805460408051631fa5d41d60e11b815290516001600160a01b0390921692633f4ba83a92828201925f929082900301818387803b1580156111d9575f5ffd5b505af11580156111eb573d5f5f3e3d5ffd5b5050505060055f9054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561123b575f5ffd5b505af115801561124d573d5f5f3e3d5ffd5b50506040513392507f2d553fb579456929d17c4cf0dc43b2f2e8e5a8f917cadcc8a5f18e9c4010b75a91505f90a2565b5f546001600160a01b031690565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112d457604051631a27eac360e11b815260040160405180910390fd5b6112dc6117e9565b6112f9576040516312aecd8160e01b815260040160405180910390fd5b6003546001600160a01b0390811690821603611328576040516317dbc4cb60e21b815260040160405180910390fd5b5f611334600b836119c4565b905080611356578160405163751dff9760e11b8152600401610ddd9190611bcf565b604051631da09e4360e31b81525f90309063ed04f2189061137b908490600401611da9565b5f60405180830381865afa158015611395573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526113bc9190810190611dee565b90505f5b815181101561144b575f8282815181106113dc576113dc611eb8565b60200260200101519050806001600160a01b031663e3352c4c866040518263ffffffff1660e01b81526004016114129190611bcf565b5f604051808303815f87803b158015611429575f5ffd5b505af115801561143b573d5f5f3e3d5ffd5b50505050508060010190506113c0565b506040516001600160a01b038416907f952363a786fc6f24cfb955cd6207cf91ecee3a82a7dd0bc26891ff7647b5784c905f90a2505050565b61148c611977565b6114946117e9565b6114b1576040516312aecd8160e01b815260040160405180910390fd5b600a81905560405181907f0c525cc53958dcc2098f744df69dfeeb06316aeeca301ec2d5c5d4518e35f98a905f90a250565b6114eb611977565b5f610b7c600f836119a9565b6114ff611977565b6001600160a01b0381166115265760405163d92e233d60e01b815260040160405180910390fd5b6005546001600160a01b03161561155057604051630ea075bf60e21b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f610a436016836119d8565b60605f61158b600b6119ec565b90508061ffff166001600160401b038111156115a9576115a9611dcf565b6040519080825280602002602001820160405280156115d2578160200160208202803683370190505b5091505f5b8161ffff168161ffff16101561162c576115f6600b61ffff8316611a0e565b838261ffff168151811061160c5761160c611eb8565b6001600160a01b03909216602092830291909101909101526001016115d7565b505090565b5f61163d6014836119d8565b80610a435750610a436012836119d8565b6001546001600160a01b031690565b6005546001600160a01b031633146116885760405163ea8e4eb560e01b815260040160405180910390fd5b6116936016826119d8565b6116b05760405163e6c4247b60e01b815260040160405180910390fd5b5f6116bc6014836119c4565b9050806116f1575f6116cf6012846119c4565b9050806116ef5760405163e6c4247b60e01b815260040160405180910390fd5b505b6116fc6016836119c4565b506117086018836119a9565b505050565b60605f600183600181111561172457611724611d95565b14611730576012611733565b60145b90505f61173f826119ec565b90505f8161ffff166001600160401b0381111561175e5761175e611dcf565b604051908082528060200260200182016040528015611787578160200160208202803683370190505b5090505f5b8261ffff168161ffff1610156117e0576117aa8461ffff8316611a0e565b828261ffff16815181106117c0576117c0611eb8565b6001600160a01b039092166020928302919091019091015260010161178c565b50949350505050565b5f8060055f9054906101000a90046001600160a01b03166001600160a01b031663055ad42e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561183b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185f9190611ecc565b600381111561187057611870611d95565b148015610cee57505f60048054604080516302ad6a1760e11b815290516001600160a01b039092169263055ad42e9282820192602092908290030181865afa1580156118be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e29190611eea565b60048111156118f3576118f3611d95565b14905090565b5f610a43600f836119d8565b61190d611977565b600180546001600160a01b0319166001600160a01b03831690811790915561193361127d565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f610a436018836119d8565b3361198061127d565b6001600160a01b031614610da8573360405163118cdaa760e01b8152600401610ddd9190611bcf565b5f6119bd836001600160a01b038416611a19565b9392505050565b5f6119bd836001600160a01b038416611a60565b5f6119bd836001600160a01b038416611b43565b5f610a43825490565b600180546001600160a01b0319169055610def81611b5a565b5f6119bd8383611ba9565b5f611a248383611b43565b611a5957508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a43565b505f610a43565b5f8181526001830160205260408120548015611b3a575f611a82600183611f08565b85549091505f90611a9590600190611f08565b9050808214611af4575f865f018281548110611ab357611ab3611eb8565b905f5260205f200154905080875f018481548110611ad357611ad3611eb8565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611b0557611b05611f27565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a43565b5f915050610a43565b5f9081526001919091016020526040902054151590565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f825f018281548110611bbe57611bbe611eb8565b905f5260205f200154905092915050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610def575f5ffd5b5f60208284031215611c07575f5ffd5b81356119bd81611be3565b5f5f5f60608486031215611c24575f5ffd5b8335611c2f81611be3565b92506020840135611c3f81611be3565b91506040840135611c4f81611be3565b809150509250925092565b5f60208284031215611c6a575f5ffd5b5035919050565b5f60208284031215611c81575f5ffd5b813561ffff811681146119bd575f5ffd5b803560028110611ca0575f5ffd5b919050565b5f5f60408385031215611cb6575f5ffd5b8235611cc181611be3565b9150611ccf60208401611c92565b90509250929050565b602080825282518282018190525f918401906040840190835b81811015611d185783516001600160a01b0316835260209384019390920191600101611cf1565b509095945050505050565b5f60208284031215611d33575f5ffd5b6119bd82611c92565b5f60208284031215611d4c575f5ffd5b815160ff811681146119bd575f5ffd5b6001600160a01b0392831681529116602082015260400190565b5f60208284031215611d86575f5ffd5b815180151581146119bd575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b6020810160028310611dc957634e487b7160e01b5f52602160045260245ffd5b91905290565b634e487b7160e01b5f52604160045260245ffd5b8051611ca081611be3565b5f60208284031215611dfe575f5ffd5b81516001600160401b03811115611e13575f5ffd5b8201601f81018413611e23575f5ffd5b80516001600160401b03811115611e3c57611e3c611dcf565b604051600582901b90603f8201601f191681016001600160401b0381118282101715611e6a57611e6a611dcf565b604052918252602081840181019290810187841115611e87575f5ffd5b6020850194505b83851015611ead57611e9f85611de3565b815260209485019401611e8e565b509695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611edc575f5ffd5b8151600481106119bd575f5ffd5b5f60208284031215611efa575f5ffd5b8151600581106119bd575f5ffd5b81810381811115610a4357634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220ca29d7ee80aa9c2fd06065ea7903f3706f5edc2525614b7ed1a5d23d3c3b78c364736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061024f575f3560e01c8063015df993146102535780630912ae6d1461027c5780630a8b78c7146102935780632095b01e146102a857806323a06a1c146102bb5780632a80cda3146102ce5780632b1a3a8b146102e1578063348ec5c8146102f45780633a0dad8e146103075780633af32abf1461031a5780633e3679d31461033d5780633ea7fbdb14610350578063452a93201461036357806355fba94e14610376578063567ba71314610389578063595c6a67146103af5780635f248368146103b7578063645006ca146103d257806366e87e7f146103db5780636f8d52b8146103ee578063715018a6146103f75780637158da7c146103ff578063785c7cf61461041257806379ba50971461043d5780637a0cb7841461044557806381408ce514610458578063849ede231461046b578063862a5f061461047e5780638771de87146104915780638a0dac4a146104a45780638a2ddd03146104b75780638da5cb5b146104bf5780638ee573ac146104c7578063b6dfcd8b146104e9578063ba968666146104fc578063c047417c1461050f578063c30dd72714610522578063d11f1c3514610535578063d1717c7d14610548578063d5460ab51461055c578063d86cd44e14610565578063e0876b441461057a578063e30c39781461058d578063e8ffccb714610595578063ed04f218146105a8578063edcf9c1f146105bb578063f05e5d4c146105c3578063f2fde38b146105d6578063f3cc6993146105e9578063f764eb45146105fe578063f851a44014610611575b5f5ffd5b600754610266906001600160a01b031681565b6040516102739190611bcf565b60405180910390f35b61028560095481565b604051908152602001610273565b6102a66102a1366004611bf7565b610638565b005b6102a66102b6366004611bf7565b6106b3565b6102a66102c9366004611c12565b61072e565b6102a66102dc366004611c5a565b610901565b6102a66102ef366004611bf7565b610980565b600454610266906001600160a01b031681565b600554610266906001600160a01b031681565b61032d610328366004611bf7565b610a37565b6040519015158152602001610273565b6102a661034b366004611c5a565b610a49565b6102a661035e366004611bf7565b610ac8565b600254610266906001600160a01b031681565b6102a6610384366004611bf7565b610b68565b60075461039d90600160a81b900460ff1681565b60405160ff9091168152602001610273565b6102a6610b9c565b6103bf610ce3565b60405161ffff9091168152602001610273565b61028560085481565b6102a66103e9366004611c71565b610cf3565b610285600a5481565b6102a6610d97565b600354610266906001600160a01b031681565b61039d610420366004611bf7565b6001600160a01b03165f9081526011602052604090205460ff1690565b6102a6610daa565b6102a6610453366004611ca5565b610df2565b6102a6610466366004611bf7565b610ed4565b600654610266906001600160a01b031681565b6102a661048c366004611bf7565b610f67565b61032d61049f366004611bf7565b6110b1565b6102a66104b2366004611bf7565b6110bd565b6102a661114f565b61026661127d565b61039d6104d5366004611bf7565b60116020525f908152604090205460ff1681565b6102a66104f7366004611bf7565b61128b565b6102a661050a366004611c5a565b611484565b6102a661051d366004611bf7565b6114e3565b6102a6610530366004611bf7565b6114f7565b61032d610543366004611bf7565b611572565b60075461039d90600160a01b900460ff1681565b6103bf61032081565b61056d61157e565b6040516102739190611cd8565b61032d610588366004611bf7565b611631565b61026661164e565b6102a66105a3366004611bf7565b61165d565b61056d6105b6366004611d23565b61170d565b61032d6117e9565b61032d6105d1366004611bf7565b6118f9565b6102a66105e4366004611bf7565b611905565b6007546103bf90600160b01b900461ffff1681565b61032d61060c366004611bf7565b61196b565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b610640611977565b6001600160a01b0381166106675760405163d92e233d60e01b815260040160405180910390fd5b6004546001600160a01b03161561069157604051630ea075bf60e21b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6106bb611977565b6001600160a01b0381166106e25760405163d92e233d60e01b815260040160405180910390fd5b6007546001600160a01b03161561070c57604051630ea075bf60e21b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b610736611977565b61073e6117e9565b61075b576040516312aecd8160e01b815260040160405180910390fd5b5f610767600b856119a9565b90508061078757604051630ea075bf60e21b815260040160405180910390fd5b836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107e79190611d3c565b6001600160a01b038581165f9081526011602052604090819020805460ff191660ff949094169390931790925560075491516302707eef60e51b8152911690634e0fdde09061083c9087908790600401611d5c565b5f604051808303815f87803b158015610853575f5ffd5b505af1158015610865573d5f5f3e3d5ffd5b50506005546040516359017aa960e01b81526001600160a01b0390911692506359017aa9915061089b9087908690600401611d5c565b5f604051808303815f87803b1580156108b2575f5ffd5b505af11580156108c4573d5f5f3e3d5ffd5b50506040516001600160a01b03871692507fdcbd8d9d0373041250f6c25b6b7aeccb3e9ff291e510ef85bb9f8ac09ceb6f6491505f90a250505050565b610909611977565b6109116117e9565b61092e576040516312aecd8160e01b815260040160405180910390fd5b805f0361094e576040516317dbc4cb60e21b815260040160405180910390fd5b600881905560405181907fb443c8bd39a1b60d415144f9148c6f90c2b68a553eb90c62cef5e44979db009d905f90a250565b610988611977565b604051633c17975360e21b8152309063f05e5d4c906109ab908490600401611bcf565b602060405180830381865afa1580156109c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ea9190611d76565b610a075760405163e6c4247b60e01b815260040160405180910390fd5b5f610a13600f836119c4565b905080610a335760405163e6c4247b60e01b815260040160405180910390fd5b5050565b5f610a43600b836119d8565b92915050565b610a51611977565b610a596117e9565b610a76576040516312aecd8160e01b815260040160405180910390fd5b805f03610a96576040516317dbc4cb60e21b815260040160405180910390fd5b600981905560405181907fae6971e30edc181eba4e21b6f0d1238924e807e69aa92f89401c1a836dd71547905f90a250565b610ad0611977565b610ad86117e9565b610af5576040516312aecd8160e01b815260040160405180910390fd5b6001600160a01b038116610b1c5760405163d92e233d60e01b815260040160405180910390fd5b6006546001600160a01b031615610b4657604051630ea075bf60e21b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610b70611977565b5f610b7c600d836119a9565b905080610a3357604051630ea075bf60e21b815260040160405180910390fd5b6002546001600160a01b03163314801590610be05750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b15610bfe57604051631a27eac360e11b815260040160405180910390fd5b6004805460408051638456cb5960e01b815290516001600160a01b0390921692638456cb5992828201925f929082900301818387803b158015610c3f575f5ffd5b505af1158015610c51573d5f5f3e3d5ffd5b5050505060055f9054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610ca1575f5ffd5b505af1158015610cb3573d5f5f3e3d5ffd5b50506040513392507f3fb8cabbd30f03312e3221b5b1c7ce132ca5d72cf36143a1d6d33b11ad4eba2491505f90a2565b5f610cee600b6119ec565b905090565b610cfb611977565b610d036117e9565b610d20576040516312aecd8160e01b815260040160405180910390fd5b61032061ffff82161115610d47576040516317dbc4cb60e21b815260040160405180910390fd5b6007805461ffff60b01b1916600160b01b61ffff84811682029290921792839055604051920416907f6c0e50288cc602be5dd504ce35358e01341e3c4f93e2e02b5a030a59bfdb84e2905f90a250565b610d9f611977565b610da85f6119f5565b565b3380610db461164e565b6001600160a01b031614610de6578060405163118cdaa760e01b8152600401610ddd9190611bcf565b60405180910390fd5b610def816119f5565b50565b6006546001600160a01b03163314610e1d57604051631a27eac360e11b815260040160405180910390fd5b6001600160a01b038216610e445760405163d92e233d60e01b815260040160405180910390fd5b5f6001826001811115610e5957610e59611d95565b03610e7057610e696014846119a9565b9050610e7e565b610e7b6012846119a9565b90505b80610e9c57604051630ea075bf60e21b815260040160405180910390fd5b6040516001600160a01b038416907f9a7094a648c0524f3d62b9167886d30be0e68cf53863fe556edda348f189445a905f90a2505050565b610edc611977565b604051638771de8760e01b81523090638771de8790610eff908490600401611bcf565b602060405180830381865afa158015610f1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3e9190611d76565b610f5b5760405163e6c4247b60e01b815260040160405180910390fd5b5f610a13600d836119c4565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fb057604051631a27eac360e11b815260040160405180910390fd5b610fb86117e9565b610fd5576040516312aecd8160e01b815260040160405180910390fd5b604051633821dad160e21b8152309063e0876b4490610ff8908490600401611bcf565b602060405180830381865afa158015611013573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110379190611d76565b6110545760405163e6c4247b60e01b815260040160405180910390fd5b61105f6016826119a9565b50806001600160a01b031663ca78e8396040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611098575f5ffd5b505af11580156110aa573d5f5f3e3d5ffd5b5050505050565b5f610a43600d836119d8565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461110657604051631a27eac360e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f6bb7ff33e730289800c62ad882105a144a74010d2bdbb9a942544a3005ad55bf905f90a250565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461119857604051631a27eac360e11b815260040160405180910390fd5b6004805460408051631fa5d41d60e11b815290516001600160a01b0390921692633f4ba83a92828201925f929082900301818387803b1580156111d9575f5ffd5b505af11580156111eb573d5f5f3e3d5ffd5b5050505060055f9054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561123b575f5ffd5b505af115801561124d573d5f5f3e3d5ffd5b50506040513392507f2d553fb579456929d17c4cf0dc43b2f2e8e5a8f917cadcc8a5f18e9c4010b75a91505f90a2565b5f546001600160a01b031690565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112d457604051631a27eac360e11b815260040160405180910390fd5b6112dc6117e9565b6112f9576040516312aecd8160e01b815260040160405180910390fd5b6003546001600160a01b0390811690821603611328576040516317dbc4cb60e21b815260040160405180910390fd5b5f611334600b836119c4565b905080611356578160405163751dff9760e11b8152600401610ddd9190611bcf565b604051631da09e4360e31b81525f90309063ed04f2189061137b908490600401611da9565b5f60405180830381865afa158015611395573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526113bc9190810190611dee565b90505f5b815181101561144b575f8282815181106113dc576113dc611eb8565b60200260200101519050806001600160a01b031663e3352c4c866040518263ffffffff1660e01b81526004016114129190611bcf565b5f604051808303815f87803b158015611429575f5ffd5b505af115801561143b573d5f5f3e3d5ffd5b50505050508060010190506113c0565b506040516001600160a01b038416907f952363a786fc6f24cfb955cd6207cf91ecee3a82a7dd0bc26891ff7647b5784c905f90a2505050565b61148c611977565b6114946117e9565b6114b1576040516312aecd8160e01b815260040160405180910390fd5b600a81905560405181907f0c525cc53958dcc2098f744df69dfeeb06316aeeca301ec2d5c5d4518e35f98a905f90a250565b6114eb611977565b5f610b7c600f836119a9565b6114ff611977565b6001600160a01b0381166115265760405163d92e233d60e01b815260040160405180910390fd5b6005546001600160a01b03161561155057604051630ea075bf60e21b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f610a436016836119d8565b60605f61158b600b6119ec565b90508061ffff166001600160401b038111156115a9576115a9611dcf565b6040519080825280602002602001820160405280156115d2578160200160208202803683370190505b5091505f5b8161ffff168161ffff16101561162c576115f6600b61ffff8316611a0e565b838261ffff168151811061160c5761160c611eb8565b6001600160a01b03909216602092830291909101909101526001016115d7565b505090565b5f61163d6014836119d8565b80610a435750610a436012836119d8565b6001546001600160a01b031690565b6005546001600160a01b031633146116885760405163ea8e4eb560e01b815260040160405180910390fd5b6116936016826119d8565b6116b05760405163e6c4247b60e01b815260040160405180910390fd5b5f6116bc6014836119c4565b9050806116f1575f6116cf6012846119c4565b9050806116ef5760405163e6c4247b60e01b815260040160405180910390fd5b505b6116fc6016836119c4565b506117086018836119a9565b505050565b60605f600183600181111561172457611724611d95565b14611730576012611733565b60145b90505f61173f826119ec565b90505f8161ffff166001600160401b0381111561175e5761175e611dcf565b604051908082528060200260200182016040528015611787578160200160208202803683370190505b5090505f5b8261ffff168161ffff1610156117e0576117aa8461ffff8316611a0e565b828261ffff16815181106117c0576117c0611eb8565b6001600160a01b039092166020928302919091019091015260010161178c565b50949350505050565b5f8060055f9054906101000a90046001600160a01b03166001600160a01b031663055ad42e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561183b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185f9190611ecc565b600381111561187057611870611d95565b148015610cee57505f60048054604080516302ad6a1760e11b815290516001600160a01b039092169263055ad42e9282820192602092908290030181865afa1580156118be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e29190611eea565b60048111156118f3576118f3611d95565b14905090565b5f610a43600f836119d8565b61190d611977565b600180546001600160a01b0319166001600160a01b03831690811790915561193361127d565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f610a436018836119d8565b3361198061127d565b6001600160a01b031614610da8573360405163118cdaa760e01b8152600401610ddd9190611bcf565b5f6119bd836001600160a01b038416611a19565b9392505050565b5f6119bd836001600160a01b038416611a60565b5f6119bd836001600160a01b038416611b43565b5f610a43825490565b600180546001600160a01b0319169055610def81611b5a565b5f6119bd8383611ba9565b5f611a248383611b43565b611a5957508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a43565b505f610a43565b5f8181526001830160205260408120548015611b3a575f611a82600183611f08565b85549091505f90611a9590600190611f08565b9050808214611af4575f865f018281548110611ab357611ab3611eb8565b905f5260205f200154905080875f018481548110611ad357611ad3611eb8565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611b0557611b05611f27565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a43565b5f915050610a43565b5f9081526001919091016020526040902054151590565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f825f018281548110611bbe57611bbe611eb8565b905f5260205f200154905092915050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610def575f5ffd5b5f60208284031215611c07575f5ffd5b81356119bd81611be3565b5f5f5f60608486031215611c24575f5ffd5b8335611c2f81611be3565b92506020840135611c3f81611be3565b91506040840135611c4f81611be3565b809150509250925092565b5f60208284031215611c6a575f5ffd5b5035919050565b5f60208284031215611c81575f5ffd5b813561ffff811681146119bd575f5ffd5b803560028110611ca0575f5ffd5b919050565b5f5f60408385031215611cb6575f5ffd5b8235611cc181611be3565b9150611ccf60208401611c92565b90509250929050565b602080825282518282018190525f918401906040840190835b81811015611d185783516001600160a01b0316835260209384019390920191600101611cf1565b509095945050505050565b5f60208284031215611d33575f5ffd5b6119bd82611c92565b5f60208284031215611d4c575f5ffd5b815160ff811681146119bd575f5ffd5b6001600160a01b0392831681529116602082015260400190565b5f60208284031215611d86575f5ffd5b815180151581146119bd575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b6020810160028310611dc957634e487b7160e01b5f52602160045260245ffd5b91905290565b634e487b7160e01b5f52604160045260245ffd5b8051611ca081611be3565b5f60208284031215611dfe575f5ffd5b81516001600160401b03811115611e13575f5ffd5b8201601f81018413611e23575f5ffd5b80516001600160401b03811115611e3c57611e3c611dcf565b604051600582901b90603f8201601f191681016001600160401b0381118282101715611e6a57611e6a611dcf565b604052918252602081840181019290810187841115611e87575f5ffd5b6020850194505b83851015611ead57611e9f85611de3565b815260209485019401611e8e565b509695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611edc575f5ffd5b8151600481106119bd575f5ffd5b5f60208284031215611efa575f5ffd5b8151600581106119bd575f5ffd5b81810381811115610a4357634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220ca29d7ee80aa9c2fd06065ea7903f3706f5edc2525614b7ed1a5d23d3c3b78c364736f6c634300081c0033", + "bytecode": "0x60a060405234801561000f575f5ffd5b5060405161235e38038061235e83398101604081905261002e9161029a565b826001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610065816101ab565b506001600160a01b03821661008d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100b45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03828116608052600380546001600160a01b03191691831691821790556007805461ffff60a01b1916610e0960a01b17905562093a80600a556096600b556040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015610132573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061015691906102da565b6001600160a01b0382165f908152601260205260409020805460ff191660ff9290921691909117905561018a600c826101c7565b50610196600e846101c7565b506101a26010846101c7565b50505050610301565b600180546001600160a01b03191690556101c4816101e4565b50565b5f6101db836001600160a01b038416610233565b90505b92915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f81815260018301602052604081205461027857508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556101de565b505f6101de565b80516001600160a01b0381168114610295575f5ffd5b919050565b5f5f5f606084860312156102ac575f5ffd5b6102b58461027f565b92506102c36020850161027f565b91506102d16040850161027f565b90509250925092565b5f602082840312156102ea575f5ffd5b815160ff811681146102fa575f5ffd5b9392505050565b60805161202261033c5f395f818161064801528181610bef01528181611023015281816111790152818161120b015261134701526120225ff3fe608060405234801561000f575f5ffd5b5060043610610265575f3560e01c8063015df993146102695780630912ae6d146102925780630a8b78c7146102a95780632095b01e146102be57806323a06a1c146102d15780632a80cda3146102e45780632b1a3a8b146102f7578063348ec5c81461030a5780633a0dad8e1461031d5780633af32abf146103305780633e3679d3146103535780633ea7fbdb14610366578063452a93201461037957806355fba94e1461038c578063567ba7131461039f578063595c6a67146103c55780635f248368146103cd578063645006ca146103e857806366e87e7f146103f15780636f8d52b8146104045780636f9f4ee71461040d578063715018a6146104205780637158da7c14610428578063785c7cf61461043b57806379ba5097146104665780637a0cb7841461046e57806381408ce514610481578063849ede2314610494578063862a5f06146104a75780638771de87146104ba5780638a0dac4a146104cd5780638a2ddd03146104e05780638da5cb5b146104e85780638ee573ac146104f0578063b6dfcd8b14610512578063ba96866614610525578063bcdb8a1814610538578063c047417c14610541578063c30dd72714610554578063d11f1c3514610567578063d1717c7d1461057a578063d5460ab51461058e578063d86cd44e14610597578063e0876b44146105ac578063e30c3978146105bf578063e8ffccb7146105c7578063ed04f218146105da578063edcf9c1f146105ed578063f05e5d4c146105f5578063f2fde38b14610608578063f3cc69931461061b578063f764eb4514610630578063f851a44014610643575b5f5ffd5b60075461027c906001600160a01b031681565b6040516102899190611c80565b60405180910390f35b61029b60095481565b604051908152602001610289565b6102bc6102b7366004611ca8565b61066a565b005b6102bc6102cc366004611ca8565b6106e5565b6102bc6102df366004611cc3565b610760565b6102bc6102f2366004611d0b565b610933565b6102bc610305366004611ca8565b6109b2565b60045461027c906001600160a01b031681565b60055461027c906001600160a01b031681565b61034361033e366004611ca8565b610a69565b6040519015158152602001610289565b6102bc610361366004611d0b565b610a7b565b6102bc610374366004611ca8565b610afa565b60025461027c906001600160a01b031681565b6102bc61039a366004611ca8565b610b9a565b6007546103b390600160a81b900460ff1681565b60405160ff9091168152602001610289565b6102bc610bce565b6103d5610d15565b60405161ffff9091168152602001610289565b61029b60085481565b6102bc6103ff366004611d22565b610d25565b61029b600a5481565b6102bc61041b366004611d0b565b610dc9565b6102bc610e48565b60035461027c906001600160a01b031681565b6103b3610449366004611ca8565b6001600160a01b03165f9081526012602052604090205460ff1690565b6102bc610e5b565b6102bc61047c366004611d56565b610ea3565b6102bc61048f366004611ca8565b610f85565b60065461027c906001600160a01b031681565b6102bc6104b5366004611ca8565b611018565b6103436104c8366004611ca8565b611162565b6102bc6104db366004611ca8565b61116e565b6102bc611200565b61027c61132e565b6103b36104fe366004611ca8565b60126020525f908152604090205460ff1681565b6102bc610520366004611ca8565b61133c565b6102bc610533366004611d0b565b611535565b61029b600b5481565b6102bc61054f366004611ca8565b611594565b6102bc610562366004611ca8565b6115a8565b610343610575366004611ca8565b611623565b6007546103b390600160a01b900460ff1681565b6103d561032081565b61059f61162f565b6040516102899190611d89565b6103436105ba366004611ca8565b6116e2565b61027c6116ff565b6102bc6105d5366004611ca8565b61170e565b61059f6105e8366004611dd4565b6117be565b61034361189a565b610343610603366004611ca8565b6119aa565b6102bc610616366004611ca8565b6119b6565b6007546103d590600160b01b900461ffff1681565b61034361063e366004611ca8565b611a1c565b61027c7f000000000000000000000000000000000000000000000000000000000000000081565b610672611a28565b6001600160a01b0381166106995760405163d92e233d60e01b815260040160405180910390fd5b6004546001600160a01b0316156106c357604051630ea075bf60e21b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6106ed611a28565b6001600160a01b0381166107145760405163d92e233d60e01b815260040160405180910390fd5b6007546001600160a01b03161561073e57604051630ea075bf60e21b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b610768611a28565b61077061189a565b61078d576040516312aecd8160e01b815260040160405180910390fd5b5f610799600c85611a5a565b9050806107b957604051630ea075bf60e21b815260040160405180910390fd5b836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108199190611ded565b6001600160a01b038581165f9081526012602052604090819020805460ff191660ff949094169390931790925560075491516302707eef60e51b8152911690634e0fdde09061086e9087908790600401611e0d565b5f604051808303815f87803b158015610885575f5ffd5b505af1158015610897573d5f5f3e3d5ffd5b50506005546040516359017aa960e01b81526001600160a01b0390911692506359017aa991506108cd9087908690600401611e0d565b5f604051808303815f87803b1580156108e4575f5ffd5b505af11580156108f6573d5f5f3e3d5ffd5b50506040516001600160a01b03871692507fdcbd8d9d0373041250f6c25b6b7aeccb3e9ff291e510ef85bb9f8ac09ceb6f6491505f90a250505050565b61093b611a28565b61094361189a565b610960576040516312aecd8160e01b815260040160405180910390fd5b805f03610980576040516317dbc4cb60e21b815260040160405180910390fd5b600881905560405181907fb443c8bd39a1b60d415144f9148c6f90c2b68a553eb90c62cef5e44979db009d905f90a250565b6109ba611a28565b604051633c17975360e21b8152309063f05e5d4c906109dd908490600401611c80565b602060405180830381865afa1580156109f8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1c9190611e27565b610a395760405163e6c4247b60e01b815260040160405180910390fd5b5f610a45601083611a75565b905080610a655760405163e6c4247b60e01b815260040160405180910390fd5b5050565b5f610a75600c83611a89565b92915050565b610a83611a28565b610a8b61189a565b610aa8576040516312aecd8160e01b815260040160405180910390fd5b805f03610ac8576040516317dbc4cb60e21b815260040160405180910390fd5b600981905560405181907fae6971e30edc181eba4e21b6f0d1238924e807e69aa92f89401c1a836dd71547905f90a250565b610b02611a28565b610b0a61189a565b610b27576040516312aecd8160e01b815260040160405180910390fd5b6001600160a01b038116610b4e5760405163d92e233d60e01b815260040160405180910390fd5b6006546001600160a01b031615610b7857604051630ea075bf60e21b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610ba2611a28565b5f610bae600e83611a5a565b905080610a6557604051630ea075bf60e21b815260040160405180910390fd5b6002546001600160a01b03163314801590610c125750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b15610c3057604051631a27eac360e11b815260040160405180910390fd5b6004805460408051638456cb5960e01b815290516001600160a01b0390921692638456cb5992828201925f929082900301818387803b158015610c71575f5ffd5b505af1158015610c83573d5f5f3e3d5ffd5b5050505060055f9054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610cd3575f5ffd5b505af1158015610ce5573d5f5f3e3d5ffd5b50506040513392507f3fb8cabbd30f03312e3221b5b1c7ce132ca5d72cf36143a1d6d33b11ad4eba2491505f90a2565b5f610d20600c611a9d565b905090565b610d2d611a28565b610d3561189a565b610d52576040516312aecd8160e01b815260040160405180910390fd5b61032061ffff82161115610d79576040516317dbc4cb60e21b815260040160405180910390fd5b6007805461ffff60b01b1916600160b01b61ffff84811682029290921792839055604051920416907f6c0e50288cc602be5dd504ce35358e01341e3c4f93e2e02b5a030a59bfdb84e2905f90a250565b610dd1611a28565b610dd961189a565b610df6576040516312aecd8160e01b815260040160405180910390fd5b805f03610e16576040516317dbc4cb60e21b815260040160405180910390fd5b600b81905560405181907f33fdf3f87d7aca2f3fda0e9e480f611002f0ec96579de87d9109ef45c5be0fa2905f90a250565b610e50611a28565b610e595f611aa6565b565b3380610e656116ff565b6001600160a01b031614610e97578060405163118cdaa760e01b8152600401610e8e9190611c80565b60405180910390fd5b610ea081611aa6565b50565b6006546001600160a01b03163314610ece57604051631a27eac360e11b815260040160405180910390fd5b6001600160a01b038216610ef55760405163d92e233d60e01b815260040160405180910390fd5b5f6001826001811115610f0a57610f0a611e46565b03610f2157610f1a601584611a5a565b9050610f2f565b610f2c601384611a5a565b90505b80610f4d57604051630ea075bf60e21b815260040160405180910390fd5b6040516001600160a01b038416907f9a7094a648c0524f3d62b9167886d30be0e68cf53863fe556edda348f189445a905f90a2505050565b610f8d611a28565b604051638771de8760e01b81523090638771de8790610fb0908490600401611c80565b602060405180830381865afa158015610fcb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fef9190611e27565b61100c5760405163e6c4247b60e01b815260040160405180910390fd5b5f610a45600e83611a75565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461106157604051631a27eac360e11b815260040160405180910390fd5b61106961189a565b611086576040516312aecd8160e01b815260040160405180910390fd5b604051633821dad160e21b8152309063e0876b44906110a9908490600401611c80565b602060405180830381865afa1580156110c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e89190611e27565b6111055760405163e6c4247b60e01b815260040160405180910390fd5b611110601782611a5a565b50806001600160a01b031663ca78e8396040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611149575f5ffd5b505af115801561115b573d5f5f3e3d5ffd5b5050505050565b5f610a75600e83611a89565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111b757604051631a27eac360e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f6bb7ff33e730289800c62ad882105a144a74010d2bdbb9a942544a3005ad55bf905f90a250565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461124957604051631a27eac360e11b815260040160405180910390fd5b6004805460408051631fa5d41d60e11b815290516001600160a01b0390921692633f4ba83a92828201925f929082900301818387803b15801561128a575f5ffd5b505af115801561129c573d5f5f3e3d5ffd5b5050505060055f9054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156112ec575f5ffd5b505af11580156112fe573d5f5f3e3d5ffd5b50506040513392507f2d553fb579456929d17c4cf0dc43b2f2e8e5a8f917cadcc8a5f18e9c4010b75a91505f90a2565b5f546001600160a01b031690565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461138557604051631a27eac360e11b815260040160405180910390fd5b61138d61189a565b6113aa576040516312aecd8160e01b815260040160405180910390fd5b6003546001600160a01b03908116908216036113d9576040516317dbc4cb60e21b815260040160405180910390fd5b5f6113e5600c83611a75565b905080611407578160405163751dff9760e11b8152600401610e8e9190611c80565b604051631da09e4360e31b81525f90309063ed04f2189061142c908490600401611e5a565b5f60405180830381865afa158015611446573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261146d9190810190611e9f565b90505f5b81518110156114fc575f82828151811061148d5761148d611f69565b60200260200101519050806001600160a01b031663e3352c4c866040518263ffffffff1660e01b81526004016114c39190611c80565b5f604051808303815f87803b1580156114da575f5ffd5b505af11580156114ec573d5f5f3e3d5ffd5b5050505050806001019050611471565b506040516001600160a01b038416907f952363a786fc6f24cfb955cd6207cf91ecee3a82a7dd0bc26891ff7647b5784c905f90a2505050565b61153d611a28565b61154561189a565b611562576040516312aecd8160e01b815260040160405180910390fd5b600a81905560405181907f0c525cc53958dcc2098f744df69dfeeb06316aeeca301ec2d5c5d4518e35f98a905f90a250565b61159c611a28565b5f610bae601083611a5a565b6115b0611a28565b6001600160a01b0381166115d75760405163d92e233d60e01b815260040160405180910390fd5b6005546001600160a01b03161561160157604051630ea075bf60e21b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f610a75601783611a89565b60605f61163c600c611a9d565b90508061ffff166001600160401b0381111561165a5761165a611e80565b604051908082528060200260200182016040528015611683578160200160208202803683370190505b5091505f5b8161ffff168161ffff1610156116dd576116a7600c61ffff8316611abf565b838261ffff16815181106116bd576116bd611f69565b6001600160a01b0390921660209283029190910190910152600101611688565b505090565b5f6116ee601583611a89565b80610a755750610a75601383611a89565b6001546001600160a01b031690565b6005546001600160a01b031633146117395760405163ea8e4eb560e01b815260040160405180910390fd5b611744601782611a89565b6117615760405163e6c4247b60e01b815260040160405180910390fd5b5f61176d601583611a75565b9050806117a2575f611780601384611a75565b9050806117a05760405163e6c4247b60e01b815260040160405180910390fd5b505b6117ad601783611a75565b506117b9601983611a5a565b505050565b60605f60018360018111156117d5576117d5611e46565b146117e15760136117e4565b60155b90505f6117f082611a9d565b90505f8161ffff166001600160401b0381111561180f5761180f611e80565b604051908082528060200260200182016040528015611838578160200160208202803683370190505b5090505f5b8261ffff168161ffff1610156118915761185b8461ffff8316611abf565b828261ffff168151811061187157611871611f69565b6001600160a01b039092166020928302919091019091015260010161183d565b50949350505050565b5f8060055f9054906101000a90046001600160a01b03166001600160a01b031663055ad42e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ec573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119109190611f7d565b600381111561192157611921611e46565b148015610d2057505f60048054604080516302ad6a1760e11b815290516001600160a01b039092169263055ad42e9282820192602092908290030181865afa15801561196f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119939190611f9b565b60048111156119a4576119a4611e46565b14905090565b5f610a75601083611a89565b6119be611a28565b600180546001600160a01b0319166001600160a01b0383169081179091556119e461132e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f610a75601983611a89565b33611a3161132e565b6001600160a01b031614610e59573360405163118cdaa760e01b8152600401610e8e9190611c80565b5f611a6e836001600160a01b038416611aca565b9392505050565b5f611a6e836001600160a01b038416611b11565b5f611a6e836001600160a01b038416611bf4565b5f610a75825490565b600180546001600160a01b0319169055610ea081611c0b565b5f611a6e8383611c5a565b5f611ad58383611bf4565b611b0a57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a75565b505f610a75565b5f8181526001830160205260408120548015611beb575f611b33600183611fb9565b85549091505f90611b4690600190611fb9565b9050808214611ba5575f865f018281548110611b6457611b64611f69565b905f5260205f200154905080875f018481548110611b8457611b84611f69565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611bb657611bb6611fd8565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a75565b5f915050610a75565b5f9081526001919091016020526040902054151590565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f825f018281548110611c6f57611c6f611f69565b905f5260205f200154905092915050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610ea0575f5ffd5b5f60208284031215611cb8575f5ffd5b8135611a6e81611c94565b5f5f5f60608486031215611cd5575f5ffd5b8335611ce081611c94565b92506020840135611cf081611c94565b91506040840135611d0081611c94565b809150509250925092565b5f60208284031215611d1b575f5ffd5b5035919050565b5f60208284031215611d32575f5ffd5b813561ffff81168114611a6e575f5ffd5b803560028110611d51575f5ffd5b919050565b5f5f60408385031215611d67575f5ffd5b8235611d7281611c94565b9150611d8060208401611d43565b90509250929050565b602080825282518282018190525f918401906040840190835b81811015611dc95783516001600160a01b0316835260209384019390920191600101611da2565b509095945050505050565b5f60208284031215611de4575f5ffd5b611a6e82611d43565b5f60208284031215611dfd575f5ffd5b815160ff81168114611a6e575f5ffd5b6001600160a01b0392831681529116602082015260400190565b5f60208284031215611e37575f5ffd5b81518015158114611a6e575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b6020810160028310611e7a57634e487b7160e01b5f52602160045260245ffd5b91905290565b634e487b7160e01b5f52604160045260245ffd5b8051611d5181611c94565b5f60208284031215611eaf575f5ffd5b81516001600160401b03811115611ec4575f5ffd5b8201601f81018413611ed4575f5ffd5b80516001600160401b03811115611eed57611eed611e80565b604051600582901b90603f8201601f191681016001600160401b0381118282101715611f1b57611f1b611e80565b604052918252602081840181019290810187841115611f38575f5ffd5b6020850194505b83851015611f5e57611f5085611e94565b815260209485019401611f3f565b509695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611f8d575f5ffd5b815160048110611a6e575f5ffd5b5f60208284031215611fab575f5ffd5b815160058110611a6e575f5ffd5b81810381811115610a7557634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea264697066735822122034b205f4e40c65bbf62cdb7200344a349770b8b3e8411aa9cdfb484c837b277e64736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610265575f3560e01c8063015df993146102695780630912ae6d146102925780630a8b78c7146102a95780632095b01e146102be57806323a06a1c146102d15780632a80cda3146102e45780632b1a3a8b146102f7578063348ec5c81461030a5780633a0dad8e1461031d5780633af32abf146103305780633e3679d3146103535780633ea7fbdb14610366578063452a93201461037957806355fba94e1461038c578063567ba7131461039f578063595c6a67146103c55780635f248368146103cd578063645006ca146103e857806366e87e7f146103f15780636f8d52b8146104045780636f9f4ee71461040d578063715018a6146104205780637158da7c14610428578063785c7cf61461043b57806379ba5097146104665780637a0cb7841461046e57806381408ce514610481578063849ede2314610494578063862a5f06146104a75780638771de87146104ba5780638a0dac4a146104cd5780638a2ddd03146104e05780638da5cb5b146104e85780638ee573ac146104f0578063b6dfcd8b14610512578063ba96866614610525578063bcdb8a1814610538578063c047417c14610541578063c30dd72714610554578063d11f1c3514610567578063d1717c7d1461057a578063d5460ab51461058e578063d86cd44e14610597578063e0876b44146105ac578063e30c3978146105bf578063e8ffccb7146105c7578063ed04f218146105da578063edcf9c1f146105ed578063f05e5d4c146105f5578063f2fde38b14610608578063f3cc69931461061b578063f764eb4514610630578063f851a44014610643575b5f5ffd5b60075461027c906001600160a01b031681565b6040516102899190611c80565b60405180910390f35b61029b60095481565b604051908152602001610289565b6102bc6102b7366004611ca8565b61066a565b005b6102bc6102cc366004611ca8565b6106e5565b6102bc6102df366004611cc3565b610760565b6102bc6102f2366004611d0b565b610933565b6102bc610305366004611ca8565b6109b2565b60045461027c906001600160a01b031681565b60055461027c906001600160a01b031681565b61034361033e366004611ca8565b610a69565b6040519015158152602001610289565b6102bc610361366004611d0b565b610a7b565b6102bc610374366004611ca8565b610afa565b60025461027c906001600160a01b031681565b6102bc61039a366004611ca8565b610b9a565b6007546103b390600160a81b900460ff1681565b60405160ff9091168152602001610289565b6102bc610bce565b6103d5610d15565b60405161ffff9091168152602001610289565b61029b60085481565b6102bc6103ff366004611d22565b610d25565b61029b600a5481565b6102bc61041b366004611d0b565b610dc9565b6102bc610e48565b60035461027c906001600160a01b031681565b6103b3610449366004611ca8565b6001600160a01b03165f9081526012602052604090205460ff1690565b6102bc610e5b565b6102bc61047c366004611d56565b610ea3565b6102bc61048f366004611ca8565b610f85565b60065461027c906001600160a01b031681565b6102bc6104b5366004611ca8565b611018565b6103436104c8366004611ca8565b611162565b6102bc6104db366004611ca8565b61116e565b6102bc611200565b61027c61132e565b6103b36104fe366004611ca8565b60126020525f908152604090205460ff1681565b6102bc610520366004611ca8565b61133c565b6102bc610533366004611d0b565b611535565b61029b600b5481565b6102bc61054f366004611ca8565b611594565b6102bc610562366004611ca8565b6115a8565b610343610575366004611ca8565b611623565b6007546103b390600160a01b900460ff1681565b6103d561032081565b61059f61162f565b6040516102899190611d89565b6103436105ba366004611ca8565b6116e2565b61027c6116ff565b6102bc6105d5366004611ca8565b61170e565b61059f6105e8366004611dd4565b6117be565b61034361189a565b610343610603366004611ca8565b6119aa565b6102bc610616366004611ca8565b6119b6565b6007546103d590600160b01b900461ffff1681565b61034361063e366004611ca8565b611a1c565b61027c7f000000000000000000000000000000000000000000000000000000000000000081565b610672611a28565b6001600160a01b0381166106995760405163d92e233d60e01b815260040160405180910390fd5b6004546001600160a01b0316156106c357604051630ea075bf60e21b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6106ed611a28565b6001600160a01b0381166107145760405163d92e233d60e01b815260040160405180910390fd5b6007546001600160a01b03161561073e57604051630ea075bf60e21b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b610768611a28565b61077061189a565b61078d576040516312aecd8160e01b815260040160405180910390fd5b5f610799600c85611a5a565b9050806107b957604051630ea075bf60e21b815260040160405180910390fd5b836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108199190611ded565b6001600160a01b038581165f9081526012602052604090819020805460ff191660ff949094169390931790925560075491516302707eef60e51b8152911690634e0fdde09061086e9087908790600401611e0d565b5f604051808303815f87803b158015610885575f5ffd5b505af1158015610897573d5f5f3e3d5ffd5b50506005546040516359017aa960e01b81526001600160a01b0390911692506359017aa991506108cd9087908690600401611e0d565b5f604051808303815f87803b1580156108e4575f5ffd5b505af11580156108f6573d5f5f3e3d5ffd5b50506040516001600160a01b03871692507fdcbd8d9d0373041250f6c25b6b7aeccb3e9ff291e510ef85bb9f8ac09ceb6f6491505f90a250505050565b61093b611a28565b61094361189a565b610960576040516312aecd8160e01b815260040160405180910390fd5b805f03610980576040516317dbc4cb60e21b815260040160405180910390fd5b600881905560405181907fb443c8bd39a1b60d415144f9148c6f90c2b68a553eb90c62cef5e44979db009d905f90a250565b6109ba611a28565b604051633c17975360e21b8152309063f05e5d4c906109dd908490600401611c80565b602060405180830381865afa1580156109f8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1c9190611e27565b610a395760405163e6c4247b60e01b815260040160405180910390fd5b5f610a45601083611a75565b905080610a655760405163e6c4247b60e01b815260040160405180910390fd5b5050565b5f610a75600c83611a89565b92915050565b610a83611a28565b610a8b61189a565b610aa8576040516312aecd8160e01b815260040160405180910390fd5b805f03610ac8576040516317dbc4cb60e21b815260040160405180910390fd5b600981905560405181907fae6971e30edc181eba4e21b6f0d1238924e807e69aa92f89401c1a836dd71547905f90a250565b610b02611a28565b610b0a61189a565b610b27576040516312aecd8160e01b815260040160405180910390fd5b6001600160a01b038116610b4e5760405163d92e233d60e01b815260040160405180910390fd5b6006546001600160a01b031615610b7857604051630ea075bf60e21b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610ba2611a28565b5f610bae600e83611a5a565b905080610a6557604051630ea075bf60e21b815260040160405180910390fd5b6002546001600160a01b03163314801590610c125750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b15610c3057604051631a27eac360e11b815260040160405180910390fd5b6004805460408051638456cb5960e01b815290516001600160a01b0390921692638456cb5992828201925f929082900301818387803b158015610c71575f5ffd5b505af1158015610c83573d5f5f3e3d5ffd5b5050505060055f9054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610cd3575f5ffd5b505af1158015610ce5573d5f5f3e3d5ffd5b50506040513392507f3fb8cabbd30f03312e3221b5b1c7ce132ca5d72cf36143a1d6d33b11ad4eba2491505f90a2565b5f610d20600c611a9d565b905090565b610d2d611a28565b610d3561189a565b610d52576040516312aecd8160e01b815260040160405180910390fd5b61032061ffff82161115610d79576040516317dbc4cb60e21b815260040160405180910390fd5b6007805461ffff60b01b1916600160b01b61ffff84811682029290921792839055604051920416907f6c0e50288cc602be5dd504ce35358e01341e3c4f93e2e02b5a030a59bfdb84e2905f90a250565b610dd1611a28565b610dd961189a565b610df6576040516312aecd8160e01b815260040160405180910390fd5b805f03610e16576040516317dbc4cb60e21b815260040160405180910390fd5b600b81905560405181907f33fdf3f87d7aca2f3fda0e9e480f611002f0ec96579de87d9109ef45c5be0fa2905f90a250565b610e50611a28565b610e595f611aa6565b565b3380610e656116ff565b6001600160a01b031614610e97578060405163118cdaa760e01b8152600401610e8e9190611c80565b60405180910390fd5b610ea081611aa6565b50565b6006546001600160a01b03163314610ece57604051631a27eac360e11b815260040160405180910390fd5b6001600160a01b038216610ef55760405163d92e233d60e01b815260040160405180910390fd5b5f6001826001811115610f0a57610f0a611e46565b03610f2157610f1a601584611a5a565b9050610f2f565b610f2c601384611a5a565b90505b80610f4d57604051630ea075bf60e21b815260040160405180910390fd5b6040516001600160a01b038416907f9a7094a648c0524f3d62b9167886d30be0e68cf53863fe556edda348f189445a905f90a2505050565b610f8d611a28565b604051638771de8760e01b81523090638771de8790610fb0908490600401611c80565b602060405180830381865afa158015610fcb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fef9190611e27565b61100c5760405163e6c4247b60e01b815260040160405180910390fd5b5f610a45600e83611a75565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461106157604051631a27eac360e11b815260040160405180910390fd5b61106961189a565b611086576040516312aecd8160e01b815260040160405180910390fd5b604051633821dad160e21b8152309063e0876b44906110a9908490600401611c80565b602060405180830381865afa1580156110c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e89190611e27565b6111055760405163e6c4247b60e01b815260040160405180910390fd5b611110601782611a5a565b50806001600160a01b031663ca78e8396040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611149575f5ffd5b505af115801561115b573d5f5f3e3d5ffd5b5050505050565b5f610a75600e83611a89565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111b757604051631a27eac360e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f6bb7ff33e730289800c62ad882105a144a74010d2bdbb9a942544a3005ad55bf905f90a250565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461124957604051631a27eac360e11b815260040160405180910390fd5b6004805460408051631fa5d41d60e11b815290516001600160a01b0390921692633f4ba83a92828201925f929082900301818387803b15801561128a575f5ffd5b505af115801561129c573d5f5f3e3d5ffd5b5050505060055f9054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156112ec575f5ffd5b505af11580156112fe573d5f5f3e3d5ffd5b50506040513392507f2d553fb579456929d17c4cf0dc43b2f2e8e5a8f917cadcc8a5f18e9c4010b75a91505f90a2565b5f546001600160a01b031690565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461138557604051631a27eac360e11b815260040160405180910390fd5b61138d61189a565b6113aa576040516312aecd8160e01b815260040160405180910390fd5b6003546001600160a01b03908116908216036113d9576040516317dbc4cb60e21b815260040160405180910390fd5b5f6113e5600c83611a75565b905080611407578160405163751dff9760e11b8152600401610e8e9190611c80565b604051631da09e4360e31b81525f90309063ed04f2189061142c908490600401611e5a565b5f60405180830381865afa158015611446573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261146d9190810190611e9f565b90505f5b81518110156114fc575f82828151811061148d5761148d611f69565b60200260200101519050806001600160a01b031663e3352c4c866040518263ffffffff1660e01b81526004016114c39190611c80565b5f604051808303815f87803b1580156114da575f5ffd5b505af11580156114ec573d5f5f3e3d5ffd5b5050505050806001019050611471565b506040516001600160a01b038416907f952363a786fc6f24cfb955cd6207cf91ecee3a82a7dd0bc26891ff7647b5784c905f90a2505050565b61153d611a28565b61154561189a565b611562576040516312aecd8160e01b815260040160405180910390fd5b600a81905560405181907f0c525cc53958dcc2098f744df69dfeeb06316aeeca301ec2d5c5d4518e35f98a905f90a250565b61159c611a28565b5f610bae601083611a5a565b6115b0611a28565b6001600160a01b0381166115d75760405163d92e233d60e01b815260040160405180910390fd5b6005546001600160a01b03161561160157604051630ea075bf60e21b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f610a75601783611a89565b60605f61163c600c611a9d565b90508061ffff166001600160401b0381111561165a5761165a611e80565b604051908082528060200260200182016040528015611683578160200160208202803683370190505b5091505f5b8161ffff168161ffff1610156116dd576116a7600c61ffff8316611abf565b838261ffff16815181106116bd576116bd611f69565b6001600160a01b0390921660209283029190910190910152600101611688565b505090565b5f6116ee601583611a89565b80610a755750610a75601383611a89565b6001546001600160a01b031690565b6005546001600160a01b031633146117395760405163ea8e4eb560e01b815260040160405180910390fd5b611744601782611a89565b6117615760405163e6c4247b60e01b815260040160405180910390fd5b5f61176d601583611a75565b9050806117a2575f611780601384611a75565b9050806117a05760405163e6c4247b60e01b815260040160405180910390fd5b505b6117ad601783611a75565b506117b9601983611a5a565b505050565b60605f60018360018111156117d5576117d5611e46565b146117e15760136117e4565b60155b90505f6117f082611a9d565b90505f8161ffff166001600160401b0381111561180f5761180f611e80565b604051908082528060200260200182016040528015611838578160200160208202803683370190505b5090505f5b8261ffff168161ffff1610156118915761185b8461ffff8316611abf565b828261ffff168151811061187157611871611f69565b6001600160a01b039092166020928302919091019091015260010161183d565b50949350505050565b5f8060055f9054906101000a90046001600160a01b03166001600160a01b031663055ad42e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ec573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119109190611f7d565b600381111561192157611921611e46565b148015610d2057505f60048054604080516302ad6a1760e11b815290516001600160a01b039092169263055ad42e9282820192602092908290030181865afa15801561196f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119939190611f9b565b60048111156119a4576119a4611e46565b14905090565b5f610a75601083611a89565b6119be611a28565b600180546001600160a01b0319166001600160a01b0383169081179091556119e461132e565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f610a75601983611a89565b33611a3161132e565b6001600160a01b031614610e59573360405163118cdaa760e01b8152600401610e8e9190611c80565b5f611a6e836001600160a01b038416611aca565b9392505050565b5f611a6e836001600160a01b038416611b11565b5f611a6e836001600160a01b038416611bf4565b5f610a75825490565b600180546001600160a01b0319169055610ea081611c0b565b5f611a6e8383611c5a565b5f611ad58383611bf4565b611b0a57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a75565b505f610a75565b5f8181526001830160205260408120548015611beb575f611b33600183611fb9565b85549091505f90611b4690600190611fb9565b9050808214611ba5575f865f018281548110611b6457611b64611f69565b905f5260205f200154905080875f018481548110611b8457611b84611f69565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611bb657611bb6611fd8565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a75565b5f915050610a75565b5f9081526001919091016020526040902054151590565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f825f018281548110611c6f57611c6f611f69565b905f5260205f200154905092915050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610ea0575f5ffd5b5f60208284031215611cb8575f5ffd5b8135611a6e81611c94565b5f5f5f60608486031215611cd5575f5ffd5b8335611ce081611c94565b92506020840135611cf081611c94565b91506040840135611d0081611c94565b809150509250925092565b5f60208284031215611d1b575f5ffd5b5035919050565b5f60208284031215611d32575f5ffd5b813561ffff81168114611a6e575f5ffd5b803560028110611d51575f5ffd5b919050565b5f5f60408385031215611d67575f5ffd5b8235611d7281611c94565b9150611d8060208401611d43565b90509250929050565b602080825282518282018190525f918401906040840190835b81811015611dc95783516001600160a01b0316835260209384019390920191600101611da2565b509095945050505050565b5f60208284031215611de4575f5ffd5b611a6e82611d43565b5f60208284031215611dfd575f5ffd5b815160ff81168114611a6e575f5ffd5b6001600160a01b0392831681529116602082015260400190565b5f60208284031215611e37575f5ffd5b81518015158114611a6e575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b6020810160028310611e7a57634e487b7160e01b5f52602160045260245ffd5b91905290565b634e487b7160e01b5f52604160045260245ffd5b8051611d5181611c94565b5f60208284031215611eaf575f5ffd5b81516001600160401b03811115611ec4575f5ffd5b8201601f81018413611ed4575f5ffd5b80516001600160401b03811115611eed57611eed611e80565b604051600582901b90603f8201601f191681016001600160401b0381118282101715611f1b57611f1b611e80565b604052918252602081840181019290810187841115611f38575f5ffd5b6020850194505b83851015611f5e57611f5085611e94565b815260209485019401611f3f565b509695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611f8d575f5ffd5b815160048110611a6e575f5ffd5b5f60208284031215611fab575f5ffd5b815160058110611a6e575f5ffd5b81810381811115610a7557634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea264697066735822122034b205f4e40c65bbf62cdb7200344a349770b8b3e8411aa9cdfb484c837b277e64736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/execution/OrionAssetERC4626ExecutionAdapter.sol/OrionAssetERC4626ExecutionAdapter.json b/artifacts/contracts/execution/OrionAssetERC4626ExecutionAdapter.sol/OrionAssetERC4626ExecutionAdapter.json index 2ecb28a0..fed76ef9 100644 --- a/artifacts/contracts/execution/OrionAssetERC4626ExecutionAdapter.sol/OrionAssetERC4626ExecutionAdapter.json +++ b/artifacts/contracts/execution/OrionAssetERC4626ExecutionAdapter.sol/OrionAssetERC4626ExecutionAdapter.json @@ -169,8 +169,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561000f575f5ffd5b506040516108b53803806108b583398101604081905261002e9161018b565b6001600160a01b0381166100555760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811790915560408051631c56369f60e21b81529051637158da7c916004808201926020929091908290030181865afa1580156100ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100cf919061018b565b600180546001600160a01b0319166001600160a01b039283161790555f5460408051631d06d6c760e11b815290519190921691633a0dad8e9160048083019260209291908290030181865afa15801561012a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014e919061018b565b600280546001600160a01b0319166001600160a01b0392909216919091179055506101ad565b6001600160a01b0381168114610188575f5ffd5b50565b5f6020828403121561019b575f5ffd5b81516101a681610174565b9392505050565b6106fb806101ba5f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c80633a0dad8e146100645780633da7c9f61461008d5780636c197ff5146100a257806379502c55146100c3578063ad071f00146100d5578063cce7ec13146100e8575b5f5ffd5b600254610077906001600160a01b031681565b6040516100849190610606565b60405180910390f35b6100a061009b36600461062e565b6100fb565b005b6100b56100b0366004610650565b6101b2565b604051908152602001610084565b5f54610077906001600160a01b031681565b600154610077906001600160a01b031681565b6100b56100f6366004610650565b610280565b806001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610155575060408051601f3d908101601f191682019092526101529181019061067a565b60015b61017d5780604051633283c86d60e21b81526004016101749190610606565b60405180910390fd5b6001546001600160a01b038281169116146101ad5781604051633283c86d60e21b81526004016101749190610606565b505b50565b6002545f906001600160a01b031633146101df57604051631a27eac360e11b815260040160405180910390fd5b815f036102015782604051636b30633560e01b81526004016101749190610606565b604051635d043b2960e11b8152600481018390523360248201819052604482015283906001600160a01b0382169063ba087652906064016020604051808303815f875af1158015610254573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102789190610695565b949350505050565b6002545f906001600160a01b031633146102ad57604051631a27eac360e11b815260040160405180910390fd5b815f036102cf5782604051636b30633560e01b81526004016101749190610606565b60405163b3d7f6b960e01b81526004810183905283905f906001600160a01b0383169063b3d7f6b990602401602060405180830381865afa158015610316573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061033a9190610695565b600154909150610355906001600160a01b0316333084610432565b60015461036d906001600160a01b0316865f1961049f565b6040516394bf804d60e01b8152600481018590523060248201526001600160a01b038316906394bf804d906044016020604051808303815f875af11580156103b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103db9190610695565b92508083146103ff5784604051630cddc7f360e01b81526004016101749190610606565b600154610416906001600160a01b0316865f61049f565b61042a6001600160a01b038616338661052f565b505092915050565b6040516001600160a01b0384811660248301528381166044830152606482018390526104999186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061055a565b50505050565b5f836001600160a01b031663095ea7b384846040516024016104c29291906106ac565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090506104fb84826105bd565b6104995761052584856001600160a01b031663095ea7b3865f6040516024016104679291906106ac565b610499848261055a565b61055583846001600160a01b031663a9059cbb85856040516024016104679291906106ac565b505050565b5f5f60205f8451602086015f885af180610579576040513d5f823e3d81fd5b50505f513d9150811561059057806001141561059d565b6001600160a01b0384163b155b156104995783604051635274afe760e01b81526004016101749190610606565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156105fc575081156105ee57806001146105fc565b5f866001600160a01b03163b115b9695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146101af575f5ffd5b5f6020828403121561063e575f5ffd5b81356106498161061a565b9392505050565b5f5f60408385031215610661575f5ffd5b823561066c8161061a565b946020939093013593505050565b5f6020828403121561068a575f5ffd5b81516106498161061a565b5f602082840312156106a5575f5ffd5b5051919050565b6001600160a01b0392909216825260208201526040019056fea26469706673582212208a85e11f4a0da661ac72d965b600b7bb95d00ee61774ffc1ec5a6c3aedb12de064736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610060575f3560e01c80633a0dad8e146100645780633da7c9f61461008d5780636c197ff5146100a257806379502c55146100c3578063ad071f00146100d5578063cce7ec13146100e8575b5f5ffd5b600254610077906001600160a01b031681565b6040516100849190610606565b60405180910390f35b6100a061009b36600461062e565b6100fb565b005b6100b56100b0366004610650565b6101b2565b604051908152602001610084565b5f54610077906001600160a01b031681565b600154610077906001600160a01b031681565b6100b56100f6366004610650565b610280565b806001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610155575060408051601f3d908101601f191682019092526101529181019061067a565b60015b61017d5780604051633283c86d60e21b81526004016101749190610606565b60405180910390fd5b6001546001600160a01b038281169116146101ad5781604051633283c86d60e21b81526004016101749190610606565b505b50565b6002545f906001600160a01b031633146101df57604051631a27eac360e11b815260040160405180910390fd5b815f036102015782604051636b30633560e01b81526004016101749190610606565b604051635d043b2960e11b8152600481018390523360248201819052604482015283906001600160a01b0382169063ba087652906064016020604051808303815f875af1158015610254573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102789190610695565b949350505050565b6002545f906001600160a01b031633146102ad57604051631a27eac360e11b815260040160405180910390fd5b815f036102cf5782604051636b30633560e01b81526004016101749190610606565b60405163b3d7f6b960e01b81526004810183905283905f906001600160a01b0383169063b3d7f6b990602401602060405180830381865afa158015610316573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061033a9190610695565b600154909150610355906001600160a01b0316333084610432565b60015461036d906001600160a01b0316865f1961049f565b6040516394bf804d60e01b8152600481018590523060248201526001600160a01b038316906394bf804d906044016020604051808303815f875af11580156103b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103db9190610695565b92508083146103ff5784604051630cddc7f360e01b81526004016101749190610606565b600154610416906001600160a01b0316865f61049f565b61042a6001600160a01b038616338661052f565b505092915050565b6040516001600160a01b0384811660248301528381166044830152606482018390526104999186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061055a565b50505050565b5f836001600160a01b031663095ea7b384846040516024016104c29291906106ac565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090506104fb84826105bd565b6104995761052584856001600160a01b031663095ea7b3865f6040516024016104679291906106ac565b610499848261055a565b61055583846001600160a01b031663a9059cbb85856040516024016104679291906106ac565b505050565b5f5f60205f8451602086015f885af180610579576040513d5f823e3d81fd5b50505f513d9150811561059057806001141561059d565b6001600160a01b0384163b155b156104995783604051635274afe760e01b81526004016101749190610606565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156105fc575081156105ee57806001146105fc565b5f866001600160a01b03163b115b9695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146101af575f5ffd5b5f6020828403121561063e575f5ffd5b81356106498161061a565b9392505050565b5f5f60408385031215610661575f5ffd5b823561066c8161061a565b946020939093013593505050565b5f6020828403121561068a575f5ffd5b81516106498161061a565b5f602082840312156106a5575f5ffd5b5051919050565b6001600160a01b0392909216825260208201526040019056fea26469706673582212208a85e11f4a0da661ac72d965b600b7bb95d00ee61774ffc1ec5a6c3aedb12de064736f6c634300081c0033", + "bytecode": "0x608060405234801561000f575f5ffd5b506040516108b53803806108b583398101604081905261002e9161018b565b6001600160a01b0381166100555760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811790915560408051631c56369f60e21b81529051637158da7c916004808201926020929091908290030181865afa1580156100ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100cf919061018b565b600180546001600160a01b0319166001600160a01b039283161790555f5460408051631d06d6c760e11b815290519190921691633a0dad8e9160048083019260209291908290030181865afa15801561012a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014e919061018b565b600280546001600160a01b0319166001600160a01b0392909216919091179055506101ad565b6001600160a01b0381168114610188575f5ffd5b50565b5f6020828403121561019b575f5ffd5b81516101a681610174565b9392505050565b6106fb806101ba5f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c80633a0dad8e146100645780633da7c9f61461008d5780636c197ff5146100a257806379502c55146100c3578063ad071f00146100d5578063cce7ec13146100e8575b5f5ffd5b600254610077906001600160a01b031681565b6040516100849190610606565b60405180910390f35b6100a061009b36600461062e565b6100fb565b005b6100b56100b0366004610650565b6101b2565b604051908152602001610084565b5f54610077906001600160a01b031681565b600154610077906001600160a01b031681565b6100b56100f6366004610650565b610280565b806001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610155575060408051601f3d908101601f191682019092526101529181019061067a565b60015b61017d5780604051633283c86d60e21b81526004016101749190610606565b60405180910390fd5b6001546001600160a01b038281169116146101ad5781604051633283c86d60e21b81526004016101749190610606565b505b50565b6002545f906001600160a01b031633146101df57604051631a27eac360e11b815260040160405180910390fd5b815f036102015782604051636b30633560e01b81526004016101749190610606565b604051635d043b2960e11b8152600481018390523360248201819052604482015283906001600160a01b0382169063ba087652906064016020604051808303815f875af1158015610254573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102789190610695565b949350505050565b6002545f906001600160a01b031633146102ad57604051631a27eac360e11b815260040160405180910390fd5b815f036102cf5782604051636b30633560e01b81526004016101749190610606565b60405163b3d7f6b960e01b81526004810183905283905f906001600160a01b0383169063b3d7f6b990602401602060405180830381865afa158015610316573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061033a9190610695565b600154909150610355906001600160a01b0316333084610432565b60015461036d906001600160a01b0316865f1961049f565b6040516394bf804d60e01b8152600481018590523060248201526001600160a01b038316906394bf804d906044016020604051808303815f875af11580156103b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103db9190610695565b92508083146103ff5784604051630cddc7f360e01b81526004016101749190610606565b600154610416906001600160a01b0316865f61049f565b61042a6001600160a01b038616338661052f565b505092915050565b6040516001600160a01b0384811660248301528381166044830152606482018390526104999186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061055a565b50505050565b5f836001600160a01b031663095ea7b384846040516024016104c29291906106ac565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090506104fb84826105bd565b6104995761052584856001600160a01b031663095ea7b3865f6040516024016104679291906106ac565b610499848261055a565b61055583846001600160a01b031663a9059cbb85856040516024016104679291906106ac565b505050565b5f5f60205f8451602086015f885af180610579576040513d5f823e3d81fd5b50505f513d9150811561059057806001141561059d565b6001600160a01b0384163b155b156104995783604051635274afe760e01b81526004016101749190610606565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156105fc575081156105ee57806001146105fc565b5f866001600160a01b03163b115b9695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146101af575f5ffd5b5f6020828403121561063e575f5ffd5b81356106498161061a565b9392505050565b5f5f60408385031215610661575f5ffd5b823561066c8161061a565b946020939093013593505050565b5f6020828403121561068a575f5ffd5b81516106498161061a565b5f602082840312156106a5575f5ffd5b5051919050565b6001600160a01b0392909216825260208201526040019056fea2646970667358221220bdc409a14fdae37091cefc090d15dc62d282209c5b38fcdcc99dfe96a934fff064736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610060575f3560e01c80633a0dad8e146100645780633da7c9f61461008d5780636c197ff5146100a257806379502c55146100c3578063ad071f00146100d5578063cce7ec13146100e8575b5f5ffd5b600254610077906001600160a01b031681565b6040516100849190610606565b60405180910390f35b6100a061009b36600461062e565b6100fb565b005b6100b56100b0366004610650565b6101b2565b604051908152602001610084565b5f54610077906001600160a01b031681565b600154610077906001600160a01b031681565b6100b56100f6366004610650565b610280565b806001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610155575060408051601f3d908101601f191682019092526101529181019061067a565b60015b61017d5780604051633283c86d60e21b81526004016101749190610606565b60405180910390fd5b6001546001600160a01b038281169116146101ad5781604051633283c86d60e21b81526004016101749190610606565b505b50565b6002545f906001600160a01b031633146101df57604051631a27eac360e11b815260040160405180910390fd5b815f036102015782604051636b30633560e01b81526004016101749190610606565b604051635d043b2960e11b8152600481018390523360248201819052604482015283906001600160a01b0382169063ba087652906064016020604051808303815f875af1158015610254573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102789190610695565b949350505050565b6002545f906001600160a01b031633146102ad57604051631a27eac360e11b815260040160405180910390fd5b815f036102cf5782604051636b30633560e01b81526004016101749190610606565b60405163b3d7f6b960e01b81526004810183905283905f906001600160a01b0383169063b3d7f6b990602401602060405180830381865afa158015610316573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061033a9190610695565b600154909150610355906001600160a01b0316333084610432565b60015461036d906001600160a01b0316865f1961049f565b6040516394bf804d60e01b8152600481018590523060248201526001600160a01b038316906394bf804d906044016020604051808303815f875af11580156103b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103db9190610695565b92508083146103ff5784604051630cddc7f360e01b81526004016101749190610606565b600154610416906001600160a01b0316865f61049f565b61042a6001600160a01b038616338661052f565b505092915050565b6040516001600160a01b0384811660248301528381166044830152606482018390526104999186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061055a565b50505050565b5f836001600160a01b031663095ea7b384846040516024016104c29291906106ac565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090506104fb84826105bd565b6104995761052584856001600160a01b031663095ea7b3865f6040516024016104679291906106ac565b610499848261055a565b61055583846001600160a01b031663a9059cbb85856040516024016104679291906106ac565b505050565b5f5f60205f8451602086015f885af180610579576040513d5f823e3d81fd5b50505f513d9150811561059057806001141561059d565b6001600160a01b0384163b155b156104995783604051635274afe760e01b81526004016101749190610606565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156105fc575081156105ee57806001146105fc565b5f866001600160a01b03163b115b9695505050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146101af575f5ffd5b5f6020828403121561063e575f5ffd5b81356106498161061a565b9392505050565b5f5f60408385031215610661575f5ffd5b823561066c8161061a565b946020939093013593505050565b5f6020828403121561068a575f5ffd5b81516106498161061a565b5f602082840312156106a5575f5ffd5b5051919050565b6001600160a01b0392909216825260208201526040019056fea2646970667358221220bdc409a14fdae37091cefc090d15dc62d282209c5b38fcdcc99dfe96a934fff064736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/factories/TransparentVaultFactory.sol/TransparentVaultFactory.json b/artifacts/contracts/factories/TransparentVaultFactory.sol/TransparentVaultFactory.json index 1448c719..a2e683bf 100644 --- a/artifacts/contracts/factories/TransparentVaultFactory.sol/TransparentVaultFactory.json +++ b/artifacts/contracts/factories/TransparentVaultFactory.sol/TransparentVaultFactory.json @@ -148,8 +148,8 @@ "type": "function" } ], - "bytecode": "0x6080604052348015600e575f5ffd5b506040516154ca3803806154ca833981016040819052602b916074565b6001600160a01b03811660515760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055609f565b5f602082840312156083575f5ffd5b81516001600160a01b03811681146098575f5ffd5b9392505050565b61541e806100ac5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063341624941461003857806379502c5514610061575b5f5ffd5b61004b6100463660046103ab565b610073565b604051610058919061046c565b60405180910390f35b5f5461004b906001600160a01b031681565b5f8054604051638771de8760e01b815233916001600160a01b031690638771de87906100a390849060040161046c565b602060405180830381865afa1580156100be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e29190610480565b6100ff57604051631a27eac360e11b815260040160405180910390fd5b5f54604051633c17975360e21b81526001600160a01b039091169063f05e5d4c9061012e908d9060040161046c565b602060405180830381865afa158015610149573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016d9190610480565b61018a57604051631a27eac360e11b815260040160405180910390fd5b5f5f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101fd9190610480565b61021a576040516312aecd8160e01b815260040160405180910390fd5b5f818b5f5f9054906101000a90046001600160a01b03168c8c8c8c8c8c8c60405161024490610344565b6102579a999897969594939291906104ce565b604051809103905ff080158015610270573d5f5f3e3d5ffd5b505f8054604051631e832de160e21b81529295508593506001600160a01b031691637a0cb784916102a691859190600401610561565b5f604051808303815f87803b1580156102bd575f5ffd5b505af11580156102cf573d5f5f3e3d5ffd5b505050508a6001600160a01b0316826001600160a01b0316846001600160a01b03167f91700e2f05ab5287673189803ecbe9609340db98196ee954ac9865daf4308d2d8d8d8d8d8d8d8d5f60405161032e98979695949392919061057e565b60405180910390a4505098975050505050505050565b614e0a806105df83390190565b5f5f83601f840112610361575f5ffd5b5081356001600160401b03811115610377575f5ffd5b60208301915083602082850101111561038e575f5ffd5b9250929050565b803561ffff811681146103a6575f5ffd5b919050565b5f5f5f5f5f5f5f5f60c0898b0312156103c2575f5ffd5b88356001600160a01b03811681146103d8575f5ffd5b975060208901356001600160401b038111156103f2575f5ffd5b6103fe8b828c01610351565b90985096505060408901356001600160401b0381111561041c575f5ffd5b6104288b828c01610351565b909650945050606089013560ff81168114610441575f5ffd5b925061044f60808a01610395565b915061045d60a08a01610395565b90509295985092959890939650565b6001600160a01b0391909116815260200190565b5f60208284031215610490575f5ffd5b8151801515811461049f575f5ffd5b9392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b038b811682528a8116602083015289166040820152610100606082018190525f90610503908301898b6104a6565b828103608084015261051681888a6104a6565b60ff9690961660a0840152505061ffff92831660c0820152911660e090910152979650505050505050565b6002811061055d57634e487b7160e01b5f52602160045260245ffd5b9052565b6001600160a01b03831681526040810161049f6020830184610541565b60c081525f61059160c083018a8c6104a6565b82810360208401526105a481898b6104a6565b91505060ff8616604083015261ffff8516606083015261ffff841660808301526105d160a0830184610541565b999850505050505050505056fe60c060405234801561000f575f5ffd5b50604051614e0a380380614e0a83398101604081905261002e916109ae565b8787878787878787856001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610072573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100969190610a7d565b858560036100a48382610b23565b5060046100b18282610b23565b5050505f5f6100c58361066a60201b60201c565b91509150816100d55760126100d7565b805b60ff1660a05250506001600160a01b03908116608052600160055587166101115760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0386166101385760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b03808b166001600160a01b031992831617909255600780548a841690831617905560088054928916929091168217905560408051630691d8b960e31b8152905163348ec5c8916004808201926020929091908290030181865afa1580156101ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d09190610a7d565b60095f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b0316633a0dad8e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610231573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102559190610a7d565b600a5f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b031663d1717c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102da9190610bdd565b600a60146101000a81548160ff021916908360ff1602179055505f866001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610331573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103559190610a7d565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610390573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b49190610bdd565b9050601260ff821611156103db57604051631c03248960e11b815260040160405180910390fd5b600460ff85161115610400576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff84161115610427576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff8316111561044e576040516317dbc4cb60e21b815260040160405180910390fd5b8360ff16600481111561046357610463610bf6565b6017805460ff1916600183600481111561047f5761047f610bf6565b02179055506017805461ffff84811663010000000264ffff00000019918716610100029190911664ffffffff0019909216919091171790556104c281600a610d01565b60185560178054601a8054909160ff1690829060ff191660018360048111156104ed576104ed610bf6565b02179055508154815461ffff61010092839004811690920262ffff0019821681178455845463010000009081900490931690920264ffff0000001990921664ffffffff0019909116171781556001918201549101554260195561054e610740565b50505050505050505061065c60085f9054906101000a90046001600160a01b03166001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ce9190610a7d565b60085f9054906101000a90046001600160a01b03166001600160a01b031663d1717c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106429190610bdd565b61064d90600a610d01565b6020919063ffffffff16610815565b505050505050505050610e02565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b038716916106b091610d0f565b5f60405180830381855afa9150503d805f81146106e8576040519150601f19603f3d011682016040523d82523d5f602084013e6106ed565b606091505b509150915081801561070157506020815110155b15610734575f8180602001905181019061071b9190610d25565b905060ff8111610732576001969095509350505050565b505b505f9485945092505050565b60085460408051636c366a2760e11b815290515f926001600160a01b03169163d86cd44e91600480830192869291908290030181865afa158015610786573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107ad9190810190610d3c565b90505f5b8151811015610811575f6107e88383815181106107d0576107d0610dee565b6020026020010151600b61083260201b90919060201c565b90508061080857604051630ea075bf60e21b815260040160405180910390fd5b506001016107b1565b5050565b5f61082a846001600160a01b0385168461084f565b949350505050565b5f610846836001600160a01b03841661086b565b90505b92915050565b5f828152600284016020526040812082905561082a84846108b7565b5f8181526001830160205260408120546108b057508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610849565b505f610849565b5f610846838361086b565b6001600160a01b03811681146108d6575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610915576109156108d9565b604052919050565b5f82601f83011261092c575f5ffd5b81516001600160401b03811115610945576109456108d9565b610958601f8201601f19166020016108ed565b81815284602083860101111561096c575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b805160ff81168114610998575f5ffd5b919050565b805161ffff81168114610998575f5ffd5b5f5f5f5f5f5f5f5f610100898b0312156109c6575f5ffd5b88516109d1816108c2565b60208a01519098506109e2816108c2565b60408a01519097506109f3816108c2565b60608a01519096506001600160401b03811115610a0e575f5ffd5b610a1a8b828c0161091d565b60808b015190965090506001600160401b03811115610a37575f5ffd5b610a438b828c0161091d565b945050610a5260a08a01610988565b9250610a6060c08a0161099d565b9150610a6e60e08a0161099d565b90509295985092959890939650565b5f60208284031215610a8d575f5ffd5b8151610a98816108c2565b9392505050565b600181811c90821680610ab357607f821691505b602082108103610ad157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610b1e57805f5260205f20601f840160051c81016020851015610afc5750805b601f840160051c820191505b81811015610b1b575f8155600101610b08565b50505b505050565b81516001600160401b03811115610b3c57610b3c6108d9565b610b5081610b4a8454610a9f565b84610ad7565b6020601f821160018114610b82575f8315610b6b5750848201515b5f19600385901b1c1916600184901b178455610b1b565b5f84815260208120601f198516915b82811015610bb15787850151825560209485019460019092019101610b91565b5084821015610bce57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610bed575f5ffd5b61084682610988565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610c5957808504811115610c3d57610c3d610c0a565b6001841615610c4b57908102905b60019390931c928002610c22565b935093915050565b5f82610c6f57506001610849565b81610c7b57505f610849565b8160018114610c915760028114610c9b57610cb7565b6001915050610849565b60ff841115610cac57610cac610c0a565b50506001821b610849565b5060208310610133831016604e8410600b8410161715610cda575081810a610849565b610ce65f198484610c1e565b805f1904821115610cf957610cf9610c0a565b029392505050565b5f61084660ff841683610c61565b5f82518060208501845e5f920191825250919050565b5f60208284031215610d35575f5ffd5b5051919050565b5f60208284031215610d4c575f5ffd5b81516001600160401b03811115610d61575f5ffd5b8201601f81018413610d71575f5ffd5b80516001600160401b03811115610d8a57610d8a6108d9565b8060051b610d9a602082016108ed565b91825260208184018101929081019087841115610db5575f5ffd5b6020850194505b83851015610de35784519250610dd1836108c2565b82825260209485019490910190610dbc565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b60805160a051613fea610e205f395f50505f610fd30152613fea5ff3fe608060405234801561000f575f5ffd5b50600436106102e2575f3560e01c806395d89b411161018c57806395d89b411461051c57806397ee114414610524578063985ba4ae1461055a5780639908840c1461056d578063a68a526714610576578063a9059cbb14610589578063aa2f892d1461059c578063acdb3d51146105af578063b1bd7e2e146105b8578063b3d7f6b9146105cb578063b460af94146105de578063b6eba653146105ec578063ba08765214610602578063bdca916514610615578063c0b568e11461061e578063c3f0d30e14610631578063c63d75b61461045e578063c6e6f59214610644578063ca78e83914610657578063ce96cb771461065f578063d1717c7d14610672578063d3d0345814610686578063d82795481461069c578063d853365f146106a4578063d905777e146106ac578063dd62ed3e146106bf578063e3352c4c146106d2578063e51a85f6146106e5578063e5e97193146106f8578063e66f53b71461070b578063ef8b30f714610644578063f64c6f321461071e575f5ffd5b806301e1d114146102e657806303d44854146102fd57806306fdde031461031257806307a2d13a14610327578063095ea7b31461033a5780630a28a4771461035d5780630a605c6d146103705780630c6a62dd146103785780630d1e66671461038b5780630df571f71461039e57806318160ddd146103b157806318c21949146103b95780631f52692b146103cc57806323b872dd146103ec578063283c8168146103ff578063313ce56714610408578063348ec5c81461041d57806338d52e0f146104305780633a0dad8e146104385780633ab6d27c1461044b578063402d267d1461045e578063493a6e21146104725780634cdad506146103275780634e85b1351461048557806353a0bfdf1461049a5780636e553f65146104a757806370a08231146104ba5780637847ea53146104cd57806379502c55146104ed5780638f5c94651461050057806394bf804d146104a7575b5f5ffd5b600d545b6040519081526020015b60405180910390f35b61031061030b36600461379c565b610726565b005b61031a610975565b6040516102f4919061380b565b6102ea610335366004613840565b610a05565b61034d61034836600461386b565b610a16565b60405190151581526020016102f4565b6102ea61036b366004613840565b610a2d565b6015546102ea565b610310610386366004613895565b610a39565b610310610399366004613840565b610b39565b6103106103ac3660046138b0565b610e62565b6002546102ea565b6103106103c7366004613840565b610edd565b6006546103df906001600160a01b031681565b6040516102f491906138d0565b61034d6103fa3660046138e4565b610fac565b6102ea60195481565b60125b60405160ff90911681526020016102f4565b6009546103df906001600160a01b031681565b6103df610fd1565b600a546103df906001600160a01b031681565b61031061045936600461393f565b610ff5565b6102ea61046c366004613895565b505f1990565b610310610480366004613840565b6112a7565b61048d6114d2565b6040516102f491906139ca565b601c5461034d9060ff1681565b6102ea6104b53660046139dc565b6114e3565b6102ea6104c8366004613895565b6114fd565b6104d86301e1338081565b60405163ffffffff90911681526020016102f4565b6008546103df906001600160a01b031681565b61050961271081565b60405161ffff90911681526020016102f4565b61031a611517565b60175460185461054a9160ff81169161ffff610100830481169263010000009004169084565b6040516102f49493929190613a1e565b610310610568366004613a9c565b611526565b61050961012c81565b6102ea610584366004613ae3565b611633565b61034d61059736600461386b565b611673565b6103106105aa366004613840565b611680565b6102ea60165481565b6103106105c6366004613b11565b611916565b6102ea6105d9366004613840565b611b21565b6102ea6104b5366004613b4f565b6105f4611b2d565b6040516102f4929190613b83565b6102ea610610366004613b4f565b611de7565b610509610bb881565b61031061062c366004613840565b611fdd565b61031061063f366004613840565b612195565b6102ea610652366004613840565b61230d565b610310612318565b6102ea61066d366004613895565b612352565b600a5461040b90600160a01b900460ff1681565b61068e612365565b6040516102f4929190613be1565b610509609681565b61040b601281565b6102ea6106ba366004613895565b61248f565b6102ea6106cd366004613c2d565b612499565b6103106106e0366004613895565b6124c3565b6102ea6106f3366004613840565b6125ce565b610310610706366004613840565b612607565b6007546103df906001600160a01b031681565b6014546102ea565b6006546001600160a01b0316331461075157604051631a27eac360e11b815260040160405180910390fd5b61075b600b6127bf565b5f5b8181101561085b575f83838381811061077857610778613c59565b905060200201602081019061078d9190613895565b600854604051633af32abf60e01b81529192506001600160a01b031690633af32abf906107be9084906004016138d0565b602060405180830381865afa1580156107d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fd9190613c6d565b610825578060405163751dff9760e11b815260040161081c91906138d0565b60405180910390fd5b5f610831600b836127c8565b90508061085157604051630ea075bf60e21b815260040160405180910390fd5b505060010161075d565b506108c7306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf9190613c8c565b600b906127dc565b61093857610936306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092e9190613c8c565b600b906127c8565b505b7fa975983c7a4dcf80477a447433240de322f36428f1b3864e50d7a45e14c68b668282604051610969929190613ca7565b60405180910390a15050565b60606003805461098490613cf3565b80601f01602080910402602001604051908101604052809291908181526020018280546109b090613cf3565b80156109fb5780601f106109d2576101008083540402835291602001916109fb565b820191905f5260205f20905b8154815290600101906020018083116109de57829003601f168201915b5050505050905090565b5f610a10825f6127f0565b92915050565b5f33610a23818585612831565b5060019392505050565b5f610a10826001612843565b6006546001600160a01b03163314610a6457604051631a27eac360e11b815260040160405180910390fd5b600854604051633c17975360e21b81526001600160a01b039091169063f05e5d4c90610a949084906004016138d0565b602060405180830381865afa158015610aaf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad39190613c6d565b610af057604051631a27eac360e11b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f83293ffeebb677b167941693470018acf300605df266a35e9fdb66f24ff00fe0905f90a250565b610b41612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb59190613c6d565b610bd2576040516312aecd8160e01b815260040160405180910390fd5b601c5460ff1680610c4d575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590610c0e9030906004016138d0565b602060405180830381865afa158015610c29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4d9190613c6d565b15610c6b576040516304b1e71160e41b815260040160405180910390fd5b805f03610c9457610c7a610fd1565b604051636b30633560e01b815260040161081c91906138d0565b60085460408051633228036560e11b815290515f926001600160a01b03169163645006ca9160048083019260209291908290030181865afa158015610cdb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cff9190613d2b565b905080821015610d26578181604051631e2be21160e01b815260040161081c929190613d42565b5f610d2f610fd1565b6001600160a01b03166370a08231336040518263ffffffff1660e01b8152600401610d5a91906138d0565b602060405180830381865afa158015610d75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d999190613d2b565b905080831115610dbc57604051632ca2f52b60e11b815260040160405180910390fd5b600a54610de89033906001600160a01b031685610dd7610fd1565b6001600160a01b031692919061289f565b5f610df4600e3361290c565b9150610e0f905033610e068684613d64565b600e9190612932565b508360145f828254610e219190613d64565b9091555050604051849033907f55896b30a78fc55b78937f8014dde3f0035e9d37a4f6ac36841fb8b62f7e2b13905f90a3505050610e5f6001600555565b50565b6009546001600160a01b03163314610e8d57604051631a27eac360e11b815260040160405180910390fd5b8015610ed9578060165f828254610ea49190613d64565b9091555050601654604051829084907f8b8789cf9157fe7b016901e4ed3a5d0971caa8b7c031da0b25638ccf65841b2a905f90a45b5050565b6006546001600160a01b03163314610f0857604051631a27eac360e11b815260040160405180910390fd5b805f03610f1757610c7a610fd1565b601654811115610f3a57604051632ca2f52b60e11b815260040160405180910390fd5b8060165f828254610f4b9190613d77565b9091555050600a5460405163741fca4b60e01b8152600481018390526001600160a01b039091169063741fca4b906024015f604051808303815f87803b158015610f93575f5ffd5b505af1158015610fa5573d5f5f3e3d5ffd5b5050505050565b5f33610fb9858285612947565b610fc4858585612992565b60019150505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6006546001600160a01b0316331461102057604051631a27eac360e11b815260040160405180910390fd5b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611070573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110949190613c6d565b6110b1576040516312aecd8160e01b815260040160405180910390fd5b600460ff841611156110d6576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff831611156110fd576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff82161115611124576040516317dbc4cb60e21b815260040160405180910390fd5b61112c6129ef565b8051601a8054909190829060ff1916600183600481111561114f5761114f613a0a565b021790555060208201518154604084015161ffff90811663010000000264ffff0000001991909316610100021664ffffffff00199091161717815560609091015160019091015560ff831660048111156111ab576111ab613a0a565b6017805460ff191660018360048111156111c7576111c7613a0a565b02179055506017805461ffff83811663010000000264ffff00000019918616610100029190911664ffffffff00199092169190911717905560085460408051630df1aa5760e31b815290516001600160a01b0390921691636f8d52b8916004808201926020929091908290030181865afa158015611247573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126b9190613d2b565b6112759042613d64565b60195560405130907fb31d0e1c8c885e6966984333ce964f4a58ad72b6c4e89e688ecc4549ad97558e905f90a2505050565b600a546001600160a01b031633146112d257604051631a27eac360e11b815260040160405180910390fd5b6112da612875565b5f6112e56011612aa9565b90508063ffffffff165f036112fa57506114c8565b5f609663ffffffff83161161130f5781611312565b60965b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611365573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113899190613d8a565b90505f61139560025490565b90505f805b8461ffff168161ffff1610156114ab575f806113b7601182612ab3565b90925090506113c7601183612ac1565b505f6113d5828b885f612ad5565b90506113e13083612b0a565b6113eb8286613d64565b600a54604051634adfc2e760e01b81529196506001600160a01b031690634adfc2e79061141e9086908590600401613da5565b5f604051808303815f87803b158015611435575f5ffd5b505af1158015611447573d5f5f3e3d5ffd5b505050508661ffff16836001600160a01b0316306001600160a01b03167f215abfcd108b85fbee47f26fda2de66f90f14fa5fcaf0201698ad8ac9323545f8486604051611495929190613d42565b60405180910390a450505080600101905061139a565b508060155f8282546114bd9190613d77565b909155505050505050505b610e5f6001600555565b60606114de600b612b3e565b905090565b5f60405163125ad87760e31b815260040160405180910390fd5b6001600160a01b03165f9081526020819052604090205490565b60606004805461098490613cf3565b6009546001600160a01b0316331461155157604051631a27eac360e11b815260040160405180910390fd5b61155b601d612b4a565b815f5b8161ffff168161ffff1610156115d7576115ce85858361ffff1681811061158757611587613c59565b61159d9260206040909202019081019150613895565b86868461ffff168181106115b3576115b3613c59565b90506040020160200135601d6129329092919063ffffffff16565b5060010161155e565b505f6115ea60125b61033590600a613ea1565b6018549091508111156115fd5760188190555b600d83905560405183907f5e1ff954b5e5257e9ee5d4cb07059e8f5e69b1aaaf9911e5d8d90a6894de9c21905f90a25050505050565b5f61166b611642846001613d64565b61164a612b53565b61165590600a613ea1565b6002546116629190613d64565b86919085612bcf565b949350505050565b5f33610a23818585612992565b611688612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fc9190613c6d565b611719576040516312aecd8160e01b815260040160405180910390fd5b601c5460ff1680611794575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb45906117559030906004016138d0565b602060405180830381865afa158015611770573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117949190613c6d565b156117b2576040516304b1e71160e41b815260040160405180910390fd5b805f036117d45730604051636b30633560e01b815260040161081c91906138d0565b60085460408051630912ae6d60e01b815290515f926001600160a01b031691630912ae6d9160048083019260209291908290030181865afa15801561181b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183f9190613d2b565b905080821015611866578181604051631f29a4af60e31b815260040161081c929190613d42565b5f611870336114fd565b90508083111561189357604051632ca2f52b60e11b815260040160405180910390fd5b61189f3033818661289f565b5f6118ab60113361290c565b91506118c69050336118bd8684613d64565b60119190612932565b508360155f8282546118d89190613d64565b9091555050604051849033907f222dc200773fe9b45015bf792e8fee37d651e3590c215806a5042404b6d741d2905f90a3505050610e5f6001600555565b6007546001600160a01b0316331461194157604051631a27eac360e11b815260040160405180910390fd5b5f81900361196257604051631121aa8d60e01b815260040160405180910390fd5b61196c6020612b4a565b5f816001600160401b0381111561198557611985613eaf565b6040519080825280602002602001820160405280156119ae578160200160208202803683370190505b5090505f82815b8161ffff168161ffff161015611aab575f86868361ffff168181106119dc576119dc613c59565b6119f29260206040909202019081019150613895565b90505f87878461ffff16818110611a0b57611a0b613c59565b9050604002016020016020810190611a239190613ed4565b905081868461ffff1681518110611a3c57611a3c613c59565b6001600160a01b039092166020928302919091018201525f90611a69908463ffffffff8086169061293216565b905080611a8b57826040516346bdabe160e01b815260040161081c91906138d0565b611a9b63ffffffff831687613d64565b95505050508060010190506119b5565b50611ab583612c11565b600a60149054906101000a900460ff16600a611ad19190613ea1565b8214611af057604051639006dd2760e01b815260040160405180910390fd5b60405133907f2d47a742b8d7df7c1fc5a9a631b206b364e6cb2722490759f63bb3ab14b132e0905f90a25050505050565b5f610a108260016127f0565b601c54606090819060ff1615611cb05760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060085460408051631c56369f60e21b815290519394506001600160a01b0390911692637158da7c925060048083019260209291908290030181865afa158015611bc4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be89190613c8c565b825f81518110611bfa57611bfa613c59565b6001600160a01b039283166020918202929092018101919091526008546040805163d1717c7d60e01b81529051919093169263d1717c7d9260048083019391928290030181865afa158015611c51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c759190613eef565b611c8090600a613ea1565b815f81518110611c9257611c92613c59565b602002602001019063ffffffff16908163ffffffff16815250509091565b5f611cbb6020612aa9565b90508061ffff166001600160401b03811115611cd957611cd9613eaf565b604051908082528060200260200182016040528015611d02578160200160208202803683370190505b5092508061ffff166001600160401b03811115611d2157611d21613eaf565b604051908082528060200260200182016040528015611d4a578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611de1575f80611d70602061ffff8516612ab3565b9150915081868461ffff1681518110611d8b57611d8b613c59565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff1681518110611dc257611dc2613c59565b63ffffffff909216602092830291909101909101525050600101611d4f565b50509091565b5f611df0612875565b60085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590611e209030906004016138d0565b602060405180830381865afa158015611e3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5f9190613c6d565b611e7c5760405163125ad87760e31b815260040160405180910390fd5b5f611e868361248f565b905080851115611eaf57828582604051632e52afbb60e21b815260040161081c93929190613f0a565b845f03611ed15730604051636b30633560e01b815260040161081c91906138d0565b336001600160a01b03841614611eec57611eec833387612947565b5f611ef686610a05565b905080600d5f828254611f099190613d77565b90915550611f1990508487612b0a565b836001600160a01b0316856001600160a01b0316336001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db848a604051611f68929190613d42565b60405180910390a4600a54604051627b8a6760e11b8152600481018390526001600160a01b0387811660248301529091169062f714ce906044015f604051808303815f87803b158015611fb9575f5ffd5b505af1158015611fcb573d5f5f3e3d5ffd5b5092945050505050610fca6001600555565b611fe5612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612035573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120599190613c6d565b612076576040516312aecd8160e01b815260040160405180910390fd5b805f0361208557610c7a610fd1565b5f612091600e3361290c565b915050818110156120b557604051632ca2f52b60e11b815260040160405180910390fd5b5f6120c08383613d77565b9050805f036120da576120d4600e33612ac1565b506120e8565b6120e6600e3383612932565b505b8260145f8282546120f99190613d77565b9091555050600a546040516351edffb160e01b81526001600160a01b03909116906351edffb1906121309033908790600401613da5565b5f604051808303815f87803b158015612147575f5ffd5b505af1158015612159573d5f5f3e3d5ffd5b50506040518592503391507f96a9a6886cdf3047a125454218a23d3961fd3a78643123b248a9d106d0ac94fd905f90a35050610e5f6001600555565b61219d612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ed573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122119190613c6d565b61222e576040516312aecd8160e01b815260040160405180910390fd5b805f036122505730604051636b30633560e01b815260040161081c91906138d0565b5f61225c60113361290c565b9150508181101561228057604051632ca2f52b60e11b815260040160405180910390fd5b5f61228b8383613d77565b9050805f036122a55761229f601133612ac1565b506122b3565b6122b160113383612932565b505b8260155f8282546122c49190613d77565b909155506122d59050303385612c89565b604051839033907f046d3e17087d323298991516e3fdec36fe1204d6bff7fb6e2b8eca77b80a22ad905f90a35050610e5f6001600555565b5f610a10825f612843565b6008546001600160a01b031633146123435760405163ea8e4eb560e01b815260040160405180910390fd5b601c805460ff19166001179055565b5f610a1061235f836114fd565b5f6127f0565b6060805f612373601d612aa9565b90508061ffff166001600160401b0381111561239157612391613eaf565b6040519080825280602002602001820160405280156123ba578160200160208202803683370190505b5092508061ffff166001600160401b038111156123d9576123d9613eaf565b604051908082528060200260200182016040528015612402578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611de1575f80612428601d61ffff8516612ab3565b9150915081868461ffff168151811061244357612443613c59565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff168151811061247a5761247a613c59565b60209081029190910101525050600101612407565b5f610a10826114fd565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6008546001600160a01b031633146124ee5760405163ea8e4eb560e01b815260040160405180910390fd5b6124f9600b82612caf565b505f8061250760208461290c565b915091508161251557505050565b612520602084612ac1565b505f306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561255e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125829190613c8c565b90505f8061259160208461290c565b9150915081156125b8576125b2836125a98684613d64565b60209190612932565b506125c6565b6125c460208486612932565b505b505050505050565b5f5f6125d983612cc3565b90505f6125e68285613d77565b90505f6125f282612d8e565b90506125fe8184613d64565b95945050505050565b600a546001600160a01b0316331461263257604051631a27eac360e11b815260040160405180910390fd5b61263a612875565b5f612645600e612aa9565b90508063ffffffff165f0361265a57506114c8565b5f609663ffffffff83161161266f5781612672565b60965b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e99190613d8a565b90505f6126f560025490565b90505f805b8461ffff168161ffff1610156127ad575f80612717600e82612ab3565b9092509050612727600e83612ac1565b505f612735828b885f612e87565b90506127418382612eb3565b61274b8286613d64565b94508661ffff16836001600160a01b0316306001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f68585604051612797929190613d42565b60405180910390a45050508060010190506126fa565b508060145f8282546114bd9190613d77565b610e5f81612ee7565b5f610fca836001600160a01b038416612f40565b5f610fca836001600160a01b038416612f87565b5f610fca6127fd600d5490565b612808906001613d64565b612810612b53565b61281b90600a613ea1565b6002546128289190613d64565b85919085612bcf565b61283e8383836001612f9e565b505050565b5f610fca61284f612b53565b61285a90600a613ea1565b6002546128679190613d64565b600d54612828906001613d64565b60026005540361289857604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6040516001600160a01b0384811660248301528381166044830152606482018390526129069186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613070565b50505050565b5f808080612923866001600160a01b0387166130d3565b909450925050505b9250929050565b5f61166b846001600160a01b0385168461310b565b5f6129528484612499565b90505f19811015612906578181101561298457828183604051637dc7a0d960e11b815260040161081c93929190613f0a565b61290684848484035f612f9e565b6001600160a01b0383166129bb575f604051634b637e8f60e11b815260040161081c91906138d0565b6001600160a01b0382166129e4575f60405163ec442f0560e01b815260040161081c91906138d0565b61283e838383613127565b604080516080810182525f808252602082018190529181018290526060810191909152426019541115612a84576040805160808101909152601a8054829060ff166004811115612a4157612a41613a0a565b6004811115612a5257612a52613a0a565b8152815461ffff6101008204811660208401526301000000909104166040820152600190910154606090910152919050565b604080516080810190915260178054829060ff166004811115612a4157612a41613a0a565b5f610a108261323a565b5f8080806129238686613244565b5f610fca836001600160a01b03841661326d565b5f6125fe612ae4856001613d64565b612aec612b53565b612af790600a613ea1565b612b019086613d64565b87919085612bcf565b6001600160a01b038216612b33575f604051634b637e8f60e11b815260040161081c91906138d0565b610ed9825f83613127565b60605f610fca83613289565b610e5f816132e2565b5f5f612b5d610fd1565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b98573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bbc9190613eef565b9050612bc9816012613f2b565b91505090565b5f612bfc612bdc8361332b565b8015612bf757505f8480612bf257612bf2613f44565b868809115b151590565b612c07868686613357565b6125fe9190613d64565b5f5b8151811015610ed957612c49828281518110612c3157612c31613c59565b6020026020010151600b6127dc90919063ffffffff16565b612c8157818181518110612c5f57612c5f613c59565b602002602001015160405163751dff9760e11b815260040161081c91906138d0565b600101612c13565b61283e83846001600160a01b031663a9059cbb85856040516024016128d4929190613da5565b5f610fca836001600160a01b038416613407565b5f5f612ccd6129ef565b9050806040015161ffff165f03612ce657505f92915050565b60408101515f90612cfe9061ffff1685612710613357565b905061166b60095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d779190613f58565b829063ffffffff908116906301e133809061335716565b5f5f612d986129ef565b9050806020015161ffff165f03612db157505f92915050565b5f612dc8612dc16012600a613ea1565b855f611633565b90505f5f612dd8845f01516134ea565b9150915081831080612de8575080155b15612df857505f95945050505050565b5f612e16612e068386613d77565b602087015161ffff169084613357565b90505f612e268289612710613357565b9050612e7b60095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d53573d5f5f3e3d5ffd5b98975050505050505050565b5f6125fe612e93612b53565b612e9e90600a613ea1565b612ea89085613d64565b612b01866001613d64565b6001600160a01b038216612edc575f60405163ec442f0560e01b815260040161081c91906138d0565b610ed95f8383613127565b5f612ef0825490565b90505f5b81811015612f3957826001015f845f018381548110612f1557612f15613c59565b905f5260205f20015481526020019081526020015f205f9055806001019050612ef4565b50505f9055565b5f612f4b8383612f87565b612f8057508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a10565b505f610a10565b5f9081526001919091016020526040902054151590565b6001600160a01b038416612fc7575f60405163e602df0560e01b815260040161081c91906138d0565b6001600160a01b038316612ff0575f604051634a1406b160e11b815260040161081c91906138d0565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561290657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161306291815260200190565b60405180910390a350505050565b5f5f60205f8451602086015f885af18061308f576040513d5f823e3d81fd5b50505f513d915081156130a65780600114156130b3565b6001600160a01b0384163b155b156129065783604051635274afe760e01b815260040161081c91906138d0565b5f818152600283016020526040812054819080613100576130f485856135d4565b92505f915061292b9050565b60019250905061292b565b5f828152600284016020526040812082905561166b84846135df565b6001600160a01b038316613151578060025f8282546131469190613d64565b909155506131ae9050565b6001600160a01b0383165f90815260208190526040902054818110156131905783818360405163391434e360e21b815260040161081c93929190613f0a565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166131ca576002805482900390556131e8565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161322d91815260200190565b60405180910390a3505050565b5f610a10826135ea565b5f808061325185856135f3565b5f81815260029690960160205260409095205494959350505050565b5f8181526002830160205260408120819055610fca83836135fe565b6060815f018054806020026020016040519081016040528092919081815260200182805480156132d657602002820191905f5260205f20905b8154815260200190600101908083116132c2575b50505050509050919050565b5f6132ec8261323a565b90505f5b8181101561332157600283015f61330785846135f3565b815260208101919091526040015f908120556001016132f0565b50610ed9826127bf565b5f600282600381111561334057613340613a0a565b61334a9190613f73565b60ff166001149050919050565b5f5f5f6133648686613609565b91509150815f036133885783818161337e5761337e613f44565b0492505050610fca565b81841161339f5761339f6003851502601118613625565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f81815260018301602052604081205480156134e1575f613429600183613d77565b85549091505f9061343c90600190613d77565b905080821461349b575f865f01828154811061345a5761345a613c59565b905f5260205f200154905080875f01848154811061347a5761347a613c59565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806134ac576134ac613fa0565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a10565b5f915050610a10565b5f80806134f760126115df565b90505f84600481111561350c5761350c613a0a565b0361351c578092508291506135ce565b600384600481111561353057613530613a0a565b036135425760185492508291506135ce565b600184600481111561355657613556613a0a565b0361356e5761356481613636565b92508091506135ce565b600284600481111561358257613582613a0a565b0361359a5761359081613636565b92508291506135ce565b60048460048111156135ae576135ae613a0a565b036135ce576018546135c8906135c383613636565b61375c565b92508291505b50915091565b5f610fca838361376b565b5f610fca8383612f40565b5f610a10825490565b5f610fca8383613776565b5f610fca8383613407565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f5f60085f9054906101000a90046001600160a01b03166001600160a01b031663f3cc69936040518163ffffffff1660e01b8152600401602060405180830381865afa158015613688573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136ac9190613d8a565b61ffff1690505f61374160095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613706573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061372a9190613f58565b839063ffffffff908116906301e133809061335716565b905061166b61375282612710613d64565b8590612710613357565b5f828218828411028218610fca565b5f610fca8383612f87565b5f825f01828154811061378b5761378b613c59565b905f5260205f200154905092915050565b5f5f602083850312156137ad575f5ffd5b82356001600160401b038111156137c2575f5ffd5b8301601f810185136137d2575f5ffd5b80356001600160401b038111156137e7575f5ffd5b8560208260051b84010111156137fb575f5ffd5b6020919091019590945092505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613850575f5ffd5b5035919050565b6001600160a01b0381168114610e5f575f5ffd5b5f5f6040838503121561387c575f5ffd5b823561388781613857565b946020939093013593505050565b5f602082840312156138a5575f5ffd5b8135610fca81613857565b5f5f604083850312156138c1575f5ffd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b5f5f5f606084860312156138f6575f5ffd5b833561390181613857565b9250602084013561391181613857565b929592945050506040919091013590565b60ff81168114610e5f575f5ffd5b61ffff81168114610e5f575f5ffd5b5f5f5f60608486031215613951575f5ffd5b833561395c81613922565b9250602084013561396c81613930565b9150604084013561397c81613930565b809150509250925092565b5f8151808452602084019350602083015f5b828110156139c05781516001600160a01b0316865260209586019590910190600101613999565b5093949350505050565b602081525f610fca6020830184613987565b5f5f604083850312156139ed575f5ffd5b8235915060208301356139ff81613857565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6080810160058610613a3e57634e487b7160e01b5f52602160045260245ffd5b94815261ffff93841660208201529190921660408201526060015290565b5f5f83601f840112613a6c575f5ffd5b5081356001600160401b03811115613a82575f5ffd5b6020830191508360208260061b850101111561292b575f5ffd5b5f5f5f60408486031215613aae575f5ffd5b83356001600160401b03811115613ac3575f5ffd5b613acf86828701613a5c565b909790965060209590950135949350505050565b5f5f5f60608486031215613af5575f5ffd5b833592506020840135915060408401356004811061397c575f5ffd5b5f5f60208385031215613b22575f5ffd5b82356001600160401b03811115613b37575f5ffd5b613b4385828601613a5c565b90969095509350505050565b5f5f5f60608486031215613b61575f5ffd5b833592506020840135613b7381613857565b9150604084013561397c81613857565b604081525f613b956040830185613987565b82810360208401528084518083526020830191506020860192505f5b81811015613bd557835163ffffffff16835260209384019390920191600101613bb1565b50909695505050505050565b604081525f613bf36040830185613987565b82810360208401528084518083526020830191506020860192505f5b81811015613bd5578351835260209384019390920191600101613c0f565b5f5f60408385031215613c3e575f5ffd5b8235613c4981613857565b915060208301356139ff81613857565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613c7d575f5ffd5b81518015158114610fca575f5ffd5b5f60208284031215613c9c575f5ffd5b8151610fca81613857565b602080825281018290525f8360408301825b85811015613ce9578235613ccc81613857565b6001600160a01b0316825260209283019290910190600101613cb9565b5095945050505050565b600181811c90821680613d0757607f821691505b602082108103613d2557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613d3b575f5ffd5b5051919050565b918252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a1057610a10613d50565b81810381811115610a1057610a10613d50565b5f60208284031215613d9a575f5ffd5b8151610fca81613930565b6001600160a01b03929092168252602082015260400190565b6001815b6001841115613df957808504811115613ddd57613ddd613d50565b6001841615613deb57908102905b60019390931c928002613dc2565b935093915050565b5f82613e0f57506001610a10565b81613e1b57505f610a10565b8160018114613e315760028114613e3b57613e57565b6001915050610a10565b60ff841115613e4c57613e4c613d50565b50506001821b610a10565b5060208310610133831016604e8410600b8410161715613e7a575081810a610a10565b613e865f198484613dbe565b805f1904821115613e9957613e99613d50565b029392505050565b5f610fca60ff841683613e01565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff81168114610e5f575f5ffd5b5f60208284031215613ee4575f5ffd5b8135610fca81613ec3565b5f60208284031215613eff575f5ffd5b8151610fca81613922565b6001600160a01b039390931683526020830191909152604082015260600190565b60ff8281168282160390811115610a1057610a10613d50565b634e487b7160e01b5f52601260045260245ffd5b5f60208284031215613f68575f5ffd5b8151610fca81613ec3565b5f60ff831680613f9157634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212200c25d5e163a933691b79aad3490f00701f2044f2f7695bd0116baa8c5906bc7b64736f6c634300081c0033a264697066735822122091a493b3381a571789890687c7749ca594a9bc5d60b7dcc99c39a17c2cde3bb164736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063341624941461003857806379502c5514610061575b5f5ffd5b61004b6100463660046103ab565b610073565b604051610058919061046c565b60405180910390f35b5f5461004b906001600160a01b031681565b5f8054604051638771de8760e01b815233916001600160a01b031690638771de87906100a390849060040161046c565b602060405180830381865afa1580156100be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e29190610480565b6100ff57604051631a27eac360e11b815260040160405180910390fd5b5f54604051633c17975360e21b81526001600160a01b039091169063f05e5d4c9061012e908d9060040161046c565b602060405180830381865afa158015610149573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016d9190610480565b61018a57604051631a27eac360e11b815260040160405180910390fd5b5f5f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101fd9190610480565b61021a576040516312aecd8160e01b815260040160405180910390fd5b5f818b5f5f9054906101000a90046001600160a01b03168c8c8c8c8c8c8c60405161024490610344565b6102579a999897969594939291906104ce565b604051809103905ff080158015610270573d5f5f3e3d5ffd5b505f8054604051631e832de160e21b81529295508593506001600160a01b031691637a0cb784916102a691859190600401610561565b5f604051808303815f87803b1580156102bd575f5ffd5b505af11580156102cf573d5f5f3e3d5ffd5b505050508a6001600160a01b0316826001600160a01b0316846001600160a01b03167f91700e2f05ab5287673189803ecbe9609340db98196ee954ac9865daf4308d2d8d8d8d8d8d8d8d5f60405161032e98979695949392919061057e565b60405180910390a4505098975050505050505050565b614e0a806105df83390190565b5f5f83601f840112610361575f5ffd5b5081356001600160401b03811115610377575f5ffd5b60208301915083602082850101111561038e575f5ffd5b9250929050565b803561ffff811681146103a6575f5ffd5b919050565b5f5f5f5f5f5f5f5f60c0898b0312156103c2575f5ffd5b88356001600160a01b03811681146103d8575f5ffd5b975060208901356001600160401b038111156103f2575f5ffd5b6103fe8b828c01610351565b90985096505060408901356001600160401b0381111561041c575f5ffd5b6104288b828c01610351565b909650945050606089013560ff81168114610441575f5ffd5b925061044f60808a01610395565b915061045d60a08a01610395565b90509295985092959890939650565b6001600160a01b0391909116815260200190565b5f60208284031215610490575f5ffd5b8151801515811461049f575f5ffd5b9392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b038b811682528a8116602083015289166040820152610100606082018190525f90610503908301898b6104a6565b828103608084015261051681888a6104a6565b60ff9690961660a0840152505061ffff92831660c0820152911660e090910152979650505050505050565b6002811061055d57634e487b7160e01b5f52602160045260245ffd5b9052565b6001600160a01b03831681526040810161049f6020830184610541565b60c081525f61059160c083018a8c6104a6565b82810360208401526105a481898b6104a6565b91505060ff8616604083015261ffff8516606083015261ffff841660808301526105d160a0830184610541565b999850505050505050505056fe60c060405234801561000f575f5ffd5b50604051614e0a380380614e0a83398101604081905261002e916109ae565b8787878787878787856001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610072573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100969190610a7d565b858560036100a48382610b23565b5060046100b18282610b23565b5050505f5f6100c58361066a60201b60201c565b91509150816100d55760126100d7565b805b60ff1660a05250506001600160a01b03908116608052600160055587166101115760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0386166101385760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b03808b166001600160a01b031992831617909255600780548a841690831617905560088054928916929091168217905560408051630691d8b960e31b8152905163348ec5c8916004808201926020929091908290030181865afa1580156101ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d09190610a7d565b60095f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b0316633a0dad8e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610231573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102559190610a7d565b600a5f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b031663d1717c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102da9190610bdd565b600a60146101000a81548160ff021916908360ff1602179055505f866001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610331573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103559190610a7d565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610390573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b49190610bdd565b9050601260ff821611156103db57604051631c03248960e11b815260040160405180910390fd5b600460ff85161115610400576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff84161115610427576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff8316111561044e576040516317dbc4cb60e21b815260040160405180910390fd5b8360ff16600481111561046357610463610bf6565b6017805460ff1916600183600481111561047f5761047f610bf6565b02179055506017805461ffff84811663010000000264ffff00000019918716610100029190911664ffffffff0019909216919091171790556104c281600a610d01565b60185560178054601a8054909160ff1690829060ff191660018360048111156104ed576104ed610bf6565b02179055508154815461ffff61010092839004811690920262ffff0019821681178455845463010000009081900490931690920264ffff0000001990921664ffffffff0019909116171781556001918201549101554260195561054e610740565b50505050505050505061065c60085f9054906101000a90046001600160a01b03166001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ce9190610a7d565b60085f9054906101000a90046001600160a01b03166001600160a01b031663d1717c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106429190610bdd565b61064d90600a610d01565b6020919063ffffffff16610815565b505050505050505050610e02565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b038716916106b091610d0f565b5f60405180830381855afa9150503d805f81146106e8576040519150601f19603f3d011682016040523d82523d5f602084013e6106ed565b606091505b509150915081801561070157506020815110155b15610734575f8180602001905181019061071b9190610d25565b905060ff8111610732576001969095509350505050565b505b505f9485945092505050565b60085460408051636c366a2760e11b815290515f926001600160a01b03169163d86cd44e91600480830192869291908290030181865afa158015610786573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107ad9190810190610d3c565b90505f5b8151811015610811575f6107e88383815181106107d0576107d0610dee565b6020026020010151600b61083260201b90919060201c565b90508061080857604051630ea075bf60e21b815260040160405180910390fd5b506001016107b1565b5050565b5f61082a846001600160a01b0385168461084f565b949350505050565b5f610846836001600160a01b03841661086b565b90505b92915050565b5f828152600284016020526040812082905561082a84846108b7565b5f8181526001830160205260408120546108b057508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610849565b505f610849565b5f610846838361086b565b6001600160a01b03811681146108d6575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610915576109156108d9565b604052919050565b5f82601f83011261092c575f5ffd5b81516001600160401b03811115610945576109456108d9565b610958601f8201601f19166020016108ed565b81815284602083860101111561096c575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b805160ff81168114610998575f5ffd5b919050565b805161ffff81168114610998575f5ffd5b5f5f5f5f5f5f5f5f610100898b0312156109c6575f5ffd5b88516109d1816108c2565b60208a01519098506109e2816108c2565b60408a01519097506109f3816108c2565b60608a01519096506001600160401b03811115610a0e575f5ffd5b610a1a8b828c0161091d565b60808b015190965090506001600160401b03811115610a37575f5ffd5b610a438b828c0161091d565b945050610a5260a08a01610988565b9250610a6060c08a0161099d565b9150610a6e60e08a0161099d565b90509295985092959890939650565b5f60208284031215610a8d575f5ffd5b8151610a98816108c2565b9392505050565b600181811c90821680610ab357607f821691505b602082108103610ad157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610b1e57805f5260205f20601f840160051c81016020851015610afc5750805b601f840160051c820191505b81811015610b1b575f8155600101610b08565b50505b505050565b81516001600160401b03811115610b3c57610b3c6108d9565b610b5081610b4a8454610a9f565b84610ad7565b6020601f821160018114610b82575f8315610b6b5750848201515b5f19600385901b1c1916600184901b178455610b1b565b5f84815260208120601f198516915b82811015610bb15787850151825560209485019460019092019101610b91565b5084821015610bce57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610bed575f5ffd5b61084682610988565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610c5957808504811115610c3d57610c3d610c0a565b6001841615610c4b57908102905b60019390931c928002610c22565b935093915050565b5f82610c6f57506001610849565b81610c7b57505f610849565b8160018114610c915760028114610c9b57610cb7565b6001915050610849565b60ff841115610cac57610cac610c0a565b50506001821b610849565b5060208310610133831016604e8410600b8410161715610cda575081810a610849565b610ce65f198484610c1e565b805f1904821115610cf957610cf9610c0a565b029392505050565b5f61084660ff841683610c61565b5f82518060208501845e5f920191825250919050565b5f60208284031215610d35575f5ffd5b5051919050565b5f60208284031215610d4c575f5ffd5b81516001600160401b03811115610d61575f5ffd5b8201601f81018413610d71575f5ffd5b80516001600160401b03811115610d8a57610d8a6108d9565b8060051b610d9a602082016108ed565b91825260208184018101929081019087841115610db5575f5ffd5b6020850194505b83851015610de35784519250610dd1836108c2565b82825260209485019490910190610dbc565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b60805160a051613fea610e205f395f50505f610fd30152613fea5ff3fe608060405234801561000f575f5ffd5b50600436106102e2575f3560e01c806395d89b411161018c57806395d89b411461051c57806397ee114414610524578063985ba4ae1461055a5780639908840c1461056d578063a68a526714610576578063a9059cbb14610589578063aa2f892d1461059c578063acdb3d51146105af578063b1bd7e2e146105b8578063b3d7f6b9146105cb578063b460af94146105de578063b6eba653146105ec578063ba08765214610602578063bdca916514610615578063c0b568e11461061e578063c3f0d30e14610631578063c63d75b61461045e578063c6e6f59214610644578063ca78e83914610657578063ce96cb771461065f578063d1717c7d14610672578063d3d0345814610686578063d82795481461069c578063d853365f146106a4578063d905777e146106ac578063dd62ed3e146106bf578063e3352c4c146106d2578063e51a85f6146106e5578063e5e97193146106f8578063e66f53b71461070b578063ef8b30f714610644578063f64c6f321461071e575f5ffd5b806301e1d114146102e657806303d44854146102fd57806306fdde031461031257806307a2d13a14610327578063095ea7b31461033a5780630a28a4771461035d5780630a605c6d146103705780630c6a62dd146103785780630d1e66671461038b5780630df571f71461039e57806318160ddd146103b157806318c21949146103b95780631f52692b146103cc57806323b872dd146103ec578063283c8168146103ff578063313ce56714610408578063348ec5c81461041d57806338d52e0f146104305780633a0dad8e146104385780633ab6d27c1461044b578063402d267d1461045e578063493a6e21146104725780634cdad506146103275780634e85b1351461048557806353a0bfdf1461049a5780636e553f65146104a757806370a08231146104ba5780637847ea53146104cd57806379502c55146104ed5780638f5c94651461050057806394bf804d146104a7575b5f5ffd5b600d545b6040519081526020015b60405180910390f35b61031061030b36600461379c565b610726565b005b61031a610975565b6040516102f4919061380b565b6102ea610335366004613840565b610a05565b61034d61034836600461386b565b610a16565b60405190151581526020016102f4565b6102ea61036b366004613840565b610a2d565b6015546102ea565b610310610386366004613895565b610a39565b610310610399366004613840565b610b39565b6103106103ac3660046138b0565b610e62565b6002546102ea565b6103106103c7366004613840565b610edd565b6006546103df906001600160a01b031681565b6040516102f491906138d0565b61034d6103fa3660046138e4565b610fac565b6102ea60195481565b60125b60405160ff90911681526020016102f4565b6009546103df906001600160a01b031681565b6103df610fd1565b600a546103df906001600160a01b031681565b61031061045936600461393f565b610ff5565b6102ea61046c366004613895565b505f1990565b610310610480366004613840565b6112a7565b61048d6114d2565b6040516102f491906139ca565b601c5461034d9060ff1681565b6102ea6104b53660046139dc565b6114e3565b6102ea6104c8366004613895565b6114fd565b6104d86301e1338081565b60405163ffffffff90911681526020016102f4565b6008546103df906001600160a01b031681565b61050961271081565b60405161ffff90911681526020016102f4565b61031a611517565b60175460185461054a9160ff81169161ffff610100830481169263010000009004169084565b6040516102f49493929190613a1e565b610310610568366004613a9c565b611526565b61050961012c81565b6102ea610584366004613ae3565b611633565b61034d61059736600461386b565b611673565b6103106105aa366004613840565b611680565b6102ea60165481565b6103106105c6366004613b11565b611916565b6102ea6105d9366004613840565b611b21565b6102ea6104b5366004613b4f565b6105f4611b2d565b6040516102f4929190613b83565b6102ea610610366004613b4f565b611de7565b610509610bb881565b61031061062c366004613840565b611fdd565b61031061063f366004613840565b612195565b6102ea610652366004613840565b61230d565b610310612318565b6102ea61066d366004613895565b612352565b600a5461040b90600160a01b900460ff1681565b61068e612365565b6040516102f4929190613be1565b610509609681565b61040b601281565b6102ea6106ba366004613895565b61248f565b6102ea6106cd366004613c2d565b612499565b6103106106e0366004613895565b6124c3565b6102ea6106f3366004613840565b6125ce565b610310610706366004613840565b612607565b6007546103df906001600160a01b031681565b6014546102ea565b6006546001600160a01b0316331461075157604051631a27eac360e11b815260040160405180910390fd5b61075b600b6127bf565b5f5b8181101561085b575f83838381811061077857610778613c59565b905060200201602081019061078d9190613895565b600854604051633af32abf60e01b81529192506001600160a01b031690633af32abf906107be9084906004016138d0565b602060405180830381865afa1580156107d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fd9190613c6d565b610825578060405163751dff9760e11b815260040161081c91906138d0565b60405180910390fd5b5f610831600b836127c8565b90508061085157604051630ea075bf60e21b815260040160405180910390fd5b505060010161075d565b506108c7306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf9190613c8c565b600b906127dc565b61093857610936306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092e9190613c8c565b600b906127c8565b505b7fa975983c7a4dcf80477a447433240de322f36428f1b3864e50d7a45e14c68b668282604051610969929190613ca7565b60405180910390a15050565b60606003805461098490613cf3565b80601f01602080910402602001604051908101604052809291908181526020018280546109b090613cf3565b80156109fb5780601f106109d2576101008083540402835291602001916109fb565b820191905f5260205f20905b8154815290600101906020018083116109de57829003601f168201915b5050505050905090565b5f610a10825f6127f0565b92915050565b5f33610a23818585612831565b5060019392505050565b5f610a10826001612843565b6006546001600160a01b03163314610a6457604051631a27eac360e11b815260040160405180910390fd5b600854604051633c17975360e21b81526001600160a01b039091169063f05e5d4c90610a949084906004016138d0565b602060405180830381865afa158015610aaf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad39190613c6d565b610af057604051631a27eac360e11b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f83293ffeebb677b167941693470018acf300605df266a35e9fdb66f24ff00fe0905f90a250565b610b41612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb59190613c6d565b610bd2576040516312aecd8160e01b815260040160405180910390fd5b601c5460ff1680610c4d575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590610c0e9030906004016138d0565b602060405180830381865afa158015610c29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4d9190613c6d565b15610c6b576040516304b1e71160e41b815260040160405180910390fd5b805f03610c9457610c7a610fd1565b604051636b30633560e01b815260040161081c91906138d0565b60085460408051633228036560e11b815290515f926001600160a01b03169163645006ca9160048083019260209291908290030181865afa158015610cdb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cff9190613d2b565b905080821015610d26578181604051631e2be21160e01b815260040161081c929190613d42565b5f610d2f610fd1565b6001600160a01b03166370a08231336040518263ffffffff1660e01b8152600401610d5a91906138d0565b602060405180830381865afa158015610d75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d999190613d2b565b905080831115610dbc57604051632ca2f52b60e11b815260040160405180910390fd5b600a54610de89033906001600160a01b031685610dd7610fd1565b6001600160a01b031692919061289f565b5f610df4600e3361290c565b9150610e0f905033610e068684613d64565b600e9190612932565b508360145f828254610e219190613d64565b9091555050604051849033907f55896b30a78fc55b78937f8014dde3f0035e9d37a4f6ac36841fb8b62f7e2b13905f90a3505050610e5f6001600555565b50565b6009546001600160a01b03163314610e8d57604051631a27eac360e11b815260040160405180910390fd5b8015610ed9578060165f828254610ea49190613d64565b9091555050601654604051829084907f8b8789cf9157fe7b016901e4ed3a5d0971caa8b7c031da0b25638ccf65841b2a905f90a45b5050565b6006546001600160a01b03163314610f0857604051631a27eac360e11b815260040160405180910390fd5b805f03610f1757610c7a610fd1565b601654811115610f3a57604051632ca2f52b60e11b815260040160405180910390fd5b8060165f828254610f4b9190613d77565b9091555050600a5460405163741fca4b60e01b8152600481018390526001600160a01b039091169063741fca4b906024015f604051808303815f87803b158015610f93575f5ffd5b505af1158015610fa5573d5f5f3e3d5ffd5b5050505050565b5f33610fb9858285612947565b610fc4858585612992565b60019150505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6006546001600160a01b0316331461102057604051631a27eac360e11b815260040160405180910390fd5b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611070573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110949190613c6d565b6110b1576040516312aecd8160e01b815260040160405180910390fd5b600460ff841611156110d6576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff831611156110fd576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff82161115611124576040516317dbc4cb60e21b815260040160405180910390fd5b61112c6129ef565b8051601a8054909190829060ff1916600183600481111561114f5761114f613a0a565b021790555060208201518154604084015161ffff90811663010000000264ffff0000001991909316610100021664ffffffff00199091161717815560609091015160019091015560ff831660048111156111ab576111ab613a0a565b6017805460ff191660018360048111156111c7576111c7613a0a565b02179055506017805461ffff83811663010000000264ffff00000019918616610100029190911664ffffffff00199092169190911717905560085460408051630df1aa5760e31b815290516001600160a01b0390921691636f8d52b8916004808201926020929091908290030181865afa158015611247573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126b9190613d2b565b6112759042613d64565b60195560405130907fb31d0e1c8c885e6966984333ce964f4a58ad72b6c4e89e688ecc4549ad97558e905f90a2505050565b600a546001600160a01b031633146112d257604051631a27eac360e11b815260040160405180910390fd5b6112da612875565b5f6112e56011612aa9565b90508063ffffffff165f036112fa57506114c8565b5f609663ffffffff83161161130f5781611312565b60965b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611365573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113899190613d8a565b90505f61139560025490565b90505f805b8461ffff168161ffff1610156114ab575f806113b7601182612ab3565b90925090506113c7601183612ac1565b505f6113d5828b885f612ad5565b90506113e13083612b0a565b6113eb8286613d64565b600a54604051634adfc2e760e01b81529196506001600160a01b031690634adfc2e79061141e9086908590600401613da5565b5f604051808303815f87803b158015611435575f5ffd5b505af1158015611447573d5f5f3e3d5ffd5b505050508661ffff16836001600160a01b0316306001600160a01b03167f215abfcd108b85fbee47f26fda2de66f90f14fa5fcaf0201698ad8ac9323545f8486604051611495929190613d42565b60405180910390a450505080600101905061139a565b508060155f8282546114bd9190613d77565b909155505050505050505b610e5f6001600555565b60606114de600b612b3e565b905090565b5f60405163125ad87760e31b815260040160405180910390fd5b6001600160a01b03165f9081526020819052604090205490565b60606004805461098490613cf3565b6009546001600160a01b0316331461155157604051631a27eac360e11b815260040160405180910390fd5b61155b601d612b4a565b815f5b8161ffff168161ffff1610156115d7576115ce85858361ffff1681811061158757611587613c59565b61159d9260206040909202019081019150613895565b86868461ffff168181106115b3576115b3613c59565b90506040020160200135601d6129329092919063ffffffff16565b5060010161155e565b505f6115ea60125b61033590600a613ea1565b6018549091508111156115fd5760188190555b600d83905560405183907f5e1ff954b5e5257e9ee5d4cb07059e8f5e69b1aaaf9911e5d8d90a6894de9c21905f90a25050505050565b5f61166b611642846001613d64565b61164a612b53565b61165590600a613ea1565b6002546116629190613d64565b86919085612bcf565b949350505050565b5f33610a23818585612992565b611688612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fc9190613c6d565b611719576040516312aecd8160e01b815260040160405180910390fd5b601c5460ff1680611794575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb45906117559030906004016138d0565b602060405180830381865afa158015611770573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117949190613c6d565b156117b2576040516304b1e71160e41b815260040160405180910390fd5b805f036117d45730604051636b30633560e01b815260040161081c91906138d0565b60085460408051630912ae6d60e01b815290515f926001600160a01b031691630912ae6d9160048083019260209291908290030181865afa15801561181b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183f9190613d2b565b905080821015611866578181604051631f29a4af60e31b815260040161081c929190613d42565b5f611870336114fd565b90508083111561189357604051632ca2f52b60e11b815260040160405180910390fd5b61189f3033818661289f565b5f6118ab60113361290c565b91506118c69050336118bd8684613d64565b60119190612932565b508360155f8282546118d89190613d64565b9091555050604051849033907f222dc200773fe9b45015bf792e8fee37d651e3590c215806a5042404b6d741d2905f90a3505050610e5f6001600555565b6007546001600160a01b0316331461194157604051631a27eac360e11b815260040160405180910390fd5b5f81900361196257604051631121aa8d60e01b815260040160405180910390fd5b61196c6020612b4a565b5f816001600160401b0381111561198557611985613eaf565b6040519080825280602002602001820160405280156119ae578160200160208202803683370190505b5090505f82815b8161ffff168161ffff161015611aab575f86868361ffff168181106119dc576119dc613c59565b6119f29260206040909202019081019150613895565b90505f87878461ffff16818110611a0b57611a0b613c59565b9050604002016020016020810190611a239190613ed4565b905081868461ffff1681518110611a3c57611a3c613c59565b6001600160a01b039092166020928302919091018201525f90611a69908463ffffffff8086169061293216565b905080611a8b57826040516346bdabe160e01b815260040161081c91906138d0565b611a9b63ffffffff831687613d64565b95505050508060010190506119b5565b50611ab583612c11565b600a60149054906101000a900460ff16600a611ad19190613ea1565b8214611af057604051639006dd2760e01b815260040160405180910390fd5b60405133907f2d47a742b8d7df7c1fc5a9a631b206b364e6cb2722490759f63bb3ab14b132e0905f90a25050505050565b5f610a108260016127f0565b601c54606090819060ff1615611cb05760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060085460408051631c56369f60e21b815290519394506001600160a01b0390911692637158da7c925060048083019260209291908290030181865afa158015611bc4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be89190613c8c565b825f81518110611bfa57611bfa613c59565b6001600160a01b039283166020918202929092018101919091526008546040805163d1717c7d60e01b81529051919093169263d1717c7d9260048083019391928290030181865afa158015611c51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c759190613eef565b611c8090600a613ea1565b815f81518110611c9257611c92613c59565b602002602001019063ffffffff16908163ffffffff16815250509091565b5f611cbb6020612aa9565b90508061ffff166001600160401b03811115611cd957611cd9613eaf565b604051908082528060200260200182016040528015611d02578160200160208202803683370190505b5092508061ffff166001600160401b03811115611d2157611d21613eaf565b604051908082528060200260200182016040528015611d4a578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611de1575f80611d70602061ffff8516612ab3565b9150915081868461ffff1681518110611d8b57611d8b613c59565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff1681518110611dc257611dc2613c59565b63ffffffff909216602092830291909101909101525050600101611d4f565b50509091565b5f611df0612875565b60085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590611e209030906004016138d0565b602060405180830381865afa158015611e3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5f9190613c6d565b611e7c5760405163125ad87760e31b815260040160405180910390fd5b5f611e868361248f565b905080851115611eaf57828582604051632e52afbb60e21b815260040161081c93929190613f0a565b845f03611ed15730604051636b30633560e01b815260040161081c91906138d0565b336001600160a01b03841614611eec57611eec833387612947565b5f611ef686610a05565b905080600d5f828254611f099190613d77565b90915550611f1990508487612b0a565b836001600160a01b0316856001600160a01b0316336001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db848a604051611f68929190613d42565b60405180910390a4600a54604051627b8a6760e11b8152600481018390526001600160a01b0387811660248301529091169062f714ce906044015f604051808303815f87803b158015611fb9575f5ffd5b505af1158015611fcb573d5f5f3e3d5ffd5b5092945050505050610fca6001600555565b611fe5612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612035573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120599190613c6d565b612076576040516312aecd8160e01b815260040160405180910390fd5b805f0361208557610c7a610fd1565b5f612091600e3361290c565b915050818110156120b557604051632ca2f52b60e11b815260040160405180910390fd5b5f6120c08383613d77565b9050805f036120da576120d4600e33612ac1565b506120e8565b6120e6600e3383612932565b505b8260145f8282546120f99190613d77565b9091555050600a546040516351edffb160e01b81526001600160a01b03909116906351edffb1906121309033908790600401613da5565b5f604051808303815f87803b158015612147575f5ffd5b505af1158015612159573d5f5f3e3d5ffd5b50506040518592503391507f96a9a6886cdf3047a125454218a23d3961fd3a78643123b248a9d106d0ac94fd905f90a35050610e5f6001600555565b61219d612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ed573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122119190613c6d565b61222e576040516312aecd8160e01b815260040160405180910390fd5b805f036122505730604051636b30633560e01b815260040161081c91906138d0565b5f61225c60113361290c565b9150508181101561228057604051632ca2f52b60e11b815260040160405180910390fd5b5f61228b8383613d77565b9050805f036122a55761229f601133612ac1565b506122b3565b6122b160113383612932565b505b8260155f8282546122c49190613d77565b909155506122d59050303385612c89565b604051839033907f046d3e17087d323298991516e3fdec36fe1204d6bff7fb6e2b8eca77b80a22ad905f90a35050610e5f6001600555565b5f610a10825f612843565b6008546001600160a01b031633146123435760405163ea8e4eb560e01b815260040160405180910390fd5b601c805460ff19166001179055565b5f610a1061235f836114fd565b5f6127f0565b6060805f612373601d612aa9565b90508061ffff166001600160401b0381111561239157612391613eaf565b6040519080825280602002602001820160405280156123ba578160200160208202803683370190505b5092508061ffff166001600160401b038111156123d9576123d9613eaf565b604051908082528060200260200182016040528015612402578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611de1575f80612428601d61ffff8516612ab3565b9150915081868461ffff168151811061244357612443613c59565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff168151811061247a5761247a613c59565b60209081029190910101525050600101612407565b5f610a10826114fd565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6008546001600160a01b031633146124ee5760405163ea8e4eb560e01b815260040160405180910390fd5b6124f9600b82612caf565b505f8061250760208461290c565b915091508161251557505050565b612520602084612ac1565b505f306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561255e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125829190613c8c565b90505f8061259160208461290c565b9150915081156125b8576125b2836125a98684613d64565b60209190612932565b506125c6565b6125c460208486612932565b505b505050505050565b5f5f6125d983612cc3565b90505f6125e68285613d77565b90505f6125f282612d8e565b90506125fe8184613d64565b95945050505050565b600a546001600160a01b0316331461263257604051631a27eac360e11b815260040160405180910390fd5b61263a612875565b5f612645600e612aa9565b90508063ffffffff165f0361265a57506114c8565b5f609663ffffffff83161161266f5781612672565b60965b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e99190613d8a565b90505f6126f560025490565b90505f805b8461ffff168161ffff1610156127ad575f80612717600e82612ab3565b9092509050612727600e83612ac1565b505f612735828b885f612e87565b90506127418382612eb3565b61274b8286613d64565b94508661ffff16836001600160a01b0316306001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f68585604051612797929190613d42565b60405180910390a45050508060010190506126fa565b508060145f8282546114bd9190613d77565b610e5f81612ee7565b5f610fca836001600160a01b038416612f40565b5f610fca836001600160a01b038416612f87565b5f610fca6127fd600d5490565b612808906001613d64565b612810612b53565b61281b90600a613ea1565b6002546128289190613d64565b85919085612bcf565b61283e8383836001612f9e565b505050565b5f610fca61284f612b53565b61285a90600a613ea1565b6002546128679190613d64565b600d54612828906001613d64565b60026005540361289857604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6040516001600160a01b0384811660248301528381166044830152606482018390526129069186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613070565b50505050565b5f808080612923866001600160a01b0387166130d3565b909450925050505b9250929050565b5f61166b846001600160a01b0385168461310b565b5f6129528484612499565b90505f19811015612906578181101561298457828183604051637dc7a0d960e11b815260040161081c93929190613f0a565b61290684848484035f612f9e565b6001600160a01b0383166129bb575f604051634b637e8f60e11b815260040161081c91906138d0565b6001600160a01b0382166129e4575f60405163ec442f0560e01b815260040161081c91906138d0565b61283e838383613127565b604080516080810182525f808252602082018190529181018290526060810191909152426019541115612a84576040805160808101909152601a8054829060ff166004811115612a4157612a41613a0a565b6004811115612a5257612a52613a0a565b8152815461ffff6101008204811660208401526301000000909104166040820152600190910154606090910152919050565b604080516080810190915260178054829060ff166004811115612a4157612a41613a0a565b5f610a108261323a565b5f8080806129238686613244565b5f610fca836001600160a01b03841661326d565b5f6125fe612ae4856001613d64565b612aec612b53565b612af790600a613ea1565b612b019086613d64565b87919085612bcf565b6001600160a01b038216612b33575f604051634b637e8f60e11b815260040161081c91906138d0565b610ed9825f83613127565b60605f610fca83613289565b610e5f816132e2565b5f5f612b5d610fd1565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b98573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bbc9190613eef565b9050612bc9816012613f2b565b91505090565b5f612bfc612bdc8361332b565b8015612bf757505f8480612bf257612bf2613f44565b868809115b151590565b612c07868686613357565b6125fe9190613d64565b5f5b8151811015610ed957612c49828281518110612c3157612c31613c59565b6020026020010151600b6127dc90919063ffffffff16565b612c8157818181518110612c5f57612c5f613c59565b602002602001015160405163751dff9760e11b815260040161081c91906138d0565b600101612c13565b61283e83846001600160a01b031663a9059cbb85856040516024016128d4929190613da5565b5f610fca836001600160a01b038416613407565b5f5f612ccd6129ef565b9050806040015161ffff165f03612ce657505f92915050565b60408101515f90612cfe9061ffff1685612710613357565b905061166b60095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d779190613f58565b829063ffffffff908116906301e133809061335716565b5f5f612d986129ef565b9050806020015161ffff165f03612db157505f92915050565b5f612dc8612dc16012600a613ea1565b855f611633565b90505f5f612dd8845f01516134ea565b9150915081831080612de8575080155b15612df857505f95945050505050565b5f612e16612e068386613d77565b602087015161ffff169084613357565b90505f612e268289612710613357565b9050612e7b60095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d53573d5f5f3e3d5ffd5b98975050505050505050565b5f6125fe612e93612b53565b612e9e90600a613ea1565b612ea89085613d64565b612b01866001613d64565b6001600160a01b038216612edc575f60405163ec442f0560e01b815260040161081c91906138d0565b610ed95f8383613127565b5f612ef0825490565b90505f5b81811015612f3957826001015f845f018381548110612f1557612f15613c59565b905f5260205f20015481526020019081526020015f205f9055806001019050612ef4565b50505f9055565b5f612f4b8383612f87565b612f8057508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a10565b505f610a10565b5f9081526001919091016020526040902054151590565b6001600160a01b038416612fc7575f60405163e602df0560e01b815260040161081c91906138d0565b6001600160a01b038316612ff0575f604051634a1406b160e11b815260040161081c91906138d0565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561290657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161306291815260200190565b60405180910390a350505050565b5f5f60205f8451602086015f885af18061308f576040513d5f823e3d81fd5b50505f513d915081156130a65780600114156130b3565b6001600160a01b0384163b155b156129065783604051635274afe760e01b815260040161081c91906138d0565b5f818152600283016020526040812054819080613100576130f485856135d4565b92505f915061292b9050565b60019250905061292b565b5f828152600284016020526040812082905561166b84846135df565b6001600160a01b038316613151578060025f8282546131469190613d64565b909155506131ae9050565b6001600160a01b0383165f90815260208190526040902054818110156131905783818360405163391434e360e21b815260040161081c93929190613f0a565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166131ca576002805482900390556131e8565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161322d91815260200190565b60405180910390a3505050565b5f610a10826135ea565b5f808061325185856135f3565b5f81815260029690960160205260409095205494959350505050565b5f8181526002830160205260408120819055610fca83836135fe565b6060815f018054806020026020016040519081016040528092919081815260200182805480156132d657602002820191905f5260205f20905b8154815260200190600101908083116132c2575b50505050509050919050565b5f6132ec8261323a565b90505f5b8181101561332157600283015f61330785846135f3565b815260208101919091526040015f908120556001016132f0565b50610ed9826127bf565b5f600282600381111561334057613340613a0a565b61334a9190613f73565b60ff166001149050919050565b5f5f5f6133648686613609565b91509150815f036133885783818161337e5761337e613f44565b0492505050610fca565b81841161339f5761339f6003851502601118613625565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f81815260018301602052604081205480156134e1575f613429600183613d77565b85549091505f9061343c90600190613d77565b905080821461349b575f865f01828154811061345a5761345a613c59565b905f5260205f200154905080875f01848154811061347a5761347a613c59565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806134ac576134ac613fa0565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a10565b5f915050610a10565b5f80806134f760126115df565b90505f84600481111561350c5761350c613a0a565b0361351c578092508291506135ce565b600384600481111561353057613530613a0a565b036135425760185492508291506135ce565b600184600481111561355657613556613a0a565b0361356e5761356481613636565b92508091506135ce565b600284600481111561358257613582613a0a565b0361359a5761359081613636565b92508291506135ce565b60048460048111156135ae576135ae613a0a565b036135ce576018546135c8906135c383613636565b61375c565b92508291505b50915091565b5f610fca838361376b565b5f610fca8383612f40565b5f610a10825490565b5f610fca8383613776565b5f610fca8383613407565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f5f60085f9054906101000a90046001600160a01b03166001600160a01b031663f3cc69936040518163ffffffff1660e01b8152600401602060405180830381865afa158015613688573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136ac9190613d8a565b61ffff1690505f61374160095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613706573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061372a9190613f58565b839063ffffffff908116906301e133809061335716565b905061166b61375282612710613d64565b8590612710613357565b5f828218828411028218610fca565b5f610fca8383612f87565b5f825f01828154811061378b5761378b613c59565b905f5260205f200154905092915050565b5f5f602083850312156137ad575f5ffd5b82356001600160401b038111156137c2575f5ffd5b8301601f810185136137d2575f5ffd5b80356001600160401b038111156137e7575f5ffd5b8560208260051b84010111156137fb575f5ffd5b6020919091019590945092505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613850575f5ffd5b5035919050565b6001600160a01b0381168114610e5f575f5ffd5b5f5f6040838503121561387c575f5ffd5b823561388781613857565b946020939093013593505050565b5f602082840312156138a5575f5ffd5b8135610fca81613857565b5f5f604083850312156138c1575f5ffd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b5f5f5f606084860312156138f6575f5ffd5b833561390181613857565b9250602084013561391181613857565b929592945050506040919091013590565b60ff81168114610e5f575f5ffd5b61ffff81168114610e5f575f5ffd5b5f5f5f60608486031215613951575f5ffd5b833561395c81613922565b9250602084013561396c81613930565b9150604084013561397c81613930565b809150509250925092565b5f8151808452602084019350602083015f5b828110156139c05781516001600160a01b0316865260209586019590910190600101613999565b5093949350505050565b602081525f610fca6020830184613987565b5f5f604083850312156139ed575f5ffd5b8235915060208301356139ff81613857565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6080810160058610613a3e57634e487b7160e01b5f52602160045260245ffd5b94815261ffff93841660208201529190921660408201526060015290565b5f5f83601f840112613a6c575f5ffd5b5081356001600160401b03811115613a82575f5ffd5b6020830191508360208260061b850101111561292b575f5ffd5b5f5f5f60408486031215613aae575f5ffd5b83356001600160401b03811115613ac3575f5ffd5b613acf86828701613a5c565b909790965060209590950135949350505050565b5f5f5f60608486031215613af5575f5ffd5b833592506020840135915060408401356004811061397c575f5ffd5b5f5f60208385031215613b22575f5ffd5b82356001600160401b03811115613b37575f5ffd5b613b4385828601613a5c565b90969095509350505050565b5f5f5f60608486031215613b61575f5ffd5b833592506020840135613b7381613857565b9150604084013561397c81613857565b604081525f613b956040830185613987565b82810360208401528084518083526020830191506020860192505f5b81811015613bd557835163ffffffff16835260209384019390920191600101613bb1565b50909695505050505050565b604081525f613bf36040830185613987565b82810360208401528084518083526020830191506020860192505f5b81811015613bd5578351835260209384019390920191600101613c0f565b5f5f60408385031215613c3e575f5ffd5b8235613c4981613857565b915060208301356139ff81613857565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613c7d575f5ffd5b81518015158114610fca575f5ffd5b5f60208284031215613c9c575f5ffd5b8151610fca81613857565b602080825281018290525f8360408301825b85811015613ce9578235613ccc81613857565b6001600160a01b0316825260209283019290910190600101613cb9565b5095945050505050565b600181811c90821680613d0757607f821691505b602082108103613d2557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613d3b575f5ffd5b5051919050565b918252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a1057610a10613d50565b81810381811115610a1057610a10613d50565b5f60208284031215613d9a575f5ffd5b8151610fca81613930565b6001600160a01b03929092168252602082015260400190565b6001815b6001841115613df957808504811115613ddd57613ddd613d50565b6001841615613deb57908102905b60019390931c928002613dc2565b935093915050565b5f82613e0f57506001610a10565b81613e1b57505f610a10565b8160018114613e315760028114613e3b57613e57565b6001915050610a10565b60ff841115613e4c57613e4c613d50565b50506001821b610a10565b5060208310610133831016604e8410600b8410161715613e7a575081810a610a10565b613e865f198484613dbe565b805f1904821115613e9957613e99613d50565b029392505050565b5f610fca60ff841683613e01565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff81168114610e5f575f5ffd5b5f60208284031215613ee4575f5ffd5b8135610fca81613ec3565b5f60208284031215613eff575f5ffd5b8151610fca81613922565b6001600160a01b039390931683526020830191909152604082015260600190565b60ff8281168282160390811115610a1057610a10613d50565b634e487b7160e01b5f52601260045260245ffd5b5f60208284031215613f68575f5ffd5b8151610fca81613ec3565b5f60ff831680613f9157634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212200c25d5e163a933691b79aad3490f00701f2044f2f7695bd0116baa8c5906bc7b64736f6c634300081c0033a264697066735822122091a493b3381a571789890687c7749ca594a9bc5d60b7dcc99c39a17c2cde3bb164736f6c634300081c0033", + "bytecode": "0x6080604052348015600e575f5ffd5b506040516155f63803806155f6833981016040819052602b916074565b6001600160a01b03811660515760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0392909216919091179055609f565b5f602082840312156083575f5ffd5b81516001600160a01b03811681146098575f5ffd5b9392505050565b61554a806100ac5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063341624941461003857806379502c5514610061575b5f5ffd5b61004b6100463660046103ab565b610073565b604051610058919061046c565b60405180910390f35b5f5461004b906001600160a01b031681565b5f8054604051638771de8760e01b815233916001600160a01b031690638771de87906100a390849060040161046c565b602060405180830381865afa1580156100be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e29190610480565b6100ff57604051631a27eac360e11b815260040160405180910390fd5b5f54604051633c17975360e21b81526001600160a01b039091169063f05e5d4c9061012e908d9060040161046c565b602060405180830381865afa158015610149573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016d9190610480565b61018a57604051631a27eac360e11b815260040160405180910390fd5b5f5f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101fd9190610480565b61021a576040516312aecd8160e01b815260040160405180910390fd5b5f818b5f5f9054906101000a90046001600160a01b03168c8c8c8c8c8c8c60405161024490610344565b6102579a999897969594939291906104ce565b604051809103905ff080158015610270573d5f5f3e3d5ffd5b505f8054604051631e832de160e21b81529295508593506001600160a01b031691637a0cb784916102a691859190600401610561565b5f604051808303815f87803b1580156102bd575f5ffd5b505af11580156102cf573d5f5f3e3d5ffd5b505050508a6001600160a01b0316826001600160a01b0316846001600160a01b03167f91700e2f05ab5287673189803ecbe9609340db98196ee954ac9865daf4308d2d8d8d8d8d8d8d8d5f60405161032e98979695949392919061057e565b60405180910390a4505098975050505050505050565b614f36806105df83390190565b5f5f83601f840112610361575f5ffd5b5081356001600160401b03811115610377575f5ffd5b60208301915083602082850101111561038e575f5ffd5b9250929050565b803561ffff811681146103a6575f5ffd5b919050565b5f5f5f5f5f5f5f5f60c0898b0312156103c2575f5ffd5b88356001600160a01b03811681146103d8575f5ffd5b975060208901356001600160401b038111156103f2575f5ffd5b6103fe8b828c01610351565b90985096505060408901356001600160401b0381111561041c575f5ffd5b6104288b828c01610351565b909650945050606089013560ff81168114610441575f5ffd5b925061044f60808a01610395565b915061045d60a08a01610395565b90509295985092959890939650565b6001600160a01b0391909116815260200190565b5f60208284031215610490575f5ffd5b8151801515811461049f575f5ffd5b9392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b038b811682528a8116602083015289166040820152610100606082018190525f90610503908301898b6104a6565b828103608084015261051681888a6104a6565b60ff9690961660a0840152505061ffff92831660c0820152911660e090910152979650505050505050565b6002811061055d57634e487b7160e01b5f52602160045260245ffd5b9052565b6001600160a01b03831681526040810161049f6020830184610541565b60c081525f61059160c083018a8c6104a6565b82810360208401526105a481898b6104a6565b91505060ff8616604083015261ffff8516606083015261ffff841660808301526105d160a0830184610541565b999850505050505050505056fe60c060405234801561000f575f5ffd5b50604051614f36380380614f3683398101604081905261002e916109ae565b8787878787878787856001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610072573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100969190610a7d565b858560036100a48382610b23565b5060046100b18282610b23565b5050505f5f6100c58361066a60201b60201c565b91509150816100d55760126100d7565b805b60ff1660a05250506001600160a01b03908116608052600160055587166101115760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0386166101385760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b03808b166001600160a01b031992831617909255600780548a841690831617905560088054928916929091168217905560408051630691d8b960e31b8152905163348ec5c8916004808201926020929091908290030181865afa1580156101ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d09190610a7d565b60095f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b0316633a0dad8e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610231573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102559190610a7d565b600a5f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b031663d1717c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102da9190610bdd565b600a60146101000a81548160ff021916908360ff1602179055505f866001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610331573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103559190610a7d565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610390573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b49190610bdd565b9050601260ff821611156103db57604051631c03248960e11b815260040160405180910390fd5b600460ff85161115610400576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff84161115610427576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff8316111561044e576040516317dbc4cb60e21b815260040160405180910390fd5b8360ff16600481111561046357610463610bf6565b6015805460ff1916600183600481111561047f5761047f610bf6565b02179055506015805461ffff84811663010000000264ffff00000019918716610100029190911664ffffffff0019909216919091171790556104c281600a610d01565b6016556015805460188054909160ff1690829060ff191660018360048111156104ed576104ed610bf6565b02179055508154815461ffff61010092839004811690920262ffff0019821681178455845463010000009081900490931690920264ffff0000001990921664ffffffff0019909116171781556001918201549101554260175561054e610740565b50505050505050505061065c60085f9054906101000a90046001600160a01b03166001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ce9190610a7d565b60085f9054906101000a90046001600160a01b03166001600160a01b031663d1717c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106429190610bdd565b61064d90600a610d01565b601e919063ffffffff16610815565b505050505050505050610e02565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b038716916106b091610d0f565b5f60405180830381855afa9150503d805f81146106e8576040519150601f19603f3d011682016040523d82523d5f602084013e6106ed565b606091505b509150915081801561070157506020815110155b15610734575f8180602001905181019061071b9190610d25565b905060ff8111610732576001969095509350505050565b505b505f9485945092505050565b60085460408051636c366a2760e11b815290515f926001600160a01b03169163d86cd44e91600480830192869291908290030181865afa158015610786573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107ad9190810190610d3c565b90505f5b8151811015610811575f6107e88383815181106107d0576107d0610dee565b6020026020010151600b61083260201b90919060201c565b90508061080857604051630ea075bf60e21b815260040160405180910390fd5b506001016107b1565b5050565b5f61082a846001600160a01b0385168461084f565b949350505050565b5f610846836001600160a01b03841661086b565b90505b92915050565b5f828152600284016020526040812082905561082a84846108b7565b5f8181526001830160205260408120546108b057508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610849565b505f610849565b5f610846838361086b565b6001600160a01b03811681146108d6575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610915576109156108d9565b604052919050565b5f82601f83011261092c575f5ffd5b81516001600160401b03811115610945576109456108d9565b610958601f8201601f19166020016108ed565b81815284602083860101111561096c575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b805160ff81168114610998575f5ffd5b919050565b805161ffff81168114610998575f5ffd5b5f5f5f5f5f5f5f5f610100898b0312156109c6575f5ffd5b88516109d1816108c2565b60208a01519098506109e2816108c2565b60408a01519097506109f3816108c2565b60608a01519096506001600160401b03811115610a0e575f5ffd5b610a1a8b828c0161091d565b60808b015190965090506001600160401b03811115610a37575f5ffd5b610a438b828c0161091d565b945050610a5260a08a01610988565b9250610a6060c08a0161099d565b9150610a6e60e08a0161099d565b90509295985092959890939650565b5f60208284031215610a8d575f5ffd5b8151610a98816108c2565b9392505050565b600181811c90821680610ab357607f821691505b602082108103610ad157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610b1e57805f5260205f20601f840160051c81016020851015610afc5750805b601f840160051c820191505b81811015610b1b575f8155600101610b08565b50505b505050565b81516001600160401b03811115610b3c57610b3c6108d9565b610b5081610b4a8454610a9f565b84610ad7565b6020601f821160018114610b82575f8315610b6b5750848201515b5f19600385901b1c1916600184901b178455610b1b565b5f84815260208120601f198516915b82811015610bb15787850151825560209485019460019092019101610b91565b5084821015610bce57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610bed575f5ffd5b61084682610988565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610c5957808504811115610c3d57610c3d610c0a565b6001841615610c4b57908102905b60019390931c928002610c22565b935093915050565b5f82610c6f57506001610849565b81610c7b57505f610849565b8160018114610c915760028114610c9b57610cb7565b6001915050610849565b60ff841115610cac57610cac610c0a565b50506001821b610849565b5060208310610133831016604e8410600b8410161715610cda575081810a610849565b610ce65f198484610c1e565b805f1904821115610cf957610cf9610c0a565b029392505050565b5f61084660ff841683610c61565b5f82518060208501845e5f920191825250919050565b5f60208284031215610d35575f5ffd5b5051919050565b5f60208284031215610d4c575f5ffd5b81516001600160401b03811115610d61575f5ffd5b8201601f81018413610d71575f5ffd5b80516001600160401b03811115610d8a57610d8a6108d9565b8060051b610d9a602082016108ed565b91825260208184018101929081019087841115610db5575f5ffd5b6020850194505b83851015610de35784519250610dd1836108c2565b82825260209485019490910190610dbc565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b60805160a051614116610e205f395f50505f61103401526141165ff3fe608060405234801561000f575f5ffd5b50600436106102d7575f3560e01c806395d89b411161018157806395d89b411461051c57806397ee114414610524578063985ba4ae1461055a5780639908840c1461056d578063a68a526714610576578063a9059cbb14610589578063aa2f892d1461059c578063acdb3d51146105af578063b1bd7e2e146105b8578063b3d7f6b9146105cb578063b460af94146105de578063b6eba653146105ec578063ba08765214610602578063bdca916514610615578063c0b568e11461061e578063c3f0d30e14610631578063c63d75b61461045e578063c6e6f59214610644578063ca78e83914610657578063ce96cb771461065f578063d1717c7d14610672578063d3d0345814610686578063d853365f1461069c578063d905777e146106a4578063dd62ed3e146106b7578063e3352c4c146106ca578063e51a85f6146106dd578063e5e97193146106f0578063e66f53b714610703578063ef8b30f714610644578063f7dcd96e14610716575f5ffd5b806301e1d114146102db57806303d44854146102f257806306fdde031461030757806307a2d13a1461031c578063095ea7b31461032f5780630a28a477146103525780630c6a62dd146103655780630d1e6667146103785780630df571f71461038b57806318160ddd1461039e57806318c21949146103a65780631f52692b146103b957806323b872dd146103d9578063283c8168146103ec5780632f190c9a146103f5578063313ce56714610408578063348ec5c81461041d57806338d52e0f146104305780633a0dad8e146104385780633ab6d27c1461044b578063402d267d1461045e578063493a6e21146104725780634cdad5061461031c5780634e85b1351461048557806353a0bfdf1461049a5780636e553f65146104a757806370a08231146104ba5780637847ea53146104cd57806379502c55146104ed5780638f5c94651461050057806394bf804d146104a7575b5f5ffd5b600d545b6040519081526020015b60405180910390f35b6103056103003660046138a8565b610729565b005b61030f610978565b6040516102e99190613917565b6102df61032a36600461394c565b610a08565b61034261033d366004613977565b610a19565b60405190151581526020016102e9565b6102df61036036600461394c565b610a30565b6103056103733660046139a1565b610a3c565b61030561038636600461394c565b610b3c565b6103056103993660046139bc565b610e4f565b6002546102df565b6103056103b436600461394c565b610eca565b6006546103cc906001600160a01b031681565b6040516102e991906139dc565b6103426103e73660046139f0565b610f99565b6102df60175481565b6102df61040336600461394c565b610fbe565b60125b60405160ff90911681526020016102e9565b6009546103cc906001600160a01b031681565b6103cc611032565b600a546103cc906001600160a01b031681565b610305610459366004613a4b565b611056565b6102df61046c3660046139a1565b505f1990565b61030561048036600461394c565b611308565b61048d61157f565b6040516102e99190613ad6565b601a546103429060ff1681565b6102df6104b5366004613ae8565b611590565b6102df6104c83660046139a1565b6115aa565b6104d86301e1338081565b60405163ffffffff90911681526020016102e9565b6008546103cc906001600160a01b031681565b61050961271081565b60405161ffff90911681526020016102e9565b61030f6115c4565b60155460165461054a9160ff81169161ffff610100830481169263010000009004169084565b6040516102e99493929190613b2a565b610305610568366004613ba8565b6115d3565b61050961012c81565b6102df610584366004613bef565b6116e0565b610342610597366004613977565b611720565b6103056105aa36600461394c565b61172d565b6102df60145481565b6103056105c6366004613c1d565b6119ad565b6102df6105d936600461394c565b611bb9565b6102df6104b5366004613c5b565b6105f4611bc5565b6040516102e9929190613c8f565b6102df610610366004613c5b565b611e7f565b610509610bb881565b61030561062c36600461394c565b612075565b61030561063f36600461394c565b612217565b6102df61065236600461394c565b612378565b610305612383565b6102df61066d3660046139a1565b6123bd565b600a5461040b90600160a01b900460ff1681565b61068e6123d0565b6040516102e9929190613ced565b61040b601281565b6102df6106b23660046139a1565b6124fa565b6102df6106c5366004613d39565b612504565b6103056106d83660046139a1565b61252e565b6102df6106eb36600461394c565b612639565b6103056106fe36600461394c565b612672565b6007546103cc906001600160a01b031681565b6102df61072436600461394c565b612851565b6006546001600160a01b0316331461075457604051631a27eac360e11b815260040160405180910390fd5b61075e600b6128bc565b5f5b8181101561085e575f83838381811061077b5761077b613d65565b905060200201602081019061079091906139a1565b600854604051633af32abf60e01b81529192506001600160a01b031690633af32abf906107c19084906004016139dc565b602060405180830381865afa1580156107dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108009190613d79565b610828578060405163751dff9760e11b815260040161081f91906139dc565b60405180910390fd5b5f610834600b836128c5565b90508061085457604051630ea075bf60e21b815260040160405180910390fd5b5050600101610760565b506108ca306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c29190613d98565b600b906128d9565b61093b57610939306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109319190613d98565b600b906128c5565b505b7fa975983c7a4dcf80477a447433240de322f36428f1b3864e50d7a45e14c68b66828260405161096c929190613db3565b60405180910390a15050565b60606003805461098790613dff565b80601f01602080910402602001604051908101604052809291908181526020018280546109b390613dff565b80156109fe5780601f106109d5576101008083540402835291602001916109fe565b820191905f5260205f20905b8154815290600101906020018083116109e157829003601f168201915b5050505050905090565b5f610a13825f6128ed565b92915050565b5f33610a2681858561292e565b5060019392505050565b5f610a13826001612940565b6006546001600160a01b03163314610a6757604051631a27eac360e11b815260040160405180910390fd5b600854604051633c17975360e21b81526001600160a01b039091169063f05e5d4c90610a979084906004016139dc565b602060405180830381865afa158015610ab2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad69190613d79565b610af357604051631a27eac360e11b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f83293ffeebb677b167941693470018acf300605df266a35e9fdb66f24ff00fe0905f90a250565b610b44612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190613d79565b610bd5576040516312aecd8160e01b815260040160405180910390fd5b601a5460ff1680610c50575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590610c119030906004016139dc565b602060405180830381865afa158015610c2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c509190613d79565b15610c6e576040516304b1e71160e41b815260040160405180910390fd5b805f03610c9757610c7d611032565b604051636b30633560e01b815260040161081f91906139dc565b60085460408051633228036560e11b815290515f926001600160a01b03169163645006ca9160048083019260209291908290030181865afa158015610cde573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d029190613e37565b905080821015610d29578181604051631e2be21160e01b815260040161081f929190613e4e565b5f610d32611032565b6001600160a01b03166370a08231336040518263ffffffff1660e01b8152600401610d5d91906139dc565b602060405180830381865afa158015610d78573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9c9190613e37565b905080831115610dbf57604051632ca2f52b60e11b815260040160405180910390fd5b600a54610deb9033906001600160a01b031685610dda611032565b6001600160a01b031692919061299c565b5f610df7600e33612a09565b9150610e12905033610e098684613e70565b600e9190612a2f565b50604051849033907f55896b30a78fc55b78937f8014dde3f0035e9d37a4f6ac36841fb8b62f7e2b13905f90a3505050610e4c6001600555565b50565b6009546001600160a01b03163314610e7a57604051631a27eac360e11b815260040160405180910390fd5b8015610ec6578060145f828254610e919190613e70565b9091555050601454604051829084907f8b8789cf9157fe7b016901e4ed3a5d0971caa8b7c031da0b25638ccf65841b2a905f90a45b5050565b6006546001600160a01b03163314610ef557604051631a27eac360e11b815260040160405180910390fd5b805f03610f0457610c7d611032565b601454811115610f2757604051632ca2f52b60e11b815260040160405180910390fd5b8060145f828254610f389190613e83565b9091555050600a5460405163741fca4b60e01b8152600481018390526001600160a01b039091169063741fca4b906024015f604051808303815f87803b158015610f80575f5ffd5b505af1158015610f92573d5f5f3e3d5ffd5b5050505050565b5f33610fa6858285612a44565b610fb1858585612a8f565b60019150505b9392505050565b5f5f610fca600e612aec565b9050805f03610fdb57505f92915050565b5f610fe68285612af6565b90505f805b828161ffff161015611029575f611007600e61ffff8416612b05565b915061101590508184613e70565b9250508061102290613e96565b9050610feb565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6006546001600160a01b0316331461108157604051631a27eac360e11b815260040160405180910390fd5b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f59190613d79565b611112576040516312aecd8160e01b815260040160405180910390fd5b600460ff84161115611137576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff8316111561115e576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff82161115611185576040516317dbc4cb60e21b815260040160405180910390fd5b61118d612b13565b805160188054909190829060ff191660018360048111156111b0576111b0613b16565b021790555060208201518154604084015161ffff90811663010000000264ffff0000001991909316610100021664ffffffff00199091161717815560609091015160019091015560ff8316600481111561120c5761120c613b16565b6015805460ff1916600183600481111561122857611228613b16565b02179055506015805461ffff83811663010000000264ffff00000019918616610100029190911664ffffffff00199092169190911717905560085460408051630df1aa5760e31b815290516001600160a01b0390921691636f8d52b8916004808201926020929091908290030181865afa1580156112a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cc9190613e37565b6112d69042613e70565b60175560405130907fb31d0e1c8c885e6966984333ce964f4a58ad72b6c4e89e688ecc4549ad97558e905f90a2505050565b600a546001600160a01b0316331461133357604051631a27eac360e11b815260040160405180910390fd5b61133b612972565b5f6113466011612aec565b9050805f036113555750611575565b5f6113d38260085f9054906101000a90046001600160a01b03166001600160a01b031663bcdb8a186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ce9190613e37565b612af6565b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611426573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144a9190613eb6565b90505f61145660025490565b90505f805b848161ffff16101561156e575f80611474601182612b05565b9092509050611484601183612bcd565b505f611492828b885f612be1565b905061149e3083612c16565b6114a88286613e70565b600a54604051634adfc2e760e01b81529196506001600160a01b031690634adfc2e7906114db9086908590600401613ed1565b5f604051808303815f87803b1580156114f2575f5ffd5b505af1158015611504573d5f5f3e3d5ffd5b505050508661ffff16836001600160a01b0316306001600160a01b03167f215abfcd108b85fbee47f26fda2de66f90f14fa5fcaf0201698ad8ac9323545f8486604051611552929190613e4e565b60405180910390a45050508061156790613e96565b905061145b565b5050505050505b610e4c6001600555565b606061158b600b612c4a565b905090565b5f60405163125ad87760e31b815260040160405180910390fd5b6001600160a01b03165f9081526020819052604090205490565b60606004805461098790613dff565b6009546001600160a01b031633146115fe57604051631a27eac360e11b815260040160405180910390fd5b611608601b612c56565b815f5b8161ffff168161ffff1610156116845761167b85858361ffff1681811061163457611634613d65565b61164a92602060409092020190810191506139a1565b86868461ffff1681811061166057611660613d65565b90506040020160200135601b612a2f9092919063ffffffff16565b5060010161160b565b505f61169760125b61032a90600a613fcd565b6016549091508111156116aa5760168190555b600d83905560405183907f5e1ff954b5e5257e9ee5d4cb07059e8f5e69b1aaaf9911e5d8d90a6894de9c21905f90a25050505050565b5f6117186116ef846001613e70565b6116f7612c5f565b61170290600a613fcd565b60025461170f9190613e70565b86919085612cdb565b949350505050565b5f33610a26818585612a8f565b611735612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611785573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a99190613d79565b6117c6576040516312aecd8160e01b815260040160405180910390fd5b601a5460ff1680611841575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb45906118029030906004016139dc565b602060405180830381865afa15801561181d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118419190613d79565b1561185f576040516304b1e71160e41b815260040160405180910390fd5b805f036118815730604051636b30633560e01b815260040161081f91906139dc565b60085460408051630912ae6d60e01b815290515f926001600160a01b031691630912ae6d9160048083019260209291908290030181865afa1580156118c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ec9190613e37565b905080821015611913578181604051631f29a4af60e31b815260040161081f929190613e4e565b5f61191d336115aa565b90508083111561194057604051632ca2f52b60e11b815260040160405180910390fd5b61194c3033818661299c565b5f611958601133612a09565b915061197390503361196a8684613e70565b60119190612a2f565b50604051849033907f222dc200773fe9b45015bf792e8fee37d651e3590c215806a5042404b6d741d2905f90a3505050610e4c6001600555565b6007546001600160a01b031633146119d857604051631a27eac360e11b815260040160405180910390fd5b5f8190036119f957604051631121aa8d60e01b815260040160405180910390fd5b611a03601e612c56565b5f816001600160401b03811115611a1c57611a1c613fdb565b604051908082528060200260200182016040528015611a45578160200160208202803683370190505b5090505f82815b8161ffff168161ffff161015611b43575f86868361ffff16818110611a7357611a73613d65565b611a8992602060409092020190810191506139a1565b90505f87878461ffff16818110611aa257611aa2613d65565b9050604002016020016020810190611aba9190614000565b905081868461ffff1681518110611ad357611ad3613d65565b6001600160a01b03909216602092830291909101909101525f611b01601e8463ffffffff80861690612a2f16565b905080611b2357826040516346bdabe160e01b815260040161081f91906139dc565b611b3363ffffffff831687613e70565b9550505050806001019050611a4c565b50611b4d83612d1d565b600a60149054906101000a900460ff16600a611b699190613fcd565b8214611b8857604051639006dd2760e01b815260040160405180910390fd5b60405133907f2d47a742b8d7df7c1fc5a9a631b206b364e6cb2722490759f63bb3ab14b132e0905f90a25050505050565b5f610a138260016128ed565b601a54606090819060ff1615611d485760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060085460408051631c56369f60e21b815290519394506001600160a01b0390911692637158da7c925060048083019260209291908290030181865afa158015611c5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c809190613d98565b825f81518110611c9257611c92613d65565b6001600160a01b039283166020918202929092018101919091526008546040805163d1717c7d60e01b81529051919093169263d1717c7d9260048083019391928290030181865afa158015611ce9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d0d919061401b565b611d1890600a613fcd565b815f81518110611d2a57611d2a613d65565b602002602001019063ffffffff16908163ffffffff16815250509091565b5f611d53601e612aec565b90508061ffff166001600160401b03811115611d7157611d71613fdb565b604051908082528060200260200182016040528015611d9a578160200160208202803683370190505b5092508061ffff166001600160401b03811115611db957611db9613fdb565b604051908082528060200260200182016040528015611de2578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611e79575f80611e08601e61ffff8516612b05565b9150915081868461ffff1681518110611e2357611e23613d65565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff1681518110611e5a57611e5a613d65565b63ffffffff909216602092830291909101909101525050600101611de7565b50509091565b5f611e88612972565b60085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590611eb89030906004016139dc565b602060405180830381865afa158015611ed3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef79190613d79565b611f145760405163125ad87760e31b815260040160405180910390fd5b5f611f1e836124fa565b905080851115611f4757828582604051632e52afbb60e21b815260040161081f93929190614036565b845f03611f695730604051636b30633560e01b815260040161081f91906139dc565b336001600160a01b03841614611f8457611f84833387612a44565b5f611f8e86610a08565b905080600d5f828254611fa19190613e83565b90915550611fb190508487612c16565b836001600160a01b0316856001600160a01b0316336001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db848a604051612000929190613e4e565b60405180910390a4600a54604051627b8a6760e11b8152600481018390526001600160a01b0387811660248301529091169062f714ce906044015f604051808303815f87803b158015612051575f5ffd5b505af1158015612063573d5f5f3e3d5ffd5b5092945050505050610fb76001600555565b61207d612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120cd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f19190613d79565b61210e576040516312aecd8160e01b815260040160405180910390fd5b805f0361211d57610c7d611032565b5f612129600e33612a09565b9150508181101561214d57604051632ca2f52b60e11b815260040160405180910390fd5b5f6121588383613e83565b9050805f036121725761216c600e33612bcd565b50612180565b61217e600e3383612a2f565b505b600a546040516351edffb160e01b81526001600160a01b03909116906351edffb1906121b29033908790600401613ed1565b5f604051808303815f87803b1580156121c9575f5ffd5b505af11580156121db573d5f5f3e3d5ffd5b50506040518592503391507f96a9a6886cdf3047a125454218a23d3961fd3a78643123b248a9d106d0ac94fd905f90a35050610e4c6001600555565b61221f612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122939190613d79565b6122b0576040516312aecd8160e01b815260040160405180910390fd5b805f036122d25730604051636b30633560e01b815260040161081f91906139dc565b5f6122de601133612a09565b9150508181101561230257604051632ca2f52b60e11b815260040160405180910390fd5b5f61230d8383613e83565b9050805f0361232757612321601133612bcd565b50612335565b61233360113383612a2f565b505b612340303385612d95565b604051839033907f046d3e17087d323298991516e3fdec36fe1204d6bff7fb6e2b8eca77b80a22ad905f90a35050610e4c6001600555565b5f610a13825f612940565b6008546001600160a01b031633146123ae5760405163ea8e4eb560e01b815260040160405180910390fd5b601a805460ff19166001179055565b5f610a136123ca836115aa565b5f6128ed565b6060805f6123de601b612aec565b90508061ffff166001600160401b038111156123fc576123fc613fdb565b604051908082528060200260200182016040528015612425578160200160208202803683370190505b5092508061ffff166001600160401b0381111561244457612444613fdb565b60405190808252806020026020018201604052801561246d578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611e79575f80612493601b61ffff8516612b05565b9150915081868461ffff16815181106124ae576124ae613d65565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff16815181106124e5576124e5613d65565b60209081029190910101525050600101612472565b5f610a13826115aa565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6008546001600160a01b031633146125595760405163ea8e4eb560e01b815260040160405180910390fd5b612564600b82612dbb565b505f80612572601e84612a09565b915091508161258057505050565b61258b601e84612bcd565b505f306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ed9190613d98565b90505f806125fc601e84612a09565b9150915081156126235761261d836126148684613e70565b601e9190612a2f565b50612631565b61262f601e8486612a2f565b505b505050505050565b5f5f61264483612dcf565b90505f6126518285613e83565b90505f61265d82612e9a565b90506126698184613e70565b95945050505050565b600a546001600160a01b0316331461269d57604051631a27eac360e11b815260040160405180910390fd5b6126a5612972565b5f6126b0600e612aec565b9050805f036126bf5750611575565b5f6127148260085f9054906101000a90046001600160a01b03166001600160a01b031663bcdb8a186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113aa573d5f5f3e3d5ffd5b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612767573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278b9190613eb6565b90505f61279760025490565b90505f805b848161ffff16101561156e575f806127b5600e82612b05565b90925090506127c5600e83612bcd565b505f6127d3828b885f612f93565b90506127df8382612fbf565b6127e98286613e70565b94508661ffff16836001600160a01b0316306001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f68585604051612835929190613e4e565b60405180910390a45050508061284a90613e96565b905061279c565b5f5f61285d6011612aec565b9050805f0361286e57505f92915050565b5f6128798285612af6565b90505f805b828161ffff161015611029575f61289a601161ffff8416612b05565b91506128a890508184613e70565b925050806128b590613e96565b905061287e565b610e4c81612ff3565b5f610fb7836001600160a01b03841661304c565b5f610fb7836001600160a01b038416613093565b5f610fb76128fa600d5490565b612905906001613e70565b61290d612c5f565b61291890600a613fcd565b6002546129259190613e70565b85919085612cdb565b61293b83838360016130aa565b505050565b5f610fb761294c612c5f565b61295790600a613fcd565b6002546129649190613e70565b600d54612925906001613e70565b60026005540361299557604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6040516001600160a01b038481166024830152838116604483015260648201839052612a039186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061317c565b50505050565b5f808080612a20866001600160a01b0387166131df565b909450925050505b9250929050565b5f611718846001600160a01b03851684613217565b5f612a4f8484612504565b90505f19811015612a035781811015612a8157828183604051637dc7a0d960e11b815260040161081f93929190614036565b612a0384848484035f6130aa565b6001600160a01b038316612ab8575f604051634b637e8f60e11b815260040161081f91906139dc565b6001600160a01b038216612ae1575f60405163ec442f0560e01b815260040161081f91906139dc565b61293b838383613233565b5f610a1382613346565b5f828218828410028218610fb7565b5f808080612a208686613350565b604080516080810182525f808252602082018190529181018290526060810191909152426017541115612ba857604080516080810190915260188054829060ff166004811115612b6557612b65613b16565b6004811115612b7657612b76613b16565b8152815461ffff6101008204811660208401526301000000909104166040820152600190910154606090910152919050565b604080516080810190915260158054829060ff166004811115612b6557612b65613b16565b5f610fb7836001600160a01b038416613379565b5f612669612bf0856001613e70565b612bf8612c5f565b612c0390600a613fcd565b612c0d9086613e70565b87919085612cdb565b6001600160a01b038216612c3f575f604051634b637e8f60e11b815260040161081f91906139dc565b610ec6825f83613233565b60605f610fb783613395565b610e4c816133ee565b5f5f612c69611032565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cc8919061401b565b9050612cd5816012614057565b91505090565b5f612d08612ce883613437565b8015612d0357505f8480612cfe57612cfe614070565b868809115b151590565b612d13868686613463565b6126699190613e70565b5f5b8151811015610ec657612d55828281518110612d3d57612d3d613d65565b6020026020010151600b6128d990919063ffffffff16565b612d8d57818181518110612d6b57612d6b613d65565b602002602001015160405163751dff9760e11b815260040161081f91906139dc565b600101612d1f565b61293b83846001600160a01b031663a9059cbb85856040516024016129d1929190613ed1565b5f610fb7836001600160a01b038416613513565b5f5f612dd9612b13565b9050806040015161ffff165f03612df257505f92915050565b60408101515f90612e0a9061ffff1685612710613463565b905061171860095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e839190614084565b829063ffffffff908116906301e133809061346316565b5f5f612ea4612b13565b9050806020015161ffff165f03612ebd57505f92915050565b5f612ed4612ecd6012600a613fcd565b855f6116e0565b90505f5f612ee4845f01516135f6565b9150915081831080612ef4575080155b15612f0457505f95945050505050565b5f612f22612f128386613e83565b602087015161ffff169084613463565b90505f612f328289612710613463565b9050612f8760095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5f573d5f5f3e3d5ffd5b98975050505050505050565b5f612669612f9f612c5f565b612faa90600a613fcd565b612fb49085613e70565b612c0d866001613e70565b6001600160a01b038216612fe8575f60405163ec442f0560e01b815260040161081f91906139dc565b610ec65f8383613233565b5f612ffc825490565b90505f5b8181101561304557826001015f845f01838154811061302157613021613d65565b905f5260205f20015481526020019081526020015f205f9055806001019050613000565b50505f9055565b5f6130578383613093565b61308c57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a13565b505f610a13565b5f9081526001919091016020526040902054151590565b6001600160a01b0384166130d3575f60405163e602df0560e01b815260040161081f91906139dc565b6001600160a01b0383166130fc575f604051634a1406b160e11b815260040161081f91906139dc565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015612a0357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161316e91815260200190565b60405180910390a350505050565b5f5f60205f8451602086015f885af18061319b576040513d5f823e3d81fd5b50505f513d915081156131b25780600114156131bf565b6001600160a01b0384163b155b15612a035783604051635274afe760e01b815260040161081f91906139dc565b5f81815260028301602052604081205481908061320c5761320085856136e0565b92505f9150612a289050565b600192509050612a28565b5f828152600284016020526040812082905561171884846136eb565b6001600160a01b03831661325d578060025f8282546132529190613e70565b909155506132ba9050565b6001600160a01b0383165f908152602081905260409020548181101561329c5783818360405163391434e360e21b815260040161081f93929190614036565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166132d6576002805482900390556132f4565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161333991815260200190565b60405180910390a3505050565b5f610a13826136f6565b5f808061335d85856136ff565b5f81815260029690960160205260409095205494959350505050565b5f8181526002830160205260408120819055610fb7838361370a565b6060815f018054806020026020016040519081016040528092919081815260200182805480156133e257602002820191905f5260205f20905b8154815260200190600101908083116133ce575b50505050509050919050565b5f6133f882613346565b90505f5b8181101561342d57600283015f61341385846136ff565b815260208101919091526040015f908120556001016133fc565b50610ec6826128bc565b5f600282600381111561344c5761344c613b16565b613456919061409f565b60ff166001149050919050565b5f5f5f6134708686613715565b91509150815f036134945783818161348a5761348a614070565b0492505050610fb7565b8184116134ab576134ab6003851502601118613731565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f81815260018301602052604081205480156135ed575f613535600183613e83565b85549091505f9061354890600190613e83565b90508082146135a7575f865f01828154811061356657613566613d65565b905f5260205f200154905080875f01848154811061358657613586613d65565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806135b8576135b86140cc565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a13565b5f915050610a13565b5f8080613603601261168c565b90505f84600481111561361857613618613b16565b03613628578092508291506136da565b600384600481111561363c5761363c613b16565b0361364e5760165492508291506136da565b600184600481111561366257613662613b16565b0361367a5761367081613742565b92508091506136da565b600284600481111561368e5761368e613b16565b036136a65761369c81613742565b92508291506136da565b60048460048111156136ba576136ba613b16565b036136da576016546136d4906136cf83613742565b613868565b92508291505b50915091565b5f610fb78383613877565b5f610fb7838361304c565b5f610a13825490565b5f610fb78383613882565b5f610fb78383613513565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f5f60085f9054906101000a90046001600160a01b03166001600160a01b031663f3cc69936040518163ffffffff1660e01b8152600401602060405180830381865afa158015613794573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b89190613eb6565b61ffff1690505f61384d60095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613812573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138369190614084565b839063ffffffff908116906301e133809061346316565b905061171861385e82612710613e70565b8590612710613463565b5f828218828411028218610fb7565b5f610fb78383613093565b5f825f01828154811061389757613897613d65565b905f5260205f200154905092915050565b5f5f602083850312156138b9575f5ffd5b82356001600160401b038111156138ce575f5ffd5b8301601f810185136138de575f5ffd5b80356001600160401b038111156138f3575f5ffd5b8560208260051b8401011115613907575f5ffd5b6020919091019590945092505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561395c575f5ffd5b5035919050565b6001600160a01b0381168114610e4c575f5ffd5b5f5f60408385031215613988575f5ffd5b823561399381613963565b946020939093013593505050565b5f602082840312156139b1575f5ffd5b8135610fb781613963565b5f5f604083850312156139cd575f5ffd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b5f5f5f60608486031215613a02575f5ffd5b8335613a0d81613963565b92506020840135613a1d81613963565b929592945050506040919091013590565b60ff81168114610e4c575f5ffd5b61ffff81168114610e4c575f5ffd5b5f5f5f60608486031215613a5d575f5ffd5b8335613a6881613a2e565b92506020840135613a7881613a3c565b91506040840135613a8881613a3c565b809150509250925092565b5f8151808452602084019350602083015f5b82811015613acc5781516001600160a01b0316865260209586019590910190600101613aa5565b5093949350505050565b602081525f610fb76020830184613a93565b5f5f60408385031215613af9575f5ffd5b823591506020830135613b0b81613963565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6080810160058610613b4a57634e487b7160e01b5f52602160045260245ffd5b94815261ffff93841660208201529190921660408201526060015290565b5f5f83601f840112613b78575f5ffd5b5081356001600160401b03811115613b8e575f5ffd5b6020830191508360208260061b8501011115612a28575f5ffd5b5f5f5f60408486031215613bba575f5ffd5b83356001600160401b03811115613bcf575f5ffd5b613bdb86828701613b68565b909790965060209590950135949350505050565b5f5f5f60608486031215613c01575f5ffd5b8335925060208401359150604084013560048110613a88575f5ffd5b5f5f60208385031215613c2e575f5ffd5b82356001600160401b03811115613c43575f5ffd5b613c4f85828601613b68565b90969095509350505050565b5f5f5f60608486031215613c6d575f5ffd5b833592506020840135613c7f81613963565b91506040840135613a8881613963565b604081525f613ca16040830185613a93565b82810360208401528084518083526020830191506020860192505f5b81811015613ce157835163ffffffff16835260209384019390920191600101613cbd565b50909695505050505050565b604081525f613cff6040830185613a93565b82810360208401528084518083526020830191506020860192505f5b81811015613ce1578351835260209384019390920191600101613d1b565b5f5f60408385031215613d4a575f5ffd5b8235613d5581613963565b91506020830135613b0b81613963565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613d89575f5ffd5b81518015158114610fb7575f5ffd5b5f60208284031215613da8575f5ffd5b8151610fb781613963565b602080825281018290525f8360408301825b85811015613df5578235613dd881613963565b6001600160a01b0316825260209283019290910190600101613dc5565b5095945050505050565b600181811c90821680613e1357607f821691505b602082108103613e3157634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613e47575f5ffd5b5051919050565b918252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a1357610a13613e5c565b81810381811115610a1357610a13613e5c565b5f61ffff821661ffff8103613ead57613ead613e5c565b60010192915050565b5f60208284031215613ec6575f5ffd5b8151610fb781613a3c565b6001600160a01b03929092168252602082015260400190565b6001815b6001841115613f2557808504811115613f0957613f09613e5c565b6001841615613f1757908102905b60019390931c928002613eee565b935093915050565b5f82613f3b57506001610a13565b81613f4757505f610a13565b8160018114613f5d5760028114613f6757613f83565b6001915050610a13565b60ff841115613f7857613f78613e5c565b50506001821b610a13565b5060208310610133831016604e8410600b8410161715613fa6575081810a610a13565b613fb25f198484613eea565b805f1904821115613fc557613fc5613e5c565b029392505050565b5f610fb760ff841683613f2d565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff81168114610e4c575f5ffd5b5f60208284031215614010575f5ffd5b8135610fb781613fef565b5f6020828403121561402b575f5ffd5b8151610fb781613a2e565b6001600160a01b039390931683526020830191909152604082015260600190565b60ff8281168282160390811115610a1357610a13613e5c565b634e487b7160e01b5f52601260045260245ffd5b5f60208284031215614094575f5ffd5b8151610fb781613fef565b5f60ff8316806140bd57634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220be06ab2c4f83f1e58ef7680247e65adbf99a93127dd55a14182317ccf7c5813164736f6c634300081c0033a2646970667358221220368ba66135d6961b9add195e23ceea245968aadd191dd0a3358bcae845350a7864736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063341624941461003857806379502c5514610061575b5f5ffd5b61004b6100463660046103ab565b610073565b604051610058919061046c565b60405180910390f35b5f5461004b906001600160a01b031681565b5f8054604051638771de8760e01b815233916001600160a01b031690638771de87906100a390849060040161046c565b602060405180830381865afa1580156100be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e29190610480565b6100ff57604051631a27eac360e11b815260040160405180910390fd5b5f54604051633c17975360e21b81526001600160a01b039091169063f05e5d4c9061012e908d9060040161046c565b602060405180830381865afa158015610149573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016d9190610480565b61018a57604051631a27eac360e11b815260040160405180910390fd5b5f5f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101fd9190610480565b61021a576040516312aecd8160e01b815260040160405180910390fd5b5f818b5f5f9054906101000a90046001600160a01b03168c8c8c8c8c8c8c60405161024490610344565b6102579a999897969594939291906104ce565b604051809103905ff080158015610270573d5f5f3e3d5ffd5b505f8054604051631e832de160e21b81529295508593506001600160a01b031691637a0cb784916102a691859190600401610561565b5f604051808303815f87803b1580156102bd575f5ffd5b505af11580156102cf573d5f5f3e3d5ffd5b505050508a6001600160a01b0316826001600160a01b0316846001600160a01b03167f91700e2f05ab5287673189803ecbe9609340db98196ee954ac9865daf4308d2d8d8d8d8d8d8d8d5f60405161032e98979695949392919061057e565b60405180910390a4505098975050505050505050565b614f36806105df83390190565b5f5f83601f840112610361575f5ffd5b5081356001600160401b03811115610377575f5ffd5b60208301915083602082850101111561038e575f5ffd5b9250929050565b803561ffff811681146103a6575f5ffd5b919050565b5f5f5f5f5f5f5f5f60c0898b0312156103c2575f5ffd5b88356001600160a01b03811681146103d8575f5ffd5b975060208901356001600160401b038111156103f2575f5ffd5b6103fe8b828c01610351565b90985096505060408901356001600160401b0381111561041c575f5ffd5b6104288b828c01610351565b909650945050606089013560ff81168114610441575f5ffd5b925061044f60808a01610395565b915061045d60a08a01610395565b90509295985092959890939650565b6001600160a01b0391909116815260200190565b5f60208284031215610490575f5ffd5b8151801515811461049f575f5ffd5b9392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b038b811682528a8116602083015289166040820152610100606082018190525f90610503908301898b6104a6565b828103608084015261051681888a6104a6565b60ff9690961660a0840152505061ffff92831660c0820152911660e090910152979650505050505050565b6002811061055d57634e487b7160e01b5f52602160045260245ffd5b9052565b6001600160a01b03831681526040810161049f6020830184610541565b60c081525f61059160c083018a8c6104a6565b82810360208401526105a481898b6104a6565b91505060ff8616604083015261ffff8516606083015261ffff841660808301526105d160a0830184610541565b999850505050505050505056fe60c060405234801561000f575f5ffd5b50604051614f36380380614f3683398101604081905261002e916109ae565b8787878787878787856001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610072573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100969190610a7d565b858560036100a48382610b23565b5060046100b18282610b23565b5050505f5f6100c58361066a60201b60201c565b91509150816100d55760126100d7565b805b60ff1660a05250506001600160a01b03908116608052600160055587166101115760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0386166101385760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b03808b166001600160a01b031992831617909255600780548a841690831617905560088054928916929091168217905560408051630691d8b960e31b8152905163348ec5c8916004808201926020929091908290030181865afa1580156101ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d09190610a7d565b60095f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b0316633a0dad8e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610231573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102559190610a7d565b600a5f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b031663d1717c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102da9190610bdd565b600a60146101000a81548160ff021916908360ff1602179055505f866001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610331573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103559190610a7d565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610390573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b49190610bdd565b9050601260ff821611156103db57604051631c03248960e11b815260040160405180910390fd5b600460ff85161115610400576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff84161115610427576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff8316111561044e576040516317dbc4cb60e21b815260040160405180910390fd5b8360ff16600481111561046357610463610bf6565b6015805460ff1916600183600481111561047f5761047f610bf6565b02179055506015805461ffff84811663010000000264ffff00000019918716610100029190911664ffffffff0019909216919091171790556104c281600a610d01565b6016556015805460188054909160ff1690829060ff191660018360048111156104ed576104ed610bf6565b02179055508154815461ffff61010092839004811690920262ffff0019821681178455845463010000009081900490931690920264ffff0000001990921664ffffffff0019909116171781556001918201549101554260175561054e610740565b50505050505050505061065c60085f9054906101000a90046001600160a01b03166001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ce9190610a7d565b60085f9054906101000a90046001600160a01b03166001600160a01b031663d1717c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106429190610bdd565b61064d90600a610d01565b601e919063ffffffff16610815565b505050505050505050610e02565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b038716916106b091610d0f565b5f60405180830381855afa9150503d805f81146106e8576040519150601f19603f3d011682016040523d82523d5f602084013e6106ed565b606091505b509150915081801561070157506020815110155b15610734575f8180602001905181019061071b9190610d25565b905060ff8111610732576001969095509350505050565b505b505f9485945092505050565b60085460408051636c366a2760e11b815290515f926001600160a01b03169163d86cd44e91600480830192869291908290030181865afa158015610786573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107ad9190810190610d3c565b90505f5b8151811015610811575f6107e88383815181106107d0576107d0610dee565b6020026020010151600b61083260201b90919060201c565b90508061080857604051630ea075bf60e21b815260040160405180910390fd5b506001016107b1565b5050565b5f61082a846001600160a01b0385168461084f565b949350505050565b5f610846836001600160a01b03841661086b565b90505b92915050565b5f828152600284016020526040812082905561082a84846108b7565b5f8181526001830160205260408120546108b057508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610849565b505f610849565b5f610846838361086b565b6001600160a01b03811681146108d6575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610915576109156108d9565b604052919050565b5f82601f83011261092c575f5ffd5b81516001600160401b03811115610945576109456108d9565b610958601f8201601f19166020016108ed565b81815284602083860101111561096c575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b805160ff81168114610998575f5ffd5b919050565b805161ffff81168114610998575f5ffd5b5f5f5f5f5f5f5f5f610100898b0312156109c6575f5ffd5b88516109d1816108c2565b60208a01519098506109e2816108c2565b60408a01519097506109f3816108c2565b60608a01519096506001600160401b03811115610a0e575f5ffd5b610a1a8b828c0161091d565b60808b015190965090506001600160401b03811115610a37575f5ffd5b610a438b828c0161091d565b945050610a5260a08a01610988565b9250610a6060c08a0161099d565b9150610a6e60e08a0161099d565b90509295985092959890939650565b5f60208284031215610a8d575f5ffd5b8151610a98816108c2565b9392505050565b600181811c90821680610ab357607f821691505b602082108103610ad157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610b1e57805f5260205f20601f840160051c81016020851015610afc5750805b601f840160051c820191505b81811015610b1b575f8155600101610b08565b50505b505050565b81516001600160401b03811115610b3c57610b3c6108d9565b610b5081610b4a8454610a9f565b84610ad7565b6020601f821160018114610b82575f8315610b6b5750848201515b5f19600385901b1c1916600184901b178455610b1b565b5f84815260208120601f198516915b82811015610bb15787850151825560209485019460019092019101610b91565b5084821015610bce57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610bed575f5ffd5b61084682610988565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610c5957808504811115610c3d57610c3d610c0a565b6001841615610c4b57908102905b60019390931c928002610c22565b935093915050565b5f82610c6f57506001610849565b81610c7b57505f610849565b8160018114610c915760028114610c9b57610cb7565b6001915050610849565b60ff841115610cac57610cac610c0a565b50506001821b610849565b5060208310610133831016604e8410600b8410161715610cda575081810a610849565b610ce65f198484610c1e565b805f1904821115610cf957610cf9610c0a565b029392505050565b5f61084660ff841683610c61565b5f82518060208501845e5f920191825250919050565b5f60208284031215610d35575f5ffd5b5051919050565b5f60208284031215610d4c575f5ffd5b81516001600160401b03811115610d61575f5ffd5b8201601f81018413610d71575f5ffd5b80516001600160401b03811115610d8a57610d8a6108d9565b8060051b610d9a602082016108ed565b91825260208184018101929081019087841115610db5575f5ffd5b6020850194505b83851015610de35784519250610dd1836108c2565b82825260209485019490910190610dbc565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b60805160a051614116610e205f395f50505f61103401526141165ff3fe608060405234801561000f575f5ffd5b50600436106102d7575f3560e01c806395d89b411161018157806395d89b411461051c57806397ee114414610524578063985ba4ae1461055a5780639908840c1461056d578063a68a526714610576578063a9059cbb14610589578063aa2f892d1461059c578063acdb3d51146105af578063b1bd7e2e146105b8578063b3d7f6b9146105cb578063b460af94146105de578063b6eba653146105ec578063ba08765214610602578063bdca916514610615578063c0b568e11461061e578063c3f0d30e14610631578063c63d75b61461045e578063c6e6f59214610644578063ca78e83914610657578063ce96cb771461065f578063d1717c7d14610672578063d3d0345814610686578063d853365f1461069c578063d905777e146106a4578063dd62ed3e146106b7578063e3352c4c146106ca578063e51a85f6146106dd578063e5e97193146106f0578063e66f53b714610703578063ef8b30f714610644578063f7dcd96e14610716575f5ffd5b806301e1d114146102db57806303d44854146102f257806306fdde031461030757806307a2d13a1461031c578063095ea7b31461032f5780630a28a477146103525780630c6a62dd146103655780630d1e6667146103785780630df571f71461038b57806318160ddd1461039e57806318c21949146103a65780631f52692b146103b957806323b872dd146103d9578063283c8168146103ec5780632f190c9a146103f5578063313ce56714610408578063348ec5c81461041d57806338d52e0f146104305780633a0dad8e146104385780633ab6d27c1461044b578063402d267d1461045e578063493a6e21146104725780634cdad5061461031c5780634e85b1351461048557806353a0bfdf1461049a5780636e553f65146104a757806370a08231146104ba5780637847ea53146104cd57806379502c55146104ed5780638f5c94651461050057806394bf804d146104a7575b5f5ffd5b600d545b6040519081526020015b60405180910390f35b6103056103003660046138a8565b610729565b005b61030f610978565b6040516102e99190613917565b6102df61032a36600461394c565b610a08565b61034261033d366004613977565b610a19565b60405190151581526020016102e9565b6102df61036036600461394c565b610a30565b6103056103733660046139a1565b610a3c565b61030561038636600461394c565b610b3c565b6103056103993660046139bc565b610e4f565b6002546102df565b6103056103b436600461394c565b610eca565b6006546103cc906001600160a01b031681565b6040516102e991906139dc565b6103426103e73660046139f0565b610f99565b6102df60175481565b6102df61040336600461394c565b610fbe565b60125b60405160ff90911681526020016102e9565b6009546103cc906001600160a01b031681565b6103cc611032565b600a546103cc906001600160a01b031681565b610305610459366004613a4b565b611056565b6102df61046c3660046139a1565b505f1990565b61030561048036600461394c565b611308565b61048d61157f565b6040516102e99190613ad6565b601a546103429060ff1681565b6102df6104b5366004613ae8565b611590565b6102df6104c83660046139a1565b6115aa565b6104d86301e1338081565b60405163ffffffff90911681526020016102e9565b6008546103cc906001600160a01b031681565b61050961271081565b60405161ffff90911681526020016102e9565b61030f6115c4565b60155460165461054a9160ff81169161ffff610100830481169263010000009004169084565b6040516102e99493929190613b2a565b610305610568366004613ba8565b6115d3565b61050961012c81565b6102df610584366004613bef565b6116e0565b610342610597366004613977565b611720565b6103056105aa36600461394c565b61172d565b6102df60145481565b6103056105c6366004613c1d565b6119ad565b6102df6105d936600461394c565b611bb9565b6102df6104b5366004613c5b565b6105f4611bc5565b6040516102e9929190613c8f565b6102df610610366004613c5b565b611e7f565b610509610bb881565b61030561062c36600461394c565b612075565b61030561063f36600461394c565b612217565b6102df61065236600461394c565b612378565b610305612383565b6102df61066d3660046139a1565b6123bd565b600a5461040b90600160a01b900460ff1681565b61068e6123d0565b6040516102e9929190613ced565b61040b601281565b6102df6106b23660046139a1565b6124fa565b6102df6106c5366004613d39565b612504565b6103056106d83660046139a1565b61252e565b6102df6106eb36600461394c565b612639565b6103056106fe36600461394c565b612672565b6007546103cc906001600160a01b031681565b6102df61072436600461394c565b612851565b6006546001600160a01b0316331461075457604051631a27eac360e11b815260040160405180910390fd5b61075e600b6128bc565b5f5b8181101561085e575f83838381811061077b5761077b613d65565b905060200201602081019061079091906139a1565b600854604051633af32abf60e01b81529192506001600160a01b031690633af32abf906107c19084906004016139dc565b602060405180830381865afa1580156107dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108009190613d79565b610828578060405163751dff9760e11b815260040161081f91906139dc565b60405180910390fd5b5f610834600b836128c5565b90508061085457604051630ea075bf60e21b815260040160405180910390fd5b5050600101610760565b506108ca306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c29190613d98565b600b906128d9565b61093b57610939306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109319190613d98565b600b906128c5565b505b7fa975983c7a4dcf80477a447433240de322f36428f1b3864e50d7a45e14c68b66828260405161096c929190613db3565b60405180910390a15050565b60606003805461098790613dff565b80601f01602080910402602001604051908101604052809291908181526020018280546109b390613dff565b80156109fe5780601f106109d5576101008083540402835291602001916109fe565b820191905f5260205f20905b8154815290600101906020018083116109e157829003601f168201915b5050505050905090565b5f610a13825f6128ed565b92915050565b5f33610a2681858561292e565b5060019392505050565b5f610a13826001612940565b6006546001600160a01b03163314610a6757604051631a27eac360e11b815260040160405180910390fd5b600854604051633c17975360e21b81526001600160a01b039091169063f05e5d4c90610a979084906004016139dc565b602060405180830381865afa158015610ab2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad69190613d79565b610af357604051631a27eac360e11b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f83293ffeebb677b167941693470018acf300605df266a35e9fdb66f24ff00fe0905f90a250565b610b44612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190613d79565b610bd5576040516312aecd8160e01b815260040160405180910390fd5b601a5460ff1680610c50575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590610c119030906004016139dc565b602060405180830381865afa158015610c2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c509190613d79565b15610c6e576040516304b1e71160e41b815260040160405180910390fd5b805f03610c9757610c7d611032565b604051636b30633560e01b815260040161081f91906139dc565b60085460408051633228036560e11b815290515f926001600160a01b03169163645006ca9160048083019260209291908290030181865afa158015610cde573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d029190613e37565b905080821015610d29578181604051631e2be21160e01b815260040161081f929190613e4e565b5f610d32611032565b6001600160a01b03166370a08231336040518263ffffffff1660e01b8152600401610d5d91906139dc565b602060405180830381865afa158015610d78573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9c9190613e37565b905080831115610dbf57604051632ca2f52b60e11b815260040160405180910390fd5b600a54610deb9033906001600160a01b031685610dda611032565b6001600160a01b031692919061299c565b5f610df7600e33612a09565b9150610e12905033610e098684613e70565b600e9190612a2f565b50604051849033907f55896b30a78fc55b78937f8014dde3f0035e9d37a4f6ac36841fb8b62f7e2b13905f90a3505050610e4c6001600555565b50565b6009546001600160a01b03163314610e7a57604051631a27eac360e11b815260040160405180910390fd5b8015610ec6578060145f828254610e919190613e70565b9091555050601454604051829084907f8b8789cf9157fe7b016901e4ed3a5d0971caa8b7c031da0b25638ccf65841b2a905f90a45b5050565b6006546001600160a01b03163314610ef557604051631a27eac360e11b815260040160405180910390fd5b805f03610f0457610c7d611032565b601454811115610f2757604051632ca2f52b60e11b815260040160405180910390fd5b8060145f828254610f389190613e83565b9091555050600a5460405163741fca4b60e01b8152600481018390526001600160a01b039091169063741fca4b906024015f604051808303815f87803b158015610f80575f5ffd5b505af1158015610f92573d5f5f3e3d5ffd5b5050505050565b5f33610fa6858285612a44565b610fb1858585612a8f565b60019150505b9392505050565b5f5f610fca600e612aec565b9050805f03610fdb57505f92915050565b5f610fe68285612af6565b90505f805b828161ffff161015611029575f611007600e61ffff8416612b05565b915061101590508184613e70565b9250508061102290613e96565b9050610feb565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6006546001600160a01b0316331461108157604051631a27eac360e11b815260040160405180910390fd5b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f59190613d79565b611112576040516312aecd8160e01b815260040160405180910390fd5b600460ff84161115611137576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff8316111561115e576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff82161115611185576040516317dbc4cb60e21b815260040160405180910390fd5b61118d612b13565b805160188054909190829060ff191660018360048111156111b0576111b0613b16565b021790555060208201518154604084015161ffff90811663010000000264ffff0000001991909316610100021664ffffffff00199091161717815560609091015160019091015560ff8316600481111561120c5761120c613b16565b6015805460ff1916600183600481111561122857611228613b16565b02179055506015805461ffff83811663010000000264ffff00000019918616610100029190911664ffffffff00199092169190911717905560085460408051630df1aa5760e31b815290516001600160a01b0390921691636f8d52b8916004808201926020929091908290030181865afa1580156112a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cc9190613e37565b6112d69042613e70565b60175560405130907fb31d0e1c8c885e6966984333ce964f4a58ad72b6c4e89e688ecc4549ad97558e905f90a2505050565b600a546001600160a01b0316331461133357604051631a27eac360e11b815260040160405180910390fd5b61133b612972565b5f6113466011612aec565b9050805f036113555750611575565b5f6113d38260085f9054906101000a90046001600160a01b03166001600160a01b031663bcdb8a186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ce9190613e37565b612af6565b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611426573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144a9190613eb6565b90505f61145660025490565b90505f805b848161ffff16101561156e575f80611474601182612b05565b9092509050611484601183612bcd565b505f611492828b885f612be1565b905061149e3083612c16565b6114a88286613e70565b600a54604051634adfc2e760e01b81529196506001600160a01b031690634adfc2e7906114db9086908590600401613ed1565b5f604051808303815f87803b1580156114f2575f5ffd5b505af1158015611504573d5f5f3e3d5ffd5b505050508661ffff16836001600160a01b0316306001600160a01b03167f215abfcd108b85fbee47f26fda2de66f90f14fa5fcaf0201698ad8ac9323545f8486604051611552929190613e4e565b60405180910390a45050508061156790613e96565b905061145b565b5050505050505b610e4c6001600555565b606061158b600b612c4a565b905090565b5f60405163125ad87760e31b815260040160405180910390fd5b6001600160a01b03165f9081526020819052604090205490565b60606004805461098790613dff565b6009546001600160a01b031633146115fe57604051631a27eac360e11b815260040160405180910390fd5b611608601b612c56565b815f5b8161ffff168161ffff1610156116845761167b85858361ffff1681811061163457611634613d65565b61164a92602060409092020190810191506139a1565b86868461ffff1681811061166057611660613d65565b90506040020160200135601b612a2f9092919063ffffffff16565b5060010161160b565b505f61169760125b61032a90600a613fcd565b6016549091508111156116aa5760168190555b600d83905560405183907f5e1ff954b5e5257e9ee5d4cb07059e8f5e69b1aaaf9911e5d8d90a6894de9c21905f90a25050505050565b5f6117186116ef846001613e70565b6116f7612c5f565b61170290600a613fcd565b60025461170f9190613e70565b86919085612cdb565b949350505050565b5f33610a26818585612a8f565b611735612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611785573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a99190613d79565b6117c6576040516312aecd8160e01b815260040160405180910390fd5b601a5460ff1680611841575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb45906118029030906004016139dc565b602060405180830381865afa15801561181d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118419190613d79565b1561185f576040516304b1e71160e41b815260040160405180910390fd5b805f036118815730604051636b30633560e01b815260040161081f91906139dc565b60085460408051630912ae6d60e01b815290515f926001600160a01b031691630912ae6d9160048083019260209291908290030181865afa1580156118c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ec9190613e37565b905080821015611913578181604051631f29a4af60e31b815260040161081f929190613e4e565b5f61191d336115aa565b90508083111561194057604051632ca2f52b60e11b815260040160405180910390fd5b61194c3033818661299c565b5f611958601133612a09565b915061197390503361196a8684613e70565b60119190612a2f565b50604051849033907f222dc200773fe9b45015bf792e8fee37d651e3590c215806a5042404b6d741d2905f90a3505050610e4c6001600555565b6007546001600160a01b031633146119d857604051631a27eac360e11b815260040160405180910390fd5b5f8190036119f957604051631121aa8d60e01b815260040160405180910390fd5b611a03601e612c56565b5f816001600160401b03811115611a1c57611a1c613fdb565b604051908082528060200260200182016040528015611a45578160200160208202803683370190505b5090505f82815b8161ffff168161ffff161015611b43575f86868361ffff16818110611a7357611a73613d65565b611a8992602060409092020190810191506139a1565b90505f87878461ffff16818110611aa257611aa2613d65565b9050604002016020016020810190611aba9190614000565b905081868461ffff1681518110611ad357611ad3613d65565b6001600160a01b03909216602092830291909101909101525f611b01601e8463ffffffff80861690612a2f16565b905080611b2357826040516346bdabe160e01b815260040161081f91906139dc565b611b3363ffffffff831687613e70565b9550505050806001019050611a4c565b50611b4d83612d1d565b600a60149054906101000a900460ff16600a611b699190613fcd565b8214611b8857604051639006dd2760e01b815260040160405180910390fd5b60405133907f2d47a742b8d7df7c1fc5a9a631b206b364e6cb2722490759f63bb3ab14b132e0905f90a25050505050565b5f610a138260016128ed565b601a54606090819060ff1615611d485760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060085460408051631c56369f60e21b815290519394506001600160a01b0390911692637158da7c925060048083019260209291908290030181865afa158015611c5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c809190613d98565b825f81518110611c9257611c92613d65565b6001600160a01b039283166020918202929092018101919091526008546040805163d1717c7d60e01b81529051919093169263d1717c7d9260048083019391928290030181865afa158015611ce9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d0d919061401b565b611d1890600a613fcd565b815f81518110611d2a57611d2a613d65565b602002602001019063ffffffff16908163ffffffff16815250509091565b5f611d53601e612aec565b90508061ffff166001600160401b03811115611d7157611d71613fdb565b604051908082528060200260200182016040528015611d9a578160200160208202803683370190505b5092508061ffff166001600160401b03811115611db957611db9613fdb565b604051908082528060200260200182016040528015611de2578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611e79575f80611e08601e61ffff8516612b05565b9150915081868461ffff1681518110611e2357611e23613d65565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff1681518110611e5a57611e5a613d65565b63ffffffff909216602092830291909101909101525050600101611de7565b50509091565b5f611e88612972565b60085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590611eb89030906004016139dc565b602060405180830381865afa158015611ed3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef79190613d79565b611f145760405163125ad87760e31b815260040160405180910390fd5b5f611f1e836124fa565b905080851115611f4757828582604051632e52afbb60e21b815260040161081f93929190614036565b845f03611f695730604051636b30633560e01b815260040161081f91906139dc565b336001600160a01b03841614611f8457611f84833387612a44565b5f611f8e86610a08565b905080600d5f828254611fa19190613e83565b90915550611fb190508487612c16565b836001600160a01b0316856001600160a01b0316336001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db848a604051612000929190613e4e565b60405180910390a4600a54604051627b8a6760e11b8152600481018390526001600160a01b0387811660248301529091169062f714ce906044015f604051808303815f87803b158015612051575f5ffd5b505af1158015612063573d5f5f3e3d5ffd5b5092945050505050610fb76001600555565b61207d612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120cd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f19190613d79565b61210e576040516312aecd8160e01b815260040160405180910390fd5b805f0361211d57610c7d611032565b5f612129600e33612a09565b9150508181101561214d57604051632ca2f52b60e11b815260040160405180910390fd5b5f6121588383613e83565b9050805f036121725761216c600e33612bcd565b50612180565b61217e600e3383612a2f565b505b600a546040516351edffb160e01b81526001600160a01b03909116906351edffb1906121b29033908790600401613ed1565b5f604051808303815f87803b1580156121c9575f5ffd5b505af11580156121db573d5f5f3e3d5ffd5b50506040518592503391507f96a9a6886cdf3047a125454218a23d3961fd3a78643123b248a9d106d0ac94fd905f90a35050610e4c6001600555565b61221f612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122939190613d79565b6122b0576040516312aecd8160e01b815260040160405180910390fd5b805f036122d25730604051636b30633560e01b815260040161081f91906139dc565b5f6122de601133612a09565b9150508181101561230257604051632ca2f52b60e11b815260040160405180910390fd5b5f61230d8383613e83565b9050805f0361232757612321601133612bcd565b50612335565b61233360113383612a2f565b505b612340303385612d95565b604051839033907f046d3e17087d323298991516e3fdec36fe1204d6bff7fb6e2b8eca77b80a22ad905f90a35050610e4c6001600555565b5f610a13825f612940565b6008546001600160a01b031633146123ae5760405163ea8e4eb560e01b815260040160405180910390fd5b601a805460ff19166001179055565b5f610a136123ca836115aa565b5f6128ed565b6060805f6123de601b612aec565b90508061ffff166001600160401b038111156123fc576123fc613fdb565b604051908082528060200260200182016040528015612425578160200160208202803683370190505b5092508061ffff166001600160401b0381111561244457612444613fdb565b60405190808252806020026020018201604052801561246d578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611e79575f80612493601b61ffff8516612b05565b9150915081868461ffff16815181106124ae576124ae613d65565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff16815181106124e5576124e5613d65565b60209081029190910101525050600101612472565b5f610a13826115aa565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6008546001600160a01b031633146125595760405163ea8e4eb560e01b815260040160405180910390fd5b612564600b82612dbb565b505f80612572601e84612a09565b915091508161258057505050565b61258b601e84612bcd565b505f306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ed9190613d98565b90505f806125fc601e84612a09565b9150915081156126235761261d836126148684613e70565b601e9190612a2f565b50612631565b61262f601e8486612a2f565b505b505050505050565b5f5f61264483612dcf565b90505f6126518285613e83565b90505f61265d82612e9a565b90506126698184613e70565b95945050505050565b600a546001600160a01b0316331461269d57604051631a27eac360e11b815260040160405180910390fd5b6126a5612972565b5f6126b0600e612aec565b9050805f036126bf5750611575565b5f6127148260085f9054906101000a90046001600160a01b03166001600160a01b031663bcdb8a186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113aa573d5f5f3e3d5ffd5b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612767573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278b9190613eb6565b90505f61279760025490565b90505f805b848161ffff16101561156e575f806127b5600e82612b05565b90925090506127c5600e83612bcd565b505f6127d3828b885f612f93565b90506127df8382612fbf565b6127e98286613e70565b94508661ffff16836001600160a01b0316306001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f68585604051612835929190613e4e565b60405180910390a45050508061284a90613e96565b905061279c565b5f5f61285d6011612aec565b9050805f0361286e57505f92915050565b5f6128798285612af6565b90505f805b828161ffff161015611029575f61289a601161ffff8416612b05565b91506128a890508184613e70565b925050806128b590613e96565b905061287e565b610e4c81612ff3565b5f610fb7836001600160a01b03841661304c565b5f610fb7836001600160a01b038416613093565b5f610fb76128fa600d5490565b612905906001613e70565b61290d612c5f565b61291890600a613fcd565b6002546129259190613e70565b85919085612cdb565b61293b83838360016130aa565b505050565b5f610fb761294c612c5f565b61295790600a613fcd565b6002546129649190613e70565b600d54612925906001613e70565b60026005540361299557604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6040516001600160a01b038481166024830152838116604483015260648201839052612a039186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061317c565b50505050565b5f808080612a20866001600160a01b0387166131df565b909450925050505b9250929050565b5f611718846001600160a01b03851684613217565b5f612a4f8484612504565b90505f19811015612a035781811015612a8157828183604051637dc7a0d960e11b815260040161081f93929190614036565b612a0384848484035f6130aa565b6001600160a01b038316612ab8575f604051634b637e8f60e11b815260040161081f91906139dc565b6001600160a01b038216612ae1575f60405163ec442f0560e01b815260040161081f91906139dc565b61293b838383613233565b5f610a1382613346565b5f828218828410028218610fb7565b5f808080612a208686613350565b604080516080810182525f808252602082018190529181018290526060810191909152426017541115612ba857604080516080810190915260188054829060ff166004811115612b6557612b65613b16565b6004811115612b7657612b76613b16565b8152815461ffff6101008204811660208401526301000000909104166040820152600190910154606090910152919050565b604080516080810190915260158054829060ff166004811115612b6557612b65613b16565b5f610fb7836001600160a01b038416613379565b5f612669612bf0856001613e70565b612bf8612c5f565b612c0390600a613fcd565b612c0d9086613e70565b87919085612cdb565b6001600160a01b038216612c3f575f604051634b637e8f60e11b815260040161081f91906139dc565b610ec6825f83613233565b60605f610fb783613395565b610e4c816133ee565b5f5f612c69611032565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cc8919061401b565b9050612cd5816012614057565b91505090565b5f612d08612ce883613437565b8015612d0357505f8480612cfe57612cfe614070565b868809115b151590565b612d13868686613463565b6126699190613e70565b5f5b8151811015610ec657612d55828281518110612d3d57612d3d613d65565b6020026020010151600b6128d990919063ffffffff16565b612d8d57818181518110612d6b57612d6b613d65565b602002602001015160405163751dff9760e11b815260040161081f91906139dc565b600101612d1f565b61293b83846001600160a01b031663a9059cbb85856040516024016129d1929190613ed1565b5f610fb7836001600160a01b038416613513565b5f5f612dd9612b13565b9050806040015161ffff165f03612df257505f92915050565b60408101515f90612e0a9061ffff1685612710613463565b905061171860095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e839190614084565b829063ffffffff908116906301e133809061346316565b5f5f612ea4612b13565b9050806020015161ffff165f03612ebd57505f92915050565b5f612ed4612ecd6012600a613fcd565b855f6116e0565b90505f5f612ee4845f01516135f6565b9150915081831080612ef4575080155b15612f0457505f95945050505050565b5f612f22612f128386613e83565b602087015161ffff169084613463565b90505f612f328289612710613463565b9050612f8760095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5f573d5f5f3e3d5ffd5b98975050505050505050565b5f612669612f9f612c5f565b612faa90600a613fcd565b612fb49085613e70565b612c0d866001613e70565b6001600160a01b038216612fe8575f60405163ec442f0560e01b815260040161081f91906139dc565b610ec65f8383613233565b5f612ffc825490565b90505f5b8181101561304557826001015f845f01838154811061302157613021613d65565b905f5260205f20015481526020019081526020015f205f9055806001019050613000565b50505f9055565b5f6130578383613093565b61308c57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a13565b505f610a13565b5f9081526001919091016020526040902054151590565b6001600160a01b0384166130d3575f60405163e602df0560e01b815260040161081f91906139dc565b6001600160a01b0383166130fc575f604051634a1406b160e11b815260040161081f91906139dc565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015612a0357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161316e91815260200190565b60405180910390a350505050565b5f5f60205f8451602086015f885af18061319b576040513d5f823e3d81fd5b50505f513d915081156131b25780600114156131bf565b6001600160a01b0384163b155b15612a035783604051635274afe760e01b815260040161081f91906139dc565b5f81815260028301602052604081205481908061320c5761320085856136e0565b92505f9150612a289050565b600192509050612a28565b5f828152600284016020526040812082905561171884846136eb565b6001600160a01b03831661325d578060025f8282546132529190613e70565b909155506132ba9050565b6001600160a01b0383165f908152602081905260409020548181101561329c5783818360405163391434e360e21b815260040161081f93929190614036565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166132d6576002805482900390556132f4565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161333991815260200190565b60405180910390a3505050565b5f610a13826136f6565b5f808061335d85856136ff565b5f81815260029690960160205260409095205494959350505050565b5f8181526002830160205260408120819055610fb7838361370a565b6060815f018054806020026020016040519081016040528092919081815260200182805480156133e257602002820191905f5260205f20905b8154815260200190600101908083116133ce575b50505050509050919050565b5f6133f882613346565b90505f5b8181101561342d57600283015f61341385846136ff565b815260208101919091526040015f908120556001016133fc565b50610ec6826128bc565b5f600282600381111561344c5761344c613b16565b613456919061409f565b60ff166001149050919050565b5f5f5f6134708686613715565b91509150815f036134945783818161348a5761348a614070565b0492505050610fb7565b8184116134ab576134ab6003851502601118613731565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f81815260018301602052604081205480156135ed575f613535600183613e83565b85549091505f9061354890600190613e83565b90508082146135a7575f865f01828154811061356657613566613d65565b905f5260205f200154905080875f01848154811061358657613586613d65565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806135b8576135b86140cc565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a13565b5f915050610a13565b5f8080613603601261168c565b90505f84600481111561361857613618613b16565b03613628578092508291506136da565b600384600481111561363c5761363c613b16565b0361364e5760165492508291506136da565b600184600481111561366257613662613b16565b0361367a5761367081613742565b92508091506136da565b600284600481111561368e5761368e613b16565b036136a65761369c81613742565b92508291506136da565b60048460048111156136ba576136ba613b16565b036136da576016546136d4906136cf83613742565b613868565b92508291505b50915091565b5f610fb78383613877565b5f610fb7838361304c565b5f610a13825490565b5f610fb78383613882565b5f610fb78383613513565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f5f60085f9054906101000a90046001600160a01b03166001600160a01b031663f3cc69936040518163ffffffff1660e01b8152600401602060405180830381865afa158015613794573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b89190613eb6565b61ffff1690505f61384d60095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613812573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138369190614084565b839063ffffffff908116906301e133809061346316565b905061171861385e82612710613e70565b8590612710613463565b5f828218828411028218610fb7565b5f610fb78383613093565b5f825f01828154811061389757613897613d65565b905f5260205f200154905092915050565b5f5f602083850312156138b9575f5ffd5b82356001600160401b038111156138ce575f5ffd5b8301601f810185136138de575f5ffd5b80356001600160401b038111156138f3575f5ffd5b8560208260051b8401011115613907575f5ffd5b6020919091019590945092505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561395c575f5ffd5b5035919050565b6001600160a01b0381168114610e4c575f5ffd5b5f5f60408385031215613988575f5ffd5b823561399381613963565b946020939093013593505050565b5f602082840312156139b1575f5ffd5b8135610fb781613963565b5f5f604083850312156139cd575f5ffd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b5f5f5f60608486031215613a02575f5ffd5b8335613a0d81613963565b92506020840135613a1d81613963565b929592945050506040919091013590565b60ff81168114610e4c575f5ffd5b61ffff81168114610e4c575f5ffd5b5f5f5f60608486031215613a5d575f5ffd5b8335613a6881613a2e565b92506020840135613a7881613a3c565b91506040840135613a8881613a3c565b809150509250925092565b5f8151808452602084019350602083015f5b82811015613acc5781516001600160a01b0316865260209586019590910190600101613aa5565b5093949350505050565b602081525f610fb76020830184613a93565b5f5f60408385031215613af9575f5ffd5b823591506020830135613b0b81613963565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6080810160058610613b4a57634e487b7160e01b5f52602160045260245ffd5b94815261ffff93841660208201529190921660408201526060015290565b5f5f83601f840112613b78575f5ffd5b5081356001600160401b03811115613b8e575f5ffd5b6020830191508360208260061b8501011115612a28575f5ffd5b5f5f5f60408486031215613bba575f5ffd5b83356001600160401b03811115613bcf575f5ffd5b613bdb86828701613b68565b909790965060209590950135949350505050565b5f5f5f60608486031215613c01575f5ffd5b8335925060208401359150604084013560048110613a88575f5ffd5b5f5f60208385031215613c2e575f5ffd5b82356001600160401b03811115613c43575f5ffd5b613c4f85828601613b68565b90969095509350505050565b5f5f5f60608486031215613c6d575f5ffd5b833592506020840135613c7f81613963565b91506040840135613a8881613963565b604081525f613ca16040830185613a93565b82810360208401528084518083526020830191506020860192505f5b81811015613ce157835163ffffffff16835260209384019390920191600101613cbd565b50909695505050505050565b604081525f613cff6040830185613a93565b82810360208401528084518083526020830191506020860192505f5b81811015613ce1578351835260209384019390920191600101613d1b565b5f5f60408385031215613d4a575f5ffd5b8235613d5581613963565b91506020830135613b0b81613963565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613d89575f5ffd5b81518015158114610fb7575f5ffd5b5f60208284031215613da8575f5ffd5b8151610fb781613963565b602080825281018290525f8360408301825b85811015613df5578235613dd881613963565b6001600160a01b0316825260209283019290910190600101613dc5565b5095945050505050565b600181811c90821680613e1357607f821691505b602082108103613e3157634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613e47575f5ffd5b5051919050565b918252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a1357610a13613e5c565b81810381811115610a1357610a13613e5c565b5f61ffff821661ffff8103613ead57613ead613e5c565b60010192915050565b5f60208284031215613ec6575f5ffd5b8151610fb781613a3c565b6001600160a01b03929092168252602082015260400190565b6001815b6001841115613f2557808504811115613f0957613f09613e5c565b6001841615613f1757908102905b60019390931c928002613eee565b935093915050565b5f82613f3b57506001610a13565b81613f4757505f610a13565b8160018114613f5d5760028114613f6757613f83565b6001915050610a13565b60ff841115613f7857613f78613e5c565b50506001821b610a13565b5060208310610133831016604e8410600b8410161715613fa6575081810a610a13565b613fb25f198484613eea565b805f1904821115613fc557613fc5613e5c565b029392505050565b5f610fb760ff841683613f2d565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff81168114610e4c575f5ffd5b5f60208284031215614010575f5ffd5b8135610fb781613fef565b5f6020828403121561402b575f5ffd5b8151610fb781613a2e565b6001600160a01b039390931683526020830191909152604082015260600190565b60ff8281168282160390811115610a1357610a13613e5c565b634e487b7160e01b5f52601260045260245ffd5b5f60208284031215614094575f5ffd5b8151610fb781613fef565b5f60ff8316806140bd57634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220be06ab2c4f83f1e58ef7680247e65adbf99a93127dd55a14182317ccf7c5813164736f6c634300081c0033a2646970667358221220368ba66135d6961b9add195e23ceea245968aadd191dd0a3358bcae845350a7864736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/interfaces/IOrionConfig.sol/IOrionConfig.json b/artifacts/contracts/interfaces/IOrionConfig.sol/IOrionConfig.json index 16ced47a..034d6fb3 100644 --- a/artifacts/contracts/interfaces/IOrionConfig.sol/IOrionConfig.json +++ b/artifacts/contracts/interfaces/IOrionConfig.sol/IOrionConfig.json @@ -326,6 +326,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "maxFulfillBatchSize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "minDepositAmount", @@ -482,6 +495,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "size", + "type": "uint256" + } + ], + "name": "setMaxFulfillBatchSize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/artifacts/contracts/interfaces/IOrionTransparentVault.sol/IOrionTransparentVault.json b/artifacts/contracts/interfaces/IOrionTransparentVault.sol/IOrionTransparentVault.json index 9f3e98ce..9cfbb986 100644 --- a/artifacts/contracts/interfaces/IOrionTransparentVault.sol/IOrionTransparentVault.json +++ b/artifacts/contracts/interfaces/IOrionTransparentVault.sol/IOrionTransparentVault.json @@ -834,7 +834,13 @@ "type": "function" }, { - "inputs": [], + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillBatchSize", + "type": "uint256" + } + ], "name": "pendingDeposit", "outputs": [ { @@ -847,7 +853,13 @@ "type": "function" }, { - "inputs": [], + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillBatchSize", + "type": "uint256" + } + ], "name": "pendingRedeem", "outputs": [ { diff --git a/artifacts/contracts/interfaces/IOrionVault.sol/IOrionVault.json b/artifacts/contracts/interfaces/IOrionVault.sol/IOrionVault.json index 891b3e46..760938a8 100644 --- a/artifacts/contracts/interfaces/IOrionVault.sol/IOrionVault.json +++ b/artifacts/contracts/interfaces/IOrionVault.sol/IOrionVault.json @@ -798,7 +798,13 @@ "type": "function" }, { - "inputs": [], + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillBatchSize", + "type": "uint256" + } + ], "name": "pendingDeposit", "outputs": [ { @@ -811,7 +817,13 @@ "type": "function" }, { - "inputs": [], + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillBatchSize", + "type": "uint256" + } + ], "name": "pendingRedeem", "outputs": [ { diff --git a/artifacts/contracts/libraries/EventsLib.sol/EventsLib.json b/artifacts/contracts/libraries/EventsLib.sol/EventsLib.json index e27e2d55..902efa82 100644 --- a/artifacts/contracts/libraries/EventsLib.sol/EventsLib.json +++ b/artifacts/contracts/libraries/EventsLib.sol/EventsLib.json @@ -74,6 +74,19 @@ "name": "InternalStateProcessed", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "maxFulfillBatchSize", + "type": "uint256" + } + ], + "name": "MaxFulfillBatchSizeUpdated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -323,8 +336,8 @@ "type": "event" } ], - "bytecode": "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212207a8a2ee69932aafdeb08db93ab50287087b7b67e4ed585d9b44fbcf118deaf0864736f6c634300081c0033", - "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212207a8a2ee69932aafdeb08db93ab50287087b7b67e4ed585d9b44fbcf118deaf0864736f6c634300081c0033", + "bytecode": "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212205f1a0ecf0ca5e586054e4b14ffaf40b756f90c8fff80159a6c464e5799d322ce64736f6c634300081c0033", + "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212205f1a0ecf0ca5e586054e4b14ffaf40b756f90c8fff80159a6c464e5799d322ce64736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/orchestrators/InternalStatesOrchestrator.sol/InternalStatesOrchestrator.json b/artifacts/contracts/orchestrators/InternalStatesOrchestrator.sol/InternalStatesOrchestrator.json index c2629681..b33e8813 100644 --- a/artifacts/contracts/orchestrators/InternalStatesOrchestrator.sol/InternalStatesOrchestrator.json +++ b/artifacts/contracts/orchestrators/InternalStatesOrchestrator.sol/InternalStatesOrchestrator.json @@ -832,8 +832,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561000f575f5ffd5b50604051613d4f380380613d4f83398101604081905261002e916104b3565b826001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006581610434565b5060016002556001600160a01b0382166100925760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100b95760405163d92e233d60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b03841690811782556040805163015df99360e01b81529051919263015df9939282820192602092908290030181865afa15801561010d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013191906104fd565b600680546001600160a01b0319166001600160a01b03928316179055600480546040805163d1717c7d60e01b81529051919093169263d1717c7d92818101926020929091908290030181865afa15801561018d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101b1919061051f565b6101bc90600a610638565b6008556004805460408051631c56369f60e21b815290516001600160a01b0390921692637158da7c9282820192602092908290030181865afa158015610204573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061022891906104fd565b600980546001600160a01b0319166001600160a01b0392831690811790915560048054604051633c2e3e7b60e11b81529182019290925291169063785c7cf690602401602060405180830381865afa158015610286573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102aa919061051f565b6009805460ff92909216600160a01b0260ff60a01b19909216919091179055600480546040805163567ba71360e01b815290516001600160a01b039092169263567ba7139282820192602092908290030181865afa15801561030e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610332919061051f565b61033d90600a610638565b6007556019805462ff0000191662010000179055600380546001600160a01b0380841661010002610100600160a81b0319909216919091179091556004805460408051631d06d6c760e11b815290519190931692633a0dad8e92818101926020929091908290030181865afa1580156103b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103dc91906104fd565b600580546001600160a01b0319166001600160a01b0392909216919091179055601780546201518063ffffffff19909116811790915561041c9042610646565b60185550506019805463ff0000001916905550610659565b600180546001600160a01b031916905561044d81610450565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461044d575f5ffd5b5f5f5f606084860312156104c5575f5ffd5b83516104d08161049f565b60208501519093506104e18161049f565b60408501519092506104f28161049f565b809150509250925092565b5f6020828403121561050d575f5ffd5b81516105188161049f565b9392505050565b5f6020828403121561052f575f5ffd5b815160ff81168114610518575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561058e578085048111156105725761057261053f565b600184161561058057908102905b60019390931c928002610557565b935093915050565b5f826105a457506001610632565b816105b057505f610632565b81600181146105c657600281146105d0576105ec565b6001915050610632565b60ff8411156105e1576105e161053f565b50506001821b610632565b5060208310610133831016604e8410600b841016171561060f575081810a610632565b61061b5f198484610553565b805f190482111561062e5761062e61053f565b0290505b92915050565b5f61051860ff841683610596565b808201808211156106325761063261053f565b6136e9806106665f395ff3fe608060405234801561000f575f5ffd5b506004361061020d575f3560e01c8063055ad42e146102115780630844697d1461023b57806308af604d146102635780630e60efe714610288578063132b1c921461029f57806314b19c5a146102c757806314b5d07f146102d557806325a760c2146102ea5780632b0088b4146102fe5780632e2dc43e146103075780633a0dad8e146103215780633f4ba83a146103415780634585e33b146103495780634f17a2fa1461035c5780634ff0876a1461037b57806350267f6d1461038b5780635488cd62146103ae57806358fac65b146103c25780635c975abb146103d55780635dc228a0146103eb5780636e04ff0d146104035780636ff04153146104245780637060444514610439578063715018a61461044c5780637158da7c1461045457806379502c551461046757806379ba50971461047a5780637b103999146104825780637bced9e5146104955780637cdabf0a1461049d578063800f9fad146104b05780638456cb59146104b95780638da5cb5b146104c15780638f5c9465146104c95780639f2124cb146104d2578063b8b2af7c146104da578063ba96ff11146104ef578063c18e2a5c14610517578063ca1f32f114610520578063e2638ff114610529578063e2c4aaec14610551578063e30c397814610564578063e6c3efd91461056c578063eeb393c91461057f578063f2fde38b14610592575b5f5ffd5b601954610225906301000000900460ff1681565b6040516102329190612e4a565b60405180910390f35b60095461025090600160b81b900461ffff1681565b60405161ffff9091168152602001610232565b6019546102769062010000900460ff1681565b60405160ff9091168152602001610232565b610291600a5481565b604051908152602001610232565b6102916102ad366004612e78565b6001600160a01b03165f9081526012602052604090205490565b6019546102509061ffff1681565b6102e86102e3366004612e78565b6105a5565b005b60095461027690600160a01b900460ff1681565b61029160085481565b61030f6106ab565b60405161023296959493929190612f06565b600554610334906001600160a01b031681565b6040516102329190612f87565b6102e8610927565b6102e8610357366004612f9b565b61095c565b6103666212750081565b60405163ffffffff9091168152602001610232565b6017546103669063ffffffff1681565b610393610b0d565b6040805161ffff938416815292909116602083015201610232565b60195461027690600160201b900460ff1681565b6103346103d0366004613007565b610b4e565b60035460ff166040519015158152602001610232565b6003546103349061010090046001600160a01b031681565b610416610411366004612f9b565b610b76565b60405161023292919061301e565b61042c610cd0565b604051610232919061305c565b6102e8610447366004613007565b610d33565b6102e8610d9a565b600954610334906001600160a01b031681565b600454610334906001600160a01b031681565b6102e8610dab565b600654610334906001600160a01b031681565b610276600881565b6102e86104ab366004613084565b610df3565b610291600c5481565b6102e8610fd4565b610334611007565b61025061271081565b61042c611015565b60095461025090600160a81b900461ffff1681565b6102916104fd366004612e78565b6001600160a01b03165f908152600d602052604090205490565b610291601b5481565b61029160075481565b610291610537366004612e78565b6001600160a01b03165f9081526011602052604090205490565b6102e861055f366004613007565b611073565b6103346110e3565b6102e861057a3660046130c3565b6110f2565b6102e861058d3660046130ef565b6111e6565b6102e86105a0366004612e78565b6112f8565b6105ad61135e565b6001600160a01b0381166105d45760405163d92e233d60e01b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610619573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063d919061310a565b61065a576040516312aecd8160e01b815260040160405180910390fd5b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f6cc7ebdb6c8c53291c5ae16148cab9b049d23bf5bde5632900b40edff56fcb43905f90a250565b606080808080805f6019546301000000900460ff1660048111156106d1576106d1612e36565b146106ef576040516312aecd8160e01b815260040160405180910390fd5b5f600d60080180548060200260200160405190810160405280929190818152602001828054801561074757602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610729575b505050505090505f5f61075983611390565b915091508161ffff166001600160401b0381111561077957610779613129565b6040519080825280602002602001820160405280156107a2578160200160208202803683370190505b5098508161ffff166001600160401b038111156107c1576107c1613129565b6040519080825280602002602001820160405280156107ea578160200160208202803683370190505b5097508061ffff166001600160401b0381111561080957610809613129565b604051908082528060200260200182016040528015610832578160200160208202803683370190505b5096508061ffff166001600160401b0381111561085157610851613129565b60405190808252806020026020018201604052801561087a578160200160208202803683370190505b5095508161ffff166001600160401b0381111561089957610899613129565b6040519080825280602002602001820160405280156108c2578160200160208202803683370190505b5094508061ffff166001600160401b038111156108e1576108e1613129565b60405190808252806020026020018201604052801561090a578160200160208202803683370190505b50935061091c838a8a888b8b8a611431565b505050909192939495565b6004546001600160a01b031633146109525760405163ea8e4eb560e01b815260040160405180910390fd5b61095a6116d7565b565b610964611007565b6001600160a01b0316336001600160a01b031614158015610995575060035461010090046001600160a01b03163314155b156109b35760405163ea8e4eb560e01b815260040160405180910390fd5b6109bb611723565b6109c361174b565b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610a08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2c919061310a565b8015610a39575060185442115b15610a4b57610a4661176f565b610aff565b60016019546301000000900460ff166004811115610a6b57610a6b612e36565b03610a7857610a46611a1c565b60026019546301000000900460ff166004811115610a9857610a98612e36565b03610aa557610a46612132565b60036019546301000000900460ff166004811115610ac557610ac5612e36565b03610ad257610a4661231b565b60046019546301000000900460ff166004811115610af257610af2612e36565b03610aff57610aff6127ec565b610b096001600255565b5050565b5f5f42600a541115610b30575050600b5461ffff80821692620100009092041690565b505060095461ffff600160a81b8204811692600160b81b9092041690565b601a8181548110610b5d575f80fd5b5f918252602090912001546001600160a01b0316905081565b600480546040805163edcf9c1f60e01b815290515f936060936001600160a01b03169263edcf9c1f92818301926020928290030181865afa158015610bbd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be1919061310a565b8015610bee575060185442115b15610bfc5760019150610cb8565b60016019546301000000900460ff166004811115610c1c57610c1c612e36565b03610c2a5760019150610cb8565b60026019546301000000900460ff166004811115610c4a57610c4a612e36565b03610c585760019150610cb8565b60036019546301000000900460ff166004811115610c7857610c78612e36565b03610c865760019150610cb8565b60046019546301000000900460ff166004811115610ca657610ca6612e36565b03610cb45760019150610cb8565b5f91505b60405180602001604052805f81525090509250929050565b6060600d600801805480602002602001604051908101604052809291908181526020018280548015610d2957602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d0b575b5050505050905090565b6005546001600160a01b03163314610d5e5760405163ea8e4eb560e01b815260040160405180910390fd5b600c54811115610d8157604051632ca2f52b60e11b815260040160405180910390fd5b80600c5f828254610d929190613151565b909155505050565b610da261135e565b61095a5f61297a565b3380610db56110e3565b6001600160a01b031614610de7578060405163118cdaa760e01b8152600401610dde9190612f87565b60405180910390fd5b610df08161297a565b50565b610dfb61135e565b60328261ffff161180610e1357506107d08161ffff16115b15610e31576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610e76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9a919061310a565b610eb7576040516312aecd8160e01b815260040160405180910390fd5b5f5f610ec1610b0d565b600b805461ffff84811663ffffffff19909216919091176201000084831602179091556009805463ffffffff60a81b1916600160a81b8984160261ffff60b81b191617600160b81b928816929092029190911790556004805460408051630df1aa5760e31b815290519496509294506001600160a01b031692636f8d52b89280830192602092918290030181865afa158015610f5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f839190613164565b610f8d904261317b565b600a556040805161ffff8087168252851660208201527f2bb6517fcd555b5390717b7fd212a2d9aa55d0214725c5d6d955103b4e6b2a2c910160405180910390a150505050565b6004546001600160a01b03163314610fff5760405163ea8e4eb560e01b815260040160405180910390fd5b61095a612993565b5f546001600160a01b031690565b6060601a805480602002602001604051908101604052809291908181526020018280548015610d2957602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311610d0b575050505050905090565b6005546001600160a01b0316331461109e5760405163ea8e4eb560e01b815260040160405180910390fd5b5f8113156110c25780601b5f8282546110b7919061317b565b90915550610df09050565b5f811215610df0576110d38161318e565b601b5f828254610d929190613151565b6001546001600160a01b031690565b6110fa61135e565b8060ff165f0361111d576040516317dbc4cb60e21b815260040160405180910390fd5b600860ff82161115611142576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611187573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ab919061310a565b6111c8576040516312aecd8160e01b815260040160405180910390fd5b6019805460ff909216620100000262ff000019909216919091179055565b6111ee61135e565b8063ffffffff165f03611214576040516317dbc4cb60e21b815260040160405180910390fd5b6212750063ffffffff8216111561123e576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611283573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a7919061310a565b6112c4576040516312aecd8160e01b815260040160405180910390fd5b6017805463ffffffff191663ffffffff83169081179091556112f2906112ea904261317b565b6018546129d0565b60185550565b61130061135e565b600180546001600160a01b0319166001600160a01b038316908117909155611326611007565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b33611367611007565b6001600160a01b03161461095a573360405163118cdaa760e01b8152600401610dde9190612f87565b80515f908190815b8161ffff168161ffff16101561142a575f858261ffff16815181106113bf576113bf6131a8565b6020908102919091018101516001600160a01b0381165f9081526013909252604090912054909150156113f8576113f5856131bc565b94505b6001600160a01b0381165f90815260146020526040902054156114215761141e846131bc565b93505b50600101611398565b5050915091565b86515f80805b8361ffff168161ffff1610156116ca575f8b8261ffff168151811061145e5761145e6131a8565b6020908102919091018101516001600160a01b0381165f90815260138352604080822054601490945290205490925081156115cd57828d8761ffff16815181106114aa576114aa6131a8565b60200260200101906001600160a01b031690816001600160a01b031681525050818c8761ffff16815181106114e1576114e16131a8565b6020908102919091018101919091526001600160a01b0384165f908152600d90915260408120546007546115169185916129e4565b60048054604051633c2e3e7b60e11b815292935061159f9284926001600160a01b039092169163785c7cf69161154e918a9101612f87565b602060405180830381865afa158015611569573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158d91906131dc565b600954600160a01b900460ff16612a95565b8c8861ffff16815181106115b5576115b56131a8565b60209081029190910101526115c9876131bc565b9650505b80156116bc57828a8661ffff16815181106115ea576115ea6131a8565b60200260200101906001600160a01b031690816001600160a01b03168152505080898661ffff1681518110611621576116216131a8565b6020908102919091018101919091526001600160a01b0384165f908152600d90915260408120546007546116569184916129e4565b60048054604051633c2e3e7b60e11b815292935061168e9284926001600160a01b039092169163785c7cf69161154e918a9101612f87565b898761ffff16815181106116a4576116a46131a8565b60209081029190910101526116b8866131bc565b9550505b505050806001019050611437565b5050505050505050505050565b6116df612aff565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516117199190612f87565b60405180910390a1565b600280540361174557604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b60035460ff161561095a5760405163d93c066560e01b815260040160405180910390fd5b601854421115806117e65750600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa1580156117c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e4919061310a565b155b156118045760405163085de62560e01b815260040160405180910390fd5b601a545f906001600160401b0381111561182057611820613129565b604051908082528060200260200182016040528015611849578160200160208202803683370190505b5090505f5b601a5461ffff821610156118cc57601a8161ffff1681548110611873576118736131a8565b905f5260205f20015f9054906101000a90046001600160a01b0316828261ffff16815181106118a4576118a46131a8565b6001600160a01b03909216602092830291909101909101526118c5816131bc565b905061184e565b505f5b60155461ffff82161015611964575f600d6008018261ffff16815481106118f8576118f86131a8565b5f9182526020808320909101546001600160a01b03168252600d81526040808320839055600e825280832083905560108252808320839055601382528083208390556014825280832083905560169091529020805460ff191690555061195d816131bc565b90506118cf565b5061197060155f612e08565b5f5b81518161ffff1610156119df575f828261ffff1681518110611996576119966131a8565b6020908102919091018101516001600160a01b03165f908152600f8252604080822082905560118352808220829055601290925290812055506119d8816131bc565b9050611972565b506119e8612b22565b601a5415610df057601754611a039063ffffffff164261317b565b601855506019805463ff00000019166301000000179055565b6019545f90611a3d9060ff620100008204811691600160201b9004166131f7565b60195460ff91821692505f91611a5a91620100009004168361321a565b90506019600481819054906101000a900460ff16611a7790613234565b91906101000a81548160ff021916908360ff160217905550601a805490508161ffff161180611aab5750601a5461ffff8216145b15611ac95750601a546019805464ffff000000191663020000001790555b5f5f611ad3610b0d565b9092509050835b8361ffff168161ffff16101561212b575f601a8261ffff1681548110611b0257611b026131a8565b905f5260205f20015f9054906101000a90046001600160a01b031690505f5f826001600160a01b031663d3d034586040518163ffffffff1660e01b81526004015f60405180830381865afa158015611b5c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b83919081019061330e565b90925090505f805b83518161ffff161015611e11575f848261ffff1681518110611baf57611baf6131a8565b602002602001015190505f848361ffff1681518110611bd057611bd06131a8565b6020026020010151905080600d6001015f846001600160a01b03166001600160a01b031681526020019081526020015f205f828254611c0f919061317b565b90915550506001600160a01b0382165f9081526016602052604090205460ff16611d87576009546001600160a01b0390811690831603611cff57600954611ce290611c6590600160a01b900460ff16600a6134af565b600954600480546040805163567ba71360e01b81529051600160a01b90940460ff16936001600160a01b039092169263567ba7139282820192602092908290030181865afa158015611cb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cdd91906131dc565b612a95565b6001600160a01b0383165f908152600d6020526040902055611d87565b6006546040516341976e0960e01b81526001600160a01b03909116906341976e0990611d2f908590600401612f87565b602060405180830381865afa158015611d4a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6e9190613164565b6001600160a01b0383165f908152600d60205260409020555b6001600160a01b0382165f908152600d6020526040812054600754909190611de590611db690849086906129e4565b60048054604051633c2e3e7b60e11b81526001600160a01b039091169163785c7cf69161154e918a9101612f87565b9050611df1818761317b565b9550611dfc84612d07565b5050505080611e0a906131bc565b9050611b8b565b505f611e2461ffff8916836127106129e4565b601754909150611e4590829063ffffffff908116906301e13380906129e416565b905080600c5f828254611e58919061317b565b90915550611e6890508183613151565b60405163728d42fb60e11b8152600481018290529092505f906001600160a01b0387169063e51a85f690602401602060405180830381865afa158015611eb0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ed49190613164565b9050611ee08184613151565b6001600160a01b0387165f908152601160205260408120829055909350611f0e61ffff8a16836127106129e4565b905080600c5f828254611f21919061317b565b90915550611f3190508183613151565b601954604051630df571f760e01b815261ffff9091166004820152602481018290529092506001600160a01b03881690630df571f7906044015f604051808303815f87803b158015611f81575f5ffd5b505af1158015611f93573d5f5f3e3d5ffd5b505050505f876001600160a01b031663a68a5267896001600160a01b0316630a605c6d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fe3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120079190613164565b875f6040518463ffffffff1660e01b8152600401612027939291906134bd565b602060405180830381865afa158015612042573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120669190613164565b90506120728186613151565b94505f886001600160a01b031663f64c6f326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120d59190613164565b6001600160a01b038a165f90815260126020526040902087905590506120fb818761317b565b6001600160a01b039099165f908152600f6020526040902098909855505060019096019550611ada945050505050565b5050505050565b6019805463ff00000019166303000000179055601a545f805b8261ffff168161ffff1610156121af575f601a8261ffff1681548110612173576121736131a8565b5f9182526020808320909101546001600160a01b0316808352600f9091526040909120549091506121a4908461317b565b92505060010161214b565b505f61223260055f9054906101000a90046001600160a01b03166001600160a01b031663dab26e3b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612204573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122289190613164565b83906127106129e4565b905080601b54111561224357505050565b5f601b54826122529190613151565b90505f805b8561ffff168161ffff1610156122fd575f601a8261ffff168154811061227f5761227f6131a8565b5f9182526020808320909101546001600160a01b0316808352600f9091526040822054909250906122b186838a6129e4565b6001600160a01b0384165f908152600f60205260408120805492935083929091906122dd908490613151565b909155506122ed9050818661317b565b9450505050806001019050612257565b5080601b5f82825461230f919061317b565b90915550505050505050565b6019545f9061233c9060ff620100008204811691600160201b9004166131f7565b60195460ff91821692505f9161235991620100009004168361321a565b90506019600481819054906101000a900460ff1661237690613234565b91906101000a81548160ff021916908360ff160217905550601a805490508161ffff1611806123aa5750601a5461ffff8216145b156123c85750601a546019805464ffff000000191663040000001790555b815b8161ffff168161ffff1610156127e7575f601a8261ffff16815481106123f2576123f26131a8565b905f5260205f20015f9054906101000a90046001600160a01b031690505f5f826001600160a01b031663b6eba6536040518163ffffffff1660e01b81526004015f60405180830381865afa15801561244c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261247391908101906134e9565b6001600160a01b0385165f908152600f6020526040812054835193955091935090916001600160401b038111156124ac576124ac613129565b6040519080825280602002602001820160405280156124f057816020015b604080518082019091525f80825260208201528152602001906001900390816124ca5790505b5090505f5b84518161ffff16101561277b575f858261ffff1681518110612519576125196131a8565b602002602001015190505f858361ffff168151811061253a5761253a6131a8565b6020908102919091018101516001600160a01b0384165f908152601690925260409091205490915060ff16612640576009546001600160a01b03908116908316036125b85760095461259b90611c6590600160a01b900460ff16600a6134af565b6001600160a01b0383165f908152600d6020526040902055612640565b6006546040516341976e0960e01b81526001600160a01b03909116906341976e09906125e8908590600401612f87565b602060405180830381865afa158015612603573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126279190613164565b6001600160a01b0383165f908152600d60205260409020555b6001600160a01b0382165f908152600d60205260408120546007546008549192916126e191612688918590612681908c9063ffffffff808b1691906129e416565b91906129e4565b60095460048054604051633c2e3e7b60e11b8152600160a01b90930460ff16926001600160a01b039091169163785c7cf6916126c6918b9101612f87565b602060405180830381865afa158015611cb9573d5f5f3e3d5ffd5b90506040518060400160405280856001600160a01b0316815260200182815250868661ffff1681518110612717576127176131a8565b602002602001018190525080600d6003015f866001600160a01b03166001600160a01b031681526020019081526020015f205f828254612757919061317b565b90915550612766905084612d07565b5050505080612774906131bc565b90506124f5565b50604051634c2dd25760e11b81526001600160a01b0386169063985ba4ae906127aa90849086906004016135a2565b5f604051808303815f87803b1580156127c1575f5ffd5b505af11580156127d3573d5f5f3e3d5ffd5b5050505050505050508060010190506123ca565b505050565b5f600d60080180548060200260200160405190810160405280929190818152602001828054801561284457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612826575b505083519394505f925050505b8161ffff168161ffff16101561290f575f838261ffff1681518110612878576128786131a8565b6020908102919091018101516001600160a01b0381165f908152600e83526040808220546010909452902054909250808211156128d6576128b98183613151565b6001600160a01b0384165f90815260136020526040902055612901565b81811115612901576128e88282613151565b6001600160a01b0384165f908152601460205260409020555b505050806001019050612851565b506019805463ff00000019811682555f9061292d9061ffff166131bc565b82546101009290920a61ffff8181021990931691831602179091556019546040519116907f0bc12479581640d161e016cef21aa834cb6d6326bbc0d8445e58d56403adf2dc905f90a25050565b600180546001600160a01b0319169055610df081612d8c565b61299b61174b565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861170c3390565b5f8282188284100282185b90505b92915050565b5f5f5f6129f18686612ddb565b91509150815f03612a1557838181612a0b57612a0b613603565b0492505050612a8e565b818411612a2c57612a2c6003851502601118612df7565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b5f8260ff168260ff161115612aca57612aae8383613617565b612ab990600a6134af565b612ac39085613630565b9050612a8e565b8260ff168260ff161015612af757612ae28284613617565b612aed90600a6134af565b612ac39085613647565b509192915050565b60035460ff1661095a57604051638dfc202b60e01b815260040160405180910390fd5b60048054604051631da09e4360e31b81525f926001600160a01b039092169163ed04f21891612b5391859101613666565b5f60405180830381865afa158015612b6d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b94919081019061367a565b9050612ba1601a5f612e08565b5f5b81518161ffff161015610b09575f828261ffff1681518110612bc757612bc76131a8565b60200260200101519050806001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c319190613164565b816001600160a01b031663f64c6f326040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c919190613164565b612c9b919061317b565b5f03612ca75750612cf7565b601a80546001810182555f919091527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b0319166001600160a01b03929092169190911790555b612d00816131bc565b9050612ba3565b6001600160a01b0381165f9081526016602052604090205460ff16610df0576015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0384166001600160a01b031990911681179091555f908152601660205260409020805460ff1916909117905550565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5080545f8255905f5260205f2090810190610df091905b80821115612e32575f8155600101612e1f565b5090565b634e487b7160e01b5f52602160045260245ffd5b6020810160058310612e5e57612e5e612e36565b91905290565b6001600160a01b0381168114610df0575f5ffd5b5f60208284031215612e88575f5ffd5b8135612a8e81612e64565b5f8151808452602084019350602083015f5b82811015612ecc5781516001600160a01b0316865260209586019590910190600101612ea5565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612ecc578151865260209586019590910190600101612ee8565b60c081525f612f1860c0830189612e93565b8281036020840152612f2a8189612ed6565b90508281036040840152612f3e8188612e93565b90508281036060840152612f528187612ed6565b90508281036080840152612f668186612ed6565b905082810360a0840152612f7a8185612ed6565b9998505050505050505050565b6001600160a01b0391909116815260200190565b5f5f60208385031215612fac575f5ffd5b82356001600160401b03811115612fc1575f5ffd5b8301601f81018513612fd1575f5ffd5b80356001600160401b03811115612fe6575f5ffd5b856020828401011115612ff7575f5ffd5b6020919091019590945092505050565b5f60208284031215613017575f5ffd5b5035919050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b602081525f6129db6020830184612e93565b803561ffff8116811461307f575f5ffd5b919050565b5f5f60408385031215613095575f5ffd5b61309e8361306e565b91506130ac6020840161306e565b90509250929050565b60ff81168114610df0575f5ffd5b5f602082840312156130d3575f5ffd5b8135612a8e816130b5565b63ffffffff81168114610df0575f5ffd5b5f602082840312156130ff575f5ffd5b8135612a8e816130de565b5f6020828403121561311a575f5ffd5b81518015158114612a8e575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156129de576129de61313d565b5f60208284031215613174575f5ffd5b5051919050565b808201808211156129de576129de61313d565b5f600160ff1b82016131a2576131a261313d565b505f0390565b634e487b7160e01b5f52603260045260245ffd5b5f61ffff821661ffff81036131d3576131d361313d565b60010192915050565b5f602082840312156131ec575f5ffd5b8151612a8e816130b5565b60ff81811683821602908116908181146132135761321361313d565b5092915050565b61ffff81811683821601908111156129de576129de61313d565b5f60ff821660ff81036131d3576131d361313d565b604051601f8201601f191681016001600160401b038111828210171561327157613271613129565b604052919050565b5f6001600160401b0382111561329157613291613129565b5060051b60200190565b5f82601f8301126132aa575f5ffd5b81516132bd6132b882613279565b613249565b8082825260208201915060208360051b8601019250858311156132de575f5ffd5b602085015b838110156133045780516132f681612e64565b8352602092830192016132e3565b5095945050505050565b5f5f6040838503121561331f575f5ffd5b82516001600160401b03811115613334575f5ffd5b6133408582860161329b565b602085015190935090506001600160401b0381111561335d575f5ffd5b8301601f8101851361336d575f5ffd5b805161337b6132b882613279565b8082825260208201915060208360051b85010192508783111561339c575f5ffd5b6020840193505b828410156133be5783518252602093840193909101906133a3565b809450505050509250929050565b6001815b6001841115613407578085048111156133eb576133eb61313d565b60018416156133f957908102905b60019390931c9280026133d0565b935093915050565b5f8261341d575060016129de565b8161342957505f6129de565b816001811461343f576002811461344957613465565b60019150506129de565b60ff84111561345a5761345a61313d565b50506001821b6129de565b5060208310610133831016604e8410600b8410161715613488575081810a6129de565b6134945f1984846133cc565b805f19048211156134a7576134a761313d565b029392505050565b5f6129db60ff84168361340f565b8381526020810183905260608101600483106134db576134db612e36565b826040830152949350505050565b5f5f604083850312156134fa575f5ffd5b82516001600160401b0381111561350f575f5ffd5b61351b8582860161329b565b602085015190935090506001600160401b03811115613538575f5ffd5b8301601f81018513613548575f5ffd5b80516135566132b882613279565b8082825260208201915060208360051b850101925087831115613577575f5ffd5b6020840193505b828410156133be578351613591816130de565b82526020938401939091019061357e565b604080825283519082018190525f9060208501906060840190835b818110156135f057835180516001600160a01b0316845260209081015181850152909301926040909201916001016135bd565b5050602093909301939093525092915050565b634e487b7160e01b5f52601260045260245ffd5b60ff82811682821603908111156129de576129de61313d565b80820281158282048414176129de576129de61313d565b5f8261366157634e487b7160e01b5f52601260045260245ffd5b500490565b6020810160028310612e5e57612e5e612e36565b5f6020828403121561368a575f5ffd5b81516001600160401b0381111561369f575f5ffd5b6136ab8482850161329b565b94935050505056fea26469706673582212204fbbb148f92b83ff5f91bd41579e2a87d8888a291d5a8437a2e3920ad766c99964736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061020d575f3560e01c8063055ad42e146102115780630844697d1461023b57806308af604d146102635780630e60efe714610288578063132b1c921461029f57806314b19c5a146102c757806314b5d07f146102d557806325a760c2146102ea5780632b0088b4146102fe5780632e2dc43e146103075780633a0dad8e146103215780633f4ba83a146103415780634585e33b146103495780634f17a2fa1461035c5780634ff0876a1461037b57806350267f6d1461038b5780635488cd62146103ae57806358fac65b146103c25780635c975abb146103d55780635dc228a0146103eb5780636e04ff0d146104035780636ff04153146104245780637060444514610439578063715018a61461044c5780637158da7c1461045457806379502c551461046757806379ba50971461047a5780637b103999146104825780637bced9e5146104955780637cdabf0a1461049d578063800f9fad146104b05780638456cb59146104b95780638da5cb5b146104c15780638f5c9465146104c95780639f2124cb146104d2578063b8b2af7c146104da578063ba96ff11146104ef578063c18e2a5c14610517578063ca1f32f114610520578063e2638ff114610529578063e2c4aaec14610551578063e30c397814610564578063e6c3efd91461056c578063eeb393c91461057f578063f2fde38b14610592575b5f5ffd5b601954610225906301000000900460ff1681565b6040516102329190612e4a565b60405180910390f35b60095461025090600160b81b900461ffff1681565b60405161ffff9091168152602001610232565b6019546102769062010000900460ff1681565b60405160ff9091168152602001610232565b610291600a5481565b604051908152602001610232565b6102916102ad366004612e78565b6001600160a01b03165f9081526012602052604090205490565b6019546102509061ffff1681565b6102e86102e3366004612e78565b6105a5565b005b60095461027690600160a01b900460ff1681565b61029160085481565b61030f6106ab565b60405161023296959493929190612f06565b600554610334906001600160a01b031681565b6040516102329190612f87565b6102e8610927565b6102e8610357366004612f9b565b61095c565b6103666212750081565b60405163ffffffff9091168152602001610232565b6017546103669063ffffffff1681565b610393610b0d565b6040805161ffff938416815292909116602083015201610232565b60195461027690600160201b900460ff1681565b6103346103d0366004613007565b610b4e565b60035460ff166040519015158152602001610232565b6003546103349061010090046001600160a01b031681565b610416610411366004612f9b565b610b76565b60405161023292919061301e565b61042c610cd0565b604051610232919061305c565b6102e8610447366004613007565b610d33565b6102e8610d9a565b600954610334906001600160a01b031681565b600454610334906001600160a01b031681565b6102e8610dab565b600654610334906001600160a01b031681565b610276600881565b6102e86104ab366004613084565b610df3565b610291600c5481565b6102e8610fd4565b610334611007565b61025061271081565b61042c611015565b60095461025090600160a81b900461ffff1681565b6102916104fd366004612e78565b6001600160a01b03165f908152600d602052604090205490565b610291601b5481565b61029160075481565b610291610537366004612e78565b6001600160a01b03165f9081526011602052604090205490565b6102e861055f366004613007565b611073565b6103346110e3565b6102e861057a3660046130c3565b6110f2565b6102e861058d3660046130ef565b6111e6565b6102e86105a0366004612e78565b6112f8565b6105ad61135e565b6001600160a01b0381166105d45760405163d92e233d60e01b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610619573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063d919061310a565b61065a576040516312aecd8160e01b815260040160405180910390fd5b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f6cc7ebdb6c8c53291c5ae16148cab9b049d23bf5bde5632900b40edff56fcb43905f90a250565b606080808080805f6019546301000000900460ff1660048111156106d1576106d1612e36565b146106ef576040516312aecd8160e01b815260040160405180910390fd5b5f600d60080180548060200260200160405190810160405280929190818152602001828054801561074757602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610729575b505050505090505f5f61075983611390565b915091508161ffff166001600160401b0381111561077957610779613129565b6040519080825280602002602001820160405280156107a2578160200160208202803683370190505b5098508161ffff166001600160401b038111156107c1576107c1613129565b6040519080825280602002602001820160405280156107ea578160200160208202803683370190505b5097508061ffff166001600160401b0381111561080957610809613129565b604051908082528060200260200182016040528015610832578160200160208202803683370190505b5096508061ffff166001600160401b0381111561085157610851613129565b60405190808252806020026020018201604052801561087a578160200160208202803683370190505b5095508161ffff166001600160401b0381111561089957610899613129565b6040519080825280602002602001820160405280156108c2578160200160208202803683370190505b5094508061ffff166001600160401b038111156108e1576108e1613129565b60405190808252806020026020018201604052801561090a578160200160208202803683370190505b50935061091c838a8a888b8b8a611431565b505050909192939495565b6004546001600160a01b031633146109525760405163ea8e4eb560e01b815260040160405180910390fd5b61095a6116d7565b565b610964611007565b6001600160a01b0316336001600160a01b031614158015610995575060035461010090046001600160a01b03163314155b156109b35760405163ea8e4eb560e01b815260040160405180910390fd5b6109bb611723565b6109c361174b565b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610a08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2c919061310a565b8015610a39575060185442115b15610a4b57610a4661176f565b610aff565b60016019546301000000900460ff166004811115610a6b57610a6b612e36565b03610a7857610a46611a1c565b60026019546301000000900460ff166004811115610a9857610a98612e36565b03610aa557610a46612132565b60036019546301000000900460ff166004811115610ac557610ac5612e36565b03610ad257610a4661231b565b60046019546301000000900460ff166004811115610af257610af2612e36565b03610aff57610aff6127ec565b610b096001600255565b5050565b5f5f42600a541115610b30575050600b5461ffff80821692620100009092041690565b505060095461ffff600160a81b8204811692600160b81b9092041690565b601a8181548110610b5d575f80fd5b5f918252602090912001546001600160a01b0316905081565b600480546040805163edcf9c1f60e01b815290515f936060936001600160a01b03169263edcf9c1f92818301926020928290030181865afa158015610bbd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be1919061310a565b8015610bee575060185442115b15610bfc5760019150610cb8565b60016019546301000000900460ff166004811115610c1c57610c1c612e36565b03610c2a5760019150610cb8565b60026019546301000000900460ff166004811115610c4a57610c4a612e36565b03610c585760019150610cb8565b60036019546301000000900460ff166004811115610c7857610c78612e36565b03610c865760019150610cb8565b60046019546301000000900460ff166004811115610ca657610ca6612e36565b03610cb45760019150610cb8565b5f91505b60405180602001604052805f81525090509250929050565b6060600d600801805480602002602001604051908101604052809291908181526020018280548015610d2957602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d0b575b5050505050905090565b6005546001600160a01b03163314610d5e5760405163ea8e4eb560e01b815260040160405180910390fd5b600c54811115610d8157604051632ca2f52b60e11b815260040160405180910390fd5b80600c5f828254610d929190613151565b909155505050565b610da261135e565b61095a5f61297a565b3380610db56110e3565b6001600160a01b031614610de7578060405163118cdaa760e01b8152600401610dde9190612f87565b60405180910390fd5b610df08161297a565b50565b610dfb61135e565b60328261ffff161180610e1357506107d08161ffff16115b15610e31576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610e76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9a919061310a565b610eb7576040516312aecd8160e01b815260040160405180910390fd5b5f5f610ec1610b0d565b600b805461ffff84811663ffffffff19909216919091176201000084831602179091556009805463ffffffff60a81b1916600160a81b8984160261ffff60b81b191617600160b81b928816929092029190911790556004805460408051630df1aa5760e31b815290519496509294506001600160a01b031692636f8d52b89280830192602092918290030181865afa158015610f5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f839190613164565b610f8d904261317b565b600a556040805161ffff8087168252851660208201527f2bb6517fcd555b5390717b7fd212a2d9aa55d0214725c5d6d955103b4e6b2a2c910160405180910390a150505050565b6004546001600160a01b03163314610fff5760405163ea8e4eb560e01b815260040160405180910390fd5b61095a612993565b5f546001600160a01b031690565b6060601a805480602002602001604051908101604052809291908181526020018280548015610d2957602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311610d0b575050505050905090565b6005546001600160a01b0316331461109e5760405163ea8e4eb560e01b815260040160405180910390fd5b5f8113156110c25780601b5f8282546110b7919061317b565b90915550610df09050565b5f811215610df0576110d38161318e565b601b5f828254610d929190613151565b6001546001600160a01b031690565b6110fa61135e565b8060ff165f0361111d576040516317dbc4cb60e21b815260040160405180910390fd5b600860ff82161115611142576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611187573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ab919061310a565b6111c8576040516312aecd8160e01b815260040160405180910390fd5b6019805460ff909216620100000262ff000019909216919091179055565b6111ee61135e565b8063ffffffff165f03611214576040516317dbc4cb60e21b815260040160405180910390fd5b6212750063ffffffff8216111561123e576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611283573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a7919061310a565b6112c4576040516312aecd8160e01b815260040160405180910390fd5b6017805463ffffffff191663ffffffff83169081179091556112f2906112ea904261317b565b6018546129d0565b60185550565b61130061135e565b600180546001600160a01b0319166001600160a01b038316908117909155611326611007565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b33611367611007565b6001600160a01b03161461095a573360405163118cdaa760e01b8152600401610dde9190612f87565b80515f908190815b8161ffff168161ffff16101561142a575f858261ffff16815181106113bf576113bf6131a8565b6020908102919091018101516001600160a01b0381165f9081526013909252604090912054909150156113f8576113f5856131bc565b94505b6001600160a01b0381165f90815260146020526040902054156114215761141e846131bc565b93505b50600101611398565b5050915091565b86515f80805b8361ffff168161ffff1610156116ca575f8b8261ffff168151811061145e5761145e6131a8565b6020908102919091018101516001600160a01b0381165f90815260138352604080822054601490945290205490925081156115cd57828d8761ffff16815181106114aa576114aa6131a8565b60200260200101906001600160a01b031690816001600160a01b031681525050818c8761ffff16815181106114e1576114e16131a8565b6020908102919091018101919091526001600160a01b0384165f908152600d90915260408120546007546115169185916129e4565b60048054604051633c2e3e7b60e11b815292935061159f9284926001600160a01b039092169163785c7cf69161154e918a9101612f87565b602060405180830381865afa158015611569573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158d91906131dc565b600954600160a01b900460ff16612a95565b8c8861ffff16815181106115b5576115b56131a8565b60209081029190910101526115c9876131bc565b9650505b80156116bc57828a8661ffff16815181106115ea576115ea6131a8565b60200260200101906001600160a01b031690816001600160a01b03168152505080898661ffff1681518110611621576116216131a8565b6020908102919091018101919091526001600160a01b0384165f908152600d90915260408120546007546116569184916129e4565b60048054604051633c2e3e7b60e11b815292935061168e9284926001600160a01b039092169163785c7cf69161154e918a9101612f87565b898761ffff16815181106116a4576116a46131a8565b60209081029190910101526116b8866131bc565b9550505b505050806001019050611437565b5050505050505050505050565b6116df612aff565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516117199190612f87565b60405180910390a1565b600280540361174557604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b60035460ff161561095a5760405163d93c066560e01b815260040160405180910390fd5b601854421115806117e65750600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa1580156117c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e4919061310a565b155b156118045760405163085de62560e01b815260040160405180910390fd5b601a545f906001600160401b0381111561182057611820613129565b604051908082528060200260200182016040528015611849578160200160208202803683370190505b5090505f5b601a5461ffff821610156118cc57601a8161ffff1681548110611873576118736131a8565b905f5260205f20015f9054906101000a90046001600160a01b0316828261ffff16815181106118a4576118a46131a8565b6001600160a01b03909216602092830291909101909101526118c5816131bc565b905061184e565b505f5b60155461ffff82161015611964575f600d6008018261ffff16815481106118f8576118f86131a8565b5f9182526020808320909101546001600160a01b03168252600d81526040808320839055600e825280832083905560108252808320839055601382528083208390556014825280832083905560169091529020805460ff191690555061195d816131bc565b90506118cf565b5061197060155f612e08565b5f5b81518161ffff1610156119df575f828261ffff1681518110611996576119966131a8565b6020908102919091018101516001600160a01b03165f908152600f8252604080822082905560118352808220829055601290925290812055506119d8816131bc565b9050611972565b506119e8612b22565b601a5415610df057601754611a039063ffffffff164261317b565b601855506019805463ff00000019166301000000179055565b6019545f90611a3d9060ff620100008204811691600160201b9004166131f7565b60195460ff91821692505f91611a5a91620100009004168361321a565b90506019600481819054906101000a900460ff16611a7790613234565b91906101000a81548160ff021916908360ff160217905550601a805490508161ffff161180611aab5750601a5461ffff8216145b15611ac95750601a546019805464ffff000000191663020000001790555b5f5f611ad3610b0d565b9092509050835b8361ffff168161ffff16101561212b575f601a8261ffff1681548110611b0257611b026131a8565b905f5260205f20015f9054906101000a90046001600160a01b031690505f5f826001600160a01b031663d3d034586040518163ffffffff1660e01b81526004015f60405180830381865afa158015611b5c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b83919081019061330e565b90925090505f805b83518161ffff161015611e11575f848261ffff1681518110611baf57611baf6131a8565b602002602001015190505f848361ffff1681518110611bd057611bd06131a8565b6020026020010151905080600d6001015f846001600160a01b03166001600160a01b031681526020019081526020015f205f828254611c0f919061317b565b90915550506001600160a01b0382165f9081526016602052604090205460ff16611d87576009546001600160a01b0390811690831603611cff57600954611ce290611c6590600160a01b900460ff16600a6134af565b600954600480546040805163567ba71360e01b81529051600160a01b90940460ff16936001600160a01b039092169263567ba7139282820192602092908290030181865afa158015611cb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cdd91906131dc565b612a95565b6001600160a01b0383165f908152600d6020526040902055611d87565b6006546040516341976e0960e01b81526001600160a01b03909116906341976e0990611d2f908590600401612f87565b602060405180830381865afa158015611d4a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6e9190613164565b6001600160a01b0383165f908152600d60205260409020555b6001600160a01b0382165f908152600d6020526040812054600754909190611de590611db690849086906129e4565b60048054604051633c2e3e7b60e11b81526001600160a01b039091169163785c7cf69161154e918a9101612f87565b9050611df1818761317b565b9550611dfc84612d07565b5050505080611e0a906131bc565b9050611b8b565b505f611e2461ffff8916836127106129e4565b601754909150611e4590829063ffffffff908116906301e13380906129e416565b905080600c5f828254611e58919061317b565b90915550611e6890508183613151565b60405163728d42fb60e11b8152600481018290529092505f906001600160a01b0387169063e51a85f690602401602060405180830381865afa158015611eb0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ed49190613164565b9050611ee08184613151565b6001600160a01b0387165f908152601160205260408120829055909350611f0e61ffff8a16836127106129e4565b905080600c5f828254611f21919061317b565b90915550611f3190508183613151565b601954604051630df571f760e01b815261ffff9091166004820152602481018290529092506001600160a01b03881690630df571f7906044015f604051808303815f87803b158015611f81575f5ffd5b505af1158015611f93573d5f5f3e3d5ffd5b505050505f876001600160a01b031663a68a5267896001600160a01b0316630a605c6d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fe3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120079190613164565b875f6040518463ffffffff1660e01b8152600401612027939291906134bd565b602060405180830381865afa158015612042573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120669190613164565b90506120728186613151565b94505f886001600160a01b031663f64c6f326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120d59190613164565b6001600160a01b038a165f90815260126020526040902087905590506120fb818761317b565b6001600160a01b039099165f908152600f6020526040902098909855505060019096019550611ada945050505050565b5050505050565b6019805463ff00000019166303000000179055601a545f805b8261ffff168161ffff1610156121af575f601a8261ffff1681548110612173576121736131a8565b5f9182526020808320909101546001600160a01b0316808352600f9091526040909120549091506121a4908461317b565b92505060010161214b565b505f61223260055f9054906101000a90046001600160a01b03166001600160a01b031663dab26e3b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612204573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122289190613164565b83906127106129e4565b905080601b54111561224357505050565b5f601b54826122529190613151565b90505f805b8561ffff168161ffff1610156122fd575f601a8261ffff168154811061227f5761227f6131a8565b5f9182526020808320909101546001600160a01b0316808352600f9091526040822054909250906122b186838a6129e4565b6001600160a01b0384165f908152600f60205260408120805492935083929091906122dd908490613151565b909155506122ed9050818661317b565b9450505050806001019050612257565b5080601b5f82825461230f919061317b565b90915550505050505050565b6019545f9061233c9060ff620100008204811691600160201b9004166131f7565b60195460ff91821692505f9161235991620100009004168361321a565b90506019600481819054906101000a900460ff1661237690613234565b91906101000a81548160ff021916908360ff160217905550601a805490508161ffff1611806123aa5750601a5461ffff8216145b156123c85750601a546019805464ffff000000191663040000001790555b815b8161ffff168161ffff1610156127e7575f601a8261ffff16815481106123f2576123f26131a8565b905f5260205f20015f9054906101000a90046001600160a01b031690505f5f826001600160a01b031663b6eba6536040518163ffffffff1660e01b81526004015f60405180830381865afa15801561244c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261247391908101906134e9565b6001600160a01b0385165f908152600f6020526040812054835193955091935090916001600160401b038111156124ac576124ac613129565b6040519080825280602002602001820160405280156124f057816020015b604080518082019091525f80825260208201528152602001906001900390816124ca5790505b5090505f5b84518161ffff16101561277b575f858261ffff1681518110612519576125196131a8565b602002602001015190505f858361ffff168151811061253a5761253a6131a8565b6020908102919091018101516001600160a01b0384165f908152601690925260409091205490915060ff16612640576009546001600160a01b03908116908316036125b85760095461259b90611c6590600160a01b900460ff16600a6134af565b6001600160a01b0383165f908152600d6020526040902055612640565b6006546040516341976e0960e01b81526001600160a01b03909116906341976e09906125e8908590600401612f87565b602060405180830381865afa158015612603573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126279190613164565b6001600160a01b0383165f908152600d60205260409020555b6001600160a01b0382165f908152600d60205260408120546007546008549192916126e191612688918590612681908c9063ffffffff808b1691906129e416565b91906129e4565b60095460048054604051633c2e3e7b60e11b8152600160a01b90930460ff16926001600160a01b039091169163785c7cf6916126c6918b9101612f87565b602060405180830381865afa158015611cb9573d5f5f3e3d5ffd5b90506040518060400160405280856001600160a01b0316815260200182815250868661ffff1681518110612717576127176131a8565b602002602001018190525080600d6003015f866001600160a01b03166001600160a01b031681526020019081526020015f205f828254612757919061317b565b90915550612766905084612d07565b5050505080612774906131bc565b90506124f5565b50604051634c2dd25760e11b81526001600160a01b0386169063985ba4ae906127aa90849086906004016135a2565b5f604051808303815f87803b1580156127c1575f5ffd5b505af11580156127d3573d5f5f3e3d5ffd5b5050505050505050508060010190506123ca565b505050565b5f600d60080180548060200260200160405190810160405280929190818152602001828054801561284457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612826575b505083519394505f925050505b8161ffff168161ffff16101561290f575f838261ffff1681518110612878576128786131a8565b6020908102919091018101516001600160a01b0381165f908152600e83526040808220546010909452902054909250808211156128d6576128b98183613151565b6001600160a01b0384165f90815260136020526040902055612901565b81811115612901576128e88282613151565b6001600160a01b0384165f908152601460205260409020555b505050806001019050612851565b506019805463ff00000019811682555f9061292d9061ffff166131bc565b82546101009290920a61ffff8181021990931691831602179091556019546040519116907f0bc12479581640d161e016cef21aa834cb6d6326bbc0d8445e58d56403adf2dc905f90a25050565b600180546001600160a01b0319169055610df081612d8c565b61299b61174b565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861170c3390565b5f8282188284100282185b90505b92915050565b5f5f5f6129f18686612ddb565b91509150815f03612a1557838181612a0b57612a0b613603565b0492505050612a8e565b818411612a2c57612a2c6003851502601118612df7565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b5f8260ff168260ff161115612aca57612aae8383613617565b612ab990600a6134af565b612ac39085613630565b9050612a8e565b8260ff168260ff161015612af757612ae28284613617565b612aed90600a6134af565b612ac39085613647565b509192915050565b60035460ff1661095a57604051638dfc202b60e01b815260040160405180910390fd5b60048054604051631da09e4360e31b81525f926001600160a01b039092169163ed04f21891612b5391859101613666565b5f60405180830381865afa158015612b6d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b94919081019061367a565b9050612ba1601a5f612e08565b5f5b81518161ffff161015610b09575f828261ffff1681518110612bc757612bc76131a8565b60200260200101519050806001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c319190613164565b816001600160a01b031663f64c6f326040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c6d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c919190613164565b612c9b919061317b565b5f03612ca75750612cf7565b601a80546001810182555f919091527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b0319166001600160a01b03929092169190911790555b612d00816131bc565b9050612ba3565b6001600160a01b0381165f9081526016602052604090205460ff16610df0576015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0384166001600160a01b031990911681179091555f908152601660205260409020805460ff1916909117905550565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5080545f8255905f5260205f2090810190610df091905b80821115612e32575f8155600101612e1f565b5090565b634e487b7160e01b5f52602160045260245ffd5b6020810160058310612e5e57612e5e612e36565b91905290565b6001600160a01b0381168114610df0575f5ffd5b5f60208284031215612e88575f5ffd5b8135612a8e81612e64565b5f8151808452602084019350602083015f5b82811015612ecc5781516001600160a01b0316865260209586019590910190600101612ea5565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612ecc578151865260209586019590910190600101612ee8565b60c081525f612f1860c0830189612e93565b8281036020840152612f2a8189612ed6565b90508281036040840152612f3e8188612e93565b90508281036060840152612f528187612ed6565b90508281036080840152612f668186612ed6565b905082810360a0840152612f7a8185612ed6565b9998505050505050505050565b6001600160a01b0391909116815260200190565b5f5f60208385031215612fac575f5ffd5b82356001600160401b03811115612fc1575f5ffd5b8301601f81018513612fd1575f5ffd5b80356001600160401b03811115612fe6575f5ffd5b856020828401011115612ff7575f5ffd5b6020919091019590945092505050565b5f60208284031215613017575f5ffd5b5035919050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b602081525f6129db6020830184612e93565b803561ffff8116811461307f575f5ffd5b919050565b5f5f60408385031215613095575f5ffd5b61309e8361306e565b91506130ac6020840161306e565b90509250929050565b60ff81168114610df0575f5ffd5b5f602082840312156130d3575f5ffd5b8135612a8e816130b5565b63ffffffff81168114610df0575f5ffd5b5f602082840312156130ff575f5ffd5b8135612a8e816130de565b5f6020828403121561311a575f5ffd5b81518015158114612a8e575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156129de576129de61313d565b5f60208284031215613174575f5ffd5b5051919050565b808201808211156129de576129de61313d565b5f600160ff1b82016131a2576131a261313d565b505f0390565b634e487b7160e01b5f52603260045260245ffd5b5f61ffff821661ffff81036131d3576131d361313d565b60010192915050565b5f602082840312156131ec575f5ffd5b8151612a8e816130b5565b60ff81811683821602908116908181146132135761321361313d565b5092915050565b61ffff81811683821601908111156129de576129de61313d565b5f60ff821660ff81036131d3576131d361313d565b604051601f8201601f191681016001600160401b038111828210171561327157613271613129565b604052919050565b5f6001600160401b0382111561329157613291613129565b5060051b60200190565b5f82601f8301126132aa575f5ffd5b81516132bd6132b882613279565b613249565b8082825260208201915060208360051b8601019250858311156132de575f5ffd5b602085015b838110156133045780516132f681612e64565b8352602092830192016132e3565b5095945050505050565b5f5f6040838503121561331f575f5ffd5b82516001600160401b03811115613334575f5ffd5b6133408582860161329b565b602085015190935090506001600160401b0381111561335d575f5ffd5b8301601f8101851361336d575f5ffd5b805161337b6132b882613279565b8082825260208201915060208360051b85010192508783111561339c575f5ffd5b6020840193505b828410156133be5783518252602093840193909101906133a3565b809450505050509250929050565b6001815b6001841115613407578085048111156133eb576133eb61313d565b60018416156133f957908102905b60019390931c9280026133d0565b935093915050565b5f8261341d575060016129de565b8161342957505f6129de565b816001811461343f576002811461344957613465565b60019150506129de565b60ff84111561345a5761345a61313d565b50506001821b6129de565b5060208310610133831016604e8410600b8410161715613488575081810a6129de565b6134945f1984846133cc565b805f19048211156134a7576134a761313d565b029392505050565b5f6129db60ff84168361340f565b8381526020810183905260608101600483106134db576134db612e36565b826040830152949350505050565b5f5f604083850312156134fa575f5ffd5b82516001600160401b0381111561350f575f5ffd5b61351b8582860161329b565b602085015190935090506001600160401b03811115613538575f5ffd5b8301601f81018513613548575f5ffd5b80516135566132b882613279565b8082825260208201915060208360051b850101925087831115613577575f5ffd5b6020840193505b828410156133be578351613591816130de565b82526020938401939091019061357e565b604080825283519082018190525f9060208501906060840190835b818110156135f057835180516001600160a01b0316845260209081015181850152909301926040909201916001016135bd565b5050602093909301939093525092915050565b634e487b7160e01b5f52601260045260245ffd5b60ff82811682821603908111156129de576129de61313d565b80820281158282048414176129de576129de61313d565b5f8261366157634e487b7160e01b5f52601260045260245ffd5b500490565b6020810160028310612e5e57612e5e612e36565b5f6020828403121561368a575f5ffd5b81516001600160401b0381111561369f575f5ffd5b6136ab8482850161329b565b94935050505056fea26469706673582212204fbbb148f92b83ff5f91bd41579e2a87d8888a291d5a8437a2e3920ad766c99964736f6c634300081c0033", + "bytecode": "0x608060405234801561000f575f5ffd5b50604051613e4e380380613e4e83398101604081905261002e916104b3565b826001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006581610434565b5060016002556001600160a01b0382166100925760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100b95760405163d92e233d60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b03841690811782556040805163015df99360e01b81529051919263015df9939282820192602092908290030181865afa15801561010d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013191906104fd565b600680546001600160a01b0319166001600160a01b03928316179055600480546040805163d1717c7d60e01b81529051919093169263d1717c7d92818101926020929091908290030181865afa15801561018d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101b1919061051f565b6101bc90600a610638565b6008556004805460408051631c56369f60e21b815290516001600160a01b0390921692637158da7c9282820192602092908290030181865afa158015610204573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061022891906104fd565b600980546001600160a01b0319166001600160a01b0392831690811790915560048054604051633c2e3e7b60e11b81529182019290925291169063785c7cf690602401602060405180830381865afa158015610286573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102aa919061051f565b6009805460ff92909216600160a01b0260ff60a01b19909216919091179055600480546040805163567ba71360e01b815290516001600160a01b039092169263567ba7139282820192602092908290030181865afa15801561030e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610332919061051f565b61033d90600a610638565b6007556019805462ff0000191662010000179055600380546001600160a01b0380841661010002610100600160a81b0319909216919091179091556004805460408051631d06d6c760e11b815290519190931692633a0dad8e92818101926020929091908290030181865afa1580156103b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103dc91906104fd565b600580546001600160a01b0319166001600160a01b0392909216919091179055601780546201518063ffffffff19909116811790915561041c9042610646565b60185550506019805463ff0000001916905550610659565b600180546001600160a01b031916905561044d81610450565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461044d575f5ffd5b5f5f5f606084860312156104c5575f5ffd5b83516104d08161049f565b60208501519093506104e18161049f565b60408501519092506104f28161049f565b809150509250925092565b5f6020828403121561050d575f5ffd5b81516105188161049f565b9392505050565b5f6020828403121561052f575f5ffd5b815160ff81168114610518575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561058e578085048111156105725761057261053f565b600184161561058057908102905b60019390931c928002610557565b935093915050565b5f826105a457506001610632565b816105b057505f610632565b81600181146105c657600281146105d0576105ec565b6001915050610632565b60ff8411156105e1576105e161053f565b50506001821b610632565b5060208310610133831016604e8410600b841016171561060f575081810a610632565b61061b5f198484610553565b805f190482111561062e5761062e61053f565b0290505b92915050565b5f61051860ff841683610596565b808201808211156106325761063261053f565b6137e8806106665f395ff3fe608060405234801561000f575f5ffd5b506004361061020d575f3560e01c8063055ad42e146102115780630844697d1461023b57806308af604d146102635780630e60efe714610288578063132b1c921461029f57806314b19c5a146102c757806314b5d07f146102d557806325a760c2146102ea5780632b0088b4146102fe5780632e2dc43e146103075780633a0dad8e146103215780633f4ba83a146103415780634585e33b146103495780634f17a2fa1461035c5780634ff0876a1461037b57806350267f6d1461038b5780635488cd62146103ae57806358fac65b146103c25780635c975abb146103d55780635dc228a0146103eb5780636e04ff0d146104035780636ff04153146104245780637060444514610439578063715018a61461044c5780637158da7c1461045457806379502c551461046757806379ba50971461047a5780637b103999146104825780637bced9e5146104955780637cdabf0a1461049d578063800f9fad146104b05780638456cb59146104b95780638da5cb5b146104c15780638f5c9465146104c95780639f2124cb146104d2578063b8b2af7c146104da578063ba96ff11146104ef578063c18e2a5c14610517578063ca1f32f114610520578063e2638ff114610529578063e2c4aaec14610551578063e30c397814610564578063e6c3efd91461056c578063eeb393c91461057f578063f2fde38b14610592575b5f5ffd5b601954610225906301000000900460ff1681565b6040516102329190612f49565b60405180910390f35b60095461025090600160b81b900461ffff1681565b60405161ffff9091168152602001610232565b6019546102769062010000900460ff1681565b60405160ff9091168152602001610232565b610291600a5481565b604051908152602001610232565b6102916102ad366004612f77565b6001600160a01b03165f9081526012602052604090205490565b6019546102509061ffff1681565b6102e86102e3366004612f77565b6105a5565b005b60095461027690600160a01b900460ff1681565b61029160085481565b61030f6106ab565b60405161023296959493929190613005565b600554610334906001600160a01b031681565b6040516102329190613086565b6102e8610927565b6102e861035736600461309a565b61095c565b6103666212750081565b60405163ffffffff9091168152602001610232565b6017546103669063ffffffff1681565b610393610b0d565b6040805161ffff938416815292909116602083015201610232565b60195461027690600160201b900460ff1681565b6103346103d0366004613106565b610b4e565b60035460ff166040519015158152602001610232565b6003546103349061010090046001600160a01b031681565b61041661041136600461309a565b610b76565b60405161023292919061311d565b61042c610cd0565b604051610232919061315b565b6102e8610447366004613106565b610d33565b6102e8610d9a565b600954610334906001600160a01b031681565b600454610334906001600160a01b031681565b6102e8610dab565b600654610334906001600160a01b031681565b610276600881565b6102e86104ab366004613183565b610df3565b610291600c5481565b6102e8610fd4565b610334611007565b61025061271081565b61042c611015565b60095461025090600160a81b900461ffff1681565b6102916104fd366004612f77565b6001600160a01b03165f908152600d602052604090205490565b610291601b5481565b61029160075481565b610291610537366004612f77565b6001600160a01b03165f9081526011602052604090205490565b6102e861055f366004613106565b611073565b6103346110e3565b6102e861057a3660046131c2565b6110f2565b6102e861058d3660046131ee565b6111e6565b6102e86105a0366004612f77565b6112f8565b6105ad61135e565b6001600160a01b0381166105d45760405163d92e233d60e01b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610619573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063d9190613209565b61065a576040516312aecd8160e01b815260040160405180910390fd5b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f6cc7ebdb6c8c53291c5ae16148cab9b049d23bf5bde5632900b40edff56fcb43905f90a250565b606080808080805f6019546301000000900460ff1660048111156106d1576106d1612f35565b146106ef576040516312aecd8160e01b815260040160405180910390fd5b5f600d60080180548060200260200160405190810160405280929190818152602001828054801561074757602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610729575b505050505090505f5f61075983611390565b915091508161ffff166001600160401b0381111561077957610779613228565b6040519080825280602002602001820160405280156107a2578160200160208202803683370190505b5098508161ffff166001600160401b038111156107c1576107c1613228565b6040519080825280602002602001820160405280156107ea578160200160208202803683370190505b5097508061ffff166001600160401b0381111561080957610809613228565b604051908082528060200260200182016040528015610832578160200160208202803683370190505b5096508061ffff166001600160401b0381111561085157610851613228565b60405190808252806020026020018201604052801561087a578160200160208202803683370190505b5095508161ffff166001600160401b0381111561089957610899613228565b6040519080825280602002602001820160405280156108c2578160200160208202803683370190505b5094508061ffff166001600160401b038111156108e1576108e1613228565b60405190808252806020026020018201604052801561090a578160200160208202803683370190505b50935061091c838a8a888b8b8a611431565b505050909192939495565b6004546001600160a01b031633146109525760405163ea8e4eb560e01b815260040160405180910390fd5b61095a6116d7565b565b610964611007565b6001600160a01b0316336001600160a01b031614158015610995575060035461010090046001600160a01b03163314155b156109b35760405163ea8e4eb560e01b815260040160405180910390fd5b6109bb611723565b6109c361174b565b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610a08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2c9190613209565b8015610a39575060185442115b15610a4b57610a4661176f565b610aff565b60016019546301000000900460ff166004811115610a6b57610a6b612f35565b03610a7857610a46611a1c565b60026019546301000000900460ff166004811115610a9857610a98612f35565b03610aa557610a466121b3565b60036019546301000000900460ff166004811115610ac557610ac5612f35565b03610ad257610a4661239c565b60046019546301000000900460ff166004811115610af257610af2612f35565b03610aff57610aff61286d565b610b096001600255565b5050565b5f5f42600a541115610b30575050600b5461ffff80821692620100009092041690565b505060095461ffff600160a81b8204811692600160b81b9092041690565b601a8181548110610b5d575f80fd5b5f918252602090912001546001600160a01b0316905081565b600480546040805163edcf9c1f60e01b815290515f936060936001600160a01b03169263edcf9c1f92818301926020928290030181865afa158015610bbd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be19190613209565b8015610bee575060185442115b15610bfc5760019150610cb8565b60016019546301000000900460ff166004811115610c1c57610c1c612f35565b03610c2a5760019150610cb8565b60026019546301000000900460ff166004811115610c4a57610c4a612f35565b03610c585760019150610cb8565b60036019546301000000900460ff166004811115610c7857610c78612f35565b03610c865760019150610cb8565b60046019546301000000900460ff166004811115610ca657610ca6612f35565b03610cb45760019150610cb8565b5f91505b60405180602001604052805f81525090509250929050565b6060600d600801805480602002602001604051908101604052809291908181526020018280548015610d2957602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d0b575b5050505050905090565b6005546001600160a01b03163314610d5e5760405163ea8e4eb560e01b815260040160405180910390fd5b600c54811115610d8157604051632ca2f52b60e11b815260040160405180910390fd5b80600c5f828254610d929190613250565b909155505050565b610da261135e565b61095a5f6129fb565b3380610db56110e3565b6001600160a01b031614610de7578060405163118cdaa760e01b8152600401610dde9190613086565b60405180910390fd5b610df0816129fb565b50565b610dfb61135e565b60328261ffff161180610e1357506107d08161ffff16115b15610e31576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610e76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9a9190613209565b610eb7576040516312aecd8160e01b815260040160405180910390fd5b5f5f610ec1610b0d565b600b805461ffff84811663ffffffff19909216919091176201000084831602179091556009805463ffffffff60a81b1916600160a81b8984160261ffff60b81b191617600160b81b928816929092029190911790556004805460408051630df1aa5760e31b815290519496509294506001600160a01b031692636f8d52b89280830192602092918290030181865afa158015610f5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f839190613263565b610f8d904261327a565b600a556040805161ffff8087168252851660208201527f2bb6517fcd555b5390717b7fd212a2d9aa55d0214725c5d6d955103b4e6b2a2c910160405180910390a150505050565b6004546001600160a01b03163314610fff5760405163ea8e4eb560e01b815260040160405180910390fd5b61095a612a14565b5f546001600160a01b031690565b6060601a805480602002602001604051908101604052809291908181526020018280548015610d2957602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311610d0b575050505050905090565b6005546001600160a01b0316331461109e5760405163ea8e4eb560e01b815260040160405180910390fd5b5f8113156110c25780601b5f8282546110b7919061327a565b90915550610df09050565b5f811215610df0576110d38161328d565b601b5f828254610d929190613250565b6001546001600160a01b031690565b6110fa61135e565b8060ff165f0361111d576040516317dbc4cb60e21b815260040160405180910390fd5b600860ff82161115611142576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611187573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ab9190613209565b6111c8576040516312aecd8160e01b815260040160405180910390fd5b6019805460ff909216620100000262ff000019909216919091179055565b6111ee61135e565b8063ffffffff165f03611214576040516317dbc4cb60e21b815260040160405180910390fd5b6212750063ffffffff8216111561123e576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611283573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a79190613209565b6112c4576040516312aecd8160e01b815260040160405180910390fd5b6017805463ffffffff191663ffffffff83169081179091556112f2906112ea904261327a565b601854612a51565b60185550565b61130061135e565b600180546001600160a01b0319166001600160a01b038316908117909155611326611007565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b33611367611007565b6001600160a01b03161461095a573360405163118cdaa760e01b8152600401610dde9190613086565b80515f908190815b8161ffff168161ffff16101561142a575f858261ffff16815181106113bf576113bf6132a7565b6020908102919091018101516001600160a01b0381165f9081526013909252604090912054909150156113f8576113f5856132bb565b94505b6001600160a01b0381165f90815260146020526040902054156114215761141e846132bb565b93505b50600101611398565b5050915091565b86515f80805b8361ffff168161ffff1610156116ca575f8b8261ffff168151811061145e5761145e6132a7565b6020908102919091018101516001600160a01b0381165f90815260138352604080822054601490945290205490925081156115cd57828d8761ffff16815181106114aa576114aa6132a7565b60200260200101906001600160a01b031690816001600160a01b031681525050818c8761ffff16815181106114e1576114e16132a7565b6020908102919091018101919091526001600160a01b0384165f908152600d9091526040812054600754611516918591612a65565b60048054604051633c2e3e7b60e11b815292935061159f9284926001600160a01b039092169163785c7cf69161154e918a9101613086565b602060405180830381865afa158015611569573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158d91906132db565b600954600160a01b900460ff16612b16565b8c8861ffff16815181106115b5576115b56132a7565b60209081029190910101526115c9876132bb565b9650505b80156116bc57828a8661ffff16815181106115ea576115ea6132a7565b60200260200101906001600160a01b031690816001600160a01b03168152505080898661ffff1681518110611621576116216132a7565b6020908102919091018101919091526001600160a01b0384165f908152600d9091526040812054600754611656918491612a65565b60048054604051633c2e3e7b60e11b815292935061168e9284926001600160a01b039092169163785c7cf69161154e918a9101613086565b898761ffff16815181106116a4576116a46132a7565b60209081029190910101526116b8866132bb565b9550505b505050806001019050611437565b5050505050505050505050565b6116df612b80565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516117199190613086565b60405180910390a1565b600280540361174557604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b60035460ff161561095a5760405163d93c066560e01b815260040160405180910390fd5b601854421115806117e65750600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa1580156117c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e49190613209565b155b156118045760405163085de62560e01b815260040160405180910390fd5b601a545f906001600160401b0381111561182057611820613228565b604051908082528060200260200182016040528015611849578160200160208202803683370190505b5090505f5b601a5461ffff821610156118cc57601a8161ffff1681548110611873576118736132a7565b905f5260205f20015f9054906101000a90046001600160a01b0316828261ffff16815181106118a4576118a46132a7565b6001600160a01b03909216602092830291909101909101526118c5816132bb565b905061184e565b505f5b60155461ffff82161015611964575f600d6008018261ffff16815481106118f8576118f86132a7565b5f9182526020808320909101546001600160a01b03168252600d81526040808320839055600e825280832083905560108252808320839055601382528083208390556014825280832083905560169091529020805460ff191690555061195d816132bb565b90506118cf565b5061197060155f612f07565b5f5b81518161ffff1610156119df575f828261ffff1681518110611996576119966132a7565b6020908102919091018101516001600160a01b03165f908152600f8252604080822082905560118352808220829055601290925290812055506119d8816132bb565b9050611972565b506119e8612ba3565b601a5415610df057601754611a039063ffffffff164261327a565b601855506019805463ff00000019166301000000179055565b6019545f90611a3d9060ff620100008204811691600160201b9004166132f6565b60195460ff91821692505f91611a5a916201000090041683613319565b90506019600481819054906101000a900460ff16611a7790613333565b91906101000a81548160ff021916908360ff160217905550601a805490508161ffff161180611aab5750601a5461ffff8216145b15611ac95750601a546019805464ffff000000191663020000001790555b5f5f611ad3610b0d565b915091505f60045f9054906101000a90046001600160a01b03166001600160a01b031663bcdb8a186040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b28573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b4c9190613263565b9050845b8461ffff168161ffff1610156121ab575f601a8261ffff1681548110611b7857611b786132a7565b905f5260205f20015f9054906101000a90046001600160a01b031690505f5f826001600160a01b031663d3d034586040518163ffffffff1660e01b81526004015f60405180830381865afa158015611bd2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bf9919081019061340d565b90925090505f805b83518161ffff161015611e87575f848261ffff1681518110611c2557611c256132a7565b602002602001015190505f848361ffff1681518110611c4657611c466132a7565b6020026020010151905080600d6001015f846001600160a01b03166001600160a01b031681526020019081526020015f205f828254611c85919061327a565b90915550506001600160a01b0382165f9081526016602052604090205460ff16611dfd576009546001600160a01b0390811690831603611d7557600954611d5890611cdb90600160a01b900460ff16600a6135ae565b600954600480546040805163567ba71360e01b81529051600160a01b90940460ff16936001600160a01b039092169263567ba7139282820192602092908290030181865afa158015611d2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d5391906132db565b612b16565b6001600160a01b0383165f908152600d6020526040902055611dfd565b6006546040516341976e0960e01b81526001600160a01b03909116906341976e0990611da5908590600401613086565b602060405180830381865afa158015611dc0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611de49190613263565b6001600160a01b0383165f908152600d60205260409020555b6001600160a01b0382165f908152600d6020526040812054600754909190611e5b90611e2c9084908690612a65565b60048054604051633c2e3e7b60e11b81526001600160a01b039091169163785c7cf69161154e918a9101613086565b9050611e67818761327a565b9550611e7284612e06565b5050505080611e80906132bb565b9050611c01565b505f611e9a61ffff8a1683612710612a65565b601754909150611ebb90829063ffffffff908116906301e1338090612a6516565b905080600c5f828254611ece919061327a565b90915550611ede90508183613250565b60405163728d42fb60e11b8152600481018290529092505f906001600160a01b0387169063e51a85f690602401602060405180830381865afa158015611f26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4a9190613263565b9050611f568184613250565b6001600160a01b0387165f908152601160205260408120829055909350611f8461ffff8b1683612710612a65565b905080600c5f828254611f97919061327a565b90915550611fa790508183613250565b601954604051630df571f760e01b815261ffff9091166004820152602481018290529092506001600160a01b03881690630df571f7906044015f604051808303815f87803b158015611ff7575f5ffd5b505af1158015612009573d5f5f3e3d5ffd5b5050604051637bee6cb760e11b8152600481018c90525f92506001600160a01b038a16915063a68a526790829063f7dcd96e90602401602060405180830381865afa15801561205a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207e9190613263565b875f6040518463ffffffff1660e01b815260040161209e939291906135bc565b602060405180830381865afa1580156120b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120dd9190613263565b90506120e98186613250565b60405163178c864d60e11b8152600481018c90529095505f906001600160a01b038a1690632f190c9a90602401602060405180830381865afa158015612131573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121559190613263565b6001600160a01b038a165f908152601260205260409020879055905061217b818761327a565b6001600160a01b039099165f908152600f6020526040902098909855505060019096019550611b50945050505050565b505050505050565b6019805463ff00000019166303000000179055601a545f805b8261ffff168161ffff161015612230575f601a8261ffff16815481106121f4576121f46132a7565b5f9182526020808320909101546001600160a01b0316808352600f909152604090912054909150612225908461327a565b9250506001016121cc565b505f6122b360055f9054906101000a90046001600160a01b03166001600160a01b031663dab26e3b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612285573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a99190613263565b8390612710612a65565b905080601b5411156122c457505050565b5f601b54826122d39190613250565b90505f805b8561ffff168161ffff16101561237e575f601a8261ffff1681548110612300576123006132a7565b5f9182526020808320909101546001600160a01b0316808352600f90915260408220549092509061233286838a612a65565b6001600160a01b0384165f908152600f602052604081208054929350839290919061235e908490613250565b9091555061236e9050818661327a565b94505050508060010190506122d8565b5080601b5f828254612390919061327a565b90915550505050505050565b6019545f906123bd9060ff620100008204811691600160201b9004166132f6565b60195460ff91821692505f916123da916201000090041683613319565b90506019600481819054906101000a900460ff166123f790613333565b91906101000a81548160ff021916908360ff160217905550601a805490508161ffff16118061242b5750601a5461ffff8216145b156124495750601a546019805464ffff000000191663040000001790555b815b8161ffff168161ffff161015612868575f601a8261ffff1681548110612473576124736132a7565b905f5260205f20015f9054906101000a90046001600160a01b031690505f5f826001600160a01b031663b6eba6536040518163ffffffff1660e01b81526004015f60405180830381865afa1580156124cd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124f491908101906135e8565b6001600160a01b0385165f908152600f6020526040812054835193955091935090916001600160401b0381111561252d5761252d613228565b60405190808252806020026020018201604052801561257157816020015b604080518082019091525f808252602082015281526020019060019003908161254b5790505b5090505f5b84518161ffff1610156127fc575f858261ffff168151811061259a5761259a6132a7565b602002602001015190505f858361ffff16815181106125bb576125bb6132a7565b6020908102919091018101516001600160a01b0384165f908152601690925260409091205490915060ff166126c1576009546001600160a01b03908116908316036126395760095461261c90611cdb90600160a01b900460ff16600a6135ae565b6001600160a01b0383165f908152600d60205260409020556126c1565b6006546040516341976e0960e01b81526001600160a01b03909116906341976e0990612669908590600401613086565b602060405180830381865afa158015612684573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a89190613263565b6001600160a01b0383165f908152600d60205260409020555b6001600160a01b0382165f908152600d602052604081205460075460085491929161276291612709918590612702908c9063ffffffff808b169190612a6516565b9190612a65565b60095460048054604051633c2e3e7b60e11b8152600160a01b90930460ff16926001600160a01b039091169163785c7cf691612747918b9101613086565b602060405180830381865afa158015611d2f573d5f5f3e3d5ffd5b90506040518060400160405280856001600160a01b0316815260200182815250868661ffff1681518110612798576127986132a7565b602002602001018190525080600d6003015f866001600160a01b03166001600160a01b031681526020019081526020015f205f8282546127d8919061327a565b909155506127e7905084612e06565b50505050806127f5906132bb565b9050612576565b50604051634c2dd25760e11b81526001600160a01b0386169063985ba4ae9061282b90849086906004016136a1565b5f604051808303815f87803b158015612842575f5ffd5b505af1158015612854573d5f5f3e3d5ffd5b50505050505050505080600101905061244b565b505050565b5f600d6008018054806020026020016040519081016040528092919081815260200182805480156128c557602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116128a7575b505083519394505f925050505b8161ffff168161ffff161015612990575f838261ffff16815181106128f9576128f96132a7565b6020908102919091018101516001600160a01b0381165f908152600e83526040808220546010909452902054909250808211156129575761293a8183613250565b6001600160a01b0384165f90815260136020526040902055612982565b81811115612982576129698282613250565b6001600160a01b0384165f908152601460205260409020555b5050508060010190506128d2565b506019805463ff00000019811682555f906129ae9061ffff166132bb565b82546101009290920a61ffff8181021990931691831602179091556019546040519116907f0bc12479581640d161e016cef21aa834cb6d6326bbc0d8445e58d56403adf2dc905f90a25050565b600180546001600160a01b0319169055610df081612e8b565b612a1c61174b565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861170c3390565b5f8282188284100282185b90505b92915050565b5f5f5f612a728686612eda565b91509150815f03612a9657838181612a8c57612a8c613702565b0492505050612b0f565b818411612aad57612aad6003851502601118612ef6565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b5f8260ff168260ff161115612b4b57612b2f8383613716565b612b3a90600a6135ae565b612b44908561372f565b9050612b0f565b8260ff168260ff161015612b7857612b638284613716565b612b6e90600a6135ae565b612b449085613746565b509192915050565b60035460ff1661095a57604051638dfc202b60e01b815260040160405180910390fd5b60048054604051631da09e4360e31b81525f926001600160a01b039092169163ed04f21891612bd491859101613765565b5f60405180830381865afa158015612bee573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c159190810190613779565b9050612c22601a5f612f07565b5f60045f9054906101000a90046001600160a01b03166001600160a01b031663bcdb8a186040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c73573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c979190613263565b90505f5b82518161ffff161015612868575f838261ffff1681518110612cbf57612cbf6132a7565b60200260200101519050806001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d05573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d299190613263565b60405163178c864d60e11b8152600481018590526001600160a01b03831690632f190c9a90602401602060405180830381865afa158015612d6c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d909190613263565b612d9a919061327a565b5f03612da65750612df6565b601a80546001810182555f919091527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b0319166001600160a01b03929092169190911790555b612dff816132bb565b9050612c9b565b6001600160a01b0381165f9081526016602052604090205460ff16610df0576015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0384166001600160a01b031990911681179091555f908152601660205260409020805460ff1916909117905550565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5080545f8255905f5260205f2090810190610df091905b80821115612f31575f8155600101612f1e565b5090565b634e487b7160e01b5f52602160045260245ffd5b6020810160058310612f5d57612f5d612f35565b91905290565b6001600160a01b0381168114610df0575f5ffd5b5f60208284031215612f87575f5ffd5b8135612b0f81612f63565b5f8151808452602084019350602083015f5b82811015612fcb5781516001600160a01b0316865260209586019590910190600101612fa4565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612fcb578151865260209586019590910190600101612fe7565b60c081525f61301760c0830189612f92565b82810360208401526130298189612fd5565b9050828103604084015261303d8188612f92565b905082810360608401526130518187612fd5565b905082810360808401526130658186612fd5565b905082810360a08401526130798185612fd5565b9998505050505050505050565b6001600160a01b0391909116815260200190565b5f5f602083850312156130ab575f5ffd5b82356001600160401b038111156130c0575f5ffd5b8301601f810185136130d0575f5ffd5b80356001600160401b038111156130e5575f5ffd5b8560208284010111156130f6575f5ffd5b6020919091019590945092505050565b5f60208284031215613116575f5ffd5b5035919050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b602081525f612a5c6020830184612f92565b803561ffff8116811461317e575f5ffd5b919050565b5f5f60408385031215613194575f5ffd5b61319d8361316d565b91506131ab6020840161316d565b90509250929050565b60ff81168114610df0575f5ffd5b5f602082840312156131d2575f5ffd5b8135612b0f816131b4565b63ffffffff81168114610df0575f5ffd5b5f602082840312156131fe575f5ffd5b8135612b0f816131dd565b5f60208284031215613219575f5ffd5b81518015158114612b0f575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115612a5f57612a5f61323c565b5f60208284031215613273575f5ffd5b5051919050565b80820180821115612a5f57612a5f61323c565b5f600160ff1b82016132a1576132a161323c565b505f0390565b634e487b7160e01b5f52603260045260245ffd5b5f61ffff821661ffff81036132d2576132d261323c565b60010192915050565b5f602082840312156132eb575f5ffd5b8151612b0f816131b4565b60ff81811683821602908116908181146133125761331261323c565b5092915050565b61ffff8181168382160190811115612a5f57612a5f61323c565b5f60ff821660ff81036132d2576132d261323c565b604051601f8201601f191681016001600160401b038111828210171561337057613370613228565b604052919050565b5f6001600160401b0382111561339057613390613228565b5060051b60200190565b5f82601f8301126133a9575f5ffd5b81516133bc6133b782613378565b613348565b8082825260208201915060208360051b8601019250858311156133dd575f5ffd5b602085015b838110156134035780516133f581612f63565b8352602092830192016133e2565b5095945050505050565b5f5f6040838503121561341e575f5ffd5b82516001600160401b03811115613433575f5ffd5b61343f8582860161339a565b602085015190935090506001600160401b0381111561345c575f5ffd5b8301601f8101851361346c575f5ffd5b805161347a6133b782613378565b8082825260208201915060208360051b85010192508783111561349b575f5ffd5b6020840193505b828410156134bd5783518252602093840193909101906134a2565b809450505050509250929050565b6001815b6001841115613506578085048111156134ea576134ea61323c565b60018416156134f857908102905b60019390931c9280026134cf565b935093915050565b5f8261351c57506001612a5f565b8161352857505f612a5f565b816001811461353e576002811461354857613564565b6001915050612a5f565b60ff8411156135595761355961323c565b50506001821b612a5f565b5060208310610133831016604e8410600b8410161715613587575081810a612a5f565b6135935f1984846134cb565b805f19048211156135a6576135a661323c565b029392505050565b5f612a5c60ff84168361350e565b8381526020810183905260608101600483106135da576135da612f35565b826040830152949350505050565b5f5f604083850312156135f9575f5ffd5b82516001600160401b0381111561360e575f5ffd5b61361a8582860161339a565b602085015190935090506001600160401b03811115613637575f5ffd5b8301601f81018513613647575f5ffd5b80516136556133b782613378565b8082825260208201915060208360051b850101925087831115613676575f5ffd5b6020840193505b828410156134bd578351613690816131dd565b82526020938401939091019061367d565b604080825283519082018190525f9060208501906060840190835b818110156136ef57835180516001600160a01b0316845260209081015181850152909301926040909201916001016136bc565b5050602093909301939093525092915050565b634e487b7160e01b5f52601260045260245ffd5b60ff8281168282160390811115612a5f57612a5f61323c565b8082028115828204841417612a5f57612a5f61323c565b5f8261376057634e487b7160e01b5f52601260045260245ffd5b500490565b6020810160028310612f5d57612f5d612f35565b5f60208284031215613789575f5ffd5b81516001600160401b0381111561379e575f5ffd5b6137aa8482850161339a565b94935050505056fea26469706673582212201730c20c13de9648afecf91759c588b631afdbdabdb6ae6fa683289b1ccc163f64736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061020d575f3560e01c8063055ad42e146102115780630844697d1461023b57806308af604d146102635780630e60efe714610288578063132b1c921461029f57806314b19c5a146102c757806314b5d07f146102d557806325a760c2146102ea5780632b0088b4146102fe5780632e2dc43e146103075780633a0dad8e146103215780633f4ba83a146103415780634585e33b146103495780634f17a2fa1461035c5780634ff0876a1461037b57806350267f6d1461038b5780635488cd62146103ae57806358fac65b146103c25780635c975abb146103d55780635dc228a0146103eb5780636e04ff0d146104035780636ff04153146104245780637060444514610439578063715018a61461044c5780637158da7c1461045457806379502c551461046757806379ba50971461047a5780637b103999146104825780637bced9e5146104955780637cdabf0a1461049d578063800f9fad146104b05780638456cb59146104b95780638da5cb5b146104c15780638f5c9465146104c95780639f2124cb146104d2578063b8b2af7c146104da578063ba96ff11146104ef578063c18e2a5c14610517578063ca1f32f114610520578063e2638ff114610529578063e2c4aaec14610551578063e30c397814610564578063e6c3efd91461056c578063eeb393c91461057f578063f2fde38b14610592575b5f5ffd5b601954610225906301000000900460ff1681565b6040516102329190612f49565b60405180910390f35b60095461025090600160b81b900461ffff1681565b60405161ffff9091168152602001610232565b6019546102769062010000900460ff1681565b60405160ff9091168152602001610232565b610291600a5481565b604051908152602001610232565b6102916102ad366004612f77565b6001600160a01b03165f9081526012602052604090205490565b6019546102509061ffff1681565b6102e86102e3366004612f77565b6105a5565b005b60095461027690600160a01b900460ff1681565b61029160085481565b61030f6106ab565b60405161023296959493929190613005565b600554610334906001600160a01b031681565b6040516102329190613086565b6102e8610927565b6102e861035736600461309a565b61095c565b6103666212750081565b60405163ffffffff9091168152602001610232565b6017546103669063ffffffff1681565b610393610b0d565b6040805161ffff938416815292909116602083015201610232565b60195461027690600160201b900460ff1681565b6103346103d0366004613106565b610b4e565b60035460ff166040519015158152602001610232565b6003546103349061010090046001600160a01b031681565b61041661041136600461309a565b610b76565b60405161023292919061311d565b61042c610cd0565b604051610232919061315b565b6102e8610447366004613106565b610d33565b6102e8610d9a565b600954610334906001600160a01b031681565b600454610334906001600160a01b031681565b6102e8610dab565b600654610334906001600160a01b031681565b610276600881565b6102e86104ab366004613183565b610df3565b610291600c5481565b6102e8610fd4565b610334611007565b61025061271081565b61042c611015565b60095461025090600160a81b900461ffff1681565b6102916104fd366004612f77565b6001600160a01b03165f908152600d602052604090205490565b610291601b5481565b61029160075481565b610291610537366004612f77565b6001600160a01b03165f9081526011602052604090205490565b6102e861055f366004613106565b611073565b6103346110e3565b6102e861057a3660046131c2565b6110f2565b6102e861058d3660046131ee565b6111e6565b6102e86105a0366004612f77565b6112f8565b6105ad61135e565b6001600160a01b0381166105d45760405163d92e233d60e01b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610619573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063d9190613209565b61065a576040516312aecd8160e01b815260040160405180910390fd5b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f6cc7ebdb6c8c53291c5ae16148cab9b049d23bf5bde5632900b40edff56fcb43905f90a250565b606080808080805f6019546301000000900460ff1660048111156106d1576106d1612f35565b146106ef576040516312aecd8160e01b815260040160405180910390fd5b5f600d60080180548060200260200160405190810160405280929190818152602001828054801561074757602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610729575b505050505090505f5f61075983611390565b915091508161ffff166001600160401b0381111561077957610779613228565b6040519080825280602002602001820160405280156107a2578160200160208202803683370190505b5098508161ffff166001600160401b038111156107c1576107c1613228565b6040519080825280602002602001820160405280156107ea578160200160208202803683370190505b5097508061ffff166001600160401b0381111561080957610809613228565b604051908082528060200260200182016040528015610832578160200160208202803683370190505b5096508061ffff166001600160401b0381111561085157610851613228565b60405190808252806020026020018201604052801561087a578160200160208202803683370190505b5095508161ffff166001600160401b0381111561089957610899613228565b6040519080825280602002602001820160405280156108c2578160200160208202803683370190505b5094508061ffff166001600160401b038111156108e1576108e1613228565b60405190808252806020026020018201604052801561090a578160200160208202803683370190505b50935061091c838a8a888b8b8a611431565b505050909192939495565b6004546001600160a01b031633146109525760405163ea8e4eb560e01b815260040160405180910390fd5b61095a6116d7565b565b610964611007565b6001600160a01b0316336001600160a01b031614158015610995575060035461010090046001600160a01b03163314155b156109b35760405163ea8e4eb560e01b815260040160405180910390fd5b6109bb611723565b6109c361174b565b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610a08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2c9190613209565b8015610a39575060185442115b15610a4b57610a4661176f565b610aff565b60016019546301000000900460ff166004811115610a6b57610a6b612f35565b03610a7857610a46611a1c565b60026019546301000000900460ff166004811115610a9857610a98612f35565b03610aa557610a466121b3565b60036019546301000000900460ff166004811115610ac557610ac5612f35565b03610ad257610a4661239c565b60046019546301000000900460ff166004811115610af257610af2612f35565b03610aff57610aff61286d565b610b096001600255565b5050565b5f5f42600a541115610b30575050600b5461ffff80821692620100009092041690565b505060095461ffff600160a81b8204811692600160b81b9092041690565b601a8181548110610b5d575f80fd5b5f918252602090912001546001600160a01b0316905081565b600480546040805163edcf9c1f60e01b815290515f936060936001600160a01b03169263edcf9c1f92818301926020928290030181865afa158015610bbd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be19190613209565b8015610bee575060185442115b15610bfc5760019150610cb8565b60016019546301000000900460ff166004811115610c1c57610c1c612f35565b03610c2a5760019150610cb8565b60026019546301000000900460ff166004811115610c4a57610c4a612f35565b03610c585760019150610cb8565b60036019546301000000900460ff166004811115610c7857610c78612f35565b03610c865760019150610cb8565b60046019546301000000900460ff166004811115610ca657610ca6612f35565b03610cb45760019150610cb8565b5f91505b60405180602001604052805f81525090509250929050565b6060600d600801805480602002602001604051908101604052809291908181526020018280548015610d2957602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d0b575b5050505050905090565b6005546001600160a01b03163314610d5e5760405163ea8e4eb560e01b815260040160405180910390fd5b600c54811115610d8157604051632ca2f52b60e11b815260040160405180910390fd5b80600c5f828254610d929190613250565b909155505050565b610da261135e565b61095a5f6129fb565b3380610db56110e3565b6001600160a01b031614610de7578060405163118cdaa760e01b8152600401610dde9190613086565b60405180910390fd5b610df0816129fb565b50565b610dfb61135e565b60328261ffff161180610e1357506107d08161ffff16115b15610e31576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610e76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9a9190613209565b610eb7576040516312aecd8160e01b815260040160405180910390fd5b5f5f610ec1610b0d565b600b805461ffff84811663ffffffff19909216919091176201000084831602179091556009805463ffffffff60a81b1916600160a81b8984160261ffff60b81b191617600160b81b928816929092029190911790556004805460408051630df1aa5760e31b815290519496509294506001600160a01b031692636f8d52b89280830192602092918290030181865afa158015610f5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f839190613263565b610f8d904261327a565b600a556040805161ffff8087168252851660208201527f2bb6517fcd555b5390717b7fd212a2d9aa55d0214725c5d6d955103b4e6b2a2c910160405180910390a150505050565b6004546001600160a01b03163314610fff5760405163ea8e4eb560e01b815260040160405180910390fd5b61095a612a14565b5f546001600160a01b031690565b6060601a805480602002602001604051908101604052809291908181526020018280548015610d2957602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311610d0b575050505050905090565b6005546001600160a01b0316331461109e5760405163ea8e4eb560e01b815260040160405180910390fd5b5f8113156110c25780601b5f8282546110b7919061327a565b90915550610df09050565b5f811215610df0576110d38161328d565b601b5f828254610d929190613250565b6001546001600160a01b031690565b6110fa61135e565b8060ff165f0361111d576040516317dbc4cb60e21b815260040160405180910390fd5b600860ff82161115611142576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611187573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ab9190613209565b6111c8576040516312aecd8160e01b815260040160405180910390fd5b6019805460ff909216620100000262ff000019909216919091179055565b6111ee61135e565b8063ffffffff165f03611214576040516317dbc4cb60e21b815260040160405180910390fd5b6212750063ffffffff8216111561123e576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611283573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a79190613209565b6112c4576040516312aecd8160e01b815260040160405180910390fd5b6017805463ffffffff191663ffffffff83169081179091556112f2906112ea904261327a565b601854612a51565b60185550565b61130061135e565b600180546001600160a01b0319166001600160a01b038316908117909155611326611007565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b33611367611007565b6001600160a01b03161461095a573360405163118cdaa760e01b8152600401610dde9190613086565b80515f908190815b8161ffff168161ffff16101561142a575f858261ffff16815181106113bf576113bf6132a7565b6020908102919091018101516001600160a01b0381165f9081526013909252604090912054909150156113f8576113f5856132bb565b94505b6001600160a01b0381165f90815260146020526040902054156114215761141e846132bb565b93505b50600101611398565b5050915091565b86515f80805b8361ffff168161ffff1610156116ca575f8b8261ffff168151811061145e5761145e6132a7565b6020908102919091018101516001600160a01b0381165f90815260138352604080822054601490945290205490925081156115cd57828d8761ffff16815181106114aa576114aa6132a7565b60200260200101906001600160a01b031690816001600160a01b031681525050818c8761ffff16815181106114e1576114e16132a7565b6020908102919091018101919091526001600160a01b0384165f908152600d9091526040812054600754611516918591612a65565b60048054604051633c2e3e7b60e11b815292935061159f9284926001600160a01b039092169163785c7cf69161154e918a9101613086565b602060405180830381865afa158015611569573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158d91906132db565b600954600160a01b900460ff16612b16565b8c8861ffff16815181106115b5576115b56132a7565b60209081029190910101526115c9876132bb565b9650505b80156116bc57828a8661ffff16815181106115ea576115ea6132a7565b60200260200101906001600160a01b031690816001600160a01b03168152505080898661ffff1681518110611621576116216132a7565b6020908102919091018101919091526001600160a01b0384165f908152600d9091526040812054600754611656918491612a65565b60048054604051633c2e3e7b60e11b815292935061168e9284926001600160a01b039092169163785c7cf69161154e918a9101613086565b898761ffff16815181106116a4576116a46132a7565b60209081029190910101526116b8866132bb565b9550505b505050806001019050611437565b5050505050505050505050565b6116df612b80565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516117199190613086565b60405180910390a1565b600280540361174557604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b60035460ff161561095a5760405163d93c066560e01b815260040160405180910390fd5b601854421115806117e65750600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa1580156117c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e49190613209565b155b156118045760405163085de62560e01b815260040160405180910390fd5b601a545f906001600160401b0381111561182057611820613228565b604051908082528060200260200182016040528015611849578160200160208202803683370190505b5090505f5b601a5461ffff821610156118cc57601a8161ffff1681548110611873576118736132a7565b905f5260205f20015f9054906101000a90046001600160a01b0316828261ffff16815181106118a4576118a46132a7565b6001600160a01b03909216602092830291909101909101526118c5816132bb565b905061184e565b505f5b60155461ffff82161015611964575f600d6008018261ffff16815481106118f8576118f86132a7565b5f9182526020808320909101546001600160a01b03168252600d81526040808320839055600e825280832083905560108252808320839055601382528083208390556014825280832083905560169091529020805460ff191690555061195d816132bb565b90506118cf565b5061197060155f612f07565b5f5b81518161ffff1610156119df575f828261ffff1681518110611996576119966132a7565b6020908102919091018101516001600160a01b03165f908152600f8252604080822082905560118352808220829055601290925290812055506119d8816132bb565b9050611972565b506119e8612ba3565b601a5415610df057601754611a039063ffffffff164261327a565b601855506019805463ff00000019166301000000179055565b6019545f90611a3d9060ff620100008204811691600160201b9004166132f6565b60195460ff91821692505f91611a5a916201000090041683613319565b90506019600481819054906101000a900460ff16611a7790613333565b91906101000a81548160ff021916908360ff160217905550601a805490508161ffff161180611aab5750601a5461ffff8216145b15611ac95750601a546019805464ffff000000191663020000001790555b5f5f611ad3610b0d565b915091505f60045f9054906101000a90046001600160a01b03166001600160a01b031663bcdb8a186040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b28573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b4c9190613263565b9050845b8461ffff168161ffff1610156121ab575f601a8261ffff1681548110611b7857611b786132a7565b905f5260205f20015f9054906101000a90046001600160a01b031690505f5f826001600160a01b031663d3d034586040518163ffffffff1660e01b81526004015f60405180830381865afa158015611bd2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bf9919081019061340d565b90925090505f805b83518161ffff161015611e87575f848261ffff1681518110611c2557611c256132a7565b602002602001015190505f848361ffff1681518110611c4657611c466132a7565b6020026020010151905080600d6001015f846001600160a01b03166001600160a01b031681526020019081526020015f205f828254611c85919061327a565b90915550506001600160a01b0382165f9081526016602052604090205460ff16611dfd576009546001600160a01b0390811690831603611d7557600954611d5890611cdb90600160a01b900460ff16600a6135ae565b600954600480546040805163567ba71360e01b81529051600160a01b90940460ff16936001600160a01b039092169263567ba7139282820192602092908290030181865afa158015611d2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d5391906132db565b612b16565b6001600160a01b0383165f908152600d6020526040902055611dfd565b6006546040516341976e0960e01b81526001600160a01b03909116906341976e0990611da5908590600401613086565b602060405180830381865afa158015611dc0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611de49190613263565b6001600160a01b0383165f908152600d60205260409020555b6001600160a01b0382165f908152600d6020526040812054600754909190611e5b90611e2c9084908690612a65565b60048054604051633c2e3e7b60e11b81526001600160a01b039091169163785c7cf69161154e918a9101613086565b9050611e67818761327a565b9550611e7284612e06565b5050505080611e80906132bb565b9050611c01565b505f611e9a61ffff8a1683612710612a65565b601754909150611ebb90829063ffffffff908116906301e1338090612a6516565b905080600c5f828254611ece919061327a565b90915550611ede90508183613250565b60405163728d42fb60e11b8152600481018290529092505f906001600160a01b0387169063e51a85f690602401602060405180830381865afa158015611f26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4a9190613263565b9050611f568184613250565b6001600160a01b0387165f908152601160205260408120829055909350611f8461ffff8b1683612710612a65565b905080600c5f828254611f97919061327a565b90915550611fa790508183613250565b601954604051630df571f760e01b815261ffff9091166004820152602481018290529092506001600160a01b03881690630df571f7906044015f604051808303815f87803b158015611ff7575f5ffd5b505af1158015612009573d5f5f3e3d5ffd5b5050604051637bee6cb760e11b8152600481018c90525f92506001600160a01b038a16915063a68a526790829063f7dcd96e90602401602060405180830381865afa15801561205a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207e9190613263565b875f6040518463ffffffff1660e01b815260040161209e939291906135bc565b602060405180830381865afa1580156120b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120dd9190613263565b90506120e98186613250565b60405163178c864d60e11b8152600481018c90529095505f906001600160a01b038a1690632f190c9a90602401602060405180830381865afa158015612131573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121559190613263565b6001600160a01b038a165f908152601260205260409020879055905061217b818761327a565b6001600160a01b039099165f908152600f6020526040902098909855505060019096019550611b50945050505050565b505050505050565b6019805463ff00000019166303000000179055601a545f805b8261ffff168161ffff161015612230575f601a8261ffff16815481106121f4576121f46132a7565b5f9182526020808320909101546001600160a01b0316808352600f909152604090912054909150612225908461327a565b9250506001016121cc565b505f6122b360055f9054906101000a90046001600160a01b03166001600160a01b031663dab26e3b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612285573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a99190613263565b8390612710612a65565b905080601b5411156122c457505050565b5f601b54826122d39190613250565b90505f805b8561ffff168161ffff16101561237e575f601a8261ffff1681548110612300576123006132a7565b5f9182526020808320909101546001600160a01b0316808352600f90915260408220549092509061233286838a612a65565b6001600160a01b0384165f908152600f602052604081208054929350839290919061235e908490613250565b9091555061236e9050818661327a565b94505050508060010190506122d8565b5080601b5f828254612390919061327a565b90915550505050505050565b6019545f906123bd9060ff620100008204811691600160201b9004166132f6565b60195460ff91821692505f916123da916201000090041683613319565b90506019600481819054906101000a900460ff166123f790613333565b91906101000a81548160ff021916908360ff160217905550601a805490508161ffff16118061242b5750601a5461ffff8216145b156124495750601a546019805464ffff000000191663040000001790555b815b8161ffff168161ffff161015612868575f601a8261ffff1681548110612473576124736132a7565b905f5260205f20015f9054906101000a90046001600160a01b031690505f5f826001600160a01b031663b6eba6536040518163ffffffff1660e01b81526004015f60405180830381865afa1580156124cd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124f491908101906135e8565b6001600160a01b0385165f908152600f6020526040812054835193955091935090916001600160401b0381111561252d5761252d613228565b60405190808252806020026020018201604052801561257157816020015b604080518082019091525f808252602082015281526020019060019003908161254b5790505b5090505f5b84518161ffff1610156127fc575f858261ffff168151811061259a5761259a6132a7565b602002602001015190505f858361ffff16815181106125bb576125bb6132a7565b6020908102919091018101516001600160a01b0384165f908152601690925260409091205490915060ff166126c1576009546001600160a01b03908116908316036126395760095461261c90611cdb90600160a01b900460ff16600a6135ae565b6001600160a01b0383165f908152600d60205260409020556126c1565b6006546040516341976e0960e01b81526001600160a01b03909116906341976e0990612669908590600401613086565b602060405180830381865afa158015612684573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a89190613263565b6001600160a01b0383165f908152600d60205260409020555b6001600160a01b0382165f908152600d602052604081205460075460085491929161276291612709918590612702908c9063ffffffff808b169190612a6516565b9190612a65565b60095460048054604051633c2e3e7b60e11b8152600160a01b90930460ff16926001600160a01b039091169163785c7cf691612747918b9101613086565b602060405180830381865afa158015611d2f573d5f5f3e3d5ffd5b90506040518060400160405280856001600160a01b0316815260200182815250868661ffff1681518110612798576127986132a7565b602002602001018190525080600d6003015f866001600160a01b03166001600160a01b031681526020019081526020015f205f8282546127d8919061327a565b909155506127e7905084612e06565b50505050806127f5906132bb565b9050612576565b50604051634c2dd25760e11b81526001600160a01b0386169063985ba4ae9061282b90849086906004016136a1565b5f604051808303815f87803b158015612842575f5ffd5b505af1158015612854573d5f5f3e3d5ffd5b50505050505050505080600101905061244b565b505050565b5f600d6008018054806020026020016040519081016040528092919081815260200182805480156128c557602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116128a7575b505083519394505f925050505b8161ffff168161ffff161015612990575f838261ffff16815181106128f9576128f96132a7565b6020908102919091018101516001600160a01b0381165f908152600e83526040808220546010909452902054909250808211156129575761293a8183613250565b6001600160a01b0384165f90815260136020526040902055612982565b81811115612982576129698282613250565b6001600160a01b0384165f908152601460205260409020555b5050508060010190506128d2565b506019805463ff00000019811682555f906129ae9061ffff166132bb565b82546101009290920a61ffff8181021990931691831602179091556019546040519116907f0bc12479581640d161e016cef21aa834cb6d6326bbc0d8445e58d56403adf2dc905f90a25050565b600180546001600160a01b0319169055610df081612e8b565b612a1c61174b565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861170c3390565b5f8282188284100282185b90505b92915050565b5f5f5f612a728686612eda565b91509150815f03612a9657838181612a8c57612a8c613702565b0492505050612b0f565b818411612aad57612aad6003851502601118612ef6565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150505b9392505050565b5f8260ff168260ff161115612b4b57612b2f8383613716565b612b3a90600a6135ae565b612b44908561372f565b9050612b0f565b8260ff168260ff161015612b7857612b638284613716565b612b6e90600a6135ae565b612b449085613746565b509192915050565b60035460ff1661095a57604051638dfc202b60e01b815260040160405180910390fd5b60048054604051631da09e4360e31b81525f926001600160a01b039092169163ed04f21891612bd491859101613765565b5f60405180830381865afa158015612bee573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c159190810190613779565b9050612c22601a5f612f07565b5f60045f9054906101000a90046001600160a01b03166001600160a01b031663bcdb8a186040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c73573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c979190613263565b90505f5b82518161ffff161015612868575f838261ffff1681518110612cbf57612cbf6132a7565b60200260200101519050806001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d05573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d299190613263565b60405163178c864d60e11b8152600481018590526001600160a01b03831690632f190c9a90602401602060405180830381865afa158015612d6c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d909190613263565b612d9a919061327a565b5f03612da65750612df6565b601a80546001810182555f919091527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b0319166001600160a01b03929092169190911790555b612dff816132bb565b9050612c9b565b6001600160a01b0381165f9081526016602052604090205460ff16610df0576015805460018181019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0384166001600160a01b031990911681179091555f908152601660205260409020805460ff1916909117905550565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5080545f8255905f5260205f2090810190610df091905b80821115612f31575f8155600101612f1e565b5090565b634e487b7160e01b5f52602160045260245ffd5b6020810160058310612f5d57612f5d612f35565b91905290565b6001600160a01b0381168114610df0575f5ffd5b5f60208284031215612f87575f5ffd5b8135612b0f81612f63565b5f8151808452602084019350602083015f5b82811015612fcb5781516001600160a01b0316865260209586019590910190600101612fa4565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612fcb578151865260209586019590910190600101612fe7565b60c081525f61301760c0830189612f92565b82810360208401526130298189612fd5565b9050828103604084015261303d8188612f92565b905082810360608401526130518187612fd5565b905082810360808401526130658186612fd5565b905082810360a08401526130798185612fd5565b9998505050505050505050565b6001600160a01b0391909116815260200190565b5f5f602083850312156130ab575f5ffd5b82356001600160401b038111156130c0575f5ffd5b8301601f810185136130d0575f5ffd5b80356001600160401b038111156130e5575f5ffd5b8560208284010111156130f6575f5ffd5b6020919091019590945092505050565b5f60208284031215613116575f5ffd5b5035919050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b602081525f612a5c6020830184612f92565b803561ffff8116811461317e575f5ffd5b919050565b5f5f60408385031215613194575f5ffd5b61319d8361316d565b91506131ab6020840161316d565b90509250929050565b60ff81168114610df0575f5ffd5b5f602082840312156131d2575f5ffd5b8135612b0f816131b4565b63ffffffff81168114610df0575f5ffd5b5f602082840312156131fe575f5ffd5b8135612b0f816131dd565b5f60208284031215613219575f5ffd5b81518015158114612b0f575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115612a5f57612a5f61323c565b5f60208284031215613273575f5ffd5b5051919050565b80820180821115612a5f57612a5f61323c565b5f600160ff1b82016132a1576132a161323c565b505f0390565b634e487b7160e01b5f52603260045260245ffd5b5f61ffff821661ffff81036132d2576132d261323c565b60010192915050565b5f602082840312156132eb575f5ffd5b8151612b0f816131b4565b60ff81811683821602908116908181146133125761331261323c565b5092915050565b61ffff8181168382160190811115612a5f57612a5f61323c565b5f60ff821660ff81036132d2576132d261323c565b604051601f8201601f191681016001600160401b038111828210171561337057613370613228565b604052919050565b5f6001600160401b0382111561339057613390613228565b5060051b60200190565b5f82601f8301126133a9575f5ffd5b81516133bc6133b782613378565b613348565b8082825260208201915060208360051b8601019250858311156133dd575f5ffd5b602085015b838110156134035780516133f581612f63565b8352602092830192016133e2565b5095945050505050565b5f5f6040838503121561341e575f5ffd5b82516001600160401b03811115613433575f5ffd5b61343f8582860161339a565b602085015190935090506001600160401b0381111561345c575f5ffd5b8301601f8101851361346c575f5ffd5b805161347a6133b782613378565b8082825260208201915060208360051b85010192508783111561349b575f5ffd5b6020840193505b828410156134bd5783518252602093840193909101906134a2565b809450505050509250929050565b6001815b6001841115613506578085048111156134ea576134ea61323c565b60018416156134f857908102905b60019390931c9280026134cf565b935093915050565b5f8261351c57506001612a5f565b8161352857505f612a5f565b816001811461353e576002811461354857613564565b6001915050612a5f565b60ff8411156135595761355961323c565b50506001821b612a5f565b5060208310610133831016604e8410600b8410161715613587575081810a612a5f565b6135935f1984846134cb565b805f19048211156135a6576135a661323c565b029392505050565b5f612a5c60ff84168361350e565b8381526020810183905260608101600483106135da576135da612f35565b826040830152949350505050565b5f5f604083850312156135f9575f5ffd5b82516001600160401b0381111561360e575f5ffd5b61361a8582860161339a565b602085015190935090506001600160401b03811115613637575f5ffd5b8301601f81018513613647575f5ffd5b80516136556133b782613378565b8082825260208201915060208360051b850101925087831115613676575f5ffd5b6020840193505b828410156134bd578351613690816131dd565b82526020938401939091019061367d565b604080825283519082018190525f9060208501906060840190835b818110156136ef57835180516001600160a01b0316845260209081015181850152909301926040909201916001016136bc565b5050602093909301939093525092915050565b634e487b7160e01b5f52601260045260245ffd5b60ff8281168282160390811115612a5f57612a5f61323c565b8082028115828204841417612a5f57612a5f61323c565b5f8261376057634e487b7160e01b5f52601260045260245ffd5b500490565b6020810160028310612f5d57612f5d612f35565b5f60208284031215613789575f5ffd5b81516001600160401b0381111561379e575f5ffd5b6137aa8482850161339a565b94935050505056fea26469706673582212201730c20c13de9648afecf91759c588b631afdbdabdb6ae6fa683289b1ccc163f64736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/orchestrators/LiquidityOrchestrator.sol/LiquidityOrchestrator.json b/artifacts/contracts/orchestrators/LiquidityOrchestrator.sol/LiquidityOrchestrator.json index ff9cd8a0..1ae7d700 100644 --- a/artifacts/contracts/orchestrators/LiquidityOrchestrator.sol/LiquidityOrchestrator.json +++ b/artifacts/contracts/orchestrators/LiquidityOrchestrator.sol/LiquidityOrchestrator.json @@ -886,8 +886,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561000f575f5ffd5b506040516132c13803806132c183398101604081905261002e91610293565b826001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006581610214565b5060016002556001600160a01b0382166100925760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100b95760405163d92e233d60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b038416908117825560408051631c56369f60e21b815290519192637158da7c9282820192602092908290030181865afa15801561010d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013191906102dd565b600680546001600160a01b0319166001600160a01b0392831617905560048054604080516303e1469160e61b81529051919093169263f851a44092818101926020929091908290030181865afa15801561018d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101b191906102dd565b600780546001600160a01b0319166001600160a01b0392831617905560038054610100600160a81b0319166101009390921692909202179055505060098054630101000064ffffff000019909116179055600b805460ff191660021790556102ff565b600180546001600160a01b031916905561022d81610230565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461022d575f5ffd5b5f5f5f606084860312156102a5575f5ffd5b83516102b08161027f565b60208501519093506102c18161027f565b60408501519092506102d28161027f565b809150509250925092565b5f602082840312156102ed575f5ffd5b81516102f88161027f565b9392505050565b612fb58061030c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610222575f3560e01c8062f714ce1461022657806301c621c11461023b578063055ad42e1461024e57806309f2e19c146102785780630a861f2a146102985780630a8b78c7146102ab5780630babbef3146102be57806314b5d07f146102dd5780633369921a146102f0578063348ec5c8146103075780633af2a8c01461031a5780633e765a9e1461032d5780633f4ba83a146103405780634585e33b146103485780634adfc2e71461035b57806351edffb11461036e57806352e899fd146103815780635488cd621461039457806357be01c1146103a857806359017aa9146103bb5780635c975abb146103ce5780635dc228a0146103e45780635dd17ec3146103fc578063639bdf5a146103fc5780636e04ff0d14610404578063715018a6146104255780637158da7c1461042d578063741fca4b1461044057806376d58e1a1461045357806379502c551461046657806379ba5097146104795780638157c1ab146104815780638456cb59146104945780638689b2c51461049c5780638a0b0d38146104b05780638da5cb5b146104c3578063a0424ab9146104cb578063bc504975146104d3578063be1b26a4146104e6578063d3f3506d146104f9578063dab26e3b14610521578063e30c39781461052a578063e42ff8b614610532578063e6c3efd914610545578063ee6713df14610558578063f2fde38b14610579578063f851a4401461058c575b5f5ffd5b610239610234366004612982565b61059f565b005b6102396102493660046129b0565b610657565b60095461026290600160201b900460ff1681565b60405161026f91906129db565b60405180910390f35b61028b6102863660046129b0565b61072c565b60405161026f91906129f5565b6102396102a63660046129b0565b610754565b6102396102b9366004612a09565b610951565b600b546102cb9060ff1681565b60405160ff909116815260200161026f565b6102396102eb366004612a09565b6109cc565b6102f960125481565b60405190815260200161026f565b60055461028b906001600160a01b031681565b6102396103283660046129b0565b610ad2565b6102f961033b3660046129b0565b610ba8565b610239610bc7565b610239610356366004612a2b565b610bfc565b610239610369366004612a97565b610e1a565b61023961037c366004612a97565b610ee9565b6102f961038f3660046129b0565b610f74565b6009546102cb90600160281b900460ff1681565b6009546102cb9062010000900460ff1681565b6102396103c9366004612ac1565b610f83565b60035460ff16604051901515815260200161026f565b60035461028b9061010090046001600160a01b031681565b6102cb600881565b610417610412366004612a2b565b611097565b60405161026f929190612aed565b610239611239565b60065461028b906001600160a01b031681565b61023961044e3660046129b0565b61124a565b6102396104613660046129b0565b6113fd565b60045461028b906001600160a01b031681565b610239611563565b61028b61048f3660046129b0565b61159f565b6102396115ae565b6009546102cb906301000000900460ff1681565b6102396104be366004612b2b565b6115e1565b61028b6116d5565b6102cb600581565b6102f96104e13660046129b0565b6116e3565b6102f96104f43660046129b0565b6116f2565b61028b610507366004612a09565b60086020525f90815260409020546001600160a01b031681565b6102f9600a5481565b61028b611701565b610239610540366004612b2b565b611710565b610239610553366004612b2b565b6117fc565b6009546105669061ffff1681565b60405161ffff909116815260200161026f565b610239610587366004612a09565b6118f2565b60075461028b906001600160a01b031681565b6105a7611958565b6004805460405163f764eb4560e01b81526001600160a01b039091169163f764eb45916105d6913391016129f5565b602060405180830381865afa1580156105f1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106159190612b4b565b6106325760405163ea8e4eb560e01b815260040160405180910390fd5b600654610649906001600160a01b03168284611980565b6106536001600255565b5050565b6007546001600160a01b0316331461068257604051631a27eac360e11b815260040160405180910390fd5b805f036106b857600654604051636b30633560e01b81526106af916001600160a01b0316906004016129f5565b60405180910390fd5b600554604051637060444560e01b8152600481018390526001600160a01b03909116906370604445906024015f604051808303815f87803b1580156106fb575f5ffd5b505af115801561070d573d5f5f3e3d5ffd5b505060065461072992506001600160a01b031690503383611980565b50565b600f818154811061073b575f80fd5b5f918252602090912001546001600160a01b0316905081565b6007546001600160a01b0316331461077f57604051631a27eac360e11b815260040160405180910390fd5b805f036107ac57600654604051636b30633560e01b81526106af916001600160a01b0316906004016129f5565b600554604080516302ad6a1760e11b815290515f926001600160a01b03169163055ad42e9160048083019260209291908290030181865afa1580156107f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108179190612b6a565b6004811115610828576108286129c7565b14610846576040516312aecd8160e01b815260040160405180910390fd5b600554604080516330638a9760e21b815290515f926001600160a01b03169163c18e2a5c9160048083019260209291908290030181865afa15801561088d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108b19190612b88565b9050808211156108d457604051632ca2f52b60e11b815260040160405180910390fd5b6005546001600160a01b031663e2c4aaec6108ee84612bb3565b6040518263ffffffff1660e01b815260040161090c91815260200190565b5f604051808303815f87803b158015610923575f5ffd5b505af1158015610935573d5f5f3e3d5ffd5b505060065461065392506001600160a01b031690503384611980565b6109596119d8565b6001600160a01b0381166109805760405163d92e233d60e01b815260040160405180910390fd5b6005546001600160a01b0316156109aa57604051630ea075bf60e21b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6109d46119d8565b6001600160a01b0381166109fb5760405163d92e233d60e01b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610a40573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a649190612b4b565b610a81576040516312aecd8160e01b815260040160405180910390fd5b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f6cc7ebdb6c8c53291c5ae16148cab9b049d23bf5bde5632900b40edff56fcb43905f90a250565b610ada6119d8565b805f03610afa576040516317dbc4cb60e21b815260040160405180910390fd5b6101f4811115610b1d576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610b62573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b869190612b4b565b610ba3576040516312aecd8160e01b815260040160405180910390fd5b600a55565b60118181548110610bb7575f80fd5b5f91825260209091200154905081565b6004546001600160a01b03163314610bf25760405163ea8e4eb560e01b815260040160405180910390fd5b610bfa611a0a565b565b610c046116d5565b6001600160a01b0316336001600160a01b031614158015610c35575060035461010090046001600160a01b03163314155b15610c535760405163ea8e4eb560e01b815260040160405180910390fd5b610c5b611958565b610c63611a56565b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610ca8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccc9190612b4b565b8015610d4f575060095460055460408051630a58ce2d60e11b8152905161ffff909316926001600160a01b03909216916314b19c5a916004808201926020929091908290030181865afa158015610d25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d499190612bcd565b61ffff16115b15610d6157610d5c611a7a565b610de8565b6001600954600160201b900460ff166003811115610d8157610d816129c7565b03610d8e57610d5c611ca7565b6002600954600160201b900460ff166003811115610dae57610dae6129c7565b03610dbb57610d5c611dfe565b6003600954600160201b900460ff166003811115610ddb57610ddb6129c7565b03610de857610de8611fc9565b6040517ff0094b59b7bc92e9fc611b14b5d3a34fe02530ac9bcf36c2c6f10147c3030c12905f90a16106536001600255565b60048054604051633821dad160e21b81526001600160a01b039091169163e0876b4491610e49913391016129f5565b602060405180830381865afa158015610e64573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e889190612b4b565b610ea55760405163ea8e4eb560e01b815260040160405180910390fd5b805f03610ed257600654604051636b30633560e01b81526106af916001600160a01b0316906004016129f5565b600654610653906001600160a01b03168383611980565b60048054604051633821dad160e21b81526001600160a01b039091169163e0876b4491610f18913391016129f5565b602060405180830381865afa158015610f33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f579190612b4b565b610ed25760405163ea8e4eb560e01b815260040160405180910390fd5b600e8181548110610bb7575f80fd5b6004546001600160a01b03163314610fae5760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0382161580610fcb57506001600160a01b038116155b15610fe95760405163d92e233d60e01b815260040160405180910390fd5b604051631ed3e4fb60e11b81526001600160a01b03821690633da7c9f6906110159085906004016129f5565b5f6040518083038186803b15801561102b575f5ffd5b505afa15801561103d573d5f5f3e3d5ffd5b505050506001600160a01b038281165f8181526008602052604080822080546001600160a01b0319169486169485179055517f2f2727c7b3d9ee55de5c114f0cb7997ac7251a4cbfca4f2b2dc6969d86cce4f49190a35050565b600480546040805163edcf9c1f60e01b815290515f936060936001600160a01b03169263edcf9c1f92818301926020928290030181865afa1580156110de573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111029190612b4b565b8015611185575060095460055460408051630a58ce2d60e11b8152905161ffff909316926001600160a01b03909216916314b19c5a916004808201926020929091908290030181865afa15801561115b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117f9190612bcd565b61ffff16115b156111935760019150611221565b6001600954600160201b900460ff1660038111156111b3576111b36129c7565b036111c15760019150611221565b6002600954600160201b900460ff1660038111156111e1576111e16129c7565b036111ef5760019150611221565b6003600954600160201b900460ff16600381111561120f5761120f6129c7565b0361121d5760019150611221565b5f91505b60405180602001604052805f81525090509250929050565b6112416119d8565b610bfa5f6122ee565b60048054604051633821dad160e21b815233926001600160a01b039092169163e0876b449161127b918591016129f5565b602060405180830381865afa158015611296573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ba9190612b4b565b15801561133257506004805460405163f764eb4560e01b81526001600160a01b039091169163f764eb45916112f1918591016129f5565b602060405180830381865afa15801561130c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113309190612b4b565b155b156113505760405163ea8e4eb560e01b815260040160405180910390fd5b815f0361137d57600654604051636b30633560e01b81526106af916001600160a01b0316906004016129f5565b5f816001600160a01b0316631f52692b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113de9190612bee565b6006549091506113f8906001600160a01b03168285611980565b505050565b6007546001600160a01b0316331461142857604051631a27eac360e11b815260040160405180910390fd5b805f0361145557600654604051636b30633560e01b81526106af916001600160a01b0316906004016129f5565b600554604080516302ad6a1760e11b815290515f926001600160a01b03169163055ad42e9160048083019260209291908290030181865afa15801561149c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c09190612b6a565b60048111156114d1576114d16129c7565b146114ef576040516312aecd8160e01b815260040160405180910390fd5b600654611507906001600160a01b0316333084612307565b6005546040516338b12abb60e21b8152600481018390526001600160a01b039091169063e2c4aaec906024015f604051808303815f87803b15801561154a575f5ffd5b505af115801561155c573d5f5f3e3d5ffd5b5050505050565b338061156d611701565b6001600160a01b031614611596578060405163118cdaa760e01b81526004016106af91906129f5565b610729816122ee565b600c818154811061073b575f80fd5b6004546001600160a01b031633146115d95760405163ea8e4eb560e01b815260040160405180910390fd5b610bfa612340565b6115e96119d8565b8060ff165f0361160c576040516317dbc4cb60e21b815260040160405180910390fd5b600860ff82161115611631576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611676573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169a9190612b4b565b6116b7576040516312aecd8160e01b815260040160405180910390fd5b6009805460ff909216620100000262ff000019909216919091179055565b5f546001600160a01b031690565b60108181548110610bb7575f80fd5b600d8181548110610bb7575f80fd5b6001546001600160a01b031690565b6117186119d8565b8060ff165f0361173b576040516317dbc4cb60e21b815260040160405180910390fd5b600560ff82161115611760576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa1580156117a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c99190612b4b565b6117e6576040516312aecd8160e01b815260040160405180910390fd5b600b805460ff191660ff92909216919091179055565b6118046119d8565b8060ff165f03611827576040516317dbc4cb60e21b815260040160405180910390fd5b600860ff8216111561184c576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611891573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b59190612b4b565b6118d2576040516312aecd8160e01b815260040160405180910390fd5b6009805460ff90921663010000000263ff00000019909216919091179055565b6118fa6119d8565b600180546001600160a01b0319166001600160a01b0383169081179091556119206116d5565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600280540361197a57604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b6113f883846001600160a01b031663a9059cbb85856040516024016119a6929190612c09565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061237d565b336119e16116d5565b6001600160a01b031614610bfa573360405163118cdaa760e01b81526004016106af91906129f5565b611a126123e0565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611a4c91906129f5565b60405180910390a1565b60035460ff1615610bfa5760405163d93c066560e01b815260040160405180910390fd5b60055460408051630a58ce2d60e11b815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa158015611ac1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae59190612bcd565b600954909150611afa9061ffff166001612c22565b61ffff168161ffff161015611b0c5750565b6009805461ffff191661ffff8316179055611b28600c5f6128a3565b611b33600d5f6128a3565b611b3e600f5f6128a3565b611b4960105f6128a3565b611b54600e5f6128a3565b611b5f60115f6128a3565b5f601281905560055460408051631716e21f60e11b815290516001600160a01b0390921692632e2dc43e926004808401938290030181865afa158015611ba7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bce9190810190612d70565b600c5f600d5f600f5f60105f600e5f60115f8c9190509080519060200190611bf79291906128be565b50508a51611c0a919060208d01906128be565b50508951611c1d919060208c01906128be565b50508851611c30919060208b0190612907565b50508751611c43919060208a01906128be565b50508651611c5691906020890190612907565b50506009805460ff60201b1916600160201b1790555050600c545f039250610729915050576009805460ff60201b1916600160211b179055600f545f0361072957506009805460ff60201b19169055565b6009545f90611cc89060ff620100008204811691600160281b900416612e80565b60095460ff91821692505f91611ce5916201000090041683612c22565b90506009600581819054906101000a900460ff16611d0290612ea3565b91906101000a81548160ff021916908360ff160217905550600c805490508161ffff161180611d365750600c5461ffff8216145b15611d545750600c546009805461ffff60201b1916600160211b1790555b815b8161ffff168161ffff1610156113f8575f600c8261ffff1681548110611d7e57611d7e612ec1565b5f918252602090912001546006546001600160a01b039182169250168103611da65750611df6565b5f600d8361ffff1681548110611dbe57611dbe612ec1565b905f5260205f2001549050611df38282600e8661ffff1681548110611de557611de5612ec1565b905f5260205f200154612403565b50505b600101611d56565b6009545f90611e1f9060ff620100008204811691600160281b900416612e80565b60095460ff91821692505f91611e3c916201000090041683612c22565b90506009600581819054906101000a900460ff16611e5990612ea3565b91906101000a81548160ff021916908360ff160217905550600f805490508161ffff161180611e8d5750600f5461ffff8216145b15611eab5750600f546009805461ffff60201b1916600360201b1790555b815b8161ffff168161ffff161015611f55575f600f8261ffff1681548110611ed557611ed5612ec1565b5f918252602090912001546006546001600160a01b039182169250168103611efd5750611f4d565b5f60108361ffff1681548110611f1557611f15612ec1565b905f5260205f2001549050611f4a828260118661ffff1681548110611f3c57611f3c612ec1565b905f5260205f2001546124fb565b50505b600101611ead565b50600f5461ffff821603610653576005546012546040516338b12abb60e21b81526001600160a01b039092169163e2c4aaec91611f989160040190815260200190565b5f604051808303815f87803b158015611faf575f5ffd5b505af1158015611fc1573d5f5f3e3d5ffd5b505050505050565b60048054604051631da09e4360e31b81525f926001600160a01b039092169163ed04f21891611ffa91859101612ed5565b5f60405180830381865afa158015612014573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261203b9190810190612ee9565b6009549091505f906120609060ff63010000008204811691600160281b900416612e80565b60095460ff91821692505f9161207e91630100000090041683612c22565b90506009600581819054906101000a900460ff1661209b90612ea3565b91906101000a81548160ff021916908360ff16021790555082518161ffff1611806120ca575082518161ffff16145b156120e1575081516009805461ffff60201b191690555b815b8161ffff168161ffff1610156122e8575f848261ffff168151811061210a5761210a612ec1565b60209081029190910101516005546040516309958e4960e11b81529192505f916001600160a01b039091169063132b1c929061214a9085906004016129f5565b602060405180830381865afa158015612165573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121899190612b88565b60055460405163e2638ff160e01b81529192505f916001600160a01b039091169063e2638ff1906121be9086906004016129f5565b602060405180830381865afa1580156121d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121fd9190612b88565b905061220a8383836125f0565b6004805460405163d11f1c3560e01b81526001600160a01b039091169163d11f1c3591612239918791016129f5565b602060405180830381865afa158015612254573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122789190612b4b565b156122da576004805460405163e8ffccb760e01b81526001600160a01b039091169163e8ffccb7916122ac918791016129f5565b5f604051808303815f87803b1580156122c3575f5ffd5b505af11580156122d5573d5f5f3e3d5ffd5b505050505b5050508060010190506120e3565b50505050565b600180546001600160a01b031916905561072981612779565b6040516001600160a01b0384811660248301528381166044830152606482018390526122e89186918216906323b872dd906084016119a6565b612348611a56565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a3f3390565b5f5f60205f8451602086015f885af18061239c576040513d5f823e3d81fd5b50505f513d915081156123b35780600114156123c0565b6001600160a01b0384163b155b156122e85783604051635274afe760e01b81526004016106af91906129f5565b60035460ff16610bfa57604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b038084165f90815260086020526040902054168061243b57604051635048c2af60e11b815260040160405180910390fd5b61244f6001600160a01b03851682856127c8565b604051636c197ff560e01b81525f906001600160a01b03831690636c197ff59061247f9088908890600401612c09565b6020604051808303815f875af115801561249b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124bf9190612b88565b90506124d56001600160a01b038616835f6127c8565b6124df8382612f22565b60125f8282546124ef9190612f41565b90915550505050505050565b6001600160a01b038084165f90815260086020526040902054168061253357604051635048c2af60e11b815260040160405180910390fd5b600b5461255c9082906125499060ff1685612f68565b6006546001600160a01b031691906127c8565b60405163cce7ec1360e01b81525f906001600160a01b0383169063cce7ec139061258c9088908890600401612c09565b6020604051808303815f875af11580156125a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125cc9190612b88565b6006549091506125e6906001600160a01b0316835f6127c8565b6124df8184612f22565b5f8390505f816001600160a01b0316630a605c6d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612631573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126559190612b88565b90505f826001600160a01b031663f64c6f326040518163ffffffff1660e01b8152600401602060405180830381865afa158015612694573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b89190612b88565b905081156127165760405163493a6e2160e01b8152600481018590526001600160a01b0384169063493a6e21906024015f604051808303815f87803b1580156126ff575f5ffd5b505af1158015612711573d5f5f3e3d5ffd5b505050505b8015611fc15760405163e5e9719360e01b8152600481018690526001600160a01b0384169063e5e97193906024015f604051808303815f87803b15801561275b575f5ffd5b505af115801561276d573d5f5f3e3d5ffd5b50505050505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f836001600160a01b031663095ea7b384846040516024016127eb929190612c09565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090506128248482612858565b6122e85761284e84856001600160a01b031663095ea7b3865f6040516024016119a6929190612c09565b6122e8848261237d565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015612897575081156128895780600114612897565b5f866001600160a01b03163b115b93505050505b92915050565b5080545f8255905f5260205f2090810190610729919061295a565b828054828255905f5260205f209081019282156128f7579160200282015b828111156128f75782518255916020019190600101906128dc565b5061290392915061295a565b5090565b828054828255905f5260205f209081019282156128f7579160200282015b828111156128f757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612925565b5b80821115612903575f815560010161295b565b6001600160a01b0381168114610729575f5ffd5b5f5f60408385031215612993575f5ffd5b8235915060208301356129a58161296e565b809150509250929050565b5f602082840312156129c0575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b60208101600483106129ef576129ef6129c7565b91905290565b6001600160a01b0391909116815260200190565b5f60208284031215612a19575f5ffd5b8135612a248161296e565b9392505050565b5f5f60208385031215612a3c575f5ffd5b82356001600160401b03811115612a51575f5ffd5b8301601f81018513612a61575f5ffd5b80356001600160401b03811115612a76575f5ffd5b856020828401011115612a87575f5ffd5b6020919091019590945092505050565b5f5f60408385031215612aa8575f5ffd5b8235612ab38161296e565b946020939093013593505050565b5f5f60408385031215612ad2575f5ffd5b8235612add8161296e565b915060208301356129a58161296e565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b5f60208284031215612b3b575f5ffd5b813560ff81168114612a24575f5ffd5b5f60208284031215612b5b575f5ffd5b81518015158114612a24575f5ffd5b5f60208284031215612b7a575f5ffd5b815160058110612a24575f5ffd5b5f60208284031215612b98575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b8201612bc757612bc7612b9f565b505f0390565b5f60208284031215612bdd575f5ffd5b815161ffff81168114612a24575f5ffd5b5f60208284031215612bfe575f5ffd5b8151612a248161296e565b6001600160a01b03929092168252602082015260400190565b61ffff818116838216019081111561289d5761289d612b9f565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715612c7857612c78612c3c565b604052919050565b5f6001600160401b03821115612c9857612c98612c3c565b5060051b60200190565b5f82601f830112612cb1575f5ffd5b8151612cc4612cbf82612c80565b612c50565b8082825260208201915060208360051b860101925085831115612ce5575f5ffd5b602085015b83811015612d0b578051612cfd8161296e565b835260209283019201612cea565b5095945050505050565b5f82601f830112612d24575f5ffd5b8151612d32612cbf82612c80565b8082825260208201915060208360051b860101925085831115612d53575f5ffd5b602085015b83811015612d0b578051835260209283019201612d58565b5f5f5f5f5f5f60c08789031215612d85575f5ffd5b86516001600160401b03811115612d9a575f5ffd5b612da689828a01612ca2565b602089015190975090506001600160401b03811115612dc3575f5ffd5b612dcf89828a01612d15565b604089015190965090506001600160401b03811115612dec575f5ffd5b612df889828a01612ca2565b606089015190955090506001600160401b03811115612e15575f5ffd5b612e2189828a01612d15565b608089015190945090506001600160401b03811115612e3e575f5ffd5b612e4a89828a01612d15565b60a089015190935090506001600160401b03811115612e67575f5ffd5b612e7389828a01612d15565b9150509295509295509295565b60ff8181168382160290811690818114612e9c57612e9c612b9f565b5092915050565b5f60ff821660ff8103612eb857612eb8612b9f565b60010192915050565b634e487b7160e01b5f52603260045260245ffd5b60208101600283106129ef576129ef6129c7565b5f60208284031215612ef9575f5ffd5b81516001600160401b03811115612f0e575f5ffd5b612f1a84828501612ca2565b949350505050565b8181035f831280158383131683831282161715612e9c57612e9c612b9f565b8082018281125f831280158216821582161715612f6057612f60612b9f565b505092915050565b808202811582820484141761289d5761289d612b9f56fea26469706673582212204b36372dc762818c5d229dc487c4880955bfbaca4b808eda1cd6c0358d03516164736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610222575f3560e01c8062f714ce1461022657806301c621c11461023b578063055ad42e1461024e57806309f2e19c146102785780630a861f2a146102985780630a8b78c7146102ab5780630babbef3146102be57806314b5d07f146102dd5780633369921a146102f0578063348ec5c8146103075780633af2a8c01461031a5780633e765a9e1461032d5780633f4ba83a146103405780634585e33b146103485780634adfc2e71461035b57806351edffb11461036e57806352e899fd146103815780635488cd621461039457806357be01c1146103a857806359017aa9146103bb5780635c975abb146103ce5780635dc228a0146103e45780635dd17ec3146103fc578063639bdf5a146103fc5780636e04ff0d14610404578063715018a6146104255780637158da7c1461042d578063741fca4b1461044057806376d58e1a1461045357806379502c551461046657806379ba5097146104795780638157c1ab146104815780638456cb59146104945780638689b2c51461049c5780638a0b0d38146104b05780638da5cb5b146104c3578063a0424ab9146104cb578063bc504975146104d3578063be1b26a4146104e6578063d3f3506d146104f9578063dab26e3b14610521578063e30c39781461052a578063e42ff8b614610532578063e6c3efd914610545578063ee6713df14610558578063f2fde38b14610579578063f851a4401461058c575b5f5ffd5b610239610234366004612982565b61059f565b005b6102396102493660046129b0565b610657565b60095461026290600160201b900460ff1681565b60405161026f91906129db565b60405180910390f35b61028b6102863660046129b0565b61072c565b60405161026f91906129f5565b6102396102a63660046129b0565b610754565b6102396102b9366004612a09565b610951565b600b546102cb9060ff1681565b60405160ff909116815260200161026f565b6102396102eb366004612a09565b6109cc565b6102f960125481565b60405190815260200161026f565b60055461028b906001600160a01b031681565b6102396103283660046129b0565b610ad2565b6102f961033b3660046129b0565b610ba8565b610239610bc7565b610239610356366004612a2b565b610bfc565b610239610369366004612a97565b610e1a565b61023961037c366004612a97565b610ee9565b6102f961038f3660046129b0565b610f74565b6009546102cb90600160281b900460ff1681565b6009546102cb9062010000900460ff1681565b6102396103c9366004612ac1565b610f83565b60035460ff16604051901515815260200161026f565b60035461028b9061010090046001600160a01b031681565b6102cb600881565b610417610412366004612a2b565b611097565b60405161026f929190612aed565b610239611239565b60065461028b906001600160a01b031681565b61023961044e3660046129b0565b61124a565b6102396104613660046129b0565b6113fd565b60045461028b906001600160a01b031681565b610239611563565b61028b61048f3660046129b0565b61159f565b6102396115ae565b6009546102cb906301000000900460ff1681565b6102396104be366004612b2b565b6115e1565b61028b6116d5565b6102cb600581565b6102f96104e13660046129b0565b6116e3565b6102f96104f43660046129b0565b6116f2565b61028b610507366004612a09565b60086020525f90815260409020546001600160a01b031681565b6102f9600a5481565b61028b611701565b610239610540366004612b2b565b611710565b610239610553366004612b2b565b6117fc565b6009546105669061ffff1681565b60405161ffff909116815260200161026f565b610239610587366004612a09565b6118f2565b60075461028b906001600160a01b031681565b6105a7611958565b6004805460405163f764eb4560e01b81526001600160a01b039091169163f764eb45916105d6913391016129f5565b602060405180830381865afa1580156105f1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106159190612b4b565b6106325760405163ea8e4eb560e01b815260040160405180910390fd5b600654610649906001600160a01b03168284611980565b6106536001600255565b5050565b6007546001600160a01b0316331461068257604051631a27eac360e11b815260040160405180910390fd5b805f036106b857600654604051636b30633560e01b81526106af916001600160a01b0316906004016129f5565b60405180910390fd5b600554604051637060444560e01b8152600481018390526001600160a01b03909116906370604445906024015f604051808303815f87803b1580156106fb575f5ffd5b505af115801561070d573d5f5f3e3d5ffd5b505060065461072992506001600160a01b031690503383611980565b50565b600f818154811061073b575f80fd5b5f918252602090912001546001600160a01b0316905081565b6007546001600160a01b0316331461077f57604051631a27eac360e11b815260040160405180910390fd5b805f036107ac57600654604051636b30633560e01b81526106af916001600160a01b0316906004016129f5565b600554604080516302ad6a1760e11b815290515f926001600160a01b03169163055ad42e9160048083019260209291908290030181865afa1580156107f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108179190612b6a565b6004811115610828576108286129c7565b14610846576040516312aecd8160e01b815260040160405180910390fd5b600554604080516330638a9760e21b815290515f926001600160a01b03169163c18e2a5c9160048083019260209291908290030181865afa15801561088d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108b19190612b88565b9050808211156108d457604051632ca2f52b60e11b815260040160405180910390fd5b6005546001600160a01b031663e2c4aaec6108ee84612bb3565b6040518263ffffffff1660e01b815260040161090c91815260200190565b5f604051808303815f87803b158015610923575f5ffd5b505af1158015610935573d5f5f3e3d5ffd5b505060065461065392506001600160a01b031690503384611980565b6109596119d8565b6001600160a01b0381166109805760405163d92e233d60e01b815260040160405180910390fd5b6005546001600160a01b0316156109aa57604051630ea075bf60e21b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6109d46119d8565b6001600160a01b0381166109fb5760405163d92e233d60e01b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610a40573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a649190612b4b565b610a81576040516312aecd8160e01b815260040160405180910390fd5b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f6cc7ebdb6c8c53291c5ae16148cab9b049d23bf5bde5632900b40edff56fcb43905f90a250565b610ada6119d8565b805f03610afa576040516317dbc4cb60e21b815260040160405180910390fd5b6101f4811115610b1d576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610b62573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b869190612b4b565b610ba3576040516312aecd8160e01b815260040160405180910390fd5b600a55565b60118181548110610bb7575f80fd5b5f91825260209091200154905081565b6004546001600160a01b03163314610bf25760405163ea8e4eb560e01b815260040160405180910390fd5b610bfa611a0a565b565b610c046116d5565b6001600160a01b0316336001600160a01b031614158015610c35575060035461010090046001600160a01b03163314155b15610c535760405163ea8e4eb560e01b815260040160405180910390fd5b610c5b611958565b610c63611a56565b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610ca8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccc9190612b4b565b8015610d4f575060095460055460408051630a58ce2d60e11b8152905161ffff909316926001600160a01b03909216916314b19c5a916004808201926020929091908290030181865afa158015610d25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d499190612bcd565b61ffff16115b15610d6157610d5c611a7a565b610de8565b6001600954600160201b900460ff166003811115610d8157610d816129c7565b03610d8e57610d5c611ca7565b6002600954600160201b900460ff166003811115610dae57610dae6129c7565b03610dbb57610d5c611dfe565b6003600954600160201b900460ff166003811115610ddb57610ddb6129c7565b03610de857610de8611fc9565b6040517ff0094b59b7bc92e9fc611b14b5d3a34fe02530ac9bcf36c2c6f10147c3030c12905f90a16106536001600255565b60048054604051633821dad160e21b81526001600160a01b039091169163e0876b4491610e49913391016129f5565b602060405180830381865afa158015610e64573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e889190612b4b565b610ea55760405163ea8e4eb560e01b815260040160405180910390fd5b805f03610ed257600654604051636b30633560e01b81526106af916001600160a01b0316906004016129f5565b600654610653906001600160a01b03168383611980565b60048054604051633821dad160e21b81526001600160a01b039091169163e0876b4491610f18913391016129f5565b602060405180830381865afa158015610f33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f579190612b4b565b610ed25760405163ea8e4eb560e01b815260040160405180910390fd5b600e8181548110610bb7575f80fd5b6004546001600160a01b03163314610fae5760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0382161580610fcb57506001600160a01b038116155b15610fe95760405163d92e233d60e01b815260040160405180910390fd5b604051631ed3e4fb60e11b81526001600160a01b03821690633da7c9f6906110159085906004016129f5565b5f6040518083038186803b15801561102b575f5ffd5b505afa15801561103d573d5f5f3e3d5ffd5b505050506001600160a01b038281165f8181526008602052604080822080546001600160a01b0319169486169485179055517f2f2727c7b3d9ee55de5c114f0cb7997ac7251a4cbfca4f2b2dc6969d86cce4f49190a35050565b600480546040805163edcf9c1f60e01b815290515f936060936001600160a01b03169263edcf9c1f92818301926020928290030181865afa1580156110de573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111029190612b4b565b8015611185575060095460055460408051630a58ce2d60e11b8152905161ffff909316926001600160a01b03909216916314b19c5a916004808201926020929091908290030181865afa15801561115b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117f9190612bcd565b61ffff16115b156111935760019150611221565b6001600954600160201b900460ff1660038111156111b3576111b36129c7565b036111c15760019150611221565b6002600954600160201b900460ff1660038111156111e1576111e16129c7565b036111ef5760019150611221565b6003600954600160201b900460ff16600381111561120f5761120f6129c7565b0361121d5760019150611221565b5f91505b60405180602001604052805f81525090509250929050565b6112416119d8565b610bfa5f6122ee565b60048054604051633821dad160e21b815233926001600160a01b039092169163e0876b449161127b918591016129f5565b602060405180830381865afa158015611296573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ba9190612b4b565b15801561133257506004805460405163f764eb4560e01b81526001600160a01b039091169163f764eb45916112f1918591016129f5565b602060405180830381865afa15801561130c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113309190612b4b565b155b156113505760405163ea8e4eb560e01b815260040160405180910390fd5b815f0361137d57600654604051636b30633560e01b81526106af916001600160a01b0316906004016129f5565b5f816001600160a01b0316631f52692b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113de9190612bee565b6006549091506113f8906001600160a01b03168285611980565b505050565b6007546001600160a01b0316331461142857604051631a27eac360e11b815260040160405180910390fd5b805f0361145557600654604051636b30633560e01b81526106af916001600160a01b0316906004016129f5565b600554604080516302ad6a1760e11b815290515f926001600160a01b03169163055ad42e9160048083019260209291908290030181865afa15801561149c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c09190612b6a565b60048111156114d1576114d16129c7565b146114ef576040516312aecd8160e01b815260040160405180910390fd5b600654611507906001600160a01b0316333084612307565b6005546040516338b12abb60e21b8152600481018390526001600160a01b039091169063e2c4aaec906024015f604051808303815f87803b15801561154a575f5ffd5b505af115801561155c573d5f5f3e3d5ffd5b5050505050565b338061156d611701565b6001600160a01b031614611596578060405163118cdaa760e01b81526004016106af91906129f5565b610729816122ee565b600c818154811061073b575f80fd5b6004546001600160a01b031633146115d95760405163ea8e4eb560e01b815260040160405180910390fd5b610bfa612340565b6115e96119d8565b8060ff165f0361160c576040516317dbc4cb60e21b815260040160405180910390fd5b600860ff82161115611631576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611676573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169a9190612b4b565b6116b7576040516312aecd8160e01b815260040160405180910390fd5b6009805460ff909216620100000262ff000019909216919091179055565b5f546001600160a01b031690565b60108181548110610bb7575f80fd5b600d8181548110610bb7575f80fd5b6001546001600160a01b031690565b6117186119d8565b8060ff165f0361173b576040516317dbc4cb60e21b815260040160405180910390fd5b600560ff82161115611760576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa1580156117a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c99190612b4b565b6117e6576040516312aecd8160e01b815260040160405180910390fd5b600b805460ff191660ff92909216919091179055565b6118046119d8565b8060ff165f03611827576040516317dbc4cb60e21b815260040160405180910390fd5b600860ff8216111561184c576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611891573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b59190612b4b565b6118d2576040516312aecd8160e01b815260040160405180910390fd5b6009805460ff90921663010000000263ff00000019909216919091179055565b6118fa6119d8565b600180546001600160a01b0319166001600160a01b0383169081179091556119206116d5565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600280540361197a57604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b6113f883846001600160a01b031663a9059cbb85856040516024016119a6929190612c09565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061237d565b336119e16116d5565b6001600160a01b031614610bfa573360405163118cdaa760e01b81526004016106af91906129f5565b611a126123e0565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611a4c91906129f5565b60405180910390a1565b60035460ff1615610bfa5760405163d93c066560e01b815260040160405180910390fd5b60055460408051630a58ce2d60e11b815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa158015611ac1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae59190612bcd565b600954909150611afa9061ffff166001612c22565b61ffff168161ffff161015611b0c5750565b6009805461ffff191661ffff8316179055611b28600c5f6128a3565b611b33600d5f6128a3565b611b3e600f5f6128a3565b611b4960105f6128a3565b611b54600e5f6128a3565b611b5f60115f6128a3565b5f601281905560055460408051631716e21f60e11b815290516001600160a01b0390921692632e2dc43e926004808401938290030181865afa158015611ba7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bce9190810190612d70565b600c5f600d5f600f5f60105f600e5f60115f8c9190509080519060200190611bf79291906128be565b50508a51611c0a919060208d01906128be565b50508951611c1d919060208c01906128be565b50508851611c30919060208b0190612907565b50508751611c43919060208a01906128be565b50508651611c5691906020890190612907565b50506009805460ff60201b1916600160201b1790555050600c545f039250610729915050576009805460ff60201b1916600160211b179055600f545f0361072957506009805460ff60201b19169055565b6009545f90611cc89060ff620100008204811691600160281b900416612e80565b60095460ff91821692505f91611ce5916201000090041683612c22565b90506009600581819054906101000a900460ff16611d0290612ea3565b91906101000a81548160ff021916908360ff160217905550600c805490508161ffff161180611d365750600c5461ffff8216145b15611d545750600c546009805461ffff60201b1916600160211b1790555b815b8161ffff168161ffff1610156113f8575f600c8261ffff1681548110611d7e57611d7e612ec1565b5f918252602090912001546006546001600160a01b039182169250168103611da65750611df6565b5f600d8361ffff1681548110611dbe57611dbe612ec1565b905f5260205f2001549050611df38282600e8661ffff1681548110611de557611de5612ec1565b905f5260205f200154612403565b50505b600101611d56565b6009545f90611e1f9060ff620100008204811691600160281b900416612e80565b60095460ff91821692505f91611e3c916201000090041683612c22565b90506009600581819054906101000a900460ff16611e5990612ea3565b91906101000a81548160ff021916908360ff160217905550600f805490508161ffff161180611e8d5750600f5461ffff8216145b15611eab5750600f546009805461ffff60201b1916600360201b1790555b815b8161ffff168161ffff161015611f55575f600f8261ffff1681548110611ed557611ed5612ec1565b5f918252602090912001546006546001600160a01b039182169250168103611efd5750611f4d565b5f60108361ffff1681548110611f1557611f15612ec1565b905f5260205f2001549050611f4a828260118661ffff1681548110611f3c57611f3c612ec1565b905f5260205f2001546124fb565b50505b600101611ead565b50600f5461ffff821603610653576005546012546040516338b12abb60e21b81526001600160a01b039092169163e2c4aaec91611f989160040190815260200190565b5f604051808303815f87803b158015611faf575f5ffd5b505af1158015611fc1573d5f5f3e3d5ffd5b505050505050565b60048054604051631da09e4360e31b81525f926001600160a01b039092169163ed04f21891611ffa91859101612ed5565b5f60405180830381865afa158015612014573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261203b9190810190612ee9565b6009549091505f906120609060ff63010000008204811691600160281b900416612e80565b60095460ff91821692505f9161207e91630100000090041683612c22565b90506009600581819054906101000a900460ff1661209b90612ea3565b91906101000a81548160ff021916908360ff16021790555082518161ffff1611806120ca575082518161ffff16145b156120e1575081516009805461ffff60201b191690555b815b8161ffff168161ffff1610156122e8575f848261ffff168151811061210a5761210a612ec1565b60209081029190910101516005546040516309958e4960e11b81529192505f916001600160a01b039091169063132b1c929061214a9085906004016129f5565b602060405180830381865afa158015612165573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121899190612b88565b60055460405163e2638ff160e01b81529192505f916001600160a01b039091169063e2638ff1906121be9086906004016129f5565b602060405180830381865afa1580156121d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121fd9190612b88565b905061220a8383836125f0565b6004805460405163d11f1c3560e01b81526001600160a01b039091169163d11f1c3591612239918791016129f5565b602060405180830381865afa158015612254573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122789190612b4b565b156122da576004805460405163e8ffccb760e01b81526001600160a01b039091169163e8ffccb7916122ac918791016129f5565b5f604051808303815f87803b1580156122c3575f5ffd5b505af11580156122d5573d5f5f3e3d5ffd5b505050505b5050508060010190506120e3565b50505050565b600180546001600160a01b031916905561072981612779565b6040516001600160a01b0384811660248301528381166044830152606482018390526122e89186918216906323b872dd906084016119a6565b612348611a56565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a3f3390565b5f5f60205f8451602086015f885af18061239c576040513d5f823e3d81fd5b50505f513d915081156123b35780600114156123c0565b6001600160a01b0384163b155b156122e85783604051635274afe760e01b81526004016106af91906129f5565b60035460ff16610bfa57604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b038084165f90815260086020526040902054168061243b57604051635048c2af60e11b815260040160405180910390fd5b61244f6001600160a01b03851682856127c8565b604051636c197ff560e01b81525f906001600160a01b03831690636c197ff59061247f9088908890600401612c09565b6020604051808303815f875af115801561249b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124bf9190612b88565b90506124d56001600160a01b038616835f6127c8565b6124df8382612f22565b60125f8282546124ef9190612f41565b90915550505050505050565b6001600160a01b038084165f90815260086020526040902054168061253357604051635048c2af60e11b815260040160405180910390fd5b600b5461255c9082906125499060ff1685612f68565b6006546001600160a01b031691906127c8565b60405163cce7ec1360e01b81525f906001600160a01b0383169063cce7ec139061258c9088908890600401612c09565b6020604051808303815f875af11580156125a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125cc9190612b88565b6006549091506125e6906001600160a01b0316835f6127c8565b6124df8184612f22565b5f8390505f816001600160a01b0316630a605c6d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612631573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126559190612b88565b90505f826001600160a01b031663f64c6f326040518163ffffffff1660e01b8152600401602060405180830381865afa158015612694573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b89190612b88565b905081156127165760405163493a6e2160e01b8152600481018590526001600160a01b0384169063493a6e21906024015f604051808303815f87803b1580156126ff575f5ffd5b505af1158015612711573d5f5f3e3d5ffd5b505050505b8015611fc15760405163e5e9719360e01b8152600481018690526001600160a01b0384169063e5e97193906024015f604051808303815f87803b15801561275b575f5ffd5b505af115801561276d573d5f5f3e3d5ffd5b50505050505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f836001600160a01b031663095ea7b384846040516024016127eb929190612c09565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090506128248482612858565b6122e85761284e84856001600160a01b031663095ea7b3865f6040516024016119a6929190612c09565b6122e8848261237d565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015612897575081156128895780600114612897565b5f866001600160a01b03163b115b93505050505b92915050565b5080545f8255905f5260205f2090810190610729919061295a565b828054828255905f5260205f209081019282156128f7579160200282015b828111156128f75782518255916020019190600101906128dc565b5061290392915061295a565b5090565b828054828255905f5260205f209081019282156128f7579160200282015b828111156128f757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612925565b5b80821115612903575f815560010161295b565b6001600160a01b0381168114610729575f5ffd5b5f5f60408385031215612993575f5ffd5b8235915060208301356129a58161296e565b809150509250929050565b5f602082840312156129c0575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b60208101600483106129ef576129ef6129c7565b91905290565b6001600160a01b0391909116815260200190565b5f60208284031215612a19575f5ffd5b8135612a248161296e565b9392505050565b5f5f60208385031215612a3c575f5ffd5b82356001600160401b03811115612a51575f5ffd5b8301601f81018513612a61575f5ffd5b80356001600160401b03811115612a76575f5ffd5b856020828401011115612a87575f5ffd5b6020919091019590945092505050565b5f5f60408385031215612aa8575f5ffd5b8235612ab38161296e565b946020939093013593505050565b5f5f60408385031215612ad2575f5ffd5b8235612add8161296e565b915060208301356129a58161296e565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b5f60208284031215612b3b575f5ffd5b813560ff81168114612a24575f5ffd5b5f60208284031215612b5b575f5ffd5b81518015158114612a24575f5ffd5b5f60208284031215612b7a575f5ffd5b815160058110612a24575f5ffd5b5f60208284031215612b98575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b8201612bc757612bc7612b9f565b505f0390565b5f60208284031215612bdd575f5ffd5b815161ffff81168114612a24575f5ffd5b5f60208284031215612bfe575f5ffd5b8151612a248161296e565b6001600160a01b03929092168252602082015260400190565b61ffff818116838216019081111561289d5761289d612b9f565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715612c7857612c78612c3c565b604052919050565b5f6001600160401b03821115612c9857612c98612c3c565b5060051b60200190565b5f82601f830112612cb1575f5ffd5b8151612cc4612cbf82612c80565b612c50565b8082825260208201915060208360051b860101925085831115612ce5575f5ffd5b602085015b83811015612d0b578051612cfd8161296e565b835260209283019201612cea565b5095945050505050565b5f82601f830112612d24575f5ffd5b8151612d32612cbf82612c80565b8082825260208201915060208360051b860101925085831115612d53575f5ffd5b602085015b83811015612d0b578051835260209283019201612d58565b5f5f5f5f5f5f60c08789031215612d85575f5ffd5b86516001600160401b03811115612d9a575f5ffd5b612da689828a01612ca2565b602089015190975090506001600160401b03811115612dc3575f5ffd5b612dcf89828a01612d15565b604089015190965090506001600160401b03811115612dec575f5ffd5b612df889828a01612ca2565b606089015190955090506001600160401b03811115612e15575f5ffd5b612e2189828a01612d15565b608089015190945090506001600160401b03811115612e3e575f5ffd5b612e4a89828a01612d15565b60a089015190935090506001600160401b03811115612e67575f5ffd5b612e7389828a01612d15565b9150509295509295509295565b60ff8181168382160290811690818114612e9c57612e9c612b9f565b5092915050565b5f60ff821660ff8103612eb857612eb8612b9f565b60010192915050565b634e487b7160e01b5f52603260045260245ffd5b60208101600283106129ef576129ef6129c7565b5f60208284031215612ef9575f5ffd5b81516001600160401b03811115612f0e575f5ffd5b612f1a84828501612ca2565b949350505050565b8181035f831280158383131683831282161715612e9c57612e9c612b9f565b8082018281125f831280158216821582161715612f6057612f60612b9f565b505092915050565b808202811582820484141761289d5761289d612b9f56fea26469706673582212204b36372dc762818c5d229dc487c4880955bfbaca4b808eda1cd6c0358d03516164736f6c634300081c0033", + "bytecode": "0x608060405234801561000f575f5ffd5b5060405161333d38038061333d83398101604081905261002e91610293565b826001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006581610214565b5060016002556001600160a01b0382166100925760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100b95760405163d92e233d60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b038416908117825560408051631c56369f60e21b815290519192637158da7c9282820192602092908290030181865afa15801561010d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013191906102dd565b600680546001600160a01b0319166001600160a01b0392831617905560048054604080516303e1469160e61b81529051919093169263f851a44092818101926020929091908290030181865afa15801561018d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101b191906102dd565b600780546001600160a01b0319166001600160a01b0392831617905560038054610100600160a81b0319166101009390921692909202179055505060098054630101000064ffffff000019909116179055600b805460ff191660021790556102ff565b600180546001600160a01b031916905561022d81610230565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461022d575f5ffd5b5f5f5f606084860312156102a5575f5ffd5b83516102b08161027f565b60208501519093506102c18161027f565b60408501519092506102d28161027f565b809150509250925092565b5f602082840312156102ed575f5ffd5b81516102f88161027f565b9392505050565b6130318061030c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610222575f3560e01c8062f714ce1461022657806301c621c11461023b578063055ad42e1461024e57806309f2e19c146102785780630a861f2a146102985780630a8b78c7146102ab5780630babbef3146102be57806314b5d07f146102dd5780633369921a146102f0578063348ec5c8146103075780633af2a8c01461031a5780633e765a9e1461032d5780633f4ba83a146103405780634585e33b146103485780634adfc2e71461035b57806351edffb11461036e57806352e899fd146103815780635488cd621461039457806357be01c1146103a857806359017aa9146103bb5780635c975abb146103ce5780635dc228a0146103e45780635dd17ec3146103fc578063639bdf5a146103fc5780636e04ff0d14610404578063715018a6146104255780637158da7c1461042d578063741fca4b1461044057806376d58e1a1461045357806379502c551461046657806379ba5097146104795780638157c1ab146104815780638456cb59146104945780638689b2c51461049c5780638a0b0d38146104b05780638da5cb5b146104c3578063a0424ab9146104cb578063bc504975146104d3578063be1b26a4146104e6578063d3f3506d146104f9578063dab26e3b14610521578063e30c39781461052a578063e42ff8b614610532578063e6c3efd914610545578063ee6713df14610558578063f2fde38b14610579578063f851a4401461058c575b5f5ffd5b6102396102343660046129fe565b61059f565b005b610239610249366004612a2c565b610657565b60095461026290600160201b900460ff1681565b60405161026f9190612a57565b60405180910390f35b61028b610286366004612a2c565b61072c565b60405161026f9190612a71565b6102396102a6366004612a2c565b610754565b6102396102b9366004612a85565b610951565b600b546102cb9060ff1681565b60405160ff909116815260200161026f565b6102396102eb366004612a85565b6109cc565b6102f960125481565b60405190815260200161026f565b60055461028b906001600160a01b031681565b610239610328366004612a2c565b610ad2565b6102f961033b366004612a2c565b610ba8565b610239610bc7565b610239610356366004612aa7565b610bfc565b610239610369366004612b13565b610e1a565b61023961037c366004612b13565b610ee9565b6102f961038f366004612a2c565b610f74565b6009546102cb90600160281b900460ff1681565b6009546102cb9062010000900460ff1681565b6102396103c9366004612b3d565b610f83565b60035460ff16604051901515815260200161026f565b60035461028b9061010090046001600160a01b031681565b6102cb600881565b610417610412366004612aa7565b611097565b60405161026f929190612b69565b610239611239565b60065461028b906001600160a01b031681565b61023961044e366004612a2c565b61124a565b610239610461366004612a2c565b6113fd565b60045461028b906001600160a01b031681565b610239611563565b61028b61048f366004612a2c565b61159f565b6102396115ae565b6009546102cb906301000000900460ff1681565b6102396104be366004612ba7565b6115e1565b61028b6116d5565b6102cb600581565b6102f96104e1366004612a2c565b6116e3565b6102f96104f4366004612a2c565b6116f2565b61028b610507366004612a85565b60086020525f90815260409020546001600160a01b031681565b6102f9600a5481565b61028b611701565b610239610540366004612ba7565b611710565b610239610553366004612ba7565b6117fc565b6009546105669061ffff1681565b60405161ffff909116815260200161026f565b610239610587366004612a85565b6118f2565b60075461028b906001600160a01b031681565b6105a7611958565b6004805460405163f764eb4560e01b81526001600160a01b039091169163f764eb45916105d691339101612a71565b602060405180830381865afa1580156105f1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106159190612bc7565b6106325760405163ea8e4eb560e01b815260040160405180910390fd5b600654610649906001600160a01b03168284611980565b6106536001600255565b5050565b6007546001600160a01b0316331461068257604051631a27eac360e11b815260040160405180910390fd5b805f036106b857600654604051636b30633560e01b81526106af916001600160a01b031690600401612a71565b60405180910390fd5b600554604051637060444560e01b8152600481018390526001600160a01b03909116906370604445906024015f604051808303815f87803b1580156106fb575f5ffd5b505af115801561070d573d5f5f3e3d5ffd5b505060065461072992506001600160a01b031690503383611980565b50565b600f818154811061073b575f80fd5b5f918252602090912001546001600160a01b0316905081565b6007546001600160a01b0316331461077f57604051631a27eac360e11b815260040160405180910390fd5b805f036107ac57600654604051636b30633560e01b81526106af916001600160a01b031690600401612a71565b600554604080516302ad6a1760e11b815290515f926001600160a01b03169163055ad42e9160048083019260209291908290030181865afa1580156107f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108179190612be6565b600481111561082857610828612a43565b14610846576040516312aecd8160e01b815260040160405180910390fd5b600554604080516330638a9760e21b815290515f926001600160a01b03169163c18e2a5c9160048083019260209291908290030181865afa15801561088d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108b19190612c04565b9050808211156108d457604051632ca2f52b60e11b815260040160405180910390fd5b6005546001600160a01b031663e2c4aaec6108ee84612c2f565b6040518263ffffffff1660e01b815260040161090c91815260200190565b5f604051808303815f87803b158015610923575f5ffd5b505af1158015610935573d5f5f3e3d5ffd5b505060065461065392506001600160a01b031690503384611980565b6109596119d8565b6001600160a01b0381166109805760405163d92e233d60e01b815260040160405180910390fd5b6005546001600160a01b0316156109aa57604051630ea075bf60e21b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6109d46119d8565b6001600160a01b0381166109fb5760405163d92e233d60e01b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610a40573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a649190612bc7565b610a81576040516312aecd8160e01b815260040160405180910390fd5b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f6cc7ebdb6c8c53291c5ae16148cab9b049d23bf5bde5632900b40edff56fcb43905f90a250565b610ada6119d8565b805f03610afa576040516317dbc4cb60e21b815260040160405180910390fd5b6101f4811115610b1d576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610b62573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b869190612bc7565b610ba3576040516312aecd8160e01b815260040160405180910390fd5b600a55565b60118181548110610bb7575f80fd5b5f91825260209091200154905081565b6004546001600160a01b03163314610bf25760405163ea8e4eb560e01b815260040160405180910390fd5b610bfa611a0a565b565b610c046116d5565b6001600160a01b0316336001600160a01b031614158015610c35575060035461010090046001600160a01b03163314155b15610c535760405163ea8e4eb560e01b815260040160405180910390fd5b610c5b611958565b610c63611a56565b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610ca8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccc9190612bc7565b8015610d4f575060095460055460408051630a58ce2d60e11b8152905161ffff909316926001600160a01b03909216916314b19c5a916004808201926020929091908290030181865afa158015610d25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d499190612c49565b61ffff16115b15610d6157610d5c611a7a565b610de8565b6001600954600160201b900460ff166003811115610d8157610d81612a43565b03610d8e57610d5c611ca7565b6002600954600160201b900460ff166003811115610dae57610dae612a43565b03610dbb57610d5c611dfe565b6003600954600160201b900460ff166003811115610ddb57610ddb612a43565b03610de857610de8611fc9565b6040517ff0094b59b7bc92e9fc611b14b5d3a34fe02530ac9bcf36c2c6f10147c3030c12905f90a16106536001600255565b60048054604051633821dad160e21b81526001600160a01b039091169163e0876b4491610e4991339101612a71565b602060405180830381865afa158015610e64573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e889190612bc7565b610ea55760405163ea8e4eb560e01b815260040160405180910390fd5b805f03610ed257600654604051636b30633560e01b81526106af916001600160a01b031690600401612a71565b600654610653906001600160a01b03168383611980565b60048054604051633821dad160e21b81526001600160a01b039091169163e0876b4491610f1891339101612a71565b602060405180830381865afa158015610f33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f579190612bc7565b610ed25760405163ea8e4eb560e01b815260040160405180910390fd5b600e8181548110610bb7575f80fd5b6004546001600160a01b03163314610fae5760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0382161580610fcb57506001600160a01b038116155b15610fe95760405163d92e233d60e01b815260040160405180910390fd5b604051631ed3e4fb60e11b81526001600160a01b03821690633da7c9f690611015908590600401612a71565b5f6040518083038186803b15801561102b575f5ffd5b505afa15801561103d573d5f5f3e3d5ffd5b505050506001600160a01b038281165f8181526008602052604080822080546001600160a01b0319169486169485179055517f2f2727c7b3d9ee55de5c114f0cb7997ac7251a4cbfca4f2b2dc6969d86cce4f49190a35050565b600480546040805163edcf9c1f60e01b815290515f936060936001600160a01b03169263edcf9c1f92818301926020928290030181865afa1580156110de573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111029190612bc7565b8015611185575060095460055460408051630a58ce2d60e11b8152905161ffff909316926001600160a01b03909216916314b19c5a916004808201926020929091908290030181865afa15801561115b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117f9190612c49565b61ffff16115b156111935760019150611221565b6001600954600160201b900460ff1660038111156111b3576111b3612a43565b036111c15760019150611221565b6002600954600160201b900460ff1660038111156111e1576111e1612a43565b036111ef5760019150611221565b6003600954600160201b900460ff16600381111561120f5761120f612a43565b0361121d5760019150611221565b5f91505b60405180602001604052805f81525090509250929050565b6112416119d8565b610bfa5f6122ee565b60048054604051633821dad160e21b815233926001600160a01b039092169163e0876b449161127b91859101612a71565b602060405180830381865afa158015611296573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ba9190612bc7565b15801561133257506004805460405163f764eb4560e01b81526001600160a01b039091169163f764eb45916112f191859101612a71565b602060405180830381865afa15801561130c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113309190612bc7565b155b156113505760405163ea8e4eb560e01b815260040160405180910390fd5b815f0361137d57600654604051636b30633560e01b81526106af916001600160a01b031690600401612a71565b5f816001600160a01b0316631f52692b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113de9190612c6a565b6006549091506113f8906001600160a01b03168285611980565b505050565b6007546001600160a01b0316331461142857604051631a27eac360e11b815260040160405180910390fd5b805f0361145557600654604051636b30633560e01b81526106af916001600160a01b031690600401612a71565b600554604080516302ad6a1760e11b815290515f926001600160a01b03169163055ad42e9160048083019260209291908290030181865afa15801561149c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c09190612be6565b60048111156114d1576114d1612a43565b146114ef576040516312aecd8160e01b815260040160405180910390fd5b600654611507906001600160a01b0316333084612307565b6005546040516338b12abb60e21b8152600481018390526001600160a01b039091169063e2c4aaec906024015f604051808303815f87803b15801561154a575f5ffd5b505af115801561155c573d5f5f3e3d5ffd5b5050505050565b338061156d611701565b6001600160a01b031614611596578060405163118cdaa760e01b81526004016106af9190612a71565b610729816122ee565b600c818154811061073b575f80fd5b6004546001600160a01b031633146115d95760405163ea8e4eb560e01b815260040160405180910390fd5b610bfa612340565b6115e96119d8565b8060ff165f0361160c576040516317dbc4cb60e21b815260040160405180910390fd5b600860ff82161115611631576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611676573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169a9190612bc7565b6116b7576040516312aecd8160e01b815260040160405180910390fd5b6009805460ff909216620100000262ff000019909216919091179055565b5f546001600160a01b031690565b60108181548110610bb7575f80fd5b600d8181548110610bb7575f80fd5b6001546001600160a01b031690565b6117186119d8565b8060ff165f0361173b576040516317dbc4cb60e21b815260040160405180910390fd5b600560ff82161115611760576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa1580156117a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c99190612bc7565b6117e6576040516312aecd8160e01b815260040160405180910390fd5b600b805460ff191660ff92909216919091179055565b6118046119d8565b8060ff165f03611827576040516317dbc4cb60e21b815260040160405180910390fd5b600860ff8216111561184c576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611891573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b59190612bc7565b6118d2576040516312aecd8160e01b815260040160405180910390fd5b6009805460ff90921663010000000263ff00000019909216919091179055565b6118fa6119d8565b600180546001600160a01b0319166001600160a01b0383169081179091556119206116d5565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600280540361197a57604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b6113f883846001600160a01b031663a9059cbb85856040516024016119a6929190612c85565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061237d565b336119e16116d5565b6001600160a01b031614610bfa573360405163118cdaa760e01b81526004016106af9190612a71565b611a126123e0565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611a4c9190612a71565b60405180910390a1565b60035460ff1615610bfa5760405163d93c066560e01b815260040160405180910390fd5b60055460408051630a58ce2d60e11b815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa158015611ac1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae59190612c49565b600954909150611afa9061ffff166001612c9e565b61ffff168161ffff161015611b0c5750565b6009805461ffff191661ffff8316179055611b28600c5f61291f565b611b33600d5f61291f565b611b3e600f5f61291f565b611b4960105f61291f565b611b54600e5f61291f565b611b5f60115f61291f565b5f601281905560055460408051631716e21f60e11b815290516001600160a01b0390921692632e2dc43e926004808401938290030181865afa158015611ba7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bce9190810190612dec565b600c5f600d5f600f5f60105f600e5f60115f8c9190509080519060200190611bf792919061293a565b50508a51611c0a919060208d019061293a565b50508951611c1d919060208c019061293a565b50508851611c30919060208b0190612983565b50508751611c43919060208a019061293a565b50508651611c5691906020890190612983565b50506009805460ff60201b1916600160201b1790555050600c545f039250610729915050576009805460ff60201b1916600160211b179055600f545f0361072957506009805460ff60201b19169055565b6009545f90611cc89060ff620100008204811691600160281b900416612efc565b60095460ff91821692505f91611ce5916201000090041683612c9e565b90506009600581819054906101000a900460ff16611d0290612f1f565b91906101000a81548160ff021916908360ff160217905550600c805490508161ffff161180611d365750600c5461ffff8216145b15611d545750600c546009805461ffff60201b1916600160211b1790555b815b8161ffff168161ffff1610156113f8575f600c8261ffff1681548110611d7e57611d7e612f3d565b5f918252602090912001546006546001600160a01b039182169250168103611da65750611df6565b5f600d8361ffff1681548110611dbe57611dbe612f3d565b905f5260205f2001549050611df38282600e8661ffff1681548110611de557611de5612f3d565b905f5260205f200154612403565b50505b600101611d56565b6009545f90611e1f9060ff620100008204811691600160281b900416612efc565b60095460ff91821692505f91611e3c916201000090041683612c9e565b90506009600581819054906101000a900460ff16611e5990612f1f565b91906101000a81548160ff021916908360ff160217905550600f805490508161ffff161180611e8d5750600f5461ffff8216145b15611eab5750600f546009805461ffff60201b1916600360201b1790555b815b8161ffff168161ffff161015611f55575f600f8261ffff1681548110611ed557611ed5612f3d565b5f918252602090912001546006546001600160a01b039182169250168103611efd5750611f4d565b5f60108361ffff1681548110611f1557611f15612f3d565b905f5260205f2001549050611f4a828260118661ffff1681548110611f3c57611f3c612f3d565b905f5260205f2001546124fb565b50505b600101611ead565b50600f5461ffff821603610653576005546012546040516338b12abb60e21b81526001600160a01b039092169163e2c4aaec91611f989160040190815260200190565b5f604051808303815f87803b158015611faf575f5ffd5b505af1158015611fc1573d5f5f3e3d5ffd5b505050505050565b60048054604051631da09e4360e31b81525f926001600160a01b039092169163ed04f21891611ffa91859101612f51565b5f60405180830381865afa158015612014573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261203b9190810190612f65565b6009549091505f906120609060ff63010000008204811691600160281b900416612efc565b60095460ff91821692505f9161207e91630100000090041683612c9e565b90506009600581819054906101000a900460ff1661209b90612f1f565b91906101000a81548160ff021916908360ff16021790555082518161ffff1611806120ca575082518161ffff16145b156120e1575081516009805461ffff60201b191690555b815b8161ffff168161ffff1610156122e8575f848261ffff168151811061210a5761210a612f3d565b60209081029190910101516005546040516309958e4960e11b81529192505f916001600160a01b039091169063132b1c929061214a908590600401612a71565b602060405180830381865afa158015612165573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121899190612c04565b60055460405163e2638ff160e01b81529192505f916001600160a01b039091169063e2638ff1906121be908690600401612a71565b602060405180830381865afa1580156121d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121fd9190612c04565b905061220a8383836125f0565b6004805460405163d11f1c3560e01b81526001600160a01b039091169163d11f1c359161223991879101612a71565b602060405180830381865afa158015612254573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122789190612bc7565b156122da576004805460405163e8ffccb760e01b81526001600160a01b039091169163e8ffccb7916122ac91879101612a71565b5f604051808303815f87803b1580156122c3575f5ffd5b505af11580156122d5573d5f5f3e3d5ffd5b505050505b5050508060010190506120e3565b50505050565b600180546001600160a01b0319169055610729816127f5565b6040516001600160a01b0384811660248301528381166044830152606482018390526122e89186918216906323b872dd906084016119a6565b612348611a56565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a3f3390565b5f5f60205f8451602086015f885af18061239c576040513d5f823e3d81fd5b50505f513d915081156123b35780600114156123c0565b6001600160a01b0384163b155b156122e85783604051635274afe760e01b81526004016106af9190612a71565b60035460ff16610bfa57604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b038084165f90815260086020526040902054168061243b57604051635048c2af60e11b815260040160405180910390fd5b61244f6001600160a01b0385168285612844565b604051636c197ff560e01b81525f906001600160a01b03831690636c197ff59061247f9088908890600401612c85565b6020604051808303815f875af115801561249b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124bf9190612c04565b90506124d56001600160a01b038616835f612844565b6124df8382612f9e565b60125f8282546124ef9190612fbd565b90915550505050505050565b6001600160a01b038084165f90815260086020526040902054168061253357604051635048c2af60e11b815260040160405180910390fd5b600b5461255c9082906125499060ff1685612fe4565b6006546001600160a01b03169190612844565b60405163cce7ec1360e01b81525f906001600160a01b0383169063cce7ec139061258c9088908890600401612c85565b6020604051808303815f875af11580156125a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125cc9190612c04565b6006549091506125e6906001600160a01b0316835f612844565b6124df8184612f9e565b600480546040805163179b714360e31b8152905186935f936001600160a01b03169263bcdb8a1892818301926020928290030181865afa158015612636573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061265a9190612c04565b604051637bee6cb760e11b8152600481018290529091505f906001600160a01b0384169063f7dcd96e90602401602060405180830381865afa1580156126a2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c69190612c04565b60405163178c864d60e11b8152600481018490529091505f906001600160a01b03851690632f190c9a90602401602060405180830381865afa15801561270e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127329190612c04565b905081156127905760405163493a6e2160e01b8152600481018690526001600160a01b0385169063493a6e21906024015f604051808303815f87803b158015612779575f5ffd5b505af115801561278b573d5f5f3e3d5ffd5b505050505b80156127ec5760405163e5e9719360e01b8152600481018790526001600160a01b0385169063e5e97193906024015f604051808303815f87803b1580156127d5575f5ffd5b505af11580156127e7573d5f5f3e3d5ffd5b505050505b50505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f836001600160a01b031663095ea7b38484604051602401612867929190612c85565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090506128a084826128d4565b6122e8576128ca84856001600160a01b031663095ea7b3865f6040516024016119a6929190612c85565b6122e8848261237d565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015612913575081156129055780600114612913565b5f866001600160a01b03163b115b93505050505b92915050565b5080545f8255905f5260205f209081019061072991906129d6565b828054828255905f5260205f20908101928215612973579160200282015b82811115612973578251825591602001919060010190612958565b5061297f9291506129d6565b5090565b828054828255905f5260205f20908101928215612973579160200282015b8281111561297357825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906129a1565b5b8082111561297f575f81556001016129d7565b6001600160a01b0381168114610729575f5ffd5b5f5f60408385031215612a0f575f5ffd5b823591506020830135612a21816129ea565b809150509250929050565b5f60208284031215612a3c575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b6020810160048310612a6b57612a6b612a43565b91905290565b6001600160a01b0391909116815260200190565b5f60208284031215612a95575f5ffd5b8135612aa0816129ea565b9392505050565b5f5f60208385031215612ab8575f5ffd5b82356001600160401b03811115612acd575f5ffd5b8301601f81018513612add575f5ffd5b80356001600160401b03811115612af2575f5ffd5b856020828401011115612b03575f5ffd5b6020919091019590945092505050565b5f5f60408385031215612b24575f5ffd5b8235612b2f816129ea565b946020939093013593505050565b5f5f60408385031215612b4e575f5ffd5b8235612b59816129ea565b91506020830135612a21816129ea565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b5f60208284031215612bb7575f5ffd5b813560ff81168114612aa0575f5ffd5b5f60208284031215612bd7575f5ffd5b81518015158114612aa0575f5ffd5b5f60208284031215612bf6575f5ffd5b815160058110612aa0575f5ffd5b5f60208284031215612c14575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b8201612c4357612c43612c1b565b505f0390565b5f60208284031215612c59575f5ffd5b815161ffff81168114612aa0575f5ffd5b5f60208284031215612c7a575f5ffd5b8151612aa0816129ea565b6001600160a01b03929092168252602082015260400190565b61ffff818116838216019081111561291957612919612c1b565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715612cf457612cf4612cb8565b604052919050565b5f6001600160401b03821115612d1457612d14612cb8565b5060051b60200190565b5f82601f830112612d2d575f5ffd5b8151612d40612d3b82612cfc565b612ccc565b8082825260208201915060208360051b860101925085831115612d61575f5ffd5b602085015b83811015612d87578051612d79816129ea565b835260209283019201612d66565b5095945050505050565b5f82601f830112612da0575f5ffd5b8151612dae612d3b82612cfc565b8082825260208201915060208360051b860101925085831115612dcf575f5ffd5b602085015b83811015612d87578051835260209283019201612dd4565b5f5f5f5f5f5f60c08789031215612e01575f5ffd5b86516001600160401b03811115612e16575f5ffd5b612e2289828a01612d1e565b602089015190975090506001600160401b03811115612e3f575f5ffd5b612e4b89828a01612d91565b604089015190965090506001600160401b03811115612e68575f5ffd5b612e7489828a01612d1e565b606089015190955090506001600160401b03811115612e91575f5ffd5b612e9d89828a01612d91565b608089015190945090506001600160401b03811115612eba575f5ffd5b612ec689828a01612d91565b60a089015190935090506001600160401b03811115612ee3575f5ffd5b612eef89828a01612d91565b9150509295509295509295565b60ff8181168382160290811690818114612f1857612f18612c1b565b5092915050565b5f60ff821660ff8103612f3457612f34612c1b565b60010192915050565b634e487b7160e01b5f52603260045260245ffd5b6020810160028310612a6b57612a6b612a43565b5f60208284031215612f75575f5ffd5b81516001600160401b03811115612f8a575f5ffd5b612f9684828501612d1e565b949350505050565b8181035f831280158383131683831282161715612f1857612f18612c1b565b8082018281125f831280158216821582161715612fdc57612fdc612c1b565b505092915050565b808202811582820484141761291957612919612c1b56fea2646970667358221220767474f8fafa895109469bf1a05d4a11e0bd4e55060b11c5c44ddaeb8290471e64736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610222575f3560e01c8062f714ce1461022657806301c621c11461023b578063055ad42e1461024e57806309f2e19c146102785780630a861f2a146102985780630a8b78c7146102ab5780630babbef3146102be57806314b5d07f146102dd5780633369921a146102f0578063348ec5c8146103075780633af2a8c01461031a5780633e765a9e1461032d5780633f4ba83a146103405780634585e33b146103485780634adfc2e71461035b57806351edffb11461036e57806352e899fd146103815780635488cd621461039457806357be01c1146103a857806359017aa9146103bb5780635c975abb146103ce5780635dc228a0146103e45780635dd17ec3146103fc578063639bdf5a146103fc5780636e04ff0d14610404578063715018a6146104255780637158da7c1461042d578063741fca4b1461044057806376d58e1a1461045357806379502c551461046657806379ba5097146104795780638157c1ab146104815780638456cb59146104945780638689b2c51461049c5780638a0b0d38146104b05780638da5cb5b146104c3578063a0424ab9146104cb578063bc504975146104d3578063be1b26a4146104e6578063d3f3506d146104f9578063dab26e3b14610521578063e30c39781461052a578063e42ff8b614610532578063e6c3efd914610545578063ee6713df14610558578063f2fde38b14610579578063f851a4401461058c575b5f5ffd5b6102396102343660046129fe565b61059f565b005b610239610249366004612a2c565b610657565b60095461026290600160201b900460ff1681565b60405161026f9190612a57565b60405180910390f35b61028b610286366004612a2c565b61072c565b60405161026f9190612a71565b6102396102a6366004612a2c565b610754565b6102396102b9366004612a85565b610951565b600b546102cb9060ff1681565b60405160ff909116815260200161026f565b6102396102eb366004612a85565b6109cc565b6102f960125481565b60405190815260200161026f565b60055461028b906001600160a01b031681565b610239610328366004612a2c565b610ad2565b6102f961033b366004612a2c565b610ba8565b610239610bc7565b610239610356366004612aa7565b610bfc565b610239610369366004612b13565b610e1a565b61023961037c366004612b13565b610ee9565b6102f961038f366004612a2c565b610f74565b6009546102cb90600160281b900460ff1681565b6009546102cb9062010000900460ff1681565b6102396103c9366004612b3d565b610f83565b60035460ff16604051901515815260200161026f565b60035461028b9061010090046001600160a01b031681565b6102cb600881565b610417610412366004612aa7565b611097565b60405161026f929190612b69565b610239611239565b60065461028b906001600160a01b031681565b61023961044e366004612a2c565b61124a565b610239610461366004612a2c565b6113fd565b60045461028b906001600160a01b031681565b610239611563565b61028b61048f366004612a2c565b61159f565b6102396115ae565b6009546102cb906301000000900460ff1681565b6102396104be366004612ba7565b6115e1565b61028b6116d5565b6102cb600581565b6102f96104e1366004612a2c565b6116e3565b6102f96104f4366004612a2c565b6116f2565b61028b610507366004612a85565b60086020525f90815260409020546001600160a01b031681565b6102f9600a5481565b61028b611701565b610239610540366004612ba7565b611710565b610239610553366004612ba7565b6117fc565b6009546105669061ffff1681565b60405161ffff909116815260200161026f565b610239610587366004612a85565b6118f2565b60075461028b906001600160a01b031681565b6105a7611958565b6004805460405163f764eb4560e01b81526001600160a01b039091169163f764eb45916105d691339101612a71565b602060405180830381865afa1580156105f1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106159190612bc7565b6106325760405163ea8e4eb560e01b815260040160405180910390fd5b600654610649906001600160a01b03168284611980565b6106536001600255565b5050565b6007546001600160a01b0316331461068257604051631a27eac360e11b815260040160405180910390fd5b805f036106b857600654604051636b30633560e01b81526106af916001600160a01b031690600401612a71565b60405180910390fd5b600554604051637060444560e01b8152600481018390526001600160a01b03909116906370604445906024015f604051808303815f87803b1580156106fb575f5ffd5b505af115801561070d573d5f5f3e3d5ffd5b505060065461072992506001600160a01b031690503383611980565b50565b600f818154811061073b575f80fd5b5f918252602090912001546001600160a01b0316905081565b6007546001600160a01b0316331461077f57604051631a27eac360e11b815260040160405180910390fd5b805f036107ac57600654604051636b30633560e01b81526106af916001600160a01b031690600401612a71565b600554604080516302ad6a1760e11b815290515f926001600160a01b03169163055ad42e9160048083019260209291908290030181865afa1580156107f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108179190612be6565b600481111561082857610828612a43565b14610846576040516312aecd8160e01b815260040160405180910390fd5b600554604080516330638a9760e21b815290515f926001600160a01b03169163c18e2a5c9160048083019260209291908290030181865afa15801561088d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108b19190612c04565b9050808211156108d457604051632ca2f52b60e11b815260040160405180910390fd5b6005546001600160a01b031663e2c4aaec6108ee84612c2f565b6040518263ffffffff1660e01b815260040161090c91815260200190565b5f604051808303815f87803b158015610923575f5ffd5b505af1158015610935573d5f5f3e3d5ffd5b505060065461065392506001600160a01b031690503384611980565b6109596119d8565b6001600160a01b0381166109805760405163d92e233d60e01b815260040160405180910390fd5b6005546001600160a01b0316156109aa57604051630ea075bf60e21b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6109d46119d8565b6001600160a01b0381166109fb5760405163d92e233d60e01b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610a40573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a649190612bc7565b610a81576040516312aecd8160e01b815260040160405180910390fd5b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f6cc7ebdb6c8c53291c5ae16148cab9b049d23bf5bde5632900b40edff56fcb43905f90a250565b610ada6119d8565b805f03610afa576040516317dbc4cb60e21b815260040160405180910390fd5b6101f4811115610b1d576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610b62573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b869190612bc7565b610ba3576040516312aecd8160e01b815260040160405180910390fd5b600a55565b60118181548110610bb7575f80fd5b5f91825260209091200154905081565b6004546001600160a01b03163314610bf25760405163ea8e4eb560e01b815260040160405180910390fd5b610bfa611a0a565b565b610c046116d5565b6001600160a01b0316336001600160a01b031614158015610c35575060035461010090046001600160a01b03163314155b15610c535760405163ea8e4eb560e01b815260040160405180910390fd5b610c5b611958565b610c63611a56565b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015610ca8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccc9190612bc7565b8015610d4f575060095460055460408051630a58ce2d60e11b8152905161ffff909316926001600160a01b03909216916314b19c5a916004808201926020929091908290030181865afa158015610d25573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d499190612c49565b61ffff16115b15610d6157610d5c611a7a565b610de8565b6001600954600160201b900460ff166003811115610d8157610d81612a43565b03610d8e57610d5c611ca7565b6002600954600160201b900460ff166003811115610dae57610dae612a43565b03610dbb57610d5c611dfe565b6003600954600160201b900460ff166003811115610ddb57610ddb612a43565b03610de857610de8611fc9565b6040517ff0094b59b7bc92e9fc611b14b5d3a34fe02530ac9bcf36c2c6f10147c3030c12905f90a16106536001600255565b60048054604051633821dad160e21b81526001600160a01b039091169163e0876b4491610e4991339101612a71565b602060405180830381865afa158015610e64573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e889190612bc7565b610ea55760405163ea8e4eb560e01b815260040160405180910390fd5b805f03610ed257600654604051636b30633560e01b81526106af916001600160a01b031690600401612a71565b600654610653906001600160a01b03168383611980565b60048054604051633821dad160e21b81526001600160a01b039091169163e0876b4491610f1891339101612a71565b602060405180830381865afa158015610f33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f579190612bc7565b610ed25760405163ea8e4eb560e01b815260040160405180910390fd5b600e8181548110610bb7575f80fd5b6004546001600160a01b03163314610fae5760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0382161580610fcb57506001600160a01b038116155b15610fe95760405163d92e233d60e01b815260040160405180910390fd5b604051631ed3e4fb60e11b81526001600160a01b03821690633da7c9f690611015908590600401612a71565b5f6040518083038186803b15801561102b575f5ffd5b505afa15801561103d573d5f5f3e3d5ffd5b505050506001600160a01b038281165f8181526008602052604080822080546001600160a01b0319169486169485179055517f2f2727c7b3d9ee55de5c114f0cb7997ac7251a4cbfca4f2b2dc6969d86cce4f49190a35050565b600480546040805163edcf9c1f60e01b815290515f936060936001600160a01b03169263edcf9c1f92818301926020928290030181865afa1580156110de573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111029190612bc7565b8015611185575060095460055460408051630a58ce2d60e11b8152905161ffff909316926001600160a01b03909216916314b19c5a916004808201926020929091908290030181865afa15801561115b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117f9190612c49565b61ffff16115b156111935760019150611221565b6001600954600160201b900460ff1660038111156111b3576111b3612a43565b036111c15760019150611221565b6002600954600160201b900460ff1660038111156111e1576111e1612a43565b036111ef5760019150611221565b6003600954600160201b900460ff16600381111561120f5761120f612a43565b0361121d5760019150611221565b5f91505b60405180602001604052805f81525090509250929050565b6112416119d8565b610bfa5f6122ee565b60048054604051633821dad160e21b815233926001600160a01b039092169163e0876b449161127b91859101612a71565b602060405180830381865afa158015611296573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ba9190612bc7565b15801561133257506004805460405163f764eb4560e01b81526001600160a01b039091169163f764eb45916112f191859101612a71565b602060405180830381865afa15801561130c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113309190612bc7565b155b156113505760405163ea8e4eb560e01b815260040160405180910390fd5b815f0361137d57600654604051636b30633560e01b81526106af916001600160a01b031690600401612a71565b5f816001600160a01b0316631f52692b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113de9190612c6a565b6006549091506113f8906001600160a01b03168285611980565b505050565b6007546001600160a01b0316331461142857604051631a27eac360e11b815260040160405180910390fd5b805f0361145557600654604051636b30633560e01b81526106af916001600160a01b031690600401612a71565b600554604080516302ad6a1760e11b815290515f926001600160a01b03169163055ad42e9160048083019260209291908290030181865afa15801561149c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c09190612be6565b60048111156114d1576114d1612a43565b146114ef576040516312aecd8160e01b815260040160405180910390fd5b600654611507906001600160a01b0316333084612307565b6005546040516338b12abb60e21b8152600481018390526001600160a01b039091169063e2c4aaec906024015f604051808303815f87803b15801561154a575f5ffd5b505af115801561155c573d5f5f3e3d5ffd5b5050505050565b338061156d611701565b6001600160a01b031614611596578060405163118cdaa760e01b81526004016106af9190612a71565b610729816122ee565b600c818154811061073b575f80fd5b6004546001600160a01b031633146115d95760405163ea8e4eb560e01b815260040160405180910390fd5b610bfa612340565b6115e96119d8565b8060ff165f0361160c576040516317dbc4cb60e21b815260040160405180910390fd5b600860ff82161115611631576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611676573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169a9190612bc7565b6116b7576040516312aecd8160e01b815260040160405180910390fd5b6009805460ff909216620100000262ff000019909216919091179055565b5f546001600160a01b031690565b60108181548110610bb7575f80fd5b600d8181548110610bb7575f80fd5b6001546001600160a01b031690565b6117186119d8565b8060ff165f0361173b576040516317dbc4cb60e21b815260040160405180910390fd5b600560ff82161115611760576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa1580156117a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c99190612bc7565b6117e6576040516312aecd8160e01b815260040160405180910390fd5b600b805460ff191660ff92909216919091179055565b6118046119d8565b8060ff165f03611827576040516317dbc4cb60e21b815260040160405180910390fd5b600860ff8216111561184c576040516317dbc4cb60e21b815260040160405180910390fd5b600480546040805163edcf9c1f60e01b815290516001600160a01b039092169263edcf9c1f9282820192602092908290030181865afa158015611891573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b59190612bc7565b6118d2576040516312aecd8160e01b815260040160405180910390fd5b6009805460ff90921663010000000263ff00000019909216919091179055565b6118fa6119d8565b600180546001600160a01b0319166001600160a01b0383169081179091556119206116d5565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600280540361197a57604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b6113f883846001600160a01b031663a9059cbb85856040516024016119a6929190612c85565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061237d565b336119e16116d5565b6001600160a01b031614610bfa573360405163118cdaa760e01b81526004016106af9190612a71565b611a126123e0565b6003805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611a4c9190612a71565b60405180910390a1565b60035460ff1615610bfa5760405163d93c066560e01b815260040160405180910390fd5b60055460408051630a58ce2d60e11b815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa158015611ac1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae59190612c49565b600954909150611afa9061ffff166001612c9e565b61ffff168161ffff161015611b0c5750565b6009805461ffff191661ffff8316179055611b28600c5f61291f565b611b33600d5f61291f565b611b3e600f5f61291f565b611b4960105f61291f565b611b54600e5f61291f565b611b5f60115f61291f565b5f601281905560055460408051631716e21f60e11b815290516001600160a01b0390921692632e2dc43e926004808401938290030181865afa158015611ba7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bce9190810190612dec565b600c5f600d5f600f5f60105f600e5f60115f8c9190509080519060200190611bf792919061293a565b50508a51611c0a919060208d019061293a565b50508951611c1d919060208c019061293a565b50508851611c30919060208b0190612983565b50508751611c43919060208a019061293a565b50508651611c5691906020890190612983565b50506009805460ff60201b1916600160201b1790555050600c545f039250610729915050576009805460ff60201b1916600160211b179055600f545f0361072957506009805460ff60201b19169055565b6009545f90611cc89060ff620100008204811691600160281b900416612efc565b60095460ff91821692505f91611ce5916201000090041683612c9e565b90506009600581819054906101000a900460ff16611d0290612f1f565b91906101000a81548160ff021916908360ff160217905550600c805490508161ffff161180611d365750600c5461ffff8216145b15611d545750600c546009805461ffff60201b1916600160211b1790555b815b8161ffff168161ffff1610156113f8575f600c8261ffff1681548110611d7e57611d7e612f3d565b5f918252602090912001546006546001600160a01b039182169250168103611da65750611df6565b5f600d8361ffff1681548110611dbe57611dbe612f3d565b905f5260205f2001549050611df38282600e8661ffff1681548110611de557611de5612f3d565b905f5260205f200154612403565b50505b600101611d56565b6009545f90611e1f9060ff620100008204811691600160281b900416612efc565b60095460ff91821692505f91611e3c916201000090041683612c9e565b90506009600581819054906101000a900460ff16611e5990612f1f565b91906101000a81548160ff021916908360ff160217905550600f805490508161ffff161180611e8d5750600f5461ffff8216145b15611eab5750600f546009805461ffff60201b1916600360201b1790555b815b8161ffff168161ffff161015611f55575f600f8261ffff1681548110611ed557611ed5612f3d565b5f918252602090912001546006546001600160a01b039182169250168103611efd5750611f4d565b5f60108361ffff1681548110611f1557611f15612f3d565b905f5260205f2001549050611f4a828260118661ffff1681548110611f3c57611f3c612f3d565b905f5260205f2001546124fb565b50505b600101611ead565b50600f5461ffff821603610653576005546012546040516338b12abb60e21b81526001600160a01b039092169163e2c4aaec91611f989160040190815260200190565b5f604051808303815f87803b158015611faf575f5ffd5b505af1158015611fc1573d5f5f3e3d5ffd5b505050505050565b60048054604051631da09e4360e31b81525f926001600160a01b039092169163ed04f21891611ffa91859101612f51565b5f60405180830381865afa158015612014573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261203b9190810190612f65565b6009549091505f906120609060ff63010000008204811691600160281b900416612efc565b60095460ff91821692505f9161207e91630100000090041683612c9e565b90506009600581819054906101000a900460ff1661209b90612f1f565b91906101000a81548160ff021916908360ff16021790555082518161ffff1611806120ca575082518161ffff16145b156120e1575081516009805461ffff60201b191690555b815b8161ffff168161ffff1610156122e8575f848261ffff168151811061210a5761210a612f3d565b60209081029190910101516005546040516309958e4960e11b81529192505f916001600160a01b039091169063132b1c929061214a908590600401612a71565b602060405180830381865afa158015612165573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121899190612c04565b60055460405163e2638ff160e01b81529192505f916001600160a01b039091169063e2638ff1906121be908690600401612a71565b602060405180830381865afa1580156121d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121fd9190612c04565b905061220a8383836125f0565b6004805460405163d11f1c3560e01b81526001600160a01b039091169163d11f1c359161223991879101612a71565b602060405180830381865afa158015612254573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122789190612bc7565b156122da576004805460405163e8ffccb760e01b81526001600160a01b039091169163e8ffccb7916122ac91879101612a71565b5f604051808303815f87803b1580156122c3575f5ffd5b505af11580156122d5573d5f5f3e3d5ffd5b505050505b5050508060010190506120e3565b50505050565b600180546001600160a01b0319169055610729816127f5565b6040516001600160a01b0384811660248301528381166044830152606482018390526122e89186918216906323b872dd906084016119a6565b612348611a56565b6003805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a3f3390565b5f5f60205f8451602086015f885af18061239c576040513d5f823e3d81fd5b50505f513d915081156123b35780600114156123c0565b6001600160a01b0384163b155b156122e85783604051635274afe760e01b81526004016106af9190612a71565b60035460ff16610bfa57604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b038084165f90815260086020526040902054168061243b57604051635048c2af60e11b815260040160405180910390fd5b61244f6001600160a01b0385168285612844565b604051636c197ff560e01b81525f906001600160a01b03831690636c197ff59061247f9088908890600401612c85565b6020604051808303815f875af115801561249b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124bf9190612c04565b90506124d56001600160a01b038616835f612844565b6124df8382612f9e565b60125f8282546124ef9190612fbd565b90915550505050505050565b6001600160a01b038084165f90815260086020526040902054168061253357604051635048c2af60e11b815260040160405180910390fd5b600b5461255c9082906125499060ff1685612fe4565b6006546001600160a01b03169190612844565b60405163cce7ec1360e01b81525f906001600160a01b0383169063cce7ec139061258c9088908890600401612c85565b6020604051808303815f875af11580156125a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125cc9190612c04565b6006549091506125e6906001600160a01b0316835f612844565b6124df8184612f9e565b600480546040805163179b714360e31b8152905186935f936001600160a01b03169263bcdb8a1892818301926020928290030181865afa158015612636573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061265a9190612c04565b604051637bee6cb760e11b8152600481018290529091505f906001600160a01b0384169063f7dcd96e90602401602060405180830381865afa1580156126a2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c69190612c04565b60405163178c864d60e11b8152600481018490529091505f906001600160a01b03851690632f190c9a90602401602060405180830381865afa15801561270e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127329190612c04565b905081156127905760405163493a6e2160e01b8152600481018690526001600160a01b0385169063493a6e21906024015f604051808303815f87803b158015612779575f5ffd5b505af115801561278b573d5f5f3e3d5ffd5b505050505b80156127ec5760405163e5e9719360e01b8152600481018790526001600160a01b0385169063e5e97193906024015f604051808303815f87803b1580156127d5575f5ffd5b505af11580156127e7573d5f5f3e3d5ffd5b505050505b50505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f836001600160a01b031663095ea7b38484604051602401612867929190612c85565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090506128a084826128d4565b6122e8576128ca84856001600160a01b031663095ea7b3865f6040516024016119a6929190612c85565b6122e8848261237d565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015612913575081156129055780600114612913565b5f866001600160a01b03163b115b93505050505b92915050565b5080545f8255905f5260205f209081019061072991906129d6565b828054828255905f5260205f20908101928215612973579160200282015b82811115612973578251825591602001919060010190612958565b5061297f9291506129d6565b5090565b828054828255905f5260205f20908101928215612973579160200282015b8281111561297357825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906129a1565b5b8082111561297f575f81556001016129d7565b6001600160a01b0381168114610729575f5ffd5b5f5f60408385031215612a0f575f5ffd5b823591506020830135612a21816129ea565b809150509250929050565b5f60208284031215612a3c575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b6020810160048310612a6b57612a6b612a43565b91905290565b6001600160a01b0391909116815260200190565b5f60208284031215612a95575f5ffd5b8135612aa0816129ea565b9392505050565b5f5f60208385031215612ab8575f5ffd5b82356001600160401b03811115612acd575f5ffd5b8301601f81018513612add575f5ffd5b80356001600160401b03811115612af2575f5ffd5b856020828401011115612b03575f5ffd5b6020919091019590945092505050565b5f5f60408385031215612b24575f5ffd5b8235612b2f816129ea565b946020939093013593505050565b5f5f60408385031215612b4e575f5ffd5b8235612b59816129ea565b91506020830135612a21816129ea565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b5f60208284031215612bb7575f5ffd5b813560ff81168114612aa0575f5ffd5b5f60208284031215612bd7575f5ffd5b81518015158114612aa0575f5ffd5b5f60208284031215612bf6575f5ffd5b815160058110612aa0575f5ffd5b5f60208284031215612c14575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b8201612c4357612c43612c1b565b505f0390565b5f60208284031215612c59575f5ffd5b815161ffff81168114612aa0575f5ffd5b5f60208284031215612c7a575f5ffd5b8151612aa0816129ea565b6001600160a01b03929092168252602082015260400190565b61ffff818116838216019081111561291957612919612c1b565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715612cf457612cf4612cb8565b604052919050565b5f6001600160401b03821115612d1457612d14612cb8565b5060051b60200190565b5f82601f830112612d2d575f5ffd5b8151612d40612d3b82612cfc565b612ccc565b8082825260208201915060208360051b860101925085831115612d61575f5ffd5b602085015b83811015612d87578051612d79816129ea565b835260209283019201612d66565b5095945050505050565b5f82601f830112612da0575f5ffd5b8151612dae612d3b82612cfc565b8082825260208201915060208360051b860101925085831115612dcf575f5ffd5b602085015b83811015612d87578051835260209283019201612dd4565b5f5f5f5f5f5f60c08789031215612e01575f5ffd5b86516001600160401b03811115612e16575f5ffd5b612e2289828a01612d1e565b602089015190975090506001600160401b03811115612e3f575f5ffd5b612e4b89828a01612d91565b604089015190965090506001600160401b03811115612e68575f5ffd5b612e7489828a01612d1e565b606089015190955090506001600160401b03811115612e91575f5ffd5b612e9d89828a01612d91565b608089015190945090506001600160401b03811115612eba575f5ffd5b612ec689828a01612d91565b60a089015190935090506001600160401b03811115612ee3575f5ffd5b612eef89828a01612d91565b9150509295509295509295565b60ff8181168382160290811690818114612f1857612f18612c1b565b5092915050565b5f60ff821660ff8103612f3457612f34612c1b565b60010192915050565b634e487b7160e01b5f52603260045260245ffd5b6020810160028310612a6b57612a6b612a43565b5f60208284031215612f75575f5ffd5b81516001600160401b03811115612f8a575f5ffd5b612f9684828501612d1e565b949350505050565b8181035f831280158383131683831282161715612f1857612f18612c1b565b8082018281125f831280158216821582161715612fdc57612fdc612c1b565b505092915050565b808202811582820484141761291957612919612c1b56fea2646970667358221220767474f8fafa895109469bf1a05d4a11e0bd4e55060b11c5c44ddaeb8290471e64736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/price/OrionAssetERC4626PriceAdapter.sol/OrionAssetERC4626PriceAdapter.json b/artifacts/contracts/price/OrionAssetERC4626PriceAdapter.sol/OrionAssetERC4626PriceAdapter.json index 170b6bec..1a28ac0a 100644 --- a/artifacts/contracts/price/OrionAssetERC4626PriceAdapter.sol/OrionAssetERC4626PriceAdapter.json +++ b/artifacts/contracts/price/OrionAssetERC4626PriceAdapter.sol/OrionAssetERC4626PriceAdapter.json @@ -107,8 +107,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561000f575f5ffd5b5060405161065138038061065183398101604081905261002e91610182565b6001600160a01b0381166100555760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811790915560408051631c56369f60e21b81529051637158da7c916004808201926020929091908290030181865afa1580156100ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100cf9190610182565b600180546001600160a01b0319166001600160a01b039290921691821790556040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015610127573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014b91906101a4565b600160146101000a81548160ff021916908360ff160217905550506101c4565b6001600160a01b038116811461017f575f5ffd5b50565b5f60208284031215610192575f5ffd5b815161019d8161016b565b9392505050565b5f602082840312156101b4575f5ffd5b815160ff8116811461019d575f5ffd5b610480806101d15f395ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80636ab8bdef146100595780637158da7c1461006e57806372279ba11461009757806379502c55146100c15780639a32c207146100d3575b5f5ffd5b61006c6100673660046102bb565b6100f9565b005b600154610081906001600160a01b031681565b60405161008e91906102dd565b60405180910390f35b6100aa6100a53660046102bb565b6101b0565b6040805192835260ff90911660208301520161008e565b5f54610081906001600160a01b031681565b6001546100e790600160a01b900460ff1681565b60405160ff909116815260200161008e565b806001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610153575060408051601f3d908101601f19168201909252610150918101906102f1565b60015b61017b5780604051633283c86d60e21b815260040161017291906102dd565b60405180910390fd5b6001546001600160a01b038281169116146101ab5781604051633283c86d60e21b815260040161017291906102dd565b505b50565b5f5f5f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101ef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610213919061030c565b90505f61022182600a610425565b6040516303d1689d60e11b8152600481018290529091505f906001600160a01b038716906307a2d13a90602401602060405180830381865afa158015610269573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028d9190610433565b6001549097600160a01b90910460ff169650945050505050565b6001600160a01b03811681146101ad575f5ffd5b5f602082840312156102cb575f5ffd5b81356102d6816102a7565b9392505050565b6001600160a01b0391909116815260200190565b5f60208284031215610301575f5ffd5b81516102d6816102a7565b5f6020828403121561031c575f5ffd5b815160ff811681146102d6575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561037b5780850481111561035f5761035f61032c565b600184161561036d57908102905b60019390931c928002610344565b935093915050565b5f826103915750600161041f565b8161039d57505f61041f565b81600181146103b357600281146103bd576103d9565b600191505061041f565b60ff8411156103ce576103ce61032c565b50506001821b61041f565b5060208310610133831016604e8410600b84101617156103fc575081810a61041f565b6104085f198484610340565b805f190482111561041b5761041b61032c565b0290505b92915050565b5f6102d660ff841683610383565b5f60208284031215610443575f5ffd5b505191905056fea2646970667358221220c915475a3787be3f327b79d53e7725755cafc5da6410d3a0b77ea83bde6becf164736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80636ab8bdef146100595780637158da7c1461006e57806372279ba11461009757806379502c55146100c15780639a32c207146100d3575b5f5ffd5b61006c6100673660046102bb565b6100f9565b005b600154610081906001600160a01b031681565b60405161008e91906102dd565b60405180910390f35b6100aa6100a53660046102bb565b6101b0565b6040805192835260ff90911660208301520161008e565b5f54610081906001600160a01b031681565b6001546100e790600160a01b900460ff1681565b60405160ff909116815260200161008e565b806001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610153575060408051601f3d908101601f19168201909252610150918101906102f1565b60015b61017b5780604051633283c86d60e21b815260040161017291906102dd565b60405180910390fd5b6001546001600160a01b038281169116146101ab5781604051633283c86d60e21b815260040161017291906102dd565b505b50565b5f5f5f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101ef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610213919061030c565b90505f61022182600a610425565b6040516303d1689d60e11b8152600481018290529091505f906001600160a01b038716906307a2d13a90602401602060405180830381865afa158015610269573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028d9190610433565b6001549097600160a01b90910460ff169650945050505050565b6001600160a01b03811681146101ad575f5ffd5b5f602082840312156102cb575f5ffd5b81356102d6816102a7565b9392505050565b6001600160a01b0391909116815260200190565b5f60208284031215610301575f5ffd5b81516102d6816102a7565b5f6020828403121561031c575f5ffd5b815160ff811681146102d6575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561037b5780850481111561035f5761035f61032c565b600184161561036d57908102905b60019390931c928002610344565b935093915050565b5f826103915750600161041f565b8161039d57505f61041f565b81600181146103b357600281146103bd576103d9565b600191505061041f565b60ff8411156103ce576103ce61032c565b50506001821b61041f565b5060208310610133831016604e8410600b84101617156103fc575081810a61041f565b6104085f198484610340565b805f190482111561041b5761041b61032c565b0290505b92915050565b5f6102d660ff841683610383565b5f60208284031215610443575f5ffd5b505191905056fea2646970667358221220c915475a3787be3f327b79d53e7725755cafc5da6410d3a0b77ea83bde6becf164736f6c634300081c0033", + "bytecode": "0x608060405234801561000f575f5ffd5b5060405161065138038061065183398101604081905261002e91610182565b6001600160a01b0381166100555760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811790915560408051631c56369f60e21b81529051637158da7c916004808201926020929091908290030181865afa1580156100ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100cf9190610182565b600180546001600160a01b0319166001600160a01b039290921691821790556040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015610127573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061014b91906101a4565b600160146101000a81548160ff021916908360ff160217905550506101c4565b6001600160a01b038116811461017f575f5ffd5b50565b5f60208284031215610192575f5ffd5b815161019d8161016b565b9392505050565b5f602082840312156101b4575f5ffd5b815160ff8116811461019d575f5ffd5b610480806101d15f395ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80636ab8bdef146100595780637158da7c1461006e57806372279ba11461009757806379502c55146100c15780639a32c207146100d3575b5f5ffd5b61006c6100673660046102bb565b6100f9565b005b600154610081906001600160a01b031681565b60405161008e91906102dd565b60405180910390f35b6100aa6100a53660046102bb565b6101b0565b6040805192835260ff90911660208301520161008e565b5f54610081906001600160a01b031681565b6001546100e790600160a01b900460ff1681565b60405160ff909116815260200161008e565b806001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610153575060408051601f3d908101601f19168201909252610150918101906102f1565b60015b61017b5780604051633283c86d60e21b815260040161017291906102dd565b60405180910390fd5b6001546001600160a01b038281169116146101ab5781604051633283c86d60e21b815260040161017291906102dd565b505b50565b5f5f5f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101ef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610213919061030c565b90505f61022182600a610425565b6040516303d1689d60e11b8152600481018290529091505f906001600160a01b038716906307a2d13a90602401602060405180830381865afa158015610269573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028d9190610433565b6001549097600160a01b90910460ff169650945050505050565b6001600160a01b03811681146101ad575f5ffd5b5f602082840312156102cb575f5ffd5b81356102d6816102a7565b9392505050565b6001600160a01b0391909116815260200190565b5f60208284031215610301575f5ffd5b81516102d6816102a7565b5f6020828403121561031c575f5ffd5b815160ff811681146102d6575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561037b5780850481111561035f5761035f61032c565b600184161561036d57908102905b60019390931c928002610344565b935093915050565b5f826103915750600161041f565b8161039d57505f61041f565b81600181146103b357600281146103bd576103d9565b600191505061041f565b60ff8411156103ce576103ce61032c565b50506001821b61041f565b5060208310610133831016604e8410600b84101617156103fc575081810a61041f565b6104085f198484610340565b805f190482111561041b5761041b61032c565b0290505b92915050565b5f6102d660ff841683610383565b5f60208284031215610443575f5ffd5b505191905056fea264697066735822122065c2efcdcea4250cbac9117f7c1f68fc786f92d1cb83cf1bf5d7a2e3548b621064736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80636ab8bdef146100595780637158da7c1461006e57806372279ba11461009757806379502c55146100c15780639a32c207146100d3575b5f5ffd5b61006c6100673660046102bb565b6100f9565b005b600154610081906001600160a01b031681565b60405161008e91906102dd565b60405180910390f35b6100aa6100a53660046102bb565b6101b0565b6040805192835260ff90911660208301520161008e565b5f54610081906001600160a01b031681565b6001546100e790600160a01b900460ff1681565b60405160ff909116815260200161008e565b806001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610153575060408051601f3d908101601f19168201909252610150918101906102f1565b60015b61017b5780604051633283c86d60e21b815260040161017291906102dd565b60405180910390fd5b6001546001600160a01b038281169116146101ab5781604051633283c86d60e21b815260040161017291906102dd565b505b50565b5f5f5f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101ef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610213919061030c565b90505f61022182600a610425565b6040516303d1689d60e11b8152600481018290529091505f906001600160a01b038716906307a2d13a90602401602060405180830381865afa158015610269573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028d9190610433565b6001549097600160a01b90910460ff169650945050505050565b6001600160a01b03811681146101ad575f5ffd5b5f602082840312156102cb575f5ffd5b81356102d6816102a7565b9392505050565b6001600160a01b0391909116815260200190565b5f60208284031215610301575f5ffd5b81516102d6816102a7565b5f6020828403121561031c575f5ffd5b815160ff811681146102d6575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561037b5780850481111561035f5761035f61032c565b600184161561036d57908102905b60019390931c928002610344565b935093915050565b5f826103915750600161041f565b8161039d57505f61041f565b81600181146103b357600281146103bd576103d9565b600191505061041f565b60ff8411156103ce576103ce61032c565b50506001821b61041f565b5060208310610133831016604e8410600b84101617156103fc575081810a61041f565b6104085f198484610340565b805f190482111561041b5761041b61032c565b0290505b92915050565b5f6102d660ff841683610383565b5f60208284031215610443575f5ffd5b505191905056fea264697066735822122065c2efcdcea4250cbac9117f7c1f68fc786f92d1cb83cf1bf5d7a2e3548b621064736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/price/PriceAdapterRegistry.sol/PriceAdapterRegistry.json b/artifacts/contracts/price/PriceAdapterRegistry.sol/PriceAdapterRegistry.json index 683514a2..2d9ae9f8 100644 --- a/artifacts/contracts/price/PriceAdapterRegistry.sol/PriceAdapterRegistry.json +++ b/artifacts/contracts/price/PriceAdapterRegistry.sol/PriceAdapterRegistry.json @@ -249,8 +249,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561000f575f5ffd5b5060405161099938038061099983398101604081905261002e916101d6565b816001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006581610150565b506001600160a01b03821661008d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100b45760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040805163567ba71360e01b8152905163567ba713916004808201926020929091908290030181865afa15801561010b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061012f9190610207565b600260146101000a81548160ff021916908360ff160217905550505061022e565b600180546001600160a01b03191690556101698161016c565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146101d1575f5ffd5b919050565b5f5f604083850312156101e7575f5ffd5b6101f0836101bb565b91506101fe602084016101bb565b90509250929050565b5f60208284031215610217575f5ffd5b815160ff81168114610227575f5ffd5b9392505050565b61075e8061023b5f395ff3fe608060405234801561000f575f5ffd5b506004361061008c575f3560e01c806341976e09146100905780634e0fdde0146100b6578063567ba713146100cb578063715018a6146100f157806379ba5097146100f95780638da5cb5b14610101578063c2b7a3e614610116578063d6c318711461013e578063e30c397814610151578063f2fde38b14610159575b5f5ffd5b6100a361009e366004610540565b61016c565b6040519081526020015b60405180910390f35b6100c96100c436600461055b565b610239565b005b6002546100df90600160a01b900460ff1681565b60405160ff90911681526020016100ad565b6100c961034d565b6100c9610360565b6101096103a8565b6040516100ad9190610592565b610109610124366004610540565b60036020525f90815260409020546001600160a01b031681565b600254610109906001600160a01b031681565b6101096103b6565b6100c9610167366004610540565b6103c5565b6001600160a01b038082165f90815260036020526040812054909116806101a657604051635048c2af60e11b815260040160405180910390fd5b5f5f826001600160a01b03166372279ba1866040518263ffffffff1660e01b81526004016101d49190610592565b6040805180830381865afa1580156101ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021291906105a6565b915091506102308282600260149054906101000a900460ff1661042b565b95945050505050565b6002546001600160a01b031633146102645760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b038216158061028157506001600160a01b038116155b1561029f5760405163d92e233d60e01b815260040160405180910390fd5b604051636ab8bdef60e01b81526001600160a01b03821690636ab8bdef906102cb908590600401610592565b5f6040518083038186803b1580156102e1575f5ffd5b505afa1580156102f3573d5f5f3e3d5ffd5b505050506001600160a01b038281165f8181526003602052604080822080546001600160a01b0319169486169485179055517f53a93b0b200b6adfbf749bc775b2872ba3ff61fb09c81a53a5d0c4723c169f259190a35050565b610355610497565b61035e5f6104c9565b565b338061036a6103b6565b6001600160a01b03161461039c578060405163118cdaa760e01b81526004016103939190610592565b60405180910390fd5b6103a5816104c9565b50565b5f546001600160a01b031690565b6001546001600160a01b031690565b6103cd610497565b600180546001600160a01b0319166001600160a01b0383169081179091556103f36103a8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f8260ff168260ff1611156104605761044483836105e2565b61044f90600a6106e4565b61045990856106f2565b9050610490565b8260ff168260ff16101561048d5761047882846105e2565b61048390600a6106e4565b6104599085610709565b50825b9392505050565b336104a06103a8565b6001600160a01b03161461035e573360405163118cdaa760e01b81526004016103939190610592565b600180546001600160a01b03191690556103a5815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103a5575f5ffd5b5f60208284031215610550575f5ffd5b81356104908161052c565b5f5f6040838503121561056c575f5ffd5b82356105778161052c565b915060208301356105878161052c565b809150509250929050565b6001600160a01b0391909116815260200190565b5f5f604083850312156105b7575f5ffd5b82519150602083015160ff81168114610587575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156105fb576105fb6105ce565b92915050565b6001815b600184111561063c57808504811115610620576106206105ce565b600184161561062e57908102905b60019390931c928002610605565b935093915050565b5f82610652575060016105fb565b8161065e57505f6105fb565b8160018114610674576002811461067e5761069a565b60019150506105fb565b60ff84111561068f5761068f6105ce565b50506001821b6105fb565b5060208310610133831016604e8410600b84101617156106bd575081810a6105fb565b6106c95f198484610601565b805f19048211156106dc576106dc6105ce565b029392505050565b5f61049060ff841683610644565b80820281158282048414176105fb576105fb6105ce565b5f8261072357634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220c193e31f23808238c9bccc086118ff53db5e02a1007814d2670a7f61050f15dd64736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061008c575f3560e01c806341976e09146100905780634e0fdde0146100b6578063567ba713146100cb578063715018a6146100f157806379ba5097146100f95780638da5cb5b14610101578063c2b7a3e614610116578063d6c318711461013e578063e30c397814610151578063f2fde38b14610159575b5f5ffd5b6100a361009e366004610540565b61016c565b6040519081526020015b60405180910390f35b6100c96100c436600461055b565b610239565b005b6002546100df90600160a01b900460ff1681565b60405160ff90911681526020016100ad565b6100c961034d565b6100c9610360565b6101096103a8565b6040516100ad9190610592565b610109610124366004610540565b60036020525f90815260409020546001600160a01b031681565b600254610109906001600160a01b031681565b6101096103b6565b6100c9610167366004610540565b6103c5565b6001600160a01b038082165f90815260036020526040812054909116806101a657604051635048c2af60e11b815260040160405180910390fd5b5f5f826001600160a01b03166372279ba1866040518263ffffffff1660e01b81526004016101d49190610592565b6040805180830381865afa1580156101ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021291906105a6565b915091506102308282600260149054906101000a900460ff1661042b565b95945050505050565b6002546001600160a01b031633146102645760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b038216158061028157506001600160a01b038116155b1561029f5760405163d92e233d60e01b815260040160405180910390fd5b604051636ab8bdef60e01b81526001600160a01b03821690636ab8bdef906102cb908590600401610592565b5f6040518083038186803b1580156102e1575f5ffd5b505afa1580156102f3573d5f5f3e3d5ffd5b505050506001600160a01b038281165f8181526003602052604080822080546001600160a01b0319169486169485179055517f53a93b0b200b6adfbf749bc775b2872ba3ff61fb09c81a53a5d0c4723c169f259190a35050565b610355610497565b61035e5f6104c9565b565b338061036a6103b6565b6001600160a01b03161461039c578060405163118cdaa760e01b81526004016103939190610592565b60405180910390fd5b6103a5816104c9565b50565b5f546001600160a01b031690565b6001546001600160a01b031690565b6103cd610497565b600180546001600160a01b0319166001600160a01b0383169081179091556103f36103a8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f8260ff168260ff1611156104605761044483836105e2565b61044f90600a6106e4565b61045990856106f2565b9050610490565b8260ff168260ff16101561048d5761047882846105e2565b61048390600a6106e4565b6104599085610709565b50825b9392505050565b336104a06103a8565b6001600160a01b03161461035e573360405163118cdaa760e01b81526004016103939190610592565b600180546001600160a01b03191690556103a5815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103a5575f5ffd5b5f60208284031215610550575f5ffd5b81356104908161052c565b5f5f6040838503121561056c575f5ffd5b82356105778161052c565b915060208301356105878161052c565b809150509250929050565b6001600160a01b0391909116815260200190565b5f5f604083850312156105b7575f5ffd5b82519150602083015160ff81168114610587575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156105fb576105fb6105ce565b92915050565b6001815b600184111561063c57808504811115610620576106206105ce565b600184161561062e57908102905b60019390931c928002610605565b935093915050565b5f82610652575060016105fb565b8161065e57505f6105fb565b8160018114610674576002811461067e5761069a565b60019150506105fb565b60ff84111561068f5761068f6105ce565b50506001821b6105fb565b5060208310610133831016604e8410600b84101617156106bd575081810a6105fb565b6106c95f198484610601565b805f19048211156106dc576106dc6105ce565b029392505050565b5f61049060ff841683610644565b80820281158282048414176105fb576105fb6105ce565b5f8261072357634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220c193e31f23808238c9bccc086118ff53db5e02a1007814d2670a7f61050f15dd64736f6c634300081c0033", + "bytecode": "0x608060405234801561000f575f5ffd5b5060405161099938038061099983398101604081905261002e916101d6565b816001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006581610150565b506001600160a01b03821661008d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100b45760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040805163567ba71360e01b8152905163567ba713916004808201926020929091908290030181865afa15801561010b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061012f9190610207565b600260146101000a81548160ff021916908360ff160217905550505061022e565b600180546001600160a01b03191690556101698161016c565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146101d1575f5ffd5b919050565b5f5f604083850312156101e7575f5ffd5b6101f0836101bb565b91506101fe602084016101bb565b90509250929050565b5f60208284031215610217575f5ffd5b815160ff81168114610227575f5ffd5b9392505050565b61075e8061023b5f395ff3fe608060405234801561000f575f5ffd5b506004361061008c575f3560e01c806341976e09146100905780634e0fdde0146100b6578063567ba713146100cb578063715018a6146100f157806379ba5097146100f95780638da5cb5b14610101578063c2b7a3e614610116578063d6c318711461013e578063e30c397814610151578063f2fde38b14610159575b5f5ffd5b6100a361009e366004610540565b61016c565b6040519081526020015b60405180910390f35b6100c96100c436600461055b565b610239565b005b6002546100df90600160a01b900460ff1681565b60405160ff90911681526020016100ad565b6100c961034d565b6100c9610360565b6101096103a8565b6040516100ad9190610592565b610109610124366004610540565b60036020525f90815260409020546001600160a01b031681565b600254610109906001600160a01b031681565b6101096103b6565b6100c9610167366004610540565b6103c5565b6001600160a01b038082165f90815260036020526040812054909116806101a657604051635048c2af60e11b815260040160405180910390fd5b5f5f826001600160a01b03166372279ba1866040518263ffffffff1660e01b81526004016101d49190610592565b6040805180830381865afa1580156101ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021291906105a6565b915091506102308282600260149054906101000a900460ff1661042b565b95945050505050565b6002546001600160a01b031633146102645760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b038216158061028157506001600160a01b038116155b1561029f5760405163d92e233d60e01b815260040160405180910390fd5b604051636ab8bdef60e01b81526001600160a01b03821690636ab8bdef906102cb908590600401610592565b5f6040518083038186803b1580156102e1575f5ffd5b505afa1580156102f3573d5f5f3e3d5ffd5b505050506001600160a01b038281165f8181526003602052604080822080546001600160a01b0319169486169485179055517f53a93b0b200b6adfbf749bc775b2872ba3ff61fb09c81a53a5d0c4723c169f259190a35050565b610355610497565b61035e5f6104c9565b565b338061036a6103b6565b6001600160a01b03161461039c578060405163118cdaa760e01b81526004016103939190610592565b60405180910390fd5b6103a5816104c9565b50565b5f546001600160a01b031690565b6001546001600160a01b031690565b6103cd610497565b600180546001600160a01b0319166001600160a01b0383169081179091556103f36103a8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f8260ff168260ff1611156104605761044483836105e2565b61044f90600a6106e4565b61045990856106f2565b9050610490565b8260ff168260ff16101561048d5761047882846105e2565b61048390600a6106e4565b6104599085610709565b50825b9392505050565b336104a06103a8565b6001600160a01b03161461035e573360405163118cdaa760e01b81526004016103939190610592565b600180546001600160a01b03191690556103a5815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103a5575f5ffd5b5f60208284031215610550575f5ffd5b81356104908161052c565b5f5f6040838503121561056c575f5ffd5b82356105778161052c565b915060208301356105878161052c565b809150509250929050565b6001600160a01b0391909116815260200190565b5f5f604083850312156105b7575f5ffd5b82519150602083015160ff81168114610587575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156105fb576105fb6105ce565b92915050565b6001815b600184111561063c57808504811115610620576106206105ce565b600184161561062e57908102905b60019390931c928002610605565b935093915050565b5f82610652575060016105fb565b8161065e57505f6105fb565b8160018114610674576002811461067e5761069a565b60019150506105fb565b60ff84111561068f5761068f6105ce565b50506001821b6105fb565b5060208310610133831016604e8410600b84101617156106bd575081810a6105fb565b6106c95f198484610601565b805f19048211156106dc576106dc6105ce565b029392505050565b5f61049060ff841683610644565b80820281158282048414176105fb576105fb6105ce565b5f8261072357634e487b7160e01b5f52601260045260245ffd5b50049056fea264697066735822122027076908fc1f4ce541269a214b1a1ac23d743695bfbdeef563033efd34d0aea464736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061008c575f3560e01c806341976e09146100905780634e0fdde0146100b6578063567ba713146100cb578063715018a6146100f157806379ba5097146100f95780638da5cb5b14610101578063c2b7a3e614610116578063d6c318711461013e578063e30c397814610151578063f2fde38b14610159575b5f5ffd5b6100a361009e366004610540565b61016c565b6040519081526020015b60405180910390f35b6100c96100c436600461055b565b610239565b005b6002546100df90600160a01b900460ff1681565b60405160ff90911681526020016100ad565b6100c961034d565b6100c9610360565b6101096103a8565b6040516100ad9190610592565b610109610124366004610540565b60036020525f90815260409020546001600160a01b031681565b600254610109906001600160a01b031681565b6101096103b6565b6100c9610167366004610540565b6103c5565b6001600160a01b038082165f90815260036020526040812054909116806101a657604051635048c2af60e11b815260040160405180910390fd5b5f5f826001600160a01b03166372279ba1866040518263ffffffff1660e01b81526004016101d49190610592565b6040805180830381865afa1580156101ee573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021291906105a6565b915091506102308282600260149054906101000a900460ff1661042b565b95945050505050565b6002546001600160a01b031633146102645760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b038216158061028157506001600160a01b038116155b1561029f5760405163d92e233d60e01b815260040160405180910390fd5b604051636ab8bdef60e01b81526001600160a01b03821690636ab8bdef906102cb908590600401610592565b5f6040518083038186803b1580156102e1575f5ffd5b505afa1580156102f3573d5f5f3e3d5ffd5b505050506001600160a01b038281165f8181526003602052604080822080546001600160a01b0319169486169485179055517f53a93b0b200b6adfbf749bc775b2872ba3ff61fb09c81a53a5d0c4723c169f259190a35050565b610355610497565b61035e5f6104c9565b565b338061036a6103b6565b6001600160a01b03161461039c578060405163118cdaa760e01b81526004016103939190610592565b60405180910390fd5b6103a5816104c9565b50565b5f546001600160a01b031690565b6001546001600160a01b031690565b6103cd610497565b600180546001600160a01b0319166001600160a01b0383169081179091556103f36103a8565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f8260ff168260ff1611156104605761044483836105e2565b61044f90600a6106e4565b61045990856106f2565b9050610490565b8260ff168260ff16101561048d5761047882846105e2565b61048390600a6106e4565b6104599085610709565b50825b9392505050565b336104a06103a8565b6001600160a01b03161461035e573360405163118cdaa760e01b81526004016103939190610592565b600180546001600160a01b03191690556103a5815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103a5575f5ffd5b5f60208284031215610550575f5ffd5b81356104908161052c565b5f5f6040838503121561056c575f5ffd5b82356105778161052c565b915060208301356105878161052c565b809150509250929050565b6001600160a01b0391909116815260200190565b5f5f604083850312156105b7575f5ffd5b82519150602083015160ff81168114610587575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156105fb576105fb6105ce565b92915050565b6001815b600184111561063c57808504811115610620576106206105ce565b600184161561062e57908102905b60019390931c928002610605565b935093915050565b5f82610652575060016105fb565b8161065e57505f6105fb565b8160018114610674576002811461067e5761069a565b60019150506105fb565b60ff84111561068f5761068f6105ce565b50506001821b6105fb565b5060208310610133831016604e8410600b84101617156106bd575081810a6105fb565b6106c95f198484610601565b805f19048211156106dc576106dc6105ce565b029392505050565b5f61049060ff841683610644565b80820281158282048414176105fb576105fb6105ce565b5f8261072357634e487b7160e01b5f52601260045260245ffd5b50049056fea264697066735822122027076908fc1f4ce541269a214b1a1ac23d743695bfbdeef563033efd34d0aea464736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/strategies/KBestTvlWeightedAverage.sol/KBestTvlWeightedAverage.json b/artifacts/contracts/strategies/KBestTvlWeightedAverage.sol/KBestTvlWeightedAverage.json index 3886185c..5273321e 100644 --- a/artifacts/contracts/strategies/KBestTvlWeightedAverage.sol/KBestTvlWeightedAverage.json +++ b/artifacts/contracts/strategies/KBestTvlWeightedAverage.sol/KBestTvlWeightedAverage.json @@ -219,8 +219,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561000f575f5ffd5b50604051610fd0380380610fd083398101604081905261002e91610147565b826001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610065816100c1565b506001600160a01b03821661008d5760405163d92e233d60e01b815260040160405180910390fd5b6002805461ffff909216600160a01b026001600160b01b03199092166001600160a01b039093169290921717905550610191565b600180546001600160a01b03191690556100da816100dd565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610142575f5ffd5b919050565b5f5f5f60608486031215610159575f5ffd5b6101628461012c565b92506101706020850161012c565b9150604084015161ffff81168114610186575f5ffd5b809150509250925092565b610e328061019e5f395ff3fe608060405234801561000f575f5ffd5b506004361061008c575f3560e01c806301ffc9a7146100905780632fc12f41146100b8578063715018a6146100cd57806379502c55146100d557806379ba5097146100f55780638da5cb5b146100fd5780639d2f7e8414610105578063b4f40c6114610118578063e30c397814610140578063f2fde38b14610148575b5f5ffd5b6100a361009e366004610a55565b61015b565b60405190151581526020015b60405180910390f35b6100cb6100c6366004610a7c565b610191565b005b6100cb6101bb565b6002546100e8906001600160a01b031681565b6040516100af9190610a9d565b6100cb6101ce565b6100e8610216565b6100cb610113366004610ac5565b610224565b60025461012d90600160a01b900461ffff1681565b60405161ffff90911681526020016100af565b6100e8610373565b6100cb610156366004610ac5565b610382565b5f6001600160e01b0319821663274bdfa160e21b148061018b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101996103e8565b6002805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b6101c36103e8565b6101cc5f61041a565b565b33806101d8610373565b6001600160a01b03161461020a578060405163118cdaa760e01b81526004016102019190610a9d565b60405180910390fd5b6102138161041a565b50565b5f546001600160a01b031690565b61022c6103e8565b600254600160a01b900461ffff165f0361025957604051631121aa8d60e01b815260040160405180910390fd5b5f816001600160a01b0316634e85b1356040518163ffffffff1660e01b81526004015f60405180830381865afa158015610295573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526102bc9190810190610b04565b80519091505f6102cc8383610433565b6002549091505f906102ed9061ffff600160a01b9091048116908516610567565b90505f5f6102fd86858786610579565b915091505f61030d8383866107be565b6040516358debf1760e11b81529091506001600160a01b0389169063b1bd7e2e9061033c908490600401610bce565b5f604051808303815f87803b158015610353575f5ffd5b505af1158015610365573d5f5f3e3d5ffd5b505050505050505050505050565b6001546001600160a01b031690565b61038a6103e8565b600180546001600160a01b0319166001600160a01b0383169081179091556103b0610216565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b336103f1610216565b6001600160a01b0316146101cc573360405163118cdaa760e01b81526004016102019190610a9d565b600180546001600160a01b031916905561021381610a06565b60608161ffff166001600160401b0381111561045157610451610ae0565b60405190808252806020026020018201604052801561047a578160200160208202803683370190505b5090505f5b8261ffff168161ffff16101561056057838161ffff16815181106104a5576104a5610c2b565b60200260200101516001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610506575060408051601f3d908101601f1916820190925261050391810190610c3f565b60015b610533576001828261ffff168151811061052257610522610c2b565b602002602001018181525050610558565b80838361ffff168151811061054a5761054a610c2b565b602002602001018181525050505b60010161047f565b5092915050565b5f8282188284100282185b9392505050565b6060808261ffff166001600160401b0381111561059857610598610ae0565b6040519080825280602002602001820160405280156105c1578160200160208202803683370190505b5091508261ffff166001600160401b038111156105e0576105e0610ae0565b604051908082528060200260200182016040528015610609578160200160208202803683370190505b5090505f8461ffff166001600160401b0381111561062957610629610ae0565b604051908082528060200260200182016040528015610652578160200160208202803683370190505b5090505f5b8461ffff168161ffff1610156107b3575f80805b8861ffff168161ffff1610156106f757848161ffff168151811061069157610691610c2b565b60200260200101511580156106c25750828a8261ffff16815181106106b8576106b8610c2b565b6020026020010151115b156106ef57898161ffff16815181106106dd576106dd610c2b565b602002602001015192508061ffff1691505b60010161066b565b50600184828151811061070c5761070c610c2b565b60200260200101901515908115158152505089818151811061073057610730610c2b565b6020026020010151868461ffff168151811061074e5761074e610c2b565b60200260200101906001600160a01b031690816001600160a01b03168152505088818151811061078057610780610c2b565b6020026020010151858461ffff168151811061079e5761079e610c2b565b60209081029190910101525050600101610657565b505094509492505050565b60605f805b8361ffff168161ffff16101561080657848161ffff16815181106107e9576107e9610c2b565b6020026020010151826107fc9190610c6a565b91506001016107c3565b506002546040805163d1717c7d60e01b815290515f926001600160a01b03169163d1717c7d9160048083019260209291908290030181865afa15801561084e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108729190610c7d565b61087d90600a610d80565b90508361ffff166001600160401b0381111561089b5761089b610ae0565b6040519080825280602002602001820160405280156108df57816020015b604080518082019091525f80825260208201528152602001906001900390816108b95790505b5092505f805b8561ffff168161ffff1610156109a9575f848463ffffffff16898461ffff168151811061091457610914610c2b565b60200260200101516109269190610d8e565b6109309190610da5565b905060405180604001604052808a8461ffff168151811061095357610953610c2b565b60200260200101516001600160a01b031681526020018263ffffffff16815250868361ffff168151811061098957610989610c2b565b602090810291909101015261099e8184610dc4565b9250506001016108e5565b508163ffffffff168163ffffffff1610156109fc576109c88183610de0565b845f815181106109da576109da610c2b565b60200260200101516020018181516109f29190610dc4565b63ffffffff169052505b5050509392505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610a65575f5ffd5b81356001600160e01b031981168114610572575f5ffd5b5f60208284031215610a8c575f5ffd5b813561ffff81168114610572575f5ffd5b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610213575f5ffd5b5f60208284031215610ad5575f5ffd5b813561057281610ab1565b634e487b7160e01b5f52604160045260245ffd5b8051610aff81610ab1565b919050565b5f60208284031215610b14575f5ffd5b81516001600160401b03811115610b29575f5ffd5b8201601f81018413610b39575f5ffd5b80516001600160401b03811115610b5257610b52610ae0565b604051600582901b90603f8201601f191681016001600160401b0381118282101715610b8057610b80610ae0565b604052918252602081840181019290810187841115610b9d575f5ffd5b6020850194505b83851015610bc357610bb585610af4565b815260209485019401610ba4565b509695505050505050565b602080825282518282018190525f918401906040840190835b81811015610c2057835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101610be7565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610c4f575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561018b5761018b610c56565b5f60208284031215610c8d575f5ffd5b815160ff81168114610572575f5ffd5b6001815b6001841115610cd857808504811115610cbc57610cbc610c56565b6001841615610cca57908102905b60019390931c928002610ca1565b935093915050565b5f82610cee5750600161018b565b81610cfa57505f61018b565b8160018114610d105760028114610d1a57610d36565b600191505061018b565b60ff841115610d2b57610d2b610c56565b50506001821b61018b565b5060208310610133831016604e8410600b8410161715610d59575081810a61018b565b610d655f198484610c9d565b805f1904821115610d7857610d78610c56565b029392505050565b5f61057260ff841683610ce0565b808202811582820484141761018b5761018b610c56565b5f82610dbf57634e487b7160e01b5f52601260045260245ffd5b500490565b63ffffffff818116838216019081111561018b5761018b610c56565b63ffffffff828116828216039081111561018b5761018b610c5656fea2646970667358221220e2ad6d2f871d58e883fdd0f17de4330f87fc197e4262f044841c8130ba5425cf64736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061008c575f3560e01c806301ffc9a7146100905780632fc12f41146100b8578063715018a6146100cd57806379502c55146100d557806379ba5097146100f55780638da5cb5b146100fd5780639d2f7e8414610105578063b4f40c6114610118578063e30c397814610140578063f2fde38b14610148575b5f5ffd5b6100a361009e366004610a55565b61015b565b60405190151581526020015b60405180910390f35b6100cb6100c6366004610a7c565b610191565b005b6100cb6101bb565b6002546100e8906001600160a01b031681565b6040516100af9190610a9d565b6100cb6101ce565b6100e8610216565b6100cb610113366004610ac5565b610224565b60025461012d90600160a01b900461ffff1681565b60405161ffff90911681526020016100af565b6100e8610373565b6100cb610156366004610ac5565b610382565b5f6001600160e01b0319821663274bdfa160e21b148061018b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101996103e8565b6002805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b6101c36103e8565b6101cc5f61041a565b565b33806101d8610373565b6001600160a01b03161461020a578060405163118cdaa760e01b81526004016102019190610a9d565b60405180910390fd5b6102138161041a565b50565b5f546001600160a01b031690565b61022c6103e8565b600254600160a01b900461ffff165f0361025957604051631121aa8d60e01b815260040160405180910390fd5b5f816001600160a01b0316634e85b1356040518163ffffffff1660e01b81526004015f60405180830381865afa158015610295573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526102bc9190810190610b04565b80519091505f6102cc8383610433565b6002549091505f906102ed9061ffff600160a01b9091048116908516610567565b90505f5f6102fd86858786610579565b915091505f61030d8383866107be565b6040516358debf1760e11b81529091506001600160a01b0389169063b1bd7e2e9061033c908490600401610bce565b5f604051808303815f87803b158015610353575f5ffd5b505af1158015610365573d5f5f3e3d5ffd5b505050505050505050505050565b6001546001600160a01b031690565b61038a6103e8565b600180546001600160a01b0319166001600160a01b0383169081179091556103b0610216565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b336103f1610216565b6001600160a01b0316146101cc573360405163118cdaa760e01b81526004016102019190610a9d565b600180546001600160a01b031916905561021381610a06565b60608161ffff166001600160401b0381111561045157610451610ae0565b60405190808252806020026020018201604052801561047a578160200160208202803683370190505b5090505f5b8261ffff168161ffff16101561056057838161ffff16815181106104a5576104a5610c2b565b60200260200101516001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610506575060408051601f3d908101601f1916820190925261050391810190610c3f565b60015b610533576001828261ffff168151811061052257610522610c2b565b602002602001018181525050610558565b80838361ffff168151811061054a5761054a610c2b565b602002602001018181525050505b60010161047f565b5092915050565b5f8282188284100282185b9392505050565b6060808261ffff166001600160401b0381111561059857610598610ae0565b6040519080825280602002602001820160405280156105c1578160200160208202803683370190505b5091508261ffff166001600160401b038111156105e0576105e0610ae0565b604051908082528060200260200182016040528015610609578160200160208202803683370190505b5090505f8461ffff166001600160401b0381111561062957610629610ae0565b604051908082528060200260200182016040528015610652578160200160208202803683370190505b5090505f5b8461ffff168161ffff1610156107b3575f80805b8861ffff168161ffff1610156106f757848161ffff168151811061069157610691610c2b565b60200260200101511580156106c25750828a8261ffff16815181106106b8576106b8610c2b565b6020026020010151115b156106ef57898161ffff16815181106106dd576106dd610c2b565b602002602001015192508061ffff1691505b60010161066b565b50600184828151811061070c5761070c610c2b565b60200260200101901515908115158152505089818151811061073057610730610c2b565b6020026020010151868461ffff168151811061074e5761074e610c2b565b60200260200101906001600160a01b031690816001600160a01b03168152505088818151811061078057610780610c2b565b6020026020010151858461ffff168151811061079e5761079e610c2b565b60209081029190910101525050600101610657565b505094509492505050565b60605f805b8361ffff168161ffff16101561080657848161ffff16815181106107e9576107e9610c2b565b6020026020010151826107fc9190610c6a565b91506001016107c3565b506002546040805163d1717c7d60e01b815290515f926001600160a01b03169163d1717c7d9160048083019260209291908290030181865afa15801561084e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108729190610c7d565b61087d90600a610d80565b90508361ffff166001600160401b0381111561089b5761089b610ae0565b6040519080825280602002602001820160405280156108df57816020015b604080518082019091525f80825260208201528152602001906001900390816108b95790505b5092505f805b8561ffff168161ffff1610156109a9575f848463ffffffff16898461ffff168151811061091457610914610c2b565b60200260200101516109269190610d8e565b6109309190610da5565b905060405180604001604052808a8461ffff168151811061095357610953610c2b565b60200260200101516001600160a01b031681526020018263ffffffff16815250868361ffff168151811061098957610989610c2b565b602090810291909101015261099e8184610dc4565b9250506001016108e5565b508163ffffffff168163ffffffff1610156109fc576109c88183610de0565b845f815181106109da576109da610c2b565b60200260200101516020018181516109f29190610dc4565b63ffffffff169052505b5050509392505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610a65575f5ffd5b81356001600160e01b031981168114610572575f5ffd5b5f60208284031215610a8c575f5ffd5b813561ffff81168114610572575f5ffd5b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610213575f5ffd5b5f60208284031215610ad5575f5ffd5b813561057281610ab1565b634e487b7160e01b5f52604160045260245ffd5b8051610aff81610ab1565b919050565b5f60208284031215610b14575f5ffd5b81516001600160401b03811115610b29575f5ffd5b8201601f81018413610b39575f5ffd5b80516001600160401b03811115610b5257610b52610ae0565b604051600582901b90603f8201601f191681016001600160401b0381118282101715610b8057610b80610ae0565b604052918252602081840181019290810187841115610b9d575f5ffd5b6020850194505b83851015610bc357610bb585610af4565b815260209485019401610ba4565b509695505050505050565b602080825282518282018190525f918401906040840190835b81811015610c2057835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101610be7565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610c4f575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561018b5761018b610c56565b5f60208284031215610c8d575f5ffd5b815160ff81168114610572575f5ffd5b6001815b6001841115610cd857808504811115610cbc57610cbc610c56565b6001841615610cca57908102905b60019390931c928002610ca1565b935093915050565b5f82610cee5750600161018b565b81610cfa57505f61018b565b8160018114610d105760028114610d1a57610d36565b600191505061018b565b60ff841115610d2b57610d2b610c56565b50506001821b61018b565b5060208310610133831016604e8410600b8410161715610d59575081810a61018b565b610d655f198484610c9d565b805f1904821115610d7857610d78610c56565b029392505050565b5f61057260ff841683610ce0565b808202811582820484141761018b5761018b610c56565b5f82610dbf57634e487b7160e01b5f52601260045260245ffd5b500490565b63ffffffff818116838216019081111561018b5761018b610c56565b63ffffffff828116828216039081111561018b5761018b610c5656fea2646970667358221220e2ad6d2f871d58e883fdd0f17de4330f87fc197e4262f044841c8130ba5425cf64736f6c634300081c0033", + "bytecode": "0x608060405234801561000f575f5ffd5b50604051610fd0380380610fd083398101604081905261002e91610147565b826001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610065816100c1565b506001600160a01b03821661008d5760405163d92e233d60e01b815260040160405180910390fd5b6002805461ffff909216600160a01b026001600160b01b03199092166001600160a01b039093169290921717905550610191565b600180546001600160a01b03191690556100da816100dd565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610142575f5ffd5b919050565b5f5f5f60608486031215610159575f5ffd5b6101628461012c565b92506101706020850161012c565b9150604084015161ffff81168114610186575f5ffd5b809150509250925092565b610e328061019e5f395ff3fe608060405234801561000f575f5ffd5b506004361061008c575f3560e01c806301ffc9a7146100905780632fc12f41146100b8578063715018a6146100cd57806379502c55146100d557806379ba5097146100f55780638da5cb5b146100fd5780639d2f7e8414610105578063b4f40c6114610118578063e30c397814610140578063f2fde38b14610148575b5f5ffd5b6100a361009e366004610a55565b61015b565b60405190151581526020015b60405180910390f35b6100cb6100c6366004610a7c565b610191565b005b6100cb6101bb565b6002546100e8906001600160a01b031681565b6040516100af9190610a9d565b6100cb6101ce565b6100e8610216565b6100cb610113366004610ac5565b610224565b60025461012d90600160a01b900461ffff1681565b60405161ffff90911681526020016100af565b6100e8610373565b6100cb610156366004610ac5565b610382565b5f6001600160e01b0319821663274bdfa160e21b148061018b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101996103e8565b6002805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b6101c36103e8565b6101cc5f61041a565b565b33806101d8610373565b6001600160a01b03161461020a578060405163118cdaa760e01b81526004016102019190610a9d565b60405180910390fd5b6102138161041a565b50565b5f546001600160a01b031690565b61022c6103e8565b600254600160a01b900461ffff165f0361025957604051631121aa8d60e01b815260040160405180910390fd5b5f816001600160a01b0316634e85b1356040518163ffffffff1660e01b81526004015f60405180830381865afa158015610295573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526102bc9190810190610b04565b80519091505f6102cc8383610433565b6002549091505f906102ed9061ffff600160a01b9091048116908516610567565b90505f5f6102fd86858786610579565b915091505f61030d8383866107be565b6040516358debf1760e11b81529091506001600160a01b0389169063b1bd7e2e9061033c908490600401610bce565b5f604051808303815f87803b158015610353575f5ffd5b505af1158015610365573d5f5f3e3d5ffd5b505050505050505050505050565b6001546001600160a01b031690565b61038a6103e8565b600180546001600160a01b0319166001600160a01b0383169081179091556103b0610216565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b336103f1610216565b6001600160a01b0316146101cc573360405163118cdaa760e01b81526004016102019190610a9d565b600180546001600160a01b031916905561021381610a06565b60608161ffff166001600160401b0381111561045157610451610ae0565b60405190808252806020026020018201604052801561047a578160200160208202803683370190505b5090505f5b8261ffff168161ffff16101561056057838161ffff16815181106104a5576104a5610c2b565b60200260200101516001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610506575060408051601f3d908101601f1916820190925261050391810190610c3f565b60015b610533576001828261ffff168151811061052257610522610c2b565b602002602001018181525050610558565b80838361ffff168151811061054a5761054a610c2b565b602002602001018181525050505b60010161047f565b5092915050565b5f8282188284100282185b9392505050565b6060808261ffff166001600160401b0381111561059857610598610ae0565b6040519080825280602002602001820160405280156105c1578160200160208202803683370190505b5091508261ffff166001600160401b038111156105e0576105e0610ae0565b604051908082528060200260200182016040528015610609578160200160208202803683370190505b5090505f8461ffff166001600160401b0381111561062957610629610ae0565b604051908082528060200260200182016040528015610652578160200160208202803683370190505b5090505f5b8461ffff168161ffff1610156107b3575f80805b8861ffff168161ffff1610156106f757848161ffff168151811061069157610691610c2b565b60200260200101511580156106c25750828a8261ffff16815181106106b8576106b8610c2b565b6020026020010151115b156106ef57898161ffff16815181106106dd576106dd610c2b565b602002602001015192508061ffff1691505b60010161066b565b50600184828151811061070c5761070c610c2b565b60200260200101901515908115158152505089818151811061073057610730610c2b565b6020026020010151868461ffff168151811061074e5761074e610c2b565b60200260200101906001600160a01b031690816001600160a01b03168152505088818151811061078057610780610c2b565b6020026020010151858461ffff168151811061079e5761079e610c2b565b60209081029190910101525050600101610657565b505094509492505050565b60605f805b8361ffff168161ffff16101561080657848161ffff16815181106107e9576107e9610c2b565b6020026020010151826107fc9190610c6a565b91506001016107c3565b506002546040805163d1717c7d60e01b815290515f926001600160a01b03169163d1717c7d9160048083019260209291908290030181865afa15801561084e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108729190610c7d565b61087d90600a610d80565b90508361ffff166001600160401b0381111561089b5761089b610ae0565b6040519080825280602002602001820160405280156108df57816020015b604080518082019091525f80825260208201528152602001906001900390816108b95790505b5092505f805b8561ffff168161ffff1610156109a9575f848463ffffffff16898461ffff168151811061091457610914610c2b565b60200260200101516109269190610d8e565b6109309190610da5565b905060405180604001604052808a8461ffff168151811061095357610953610c2b565b60200260200101516001600160a01b031681526020018263ffffffff16815250868361ffff168151811061098957610989610c2b565b602090810291909101015261099e8184610dc4565b9250506001016108e5565b508163ffffffff168163ffffffff1610156109fc576109c88183610de0565b845f815181106109da576109da610c2b565b60200260200101516020018181516109f29190610dc4565b63ffffffff169052505b5050509392505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610a65575f5ffd5b81356001600160e01b031981168114610572575f5ffd5b5f60208284031215610a8c575f5ffd5b813561ffff81168114610572575f5ffd5b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610213575f5ffd5b5f60208284031215610ad5575f5ffd5b813561057281610ab1565b634e487b7160e01b5f52604160045260245ffd5b8051610aff81610ab1565b919050565b5f60208284031215610b14575f5ffd5b81516001600160401b03811115610b29575f5ffd5b8201601f81018413610b39575f5ffd5b80516001600160401b03811115610b5257610b52610ae0565b604051600582901b90603f8201601f191681016001600160401b0381118282101715610b8057610b80610ae0565b604052918252602081840181019290810187841115610b9d575f5ffd5b6020850194505b83851015610bc357610bb585610af4565b815260209485019401610ba4565b509695505050505050565b602080825282518282018190525f918401906040840190835b81811015610c2057835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101610be7565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610c4f575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561018b5761018b610c56565b5f60208284031215610c8d575f5ffd5b815160ff81168114610572575f5ffd5b6001815b6001841115610cd857808504811115610cbc57610cbc610c56565b6001841615610cca57908102905b60019390931c928002610ca1565b935093915050565b5f82610cee5750600161018b565b81610cfa57505f61018b565b8160018114610d105760028114610d1a57610d36565b600191505061018b565b60ff841115610d2b57610d2b610c56565b50506001821b61018b565b5060208310610133831016604e8410600b8410161715610d59575081810a61018b565b610d655f198484610c9d565b805f1904821115610d7857610d78610c56565b029392505050565b5f61057260ff841683610ce0565b808202811582820484141761018b5761018b610c56565b5f82610dbf57634e487b7160e01b5f52601260045260245ffd5b500490565b63ffffffff818116838216019081111561018b5761018b610c56565b63ffffffff828116828216039081111561018b5761018b610c5656fea2646970667358221220ebbb43f610347ec8bb9ef178cfbe0b97c67c04fa78d5af90403dba8b0a440c5464736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061008c575f3560e01c806301ffc9a7146100905780632fc12f41146100b8578063715018a6146100cd57806379502c55146100d557806379ba5097146100f55780638da5cb5b146100fd5780639d2f7e8414610105578063b4f40c6114610118578063e30c397814610140578063f2fde38b14610148575b5f5ffd5b6100a361009e366004610a55565b61015b565b60405190151581526020015b60405180910390f35b6100cb6100c6366004610a7c565b610191565b005b6100cb6101bb565b6002546100e8906001600160a01b031681565b6040516100af9190610a9d565b6100cb6101ce565b6100e8610216565b6100cb610113366004610ac5565b610224565b60025461012d90600160a01b900461ffff1681565b60405161ffff90911681526020016100af565b6100e8610373565b6100cb610156366004610ac5565b610382565b5f6001600160e01b0319821663274bdfa160e21b148061018b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6101996103e8565b6002805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b6101c36103e8565b6101cc5f61041a565b565b33806101d8610373565b6001600160a01b03161461020a578060405163118cdaa760e01b81526004016102019190610a9d565b60405180910390fd5b6102138161041a565b50565b5f546001600160a01b031690565b61022c6103e8565b600254600160a01b900461ffff165f0361025957604051631121aa8d60e01b815260040160405180910390fd5b5f816001600160a01b0316634e85b1356040518163ffffffff1660e01b81526004015f60405180830381865afa158015610295573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526102bc9190810190610b04565b80519091505f6102cc8383610433565b6002549091505f906102ed9061ffff600160a01b9091048116908516610567565b90505f5f6102fd86858786610579565b915091505f61030d8383866107be565b6040516358debf1760e11b81529091506001600160a01b0389169063b1bd7e2e9061033c908490600401610bce565b5f604051808303815f87803b158015610353575f5ffd5b505af1158015610365573d5f5f3e3d5ffd5b505050505050505050505050565b6001546001600160a01b031690565b61038a6103e8565b600180546001600160a01b0319166001600160a01b0383169081179091556103b0610216565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b336103f1610216565b6001600160a01b0316146101cc573360405163118cdaa760e01b81526004016102019190610a9d565b600180546001600160a01b031916905561021381610a06565b60608161ffff166001600160401b0381111561045157610451610ae0565b60405190808252806020026020018201604052801561047a578160200160208202803683370190505b5090505f5b8261ffff168161ffff16101561056057838161ffff16815181106104a5576104a5610c2b565b60200260200101516001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610506575060408051601f3d908101601f1916820190925261050391810190610c3f565b60015b610533576001828261ffff168151811061052257610522610c2b565b602002602001018181525050610558565b80838361ffff168151811061054a5761054a610c2b565b602002602001018181525050505b60010161047f565b5092915050565b5f8282188284100282185b9392505050565b6060808261ffff166001600160401b0381111561059857610598610ae0565b6040519080825280602002602001820160405280156105c1578160200160208202803683370190505b5091508261ffff166001600160401b038111156105e0576105e0610ae0565b604051908082528060200260200182016040528015610609578160200160208202803683370190505b5090505f8461ffff166001600160401b0381111561062957610629610ae0565b604051908082528060200260200182016040528015610652578160200160208202803683370190505b5090505f5b8461ffff168161ffff1610156107b3575f80805b8861ffff168161ffff1610156106f757848161ffff168151811061069157610691610c2b565b60200260200101511580156106c25750828a8261ffff16815181106106b8576106b8610c2b565b6020026020010151115b156106ef57898161ffff16815181106106dd576106dd610c2b565b602002602001015192508061ffff1691505b60010161066b565b50600184828151811061070c5761070c610c2b565b60200260200101901515908115158152505089818151811061073057610730610c2b565b6020026020010151868461ffff168151811061074e5761074e610c2b565b60200260200101906001600160a01b031690816001600160a01b03168152505088818151811061078057610780610c2b565b6020026020010151858461ffff168151811061079e5761079e610c2b565b60209081029190910101525050600101610657565b505094509492505050565b60605f805b8361ffff168161ffff16101561080657848161ffff16815181106107e9576107e9610c2b565b6020026020010151826107fc9190610c6a565b91506001016107c3565b506002546040805163d1717c7d60e01b815290515f926001600160a01b03169163d1717c7d9160048083019260209291908290030181865afa15801561084e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108729190610c7d565b61087d90600a610d80565b90508361ffff166001600160401b0381111561089b5761089b610ae0565b6040519080825280602002602001820160405280156108df57816020015b604080518082019091525f80825260208201528152602001906001900390816108b95790505b5092505f805b8561ffff168161ffff1610156109a9575f848463ffffffff16898461ffff168151811061091457610914610c2b565b60200260200101516109269190610d8e565b6109309190610da5565b905060405180604001604052808a8461ffff168151811061095357610953610c2b565b60200260200101516001600160a01b031681526020018263ffffffff16815250868361ffff168151811061098957610989610c2b565b602090810291909101015261099e8184610dc4565b9250506001016108e5565b508163ffffffff168163ffffffff1610156109fc576109c88183610de0565b845f815181106109da576109da610c2b565b60200260200101516020018181516109f29190610dc4565b63ffffffff169052505b5050509392505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610a65575f5ffd5b81356001600160e01b031981168114610572575f5ffd5b5f60208284031215610a8c575f5ffd5b813561ffff81168114610572575f5ffd5b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610213575f5ffd5b5f60208284031215610ad5575f5ffd5b813561057281610ab1565b634e487b7160e01b5f52604160045260245ffd5b8051610aff81610ab1565b919050565b5f60208284031215610b14575f5ffd5b81516001600160401b03811115610b29575f5ffd5b8201601f81018413610b39575f5ffd5b80516001600160401b03811115610b5257610b52610ae0565b604051600582901b90603f8201601f191681016001600160401b0381118282101715610b8057610b80610ae0565b604052918252602081840181019290810187841115610b9d575f5ffd5b6020850194505b83851015610bc357610bb585610af4565b815260209485019401610ba4565b509695505050505050565b602080825282518282018190525f918401906040840190835b81811015610c2057835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101610be7565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610c4f575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561018b5761018b610c56565b5f60208284031215610c8d575f5ffd5b815160ff81168114610572575f5ffd5b6001815b6001841115610cd857808504811115610cbc57610cbc610c56565b6001841615610cca57908102905b60019390931c928002610ca1565b935093915050565b5f82610cee5750600161018b565b81610cfa57505f61018b565b8160018114610d105760028114610d1a57610d36565b600191505061018b565b60ff841115610d2b57610d2b610c56565b50506001821b61018b565b5060208310610133831016604e8410600b8410161715610d59575081810a61018b565b610d655f198484610c9d565b805f1904821115610d7857610d78610c56565b029392505050565b5f61057260ff841683610ce0565b808202811582820484141761018b5761018b610c56565b5f82610dbf57634e487b7160e01b5f52601260045260245ffd5b500490565b63ffffffff818116838216019081111561018b5761018b610c56565b63ffffffff828116828216039081111561018b5761018b610c5656fea2646970667358221220ebbb43f610347ec8bb9ef178cfbe0b97c67c04fa78d5af90403dba8b0a440c5464736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/test/KBestTvlWeightedAverageInvalid.sol/KBestTvlWeightedAverageInvalid.json b/artifacts/contracts/test/KBestTvlWeightedAverageInvalid.sol/KBestTvlWeightedAverageInvalid.json index b7feb9e0..f42fda5f 100644 --- a/artifacts/contracts/test/KBestTvlWeightedAverageInvalid.sol/KBestTvlWeightedAverageInvalid.json +++ b/artifacts/contracts/test/KBestTvlWeightedAverageInvalid.sol/KBestTvlWeightedAverageInvalid.json @@ -175,8 +175,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561000f575f5ffd5b50604051610e31380380610e3183398101604081905261002e9161012b565b826001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610065816100c1565b506001600160a01b03821661008d5760405163d92e233d60e01b815260040160405180910390fd5b6001805461ffff909216600160a01b026001600160b01b03199092166001600160a01b039093169290921717905550610175565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610126575f5ffd5b919050565b5f5f5f6060848603121561013d575f5ffd5b61014684610110565b925061015460208501610110565b9150604084015161ffff8116811461016a575f5ffd5b809150509250925092565b610caf806101825f395ff3fe608060405234801561000f575f5ffd5b5060043610610076575f3560e01c806301ffc9a71461007a5780632fc12f41146100a2578063715018a6146100b757806379502c55146100bf5780638da5cb5b146100df5780639d2f7e84146100e7578063b4f40c61146100fa578063f2fde38b14610122575b5f5ffd5b61008d61008836600461090a565b610135565b60405190151581526020015b60405180910390f35b6100b56100b0366004610931565b61016b565b005b6100b5610195565b6001546100d2906001600160a01b031681565b6040516100999190610952565b6100d26101a8565b6100b56100f536600461097a565b6101b6565b60015461010f90600160a01b900461ffff1681565b60405161ffff9091168152602001610099565b6100b561013036600461097a565b6102d0565b5f6001600160e01b0319821663274bdfa160e21b148061016557506301ffc9a760e01b6001600160e01b03198316145b92915050565b610173610316565b6001805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b61019d610316565b6101a65f610348565b565b5f546001600160a01b031690565b5f816001600160a01b0316634e85b1356040518163ffffffff1660e01b81526004015f60405180830381865afa1580156101f2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261021991908101906109b9565b80519091505f6102298383610397565b6001549091505f9061024a9061ffff600160a01b90910481169085166104cb565b90505f5f61025a868587866104dd565b915091505f61026a838386610722565b6040516358debf1760e11b81529091506001600160a01b0389169063b1bd7e2e90610299908490600401610a83565b5f604051808303815f87803b1580156102b0575f5ffd5b505af11580156102c2573d5f5f3e3d5ffd5b505050505050505050505050565b6102d8610316565b6001600160a01b03811661030a575f604051631e4fbdf760e01b81526004016103019190610952565b60405180910390fd5b61031381610348565b50565b3361031f6101a8565b6001600160a01b0316146101a6573360405163118cdaa760e01b81526004016103019190610952565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608161ffff166001600160401b038111156103b5576103b5610995565b6040519080825280602002602001820160405280156103de578160200160208202803683370190505b5090505f5b8261ffff168161ffff1610156104c457838161ffff168151811061040957610409610ae0565b60200260200101516001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561046a575060408051601f3d908101601f1916820190925261046791810190610af4565b60015b610497576001828261ffff168151811061048657610486610ae0565b6020026020010181815250506104bc565b80838361ffff16815181106104ae576104ae610ae0565b602002602001018181525050505b6001016103e3565b5092915050565b5f8282188284100282185b9392505050565b6060808261ffff166001600160401b038111156104fc576104fc610995565b604051908082528060200260200182016040528015610525578160200160208202803683370190505b5091508261ffff166001600160401b0381111561054457610544610995565b60405190808252806020026020018201604052801561056d578160200160208202803683370190505b5090505f8461ffff166001600160401b0381111561058d5761058d610995565b6040519080825280602002602001820160405280156105b6578160200160208202803683370190505b5090505f5b8461ffff168161ffff161015610717575f80805b8861ffff168161ffff16101561065b57848161ffff16815181106105f5576105f5610ae0565b60200260200101511580156106265750828a8261ffff168151811061061c5761061c610ae0565b6020026020010151115b1561065357898161ffff168151811061064157610641610ae0565b602002602001015192508061ffff1691505b6001016105cf565b50600184828151811061067057610670610ae0565b60200260200101901515908115158152505089818151811061069457610694610ae0565b6020026020010151868461ffff16815181106106b2576106b2610ae0565b60200260200101906001600160a01b031690816001600160a01b0316815250508881815181106106e4576106e4610ae0565b6020026020010151858461ffff168151811061070257610702610ae0565b602090810291909101015250506001016105bb565b505094509492505050565b60605f805b8361ffff168161ffff16101561076a57848161ffff168151811061074d5761074d610ae0565b6020026020010151826107609190610b1f565b9150600101610727565b506001546040805163d1717c7d60e01b815290515f926001600160a01b03169163d1717c7d9160048083019260209291908290030181865afa1580156107b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d69190610b32565b6107e190600a610c35565b90508361ffff166001600160401b038111156107ff576107ff610995565b60405190808252806020026020018201604052801561084357816020015b604080518082019091525f808252602082015281526020019060019003908161081d5790505b5092505f5b8461ffff168161ffff161015610900575f838363ffffffff16888461ffff168151811061087757610877610ae0565b60200260200101516108899190610c43565b6108939190610c5a565b90506040518060400160405280898461ffff16815181106108b6576108b6610ae0565b60200260200101516001600160a01b031681526020018263ffffffff16815250858361ffff16815181106108ec576108ec610ae0565b602090810291909101015250600101610848565b5050509392505050565b5f6020828403121561091a575f5ffd5b81356001600160e01b0319811681146104d6575f5ffd5b5f60208284031215610941575f5ffd5b813561ffff811681146104d6575f5ffd5b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610313575f5ffd5b5f6020828403121561098a575f5ffd5b81356104d681610966565b634e487b7160e01b5f52604160045260245ffd5b80516109b481610966565b919050565b5f602082840312156109c9575f5ffd5b81516001600160401b038111156109de575f5ffd5b8201601f810184136109ee575f5ffd5b80516001600160401b03811115610a0757610a07610995565b604051600582901b90603f8201601f191681016001600160401b0381118282101715610a3557610a35610995565b604052918252602081840181019290810187841115610a52575f5ffd5b6020850194505b83851015610a7857610a6a856109a9565b815260209485019401610a59565b509695505050505050565b602080825282518282018190525f918401906040840190835b81811015610ad557835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101610a9c565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610b04575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561016557610165610b0b565b5f60208284031215610b42575f5ffd5b815160ff811681146104d6575f5ffd5b6001815b6001841115610b8d57808504811115610b7157610b71610b0b565b6001841615610b7f57908102905b60019390931c928002610b56565b935093915050565b5f82610ba357506001610165565b81610baf57505f610165565b8160018114610bc55760028114610bcf57610beb565b6001915050610165565b60ff841115610be057610be0610b0b565b50506001821b610165565b5060208310610133831016604e8410600b8410161715610c0e575081810a610165565b610c1a5f198484610b52565b805f1904821115610c2d57610c2d610b0b565b029392505050565b5f6104d660ff841683610b95565b808202811582820484141761016557610165610b0b565b5f82610c7457634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220718d1f5ec81ba854d72e6c3d0179b9bf0e22614b0911b80ba72054dc0f44c60864736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610076575f3560e01c806301ffc9a71461007a5780632fc12f41146100a2578063715018a6146100b757806379502c55146100bf5780638da5cb5b146100df5780639d2f7e84146100e7578063b4f40c61146100fa578063f2fde38b14610122575b5f5ffd5b61008d61008836600461090a565b610135565b60405190151581526020015b60405180910390f35b6100b56100b0366004610931565b61016b565b005b6100b5610195565b6001546100d2906001600160a01b031681565b6040516100999190610952565b6100d26101a8565b6100b56100f536600461097a565b6101b6565b60015461010f90600160a01b900461ffff1681565b60405161ffff9091168152602001610099565b6100b561013036600461097a565b6102d0565b5f6001600160e01b0319821663274bdfa160e21b148061016557506301ffc9a760e01b6001600160e01b03198316145b92915050565b610173610316565b6001805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b61019d610316565b6101a65f610348565b565b5f546001600160a01b031690565b5f816001600160a01b0316634e85b1356040518163ffffffff1660e01b81526004015f60405180830381865afa1580156101f2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261021991908101906109b9565b80519091505f6102298383610397565b6001549091505f9061024a9061ffff600160a01b90910481169085166104cb565b90505f5f61025a868587866104dd565b915091505f61026a838386610722565b6040516358debf1760e11b81529091506001600160a01b0389169063b1bd7e2e90610299908490600401610a83565b5f604051808303815f87803b1580156102b0575f5ffd5b505af11580156102c2573d5f5f3e3d5ffd5b505050505050505050505050565b6102d8610316565b6001600160a01b03811661030a575f604051631e4fbdf760e01b81526004016103019190610952565b60405180910390fd5b61031381610348565b50565b3361031f6101a8565b6001600160a01b0316146101a6573360405163118cdaa760e01b81526004016103019190610952565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608161ffff166001600160401b038111156103b5576103b5610995565b6040519080825280602002602001820160405280156103de578160200160208202803683370190505b5090505f5b8261ffff168161ffff1610156104c457838161ffff168151811061040957610409610ae0565b60200260200101516001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561046a575060408051601f3d908101601f1916820190925261046791810190610af4565b60015b610497576001828261ffff168151811061048657610486610ae0565b6020026020010181815250506104bc565b80838361ffff16815181106104ae576104ae610ae0565b602002602001018181525050505b6001016103e3565b5092915050565b5f8282188284100282185b9392505050565b6060808261ffff166001600160401b038111156104fc576104fc610995565b604051908082528060200260200182016040528015610525578160200160208202803683370190505b5091508261ffff166001600160401b0381111561054457610544610995565b60405190808252806020026020018201604052801561056d578160200160208202803683370190505b5090505f8461ffff166001600160401b0381111561058d5761058d610995565b6040519080825280602002602001820160405280156105b6578160200160208202803683370190505b5090505f5b8461ffff168161ffff161015610717575f80805b8861ffff168161ffff16101561065b57848161ffff16815181106105f5576105f5610ae0565b60200260200101511580156106265750828a8261ffff168151811061061c5761061c610ae0565b6020026020010151115b1561065357898161ffff168151811061064157610641610ae0565b602002602001015192508061ffff1691505b6001016105cf565b50600184828151811061067057610670610ae0565b60200260200101901515908115158152505089818151811061069457610694610ae0565b6020026020010151868461ffff16815181106106b2576106b2610ae0565b60200260200101906001600160a01b031690816001600160a01b0316815250508881815181106106e4576106e4610ae0565b6020026020010151858461ffff168151811061070257610702610ae0565b602090810291909101015250506001016105bb565b505094509492505050565b60605f805b8361ffff168161ffff16101561076a57848161ffff168151811061074d5761074d610ae0565b6020026020010151826107609190610b1f565b9150600101610727565b506001546040805163d1717c7d60e01b815290515f926001600160a01b03169163d1717c7d9160048083019260209291908290030181865afa1580156107b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d69190610b32565b6107e190600a610c35565b90508361ffff166001600160401b038111156107ff576107ff610995565b60405190808252806020026020018201604052801561084357816020015b604080518082019091525f808252602082015281526020019060019003908161081d5790505b5092505f5b8461ffff168161ffff161015610900575f838363ffffffff16888461ffff168151811061087757610877610ae0565b60200260200101516108899190610c43565b6108939190610c5a565b90506040518060400160405280898461ffff16815181106108b6576108b6610ae0565b60200260200101516001600160a01b031681526020018263ffffffff16815250858361ffff16815181106108ec576108ec610ae0565b602090810291909101015250600101610848565b5050509392505050565b5f6020828403121561091a575f5ffd5b81356001600160e01b0319811681146104d6575f5ffd5b5f60208284031215610941575f5ffd5b813561ffff811681146104d6575f5ffd5b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610313575f5ffd5b5f6020828403121561098a575f5ffd5b81356104d681610966565b634e487b7160e01b5f52604160045260245ffd5b80516109b481610966565b919050565b5f602082840312156109c9575f5ffd5b81516001600160401b038111156109de575f5ffd5b8201601f810184136109ee575f5ffd5b80516001600160401b03811115610a0757610a07610995565b604051600582901b90603f8201601f191681016001600160401b0381118282101715610a3557610a35610995565b604052918252602081840181019290810187841115610a52575f5ffd5b6020850194505b83851015610a7857610a6a856109a9565b815260209485019401610a59565b509695505050505050565b602080825282518282018190525f918401906040840190835b81811015610ad557835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101610a9c565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610b04575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561016557610165610b0b565b5f60208284031215610b42575f5ffd5b815160ff811681146104d6575f5ffd5b6001815b6001841115610b8d57808504811115610b7157610b71610b0b565b6001841615610b7f57908102905b60019390931c928002610b56565b935093915050565b5f82610ba357506001610165565b81610baf57505f610165565b8160018114610bc55760028114610bcf57610beb565b6001915050610165565b60ff841115610be057610be0610b0b565b50506001821b610165565b5060208310610133831016604e8410600b8410161715610c0e575081810a610165565b610c1a5f198484610b52565b805f1904821115610c2d57610c2d610b0b565b029392505050565b5f6104d660ff841683610b95565b808202811582820484141761016557610165610b0b565b5f82610c7457634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220718d1f5ec81ba854d72e6c3d0179b9bf0e22614b0911b80ba72054dc0f44c60864736f6c634300081c0033", + "bytecode": "0x608060405234801561000f575f5ffd5b50604051610e31380380610e3183398101604081905261002e9161012b565b826001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610065816100c1565b506001600160a01b03821661008d5760405163d92e233d60e01b815260040160405180910390fd5b6001805461ffff909216600160a01b026001600160b01b03199092166001600160a01b039093169290921717905550610175565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610126575f5ffd5b919050565b5f5f5f6060848603121561013d575f5ffd5b61014684610110565b925061015460208501610110565b9150604084015161ffff8116811461016a575f5ffd5b809150509250925092565b610caf806101825f395ff3fe608060405234801561000f575f5ffd5b5060043610610076575f3560e01c806301ffc9a71461007a5780632fc12f41146100a2578063715018a6146100b757806379502c55146100bf5780638da5cb5b146100df5780639d2f7e84146100e7578063b4f40c61146100fa578063f2fde38b14610122575b5f5ffd5b61008d61008836600461090a565b610135565b60405190151581526020015b60405180910390f35b6100b56100b0366004610931565b61016b565b005b6100b5610195565b6001546100d2906001600160a01b031681565b6040516100999190610952565b6100d26101a8565b6100b56100f536600461097a565b6101b6565b60015461010f90600160a01b900461ffff1681565b60405161ffff9091168152602001610099565b6100b561013036600461097a565b6102d0565b5f6001600160e01b0319821663274bdfa160e21b148061016557506301ffc9a760e01b6001600160e01b03198316145b92915050565b610173610316565b6001805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b61019d610316565b6101a65f610348565b565b5f546001600160a01b031690565b5f816001600160a01b0316634e85b1356040518163ffffffff1660e01b81526004015f60405180830381865afa1580156101f2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261021991908101906109b9565b80519091505f6102298383610397565b6001549091505f9061024a9061ffff600160a01b90910481169085166104cb565b90505f5f61025a868587866104dd565b915091505f61026a838386610722565b6040516358debf1760e11b81529091506001600160a01b0389169063b1bd7e2e90610299908490600401610a83565b5f604051808303815f87803b1580156102b0575f5ffd5b505af11580156102c2573d5f5f3e3d5ffd5b505050505050505050505050565b6102d8610316565b6001600160a01b03811661030a575f604051631e4fbdf760e01b81526004016103019190610952565b60405180910390fd5b61031381610348565b50565b3361031f6101a8565b6001600160a01b0316146101a6573360405163118cdaa760e01b81526004016103019190610952565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608161ffff166001600160401b038111156103b5576103b5610995565b6040519080825280602002602001820160405280156103de578160200160208202803683370190505b5090505f5b8261ffff168161ffff1610156104c457838161ffff168151811061040957610409610ae0565b60200260200101516001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561046a575060408051601f3d908101601f1916820190925261046791810190610af4565b60015b610497576001828261ffff168151811061048657610486610ae0565b6020026020010181815250506104bc565b80838361ffff16815181106104ae576104ae610ae0565b602002602001018181525050505b6001016103e3565b5092915050565b5f8282188284100282185b9392505050565b6060808261ffff166001600160401b038111156104fc576104fc610995565b604051908082528060200260200182016040528015610525578160200160208202803683370190505b5091508261ffff166001600160401b0381111561054457610544610995565b60405190808252806020026020018201604052801561056d578160200160208202803683370190505b5090505f8461ffff166001600160401b0381111561058d5761058d610995565b6040519080825280602002602001820160405280156105b6578160200160208202803683370190505b5090505f5b8461ffff168161ffff161015610717575f80805b8861ffff168161ffff16101561065b57848161ffff16815181106105f5576105f5610ae0565b60200260200101511580156106265750828a8261ffff168151811061061c5761061c610ae0565b6020026020010151115b1561065357898161ffff168151811061064157610641610ae0565b602002602001015192508061ffff1691505b6001016105cf565b50600184828151811061067057610670610ae0565b60200260200101901515908115158152505089818151811061069457610694610ae0565b6020026020010151868461ffff16815181106106b2576106b2610ae0565b60200260200101906001600160a01b031690816001600160a01b0316815250508881815181106106e4576106e4610ae0565b6020026020010151858461ffff168151811061070257610702610ae0565b602090810291909101015250506001016105bb565b505094509492505050565b60605f805b8361ffff168161ffff16101561076a57848161ffff168151811061074d5761074d610ae0565b6020026020010151826107609190610b1f565b9150600101610727565b506001546040805163d1717c7d60e01b815290515f926001600160a01b03169163d1717c7d9160048083019260209291908290030181865afa1580156107b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d69190610b32565b6107e190600a610c35565b90508361ffff166001600160401b038111156107ff576107ff610995565b60405190808252806020026020018201604052801561084357816020015b604080518082019091525f808252602082015281526020019060019003908161081d5790505b5092505f5b8461ffff168161ffff161015610900575f838363ffffffff16888461ffff168151811061087757610877610ae0565b60200260200101516108899190610c43565b6108939190610c5a565b90506040518060400160405280898461ffff16815181106108b6576108b6610ae0565b60200260200101516001600160a01b031681526020018263ffffffff16815250858361ffff16815181106108ec576108ec610ae0565b602090810291909101015250600101610848565b5050509392505050565b5f6020828403121561091a575f5ffd5b81356001600160e01b0319811681146104d6575f5ffd5b5f60208284031215610941575f5ffd5b813561ffff811681146104d6575f5ffd5b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610313575f5ffd5b5f6020828403121561098a575f5ffd5b81356104d681610966565b634e487b7160e01b5f52604160045260245ffd5b80516109b481610966565b919050565b5f602082840312156109c9575f5ffd5b81516001600160401b038111156109de575f5ffd5b8201601f810184136109ee575f5ffd5b80516001600160401b03811115610a0757610a07610995565b604051600582901b90603f8201601f191681016001600160401b0381118282101715610a3557610a35610995565b604052918252602081840181019290810187841115610a52575f5ffd5b6020850194505b83851015610a7857610a6a856109a9565b815260209485019401610a59565b509695505050505050565b602080825282518282018190525f918401906040840190835b81811015610ad557835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101610a9c565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610b04575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561016557610165610b0b565b5f60208284031215610b42575f5ffd5b815160ff811681146104d6575f5ffd5b6001815b6001841115610b8d57808504811115610b7157610b71610b0b565b6001841615610b7f57908102905b60019390931c928002610b56565b935093915050565b5f82610ba357506001610165565b81610baf57505f610165565b8160018114610bc55760028114610bcf57610beb565b6001915050610165565b60ff841115610be057610be0610b0b565b50506001821b610165565b5060208310610133831016604e8410600b8410161715610c0e575081810a610165565b610c1a5f198484610b52565b805f1904821115610c2d57610c2d610b0b565b029392505050565b5f6104d660ff841683610b95565b808202811582820484141761016557610165610b0b565b5f82610c7457634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220cd37521a44e2d39c66f43d312b1dd2f27a4e9660bef98f06f36f19f34a518d8e64736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610076575f3560e01c806301ffc9a71461007a5780632fc12f41146100a2578063715018a6146100b757806379502c55146100bf5780638da5cb5b146100df5780639d2f7e84146100e7578063b4f40c61146100fa578063f2fde38b14610122575b5f5ffd5b61008d61008836600461090a565b610135565b60405190151581526020015b60405180910390f35b6100b56100b0366004610931565b61016b565b005b6100b5610195565b6001546100d2906001600160a01b031681565b6040516100999190610952565b6100d26101a8565b6100b56100f536600461097a565b6101b6565b60015461010f90600160a01b900461ffff1681565b60405161ffff9091168152602001610099565b6100b561013036600461097a565b6102d0565b5f6001600160e01b0319821663274bdfa160e21b148061016557506301ffc9a760e01b6001600160e01b03198316145b92915050565b610173610316565b6001805461ffff909216600160a01b0261ffff60a01b19909216919091179055565b61019d610316565b6101a65f610348565b565b5f546001600160a01b031690565b5f816001600160a01b0316634e85b1356040518163ffffffff1660e01b81526004015f60405180830381865afa1580156101f2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261021991908101906109b9565b80519091505f6102298383610397565b6001549091505f9061024a9061ffff600160a01b90910481169085166104cb565b90505f5f61025a868587866104dd565b915091505f61026a838386610722565b6040516358debf1760e11b81529091506001600160a01b0389169063b1bd7e2e90610299908490600401610a83565b5f604051808303815f87803b1580156102b0575f5ffd5b505af11580156102c2573d5f5f3e3d5ffd5b505050505050505050505050565b6102d8610316565b6001600160a01b03811661030a575f604051631e4fbdf760e01b81526004016103019190610952565b60405180910390fd5b61031381610348565b50565b3361031f6101a8565b6001600160a01b0316146101a6573360405163118cdaa760e01b81526004016103019190610952565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608161ffff166001600160401b038111156103b5576103b5610995565b6040519080825280602002602001820160405280156103de578160200160208202803683370190505b5090505f5b8261ffff168161ffff1610156104c457838161ffff168151811061040957610409610ae0565b60200260200101516001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561046a575060408051601f3d908101601f1916820190925261046791810190610af4565b60015b610497576001828261ffff168151811061048657610486610ae0565b6020026020010181815250506104bc565b80838361ffff16815181106104ae576104ae610ae0565b602002602001018181525050505b6001016103e3565b5092915050565b5f8282188284100282185b9392505050565b6060808261ffff166001600160401b038111156104fc576104fc610995565b604051908082528060200260200182016040528015610525578160200160208202803683370190505b5091508261ffff166001600160401b0381111561054457610544610995565b60405190808252806020026020018201604052801561056d578160200160208202803683370190505b5090505f8461ffff166001600160401b0381111561058d5761058d610995565b6040519080825280602002602001820160405280156105b6578160200160208202803683370190505b5090505f5b8461ffff168161ffff161015610717575f80805b8861ffff168161ffff16101561065b57848161ffff16815181106105f5576105f5610ae0565b60200260200101511580156106265750828a8261ffff168151811061061c5761061c610ae0565b6020026020010151115b1561065357898161ffff168151811061064157610641610ae0565b602002602001015192508061ffff1691505b6001016105cf565b50600184828151811061067057610670610ae0565b60200260200101901515908115158152505089818151811061069457610694610ae0565b6020026020010151868461ffff16815181106106b2576106b2610ae0565b60200260200101906001600160a01b031690816001600160a01b0316815250508881815181106106e4576106e4610ae0565b6020026020010151858461ffff168151811061070257610702610ae0565b602090810291909101015250506001016105bb565b505094509492505050565b60605f805b8361ffff168161ffff16101561076a57848161ffff168151811061074d5761074d610ae0565b6020026020010151826107609190610b1f565b9150600101610727565b506001546040805163d1717c7d60e01b815290515f926001600160a01b03169163d1717c7d9160048083019260209291908290030181865afa1580156107b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d69190610b32565b6107e190600a610c35565b90508361ffff166001600160401b038111156107ff576107ff610995565b60405190808252806020026020018201604052801561084357816020015b604080518082019091525f808252602082015281526020019060019003908161081d5790505b5092505f5b8461ffff168161ffff161015610900575f838363ffffffff16888461ffff168151811061087757610877610ae0565b60200260200101516108899190610c43565b6108939190610c5a565b90506040518060400160405280898461ffff16815181106108b6576108b6610ae0565b60200260200101516001600160a01b031681526020018263ffffffff16815250858361ffff16815181106108ec576108ec610ae0565b602090810291909101015250600101610848565b5050509392505050565b5f6020828403121561091a575f5ffd5b81356001600160e01b0319811681146104d6575f5ffd5b5f60208284031215610941575f5ffd5b813561ffff811681146104d6575f5ffd5b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610313575f5ffd5b5f6020828403121561098a575f5ffd5b81356104d681610966565b634e487b7160e01b5f52604160045260245ffd5b80516109b481610966565b919050565b5f602082840312156109c9575f5ffd5b81516001600160401b038111156109de575f5ffd5b8201601f810184136109ee575f5ffd5b80516001600160401b03811115610a0757610a07610995565b604051600582901b90603f8201601f191681016001600160401b0381118282101715610a3557610a35610995565b604052918252602081840181019290810187841115610a52575f5ffd5b6020850194505b83851015610a7857610a6a856109a9565b815260209485019401610a59565b509695505050505050565b602080825282518282018190525f918401906040840190835b81811015610ad557835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101610a9c565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610b04575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561016557610165610b0b565b5f60208284031215610b42575f5ffd5b815160ff811681146104d6575f5ffd5b6001815b6001841115610b8d57808504811115610b7157610b71610b0b565b6001841615610b7f57908102905b60019390931c928002610b56565b935093915050565b5f82610ba357506001610165565b81610baf57505f610165565b8160018114610bc55760028114610bcf57610beb565b6001915050610165565b60ff841115610be057610be0610b0b565b50506001821b610165565b5060208310610133831016604e8410600b8410161715610c0e575081810a610165565b610c1a5f198484610b52565b805f1904821115610c2d57610c2d610b0b565b029392505050565b5f6104d660ff841683610b95565b808202811582820484141761016557610165610b0b565b5f82610c7457634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220cd37521a44e2d39c66f43d312b1dd2f27a4e9660bef98f06f36f19f34a518d8e64736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/vaults/OrionTransparentVault.sol/OrionTransparentVault.json b/artifacts/contracts/vaults/OrionTransparentVault.sol/OrionTransparentVault.json index ec5c332e..fd04d768 100644 --- a/artifacts/contracts/vaults/OrionTransparentVault.sol/OrionTransparentVault.json +++ b/artifacts/contracts/vaults/OrionTransparentVault.sol/OrionTransparentVault.json @@ -756,19 +756,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "MAX_FULFILL_BATCH_SIZE", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "MAX_MANAGEMENT_FEE", @@ -1396,7 +1383,13 @@ "type": "function" }, { - "inputs": [], + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillBatchSize", + "type": "uint256" + } + ], "name": "pendingDeposit", "outputs": [ { @@ -1409,7 +1402,13 @@ "type": "function" }, { - "inputs": [], + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillBatchSize", + "type": "uint256" + } + ], "name": "pendingRedeem", "outputs": [ { @@ -1817,8 +1816,8 @@ "type": "function" } ], - "bytecode": "0x60c060405234801561000f575f5ffd5b50604051614e0a380380614e0a83398101604081905261002e916109ae565b8787878787878787856001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610072573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100969190610a7d565b858560036100a48382610b23565b5060046100b18282610b23565b5050505f5f6100c58361066a60201b60201c565b91509150816100d55760126100d7565b805b60ff1660a05250506001600160a01b03908116608052600160055587166101115760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0386166101385760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b03808b166001600160a01b031992831617909255600780548a841690831617905560088054928916929091168217905560408051630691d8b960e31b8152905163348ec5c8916004808201926020929091908290030181865afa1580156101ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d09190610a7d565b60095f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b0316633a0dad8e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610231573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102559190610a7d565b600a5f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b031663d1717c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102da9190610bdd565b600a60146101000a81548160ff021916908360ff1602179055505f866001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610331573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103559190610a7d565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610390573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b49190610bdd565b9050601260ff821611156103db57604051631c03248960e11b815260040160405180910390fd5b600460ff85161115610400576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff84161115610427576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff8316111561044e576040516317dbc4cb60e21b815260040160405180910390fd5b8360ff16600481111561046357610463610bf6565b6017805460ff1916600183600481111561047f5761047f610bf6565b02179055506017805461ffff84811663010000000264ffff00000019918716610100029190911664ffffffff0019909216919091171790556104c281600a610d01565b60185560178054601a8054909160ff1690829060ff191660018360048111156104ed576104ed610bf6565b02179055508154815461ffff61010092839004811690920262ffff0019821681178455845463010000009081900490931690920264ffff0000001990921664ffffffff0019909116171781556001918201549101554260195561054e610740565b50505050505050505061065c60085f9054906101000a90046001600160a01b03166001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ce9190610a7d565b60085f9054906101000a90046001600160a01b03166001600160a01b031663d1717c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106429190610bdd565b61064d90600a610d01565b6020919063ffffffff16610815565b505050505050505050610e02565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b038716916106b091610d0f565b5f60405180830381855afa9150503d805f81146106e8576040519150601f19603f3d011682016040523d82523d5f602084013e6106ed565b606091505b509150915081801561070157506020815110155b15610734575f8180602001905181019061071b9190610d25565b905060ff8111610732576001969095509350505050565b505b505f9485945092505050565b60085460408051636c366a2760e11b815290515f926001600160a01b03169163d86cd44e91600480830192869291908290030181865afa158015610786573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107ad9190810190610d3c565b90505f5b8151811015610811575f6107e88383815181106107d0576107d0610dee565b6020026020010151600b61083260201b90919060201c565b90508061080857604051630ea075bf60e21b815260040160405180910390fd5b506001016107b1565b5050565b5f61082a846001600160a01b0385168461084f565b949350505050565b5f610846836001600160a01b03841661086b565b90505b92915050565b5f828152600284016020526040812082905561082a84846108b7565b5f8181526001830160205260408120546108b057508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610849565b505f610849565b5f610846838361086b565b6001600160a01b03811681146108d6575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610915576109156108d9565b604052919050565b5f82601f83011261092c575f5ffd5b81516001600160401b03811115610945576109456108d9565b610958601f8201601f19166020016108ed565b81815284602083860101111561096c575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b805160ff81168114610998575f5ffd5b919050565b805161ffff81168114610998575f5ffd5b5f5f5f5f5f5f5f5f610100898b0312156109c6575f5ffd5b88516109d1816108c2565b60208a01519098506109e2816108c2565b60408a01519097506109f3816108c2565b60608a01519096506001600160401b03811115610a0e575f5ffd5b610a1a8b828c0161091d565b60808b015190965090506001600160401b03811115610a37575f5ffd5b610a438b828c0161091d565b945050610a5260a08a01610988565b9250610a6060c08a0161099d565b9150610a6e60e08a0161099d565b90509295985092959890939650565b5f60208284031215610a8d575f5ffd5b8151610a98816108c2565b9392505050565b600181811c90821680610ab357607f821691505b602082108103610ad157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610b1e57805f5260205f20601f840160051c81016020851015610afc5750805b601f840160051c820191505b81811015610b1b575f8155600101610b08565b50505b505050565b81516001600160401b03811115610b3c57610b3c6108d9565b610b5081610b4a8454610a9f565b84610ad7565b6020601f821160018114610b82575f8315610b6b5750848201515b5f19600385901b1c1916600184901b178455610b1b565b5f84815260208120601f198516915b82811015610bb15787850151825560209485019460019092019101610b91565b5084821015610bce57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610bed575f5ffd5b61084682610988565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610c5957808504811115610c3d57610c3d610c0a565b6001841615610c4b57908102905b60019390931c928002610c22565b935093915050565b5f82610c6f57506001610849565b81610c7b57505f610849565b8160018114610c915760028114610c9b57610cb7565b6001915050610849565b60ff841115610cac57610cac610c0a565b50506001821b610849565b5060208310610133831016604e8410600b8410161715610cda575081810a610849565b610ce65f198484610c1e565b805f1904821115610cf957610cf9610c0a565b029392505050565b5f61084660ff841683610c61565b5f82518060208501845e5f920191825250919050565b5f60208284031215610d35575f5ffd5b5051919050565b5f60208284031215610d4c575f5ffd5b81516001600160401b03811115610d61575f5ffd5b8201601f81018413610d71575f5ffd5b80516001600160401b03811115610d8a57610d8a6108d9565b8060051b610d9a602082016108ed565b91825260208184018101929081019087841115610db5575f5ffd5b6020850194505b83851015610de35784519250610dd1836108c2565b82825260209485019490910190610dbc565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b60805160a051613fea610e205f395f50505f610fd30152613fea5ff3fe608060405234801561000f575f5ffd5b50600436106102e2575f3560e01c806395d89b411161018c57806395d89b411461051c57806397ee114414610524578063985ba4ae1461055a5780639908840c1461056d578063a68a526714610576578063a9059cbb14610589578063aa2f892d1461059c578063acdb3d51146105af578063b1bd7e2e146105b8578063b3d7f6b9146105cb578063b460af94146105de578063b6eba653146105ec578063ba08765214610602578063bdca916514610615578063c0b568e11461061e578063c3f0d30e14610631578063c63d75b61461045e578063c6e6f59214610644578063ca78e83914610657578063ce96cb771461065f578063d1717c7d14610672578063d3d0345814610686578063d82795481461069c578063d853365f146106a4578063d905777e146106ac578063dd62ed3e146106bf578063e3352c4c146106d2578063e51a85f6146106e5578063e5e97193146106f8578063e66f53b71461070b578063ef8b30f714610644578063f64c6f321461071e575f5ffd5b806301e1d114146102e657806303d44854146102fd57806306fdde031461031257806307a2d13a14610327578063095ea7b31461033a5780630a28a4771461035d5780630a605c6d146103705780630c6a62dd146103785780630d1e66671461038b5780630df571f71461039e57806318160ddd146103b157806318c21949146103b95780631f52692b146103cc57806323b872dd146103ec578063283c8168146103ff578063313ce56714610408578063348ec5c81461041d57806338d52e0f146104305780633a0dad8e146104385780633ab6d27c1461044b578063402d267d1461045e578063493a6e21146104725780634cdad506146103275780634e85b1351461048557806353a0bfdf1461049a5780636e553f65146104a757806370a08231146104ba5780637847ea53146104cd57806379502c55146104ed5780638f5c94651461050057806394bf804d146104a7575b5f5ffd5b600d545b6040519081526020015b60405180910390f35b61031061030b36600461379c565b610726565b005b61031a610975565b6040516102f4919061380b565b6102ea610335366004613840565b610a05565b61034d61034836600461386b565b610a16565b60405190151581526020016102f4565b6102ea61036b366004613840565b610a2d565b6015546102ea565b610310610386366004613895565b610a39565b610310610399366004613840565b610b39565b6103106103ac3660046138b0565b610e62565b6002546102ea565b6103106103c7366004613840565b610edd565b6006546103df906001600160a01b031681565b6040516102f491906138d0565b61034d6103fa3660046138e4565b610fac565b6102ea60195481565b60125b60405160ff90911681526020016102f4565b6009546103df906001600160a01b031681565b6103df610fd1565b600a546103df906001600160a01b031681565b61031061045936600461393f565b610ff5565b6102ea61046c366004613895565b505f1990565b610310610480366004613840565b6112a7565b61048d6114d2565b6040516102f491906139ca565b601c5461034d9060ff1681565b6102ea6104b53660046139dc565b6114e3565b6102ea6104c8366004613895565b6114fd565b6104d86301e1338081565b60405163ffffffff90911681526020016102f4565b6008546103df906001600160a01b031681565b61050961271081565b60405161ffff90911681526020016102f4565b61031a611517565b60175460185461054a9160ff81169161ffff610100830481169263010000009004169084565b6040516102f49493929190613a1e565b610310610568366004613a9c565b611526565b61050961012c81565b6102ea610584366004613ae3565b611633565b61034d61059736600461386b565b611673565b6103106105aa366004613840565b611680565b6102ea60165481565b6103106105c6366004613b11565b611916565b6102ea6105d9366004613840565b611b21565b6102ea6104b5366004613b4f565b6105f4611b2d565b6040516102f4929190613b83565b6102ea610610366004613b4f565b611de7565b610509610bb881565b61031061062c366004613840565b611fdd565b61031061063f366004613840565b612195565b6102ea610652366004613840565b61230d565b610310612318565b6102ea61066d366004613895565b612352565b600a5461040b90600160a01b900460ff1681565b61068e612365565b6040516102f4929190613be1565b610509609681565b61040b601281565b6102ea6106ba366004613895565b61248f565b6102ea6106cd366004613c2d565b612499565b6103106106e0366004613895565b6124c3565b6102ea6106f3366004613840565b6125ce565b610310610706366004613840565b612607565b6007546103df906001600160a01b031681565b6014546102ea565b6006546001600160a01b0316331461075157604051631a27eac360e11b815260040160405180910390fd5b61075b600b6127bf565b5f5b8181101561085b575f83838381811061077857610778613c59565b905060200201602081019061078d9190613895565b600854604051633af32abf60e01b81529192506001600160a01b031690633af32abf906107be9084906004016138d0565b602060405180830381865afa1580156107d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fd9190613c6d565b610825578060405163751dff9760e11b815260040161081c91906138d0565b60405180910390fd5b5f610831600b836127c8565b90508061085157604051630ea075bf60e21b815260040160405180910390fd5b505060010161075d565b506108c7306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf9190613c8c565b600b906127dc565b61093857610936306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092e9190613c8c565b600b906127c8565b505b7fa975983c7a4dcf80477a447433240de322f36428f1b3864e50d7a45e14c68b668282604051610969929190613ca7565b60405180910390a15050565b60606003805461098490613cf3565b80601f01602080910402602001604051908101604052809291908181526020018280546109b090613cf3565b80156109fb5780601f106109d2576101008083540402835291602001916109fb565b820191905f5260205f20905b8154815290600101906020018083116109de57829003601f168201915b5050505050905090565b5f610a10825f6127f0565b92915050565b5f33610a23818585612831565b5060019392505050565b5f610a10826001612843565b6006546001600160a01b03163314610a6457604051631a27eac360e11b815260040160405180910390fd5b600854604051633c17975360e21b81526001600160a01b039091169063f05e5d4c90610a949084906004016138d0565b602060405180830381865afa158015610aaf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad39190613c6d565b610af057604051631a27eac360e11b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f83293ffeebb677b167941693470018acf300605df266a35e9fdb66f24ff00fe0905f90a250565b610b41612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb59190613c6d565b610bd2576040516312aecd8160e01b815260040160405180910390fd5b601c5460ff1680610c4d575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590610c0e9030906004016138d0565b602060405180830381865afa158015610c29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4d9190613c6d565b15610c6b576040516304b1e71160e41b815260040160405180910390fd5b805f03610c9457610c7a610fd1565b604051636b30633560e01b815260040161081c91906138d0565b60085460408051633228036560e11b815290515f926001600160a01b03169163645006ca9160048083019260209291908290030181865afa158015610cdb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cff9190613d2b565b905080821015610d26578181604051631e2be21160e01b815260040161081c929190613d42565b5f610d2f610fd1565b6001600160a01b03166370a08231336040518263ffffffff1660e01b8152600401610d5a91906138d0565b602060405180830381865afa158015610d75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d999190613d2b565b905080831115610dbc57604051632ca2f52b60e11b815260040160405180910390fd5b600a54610de89033906001600160a01b031685610dd7610fd1565b6001600160a01b031692919061289f565b5f610df4600e3361290c565b9150610e0f905033610e068684613d64565b600e9190612932565b508360145f828254610e219190613d64565b9091555050604051849033907f55896b30a78fc55b78937f8014dde3f0035e9d37a4f6ac36841fb8b62f7e2b13905f90a3505050610e5f6001600555565b50565b6009546001600160a01b03163314610e8d57604051631a27eac360e11b815260040160405180910390fd5b8015610ed9578060165f828254610ea49190613d64565b9091555050601654604051829084907f8b8789cf9157fe7b016901e4ed3a5d0971caa8b7c031da0b25638ccf65841b2a905f90a45b5050565b6006546001600160a01b03163314610f0857604051631a27eac360e11b815260040160405180910390fd5b805f03610f1757610c7a610fd1565b601654811115610f3a57604051632ca2f52b60e11b815260040160405180910390fd5b8060165f828254610f4b9190613d77565b9091555050600a5460405163741fca4b60e01b8152600481018390526001600160a01b039091169063741fca4b906024015f604051808303815f87803b158015610f93575f5ffd5b505af1158015610fa5573d5f5f3e3d5ffd5b5050505050565b5f33610fb9858285612947565b610fc4858585612992565b60019150505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6006546001600160a01b0316331461102057604051631a27eac360e11b815260040160405180910390fd5b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611070573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110949190613c6d565b6110b1576040516312aecd8160e01b815260040160405180910390fd5b600460ff841611156110d6576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff831611156110fd576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff82161115611124576040516317dbc4cb60e21b815260040160405180910390fd5b61112c6129ef565b8051601a8054909190829060ff1916600183600481111561114f5761114f613a0a565b021790555060208201518154604084015161ffff90811663010000000264ffff0000001991909316610100021664ffffffff00199091161717815560609091015160019091015560ff831660048111156111ab576111ab613a0a565b6017805460ff191660018360048111156111c7576111c7613a0a565b02179055506017805461ffff83811663010000000264ffff00000019918616610100029190911664ffffffff00199092169190911717905560085460408051630df1aa5760e31b815290516001600160a01b0390921691636f8d52b8916004808201926020929091908290030181865afa158015611247573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126b9190613d2b565b6112759042613d64565b60195560405130907fb31d0e1c8c885e6966984333ce964f4a58ad72b6c4e89e688ecc4549ad97558e905f90a2505050565b600a546001600160a01b031633146112d257604051631a27eac360e11b815260040160405180910390fd5b6112da612875565b5f6112e56011612aa9565b90508063ffffffff165f036112fa57506114c8565b5f609663ffffffff83161161130f5781611312565b60965b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611365573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113899190613d8a565b90505f61139560025490565b90505f805b8461ffff168161ffff1610156114ab575f806113b7601182612ab3565b90925090506113c7601183612ac1565b505f6113d5828b885f612ad5565b90506113e13083612b0a565b6113eb8286613d64565b600a54604051634adfc2e760e01b81529196506001600160a01b031690634adfc2e79061141e9086908590600401613da5565b5f604051808303815f87803b158015611435575f5ffd5b505af1158015611447573d5f5f3e3d5ffd5b505050508661ffff16836001600160a01b0316306001600160a01b03167f215abfcd108b85fbee47f26fda2de66f90f14fa5fcaf0201698ad8ac9323545f8486604051611495929190613d42565b60405180910390a450505080600101905061139a565b508060155f8282546114bd9190613d77565b909155505050505050505b610e5f6001600555565b60606114de600b612b3e565b905090565b5f60405163125ad87760e31b815260040160405180910390fd5b6001600160a01b03165f9081526020819052604090205490565b60606004805461098490613cf3565b6009546001600160a01b0316331461155157604051631a27eac360e11b815260040160405180910390fd5b61155b601d612b4a565b815f5b8161ffff168161ffff1610156115d7576115ce85858361ffff1681811061158757611587613c59565b61159d9260206040909202019081019150613895565b86868461ffff168181106115b3576115b3613c59565b90506040020160200135601d6129329092919063ffffffff16565b5060010161155e565b505f6115ea60125b61033590600a613ea1565b6018549091508111156115fd5760188190555b600d83905560405183907f5e1ff954b5e5257e9ee5d4cb07059e8f5e69b1aaaf9911e5d8d90a6894de9c21905f90a25050505050565b5f61166b611642846001613d64565b61164a612b53565b61165590600a613ea1565b6002546116629190613d64565b86919085612bcf565b949350505050565b5f33610a23818585612992565b611688612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fc9190613c6d565b611719576040516312aecd8160e01b815260040160405180910390fd5b601c5460ff1680611794575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb45906117559030906004016138d0565b602060405180830381865afa158015611770573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117949190613c6d565b156117b2576040516304b1e71160e41b815260040160405180910390fd5b805f036117d45730604051636b30633560e01b815260040161081c91906138d0565b60085460408051630912ae6d60e01b815290515f926001600160a01b031691630912ae6d9160048083019260209291908290030181865afa15801561181b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183f9190613d2b565b905080821015611866578181604051631f29a4af60e31b815260040161081c929190613d42565b5f611870336114fd565b90508083111561189357604051632ca2f52b60e11b815260040160405180910390fd5b61189f3033818661289f565b5f6118ab60113361290c565b91506118c69050336118bd8684613d64565b60119190612932565b508360155f8282546118d89190613d64565b9091555050604051849033907f222dc200773fe9b45015bf792e8fee37d651e3590c215806a5042404b6d741d2905f90a3505050610e5f6001600555565b6007546001600160a01b0316331461194157604051631a27eac360e11b815260040160405180910390fd5b5f81900361196257604051631121aa8d60e01b815260040160405180910390fd5b61196c6020612b4a565b5f816001600160401b0381111561198557611985613eaf565b6040519080825280602002602001820160405280156119ae578160200160208202803683370190505b5090505f82815b8161ffff168161ffff161015611aab575f86868361ffff168181106119dc576119dc613c59565b6119f29260206040909202019081019150613895565b90505f87878461ffff16818110611a0b57611a0b613c59565b9050604002016020016020810190611a239190613ed4565b905081868461ffff1681518110611a3c57611a3c613c59565b6001600160a01b039092166020928302919091018201525f90611a69908463ffffffff8086169061293216565b905080611a8b57826040516346bdabe160e01b815260040161081c91906138d0565b611a9b63ffffffff831687613d64565b95505050508060010190506119b5565b50611ab583612c11565b600a60149054906101000a900460ff16600a611ad19190613ea1565b8214611af057604051639006dd2760e01b815260040160405180910390fd5b60405133907f2d47a742b8d7df7c1fc5a9a631b206b364e6cb2722490759f63bb3ab14b132e0905f90a25050505050565b5f610a108260016127f0565b601c54606090819060ff1615611cb05760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060085460408051631c56369f60e21b815290519394506001600160a01b0390911692637158da7c925060048083019260209291908290030181865afa158015611bc4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be89190613c8c565b825f81518110611bfa57611bfa613c59565b6001600160a01b039283166020918202929092018101919091526008546040805163d1717c7d60e01b81529051919093169263d1717c7d9260048083019391928290030181865afa158015611c51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c759190613eef565b611c8090600a613ea1565b815f81518110611c9257611c92613c59565b602002602001019063ffffffff16908163ffffffff16815250509091565b5f611cbb6020612aa9565b90508061ffff166001600160401b03811115611cd957611cd9613eaf565b604051908082528060200260200182016040528015611d02578160200160208202803683370190505b5092508061ffff166001600160401b03811115611d2157611d21613eaf565b604051908082528060200260200182016040528015611d4a578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611de1575f80611d70602061ffff8516612ab3565b9150915081868461ffff1681518110611d8b57611d8b613c59565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff1681518110611dc257611dc2613c59565b63ffffffff909216602092830291909101909101525050600101611d4f565b50509091565b5f611df0612875565b60085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590611e209030906004016138d0565b602060405180830381865afa158015611e3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5f9190613c6d565b611e7c5760405163125ad87760e31b815260040160405180910390fd5b5f611e868361248f565b905080851115611eaf57828582604051632e52afbb60e21b815260040161081c93929190613f0a565b845f03611ed15730604051636b30633560e01b815260040161081c91906138d0565b336001600160a01b03841614611eec57611eec833387612947565b5f611ef686610a05565b905080600d5f828254611f099190613d77565b90915550611f1990508487612b0a565b836001600160a01b0316856001600160a01b0316336001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db848a604051611f68929190613d42565b60405180910390a4600a54604051627b8a6760e11b8152600481018390526001600160a01b0387811660248301529091169062f714ce906044015f604051808303815f87803b158015611fb9575f5ffd5b505af1158015611fcb573d5f5f3e3d5ffd5b5092945050505050610fca6001600555565b611fe5612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612035573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120599190613c6d565b612076576040516312aecd8160e01b815260040160405180910390fd5b805f0361208557610c7a610fd1565b5f612091600e3361290c565b915050818110156120b557604051632ca2f52b60e11b815260040160405180910390fd5b5f6120c08383613d77565b9050805f036120da576120d4600e33612ac1565b506120e8565b6120e6600e3383612932565b505b8260145f8282546120f99190613d77565b9091555050600a546040516351edffb160e01b81526001600160a01b03909116906351edffb1906121309033908790600401613da5565b5f604051808303815f87803b158015612147575f5ffd5b505af1158015612159573d5f5f3e3d5ffd5b50506040518592503391507f96a9a6886cdf3047a125454218a23d3961fd3a78643123b248a9d106d0ac94fd905f90a35050610e5f6001600555565b61219d612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ed573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122119190613c6d565b61222e576040516312aecd8160e01b815260040160405180910390fd5b805f036122505730604051636b30633560e01b815260040161081c91906138d0565b5f61225c60113361290c565b9150508181101561228057604051632ca2f52b60e11b815260040160405180910390fd5b5f61228b8383613d77565b9050805f036122a55761229f601133612ac1565b506122b3565b6122b160113383612932565b505b8260155f8282546122c49190613d77565b909155506122d59050303385612c89565b604051839033907f046d3e17087d323298991516e3fdec36fe1204d6bff7fb6e2b8eca77b80a22ad905f90a35050610e5f6001600555565b5f610a10825f612843565b6008546001600160a01b031633146123435760405163ea8e4eb560e01b815260040160405180910390fd5b601c805460ff19166001179055565b5f610a1061235f836114fd565b5f6127f0565b6060805f612373601d612aa9565b90508061ffff166001600160401b0381111561239157612391613eaf565b6040519080825280602002602001820160405280156123ba578160200160208202803683370190505b5092508061ffff166001600160401b038111156123d9576123d9613eaf565b604051908082528060200260200182016040528015612402578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611de1575f80612428601d61ffff8516612ab3565b9150915081868461ffff168151811061244357612443613c59565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff168151811061247a5761247a613c59565b60209081029190910101525050600101612407565b5f610a10826114fd565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6008546001600160a01b031633146124ee5760405163ea8e4eb560e01b815260040160405180910390fd5b6124f9600b82612caf565b505f8061250760208461290c565b915091508161251557505050565b612520602084612ac1565b505f306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561255e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125829190613c8c565b90505f8061259160208461290c565b9150915081156125b8576125b2836125a98684613d64565b60209190612932565b506125c6565b6125c460208486612932565b505b505050505050565b5f5f6125d983612cc3565b90505f6125e68285613d77565b90505f6125f282612d8e565b90506125fe8184613d64565b95945050505050565b600a546001600160a01b0316331461263257604051631a27eac360e11b815260040160405180910390fd5b61263a612875565b5f612645600e612aa9565b90508063ffffffff165f0361265a57506114c8565b5f609663ffffffff83161161266f5781612672565b60965b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e99190613d8a565b90505f6126f560025490565b90505f805b8461ffff168161ffff1610156127ad575f80612717600e82612ab3565b9092509050612727600e83612ac1565b505f612735828b885f612e87565b90506127418382612eb3565b61274b8286613d64565b94508661ffff16836001600160a01b0316306001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f68585604051612797929190613d42565b60405180910390a45050508060010190506126fa565b508060145f8282546114bd9190613d77565b610e5f81612ee7565b5f610fca836001600160a01b038416612f40565b5f610fca836001600160a01b038416612f87565b5f610fca6127fd600d5490565b612808906001613d64565b612810612b53565b61281b90600a613ea1565b6002546128289190613d64565b85919085612bcf565b61283e8383836001612f9e565b505050565b5f610fca61284f612b53565b61285a90600a613ea1565b6002546128679190613d64565b600d54612828906001613d64565b60026005540361289857604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6040516001600160a01b0384811660248301528381166044830152606482018390526129069186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613070565b50505050565b5f808080612923866001600160a01b0387166130d3565b909450925050505b9250929050565b5f61166b846001600160a01b0385168461310b565b5f6129528484612499565b90505f19811015612906578181101561298457828183604051637dc7a0d960e11b815260040161081c93929190613f0a565b61290684848484035f612f9e565b6001600160a01b0383166129bb575f604051634b637e8f60e11b815260040161081c91906138d0565b6001600160a01b0382166129e4575f60405163ec442f0560e01b815260040161081c91906138d0565b61283e838383613127565b604080516080810182525f808252602082018190529181018290526060810191909152426019541115612a84576040805160808101909152601a8054829060ff166004811115612a4157612a41613a0a565b6004811115612a5257612a52613a0a565b8152815461ffff6101008204811660208401526301000000909104166040820152600190910154606090910152919050565b604080516080810190915260178054829060ff166004811115612a4157612a41613a0a565b5f610a108261323a565b5f8080806129238686613244565b5f610fca836001600160a01b03841661326d565b5f6125fe612ae4856001613d64565b612aec612b53565b612af790600a613ea1565b612b019086613d64565b87919085612bcf565b6001600160a01b038216612b33575f604051634b637e8f60e11b815260040161081c91906138d0565b610ed9825f83613127565b60605f610fca83613289565b610e5f816132e2565b5f5f612b5d610fd1565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b98573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bbc9190613eef565b9050612bc9816012613f2b565b91505090565b5f612bfc612bdc8361332b565b8015612bf757505f8480612bf257612bf2613f44565b868809115b151590565b612c07868686613357565b6125fe9190613d64565b5f5b8151811015610ed957612c49828281518110612c3157612c31613c59565b6020026020010151600b6127dc90919063ffffffff16565b612c8157818181518110612c5f57612c5f613c59565b602002602001015160405163751dff9760e11b815260040161081c91906138d0565b600101612c13565b61283e83846001600160a01b031663a9059cbb85856040516024016128d4929190613da5565b5f610fca836001600160a01b038416613407565b5f5f612ccd6129ef565b9050806040015161ffff165f03612ce657505f92915050565b60408101515f90612cfe9061ffff1685612710613357565b905061166b60095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d779190613f58565b829063ffffffff908116906301e133809061335716565b5f5f612d986129ef565b9050806020015161ffff165f03612db157505f92915050565b5f612dc8612dc16012600a613ea1565b855f611633565b90505f5f612dd8845f01516134ea565b9150915081831080612de8575080155b15612df857505f95945050505050565b5f612e16612e068386613d77565b602087015161ffff169084613357565b90505f612e268289612710613357565b9050612e7b60095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d53573d5f5f3e3d5ffd5b98975050505050505050565b5f6125fe612e93612b53565b612e9e90600a613ea1565b612ea89085613d64565b612b01866001613d64565b6001600160a01b038216612edc575f60405163ec442f0560e01b815260040161081c91906138d0565b610ed95f8383613127565b5f612ef0825490565b90505f5b81811015612f3957826001015f845f018381548110612f1557612f15613c59565b905f5260205f20015481526020019081526020015f205f9055806001019050612ef4565b50505f9055565b5f612f4b8383612f87565b612f8057508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a10565b505f610a10565b5f9081526001919091016020526040902054151590565b6001600160a01b038416612fc7575f60405163e602df0560e01b815260040161081c91906138d0565b6001600160a01b038316612ff0575f604051634a1406b160e11b815260040161081c91906138d0565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561290657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161306291815260200190565b60405180910390a350505050565b5f5f60205f8451602086015f885af18061308f576040513d5f823e3d81fd5b50505f513d915081156130a65780600114156130b3565b6001600160a01b0384163b155b156129065783604051635274afe760e01b815260040161081c91906138d0565b5f818152600283016020526040812054819080613100576130f485856135d4565b92505f915061292b9050565b60019250905061292b565b5f828152600284016020526040812082905561166b84846135df565b6001600160a01b038316613151578060025f8282546131469190613d64565b909155506131ae9050565b6001600160a01b0383165f90815260208190526040902054818110156131905783818360405163391434e360e21b815260040161081c93929190613f0a565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166131ca576002805482900390556131e8565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161322d91815260200190565b60405180910390a3505050565b5f610a10826135ea565b5f808061325185856135f3565b5f81815260029690960160205260409095205494959350505050565b5f8181526002830160205260408120819055610fca83836135fe565b6060815f018054806020026020016040519081016040528092919081815260200182805480156132d657602002820191905f5260205f20905b8154815260200190600101908083116132c2575b50505050509050919050565b5f6132ec8261323a565b90505f5b8181101561332157600283015f61330785846135f3565b815260208101919091526040015f908120556001016132f0565b50610ed9826127bf565b5f600282600381111561334057613340613a0a565b61334a9190613f73565b60ff166001149050919050565b5f5f5f6133648686613609565b91509150815f036133885783818161337e5761337e613f44565b0492505050610fca565b81841161339f5761339f6003851502601118613625565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f81815260018301602052604081205480156134e1575f613429600183613d77565b85549091505f9061343c90600190613d77565b905080821461349b575f865f01828154811061345a5761345a613c59565b905f5260205f200154905080875f01848154811061347a5761347a613c59565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806134ac576134ac613fa0565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a10565b5f915050610a10565b5f80806134f760126115df565b90505f84600481111561350c5761350c613a0a565b0361351c578092508291506135ce565b600384600481111561353057613530613a0a565b036135425760185492508291506135ce565b600184600481111561355657613556613a0a565b0361356e5761356481613636565b92508091506135ce565b600284600481111561358257613582613a0a565b0361359a5761359081613636565b92508291506135ce565b60048460048111156135ae576135ae613a0a565b036135ce576018546135c8906135c383613636565b61375c565b92508291505b50915091565b5f610fca838361376b565b5f610fca8383612f40565b5f610a10825490565b5f610fca8383613776565b5f610fca8383613407565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f5f60085f9054906101000a90046001600160a01b03166001600160a01b031663f3cc69936040518163ffffffff1660e01b8152600401602060405180830381865afa158015613688573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136ac9190613d8a565b61ffff1690505f61374160095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613706573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061372a9190613f58565b839063ffffffff908116906301e133809061335716565b905061166b61375282612710613d64565b8590612710613357565b5f828218828411028218610fca565b5f610fca8383612f87565b5f825f01828154811061378b5761378b613c59565b905f5260205f200154905092915050565b5f5f602083850312156137ad575f5ffd5b82356001600160401b038111156137c2575f5ffd5b8301601f810185136137d2575f5ffd5b80356001600160401b038111156137e7575f5ffd5b8560208260051b84010111156137fb575f5ffd5b6020919091019590945092505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613850575f5ffd5b5035919050565b6001600160a01b0381168114610e5f575f5ffd5b5f5f6040838503121561387c575f5ffd5b823561388781613857565b946020939093013593505050565b5f602082840312156138a5575f5ffd5b8135610fca81613857565b5f5f604083850312156138c1575f5ffd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b5f5f5f606084860312156138f6575f5ffd5b833561390181613857565b9250602084013561391181613857565b929592945050506040919091013590565b60ff81168114610e5f575f5ffd5b61ffff81168114610e5f575f5ffd5b5f5f5f60608486031215613951575f5ffd5b833561395c81613922565b9250602084013561396c81613930565b9150604084013561397c81613930565b809150509250925092565b5f8151808452602084019350602083015f5b828110156139c05781516001600160a01b0316865260209586019590910190600101613999565b5093949350505050565b602081525f610fca6020830184613987565b5f5f604083850312156139ed575f5ffd5b8235915060208301356139ff81613857565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6080810160058610613a3e57634e487b7160e01b5f52602160045260245ffd5b94815261ffff93841660208201529190921660408201526060015290565b5f5f83601f840112613a6c575f5ffd5b5081356001600160401b03811115613a82575f5ffd5b6020830191508360208260061b850101111561292b575f5ffd5b5f5f5f60408486031215613aae575f5ffd5b83356001600160401b03811115613ac3575f5ffd5b613acf86828701613a5c565b909790965060209590950135949350505050565b5f5f5f60608486031215613af5575f5ffd5b833592506020840135915060408401356004811061397c575f5ffd5b5f5f60208385031215613b22575f5ffd5b82356001600160401b03811115613b37575f5ffd5b613b4385828601613a5c565b90969095509350505050565b5f5f5f60608486031215613b61575f5ffd5b833592506020840135613b7381613857565b9150604084013561397c81613857565b604081525f613b956040830185613987565b82810360208401528084518083526020830191506020860192505f5b81811015613bd557835163ffffffff16835260209384019390920191600101613bb1565b50909695505050505050565b604081525f613bf36040830185613987565b82810360208401528084518083526020830191506020860192505f5b81811015613bd5578351835260209384019390920191600101613c0f565b5f5f60408385031215613c3e575f5ffd5b8235613c4981613857565b915060208301356139ff81613857565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613c7d575f5ffd5b81518015158114610fca575f5ffd5b5f60208284031215613c9c575f5ffd5b8151610fca81613857565b602080825281018290525f8360408301825b85811015613ce9578235613ccc81613857565b6001600160a01b0316825260209283019290910190600101613cb9565b5095945050505050565b600181811c90821680613d0757607f821691505b602082108103613d2557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613d3b575f5ffd5b5051919050565b918252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a1057610a10613d50565b81810381811115610a1057610a10613d50565b5f60208284031215613d9a575f5ffd5b8151610fca81613930565b6001600160a01b03929092168252602082015260400190565b6001815b6001841115613df957808504811115613ddd57613ddd613d50565b6001841615613deb57908102905b60019390931c928002613dc2565b935093915050565b5f82613e0f57506001610a10565b81613e1b57505f610a10565b8160018114613e315760028114613e3b57613e57565b6001915050610a10565b60ff841115613e4c57613e4c613d50565b50506001821b610a10565b5060208310610133831016604e8410600b8410161715613e7a575081810a610a10565b613e865f198484613dbe565b805f1904821115613e9957613e99613d50565b029392505050565b5f610fca60ff841683613e01565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff81168114610e5f575f5ffd5b5f60208284031215613ee4575f5ffd5b8135610fca81613ec3565b5f60208284031215613eff575f5ffd5b8151610fca81613922565b6001600160a01b039390931683526020830191909152604082015260600190565b60ff8281168282160390811115610a1057610a10613d50565b634e487b7160e01b5f52601260045260245ffd5b5f60208284031215613f68575f5ffd5b8151610fca81613ec3565b5f60ff831680613f9157634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212200c25d5e163a933691b79aad3490f00701f2044f2f7695bd0116baa8c5906bc7b64736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106102e2575f3560e01c806395d89b411161018c57806395d89b411461051c57806397ee114414610524578063985ba4ae1461055a5780639908840c1461056d578063a68a526714610576578063a9059cbb14610589578063aa2f892d1461059c578063acdb3d51146105af578063b1bd7e2e146105b8578063b3d7f6b9146105cb578063b460af94146105de578063b6eba653146105ec578063ba08765214610602578063bdca916514610615578063c0b568e11461061e578063c3f0d30e14610631578063c63d75b61461045e578063c6e6f59214610644578063ca78e83914610657578063ce96cb771461065f578063d1717c7d14610672578063d3d0345814610686578063d82795481461069c578063d853365f146106a4578063d905777e146106ac578063dd62ed3e146106bf578063e3352c4c146106d2578063e51a85f6146106e5578063e5e97193146106f8578063e66f53b71461070b578063ef8b30f714610644578063f64c6f321461071e575f5ffd5b806301e1d114146102e657806303d44854146102fd57806306fdde031461031257806307a2d13a14610327578063095ea7b31461033a5780630a28a4771461035d5780630a605c6d146103705780630c6a62dd146103785780630d1e66671461038b5780630df571f71461039e57806318160ddd146103b157806318c21949146103b95780631f52692b146103cc57806323b872dd146103ec578063283c8168146103ff578063313ce56714610408578063348ec5c81461041d57806338d52e0f146104305780633a0dad8e146104385780633ab6d27c1461044b578063402d267d1461045e578063493a6e21146104725780634cdad506146103275780634e85b1351461048557806353a0bfdf1461049a5780636e553f65146104a757806370a08231146104ba5780637847ea53146104cd57806379502c55146104ed5780638f5c94651461050057806394bf804d146104a7575b5f5ffd5b600d545b6040519081526020015b60405180910390f35b61031061030b36600461379c565b610726565b005b61031a610975565b6040516102f4919061380b565b6102ea610335366004613840565b610a05565b61034d61034836600461386b565b610a16565b60405190151581526020016102f4565b6102ea61036b366004613840565b610a2d565b6015546102ea565b610310610386366004613895565b610a39565b610310610399366004613840565b610b39565b6103106103ac3660046138b0565b610e62565b6002546102ea565b6103106103c7366004613840565b610edd565b6006546103df906001600160a01b031681565b6040516102f491906138d0565b61034d6103fa3660046138e4565b610fac565b6102ea60195481565b60125b60405160ff90911681526020016102f4565b6009546103df906001600160a01b031681565b6103df610fd1565b600a546103df906001600160a01b031681565b61031061045936600461393f565b610ff5565b6102ea61046c366004613895565b505f1990565b610310610480366004613840565b6112a7565b61048d6114d2565b6040516102f491906139ca565b601c5461034d9060ff1681565b6102ea6104b53660046139dc565b6114e3565b6102ea6104c8366004613895565b6114fd565b6104d86301e1338081565b60405163ffffffff90911681526020016102f4565b6008546103df906001600160a01b031681565b61050961271081565b60405161ffff90911681526020016102f4565b61031a611517565b60175460185461054a9160ff81169161ffff610100830481169263010000009004169084565b6040516102f49493929190613a1e565b610310610568366004613a9c565b611526565b61050961012c81565b6102ea610584366004613ae3565b611633565b61034d61059736600461386b565b611673565b6103106105aa366004613840565b611680565b6102ea60165481565b6103106105c6366004613b11565b611916565b6102ea6105d9366004613840565b611b21565b6102ea6104b5366004613b4f565b6105f4611b2d565b6040516102f4929190613b83565b6102ea610610366004613b4f565b611de7565b610509610bb881565b61031061062c366004613840565b611fdd565b61031061063f366004613840565b612195565b6102ea610652366004613840565b61230d565b610310612318565b6102ea61066d366004613895565b612352565b600a5461040b90600160a01b900460ff1681565b61068e612365565b6040516102f4929190613be1565b610509609681565b61040b601281565b6102ea6106ba366004613895565b61248f565b6102ea6106cd366004613c2d565b612499565b6103106106e0366004613895565b6124c3565b6102ea6106f3366004613840565b6125ce565b610310610706366004613840565b612607565b6007546103df906001600160a01b031681565b6014546102ea565b6006546001600160a01b0316331461075157604051631a27eac360e11b815260040160405180910390fd5b61075b600b6127bf565b5f5b8181101561085b575f83838381811061077857610778613c59565b905060200201602081019061078d9190613895565b600854604051633af32abf60e01b81529192506001600160a01b031690633af32abf906107be9084906004016138d0565b602060405180830381865afa1580156107d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fd9190613c6d565b610825578060405163751dff9760e11b815260040161081c91906138d0565b60405180910390fd5b5f610831600b836127c8565b90508061085157604051630ea075bf60e21b815260040160405180910390fd5b505060010161075d565b506108c7306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf9190613c8c565b600b906127dc565b61093857610936306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092e9190613c8c565b600b906127c8565b505b7fa975983c7a4dcf80477a447433240de322f36428f1b3864e50d7a45e14c68b668282604051610969929190613ca7565b60405180910390a15050565b60606003805461098490613cf3565b80601f01602080910402602001604051908101604052809291908181526020018280546109b090613cf3565b80156109fb5780601f106109d2576101008083540402835291602001916109fb565b820191905f5260205f20905b8154815290600101906020018083116109de57829003601f168201915b5050505050905090565b5f610a10825f6127f0565b92915050565b5f33610a23818585612831565b5060019392505050565b5f610a10826001612843565b6006546001600160a01b03163314610a6457604051631a27eac360e11b815260040160405180910390fd5b600854604051633c17975360e21b81526001600160a01b039091169063f05e5d4c90610a949084906004016138d0565b602060405180830381865afa158015610aaf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad39190613c6d565b610af057604051631a27eac360e11b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f83293ffeebb677b167941693470018acf300605df266a35e9fdb66f24ff00fe0905f90a250565b610b41612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb59190613c6d565b610bd2576040516312aecd8160e01b815260040160405180910390fd5b601c5460ff1680610c4d575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590610c0e9030906004016138d0565b602060405180830381865afa158015610c29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4d9190613c6d565b15610c6b576040516304b1e71160e41b815260040160405180910390fd5b805f03610c9457610c7a610fd1565b604051636b30633560e01b815260040161081c91906138d0565b60085460408051633228036560e11b815290515f926001600160a01b03169163645006ca9160048083019260209291908290030181865afa158015610cdb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cff9190613d2b565b905080821015610d26578181604051631e2be21160e01b815260040161081c929190613d42565b5f610d2f610fd1565b6001600160a01b03166370a08231336040518263ffffffff1660e01b8152600401610d5a91906138d0565b602060405180830381865afa158015610d75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d999190613d2b565b905080831115610dbc57604051632ca2f52b60e11b815260040160405180910390fd5b600a54610de89033906001600160a01b031685610dd7610fd1565b6001600160a01b031692919061289f565b5f610df4600e3361290c565b9150610e0f905033610e068684613d64565b600e9190612932565b508360145f828254610e219190613d64565b9091555050604051849033907f55896b30a78fc55b78937f8014dde3f0035e9d37a4f6ac36841fb8b62f7e2b13905f90a3505050610e5f6001600555565b50565b6009546001600160a01b03163314610e8d57604051631a27eac360e11b815260040160405180910390fd5b8015610ed9578060165f828254610ea49190613d64565b9091555050601654604051829084907f8b8789cf9157fe7b016901e4ed3a5d0971caa8b7c031da0b25638ccf65841b2a905f90a45b5050565b6006546001600160a01b03163314610f0857604051631a27eac360e11b815260040160405180910390fd5b805f03610f1757610c7a610fd1565b601654811115610f3a57604051632ca2f52b60e11b815260040160405180910390fd5b8060165f828254610f4b9190613d77565b9091555050600a5460405163741fca4b60e01b8152600481018390526001600160a01b039091169063741fca4b906024015f604051808303815f87803b158015610f93575f5ffd5b505af1158015610fa5573d5f5f3e3d5ffd5b5050505050565b5f33610fb9858285612947565b610fc4858585612992565b60019150505b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6006546001600160a01b0316331461102057604051631a27eac360e11b815260040160405180910390fd5b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611070573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110949190613c6d565b6110b1576040516312aecd8160e01b815260040160405180910390fd5b600460ff841611156110d6576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff831611156110fd576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff82161115611124576040516317dbc4cb60e21b815260040160405180910390fd5b61112c6129ef565b8051601a8054909190829060ff1916600183600481111561114f5761114f613a0a565b021790555060208201518154604084015161ffff90811663010000000264ffff0000001991909316610100021664ffffffff00199091161717815560609091015160019091015560ff831660048111156111ab576111ab613a0a565b6017805460ff191660018360048111156111c7576111c7613a0a565b02179055506017805461ffff83811663010000000264ffff00000019918616610100029190911664ffffffff00199092169190911717905560085460408051630df1aa5760e31b815290516001600160a01b0390921691636f8d52b8916004808201926020929091908290030181865afa158015611247573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126b9190613d2b565b6112759042613d64565b60195560405130907fb31d0e1c8c885e6966984333ce964f4a58ad72b6c4e89e688ecc4549ad97558e905f90a2505050565b600a546001600160a01b031633146112d257604051631a27eac360e11b815260040160405180910390fd5b6112da612875565b5f6112e56011612aa9565b90508063ffffffff165f036112fa57506114c8565b5f609663ffffffff83161161130f5781611312565b60965b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611365573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113899190613d8a565b90505f61139560025490565b90505f805b8461ffff168161ffff1610156114ab575f806113b7601182612ab3565b90925090506113c7601183612ac1565b505f6113d5828b885f612ad5565b90506113e13083612b0a565b6113eb8286613d64565b600a54604051634adfc2e760e01b81529196506001600160a01b031690634adfc2e79061141e9086908590600401613da5565b5f604051808303815f87803b158015611435575f5ffd5b505af1158015611447573d5f5f3e3d5ffd5b505050508661ffff16836001600160a01b0316306001600160a01b03167f215abfcd108b85fbee47f26fda2de66f90f14fa5fcaf0201698ad8ac9323545f8486604051611495929190613d42565b60405180910390a450505080600101905061139a565b508060155f8282546114bd9190613d77565b909155505050505050505b610e5f6001600555565b60606114de600b612b3e565b905090565b5f60405163125ad87760e31b815260040160405180910390fd5b6001600160a01b03165f9081526020819052604090205490565b60606004805461098490613cf3565b6009546001600160a01b0316331461155157604051631a27eac360e11b815260040160405180910390fd5b61155b601d612b4a565b815f5b8161ffff168161ffff1610156115d7576115ce85858361ffff1681811061158757611587613c59565b61159d9260206040909202019081019150613895565b86868461ffff168181106115b3576115b3613c59565b90506040020160200135601d6129329092919063ffffffff16565b5060010161155e565b505f6115ea60125b61033590600a613ea1565b6018549091508111156115fd5760188190555b600d83905560405183907f5e1ff954b5e5257e9ee5d4cb07059e8f5e69b1aaaf9911e5d8d90a6894de9c21905f90a25050505050565b5f61166b611642846001613d64565b61164a612b53565b61165590600a613ea1565b6002546116629190613d64565b86919085612bcf565b949350505050565b5f33610a23818585612992565b611688612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fc9190613c6d565b611719576040516312aecd8160e01b815260040160405180910390fd5b601c5460ff1680611794575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb45906117559030906004016138d0565b602060405180830381865afa158015611770573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117949190613c6d565b156117b2576040516304b1e71160e41b815260040160405180910390fd5b805f036117d45730604051636b30633560e01b815260040161081c91906138d0565b60085460408051630912ae6d60e01b815290515f926001600160a01b031691630912ae6d9160048083019260209291908290030181865afa15801561181b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183f9190613d2b565b905080821015611866578181604051631f29a4af60e31b815260040161081c929190613d42565b5f611870336114fd565b90508083111561189357604051632ca2f52b60e11b815260040160405180910390fd5b61189f3033818661289f565b5f6118ab60113361290c565b91506118c69050336118bd8684613d64565b60119190612932565b508360155f8282546118d89190613d64565b9091555050604051849033907f222dc200773fe9b45015bf792e8fee37d651e3590c215806a5042404b6d741d2905f90a3505050610e5f6001600555565b6007546001600160a01b0316331461194157604051631a27eac360e11b815260040160405180910390fd5b5f81900361196257604051631121aa8d60e01b815260040160405180910390fd5b61196c6020612b4a565b5f816001600160401b0381111561198557611985613eaf565b6040519080825280602002602001820160405280156119ae578160200160208202803683370190505b5090505f82815b8161ffff168161ffff161015611aab575f86868361ffff168181106119dc576119dc613c59565b6119f29260206040909202019081019150613895565b90505f87878461ffff16818110611a0b57611a0b613c59565b9050604002016020016020810190611a239190613ed4565b905081868461ffff1681518110611a3c57611a3c613c59565b6001600160a01b039092166020928302919091018201525f90611a69908463ffffffff8086169061293216565b905080611a8b57826040516346bdabe160e01b815260040161081c91906138d0565b611a9b63ffffffff831687613d64565b95505050508060010190506119b5565b50611ab583612c11565b600a60149054906101000a900460ff16600a611ad19190613ea1565b8214611af057604051639006dd2760e01b815260040160405180910390fd5b60405133907f2d47a742b8d7df7c1fc5a9a631b206b364e6cb2722490759f63bb3ab14b132e0905f90a25050505050565b5f610a108260016127f0565b601c54606090819060ff1615611cb05760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060085460408051631c56369f60e21b815290519394506001600160a01b0390911692637158da7c925060048083019260209291908290030181865afa158015611bc4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be89190613c8c565b825f81518110611bfa57611bfa613c59565b6001600160a01b039283166020918202929092018101919091526008546040805163d1717c7d60e01b81529051919093169263d1717c7d9260048083019391928290030181865afa158015611c51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c759190613eef565b611c8090600a613ea1565b815f81518110611c9257611c92613c59565b602002602001019063ffffffff16908163ffffffff16815250509091565b5f611cbb6020612aa9565b90508061ffff166001600160401b03811115611cd957611cd9613eaf565b604051908082528060200260200182016040528015611d02578160200160208202803683370190505b5092508061ffff166001600160401b03811115611d2157611d21613eaf565b604051908082528060200260200182016040528015611d4a578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611de1575f80611d70602061ffff8516612ab3565b9150915081868461ffff1681518110611d8b57611d8b613c59565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff1681518110611dc257611dc2613c59565b63ffffffff909216602092830291909101909101525050600101611d4f565b50509091565b5f611df0612875565b60085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590611e209030906004016138d0565b602060405180830381865afa158015611e3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5f9190613c6d565b611e7c5760405163125ad87760e31b815260040160405180910390fd5b5f611e868361248f565b905080851115611eaf57828582604051632e52afbb60e21b815260040161081c93929190613f0a565b845f03611ed15730604051636b30633560e01b815260040161081c91906138d0565b336001600160a01b03841614611eec57611eec833387612947565b5f611ef686610a05565b905080600d5f828254611f099190613d77565b90915550611f1990508487612b0a565b836001600160a01b0316856001600160a01b0316336001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db848a604051611f68929190613d42565b60405180910390a4600a54604051627b8a6760e11b8152600481018390526001600160a01b0387811660248301529091169062f714ce906044015f604051808303815f87803b158015611fb9575f5ffd5b505af1158015611fcb573d5f5f3e3d5ffd5b5092945050505050610fca6001600555565b611fe5612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612035573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120599190613c6d565b612076576040516312aecd8160e01b815260040160405180910390fd5b805f0361208557610c7a610fd1565b5f612091600e3361290c565b915050818110156120b557604051632ca2f52b60e11b815260040160405180910390fd5b5f6120c08383613d77565b9050805f036120da576120d4600e33612ac1565b506120e8565b6120e6600e3383612932565b505b8260145f8282546120f99190613d77565b9091555050600a546040516351edffb160e01b81526001600160a01b03909116906351edffb1906121309033908790600401613da5565b5f604051808303815f87803b158015612147575f5ffd5b505af1158015612159573d5f5f3e3d5ffd5b50506040518592503391507f96a9a6886cdf3047a125454218a23d3961fd3a78643123b248a9d106d0ac94fd905f90a35050610e5f6001600555565b61219d612875565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ed573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122119190613c6d565b61222e576040516312aecd8160e01b815260040160405180910390fd5b805f036122505730604051636b30633560e01b815260040161081c91906138d0565b5f61225c60113361290c565b9150508181101561228057604051632ca2f52b60e11b815260040160405180910390fd5b5f61228b8383613d77565b9050805f036122a55761229f601133612ac1565b506122b3565b6122b160113383612932565b505b8260155f8282546122c49190613d77565b909155506122d59050303385612c89565b604051839033907f046d3e17087d323298991516e3fdec36fe1204d6bff7fb6e2b8eca77b80a22ad905f90a35050610e5f6001600555565b5f610a10825f612843565b6008546001600160a01b031633146123435760405163ea8e4eb560e01b815260040160405180910390fd5b601c805460ff19166001179055565b5f610a1061235f836114fd565b5f6127f0565b6060805f612373601d612aa9565b90508061ffff166001600160401b0381111561239157612391613eaf565b6040519080825280602002602001820160405280156123ba578160200160208202803683370190505b5092508061ffff166001600160401b038111156123d9576123d9613eaf565b604051908082528060200260200182016040528015612402578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611de1575f80612428601d61ffff8516612ab3565b9150915081868461ffff168151811061244357612443613c59565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff168151811061247a5761247a613c59565b60209081029190910101525050600101612407565b5f610a10826114fd565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6008546001600160a01b031633146124ee5760405163ea8e4eb560e01b815260040160405180910390fd5b6124f9600b82612caf565b505f8061250760208461290c565b915091508161251557505050565b612520602084612ac1565b505f306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561255e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125829190613c8c565b90505f8061259160208461290c565b9150915081156125b8576125b2836125a98684613d64565b60209190612932565b506125c6565b6125c460208486612932565b505b505050505050565b5f5f6125d983612cc3565b90505f6125e68285613d77565b90505f6125f282612d8e565b90506125fe8184613d64565b95945050505050565b600a546001600160a01b0316331461263257604051631a27eac360e11b815260040160405180910390fd5b61263a612875565b5f612645600e612aa9565b90508063ffffffff165f0361265a57506114c8565b5f609663ffffffff83161161266f5781612672565b60965b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e99190613d8a565b90505f6126f560025490565b90505f805b8461ffff168161ffff1610156127ad575f80612717600e82612ab3565b9092509050612727600e83612ac1565b505f612735828b885f612e87565b90506127418382612eb3565b61274b8286613d64565b94508661ffff16836001600160a01b0316306001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f68585604051612797929190613d42565b60405180910390a45050508060010190506126fa565b508060145f8282546114bd9190613d77565b610e5f81612ee7565b5f610fca836001600160a01b038416612f40565b5f610fca836001600160a01b038416612f87565b5f610fca6127fd600d5490565b612808906001613d64565b612810612b53565b61281b90600a613ea1565b6002546128289190613d64565b85919085612bcf565b61283e8383836001612f9e565b505050565b5f610fca61284f612b53565b61285a90600a613ea1565b6002546128679190613d64565b600d54612828906001613d64565b60026005540361289857604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6040516001600160a01b0384811660248301528381166044830152606482018390526129069186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613070565b50505050565b5f808080612923866001600160a01b0387166130d3565b909450925050505b9250929050565b5f61166b846001600160a01b0385168461310b565b5f6129528484612499565b90505f19811015612906578181101561298457828183604051637dc7a0d960e11b815260040161081c93929190613f0a565b61290684848484035f612f9e565b6001600160a01b0383166129bb575f604051634b637e8f60e11b815260040161081c91906138d0565b6001600160a01b0382166129e4575f60405163ec442f0560e01b815260040161081c91906138d0565b61283e838383613127565b604080516080810182525f808252602082018190529181018290526060810191909152426019541115612a84576040805160808101909152601a8054829060ff166004811115612a4157612a41613a0a565b6004811115612a5257612a52613a0a565b8152815461ffff6101008204811660208401526301000000909104166040820152600190910154606090910152919050565b604080516080810190915260178054829060ff166004811115612a4157612a41613a0a565b5f610a108261323a565b5f8080806129238686613244565b5f610fca836001600160a01b03841661326d565b5f6125fe612ae4856001613d64565b612aec612b53565b612af790600a613ea1565b612b019086613d64565b87919085612bcf565b6001600160a01b038216612b33575f604051634b637e8f60e11b815260040161081c91906138d0565b610ed9825f83613127565b60605f610fca83613289565b610e5f816132e2565b5f5f612b5d610fd1565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b98573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bbc9190613eef565b9050612bc9816012613f2b565b91505090565b5f612bfc612bdc8361332b565b8015612bf757505f8480612bf257612bf2613f44565b868809115b151590565b612c07868686613357565b6125fe9190613d64565b5f5b8151811015610ed957612c49828281518110612c3157612c31613c59565b6020026020010151600b6127dc90919063ffffffff16565b612c8157818181518110612c5f57612c5f613c59565b602002602001015160405163751dff9760e11b815260040161081c91906138d0565b600101612c13565b61283e83846001600160a01b031663a9059cbb85856040516024016128d4929190613da5565b5f610fca836001600160a01b038416613407565b5f5f612ccd6129ef565b9050806040015161ffff165f03612ce657505f92915050565b60408101515f90612cfe9061ffff1685612710613357565b905061166b60095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d779190613f58565b829063ffffffff908116906301e133809061335716565b5f5f612d986129ef565b9050806020015161ffff165f03612db157505f92915050565b5f612dc8612dc16012600a613ea1565b855f611633565b90505f5f612dd8845f01516134ea565b9150915081831080612de8575080155b15612df857505f95945050505050565b5f612e16612e068386613d77565b602087015161ffff169084613357565b90505f612e268289612710613357565b9050612e7b60095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d53573d5f5f3e3d5ffd5b98975050505050505050565b5f6125fe612e93612b53565b612e9e90600a613ea1565b612ea89085613d64565b612b01866001613d64565b6001600160a01b038216612edc575f60405163ec442f0560e01b815260040161081c91906138d0565b610ed95f8383613127565b5f612ef0825490565b90505f5b81811015612f3957826001015f845f018381548110612f1557612f15613c59565b905f5260205f20015481526020019081526020015f205f9055806001019050612ef4565b50505f9055565b5f612f4b8383612f87565b612f8057508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a10565b505f610a10565b5f9081526001919091016020526040902054151590565b6001600160a01b038416612fc7575f60405163e602df0560e01b815260040161081c91906138d0565b6001600160a01b038316612ff0575f604051634a1406b160e11b815260040161081c91906138d0565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561290657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161306291815260200190565b60405180910390a350505050565b5f5f60205f8451602086015f885af18061308f576040513d5f823e3d81fd5b50505f513d915081156130a65780600114156130b3565b6001600160a01b0384163b155b156129065783604051635274afe760e01b815260040161081c91906138d0565b5f818152600283016020526040812054819080613100576130f485856135d4565b92505f915061292b9050565b60019250905061292b565b5f828152600284016020526040812082905561166b84846135df565b6001600160a01b038316613151578060025f8282546131469190613d64565b909155506131ae9050565b6001600160a01b0383165f90815260208190526040902054818110156131905783818360405163391434e360e21b815260040161081c93929190613f0a565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166131ca576002805482900390556131e8565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161322d91815260200190565b60405180910390a3505050565b5f610a10826135ea565b5f808061325185856135f3565b5f81815260029690960160205260409095205494959350505050565b5f8181526002830160205260408120819055610fca83836135fe565b6060815f018054806020026020016040519081016040528092919081815260200182805480156132d657602002820191905f5260205f20905b8154815260200190600101908083116132c2575b50505050509050919050565b5f6132ec8261323a565b90505f5b8181101561332157600283015f61330785846135f3565b815260208101919091526040015f908120556001016132f0565b50610ed9826127bf565b5f600282600381111561334057613340613a0a565b61334a9190613f73565b60ff166001149050919050565b5f5f5f6133648686613609565b91509150815f036133885783818161337e5761337e613f44565b0492505050610fca565b81841161339f5761339f6003851502601118613625565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f81815260018301602052604081205480156134e1575f613429600183613d77565b85549091505f9061343c90600190613d77565b905080821461349b575f865f01828154811061345a5761345a613c59565b905f5260205f200154905080875f01848154811061347a5761347a613c59565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806134ac576134ac613fa0565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a10565b5f915050610a10565b5f80806134f760126115df565b90505f84600481111561350c5761350c613a0a565b0361351c578092508291506135ce565b600384600481111561353057613530613a0a565b036135425760185492508291506135ce565b600184600481111561355657613556613a0a565b0361356e5761356481613636565b92508091506135ce565b600284600481111561358257613582613a0a565b0361359a5761359081613636565b92508291506135ce565b60048460048111156135ae576135ae613a0a565b036135ce576018546135c8906135c383613636565b61375c565b92508291505b50915091565b5f610fca838361376b565b5f610fca8383612f40565b5f610a10825490565b5f610fca8383613776565b5f610fca8383613407565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f5f60085f9054906101000a90046001600160a01b03166001600160a01b031663f3cc69936040518163ffffffff1660e01b8152600401602060405180830381865afa158015613688573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136ac9190613d8a565b61ffff1690505f61374160095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613706573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061372a9190613f58565b839063ffffffff908116906301e133809061335716565b905061166b61375282612710613d64565b8590612710613357565b5f828218828411028218610fca565b5f610fca8383612f87565b5f825f01828154811061378b5761378b613c59565b905f5260205f200154905092915050565b5f5f602083850312156137ad575f5ffd5b82356001600160401b038111156137c2575f5ffd5b8301601f810185136137d2575f5ffd5b80356001600160401b038111156137e7575f5ffd5b8560208260051b84010111156137fb575f5ffd5b6020919091019590945092505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613850575f5ffd5b5035919050565b6001600160a01b0381168114610e5f575f5ffd5b5f5f6040838503121561387c575f5ffd5b823561388781613857565b946020939093013593505050565b5f602082840312156138a5575f5ffd5b8135610fca81613857565b5f5f604083850312156138c1575f5ffd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b5f5f5f606084860312156138f6575f5ffd5b833561390181613857565b9250602084013561391181613857565b929592945050506040919091013590565b60ff81168114610e5f575f5ffd5b61ffff81168114610e5f575f5ffd5b5f5f5f60608486031215613951575f5ffd5b833561395c81613922565b9250602084013561396c81613930565b9150604084013561397c81613930565b809150509250925092565b5f8151808452602084019350602083015f5b828110156139c05781516001600160a01b0316865260209586019590910190600101613999565b5093949350505050565b602081525f610fca6020830184613987565b5f5f604083850312156139ed575f5ffd5b8235915060208301356139ff81613857565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6080810160058610613a3e57634e487b7160e01b5f52602160045260245ffd5b94815261ffff93841660208201529190921660408201526060015290565b5f5f83601f840112613a6c575f5ffd5b5081356001600160401b03811115613a82575f5ffd5b6020830191508360208260061b850101111561292b575f5ffd5b5f5f5f60408486031215613aae575f5ffd5b83356001600160401b03811115613ac3575f5ffd5b613acf86828701613a5c565b909790965060209590950135949350505050565b5f5f5f60608486031215613af5575f5ffd5b833592506020840135915060408401356004811061397c575f5ffd5b5f5f60208385031215613b22575f5ffd5b82356001600160401b03811115613b37575f5ffd5b613b4385828601613a5c565b90969095509350505050565b5f5f5f60608486031215613b61575f5ffd5b833592506020840135613b7381613857565b9150604084013561397c81613857565b604081525f613b956040830185613987565b82810360208401528084518083526020830191506020860192505f5b81811015613bd557835163ffffffff16835260209384019390920191600101613bb1565b50909695505050505050565b604081525f613bf36040830185613987565b82810360208401528084518083526020830191506020860192505f5b81811015613bd5578351835260209384019390920191600101613c0f565b5f5f60408385031215613c3e575f5ffd5b8235613c4981613857565b915060208301356139ff81613857565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613c7d575f5ffd5b81518015158114610fca575f5ffd5b5f60208284031215613c9c575f5ffd5b8151610fca81613857565b602080825281018290525f8360408301825b85811015613ce9578235613ccc81613857565b6001600160a01b0316825260209283019290910190600101613cb9565b5095945050505050565b600181811c90821680613d0757607f821691505b602082108103613d2557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613d3b575f5ffd5b5051919050565b918252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a1057610a10613d50565b81810381811115610a1057610a10613d50565b5f60208284031215613d9a575f5ffd5b8151610fca81613930565b6001600160a01b03929092168252602082015260400190565b6001815b6001841115613df957808504811115613ddd57613ddd613d50565b6001841615613deb57908102905b60019390931c928002613dc2565b935093915050565b5f82613e0f57506001610a10565b81613e1b57505f610a10565b8160018114613e315760028114613e3b57613e57565b6001915050610a10565b60ff841115613e4c57613e4c613d50565b50506001821b610a10565b5060208310610133831016604e8410600b8410161715613e7a575081810a610a10565b613e865f198484613dbe565b805f1904821115613e9957613e99613d50565b029392505050565b5f610fca60ff841683613e01565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff81168114610e5f575f5ffd5b5f60208284031215613ee4575f5ffd5b8135610fca81613ec3565b5f60208284031215613eff575f5ffd5b8151610fca81613922565b6001600160a01b039390931683526020830191909152604082015260600190565b60ff8281168282160390811115610a1057610a10613d50565b634e487b7160e01b5f52601260045260245ffd5b5f60208284031215613f68575f5ffd5b8151610fca81613ec3565b5f60ff831680613f9157634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212200c25d5e163a933691b79aad3490f00701f2044f2f7695bd0116baa8c5906bc7b64736f6c634300081c0033", + "bytecode": "0x60c060405234801561000f575f5ffd5b50604051614f36380380614f3683398101604081905261002e916109ae565b8787878787878787856001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610072573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100969190610a7d565b858560036100a48382610b23565b5060046100b18282610b23565b5050505f5f6100c58361066a60201b60201c565b91509150816100d55760126100d7565b805b60ff1660a05250506001600160a01b03908116608052600160055587166101115760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0386166101385760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b03808b166001600160a01b031992831617909255600780548a841690831617905560088054928916929091168217905560408051630691d8b960e31b8152905163348ec5c8916004808201926020929091908290030181865afa1580156101ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d09190610a7d565b60095f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b0316633a0dad8e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610231573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102559190610a7d565b600a5f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550856001600160a01b031663d1717c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102da9190610bdd565b600a60146101000a81548160ff021916908360ff1602179055505f866001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610331573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103559190610a7d565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610390573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b49190610bdd565b9050601260ff821611156103db57604051631c03248960e11b815260040160405180910390fd5b600460ff85161115610400576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff84161115610427576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff8316111561044e576040516317dbc4cb60e21b815260040160405180910390fd5b8360ff16600481111561046357610463610bf6565b6015805460ff1916600183600481111561047f5761047f610bf6565b02179055506015805461ffff84811663010000000264ffff00000019918716610100029190911664ffffffff0019909216919091171790556104c281600a610d01565b6016556015805460188054909160ff1690829060ff191660018360048111156104ed576104ed610bf6565b02179055508154815461ffff61010092839004811690920262ffff0019821681178455845463010000009081900490931690920264ffff0000001990921664ffffffff0019909116171781556001918201549101554260175561054e610740565b50505050505050505061065c60085f9054906101000a90046001600160a01b03166001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ce9190610a7d565b60085f9054906101000a90046001600160a01b03166001600160a01b031663d1717c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106429190610bdd565b61064d90600a610d01565b601e919063ffffffff16610815565b505050505050505050610e02565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b038716916106b091610d0f565b5f60405180830381855afa9150503d805f81146106e8576040519150601f19603f3d011682016040523d82523d5f602084013e6106ed565b606091505b509150915081801561070157506020815110155b15610734575f8180602001905181019061071b9190610d25565b905060ff8111610732576001969095509350505050565b505b505f9485945092505050565b60085460408051636c366a2760e11b815290515f926001600160a01b03169163d86cd44e91600480830192869291908290030181865afa158015610786573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107ad9190810190610d3c565b90505f5b8151811015610811575f6107e88383815181106107d0576107d0610dee565b6020026020010151600b61083260201b90919060201c565b90508061080857604051630ea075bf60e21b815260040160405180910390fd5b506001016107b1565b5050565b5f61082a846001600160a01b0385168461084f565b949350505050565b5f610846836001600160a01b03841661086b565b90505b92915050565b5f828152600284016020526040812082905561082a84846108b7565b5f8181526001830160205260408120546108b057508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610849565b505f610849565b5f610846838361086b565b6001600160a01b03811681146108d6575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610915576109156108d9565b604052919050565b5f82601f83011261092c575f5ffd5b81516001600160401b03811115610945576109456108d9565b610958601f8201601f19166020016108ed565b81815284602083860101111561096c575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b805160ff81168114610998575f5ffd5b919050565b805161ffff81168114610998575f5ffd5b5f5f5f5f5f5f5f5f610100898b0312156109c6575f5ffd5b88516109d1816108c2565b60208a01519098506109e2816108c2565b60408a01519097506109f3816108c2565b60608a01519096506001600160401b03811115610a0e575f5ffd5b610a1a8b828c0161091d565b60808b015190965090506001600160401b03811115610a37575f5ffd5b610a438b828c0161091d565b945050610a5260a08a01610988565b9250610a6060c08a0161099d565b9150610a6e60e08a0161099d565b90509295985092959890939650565b5f60208284031215610a8d575f5ffd5b8151610a98816108c2565b9392505050565b600181811c90821680610ab357607f821691505b602082108103610ad157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610b1e57805f5260205f20601f840160051c81016020851015610afc5750805b601f840160051c820191505b81811015610b1b575f8155600101610b08565b50505b505050565b81516001600160401b03811115610b3c57610b3c6108d9565b610b5081610b4a8454610a9f565b84610ad7565b6020601f821160018114610b82575f8315610b6b5750848201515b5f19600385901b1c1916600184901b178455610b1b565b5f84815260208120601f198516915b82811015610bb15787850151825560209485019460019092019101610b91565b5084821015610bce57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610bed575f5ffd5b61084682610988565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610c5957808504811115610c3d57610c3d610c0a565b6001841615610c4b57908102905b60019390931c928002610c22565b935093915050565b5f82610c6f57506001610849565b81610c7b57505f610849565b8160018114610c915760028114610c9b57610cb7565b6001915050610849565b60ff841115610cac57610cac610c0a565b50506001821b610849565b5060208310610133831016604e8410600b8410161715610cda575081810a610849565b610ce65f198484610c1e565b805f1904821115610cf957610cf9610c0a565b029392505050565b5f61084660ff841683610c61565b5f82518060208501845e5f920191825250919050565b5f60208284031215610d35575f5ffd5b5051919050565b5f60208284031215610d4c575f5ffd5b81516001600160401b03811115610d61575f5ffd5b8201601f81018413610d71575f5ffd5b80516001600160401b03811115610d8a57610d8a6108d9565b8060051b610d9a602082016108ed565b91825260208184018101929081019087841115610db5575f5ffd5b6020850194505b83851015610de35784519250610dd1836108c2565b82825260209485019490910190610dbc565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b60805160a051614116610e205f395f50505f61103401526141165ff3fe608060405234801561000f575f5ffd5b50600436106102d7575f3560e01c806395d89b411161018157806395d89b411461051c57806397ee114414610524578063985ba4ae1461055a5780639908840c1461056d578063a68a526714610576578063a9059cbb14610589578063aa2f892d1461059c578063acdb3d51146105af578063b1bd7e2e146105b8578063b3d7f6b9146105cb578063b460af94146105de578063b6eba653146105ec578063ba08765214610602578063bdca916514610615578063c0b568e11461061e578063c3f0d30e14610631578063c63d75b61461045e578063c6e6f59214610644578063ca78e83914610657578063ce96cb771461065f578063d1717c7d14610672578063d3d0345814610686578063d853365f1461069c578063d905777e146106a4578063dd62ed3e146106b7578063e3352c4c146106ca578063e51a85f6146106dd578063e5e97193146106f0578063e66f53b714610703578063ef8b30f714610644578063f7dcd96e14610716575f5ffd5b806301e1d114146102db57806303d44854146102f257806306fdde031461030757806307a2d13a1461031c578063095ea7b31461032f5780630a28a477146103525780630c6a62dd146103655780630d1e6667146103785780630df571f71461038b57806318160ddd1461039e57806318c21949146103a65780631f52692b146103b957806323b872dd146103d9578063283c8168146103ec5780632f190c9a146103f5578063313ce56714610408578063348ec5c81461041d57806338d52e0f146104305780633a0dad8e146104385780633ab6d27c1461044b578063402d267d1461045e578063493a6e21146104725780634cdad5061461031c5780634e85b1351461048557806353a0bfdf1461049a5780636e553f65146104a757806370a08231146104ba5780637847ea53146104cd57806379502c55146104ed5780638f5c94651461050057806394bf804d146104a7575b5f5ffd5b600d545b6040519081526020015b60405180910390f35b6103056103003660046138a8565b610729565b005b61030f610978565b6040516102e99190613917565b6102df61032a36600461394c565b610a08565b61034261033d366004613977565b610a19565b60405190151581526020016102e9565b6102df61036036600461394c565b610a30565b6103056103733660046139a1565b610a3c565b61030561038636600461394c565b610b3c565b6103056103993660046139bc565b610e4f565b6002546102df565b6103056103b436600461394c565b610eca565b6006546103cc906001600160a01b031681565b6040516102e991906139dc565b6103426103e73660046139f0565b610f99565b6102df60175481565b6102df61040336600461394c565b610fbe565b60125b60405160ff90911681526020016102e9565b6009546103cc906001600160a01b031681565b6103cc611032565b600a546103cc906001600160a01b031681565b610305610459366004613a4b565b611056565b6102df61046c3660046139a1565b505f1990565b61030561048036600461394c565b611308565b61048d61157f565b6040516102e99190613ad6565b601a546103429060ff1681565b6102df6104b5366004613ae8565b611590565b6102df6104c83660046139a1565b6115aa565b6104d86301e1338081565b60405163ffffffff90911681526020016102e9565b6008546103cc906001600160a01b031681565b61050961271081565b60405161ffff90911681526020016102e9565b61030f6115c4565b60155460165461054a9160ff81169161ffff610100830481169263010000009004169084565b6040516102e99493929190613b2a565b610305610568366004613ba8565b6115d3565b61050961012c81565b6102df610584366004613bef565b6116e0565b610342610597366004613977565b611720565b6103056105aa36600461394c565b61172d565b6102df60145481565b6103056105c6366004613c1d565b6119ad565b6102df6105d936600461394c565b611bb9565b6102df6104b5366004613c5b565b6105f4611bc5565b6040516102e9929190613c8f565b6102df610610366004613c5b565b611e7f565b610509610bb881565b61030561062c36600461394c565b612075565b61030561063f36600461394c565b612217565b6102df61065236600461394c565b612378565b610305612383565b6102df61066d3660046139a1565b6123bd565b600a5461040b90600160a01b900460ff1681565b61068e6123d0565b6040516102e9929190613ced565b61040b601281565b6102df6106b23660046139a1565b6124fa565b6102df6106c5366004613d39565b612504565b6103056106d83660046139a1565b61252e565b6102df6106eb36600461394c565b612639565b6103056106fe36600461394c565b612672565b6007546103cc906001600160a01b031681565b6102df61072436600461394c565b612851565b6006546001600160a01b0316331461075457604051631a27eac360e11b815260040160405180910390fd5b61075e600b6128bc565b5f5b8181101561085e575f83838381811061077b5761077b613d65565b905060200201602081019061079091906139a1565b600854604051633af32abf60e01b81529192506001600160a01b031690633af32abf906107c19084906004016139dc565b602060405180830381865afa1580156107dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108009190613d79565b610828578060405163751dff9760e11b815260040161081f91906139dc565b60405180910390fd5b5f610834600b836128c5565b90508061085457604051630ea075bf60e21b815260040160405180910390fd5b5050600101610760565b506108ca306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c29190613d98565b600b906128d9565b61093b57610939306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109319190613d98565b600b906128c5565b505b7fa975983c7a4dcf80477a447433240de322f36428f1b3864e50d7a45e14c68b66828260405161096c929190613db3565b60405180910390a15050565b60606003805461098790613dff565b80601f01602080910402602001604051908101604052809291908181526020018280546109b390613dff565b80156109fe5780601f106109d5576101008083540402835291602001916109fe565b820191905f5260205f20905b8154815290600101906020018083116109e157829003601f168201915b5050505050905090565b5f610a13825f6128ed565b92915050565b5f33610a2681858561292e565b5060019392505050565b5f610a13826001612940565b6006546001600160a01b03163314610a6757604051631a27eac360e11b815260040160405180910390fd5b600854604051633c17975360e21b81526001600160a01b039091169063f05e5d4c90610a979084906004016139dc565b602060405180830381865afa158015610ab2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad69190613d79565b610af357604051631a27eac360e11b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f83293ffeebb677b167941693470018acf300605df266a35e9fdb66f24ff00fe0905f90a250565b610b44612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190613d79565b610bd5576040516312aecd8160e01b815260040160405180910390fd5b601a5460ff1680610c50575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590610c119030906004016139dc565b602060405180830381865afa158015610c2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c509190613d79565b15610c6e576040516304b1e71160e41b815260040160405180910390fd5b805f03610c9757610c7d611032565b604051636b30633560e01b815260040161081f91906139dc565b60085460408051633228036560e11b815290515f926001600160a01b03169163645006ca9160048083019260209291908290030181865afa158015610cde573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d029190613e37565b905080821015610d29578181604051631e2be21160e01b815260040161081f929190613e4e565b5f610d32611032565b6001600160a01b03166370a08231336040518263ffffffff1660e01b8152600401610d5d91906139dc565b602060405180830381865afa158015610d78573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9c9190613e37565b905080831115610dbf57604051632ca2f52b60e11b815260040160405180910390fd5b600a54610deb9033906001600160a01b031685610dda611032565b6001600160a01b031692919061299c565b5f610df7600e33612a09565b9150610e12905033610e098684613e70565b600e9190612a2f565b50604051849033907f55896b30a78fc55b78937f8014dde3f0035e9d37a4f6ac36841fb8b62f7e2b13905f90a3505050610e4c6001600555565b50565b6009546001600160a01b03163314610e7a57604051631a27eac360e11b815260040160405180910390fd5b8015610ec6578060145f828254610e919190613e70565b9091555050601454604051829084907f8b8789cf9157fe7b016901e4ed3a5d0971caa8b7c031da0b25638ccf65841b2a905f90a45b5050565b6006546001600160a01b03163314610ef557604051631a27eac360e11b815260040160405180910390fd5b805f03610f0457610c7d611032565b601454811115610f2757604051632ca2f52b60e11b815260040160405180910390fd5b8060145f828254610f389190613e83565b9091555050600a5460405163741fca4b60e01b8152600481018390526001600160a01b039091169063741fca4b906024015f604051808303815f87803b158015610f80575f5ffd5b505af1158015610f92573d5f5f3e3d5ffd5b5050505050565b5f33610fa6858285612a44565b610fb1858585612a8f565b60019150505b9392505050565b5f5f610fca600e612aec565b9050805f03610fdb57505f92915050565b5f610fe68285612af6565b90505f805b828161ffff161015611029575f611007600e61ffff8416612b05565b915061101590508184613e70565b9250508061102290613e96565b9050610feb565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6006546001600160a01b0316331461108157604051631a27eac360e11b815260040160405180910390fd5b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f59190613d79565b611112576040516312aecd8160e01b815260040160405180910390fd5b600460ff84161115611137576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff8316111561115e576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff82161115611185576040516317dbc4cb60e21b815260040160405180910390fd5b61118d612b13565b805160188054909190829060ff191660018360048111156111b0576111b0613b16565b021790555060208201518154604084015161ffff90811663010000000264ffff0000001991909316610100021664ffffffff00199091161717815560609091015160019091015560ff8316600481111561120c5761120c613b16565b6015805460ff1916600183600481111561122857611228613b16565b02179055506015805461ffff83811663010000000264ffff00000019918616610100029190911664ffffffff00199092169190911717905560085460408051630df1aa5760e31b815290516001600160a01b0390921691636f8d52b8916004808201926020929091908290030181865afa1580156112a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cc9190613e37565b6112d69042613e70565b60175560405130907fb31d0e1c8c885e6966984333ce964f4a58ad72b6c4e89e688ecc4549ad97558e905f90a2505050565b600a546001600160a01b0316331461133357604051631a27eac360e11b815260040160405180910390fd5b61133b612972565b5f6113466011612aec565b9050805f036113555750611575565b5f6113d38260085f9054906101000a90046001600160a01b03166001600160a01b031663bcdb8a186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ce9190613e37565b612af6565b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611426573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144a9190613eb6565b90505f61145660025490565b90505f805b848161ffff16101561156e575f80611474601182612b05565b9092509050611484601183612bcd565b505f611492828b885f612be1565b905061149e3083612c16565b6114a88286613e70565b600a54604051634adfc2e760e01b81529196506001600160a01b031690634adfc2e7906114db9086908590600401613ed1565b5f604051808303815f87803b1580156114f2575f5ffd5b505af1158015611504573d5f5f3e3d5ffd5b505050508661ffff16836001600160a01b0316306001600160a01b03167f215abfcd108b85fbee47f26fda2de66f90f14fa5fcaf0201698ad8ac9323545f8486604051611552929190613e4e565b60405180910390a45050508061156790613e96565b905061145b565b5050505050505b610e4c6001600555565b606061158b600b612c4a565b905090565b5f60405163125ad87760e31b815260040160405180910390fd5b6001600160a01b03165f9081526020819052604090205490565b60606004805461098790613dff565b6009546001600160a01b031633146115fe57604051631a27eac360e11b815260040160405180910390fd5b611608601b612c56565b815f5b8161ffff168161ffff1610156116845761167b85858361ffff1681811061163457611634613d65565b61164a92602060409092020190810191506139a1565b86868461ffff1681811061166057611660613d65565b90506040020160200135601b612a2f9092919063ffffffff16565b5060010161160b565b505f61169760125b61032a90600a613fcd565b6016549091508111156116aa5760168190555b600d83905560405183907f5e1ff954b5e5257e9ee5d4cb07059e8f5e69b1aaaf9911e5d8d90a6894de9c21905f90a25050505050565b5f6117186116ef846001613e70565b6116f7612c5f565b61170290600a613fcd565b60025461170f9190613e70565b86919085612cdb565b949350505050565b5f33610a26818585612a8f565b611735612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611785573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a99190613d79565b6117c6576040516312aecd8160e01b815260040160405180910390fd5b601a5460ff1680611841575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb45906118029030906004016139dc565b602060405180830381865afa15801561181d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118419190613d79565b1561185f576040516304b1e71160e41b815260040160405180910390fd5b805f036118815730604051636b30633560e01b815260040161081f91906139dc565b60085460408051630912ae6d60e01b815290515f926001600160a01b031691630912ae6d9160048083019260209291908290030181865afa1580156118c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ec9190613e37565b905080821015611913578181604051631f29a4af60e31b815260040161081f929190613e4e565b5f61191d336115aa565b90508083111561194057604051632ca2f52b60e11b815260040160405180910390fd5b61194c3033818661299c565b5f611958601133612a09565b915061197390503361196a8684613e70565b60119190612a2f565b50604051849033907f222dc200773fe9b45015bf792e8fee37d651e3590c215806a5042404b6d741d2905f90a3505050610e4c6001600555565b6007546001600160a01b031633146119d857604051631a27eac360e11b815260040160405180910390fd5b5f8190036119f957604051631121aa8d60e01b815260040160405180910390fd5b611a03601e612c56565b5f816001600160401b03811115611a1c57611a1c613fdb565b604051908082528060200260200182016040528015611a45578160200160208202803683370190505b5090505f82815b8161ffff168161ffff161015611b43575f86868361ffff16818110611a7357611a73613d65565b611a8992602060409092020190810191506139a1565b90505f87878461ffff16818110611aa257611aa2613d65565b9050604002016020016020810190611aba9190614000565b905081868461ffff1681518110611ad357611ad3613d65565b6001600160a01b03909216602092830291909101909101525f611b01601e8463ffffffff80861690612a2f16565b905080611b2357826040516346bdabe160e01b815260040161081f91906139dc565b611b3363ffffffff831687613e70565b9550505050806001019050611a4c565b50611b4d83612d1d565b600a60149054906101000a900460ff16600a611b699190613fcd565b8214611b8857604051639006dd2760e01b815260040160405180910390fd5b60405133907f2d47a742b8d7df7c1fc5a9a631b206b364e6cb2722490759f63bb3ab14b132e0905f90a25050505050565b5f610a138260016128ed565b601a54606090819060ff1615611d485760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060085460408051631c56369f60e21b815290519394506001600160a01b0390911692637158da7c925060048083019260209291908290030181865afa158015611c5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c809190613d98565b825f81518110611c9257611c92613d65565b6001600160a01b039283166020918202929092018101919091526008546040805163d1717c7d60e01b81529051919093169263d1717c7d9260048083019391928290030181865afa158015611ce9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d0d919061401b565b611d1890600a613fcd565b815f81518110611d2a57611d2a613d65565b602002602001019063ffffffff16908163ffffffff16815250509091565b5f611d53601e612aec565b90508061ffff166001600160401b03811115611d7157611d71613fdb565b604051908082528060200260200182016040528015611d9a578160200160208202803683370190505b5092508061ffff166001600160401b03811115611db957611db9613fdb565b604051908082528060200260200182016040528015611de2578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611e79575f80611e08601e61ffff8516612b05565b9150915081868461ffff1681518110611e2357611e23613d65565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff1681518110611e5a57611e5a613d65565b63ffffffff909216602092830291909101909101525050600101611de7565b50509091565b5f611e88612972565b60085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590611eb89030906004016139dc565b602060405180830381865afa158015611ed3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef79190613d79565b611f145760405163125ad87760e31b815260040160405180910390fd5b5f611f1e836124fa565b905080851115611f4757828582604051632e52afbb60e21b815260040161081f93929190614036565b845f03611f695730604051636b30633560e01b815260040161081f91906139dc565b336001600160a01b03841614611f8457611f84833387612a44565b5f611f8e86610a08565b905080600d5f828254611fa19190613e83565b90915550611fb190508487612c16565b836001600160a01b0316856001600160a01b0316336001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db848a604051612000929190613e4e565b60405180910390a4600a54604051627b8a6760e11b8152600481018390526001600160a01b0387811660248301529091169062f714ce906044015f604051808303815f87803b158015612051575f5ffd5b505af1158015612063573d5f5f3e3d5ffd5b5092945050505050610fb76001600555565b61207d612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120cd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f19190613d79565b61210e576040516312aecd8160e01b815260040160405180910390fd5b805f0361211d57610c7d611032565b5f612129600e33612a09565b9150508181101561214d57604051632ca2f52b60e11b815260040160405180910390fd5b5f6121588383613e83565b9050805f036121725761216c600e33612bcd565b50612180565b61217e600e3383612a2f565b505b600a546040516351edffb160e01b81526001600160a01b03909116906351edffb1906121b29033908790600401613ed1565b5f604051808303815f87803b1580156121c9575f5ffd5b505af11580156121db573d5f5f3e3d5ffd5b50506040518592503391507f96a9a6886cdf3047a125454218a23d3961fd3a78643123b248a9d106d0ac94fd905f90a35050610e4c6001600555565b61221f612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122939190613d79565b6122b0576040516312aecd8160e01b815260040160405180910390fd5b805f036122d25730604051636b30633560e01b815260040161081f91906139dc565b5f6122de601133612a09565b9150508181101561230257604051632ca2f52b60e11b815260040160405180910390fd5b5f61230d8383613e83565b9050805f0361232757612321601133612bcd565b50612335565b61233360113383612a2f565b505b612340303385612d95565b604051839033907f046d3e17087d323298991516e3fdec36fe1204d6bff7fb6e2b8eca77b80a22ad905f90a35050610e4c6001600555565b5f610a13825f612940565b6008546001600160a01b031633146123ae5760405163ea8e4eb560e01b815260040160405180910390fd5b601a805460ff19166001179055565b5f610a136123ca836115aa565b5f6128ed565b6060805f6123de601b612aec565b90508061ffff166001600160401b038111156123fc576123fc613fdb565b604051908082528060200260200182016040528015612425578160200160208202803683370190505b5092508061ffff166001600160401b0381111561244457612444613fdb565b60405190808252806020026020018201604052801561246d578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611e79575f80612493601b61ffff8516612b05565b9150915081868461ffff16815181106124ae576124ae613d65565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff16815181106124e5576124e5613d65565b60209081029190910101525050600101612472565b5f610a13826115aa565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6008546001600160a01b031633146125595760405163ea8e4eb560e01b815260040160405180910390fd5b612564600b82612dbb565b505f80612572601e84612a09565b915091508161258057505050565b61258b601e84612bcd565b505f306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ed9190613d98565b90505f806125fc601e84612a09565b9150915081156126235761261d836126148684613e70565b601e9190612a2f565b50612631565b61262f601e8486612a2f565b505b505050505050565b5f5f61264483612dcf565b90505f6126518285613e83565b90505f61265d82612e9a565b90506126698184613e70565b95945050505050565b600a546001600160a01b0316331461269d57604051631a27eac360e11b815260040160405180910390fd5b6126a5612972565b5f6126b0600e612aec565b9050805f036126bf5750611575565b5f6127148260085f9054906101000a90046001600160a01b03166001600160a01b031663bcdb8a186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113aa573d5f5f3e3d5ffd5b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612767573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278b9190613eb6565b90505f61279760025490565b90505f805b848161ffff16101561156e575f806127b5600e82612b05565b90925090506127c5600e83612bcd565b505f6127d3828b885f612f93565b90506127df8382612fbf565b6127e98286613e70565b94508661ffff16836001600160a01b0316306001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f68585604051612835929190613e4e565b60405180910390a45050508061284a90613e96565b905061279c565b5f5f61285d6011612aec565b9050805f0361286e57505f92915050565b5f6128798285612af6565b90505f805b828161ffff161015611029575f61289a601161ffff8416612b05565b91506128a890508184613e70565b925050806128b590613e96565b905061287e565b610e4c81612ff3565b5f610fb7836001600160a01b03841661304c565b5f610fb7836001600160a01b038416613093565b5f610fb76128fa600d5490565b612905906001613e70565b61290d612c5f565b61291890600a613fcd565b6002546129259190613e70565b85919085612cdb565b61293b83838360016130aa565b505050565b5f610fb761294c612c5f565b61295790600a613fcd565b6002546129649190613e70565b600d54612925906001613e70565b60026005540361299557604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6040516001600160a01b038481166024830152838116604483015260648201839052612a039186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061317c565b50505050565b5f808080612a20866001600160a01b0387166131df565b909450925050505b9250929050565b5f611718846001600160a01b03851684613217565b5f612a4f8484612504565b90505f19811015612a035781811015612a8157828183604051637dc7a0d960e11b815260040161081f93929190614036565b612a0384848484035f6130aa565b6001600160a01b038316612ab8575f604051634b637e8f60e11b815260040161081f91906139dc565b6001600160a01b038216612ae1575f60405163ec442f0560e01b815260040161081f91906139dc565b61293b838383613233565b5f610a1382613346565b5f828218828410028218610fb7565b5f808080612a208686613350565b604080516080810182525f808252602082018190529181018290526060810191909152426017541115612ba857604080516080810190915260188054829060ff166004811115612b6557612b65613b16565b6004811115612b7657612b76613b16565b8152815461ffff6101008204811660208401526301000000909104166040820152600190910154606090910152919050565b604080516080810190915260158054829060ff166004811115612b6557612b65613b16565b5f610fb7836001600160a01b038416613379565b5f612669612bf0856001613e70565b612bf8612c5f565b612c0390600a613fcd565b612c0d9086613e70565b87919085612cdb565b6001600160a01b038216612c3f575f604051634b637e8f60e11b815260040161081f91906139dc565b610ec6825f83613233565b60605f610fb783613395565b610e4c816133ee565b5f5f612c69611032565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cc8919061401b565b9050612cd5816012614057565b91505090565b5f612d08612ce883613437565b8015612d0357505f8480612cfe57612cfe614070565b868809115b151590565b612d13868686613463565b6126699190613e70565b5f5b8151811015610ec657612d55828281518110612d3d57612d3d613d65565b6020026020010151600b6128d990919063ffffffff16565b612d8d57818181518110612d6b57612d6b613d65565b602002602001015160405163751dff9760e11b815260040161081f91906139dc565b600101612d1f565b61293b83846001600160a01b031663a9059cbb85856040516024016129d1929190613ed1565b5f610fb7836001600160a01b038416613513565b5f5f612dd9612b13565b9050806040015161ffff165f03612df257505f92915050565b60408101515f90612e0a9061ffff1685612710613463565b905061171860095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e839190614084565b829063ffffffff908116906301e133809061346316565b5f5f612ea4612b13565b9050806020015161ffff165f03612ebd57505f92915050565b5f612ed4612ecd6012600a613fcd565b855f6116e0565b90505f5f612ee4845f01516135f6565b9150915081831080612ef4575080155b15612f0457505f95945050505050565b5f612f22612f128386613e83565b602087015161ffff169084613463565b90505f612f328289612710613463565b9050612f8760095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5f573d5f5f3e3d5ffd5b98975050505050505050565b5f612669612f9f612c5f565b612faa90600a613fcd565b612fb49085613e70565b612c0d866001613e70565b6001600160a01b038216612fe8575f60405163ec442f0560e01b815260040161081f91906139dc565b610ec65f8383613233565b5f612ffc825490565b90505f5b8181101561304557826001015f845f01838154811061302157613021613d65565b905f5260205f20015481526020019081526020015f205f9055806001019050613000565b50505f9055565b5f6130578383613093565b61308c57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a13565b505f610a13565b5f9081526001919091016020526040902054151590565b6001600160a01b0384166130d3575f60405163e602df0560e01b815260040161081f91906139dc565b6001600160a01b0383166130fc575f604051634a1406b160e11b815260040161081f91906139dc565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015612a0357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161316e91815260200190565b60405180910390a350505050565b5f5f60205f8451602086015f885af18061319b576040513d5f823e3d81fd5b50505f513d915081156131b25780600114156131bf565b6001600160a01b0384163b155b15612a035783604051635274afe760e01b815260040161081f91906139dc565b5f81815260028301602052604081205481908061320c5761320085856136e0565b92505f9150612a289050565b600192509050612a28565b5f828152600284016020526040812082905561171884846136eb565b6001600160a01b03831661325d578060025f8282546132529190613e70565b909155506132ba9050565b6001600160a01b0383165f908152602081905260409020548181101561329c5783818360405163391434e360e21b815260040161081f93929190614036565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166132d6576002805482900390556132f4565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161333991815260200190565b60405180910390a3505050565b5f610a13826136f6565b5f808061335d85856136ff565b5f81815260029690960160205260409095205494959350505050565b5f8181526002830160205260408120819055610fb7838361370a565b6060815f018054806020026020016040519081016040528092919081815260200182805480156133e257602002820191905f5260205f20905b8154815260200190600101908083116133ce575b50505050509050919050565b5f6133f882613346565b90505f5b8181101561342d57600283015f61341385846136ff565b815260208101919091526040015f908120556001016133fc565b50610ec6826128bc565b5f600282600381111561344c5761344c613b16565b613456919061409f565b60ff166001149050919050565b5f5f5f6134708686613715565b91509150815f036134945783818161348a5761348a614070565b0492505050610fb7565b8184116134ab576134ab6003851502601118613731565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f81815260018301602052604081205480156135ed575f613535600183613e83565b85549091505f9061354890600190613e83565b90508082146135a7575f865f01828154811061356657613566613d65565b905f5260205f200154905080875f01848154811061358657613586613d65565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806135b8576135b86140cc565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a13565b5f915050610a13565b5f8080613603601261168c565b90505f84600481111561361857613618613b16565b03613628578092508291506136da565b600384600481111561363c5761363c613b16565b0361364e5760165492508291506136da565b600184600481111561366257613662613b16565b0361367a5761367081613742565b92508091506136da565b600284600481111561368e5761368e613b16565b036136a65761369c81613742565b92508291506136da565b60048460048111156136ba576136ba613b16565b036136da576016546136d4906136cf83613742565b613868565b92508291505b50915091565b5f610fb78383613877565b5f610fb7838361304c565b5f610a13825490565b5f610fb78383613882565b5f610fb78383613513565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f5f60085f9054906101000a90046001600160a01b03166001600160a01b031663f3cc69936040518163ffffffff1660e01b8152600401602060405180830381865afa158015613794573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b89190613eb6565b61ffff1690505f61384d60095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613812573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138369190614084565b839063ffffffff908116906301e133809061346316565b905061171861385e82612710613e70565b8590612710613463565b5f828218828411028218610fb7565b5f610fb78383613093565b5f825f01828154811061389757613897613d65565b905f5260205f200154905092915050565b5f5f602083850312156138b9575f5ffd5b82356001600160401b038111156138ce575f5ffd5b8301601f810185136138de575f5ffd5b80356001600160401b038111156138f3575f5ffd5b8560208260051b8401011115613907575f5ffd5b6020919091019590945092505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561395c575f5ffd5b5035919050565b6001600160a01b0381168114610e4c575f5ffd5b5f5f60408385031215613988575f5ffd5b823561399381613963565b946020939093013593505050565b5f602082840312156139b1575f5ffd5b8135610fb781613963565b5f5f604083850312156139cd575f5ffd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b5f5f5f60608486031215613a02575f5ffd5b8335613a0d81613963565b92506020840135613a1d81613963565b929592945050506040919091013590565b60ff81168114610e4c575f5ffd5b61ffff81168114610e4c575f5ffd5b5f5f5f60608486031215613a5d575f5ffd5b8335613a6881613a2e565b92506020840135613a7881613a3c565b91506040840135613a8881613a3c565b809150509250925092565b5f8151808452602084019350602083015f5b82811015613acc5781516001600160a01b0316865260209586019590910190600101613aa5565b5093949350505050565b602081525f610fb76020830184613a93565b5f5f60408385031215613af9575f5ffd5b823591506020830135613b0b81613963565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6080810160058610613b4a57634e487b7160e01b5f52602160045260245ffd5b94815261ffff93841660208201529190921660408201526060015290565b5f5f83601f840112613b78575f5ffd5b5081356001600160401b03811115613b8e575f5ffd5b6020830191508360208260061b8501011115612a28575f5ffd5b5f5f5f60408486031215613bba575f5ffd5b83356001600160401b03811115613bcf575f5ffd5b613bdb86828701613b68565b909790965060209590950135949350505050565b5f5f5f60608486031215613c01575f5ffd5b8335925060208401359150604084013560048110613a88575f5ffd5b5f5f60208385031215613c2e575f5ffd5b82356001600160401b03811115613c43575f5ffd5b613c4f85828601613b68565b90969095509350505050565b5f5f5f60608486031215613c6d575f5ffd5b833592506020840135613c7f81613963565b91506040840135613a8881613963565b604081525f613ca16040830185613a93565b82810360208401528084518083526020830191506020860192505f5b81811015613ce157835163ffffffff16835260209384019390920191600101613cbd565b50909695505050505050565b604081525f613cff6040830185613a93565b82810360208401528084518083526020830191506020860192505f5b81811015613ce1578351835260209384019390920191600101613d1b565b5f5f60408385031215613d4a575f5ffd5b8235613d5581613963565b91506020830135613b0b81613963565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613d89575f5ffd5b81518015158114610fb7575f5ffd5b5f60208284031215613da8575f5ffd5b8151610fb781613963565b602080825281018290525f8360408301825b85811015613df5578235613dd881613963565b6001600160a01b0316825260209283019290910190600101613dc5565b5095945050505050565b600181811c90821680613e1357607f821691505b602082108103613e3157634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613e47575f5ffd5b5051919050565b918252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a1357610a13613e5c565b81810381811115610a1357610a13613e5c565b5f61ffff821661ffff8103613ead57613ead613e5c565b60010192915050565b5f60208284031215613ec6575f5ffd5b8151610fb781613a3c565b6001600160a01b03929092168252602082015260400190565b6001815b6001841115613f2557808504811115613f0957613f09613e5c565b6001841615613f1757908102905b60019390931c928002613eee565b935093915050565b5f82613f3b57506001610a13565b81613f4757505f610a13565b8160018114613f5d5760028114613f6757613f83565b6001915050610a13565b60ff841115613f7857613f78613e5c565b50506001821b610a13565b5060208310610133831016604e8410600b8410161715613fa6575081810a610a13565b613fb25f198484613eea565b805f1904821115613fc557613fc5613e5c565b029392505050565b5f610fb760ff841683613f2d565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff81168114610e4c575f5ffd5b5f60208284031215614010575f5ffd5b8135610fb781613fef565b5f6020828403121561402b575f5ffd5b8151610fb781613a2e565b6001600160a01b039390931683526020830191909152604082015260600190565b60ff8281168282160390811115610a1357610a13613e5c565b634e487b7160e01b5f52601260045260245ffd5b5f60208284031215614094575f5ffd5b8151610fb781613fef565b5f60ff8316806140bd57634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220be06ab2c4f83f1e58ef7680247e65adbf99a93127dd55a14182317ccf7c5813164736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106102d7575f3560e01c806395d89b411161018157806395d89b411461051c57806397ee114414610524578063985ba4ae1461055a5780639908840c1461056d578063a68a526714610576578063a9059cbb14610589578063aa2f892d1461059c578063acdb3d51146105af578063b1bd7e2e146105b8578063b3d7f6b9146105cb578063b460af94146105de578063b6eba653146105ec578063ba08765214610602578063bdca916514610615578063c0b568e11461061e578063c3f0d30e14610631578063c63d75b61461045e578063c6e6f59214610644578063ca78e83914610657578063ce96cb771461065f578063d1717c7d14610672578063d3d0345814610686578063d853365f1461069c578063d905777e146106a4578063dd62ed3e146106b7578063e3352c4c146106ca578063e51a85f6146106dd578063e5e97193146106f0578063e66f53b714610703578063ef8b30f714610644578063f7dcd96e14610716575f5ffd5b806301e1d114146102db57806303d44854146102f257806306fdde031461030757806307a2d13a1461031c578063095ea7b31461032f5780630a28a477146103525780630c6a62dd146103655780630d1e6667146103785780630df571f71461038b57806318160ddd1461039e57806318c21949146103a65780631f52692b146103b957806323b872dd146103d9578063283c8168146103ec5780632f190c9a146103f5578063313ce56714610408578063348ec5c81461041d57806338d52e0f146104305780633a0dad8e146104385780633ab6d27c1461044b578063402d267d1461045e578063493a6e21146104725780634cdad5061461031c5780634e85b1351461048557806353a0bfdf1461049a5780636e553f65146104a757806370a08231146104ba5780637847ea53146104cd57806379502c55146104ed5780638f5c94651461050057806394bf804d146104a7575b5f5ffd5b600d545b6040519081526020015b60405180910390f35b6103056103003660046138a8565b610729565b005b61030f610978565b6040516102e99190613917565b6102df61032a36600461394c565b610a08565b61034261033d366004613977565b610a19565b60405190151581526020016102e9565b6102df61036036600461394c565b610a30565b6103056103733660046139a1565b610a3c565b61030561038636600461394c565b610b3c565b6103056103993660046139bc565b610e4f565b6002546102df565b6103056103b436600461394c565b610eca565b6006546103cc906001600160a01b031681565b6040516102e991906139dc565b6103426103e73660046139f0565b610f99565b6102df60175481565b6102df61040336600461394c565b610fbe565b60125b60405160ff90911681526020016102e9565b6009546103cc906001600160a01b031681565b6103cc611032565b600a546103cc906001600160a01b031681565b610305610459366004613a4b565b611056565b6102df61046c3660046139a1565b505f1990565b61030561048036600461394c565b611308565b61048d61157f565b6040516102e99190613ad6565b601a546103429060ff1681565b6102df6104b5366004613ae8565b611590565b6102df6104c83660046139a1565b6115aa565b6104d86301e1338081565b60405163ffffffff90911681526020016102e9565b6008546103cc906001600160a01b031681565b61050961271081565b60405161ffff90911681526020016102e9565b61030f6115c4565b60155460165461054a9160ff81169161ffff610100830481169263010000009004169084565b6040516102e99493929190613b2a565b610305610568366004613ba8565b6115d3565b61050961012c81565b6102df610584366004613bef565b6116e0565b610342610597366004613977565b611720565b6103056105aa36600461394c565b61172d565b6102df60145481565b6103056105c6366004613c1d565b6119ad565b6102df6105d936600461394c565b611bb9565b6102df6104b5366004613c5b565b6105f4611bc5565b6040516102e9929190613c8f565b6102df610610366004613c5b565b611e7f565b610509610bb881565b61030561062c36600461394c565b612075565b61030561063f36600461394c565b612217565b6102df61065236600461394c565b612378565b610305612383565b6102df61066d3660046139a1565b6123bd565b600a5461040b90600160a01b900460ff1681565b61068e6123d0565b6040516102e9929190613ced565b61040b601281565b6102df6106b23660046139a1565b6124fa565b6102df6106c5366004613d39565b612504565b6103056106d83660046139a1565b61252e565b6102df6106eb36600461394c565b612639565b6103056106fe36600461394c565b612672565b6007546103cc906001600160a01b031681565b6102df61072436600461394c565b612851565b6006546001600160a01b0316331461075457604051631a27eac360e11b815260040160405180910390fd5b61075e600b6128bc565b5f5b8181101561085e575f83838381811061077b5761077b613d65565b905060200201602081019061079091906139a1565b600854604051633af32abf60e01b81529192506001600160a01b031690633af32abf906107c19084906004016139dc565b602060405180830381865afa1580156107dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108009190613d79565b610828578060405163751dff9760e11b815260040161081f91906139dc565b60405180910390fd5b5f610834600b836128c5565b90508061085457604051630ea075bf60e21b815260040160405180910390fd5b5050600101610760565b506108ca306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c29190613d98565b600b906128d9565b61093b57610939306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109319190613d98565b600b906128c5565b505b7fa975983c7a4dcf80477a447433240de322f36428f1b3864e50d7a45e14c68b66828260405161096c929190613db3565b60405180910390a15050565b60606003805461098790613dff565b80601f01602080910402602001604051908101604052809291908181526020018280546109b390613dff565b80156109fe5780601f106109d5576101008083540402835291602001916109fe565b820191905f5260205f20905b8154815290600101906020018083116109e157829003601f168201915b5050505050905090565b5f610a13825f6128ed565b92915050565b5f33610a2681858561292e565b5060019392505050565b5f610a13826001612940565b6006546001600160a01b03163314610a6757604051631a27eac360e11b815260040160405180910390fd5b600854604051633c17975360e21b81526001600160a01b039091169063f05e5d4c90610a979084906004016139dc565b602060405180830381865afa158015610ab2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad69190613d79565b610af357604051631a27eac360e11b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0383169081179091556040517f83293ffeebb677b167941693470018acf300605df266a35e9fdb66f24ff00fe0905f90a250565b610b44612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b94573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb89190613d79565b610bd5576040516312aecd8160e01b815260040160405180910390fd5b601a5460ff1680610c50575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590610c119030906004016139dc565b602060405180830381865afa158015610c2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c509190613d79565b15610c6e576040516304b1e71160e41b815260040160405180910390fd5b805f03610c9757610c7d611032565b604051636b30633560e01b815260040161081f91906139dc565b60085460408051633228036560e11b815290515f926001600160a01b03169163645006ca9160048083019260209291908290030181865afa158015610cde573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d029190613e37565b905080821015610d29578181604051631e2be21160e01b815260040161081f929190613e4e565b5f610d32611032565b6001600160a01b03166370a08231336040518263ffffffff1660e01b8152600401610d5d91906139dc565b602060405180830381865afa158015610d78573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9c9190613e37565b905080831115610dbf57604051632ca2f52b60e11b815260040160405180910390fd5b600a54610deb9033906001600160a01b031685610dda611032565b6001600160a01b031692919061299c565b5f610df7600e33612a09565b9150610e12905033610e098684613e70565b600e9190612a2f565b50604051849033907f55896b30a78fc55b78937f8014dde3f0035e9d37a4f6ac36841fb8b62f7e2b13905f90a3505050610e4c6001600555565b50565b6009546001600160a01b03163314610e7a57604051631a27eac360e11b815260040160405180910390fd5b8015610ec6578060145f828254610e919190613e70565b9091555050601454604051829084907f8b8789cf9157fe7b016901e4ed3a5d0971caa8b7c031da0b25638ccf65841b2a905f90a45b5050565b6006546001600160a01b03163314610ef557604051631a27eac360e11b815260040160405180910390fd5b805f03610f0457610c7d611032565b601454811115610f2757604051632ca2f52b60e11b815260040160405180910390fd5b8060145f828254610f389190613e83565b9091555050600a5460405163741fca4b60e01b8152600481018390526001600160a01b039091169063741fca4b906024015f604051808303815f87803b158015610f80575f5ffd5b505af1158015610f92573d5f5f3e3d5ffd5b5050505050565b5f33610fa6858285612a44565b610fb1858585612a8f565b60019150505b9392505050565b5f5f610fca600e612aec565b9050805f03610fdb57505f92915050565b5f610fe68285612af6565b90505f805b828161ffff161015611029575f611007600e61ffff8416612b05565b915061101590508184613e70565b9250508061102290613e96565b9050610feb565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6006546001600160a01b0316331461108157604051631a27eac360e11b815260040160405180910390fd5b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f59190613d79565b611112576040516312aecd8160e01b815260040160405180910390fd5b600460ff84161115611137576040516317dbc4cb60e21b815260040160405180910390fd5b610bb861ffff8316111561115e576040516317dbc4cb60e21b815260040160405180910390fd5b61012c61ffff82161115611185576040516317dbc4cb60e21b815260040160405180910390fd5b61118d612b13565b805160188054909190829060ff191660018360048111156111b0576111b0613b16565b021790555060208201518154604084015161ffff90811663010000000264ffff0000001991909316610100021664ffffffff00199091161717815560609091015160019091015560ff8316600481111561120c5761120c613b16565b6015805460ff1916600183600481111561122857611228613b16565b02179055506015805461ffff83811663010000000264ffff00000019918616610100029190911664ffffffff00199092169190911717905560085460408051630df1aa5760e31b815290516001600160a01b0390921691636f8d52b8916004808201926020929091908290030181865afa1580156112a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cc9190613e37565b6112d69042613e70565b60175560405130907fb31d0e1c8c885e6966984333ce964f4a58ad72b6c4e89e688ecc4549ad97558e905f90a2505050565b600a546001600160a01b0316331461133357604051631a27eac360e11b815260040160405180910390fd5b61133b612972565b5f6113466011612aec565b9050805f036113555750611575565b5f6113d38260085f9054906101000a90046001600160a01b03166001600160a01b031663bcdb8a186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ce9190613e37565b612af6565b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611426573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144a9190613eb6565b90505f61145660025490565b90505f805b848161ffff16101561156e575f80611474601182612b05565b9092509050611484601183612bcd565b505f611492828b885f612be1565b905061149e3083612c16565b6114a88286613e70565b600a54604051634adfc2e760e01b81529196506001600160a01b031690634adfc2e7906114db9086908590600401613ed1565b5f604051808303815f87803b1580156114f2575f5ffd5b505af1158015611504573d5f5f3e3d5ffd5b505050508661ffff16836001600160a01b0316306001600160a01b03167f215abfcd108b85fbee47f26fda2de66f90f14fa5fcaf0201698ad8ac9323545f8486604051611552929190613e4e565b60405180910390a45050508061156790613e96565b905061145b565b5050505050505b610e4c6001600555565b606061158b600b612c4a565b905090565b5f60405163125ad87760e31b815260040160405180910390fd5b6001600160a01b03165f9081526020819052604090205490565b60606004805461098790613dff565b6009546001600160a01b031633146115fe57604051631a27eac360e11b815260040160405180910390fd5b611608601b612c56565b815f5b8161ffff168161ffff1610156116845761167b85858361ffff1681811061163457611634613d65565b61164a92602060409092020190810191506139a1565b86868461ffff1681811061166057611660613d65565b90506040020160200135601b612a2f9092919063ffffffff16565b5060010161160b565b505f61169760125b61032a90600a613fcd565b6016549091508111156116aa5760168190555b600d83905560405183907f5e1ff954b5e5257e9ee5d4cb07059e8f5e69b1aaaf9911e5d8d90a6894de9c21905f90a25050505050565b5f6117186116ef846001613e70565b6116f7612c5f565b61170290600a613fcd565b60025461170f9190613e70565b86919085612cdb565b949350505050565b5f33610a26818585612a8f565b611735612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611785573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a99190613d79565b6117c6576040516312aecd8160e01b815260040160405180910390fd5b601a5460ff1680611841575060085460405163f764eb4560e01b81526001600160a01b039091169063f764eb45906118029030906004016139dc565b602060405180830381865afa15801561181d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118419190613d79565b1561185f576040516304b1e71160e41b815260040160405180910390fd5b805f036118815730604051636b30633560e01b815260040161081f91906139dc565b60085460408051630912ae6d60e01b815290515f926001600160a01b031691630912ae6d9160048083019260209291908290030181865afa1580156118c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ec9190613e37565b905080821015611913578181604051631f29a4af60e31b815260040161081f929190613e4e565b5f61191d336115aa565b90508083111561194057604051632ca2f52b60e11b815260040160405180910390fd5b61194c3033818661299c565b5f611958601133612a09565b915061197390503361196a8684613e70565b60119190612a2f565b50604051849033907f222dc200773fe9b45015bf792e8fee37d651e3590c215806a5042404b6d741d2905f90a3505050610e4c6001600555565b6007546001600160a01b031633146119d857604051631a27eac360e11b815260040160405180910390fd5b5f8190036119f957604051631121aa8d60e01b815260040160405180910390fd5b611a03601e612c56565b5f816001600160401b03811115611a1c57611a1c613fdb565b604051908082528060200260200182016040528015611a45578160200160208202803683370190505b5090505f82815b8161ffff168161ffff161015611b43575f86868361ffff16818110611a7357611a73613d65565b611a8992602060409092020190810191506139a1565b90505f87878461ffff16818110611aa257611aa2613d65565b9050604002016020016020810190611aba9190614000565b905081868461ffff1681518110611ad357611ad3613d65565b6001600160a01b03909216602092830291909101909101525f611b01601e8463ffffffff80861690612a2f16565b905080611b2357826040516346bdabe160e01b815260040161081f91906139dc565b611b3363ffffffff831687613e70565b9550505050806001019050611a4c565b50611b4d83612d1d565b600a60149054906101000a900460ff16600a611b699190613fcd565b8214611b8857604051639006dd2760e01b815260040160405180910390fd5b60405133907f2d47a742b8d7df7c1fc5a9a631b206b364e6cb2722490759f63bb3ab14b132e0905f90a25050505050565b5f610a138260016128ed565b601a54606090819060ff1615611d485760408051600180825281830190925290602080830190803683375050604080516001808252818301909252929450905060208083019080368337505060085460408051631c56369f60e21b815290519394506001600160a01b0390911692637158da7c925060048083019260209291908290030181865afa158015611c5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c809190613d98565b825f81518110611c9257611c92613d65565b6001600160a01b039283166020918202929092018101919091526008546040805163d1717c7d60e01b81529051919093169263d1717c7d9260048083019391928290030181865afa158015611ce9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d0d919061401b565b611d1890600a613fcd565b815f81518110611d2a57611d2a613d65565b602002602001019063ffffffff16908163ffffffff16815250509091565b5f611d53601e612aec565b90508061ffff166001600160401b03811115611d7157611d71613fdb565b604051908082528060200260200182016040528015611d9a578160200160208202803683370190505b5092508061ffff166001600160401b03811115611db957611db9613fdb565b604051908082528060200260200182016040528015611de2578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611e79575f80611e08601e61ffff8516612b05565b9150915081868461ffff1681518110611e2357611e23613d65565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff1681518110611e5a57611e5a613d65565b63ffffffff909216602092830291909101909101525050600101611de7565b50509091565b5f611e88612972565b60085460405163f764eb4560e01b81526001600160a01b039091169063f764eb4590611eb89030906004016139dc565b602060405180830381865afa158015611ed3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef79190613d79565b611f145760405163125ad87760e31b815260040160405180910390fd5b5f611f1e836124fa565b905080851115611f4757828582604051632e52afbb60e21b815260040161081f93929190614036565b845f03611f695730604051636b30633560e01b815260040161081f91906139dc565b336001600160a01b03841614611f8457611f84833387612a44565b5f611f8e86610a08565b905080600d5f828254611fa19190613e83565b90915550611fb190508487612c16565b836001600160a01b0316856001600160a01b0316336001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db848a604051612000929190613e4e565b60405180910390a4600a54604051627b8a6760e11b8152600481018390526001600160a01b0387811660248301529091169062f714ce906044015f604051808303815f87803b158015612051575f5ffd5b505af1158015612063573d5f5f3e3d5ffd5b5092945050505050610fb76001600555565b61207d612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120cd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f19190613d79565b61210e576040516312aecd8160e01b815260040160405180910390fd5b805f0361211d57610c7d611032565b5f612129600e33612a09565b9150508181101561214d57604051632ca2f52b60e11b815260040160405180910390fd5b5f6121588383613e83565b9050805f036121725761216c600e33612bcd565b50612180565b61217e600e3383612a2f565b505b600a546040516351edffb160e01b81526001600160a01b03909116906351edffb1906121b29033908790600401613ed1565b5f604051808303815f87803b1580156121c9575f5ffd5b505af11580156121db573d5f5f3e3d5ffd5b50506040518592503391507f96a9a6886cdf3047a125454218a23d3961fd3a78643123b248a9d106d0ac94fd905f90a35050610e4c6001600555565b61221f612972565b60085f9054906101000a90046001600160a01b03166001600160a01b031663edcf9c1f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122939190613d79565b6122b0576040516312aecd8160e01b815260040160405180910390fd5b805f036122d25730604051636b30633560e01b815260040161081f91906139dc565b5f6122de601133612a09565b9150508181101561230257604051632ca2f52b60e11b815260040160405180910390fd5b5f61230d8383613e83565b9050805f0361232757612321601133612bcd565b50612335565b61233360113383612a2f565b505b612340303385612d95565b604051839033907f046d3e17087d323298991516e3fdec36fe1204d6bff7fb6e2b8eca77b80a22ad905f90a35050610e4c6001600555565b5f610a13825f612940565b6008546001600160a01b031633146123ae5760405163ea8e4eb560e01b815260040160405180910390fd5b601a805460ff19166001179055565b5f610a136123ca836115aa565b5f6128ed565b6060805f6123de601b612aec565b90508061ffff166001600160401b038111156123fc576123fc613fdb565b604051908082528060200260200182016040528015612425578160200160208202803683370190505b5092508061ffff166001600160401b0381111561244457612444613fdb565b60405190808252806020026020018201604052801561246d578160200160208202803683370190505b5091505f5b8161ffff168161ffff161015611e79575f80612493601b61ffff8516612b05565b9150915081868461ffff16815181106124ae576124ae613d65565b60200260200101906001600160a01b031690816001600160a01b03168152505080858461ffff16815181106124e5576124e5613d65565b60209081029190910101525050600101612472565b5f610a13826115aa565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6008546001600160a01b031633146125595760405163ea8e4eb560e01b815260040160405180910390fd5b612564600b82612dbb565b505f80612572601e84612a09565b915091508161258057505050565b61258b601e84612bcd565b505f306001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ed9190613d98565b90505f806125fc601e84612a09565b9150915081156126235761261d836126148684613e70565b601e9190612a2f565b50612631565b61262f601e8486612a2f565b505b505050505050565b5f5f61264483612dcf565b90505f6126518285613e83565b90505f61265d82612e9a565b90506126698184613e70565b95945050505050565b600a546001600160a01b0316331461269d57604051631a27eac360e11b815260040160405180910390fd5b6126a5612972565b5f6126b0600e612aec565b9050805f036126bf5750611575565b5f6127148260085f9054906101000a90046001600160a01b03166001600160a01b031663bcdb8a186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113aa573d5f5f3e3d5ffd5b90505f60095f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612767573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278b9190613eb6565b90505f61279760025490565b90505f805b848161ffff16101561156e575f806127b5600e82612b05565b90925090506127c5600e83612bcd565b505f6127d3828b885f612f93565b90506127df8382612fbf565b6127e98286613e70565b94508661ffff16836001600160a01b0316306001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f68585604051612835929190613e4e565b60405180910390a45050508061284a90613e96565b905061279c565b5f5f61285d6011612aec565b9050805f0361286e57505f92915050565b5f6128798285612af6565b90505f805b828161ffff161015611029575f61289a601161ffff8416612b05565b91506128a890508184613e70565b925050806128b590613e96565b905061287e565b610e4c81612ff3565b5f610fb7836001600160a01b03841661304c565b5f610fb7836001600160a01b038416613093565b5f610fb76128fa600d5490565b612905906001613e70565b61290d612c5f565b61291890600a613fcd565b6002546129259190613e70565b85919085612cdb565b61293b83838360016130aa565b505050565b5f610fb761294c612c5f565b61295790600a613fcd565b6002546129649190613e70565b600d54612925906001613e70565b60026005540361299557604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b6040516001600160a01b038481166024830152838116604483015260648201839052612a039186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061317c565b50505050565b5f808080612a20866001600160a01b0387166131df565b909450925050505b9250929050565b5f611718846001600160a01b03851684613217565b5f612a4f8484612504565b90505f19811015612a035781811015612a8157828183604051637dc7a0d960e11b815260040161081f93929190614036565b612a0384848484035f6130aa565b6001600160a01b038316612ab8575f604051634b637e8f60e11b815260040161081f91906139dc565b6001600160a01b038216612ae1575f60405163ec442f0560e01b815260040161081f91906139dc565b61293b838383613233565b5f610a1382613346565b5f828218828410028218610fb7565b5f808080612a208686613350565b604080516080810182525f808252602082018190529181018290526060810191909152426017541115612ba857604080516080810190915260188054829060ff166004811115612b6557612b65613b16565b6004811115612b7657612b76613b16565b8152815461ffff6101008204811660208401526301000000909104166040820152600190910154606090910152919050565b604080516080810190915260158054829060ff166004811115612b6557612b65613b16565b5f610fb7836001600160a01b038416613379565b5f612669612bf0856001613e70565b612bf8612c5f565b612c0390600a613fcd565b612c0d9086613e70565b87919085612cdb565b6001600160a01b038216612c3f575f604051634b637e8f60e11b815260040161081f91906139dc565b610ec6825f83613233565b60605f610fb783613395565b610e4c816133ee565b5f5f612c69611032565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cc8919061401b565b9050612cd5816012614057565b91505090565b5f612d08612ce883613437565b8015612d0357505f8480612cfe57612cfe614070565b868809115b151590565b612d13868686613463565b6126699190613e70565b5f5b8151811015610ec657612d55828281518110612d3d57612d3d613d65565b6020026020010151600b6128d990919063ffffffff16565b612d8d57818181518110612d6b57612d6b613d65565b602002602001015160405163751dff9760e11b815260040161081f91906139dc565b600101612d1f565b61293b83846001600160a01b031663a9059cbb85856040516024016129d1929190613ed1565b5f610fb7836001600160a01b038416613513565b5f5f612dd9612b13565b9050806040015161ffff165f03612df257505f92915050565b60408101515f90612e0a9061ffff1685612710613463565b905061171860095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e839190614084565b829063ffffffff908116906301e133809061346316565b5f5f612ea4612b13565b9050806020015161ffff165f03612ebd57505f92915050565b5f612ed4612ecd6012600a613fcd565b855f6116e0565b90505f5f612ee4845f01516135f6565b9150915081831080612ef4575080155b15612f0457505f95945050505050565b5f612f22612f128386613e83565b602087015161ffff169084613463565b90505f612f328289612710613463565b9050612f8760095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5f573d5f5f3e3d5ffd5b98975050505050505050565b5f612669612f9f612c5f565b612faa90600a613fcd565b612fb49085613e70565b612c0d866001613e70565b6001600160a01b038216612fe8575f60405163ec442f0560e01b815260040161081f91906139dc565b610ec65f8383613233565b5f612ffc825490565b90505f5b8181101561304557826001015f845f01838154811061302157613021613d65565b905f5260205f20015481526020019081526020015f205f9055806001019050613000565b50505f9055565b5f6130578383613093565b61308c57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a13565b505f610a13565b5f9081526001919091016020526040902054151590565b6001600160a01b0384166130d3575f60405163e602df0560e01b815260040161081f91906139dc565b6001600160a01b0383166130fc575f604051634a1406b160e11b815260040161081f91906139dc565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015612a0357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161316e91815260200190565b60405180910390a350505050565b5f5f60205f8451602086015f885af18061319b576040513d5f823e3d81fd5b50505f513d915081156131b25780600114156131bf565b6001600160a01b0384163b155b15612a035783604051635274afe760e01b815260040161081f91906139dc565b5f81815260028301602052604081205481908061320c5761320085856136e0565b92505f9150612a289050565b600192509050612a28565b5f828152600284016020526040812082905561171884846136eb565b6001600160a01b03831661325d578060025f8282546132529190613e70565b909155506132ba9050565b6001600160a01b0383165f908152602081905260409020548181101561329c5783818360405163391434e360e21b815260040161081f93929190614036565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166132d6576002805482900390556132f4565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161333991815260200190565b60405180910390a3505050565b5f610a13826136f6565b5f808061335d85856136ff565b5f81815260029690960160205260409095205494959350505050565b5f8181526002830160205260408120819055610fb7838361370a565b6060815f018054806020026020016040519081016040528092919081815260200182805480156133e257602002820191905f5260205f20905b8154815260200190600101908083116133ce575b50505050509050919050565b5f6133f882613346565b90505f5b8181101561342d57600283015f61341385846136ff565b815260208101919091526040015f908120556001016133fc565b50610ec6826128bc565b5f600282600381111561344c5761344c613b16565b613456919061409f565b60ff166001149050919050565b5f5f5f6134708686613715565b91509150815f036134945783818161348a5761348a614070565b0492505050610fb7565b8184116134ab576134ab6003851502601118613731565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f81815260018301602052604081205480156135ed575f613535600183613e83565b85549091505f9061354890600190613e83565b90508082146135a7575f865f01828154811061356657613566613d65565b905f5260205f200154905080875f01848154811061358657613586613d65565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806135b8576135b86140cc565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a13565b5f915050610a13565b5f8080613603601261168c565b90505f84600481111561361857613618613b16565b03613628578092508291506136da565b600384600481111561363c5761363c613b16565b0361364e5760165492508291506136da565b600184600481111561366257613662613b16565b0361367a5761367081613742565b92508091506136da565b600284600481111561368e5761368e613b16565b036136a65761369c81613742565b92508291506136da565b60048460048111156136ba576136ba613b16565b036136da576016546136d4906136cf83613742565b613868565b92508291505b50915091565b5f610fb78383613877565b5f610fb7838361304c565b5f610a13825490565b5f610fb78383613882565b5f610fb78383613513565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f5f60085f9054906101000a90046001600160a01b03166001600160a01b031663f3cc69936040518163ffffffff1660e01b8152600401602060405180830381865afa158015613794573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b89190613eb6565b61ffff1690505f61384d60095f9054906101000a90046001600160a01b03166001600160a01b0316634ff0876a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613812573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138369190614084565b839063ffffffff908116906301e133809061346316565b905061171861385e82612710613e70565b8590612710613463565b5f828218828411028218610fb7565b5f610fb78383613093565b5f825f01828154811061389757613897613d65565b905f5260205f200154905092915050565b5f5f602083850312156138b9575f5ffd5b82356001600160401b038111156138ce575f5ffd5b8301601f810185136138de575f5ffd5b80356001600160401b038111156138f3575f5ffd5b8560208260051b8401011115613907575f5ffd5b6020919091019590945092505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561395c575f5ffd5b5035919050565b6001600160a01b0381168114610e4c575f5ffd5b5f5f60408385031215613988575f5ffd5b823561399381613963565b946020939093013593505050565b5f602082840312156139b1575f5ffd5b8135610fb781613963565b5f5f604083850312156139cd575f5ffd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b5f5f5f60608486031215613a02575f5ffd5b8335613a0d81613963565b92506020840135613a1d81613963565b929592945050506040919091013590565b60ff81168114610e4c575f5ffd5b61ffff81168114610e4c575f5ffd5b5f5f5f60608486031215613a5d575f5ffd5b8335613a6881613a2e565b92506020840135613a7881613a3c565b91506040840135613a8881613a3c565b809150509250925092565b5f8151808452602084019350602083015f5b82811015613acc5781516001600160a01b0316865260209586019590910190600101613aa5565b5093949350505050565b602081525f610fb76020830184613a93565b5f5f60408385031215613af9575f5ffd5b823591506020830135613b0b81613963565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b6080810160058610613b4a57634e487b7160e01b5f52602160045260245ffd5b94815261ffff93841660208201529190921660408201526060015290565b5f5f83601f840112613b78575f5ffd5b5081356001600160401b03811115613b8e575f5ffd5b6020830191508360208260061b8501011115612a28575f5ffd5b5f5f5f60408486031215613bba575f5ffd5b83356001600160401b03811115613bcf575f5ffd5b613bdb86828701613b68565b909790965060209590950135949350505050565b5f5f5f60608486031215613c01575f5ffd5b8335925060208401359150604084013560048110613a88575f5ffd5b5f5f60208385031215613c2e575f5ffd5b82356001600160401b03811115613c43575f5ffd5b613c4f85828601613b68565b90969095509350505050565b5f5f5f60608486031215613c6d575f5ffd5b833592506020840135613c7f81613963565b91506040840135613a8881613963565b604081525f613ca16040830185613a93565b82810360208401528084518083526020830191506020860192505f5b81811015613ce157835163ffffffff16835260209384019390920191600101613cbd565b50909695505050505050565b604081525f613cff6040830185613a93565b82810360208401528084518083526020830191506020860192505f5b81811015613ce1578351835260209384019390920191600101613d1b565b5f5f60408385031215613d4a575f5ffd5b8235613d5581613963565b91506020830135613b0b81613963565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613d89575f5ffd5b81518015158114610fb7575f5ffd5b5f60208284031215613da8575f5ffd5b8151610fb781613963565b602080825281018290525f8360408301825b85811015613df5578235613dd881613963565b6001600160a01b0316825260209283019290910190600101613dc5565b5095945050505050565b600181811c90821680613e1357607f821691505b602082108103613e3157634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613e47575f5ffd5b5051919050565b918252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a1357610a13613e5c565b81810381811115610a1357610a13613e5c565b5f61ffff821661ffff8103613ead57613ead613e5c565b60010192915050565b5f60208284031215613ec6575f5ffd5b8151610fb781613a3c565b6001600160a01b03929092168252602082015260400190565b6001815b6001841115613f2557808504811115613f0957613f09613e5c565b6001841615613f1757908102905b60019390931c928002613eee565b935093915050565b5f82613f3b57506001610a13565b81613f4757505f610a13565b8160018114613f5d5760028114613f6757613f83565b6001915050610a13565b60ff841115613f7857613f78613e5c565b50506001821b610a13565b5060208310610133831016604e8410600b8410161715613fa6575081810a610a13565b613fb25f198484613eea565b805f1904821115613fc557613fc5613e5c565b029392505050565b5f610fb760ff841683613f2d565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff81168114610e4c575f5ffd5b5f60208284031215614010575f5ffd5b8135610fb781613fef565b5f6020828403121561402b575f5ffd5b8151610fb781613a2e565b6001600160a01b039390931683526020830191909152604082015260600190565b60ff8281168282160390811115610a1357610a13613e5c565b634e487b7160e01b5f52601260045260245ffd5b5f60208284031215614094575f5ffd5b8151610fb781613fef565b5f60ff8316806140bd57634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220be06ab2c4f83f1e58ef7680247e65adbf99a93127dd55a14182317ccf7c5813164736f6c634300081c0033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/artifacts/contracts/vaults/OrionVault.sol/OrionVault.json b/artifacts/contracts/vaults/OrionVault.sol/OrionVault.json index 31c032b7..c9da359f 100644 --- a/artifacts/contracts/vaults/OrionVault.sol/OrionVault.json +++ b/artifacts/contracts/vaults/OrionVault.sol/OrionVault.json @@ -652,19 +652,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "MAX_FULFILL_BATCH_SIZE", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "MAX_MANAGEMENT_FEE", @@ -1256,7 +1243,13 @@ "type": "function" }, { - "inputs": [], + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillBatchSize", + "type": "uint256" + } + ], "name": "pendingDeposit", "outputs": [ { @@ -1269,7 +1262,13 @@ "type": "function" }, { - "inputs": [], + "inputs": [ + { + "internalType": "uint256", + "name": "fulfillBatchSize", + "type": "uint256" + } + ], "name": "pendingRedeem", "outputs": [ { diff --git a/contracts/OrionConfig.sol b/contracts/OrionConfig.sol index 25d22a32..82cba933 100644 --- a/contracts/OrionConfig.sol +++ b/contracts/OrionConfig.sol @@ -60,6 +60,8 @@ contract OrionConfig is Ownable2Step, IOrionConfig { uint256 public minRedeemAmount; /// @notice Fee change cooldown duration in seconds (7 days default) uint256 public feeChangeCooldownDuration; + /// @notice Maximum number of requests to process per fulfill calls + uint256 public maxFulfillBatchSize; // Vault-specific configuration using EnumerableSet for EnumerableSet.AddressSet; @@ -107,6 +109,7 @@ contract OrionConfig is Ownable2Step, IOrionConfig { curatorIntentDecimals = 9; // 9 for uint32 priceAdapterDecimals = 14; // 14 for uint128 feeChangeCooldownDuration = 7 days; // Default 7 day cooldown + maxFulfillBatchSize = 150; // Default 150 requests per fulfill call // Store underlying asset decimals tokenDecimals[underlyingAsset_] = IERC20Metadata(underlyingAsset_).decimals(); @@ -190,6 +193,46 @@ contract OrionConfig is Ownable2Step, IOrionConfig { emit EventsLib.FeeChangeCooldownDurationUpdated(duration); } + /// @inheritdoc IOrionConfig + function setMaxFulfillBatchSize(uint256 size) external onlyOwner { + if (!isSystemIdle()) revert ErrorsLib.SystemNotIdle(); + if (size == 0) revert ErrorsLib.InvalidArguments(); + + maxFulfillBatchSize = size; + + emit EventsLib.MaxFulfillBatchSizeUpdated(size); + } + + /// @notice Sets the guardian address for emergency pausing + /// @param _guardian The new guardian address + /// @dev Only admin can set the guardian + function setGuardian(address _guardian) external onlyAdmin { + guardian = _guardian; + emit EventsLib.GuardianUpdated(_guardian); + } + + /// @notice Pauses all protocol operations across orchestrators + /// @dev Can only be called by guardian or admin + /// Pauses InternalStatesOrchestrator and LiquidityOrchestrator + function pauseAll() external { + if (msg.sender != guardian && msg.sender != admin) revert ErrorsLib.UnauthorizedAccess(); + + IInternalStateOrchestrator(internalStatesOrchestrator).pause(); + ILiquidityOrchestrator(liquidityOrchestrator).pause(); + + emit EventsLib.ProtocolPaused(msg.sender); + } + + /// @notice Unpauses all protocol operations across orchestrators + /// @dev Can only be called by admin (not guardian: requires admin approval to resume) + /// Unpauses InternalStatesOrchestrator and LiquidityOrchestrator + function unpauseAll() external onlyAdmin { + IInternalStateOrchestrator(internalStatesOrchestrator).unpause(); + ILiquidityOrchestrator(liquidityOrchestrator).unpause(); + + emit EventsLib.ProtocolUnpaused(msg.sender); + } + // === Whitelist Functions === /// @inheritdoc IOrionConfig @@ -382,34 +425,4 @@ contract OrionConfig is Ownable2Step, IOrionConfig { function getTokenDecimals(address token) external view returns (uint8) { return tokenDecimals[token]; } - - /// @notice Sets the guardian address for emergency pausing - /// @param _guardian The new guardian address - /// @dev Only admin can set the guardian - function setGuardian(address _guardian) external onlyAdmin { - guardian = _guardian; - emit EventsLib.GuardianUpdated(_guardian); - } - - /// @notice Pauses all protocol operations across orchestrators - /// @dev Can only be called by guardian or admin - /// Pauses InternalStatesOrchestrator and LiquidityOrchestrator - function pauseAll() external { - if (msg.sender != guardian && msg.sender != admin) revert ErrorsLib.UnauthorizedAccess(); - - IInternalStateOrchestrator(internalStatesOrchestrator).pause(); - ILiquidityOrchestrator(liquidityOrchestrator).pause(); - - emit EventsLib.ProtocolPaused(msg.sender); - } - - /// @notice Unpauses all protocol operations across orchestrators - /// @dev Can only be called by admin (not guardian: requires admin approval to resume) - /// Unpauses InternalStatesOrchestrator and LiquidityOrchestrator - function unpauseAll() external onlyAdmin { - IInternalStateOrchestrator(internalStatesOrchestrator).unpause(); - ILiquidityOrchestrator(liquidityOrchestrator).unpause(); - - emit EventsLib.ProtocolUnpaused(msg.sender); - } } diff --git a/contracts/interfaces/IOrionConfig.sol b/contracts/interfaces/IOrionConfig.sol index 4de30d40..4d35b6b1 100644 --- a/contracts/interfaces/IOrionConfig.sol +++ b/contracts/interfaces/IOrionConfig.sol @@ -206,4 +206,13 @@ interface IOrionConfig { /// @dev Can only be called by the contract owner /// @param duration The new cooldown duration in seconds function setFeeChangeCooldownDuration(uint256 duration) external; + + /// @notice Returns the maximum fulfill batch size + /// @return The maximum fulfill batch size + function maxFulfillBatchSize() external view returns (uint256); + + /// @notice Sets the maximum fulfill batch size + /// @dev Can only be called by the contract owner + /// @param size The new maximum fulfill batch size + function setMaxFulfillBatchSize(uint256 size) external; } diff --git a/contracts/interfaces/IOrionVault.sol b/contracts/interfaces/IOrionVault.sol index 5b6b8d14..afde9e1b 100644 --- a/contracts/interfaces/IOrionVault.sol +++ b/contracts/interfaces/IOrionVault.sol @@ -180,14 +180,16 @@ interface IOrionVault is IERC4626 { /// --------- INTERNAL STATES ORCHESTRATOR FUNCTIONS --------- /// @notice Get total pending deposit amount across all users + /// @param fulfillBatchSize The maximum number of requests to process per fulfill call /// @return Total pending deposits denominated in underlying asset units (e.g., USDC, ETH) /// @dev This returns asset amounts, not share amounts - function pendingDeposit() external view returns (uint256); + function pendingDeposit(uint256 fulfillBatchSize) external view returns (uint256); /// @notice Get total pending redemption shares across all users + /// @param fulfillBatchSize The maximum number of requests to process per fulfill call /// @return Total pending redemptions denominated in vault share units /// @dev This returns share amounts, not underlying asset amounts - function pendingRedeem() external view returns (uint256); + function pendingRedeem(uint256 fulfillBatchSize) external view returns (uint256); /// @notice Calculate the curator's fee based on total assets /// @param totalAssets The total assets under management diff --git a/contracts/libraries/EventsLib.sol b/contracts/libraries/EventsLib.sol index b7439f27..fe878536 100644 --- a/contracts/libraries/EventsLib.sol +++ b/contracts/libraries/EventsLib.sol @@ -37,6 +37,10 @@ library EventsLib { /// @param newCooldownDuration The new cooldown duration in seconds. event FeeChangeCooldownDurationUpdated(uint256 indexed newCooldownDuration); + /// @notice The maximum fulfill batch size has been updated. + /// @param maxFulfillBatchSize The new maximum fulfill batch size. + event MaxFulfillBatchSizeUpdated(uint256 indexed maxFulfillBatchSize); + /// @notice A vault fee model change has been scheduled. /// @param vault The address of the vault. event VaultFeeChangeScheduled(address indexed vault); diff --git a/contracts/orchestrators/InternalStatesOrchestrator.sol b/contracts/orchestrators/InternalStatesOrchestrator.sol index ca881b06..e73dc149 100644 --- a/contracts/orchestrators/InternalStatesOrchestrator.sol +++ b/contracts/orchestrators/InternalStatesOrchestrator.sol @@ -299,9 +299,11 @@ contract InternalStatesOrchestrator is Ownable2Step, ReentrancyGuard, Pausable, function _buildTransparentVaultsEpoch() internal { address[] memory allTransparent = config.getAllOrionVaults(EventsLib.VaultType.Transparent); delete transparentVaultsEpoch; + + uint256 maxFulfillBatchSize = config.maxFulfillBatchSize(); for (uint16 i = 0; i < allTransparent.length; ++i) { address v = allTransparent[i]; - if (IOrionVault(v).pendingDeposit() + IOrionVault(v).totalAssets() == 0) continue; + if (IOrionVault(v).pendingDeposit(maxFulfillBatchSize) + IOrionVault(v).totalAssets() == 0) continue; transparentVaultsEpoch.push(v); } } @@ -360,6 +362,7 @@ contract InternalStatesOrchestrator is Ownable2Step, ReentrancyGuard, Pausable, } (uint16 activeVFee, uint16 activeRsFee) = activeProtocolFees(); + uint256 maxFulfillBatchSize = config.maxFulfillBatchSize(); for (uint16 i = i0; i < i1; ++i) { IOrionTransparentVault vault = IOrionTransparentVault(transparentVaultsEpoch[i]); @@ -418,14 +421,14 @@ contract InternalStatesOrchestrator is Ownable2Step, ReentrancyGuard, Pausable, // STEP 5: WITHDRAWAL EXCHANGE RATE (based on post-fee totalAssets) uint256 pendingRedeem = vault.convertToAssetsWithPITTotalAssets( - vault.pendingRedeem(), + vault.pendingRedeem(maxFulfillBatchSize), totalAssets, Math.Rounding.Floor ); // STEP 6: DEPOSIT PROCESSING (add deposits, subtract withdrawals) totalAssets -= pendingRedeem; - uint256 pendingDeposit = vault.pendingDeposit(); + uint256 pendingDeposit = vault.pendingDeposit(maxFulfillBatchSize); _currentEpoch.vaultsTotalAssetsForFulfillDeposit[address(vault)] = totalAssets; totalAssets += pendingDeposit; _currentEpoch.vaultsTotalAssets[address(vault)] = totalAssets; diff --git a/contracts/orchestrators/LiquidityOrchestrator.sol b/contracts/orchestrators/LiquidityOrchestrator.sol index e099e3c5..bcd529e6 100644 --- a/contracts/orchestrators/LiquidityOrchestrator.sol +++ b/contracts/orchestrators/LiquidityOrchestrator.sol @@ -497,8 +497,9 @@ contract LiquidityOrchestrator is Ownable2Step, ReentrancyGuard, Pausable, ILiqu ) internal { IOrionVault vaultContract = IOrionVault(vault); - uint256 pendingRedeem = vaultContract.pendingRedeem(); - uint256 pendingDeposit = vaultContract.pendingDeposit(); + uint256 maxFulfillBatchSize = config.maxFulfillBatchSize(); + uint256 pendingRedeem = vaultContract.pendingRedeem(maxFulfillBatchSize); + uint256 pendingDeposit = vaultContract.pendingDeposit(maxFulfillBatchSize); if (pendingRedeem > 0) { vaultContract.fulfillRedeem(totalAssetsForRedeem); diff --git a/contracts/vaults/OrionVault.sol b/contracts/vaults/OrionVault.sol index 79d7885b..f4d4954d 100644 --- a/contracts/vaults/OrionVault.sol +++ b/contracts/vaults/OrionVault.sol @@ -70,19 +70,11 @@ abstract contract OrionVault is ERC4626, ReentrancyGuard, IOrionVault { /// @notice Redemption requests queue (R) - mapping of user address to requested [shares] amount EnumerableMap.AddressToUintMap private _redeemRequests; - /// @notice Cached pending deposit amount [assets] - updated incrementally for gas efficiency - uint256 private _pendingDeposit; - - /// @notice Cached pending redemption amount [shares] - updated incrementally for gas efficiency - uint256 private _pendingRedeem; - /// @notice Pending curator fees [assets] uint256 public pendingCuratorFees; /// @notice Share token decimals uint8 public constant SHARE_DECIMALS = 18; - /// @notice Maximum number of requests to process per fulfill call - uint16 public constant MAX_FULFILL_BATCH_SIZE = 150; /* -------------------------------------------------------------------------- */ /* CURATOR FEES */ @@ -191,8 +183,6 @@ abstract contract OrionVault is ERC4626, ReentrancyGuard, IOrionVault { liquidityOrchestrator = ILiquidityOrchestrator(config_.liquidityOrchestrator()); curatorIntentDecimals = config_.curatorIntentDecimals(); - // Note: _totalAssets, _pendingDeposit, and _pendingRedeem are automatically initialized to 0 - uint8 underlyingDecimals = IERC20Metadata(address(config_.underlyingAsset())).decimals(); if (underlyingDecimals > SHARE_DECIMALS) revert ErrorsLib.InvalidUnderlyingDecimals(); @@ -360,7 +350,6 @@ abstract contract OrionVault is ERC4626, ReentrancyGuard, IOrionVault { (, uint256 currentAmount) = _depositRequests.tryGet(msg.sender); // slither-disable-next-line unused-return _depositRequests.set(msg.sender, currentAmount + assets); - _pendingDeposit += assets; emit DepositRequest(msg.sender, assets); } @@ -383,7 +372,6 @@ abstract contract OrionVault is ERC4626, ReentrancyGuard, IOrionVault { // slither-disable-next-line unused-return _depositRequests.set(msg.sender, newAmount); } - _pendingDeposit -= amount; // Request funds from liquidity orchestrator liquidityOrchestrator.returnDepositFunds(msg.sender, amount); @@ -409,7 +397,6 @@ abstract contract OrionVault is ERC4626, ReentrancyGuard, IOrionVault { (, uint256 currentShares) = _redeemRequests.tryGet(msg.sender); // slither-disable-next-line unused-return _redeemRequests.set(msg.sender, currentShares + shares); - _pendingRedeem += shares; emit RedeemRequest(msg.sender, shares); } @@ -432,7 +419,6 @@ abstract contract OrionVault is ERC4626, ReentrancyGuard, IOrionVault { // slither-disable-next-line unused-return _redeemRequests.set(msg.sender, newShares); } - _pendingRedeem -= shares; // Interactions - return shares to LP. IERC20(address(this)).safeTransfer(msg.sender, shares); @@ -587,13 +573,41 @@ abstract contract OrionVault is ERC4626, ReentrancyGuard, IOrionVault { /// --------- INTERNAL STATES ORCHESTRATOR FUNCTIONS --------- /// @inheritdoc IOrionVault - function pendingDeposit() external view returns (uint256) { - return _pendingDeposit; + function pendingDeposit(uint256 fulfillBatchSize) external view returns (uint256) { + uint256 length = _depositRequests.length(); + if (length == 0) { + return 0; + } + + uint256 batchSize = Math.min(length, fulfillBatchSize); + uint256 processableAmount = 0; + + for (uint16 i = 0; i < batchSize; ++i) { + // slither-disable-next-line unused-return + (, uint256 amount) = _depositRequests.at(i); + processableAmount += amount; + } + + return processableAmount; } /// @inheritdoc IOrionVault - function pendingRedeem() external view returns (uint256) { - return _pendingRedeem; + function pendingRedeem(uint256 fulfillBatchSize) external view returns (uint256) { + uint256 length = _redeemRequests.length(); + if (length == 0) { + return 0; + } + + uint256 batchSize = Math.min(length, fulfillBatchSize); + uint256 processableShares = 0; + + for (uint16 i = 0; i < batchSize; ++i) { + // slither-disable-next-line unused-return + (, uint256 shares) = _redeemRequests.at(i); + processableShares += shares; + } + + return processableShares; } /// @inheritdoc IOrionVault @@ -607,13 +621,12 @@ abstract contract OrionVault is ERC4626, ReentrancyGuard, IOrionVault { /// @inheritdoc IOrionVault function fulfillDeposit(uint256 depositTotalAssets) external onlyLiquidityOrchestrator nonReentrant { - uint32 length = uint32(_depositRequests.length()); + uint256 length = _depositRequests.length(); if (length == 0) { return; } - // Process requests in batches (up to MAX_FULFILL_BATCH_SIZE per epoch) - uint16 batchSize = length > MAX_FULFILL_BATCH_SIZE ? MAX_FULFILL_BATCH_SIZE : uint16(length); + uint256 batchSize = Math.min(length, config.maxFulfillBatchSize()); uint16 currentEpoch = internalStatesOrchestrator.epochCounter(); // Capture totalSupply snapshot to ensure consistent pricing for all users in this batch @@ -639,19 +652,16 @@ abstract contract OrionVault is ERC4626, ReentrancyGuard, IOrionVault { emit Deposit(address(this), user, currentEpoch, amount, shares); } - - _pendingDeposit -= processedAmount; } /// @inheritdoc IOrionVault function fulfillRedeem(uint256 redeemTotalAssets) external onlyLiquidityOrchestrator nonReentrant { - uint32 length = uint32(_redeemRequests.length()); + uint256 length = _redeemRequests.length(); if (length == 0) { return; } - // Process requests in batches (up to MAX_FULFILL_BATCH_SIZE per epoch) - uint16 batchSize = length > MAX_FULFILL_BATCH_SIZE ? MAX_FULFILL_BATCH_SIZE : uint16(length); + uint256 batchSize = Math.min(length, config.maxFulfillBatchSize()); uint16 currentEpoch = internalStatesOrchestrator.epochCounter(); // Capture totalSupply snapshot to ensure consistent pricing for all users in this batch @@ -680,7 +690,5 @@ abstract contract OrionVault is ERC4626, ReentrancyGuard, IOrionVault { emit Redeem(address(this), user, currentEpoch, underlyingAmount, shares); } - - _pendingRedeem -= processedShares; } } diff --git a/test/BatchLimitAccounting.test.ts b/test/BatchLimitAccounting.test.ts new file mode 100644 index 00000000..699ac567 --- /dev/null +++ b/test/BatchLimitAccounting.test.ts @@ -0,0 +1,302 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { + OrionConfig, + OrionTransparentVault, + InternalStatesOrchestrator, + LiquidityOrchestrator, + TransparentVaultFactory, + MockUnderlyingAsset, +} from "../typechain-types"; + +/** + * @title Batch Limit Accounting Tests + * @notice Tests for the critical fix to batch limit accounting mismatch + * @dev This test suite validates that pendingDeposit() and pendingRedeem() + * return only the processable amount (first maxFulfillBatchSize requests) rather than + * the total pending amount, preventing accounting vs execution mismatch + * + * Issue: The orchestrator treats all pendingDeposit/pendingRedeem entries + * as part of totalAssets() during preprocessing, but fulfill functions + * only process up to maxFulfillBatchSize requests at a time, causing accounting mismatch. + */ +describe("Batch Limit Accounting Fix", function () { + const DEPOSIT_AMOUNT = ethers.parseUnits("100", 6); // 100 USDC + const INITIAL_BALANCE = ethers.parseUnits("1000000", 6); // 1M USDC per user + + async function deployFixture() { + const allSigners = await ethers.getSigners(); + const owner = allSigners[0]; + const curator = allSigners[1]; + const automationRegistry = allSigners[2]; + const users = allSigners.slice(3); // Remaining signers for testing + + // Deploy mock USDC (6 decimals) + const MockUnderlyingAssetFactory = await ethers.getContractFactory("MockUnderlyingAsset"); + const usdcDeployed = await MockUnderlyingAssetFactory.deploy(6); + await usdcDeployed.waitForDeployment(); + const usdc = usdcDeployed as unknown as MockUnderlyingAsset; + + // Deploy OrionConfig + const OrionConfigFactory = await ethers.getContractFactory("OrionConfig"); + const configDeployed = await OrionConfigFactory.deploy(owner.address, owner.address, await usdc.getAddress()); + await configDeployed.waitForDeployment(); + const config = configDeployed as unknown as OrionConfig; + + // Deploy LiquidityOrchestrator FIRST + const LiquidityOrchestratorFactory = await ethers.getContractFactory("LiquidityOrchestrator"); + const liquidityOrchestratorDeployed = await LiquidityOrchestratorFactory.deploy( + owner.address, + await config.getAddress(), + automationRegistry.address, + ); + await liquidityOrchestratorDeployed.waitForDeployment(); + const liquidityOrchestrator = liquidityOrchestratorDeployed as unknown as LiquidityOrchestrator; + + // Register LiquidityOrchestrator in config + await config.setLiquidityOrchestrator(await liquidityOrchestrator.getAddress()); + + // Deploy InternalStatesOrchestrator + const InternalStatesOrchestratorFactory = await ethers.getContractFactory("InternalStatesOrchestrator"); + const internalStatesOrchestratorDeployed = await InternalStatesOrchestratorFactory.deploy( + owner.address, + await config.getAddress(), + automationRegistry.address, + ); + await internalStatesOrchestratorDeployed.waitForDeployment(); + const internalStatesOrchestrator = internalStatesOrchestratorDeployed as unknown as InternalStatesOrchestrator; + + // Register InternalStatesOrchestrator in config + await config.setInternalStatesOrchestrator(await internalStatesOrchestrator.getAddress()); + + // Link orchestrators + await liquidityOrchestrator.setInternalStatesOrchestrator(await internalStatesOrchestrator.getAddress()); + + // Deploy vault factory + const TransparentVaultFactoryContract = await ethers.getContractFactory("TransparentVaultFactory"); + const vaultFactoryDeployed = await TransparentVaultFactoryContract.deploy(await config.getAddress()); + await vaultFactoryDeployed.waitForDeployment(); + const vaultFactory = vaultFactoryDeployed as unknown as TransparentVaultFactory; + await config.setVaultFactory(await vaultFactory.getAddress()); + + // Deploy price adapter registry + const PriceAdapterRegistryFactory = await ethers.getContractFactory("PriceAdapterRegistry"); + const priceAdapterRegistry = await PriceAdapterRegistryFactory.deploy(owner.address, await config.getAddress()); + await config.setPriceAdapterRegistry(await priceAdapterRegistry.getAddress()); + + // Whitelist curator + await config.addWhitelistedCurator(curator.address); + + // Create a vault + const vaultTx = await vaultFactory.connect(owner).createVault( + curator.address, + "Test Vault", + "TVAULT", + 0, // Absolute fee type + 100, // 1% performance fee + 10, // 0.1% management fee + ); + const receipt = await vaultTx.wait(); + const vaultCreatedEvent = receipt?.logs.find((log) => { + try { + return vaultFactory.interface.parseLog(log)?.name === "OrionVaultCreated"; + } catch { + return false; + } + }); + const parsedLog = vaultCreatedEvent ? vaultFactory.interface.parseLog(vaultCreatedEvent) : null; + const vaultAddress = parsedLog?.args[0]; + const vaultContract = await ethers.getContractAt("OrionTransparentVault", vaultAddress); + const vault = vaultContract as unknown as OrionTransparentVault; + + // Fund users with USDC and approve vault + for (const user of users) { + await usdc.mint(user.address, INITIAL_BALANCE); + await usdc.connect(user).approve(await vault.getAddress(), ethers.MaxUint256); + } + + return { + owner, + curator, + automationRegistry, + users, + usdc, + config, + vault, + internalStatesOrchestrator, + liquidityOrchestrator, + }; + } + + describe("1. pendingDeposit() with limited users (< maxFulfillBatchSize)", function () { + it("should return full amount when deposits < maxFulfillBatchSize", async function () { + const { vault, users, config } = await loadFixture(deployFixture); + + // Make deposit requests with available users + const numUsers = Math.min(users.length, 10); + for (let i = 0; i < numUsers; i++) { + await vault.connect(users[i]).requestDeposit(DEPOSIT_AMOUNT); + } + + const pendingDeposit = await vault.pendingDeposit(await config.maxFulfillBatchSize()); + const expectedAmount = DEPOSIT_AMOUNT * BigInt(numUsers); + + void expect(pendingDeposit).to.equal(expectedAmount); + }); + + it("should return 0 when no deposits", async function () { + const { vault, config } = await loadFixture(deployFixture); + + const pendingDeposit = await vault.pendingDeposit(await config.maxFulfillBatchSize()); + void expect(pendingDeposit).to.equal(0); + }); + + it("should handle varying deposit amounts correctly", async function () { + const { vault, users, config } = await loadFixture(deployFixture); + + let expectedSum = BigInt(0); + const numUsers = Math.min(users.length, 10); + + for (let i = 0; i < numUsers; i++) { + const amount = DEPOSIT_AMOUNT * BigInt(i + 1); + await vault.connect(users[i]).requestDeposit(amount); + expectedSum += amount; + } + + const pendingDeposit = await vault.pendingDeposit(await config.maxFulfillBatchSize()); + void expect(pendingDeposit).to.equal(expectedSum); + }); + }); + + describe("2. pendingRedeem() with limited users (< maxFulfillBatchSize)", function () { + it("should return full shares when redeems < maxFulfillBatchSize", async function () { + const { vault, users, usdc, liquidityOrchestrator, owner, config } = await loadFixture(deployFixture); + + const numUsers = Math.min(users.length, 10); + + // First, users deposit to get shares + for (let i = 0; i < numUsers; i++) { + await vault.connect(users[i]).requestDeposit(DEPOSIT_AMOUNT); + } + + // Fund and fulfill deposits + const totalDeposit = DEPOSIT_AMOUNT * BigInt(numUsers); + await usdc.mint(owner.address, totalDeposit); + await usdc.connect(owner).approve(await liquidityOrchestrator.getAddress(), totalDeposit); + await liquidityOrchestrator.connect(owner).depositLiquidity(totalDeposit); + + // Get liquidityOrchestrator signer to call vault + const loAddress = await liquidityOrchestrator.getAddress(); + // Set ETH balance for LO for gas + await ethers.provider.send("hardhat_setBalance", [loAddress, ethers.toQuantity(ethers.parseEther("1.0"))]); + const loSigner = await ethers.getImpersonatedSigner(loAddress); + await vault.connect(loSigner).fulfillDeposit(totalDeposit); + + // Now request redeems + for (let i = 0; i < numUsers; i++) { + const userShares = await vault.balanceOf(users[i].address); + // Approve vault to transfer shares for redeem + await vault.connect(users[i]).approve(await vault.getAddress(), userShares); + await vault.connect(users[i]).requestRedeem(userShares); + } + + const pendingRedeem = await vault.pendingRedeem(await config.maxFulfillBatchSize()); + const totalShares = await vault.totalSupply(); + + void expect(pendingRedeem).to.be.greaterThan(0); + void expect(pendingRedeem).to.equal(totalShares); + }); + + it("should return 0 when no redeems", async function () { + const { vault, config } = await loadFixture(deployFixture); + + const pendingRedeem = await vault.pendingRedeem(await config.maxFulfillBatchSize()); + void expect(pendingRedeem).to.equal(0); + }); + }); + + describe("3. Simulated batch limit behavior", function () { + it("should demonstrate batch limit logic by making same user deposit multiple times", async function () { + const { vault, users, config } = await loadFixture(deployFixture); + + // Strategy: have one user make multiple small deposits to simulate >maxFulfillBatchSize requests + // Note: In production, requestDeposit overwrites previous request from same user, + // but we can test the logic by checking what would happen with different amounts + + // First request + await vault.connect(users[0]).requestDeposit(DEPOSIT_AMOUNT); + let pending = await vault.pendingDeposit(await config.maxFulfillBatchSize()); + void expect(pending).to.equal(DEPOSIT_AMOUNT); + + // Second request - note: requestDeposit increments, not overwrites! + const largerAmount = DEPOSIT_AMOUNT * BigInt(2); + await vault.connect(users[0]).requestDeposit(largerAmount); + pending = await vault.pendingDeposit(await config.maxFulfillBatchSize()); + // Total should be first deposit + second deposit + void expect(pending).to.equal(DEPOSIT_AMOUNT + largerAmount); + }); + }); + + describe("4. Integration with fulfillDeposit", function () { + it("fulfillDeposit should process the amount that pendingDeposit reports", async function () { + const { vault, users, usdc, liquidityOrchestrator, owner, config } = await loadFixture(deployFixture); + + const numUsers = Math.min(users.length, 10); + + // Submit deposits + for (let i = 0; i < numUsers; i++) { + await vault.connect(users[i]).requestDeposit(DEPOSIT_AMOUNT); + } + + // Get pendingDeposit + const pendingDepositBefore = await vault.pendingDeposit(await config.maxFulfillBatchSize()); + const expectedAmount = DEPOSIT_AMOUNT * BigInt(numUsers); + void expect(pendingDepositBefore).to.equal(expectedAmount); + + // Fulfill deposits + await usdc.mint(owner.address, pendingDepositBefore); + await usdc.connect(owner).approve(await liquidityOrchestrator.getAddress(), pendingDepositBefore); + await liquidityOrchestrator.connect(owner).depositLiquidity(pendingDepositBefore); + + const loAddress = await liquidityOrchestrator.getAddress(); + // Set ETH balance for LO for gas + await ethers.provider.send("hardhat_setBalance", [loAddress, ethers.toQuantity(ethers.parseEther("1.0"))]); + const loSigner = await ethers.getImpersonatedSigner(loAddress); + await vault.connect(loSigner).fulfillDeposit(pendingDepositBefore); + + // After fulfillment, pendingDeposit should be 0 + const pendingDepositAfter = await vault.pendingDeposit(await config.maxFulfillBatchSize()); + void expect(pendingDepositAfter).to.equal(0); + + // Verify shares were minted + for (let i = 0; i < numUsers; i++) { + const shares = await vault.balanceOf(users[i].address); + void expect(shares).to.be.greaterThan(0); + } + }); + }); + + describe("5. Documentation of the fix", function () { + it("demonstrates the critical accounting fix prevents mismatch", async function () { + const { vault, users, config, owner } = await loadFixture(deployFixture); + + await config.connect(owner).setMaxFulfillBatchSize(8n); + + // Simulate having multiple deposits (limited by available signers) + const numUsers = Math.min(users.length, 10); + + // More deposits than processed deposits. + void expect(await config.maxFulfillBatchSize()).to.be.lessThan(numUsers); + + for (let i = 0; i < numUsers; i++) { + await vault.connect(users[i]).requestDeposit(DEPOSIT_AMOUNT); + } + + // With the fix, pendingDeposit returns processable amount + const pendingDeposit = await vault.pendingDeposit(await config.maxFulfillBatchSize()); + + void expect(pendingDeposit).to.be.lessThan(DEPOSIT_AMOUNT * BigInt(numUsers)); + }); + }); +}); diff --git a/test/MinimumAmountDOS.test.ts b/test/MinimumAmountDOS.test.ts index c6584668..330e26c2 100644 --- a/test/MinimumAmountDOS.test.ts +++ b/test/MinimumAmountDOS.test.ts @@ -319,7 +319,7 @@ describe("Minimum Amount DOS Prevention", function () { await config.connect(owner).setMinDepositAmount(minDeposit); // Calculate cost to fill 150-request queue - const MAX_FULFILL_BATCH_SIZE = 150n; + const MAX_FULFILL_BATCH_SIZE = await config.maxFulfillBatchSize(); const totalCapitalRequired = minDeposit * MAX_FULFILL_BATCH_SIZE; // Should require $15,000 USD (150 * $100) of locked capital diff --git a/test/OrionConfigVault.test.ts b/test/OrionConfigVault.test.ts index d4ba7abd..4da81029 100644 --- a/test/OrionConfigVault.test.ts +++ b/test/OrionConfigVault.test.ts @@ -387,14 +387,14 @@ describe("OrionVault - Base Functionality", function () { await vault.connect(user).requestDeposit(depositAmount); // Verify deposit request was created - const pendingDeposits = await vault.pendingDeposit(); + const pendingDeposits = await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize()); expect(pendingDeposits).to.equal(depositAmount); // Cancel the deposit request await expect(vault.connect(user).cancelDepositRequest(depositAmount)).to.not.be.reverted; // Verify deposit request was cancelled - const pendingDepositsAfter = await vault.pendingDeposit(); + const pendingDepositsAfter = await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize()); expect(pendingDepositsAfter).to.equal(0); }); @@ -431,7 +431,7 @@ describe("OrionVault - Base Functionality", function () { await expect(vault.connect(user).cancelDepositRequest(cancelAmount)).to.not.be.reverted; // Verify remaining amount - const pendingDeposits = await vault.pendingDeposit(); + const pendingDeposits = await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize()); expect(pendingDeposits).to.equal(remainingAmount); }); }); @@ -506,12 +506,12 @@ describe("OrionVault - Base Functionality", function () { describe("Pending Amounts", function () { it("Should return zero pending deposits initially", async function () { - const pendingDeposits = await vault.pendingDeposit(); + const pendingDeposits = await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize()); expect(pendingDeposits).to.equal(0); }); it("Should return zero pending redemptions initially", async function () { - const pendingRedeems = await vault.pendingRedeem(); + const pendingRedeems = await vault.pendingRedeem(await orionConfig.maxFulfillBatchSize()); expect(pendingRedeems).to.equal(0); }); @@ -522,7 +522,7 @@ describe("OrionVault - Base Functionality", function () { await vault.connect(user).requestDeposit(depositAmount); // Check pending deposits - const pendingDeposits = await vault.pendingDeposit(); + const pendingDeposits = await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize()); expect(pendingDeposits).to.equal(depositAmount); }); }); diff --git a/test/ProtocolPause.test.ts b/test/ProtocolPause.test.ts index de10867a..c8786ea8 100644 --- a/test/ProtocolPause.test.ts +++ b/test/ProtocolPause.test.ts @@ -329,7 +329,7 @@ describe("Protocol Pause Functionality", function () { await expect(transparentVault.connect(user1).requestDeposit(DEPOSIT_AMOUNT)).to.not.be.reverted; // Verify deposit was successful - expect(await transparentVault.pendingDeposit()).to.equal(DEPOSIT_AMOUNT); + expect(await transparentVault.pendingDeposit(await config.maxFulfillBatchSize())).to.equal(DEPOSIT_AMOUNT); }); }); @@ -391,7 +391,7 @@ describe("Protocol Pause Functionality", function () { // User can now cancel their request await expect(transparentVault.connect(user1).cancelDepositRequest(DEPOSIT_AMOUNT)).to.not.be.reverted; - expect(await transparentVault.pendingDeposit()).to.equal(0); + expect(await transparentVault.pendingDeposit(await config.maxFulfillBatchSize())).to.equal(0); }); it("should handle multiple pause/unpause cycles", async function () { @@ -422,23 +422,23 @@ describe("Protocol Pause Functionality", function () { it("should preserve state across pause/unpause", async function () { // Setup initial state await transparentVault.connect(user1).requestDeposit(DEPOSIT_AMOUNT); - const depositBefore = await transparentVault.pendingDeposit(); + const depositBefore = await transparentVault.pendingDeposit(await config.maxFulfillBatchSize()); // Pause await config.connect(guardian).pauseAll(); // State should be unchanged - expect(await transparentVault.pendingDeposit()).to.equal(depositBefore); + expect(await transparentVault.pendingDeposit(await config.maxFulfillBatchSize())).to.equal(depositBefore); // Unpause await config.connect(admin).unpauseAll(); // State should still be unchanged - expect(await transparentVault.pendingDeposit()).to.equal(depositBefore); + expect(await transparentVault.pendingDeposit(await config.maxFulfillBatchSize())).to.equal(depositBefore); // Can still interact with preserved state await transparentVault.connect(user1).cancelDepositRequest(DEPOSIT_AMOUNT); - expect(await transparentVault.pendingDeposit()).to.equal(0); + expect(await transparentVault.pendingDeposit(await config.maxFulfillBatchSize())).to.equal(0); }); it("should block epoch progression when paused", async function () { diff --git a/test/RedeemBeforeDepositOrder.test.ts b/test/RedeemBeforeDepositOrder.test.ts index cdfeb725..8fd0ec2f 100644 --- a/test/RedeemBeforeDepositOrder.test.ts +++ b/test/RedeemBeforeDepositOrder.test.ts @@ -88,8 +88,8 @@ describe("Redeem Before Deposit Order Verification", function () { return { totalAssets: await vault.totalAssets(), totalSupply: await vault.totalSupply(), - pendingDeposit: await vault.pendingDeposit(), - pendingRedeem: await vault.pendingRedeem(), + pendingDeposit: await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize()), + pendingRedeem: await vault.pendingRedeem(await orionConfig.maxFulfillBatchSize()), }; } @@ -234,8 +234,8 @@ describe("Redeem Before Deposit Order Verification", function () { await vault.connect(newDepositor).requestDeposit(NEW_DEPOSIT_AMOUNT); // Verify pending state - expect(await vault.pendingRedeem()).to.equal(REDEEM_AMOUNT_SHARES); - expect(await vault.pendingDeposit()).to.equal(NEW_DEPOSIT_AMOUNT); + expect(await vault.pendingRedeem(await orionConfig.maxFulfillBatchSize())).to.equal(REDEEM_AMOUNT_SHARES); + expect(await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize())).to.equal(NEW_DEPOSIT_AMOUNT); // Phase C: Process through orchestrator phases await time.increase(epochDuration + 1n); @@ -365,8 +365,8 @@ describe("Redeem Before Deposit Order Verification", function () { await underlyingAsset.connect(newDepositor).approve(await vault.getAddress(), NEW_DEPOSIT_AMOUNT); await vault.connect(newDepositor).requestDeposit(NEW_DEPOSIT_AMOUNT); - expect(await vault.pendingDeposit()).to.equal(NEW_DEPOSIT_AMOUNT); - expect(await vault.pendingRedeem()).to.equal(0); + expect(await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize())).to.equal(NEW_DEPOSIT_AMOUNT); + expect(await vault.pendingRedeem(await orionConfig.maxFulfillBatchSize())).to.equal(0); // Process epoch await time.increase(epochDuration + 1n); @@ -385,7 +385,7 @@ describe("Redeem Before Deposit Order Verification", function () { // Verify deposit processed normally const depositorShares = await vault.balanceOf(newDepositor.address); expect(depositorShares).to.be.gt(0); - expect(await vault.pendingDeposit()).to.equal(0); + expect(await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize())).to.equal(0); console.log(`Deposit-only scenario: depositor received ${ethers.formatUnits(depositorShares, 18)} shares`); }); @@ -398,8 +398,8 @@ describe("Redeem Before Deposit Order Verification", function () { await vault.connect(redeemer).approve(await vault.getAddress(), REDEEM_AMOUNT_SHARES); await vault.connect(redeemer).requestRedeem(REDEEM_AMOUNT_SHARES); - expect(await vault.pendingRedeem()).to.equal(REDEEM_AMOUNT_SHARES); - expect(await vault.pendingDeposit()).to.equal(0); + expect(await vault.pendingRedeem(await orionConfig.maxFulfillBatchSize())).to.equal(REDEEM_AMOUNT_SHARES); + expect(await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize())).to.equal(0); // Capture redeemer balance before const balanceBefore = await underlyingAsset.balanceOf(redeemer.address); @@ -414,7 +414,7 @@ describe("Redeem Before Deposit Order Verification", function () { // Calculate exact expected redemption: 90 shares * 99 totalAssets / 100 totalSupply = 89.1 USDC const expectedRedeemed = ethers.parseUnits("89.1", UNDERLYING_DECIMALS); expect(assetsReceived).to.equal(expectedRedeemed); - expect(await vault.pendingRedeem()).to.equal(0); + expect(await vault.pendingRedeem(await orionConfig.maxFulfillBatchSize())).to.equal(0); console.log( `Redeem-only scenario: redeemer received ${ethers.formatUnits(assetsReceived, UNDERLYING_DECIMALS)} USDC`, diff --git a/test/orchestrator/OrchestratorPerformUpkeep.test.ts b/test/orchestrator/OrchestratorPerformUpkeep.test.ts index 5f0446dd..73ae8f82 100644 --- a/test/orchestrator/OrchestratorPerformUpkeep.test.ts +++ b/test/orchestrator/OrchestratorPerformUpkeep.test.ts @@ -1324,7 +1324,7 @@ describe("Orchestrator PerformUpkeep", function () { expect(userBalanceOfHurdleHwmVaultAfterCancelRedeem).to.equal(userBalanceOfHurdleHwmVault / 2n); // Assert that the user's pending redeem amount is updated correctly after cancellation for hurdleHwmVault - const pendingRedeemAfterCancel = await hurdleHwmVault.pendingRedeem(); + const pendingRedeemAfterCancel = await hurdleHwmVault.pendingRedeem(await orionConfig.maxFulfillBatchSize()); expect(pendingRedeemAfterCancel).to.equal(userBalanceOfHurdleHwmVault / 2n); console.log("--------------------------------------------------------------------------------------------------"); @@ -1527,7 +1527,7 @@ describe("Orchestrator PerformUpkeep", function () { // Expected fulfill deposit: totalAssets after volume fee, curator fees, and pending redeem // Note: pendingRedeem needs to be converted from shares to assets using convertToAssetsWithPITTotalAssets - const pendingRedeemShares = await vault.pendingRedeem(); + const pendingRedeemShares = await vault.pendingRedeem(await orionConfig.maxFulfillBatchSize()); const pendingRedeemAssets = await vault.convertToAssetsWithPITTotalAssets( pendingRedeemShares, expectedFulfillRedeem, @@ -1580,7 +1580,7 @@ describe("Orchestrator PerformUpkeep", function () { // Get the values that were stored in the orchestrator const vaultsTotalAssetsForFulfillDeposit = await internalStatesOrchestrator.getVaultTotalAssetsForFulfillDeposit(vaultAddress); - const pendingDeposit = await vault.pendingDeposit(); + const pendingDeposit = await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize()); // Reconstruct vaultsTotalAssets: fulfillDeposit + pendingDeposit const vaultsTotalAssets = vaultsTotalAssetsForFulfillDeposit + pendingDeposit; @@ -1790,8 +1790,8 @@ describe("Orchestrator PerformUpkeep", function () { for (const { name, vault } of allVaults) { const userBalance = await vault.balanceOf(user.address); const totalSupply = await vault.totalSupply(); - const pendingDeposit = await vault.pendingDeposit(); - const pendingRedeem = await vault.pendingRedeem(); + const pendingDeposit = await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize()); + const pendingRedeem = await vault.pendingRedeem(await orionConfig.maxFulfillBatchSize()); // Verify that pending deposits and redemptions are cleared after fulfill expect(pendingDeposit).to.equal(0, `${name} vault should have no pending deposits after fulfill`); diff --git a/test/orchestrator/Orchestrators.test.ts b/test/orchestrator/Orchestrators.test.ts index f335a9a7..78f308a3 100644 --- a/test/orchestrator/Orchestrators.test.ts +++ b/test/orchestrator/Orchestrators.test.ts @@ -1260,7 +1260,7 @@ describe("Orchestrators", function () { expect(userBalanceOfHurdleHwmVaultAfterCancelRedeem).to.equal(userBalanceOfHurdleHwmVault / 2n); // Assert that the user's pending redeem amount is updated correctly after cancellation for hurdleHwmVault - const pendingRedeemAfterCancel = await hurdleHwmVault.pendingRedeem(); + const pendingRedeemAfterCancel = await hurdleHwmVault.pendingRedeem(await orionConfig.maxFulfillBatchSize()); expect(pendingRedeemAfterCancel).to.equal(userBalanceOfHurdleHwmVault / 2n); console.log("--------------------------------------------------------------------------------------------------"); @@ -1463,7 +1463,7 @@ describe("Orchestrators", function () { // Expected fulfill deposit: totalAssets after volume fee, curator fees, and pending redeem // Note: pendingRedeem needs to be converted from shares to assets using convertToAssetsWithPITTotalAssets - const pendingRedeemShares = await vault.pendingRedeem(); + const pendingRedeemShares = await vault.pendingRedeem(await orionConfig.maxFulfillBatchSize()); const pendingRedeemAssets = await vault.convertToAssetsWithPITTotalAssets( pendingRedeemShares, expectedFulfillRedeem, @@ -1516,7 +1516,7 @@ describe("Orchestrators", function () { // Get the values that were stored in the orchestrator const vaultsTotalAssetsForFulfillDeposit = await internalStatesOrchestrator.getVaultTotalAssetsForFulfillDeposit(vaultAddress); - const pendingDeposit = await vault.pendingDeposit(); + const pendingDeposit = await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize()); // Reconstruct vaultsTotalAssets: fulfillDeposit + pendingDeposit const vaultsTotalAssets = vaultsTotalAssetsForFulfillDeposit + pendingDeposit; @@ -1707,8 +1707,8 @@ describe("Orchestrators", function () { for (const { name, vault } of allVaults) { const userBalance = await vault.balanceOf(user.address); const totalSupply = await vault.totalSupply(); - const pendingDeposit = await vault.pendingDeposit(); - const pendingRedeem = await vault.pendingRedeem(); + const pendingDeposit = await vault.pendingDeposit(await orionConfig.maxFulfillBatchSize()); + const pendingRedeem = await vault.pendingRedeem(await orionConfig.maxFulfillBatchSize()); // Verify that pending deposits and redemptions are cleared after fulfill expect(pendingDeposit).to.equal(0, `${name} vault should have no pending deposits after fulfill`); @@ -2643,7 +2643,7 @@ describe("Orchestrators", function () { await orionConfig.connect(owner).setMinDepositAmount(MIN_DEPOSIT); // Calculate attack cost using contract constant to prevent test drift - const MAX_FULFILL_BATCH_SIZE = await absoluteVault.MAX_FULFILL_BATCH_SIZE(); + const MAX_FULFILL_BATCH_SIZE = await orionConfig.maxFulfillBatchSize(); const totalCapitalRequired = MIN_DEPOSIT * MAX_FULFILL_BATCH_SIZE; // Convert to human-readable (12 decimals) @@ -2673,7 +2673,7 @@ describe("Orchestrators", function () { await expect(absoluteVault.connect(user).requestDeposit(legitimateAmount)).to.not.be.reverted; // Verify deposit is in pending queue - const pendingDeposit = await absoluteVault.pendingDeposit(); + const pendingDeposit = await absoluteVault.pendingDeposit(await orionConfig.maxFulfillBatchSize()); expect(pendingDeposit).to.be.gt(0); }); diff --git a/test/orchestrator/OrchestratorsZeroState.test.ts b/test/orchestrator/OrchestratorsZeroState.test.ts index 48df82bb..10191f3c 100644 --- a/test/orchestrator/OrchestratorsZeroState.test.ts +++ b/test/orchestrator/OrchestratorsZeroState.test.ts @@ -100,8 +100,8 @@ describe("Orchestrators - zero deposits and zero intents", function () { await underlyingAsset.mint(user.address, ethers.parseUnits("10000", 12)); // Ensure no deposits or intents present - expect(await transparentVault.pendingDeposit()).to.equal(0); - expect(await transparentVault.pendingRedeem()).to.equal(0); + expect(await transparentVault.pendingDeposit(await orionConfig.maxFulfillBatchSize())).to.equal(0); + expect(await transparentVault.pendingRedeem(await orionConfig.maxFulfillBatchSize())).to.equal(0); }); it("completes upkeep with zero TVL and zero intents without errors", async function () { @@ -127,7 +127,7 @@ describe("Orchestrators - zero deposits and zero intents", function () { // Verify the vault has no total assets and no pending deposits expect(await transparentVault.totalAssets()).to.equal(0); - expect(await transparentVault.pendingDeposit()).to.equal(0); + expect(await transparentVault.pendingDeposit(await orionConfig.maxFulfillBatchSize())).to.equal(0); // Verify the vault has a valid intent const [intentTokens, _intentWeights] = await transparentVault.getIntent();