UNPKG

@gnosis.pm/conditional-tokens-market-makers

Version:
1 lines 107 kB
{"contractName":"FPMMDeterministicFactory","abi":[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementationMaster","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"creator","type":"address"},{"indexed":false,"name":"fixedProductMarketMaker","type":"address"},{"indexed":false,"name":"conditionalTokens","type":"address"},{"indexed":false,"name":"collateralToken","type":"address"},{"indexed":false,"name":"conditionIds","type":"bytes32[]"},{"indexed":false,"name":"fee","type":"uint256"}],"name":"FixedProductMarketMakerCreation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"funder","type":"address"},{"indexed":false,"name":"amountsAdded","type":"uint256[]"},{"indexed":false,"name":"sharesMinted","type":"uint256"}],"name":"FPMMFundingAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"funder","type":"address"},{"indexed":false,"name":"amountsRemoved","type":"uint256[]"},{"indexed":false,"name":"collateralRemovedFromFeePool","type":"uint256"},{"indexed":false,"name":"sharesBurnt","type":"uint256"}],"name":"FPMMFundingRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"investmentAmount","type":"uint256"},{"indexed":false,"name":"feeAmount","type":"uint256"},{"indexed":true,"name":"outcomeIndex","type":"uint256"},{"indexed":false,"name":"outcomeTokensBought","type":"uint256"}],"name":"FPMMBuy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"returnAmount","type":"uint256"},{"indexed":false,"name":"feeAmount","type":"uint256"},{"indexed":true,"name":"outcomeIndex","type":"uint256"},{"indexed":false,"name":"outcomeTokensSold","type":"uint256"}],"name":"FPMMSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"clone","type":"address"}],"name":"CloneCreated","type":"event"},{"constant":false,"inputs":[{"name":"consData","type":"bytes"}],"name":"cloneConstructor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"from","type":"address"},{"name":"id","type":"uint256"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"from","type":"address"},{"name":"ids","type":"uint256[]"},{"name":"values","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"saltNonce","type":"uint256"},{"name":"conditionalTokens","type":"address"},{"name":"collateralToken","type":"address"},{"name":"conditionIds","type":"bytes32[]"},{"name":"fee","type":"uint256"},{"name":"initialFunds","type":"uint256"},{"name":"distributionHint","type":"uint256[]"}],"name":"create2FixedProductMarketMaker","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"implementationMaster\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"consData\",\"type\":\"bytes\"}],\"name\":\"cloneConstructor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"saltNonce\",\"type\":\"uint256\"},{\"name\":\"conditionalTokens\",\"type\":\"address\"},{\"name\":\"collateralToken\",\"type\":\"address\"},{\"name\":\"conditionIds\",\"type\":\"bytes32[]\"},{\"name\":\"fee\",\"type\":\"uint256\"},{\"name\":\"initialFunds\",\"type\":\"uint256\"},{\"name\":\"distributionHint\",\"type\":\"uint256[]\"}],\"name\":\"create2FixedProductMarketMaker\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"ids\",\"type\":\"uint256[]\"},{\"name\":\"values\",\"type\":\"uint256[]\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"fixedProductMarketMaker\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"conditionalTokens\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"collateralToken\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"conditionIds\",\"type\":\"bytes32[]\"},{\"indexed\":false,\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"FixedProductMarketMakerCreation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"funder\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountsAdded\",\"type\":\"uint256[]\"},{\"indexed\":false,\"name\":\"sharesMinted\",\"type\":\"uint256\"}],\"name\":\"FPMMFundingAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"funder\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountsRemoved\",\"type\":\"uint256[]\"},{\"indexed\":false,\"name\":\"collateralRemovedFromFeePool\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"sharesBurnt\",\"type\":\"uint256\"}],\"name\":\"FPMMFundingRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"investmentAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"outcomeIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"outcomeTokensBought\",\"type\":\"uint256\"}],\"name\":\"FPMMBuy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"returnAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"feeAmount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"outcomeIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"outcomeTokensSold\",\"type\":\"uint256\"}],\"name\":\"FPMMSell\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"clone\",\"type\":\"address\"}],\"name\":\"CloneCreated\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See `IERC165.supportsInterface`. * Time complexity O(1), guaranteed to always use less than 30 000 gas.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/alan/src/github.com/gnosis/conditional-tokens-market-makers/contracts/FPMMDeterministicFactory.sol\":\"FPMMDeterministicFactory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/alan/src/github.com/gnosis/conditional-tokens-market-makers/contracts/Create2CloneFactory.sol\":{\"keccak256\":\"0x7fc87f62575ade148e41001fd3029f2fb85b9928a3941eb06a9e3bcb6ccfe43f\",\"urls\":[\"bzzr://01815e1a0e940e9a18b998e304fc29edd20292d7a8a1c96c711f3761d9d4a0ad\",\"dweb:/ipfs/QmeLjvm5GuuZFoYsuGaHX7vqNCZDQpqiDDTrWBzBDoV6dB\"]},\"/home/alan/src/github.com/gnosis/conditional-tokens-market-makers/contracts/ERC20.sol\":{\"keccak256\":\"0x40a58d43f7c61c93c3e31fa2e398cbbd2768635703066fc37fc98ec19c1da70f\",\"urls\":[\"bzzr://535a311aa4c5d1d4c082822608b7d41eecdc45e4be9df6dc190f158546c809d9\",\"dweb:/ipfs/QmUacDZ7YZ7spzy2XsQuaZeMnKNTQuJUs7cXgQAjbGNScW\"]},\"/home/alan/src/github.com/gnosis/conditional-tokens-market-makers/contracts/FPMMDeterministicFactory.sol\":{\"keccak256\":\"0xb967aaa5b5fb52dfa69dce6426398e8b6b6c6290a53f7995dd9a5ccfae66d6a0\",\"urls\":[\"bzzr://7e058405ba90b45af7785ad9cff48fdd73cf33d8ca50b92b1639e0bb9ee21ca4\",\"dweb:/ipfs/Qmcsw1XfFKeVTJg8bG6oEh4v9adgMSjYsbcvAm6WXQpttr\"]},\"/home/alan/src/github.com/gnosis/conditional-tokens-market-makers/contracts/FixedProductMarketMaker.sol\":{\"keccak256\":\"0x68003703f48a2b244f5f0fe19473bb1602791d1277882ab3a159af3b1a31daec\",\"urls\":[\"bzzr://4d0cb66cc5c935d8631414bd811452c0eb2901bf6ef794350ebc393085b075fe\",\"dweb:/ipfs/QmdZskHkHDANmxM4XVcXLLeUjRJTuUKpWYYRFbR1FseVwv\"]},\"@gnosis.pm/conditional-tokens-contracts/contracts/CTHelpers.sol\":{\"keccak256\":\"0x921eadb1d6cd0e742448334fb84c39b358a18cdeb7c6badbb89cae847d44a201\",\"urls\":[\"bzzr://54ea8cd3a2ef100710306ce15475573542ad5235ced471d59fa1744cfaea51c8\",\"dweb:/ipfs/Qme871evGa1PBSBnV9PisLhYnFnnahLmBuy5KakLSUKRPF\"]},\"@gnosis.pm/conditional-tokens-contracts/contracts/ConditionalTokens.sol\":{\"keccak256\":\"0x11a610a3fa07ac8a59a09a76fdb944f058fdb06d3414fe49995595e68cd17d41\",\"urls\":[\"bzzr://aec70f70bf6166a9ae46146c7d293156967b345273a250667732f6f8a4355342\",\"dweb:/ipfs/QmWUFR7eKVsMS61UCK1yY2bQQhcqEQHAAmJ2FJ3GozWV8k\"]},\"@gnosis.pm/conditional-tokens-contracts/contracts/ERC1155/ERC1155.sol\":{\"keccak256\":\"0xd8e6583f45a98380ff10a5656a7ae7ba6a275e0d051043e5842f0d541abd7caa\",\"urls\":[\"bzzr://978cc82d056d10d8cc14b02f35801b10c0c2f87b0adbf6c41bbd622e20ab8cee\",\"dweb:/ipfs/QmYWqCK6moph6oeBEUc1nDaGz4GRdGXmykwKD5rykVbhcU\"]},\"@gnosis.pm/conditional-tokens-contracts/contracts/ERC1155/ERC1155TokenReceiver.sol\":{\"keccak256\":\"0x5d1e709c759b9bd72865c8608582d66fc338fde3a77f41abb04ae943915a5695\",\"urls\":[\"bzzr://55e5a597486430ad437bb8c8f0c93cf573b833fa84ccf64a25afaa01c761b839\",\"dweb:/ipfs/QmQ727N1676jG9F5iwakSG2RNeV82TVBGJHgHPmHxib8ah\"]},\"@gnosis.pm/conditional-tokens-contracts/contracts/ERC1155/IERC1155.sol\":{\"keccak256\":\"0x4971631d7de74464fed3e0abac04553e917be5e8cd10b3f825e2e7c39ccc2734\",\"urls\":[\"bzzr://e1e88dfe7440ceab59d4cd604d12e5dc93409a3c5058e497763703027ea7b9e6\",\"dweb:/ipfs/QmRzsL1o6iVEFmqBYCo3XpM4kpvbK7iSJWssXHQ3gHb5uq\"]},\"@gnosis.pm/conditional-tokens-contracts/contracts/ERC1155/IERC1155TokenReceiver.sol\":{\"keccak256\":\"0xca815b5ca57df8f1056b962c2728d6a1e56fc7d9a7869ccee8f5a1ac6075b75d\",\"urls\":[\"bzzr://61df3e61bf24c80714e326ffdc274aaefc342241de3e72374131f613cddbd042\",\"dweb:/ipfs/QmPnF3rGuY2H3Gifvha4dW7fJPptP7wJerHzjz4dpzfTJW\"]},\"openzeppelin-solidity/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xac2eacd7e7762e275442f28f21d821544df5aae2ed7698af13be8c41b7005e2e\",\"urls\":[\"bzzr://43e901f6f210568ebc1d3591da3ce6a9d10796b854767a9c6e3da10305a8a332\",\"dweb:/ipfs/QmQhfx2Ufr8a2gFXm3KogL66xGgAuAWMwcamkWFKGG6Vya\"]},\"openzeppelin-solidity/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0x661553e43d7c4fbb2de504e5999fd5c104d367488350ed5bf023031bd1ba5ac5\",\"urls\":[\"bzzr://fc2ba15143ce3a00268ecd15fc98eb2469b18bfe27a64bbab0ac6446f161c739\",\"dweb:/ipfs/QmV7wjtRf11ibUHh4g8JjuhMpy68pPhV95L2y46UBoRfsZ\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\",\"dweb:/ipfs/QmV3yVktya1s617QmuzQR2CfuJgUi3dR2xEZY9ecmqZ2G1\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzzr://aa8b45b57edafc3d67bc5d916327ea16807fae33f753ca163ae0c4061b789766\",\"dweb:/ipfs/QmP5NaEwZthQeM2ESz4WTT3osrP7jhbvu7ocbttBi2JAw6\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0xf3358e5819ca73357abd6c90bdfffd0474af54364897f6b3e3234c4b71fbe9a1\",\"urls\":[\"bzzr://f7f6da60a184233fd666ac44e6fb2bd51ca6ebdc4867a310d368049aa4e62786\",\"dweb:/ipfs/Qmb3kNCoBUZdah1AgBBD4zMk898j5Qw8ahT1w5cCMYp5Y3\"]}},\"version\":1}","bytecode":"0x60806040523480156200001157600080fd5b50620000467f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03620000cc16565b6200007a7f4e2312e0000000000000000000000000000000000000000000000000000000006001600160e01b03620000cc16565b60405162000088906200019b565b604051809103906000f080158015620000a5573d6000803e3d6000fd5b50600f80546001600160a01b0319166001600160a01b0392909216919091179055620001a9565b7fffffffff0000000000000000000000000000000000000000000000000000000080821614156200015e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152600e60205260409020805460ff19166001179055565b612c8d8062001f1783390190565b611d5e80620001b96000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a71461006757806312b4d20c146100a257806352e831dd146100c657806382e90fa014610136578063bc197c8114610220578063f23a6e6114610364575b600080fd5b61008e6004803603602081101561007d57600080fd5b50356001600160e01b0319166103f7565b604080519115158252519081900360200190f35b6100aa610416565b604080516001600160a01b039092168252519081900360200190f35b610134600480360360208110156100dc57600080fd5b810190602081018135600160201b8111156100f657600080fd5b82018360208201111561010857600080fd5b803590602001918460018302840111600160201b8311171561012957600080fd5b509092509050610425565b005b6100aa600480360360e081101561014c57600080fd5b8135916001600160a01b03602082013581169260408301359091169190810190608081016060820135600160201b81111561018657600080fd5b82018360208201111561019857600080fd5b803590602001918460208302840111600160201b831117156101b957600080fd5b919390928235926020810135929190606081019060400135600160201b8111156101e257600080fd5b8201836020820111156101f457600080fd5b803590602001918460208302840111600160201b8311171561021557600080fd5b50909250905061079e565b610347600480360360a081101561023657600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561026957600080fd5b82018360208201111561027b57600080fd5b803590602001918460208302840111600160201b8311171561029c57600080fd5b919390929091602081019035600160201b8111156102b957600080fd5b8201836020820111156102cb57600080fd5b803590602001918460208302840111600160201b831117156102ec57600080fd5b919390929091602081019035600160201b81111561030957600080fd5b82018360208201111561031b57600080fd5b803590602001918460018302840111600160201b8311171561033c57600080fd5b509092509050610bd8565b604080516001600160e01b03199092168252519081900360200190f35b610347600480360360a081101561037a57600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b8111156103b957600080fd5b8201836020820111156103cb57600080fd5b803590602001918460018302840111600160201b831117156103ec57600080fd5b509092509050610cf7565b6001600160e01b0319166000908152600e602052604090205460ff1690565b600f546001600160a01b031681565b600080606060008585608081101561043c57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561046f57600080fd5b82018360208201111561048157600080fd5b803590602001918460208302840111600160201b831117156104a257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250600360209081527f28b0ef64f7e82d3b26f3fd404bd0151552f792965f39c29ae82c0a78df67af9c805460ff199081166001908117909255630271189760e51b9093527f1b0a8c8743953bd832c9e1d6a5e52d4143b336fe3e4824afb8e5e7621b19f90b805490931617909155600480546001600160a01b03808d166001600160a01b03199283161790925560058054928c16929091169190911790558451999d50979b50929950509135965061059395600695890194509250611be2915050565b50600781905560065460408051828152602080840282010190915260019180156105c7578160200160208202803883390190505b5080516105dc91600991602090910190611be2565b5060005b6006548110156106a557600454600680546000926001600160a01b03169163d42dc0c2918590811061060e57fe5b90600052602060002001546040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561064d57600080fd5b505afa158015610661573d6000803e3d6000fd5b505050506040513d602081101561067757600080fd5b5051600980549482029491925082918490811061069057fe5b600091825260209091200155506001016105e0565b50600181116106fb576040805162461bcd60e51b815260206004820152601860248201527f636f6e646974696f6e73206d7573742062652076616c69640000000000000000604482015290519081900360640190fd5b60065460408051828152602080840282010190915290801561073157816020015b606081526020019060019003908161071c5790505b50805161074691600a91602090910190611c2d565b50600654610755906000610dc3565b600b5481146107955760405162461bcd60e51b8152600401808060200182810382526022815260200180611d086022913960400191505060405180910390fd5b50505050505050565b60008061084b600f60009054906101000a90046001600160a01b03168c8c8c8c8c8c60405160200180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018381526020018281038252858582818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050604051602081830303815290604052610e94565b9050336001600160a01b03167f92e0912d3d7f3192cad5c7ae3b47fb97f9c465c1dd12a5c24fd901ddb3905f43828c8c8c8c8c60405180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018381526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003995090975050505050505050a28415610bca57601080546001600160a01b03191633908117909155604080516323b872dd60e01b8152600481019290925230602483015260448201879052516001600160a01b038b16916323b872dd9160648083019260209291908290030181600087803b15801561098157600080fd5b505af1158015610995573d6000803e3d6000fd5b505050506040513d60208110156109ab57600080fd5b50506040805163095ea7b360e01b81526001600160a01b038381166004830152602482018890529151918b169163095ea7b3916044808201926020929091908290030181600087803b158015610a0057600080fd5b505af1158015610a14573d6000803e3d6000fd5b505050506040513d6020811015610a2a57600080fd5b505060408051636af8ad2360e11b81526004810187815260248201928352604482018690526001600160a01b0384169263d5f15a4692899289928992606401846020850280828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b158015610aa957600080fd5b505af1158015610abd573d6000803e3d6000fd5b5050604080516370a0823160e01b815230600482015290516001600160a01b038516935063a9059cbb9250339184916370a0823191602480820192602092909190829003018186803b158015610b1257600080fd5b505afa158015610b26573d6000803e3d6000fd5b505050506040513d6020811015610b3c57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610b8d57600080fd5b505af1158015610ba1573d6000803e3d6000fd5b505050506040513d6020811015610bb757600080fd5b5050601080546001600160a01b03191690555b9a9950505050505050505050565b601054604051631759616b60e11b815230600482018181526001600160a01b039093166024830181905260a06044840190815260a484018a90526000943394632eb2c2d69493928d928d928d928d928d928d92906064810190608481019060c4018a60208b0280828437600083820152601f01601f19169091018581038452888152602090810191508990890280828437600083820152601f01601f191690910185810383528681526020019050868680828437600081840152601f19601f8201169050808301925050509b505050505050505050505050600060405180830381600087803b158015610cca57600080fd5b505af1158015610cde573d6000803e3d6000fd5b5063bc197c8160e01b9c9b505050505050505050505050565b601054604051637921219560e11b815230600482018181526001600160a01b0390931660248301819052604483018890526064830187905260a06084840190815260a48401869052600094339463f242432a9493928b928b928b928b929160c401848480828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b158015610d9857600080fd5b505af1158015610dac573d6000803e3d6000fd5b5063f23a6e6160e01b9a9950505050505050505050565b81610dfc57600554600b90610de1906001600160a01b0316836110ca565b81546001810183556000928352602090922090910155610e90565b818060019003925050600060098381548110610e1457fe5b90600052602060002001549050600a8381548110610e2e57fe5b600091825260208083209091018054600181018255908352908220018390555b81811015610e8d57610e8584610e808560068881548110610e6b57fe5b9060005260206000200154856001901b61110e565b610dc3565b600101610e4e565b50505b5050565b60006060826040516024018080602001828103825283818151815260200191508051906020019080838360005b83811015610ed9578181015183820152602001610ec1565b50505050905090810190601f168015610f065780820380516001836020036101000a031916815260200191505b5060408051601f1981840381018252928252602080820180516001600160e01b03166352e831dd60e01b17905281518351606382018082526082909201909516850190910190925295506060945090925090508015610f6c576020820181803883390190505b507f3d3d606380380380913d393d73bebebebebebebebebebebebebebebebebebebe6020820152600160601b308102602d8301527f5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73be6041830152870260608201526e5af43d82803e903d91602b57fd5bf360881b6074820152905060005b825181101561103857828181518110610fff57fe5b602001015160f81c60f81b82826063018151811061101957fe5b60200101906001600160f81b031916908160001a905350600101610fea565b50604080513360208083019190915281830188905282518083038401815260609092019092528051908201208251909183018282826000f5955050506001600160a01b0384166110c0576040805162461bcd60e51b815260206004820152600e60248201526d18dc99585d194c8819985a5b195960921b604482015290519081900360640190fd5b5050509392505050565b6040805160609390931b6bffffffffffffffffffffffff19166020808501919091526034808501939093528151808503909301835260549093019052805191012090565b6040805160208082018590528183018490528251808303840181526060909201909252805191012060009060ff81901c151582805b600080516020611ce8833981519152600185089350600080516020611ce88339815191526003600080516020611ce883398151915280878809870908905061118a8161143d565b915080600080516020611ce88339815191528384091415611143578280156111b3575060028206155b806111ca5750821580156111ca5750600282066001145b156111e35781600080516020611ce88339815191520391505b87801561141a5760fe81901c151593506001600160fe1b0316600080516020611ce88339815191526003600080516020611ce883398151915280848509840908915060006112308361143d565b9050848015611240575060028106155b806112575750841580156112575750600281066001145b1561126d57600080516020611ce8833981519152035b82600080516020611ce8833981519152828309146112d2576040805162461bcd60e51b815260206004820152601c60248201527f696e76616c696420706172656e7420636f6c6c656374696f6e20494400000000604482015290519081900360640190fd5b6000606060066001600160a01b031688878686604051602001808581526020018481526020018381526020018281526020019450505050506040516020818303038152906040526040518082805190602001908083835b602083106113485780518252601f199092019160209182019101611329565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146113a8576040519150601f19603f3d011682016040523d82523d6000602084013e6113ad565b606091505b5091509150816113f3576040805162461bcd60e51b815260206004820152600c60248201526b1958d859190819985a5b195960a21b604482015290519081900360640190fd5b80806020019051604081101561140857600080fd5b50805160209091015190985095505050505b600283066001141561143057600160fe1b851894505b5092979650505050505050565b6000600080516020611ce8833981519152808380099150808283098181820990508181840992508183850993508184840992508183840990508181820982818309905082818209905082818209905082818309915082828609945082858609915082828309915082828509935082848509915082828309915082828309915082828509915082828609945082858609915082828309915082828309915082828609915082828509935082848609945082858609915082828309915082828509935082848509915082828309905082818209905082818209905082818309915082828609945082858509935082848509915082828309915082828309915082828609945082858609915082828309915082828609915082828309915082828309915082828609915082828509935082848509915082828309905082818209905082818309905082818509905082818209905082818209905082818209905082818209905082818309915082828609945082858609915082828609915082828509935082848509915082828509915082828309915082828309905082818309905082818209838182099050838182099050838182099050838182099050838183099150508281830991508282860994508285850993508284850991508282860994508285850993508284860994508285850993508284860994508285860991508282860991508282830991508282850993508284850991508282830991508282860994508285850993508284850991508282850991508282860994508285850993508284860994508285850993508284850991508282830991508282850991508282860994508285860991508282860991508282850993508284860994508285850993508284860994508285850993508284850991508282850991508282830991508282860994508285850993508284850991508282850991508282830991508282860994508285860991508282830990508281820990508281830990508281860990508281820990508281820990508281820990508281820990508281830991508282850993508284860994508285850993508284860994508285860991508282860991508282830991508282830991508282830991508282860991508282850993508284850991508282850991508282830991508282860994508285860991508282860991508282850993508284860994508285860991508282830991508282850993508284860994508285860991508282850993508284860994508285850993508284850991508282850991508282860994508285850993508284850991508282850991508282830991508282830991508282860994508285860991508282830991508282830991508282860991508282850993508284860994508285860991508282860990508281820990508281820990508281830991508282850993508284850991508282860994508285850993508284860994508285850993508284860994508285850993508284850991508282850990508281850991508282830991508282830991508282820991505081818509935081848409925081838509935081848409925081838509935081848509905081818509905081818409925050808284099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808384099250808383099392505050565b828054828255906000526020600020908101928215611c1d579160200282015b82811115611c1d578251825591602001919060010190611c02565b50611c29929150611c86565b5090565b828054828255906000526020600020908101928215611c7a579160200282015b82811115611c7a5782518051611c6a918491602090910190611be2565b5091602001919060010190611c4d565b50611c29929150611ca3565b611ca091905b80821115611c295760008155600101611c8c565b90565b611ca091905b80821115611c29576000611cbd8282611cc6565b50600101611ca9565b5080546000825590600052602060002090810190611ce49190611c86565b5056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47706f736974696f6e2049447320636f6e737472756374696f6e206661696c6564213fa265627a7a723058205090b49e20448ee30dd44af1c703069f637e9a0d6051fe05732159c5bc2cc27264736f6c634300050a00326080604052620000387f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b036200007216565b6200006c7f4e2312e0000000000000000000000000000000000000000000000000000000006001600160e01b036200007216565b62000141565b7fffffffff0000000000000000000000000000000000000000000000000000000080821614156200010457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152600360205260409020805460ff19166001179055565b612b3c80620001516000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063a457c2d7116100c3578063d8c55af71161007c578063d8c55af71461056e578063dd62ed3e1461058b578063ddca3f43146105b9578063e03031a6146105c1578063f23a6e61146105de578063f55c79d01461067157610158565b8063a457c2d71461032c578063a9059cbb14610358578063b2016bd414610384578063bc197c811461038c578063d3c9727c146104d0578063d5f15a46146104f957610158565b80633950935111610115578063395093511461026257806340993b261461028e5780634343116a146102b75780635bd9e299146102da57806370a08231146102fe5780639003adfe1461032457610158565b806301ffc9a71461015d578063095ea7b314610198578063164e68de146101c457806316dbd776146101ec57806318160ddd1461022457806323b872dd1461022c575b600080fd5b6101846004803603602081101561017357600080fd5b50356001600160e01b031916610694565b604080519115158252519081900360200190f35b610184600480360360408110156101ae57600080fd5b506001600160a01b0381351690602001356106b3565b6101ea600480360360208110156101da57600080fd5b50356001600160a01b03166106ca565b005b6102126004803603602081101561020257600080fd5b50356001600160a01b0316610838565b60408051918252519081900360200190f35b61021261088c565b6101846004803603606081101561024257600080fd5b506001600160a01b03813581169160208101359091169060400135610892565b6101846004803603604081101561027857600080fd5b506001600160a01b0381351690602001356108e9565b6101ea600480360360608110156102a457600080fd5b5080359060208101359060400135610925565b610212600480360360408110156102cd57600080fd5b5080359060200135610c8b565b6102e2610e62565b604080516001600160a01b039092168252519081900360200190f35b6102126004803603602081101561031457600080fd5b50356001600160a01b0316610e71565b610212610e8c565b6101846004803603604081101561034257600080fd5b506001600160a01b038135169060200135610eaa565b6101846004803603604081101561036e57600080fd5b506001600160a01b038135169060200135610ee6565b6102e2610ef3565b6104b3600480360360a08110156103a257600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156103d557600080fd5b8201836020820111156103e757600080fd5b803590602001918460208302840111600160201b8311171561040857600080fd5b919390929091602081019035600160201b81111561042557600080fd5b82018360208201111561043757600080fd5b803590602001918460208302840111600160201b8311171561045857600080fd5b919390929091602081019035600160201b81111561047557600080fd5b82018360208201111561048757600080fd5b803590602001918460018302840111600160201b831117156104a857600080fd5b509092509050610f02565b604080516001600160e01b03199092168252519081900360200190f35b6101ea600480360360608110156104e657600080fd5b5080359060208101359060400135610f46565b6101ea6004803603604081101561050f57600080fd5b81359190810190604081016020820135600160201b81111561053057600080fd5b82018360208201111561054257600080fd5b803590602001918460208302840111600160201b8311171561056357600080fd5b5090925090506111e2565b6102126004803603602081101561058457600080fd5b5035611897565b610212600480360360408110156105a157600080fd5b506001600160a01b03813581169160200135166118b5565b6102126118e0565b6101ea600480360360208110156105d757600080fd5b50356118e6565b6104b3600480360360a08110156105f457600080fd5b6001600160a01b03823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b81111561063357600080fd5b82018360208201111561064557600080fd5b803590602001918460018302840111600160201b8311171561066657600080fd5b509092509050611c3e565b6102126004803603604081101561068757600080fd5b5080359060200135611c6d565b6001600160e01b03191660009081526003602052604090205460ff1690565b60006106c0338484611e0a565b5060015b92915050565b60006106d461088c565b6106ef6106e084610e71565b6008549063ffffffff611ef616565b816106f657fe5b6001600160a01b0384166000908152600c60205260408120549290910492509061072790839063ffffffff611f4f16565b90508015610833576001600160a01b0383166000908152600c60205260409020829055600d5461075d908263ffffffff611fac16565b600d556005546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b505050506040513d60208110156107e057600080fd5b5051610833576040805162461bcd60e51b815260206004820152601a60248201527f7769746864726177616c207472616e73666572206661696c6564000000000000604482015290519081900360640190fd5b505050565b60008061084361088c565b61084f6106e085610e71565b8161085657fe5b6001600160a01b0385166000908152600c6020526040902054919004915061088590829063ffffffff611f4f16565b9392505050565b60025490565b600061089f848484612006565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546108df9186916108da908663ffffffff611f4f16565b611e0a565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106c09185906108da908663ffffffff611fac16565b60006109318484611c6d565b905081811015610988576040805162461bcd60e51b815260206004820152601e60248201527f6d696e696d756d2062757920616d6f756e74206e6f7420726561636865640000604482015290519081900360640190fd5b600554604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156109e257600080fd5b505af11580156109f6573d6000803e3d6000fd5b505050506040513d6020811015610a0c57600080fd5b5051610a56576040805162461bcd60e51b815260206004820152601460248201527318dbdcdd081d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b6000670de0b6b3a7640000610a7660075487611ef690919063ffffffff16565b81610a7d57fe5b049050610a9581600854611fac90919063ffffffff16565b6008556000610aaa868363ffffffff611f4f16565b600554600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260248301859052519394509091169163095ea7b3916044808201926020929091908290030181600087803b158015610b0857600080fd5b505af1158015610b1c573d6000803e3d6000fd5b505050506040513d6020811015610b3257600080fd5b5051610b85576040805162461bcd60e51b815260206004820152601a60248201527f617070726f76616c20666f722073706c697473206661696c6564000000000000604482015290519081900360640190fd5b610b8e81612153565b600454600b80546001600160a01b039092169163f242432a9130913391908a908110610bb657fe5b6000918252602082200154604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015293909416602484015260448301526064820188905260a0608483015260a48201819052915160e4808301939282900301818387803b158015610c2757600080fd5b505af1158015610c3b573d6000803e3d6000fd5b5050604080518981526020810186905280820187905290518893503392507f4f62630f51608fc8a7603a9391a5101e58bd7c276139366fc107dc3b67c3dcf89181900360600190a3505050505050565b600b546000908210610cdc576040805162461bcd60e51b81526020600482015260156024820152740d2dcecc2d8d2c840deeae8c6dedaca40d2dcc8caf605b1b604482015290519081900360640190fd5b6060610ce66122e2565b90506000610d07600754670de0b6b3a7640000611f4f90919063ffffffff16565b610d1f86670de0b6b3a764000063ffffffff611ef616565b81610d2657fe5b0490506000828581518110610d3757fe5b602002602001015190506000610d5e670de0b6b3a764000083611ef690919063ffffffff16565b905060005b8451811015610dc957868114610dc1576000858281518110610d8157fe5b60200260200101519050610dbd610da18683611f4f90919063ffffffff16565b610db1858463ffffffff611ef616565b9063ffffffff6124b116565b9250505b600101610d63565b5060008111610e1f576040805162461bcd60e51b815260206004820152601b60248201527f6d7573742068617665206e6f6e2d7a65726f2062616c616e6365730000000000604482015290519081900360640190fd5b610e5782610e4b610e3e84670de0b6b3a764000063ffffffff6124b116565b869063ffffffff611fac16565b9063ffffffff611f4f16565b979650505050505050565b6004546001600160a01b031681565b6001600160a01b031660009081526020819052604090205490565b6000610ea5600d54600854611f4f90919063ffffffff16565b905090565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106c09185906108da908663ffffffff611f4f16565b60006106c0338484612006565b6005546001600160a01b031681565b60006001600160a01b03891630148015610f2357506001600160a01b038816155b15610f36575063bc197c8160e01b610f3a565b5060005b98975050505050505050565b6000610f528484610c8b565b905081811115610fa9576040805162461bcd60e51b815260206004820152601c60248201527f6d6178696d756d2073656c6c20616d6f756e7420657863656564656400000000604482015290519081900360640190fd5b600454600b80546001600160a01b039092169163f242432a91339130919088908110610fd157fe5b6000918252602082200154604080516001600160e01b031960e088901b1681526001600160a01b03958616600482015293909416602484015260448301526064820186905260a0608483015260a48201819052915160e4808301939282900301818387803b15801561104257600080fd5b505af1158015611056573d6000803e3d6000fd5b505050506000611079600754670de0b6b3a7640000611f4f90919063ffffffff16565b60075461108d90879063ffffffff611ef616565b8161109457fe5b0490506110ac81600854611fac90919063ffffffff16565b60085560006110c1868363ffffffff611fac16565b90506110cc816124e1565b6005546040805163a9059cbb60e01b81523360048201526024810189905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561112057600080fd5b505af1158015611134573d6000803e3d6000fd5b505050506040513d602081101561114a57600080fd5b5051611196576040805162461bcd60e51b81526020600482015260166024820152751c995d1d5c9b881d1c985b9cd9995c8819985a5b195960521b604482015290519081900360640190fd5b60408051878152602081018490528082018590529051869133917fadcf2a240ed9300d681d9a3f5382b6c1beed1b7e46643e0c7b42cbe6e2d766b49181900360600190a3505050505050565b60008311611237576040805162461bcd60e51b815260206004820152601860248201527f66756e64696e67206d757374206265206e6f6e2d7a65726f0000000000000000604482015290519081900360640190fd5b600b546040805182815260208084028201019091526060918015611265578160200160208202803883390190505b509050600061127261088c565b9050600081156113925783156112b95760405162461bcd60e51b8152600401808060200182810382526032815260200180612a4b6032913960400191505060405180910390fd5b60606112c36122e2565b90506000805b82518110156112ff5760008382815181106112e057fe5b60200260200101519050808310156112f6578092505b506001016112c9565b5060005b825181101561136f5760008261133585848151811061131e57fe5b60200260200101518c611ef690919063ffffffff16565b8161133c57fe5b04905061134f8a8263ffffffff611f4f16565b87838151811061135b57fe5b602090810291909101015250600101611303565b5080611381898663ffffffff611ef616565b8161138857fe5b04925050506114e1565b83156114de57600b5484146113e0576040805162461bcd60e51b815260206004820152600f60248201526e3434b73a103632b733ba341037b33360891b604482015290519081900360640190fd5b6000805b858110156114185760008787838181106113fa57fe5b9050602002013590508083101561140f578092505b506001016113e4565b5060005b858110156114db5760008261144c89898581811061143657fe5b905060200201358b611ef690919063ffffffff16565b8161145357fe5b049050600081116114ab576040805162461bcd60e51b815260206004820152601e60248201527f6d7573742068696e7420612076616c696420646973747269627574696f6e0000604482015290519081900360640190fd5b6114bb898263ffffffff611f4f16565b8683815181106114c757fe5b60209081029190910101525060010161141c565b50505b50845b600554604080516323b872dd60e01b81523360048201523060248201526044810189905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561153b57600080fd5b505af115801561154f573d6000803e3d6000fd5b505050506040513d602081101561156557600080fd5b50516115b8576040805162461bcd60e51b815260206004820152601760248201527f66756e64696e67207472616e73666572206661696c6564000000000000000000604482015290519081900360640190fd5b600554600480546040805163095ea7b360e01b81526001600160a01b0392831693810193909352602483018a90525192169163095ea7b3916044808201926020929091908290030181600087803b15801561161257600080fd5b505af1158015611626573d6000803e3d6000fd5b505050506040513d602081101561163c57600080fd5b505161168f576040805162461bcd60e51b815260206004820152601a60248201527f617070726f76616c20666f722073706c697473206661696c6564000000000000604482015290519081900360640190fd5b61169886612153565b6116a23382612658565b60048054604051631759616b60e11b815230928101838152336024830181905260a060448401908152600b805460a486018190526001600160a01b0390961696632eb2c2d6969095939491938b93916064820191608481019160c4909101908790801561172e57602002820191906000526020600020905b81548152602001906001019080831161171a575b50508481038352855181528551602091820191808801910280838360005b8381101561176457818101518382015260200161174c565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b15801561179d57600080fd5b505af11580156117b1573d6000803e3d6000fd5b506000925050505b8351811015611807576117e88482815181106117d157fe5b602002602001015188611f4f90919063ffffffff16565b8482815181106117f457fe5b60209081029190910101526001016117b9565b50336001600160a01b03167fec2dc3e5a3bb9aa0a1deb905d2bd23640d07f107e6ceb484024501aad964a95184836040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561187b578181015183820152602001611863565b50505050905001935050505060405180910390a2505050505050565b600681815481106118a457fe5b600091825260209091200154905081565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60075481565b60606118f06122e2565b90506060815160405190808252806020026020018201604052801561191f578160200160208202803883390190505b509050600061192c61088c565b905060005b835181101561198857816119618686848151811061194b57fe5b6020026020010151611ef690919063ffffffff16565b8161196857fe5b0483828151811061197557fe5b6020908102919091010152600101611931565b50600554604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156119d457600080fd5b505afa1580156119e8573d6000803e3d6000fd5b505050506040513d60208110156119fe57600080fd5b50519050611a0c3386612754565b600554604080516370a0823160e01b81523060048201529051611a91926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611a5857600080fd5b505afa158015611a6c573d6000803e3d6000fd5b505050506040513d6020811015611a8257600080fd5b5051829063ffffffff611f4f16565b60048054604051631759616b60e11b815230928101838152336024830181905260a060448401908152600b805460a486018190529798506001600160a01b0390951696632eb2c2d69695929492938b939092916064820191608481019160c49091019087908015611b2157602002820191906000526020600020905b815481526020019060010190808311611b0d575b50508481038352855181528551602091820191808801910280838360005b83811015611b57578181015183820152602001611b3f565b50505050905001848103825260008152602001602001975050505050505050600060405180830381600087803b158015611b9057600080fd5b505af1158015611ba4573d6000803e3d6000fd5b50505050336001600160a01b03167f8b4b2c8ebd04c47fc8bce136a85df9b93fcb1f47c8aa296457d4391519d190e78483886040518080602001848152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015611c22578181015183820152602001611c0a565b5050505090500194505050505060405180910390a25050505050565b60006001600160a01b038716301415611c5f575063f23a6e6160e01b611c63565b5060005b9695505050505050565b600b546000908210611cbe576040805162461bcd60e51b81526020600482015260156024820152740d2dcecc2d8d2c840deeae8c6dedaca40d2dcc8caf605b1b604482015290519081900360640190fd5b6060611cc86122e2565b90506000611d03670de0b6b3a7640000611ced60075488611ef690919063ffffffff16565b81611cf457fe5b8791900463ffffffff611f4f16565b90506000828581518110611d1357fe5b602002602001015190506000611d3a670de0b6b3a764000083611ef690919063ffffffff16565b905060005b8451811015611d8957868114611d81576000858281518110611d5d57fe5b60200260200101519050611d7d610da18683611fac90919063ffffffff16565b9250505b600101611d3f565b5060008111611ddf576040805162461bcd60e51b815260206004820152601b60248201527f6d7573742068617665206e6f6e2d7a65726f2062616c616e6365730000000000604482015290519081900360640190fd5b610e57611dfa82670de0b6b3a764000063ffffffff6124b116565b610e4b848663ffffffff611fac16565b6001600160a01b038316611e4f5760405162461bcd60e51b8152600401808060200182810382526024815260200180612ae46024913960400191505060405180910390fd5b6001600160a01b038216611e945760405162461bcd60e51b8152600401808060200182810382526022815260200180612a296022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082611f05575060006106c4565b82820282848281611f1257fe5b04146108855760405162461bcd60e51b8152600401808060200182810382526021815260200180612a7d6021913960400191505060405180910390fd5b600082821115611fa6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610885576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b03831661204b5760405162461bcd60e51b8152600401808060200182810382526025815260200180612abf6025913960400191505060405180910390fd5b6001600160a01b0382166120905760405162461bcd60e51b8152600401808060200182810382526023815260200180612a066023913960400191505060405180910390fd5b61209b838383612842565b6001600160a01b0383166000908152602081905260409020546120c4908263ffffffff611f4f16565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546120f9908263ffffffff611fac16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600654600019015b600081126122de5760606121856009838154811061217557fe5b90600052602060002001546129a1565b905060005b600a838154811061219757fe5b6000918252602090912001548110156122d357600454600554600a80546001600160a01b03938416936372ce427593169190879081106121d357fe5b9060005260206000200184815481106121e857fe5b90600052602060002001546006878154811061220057fe5b906000526020600020015486896040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b0316815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561228657818101518382015260200161226e565b505050509050019650505050505050600060405180830381600087803b1580156122af57600080fd5b505af11580156122c3573d6000803e3d6000fd5b50506001909201915061218a9050565b50506000190161215b565b5050565b606080600b80549050604051908082528060200260200182016040528015612314578160200160208202803883390190505b50905060005b600b54811015612351573082828151811061233157fe5b6001600160a01b039092166020928302919091019091015260010161231a565b5060048054604080516313849cfd60e21b81529283019081528351604484015283516001600160a01b0390921692634e1273f4928592600b929091829160248101916064909101906020808801910280838360005b838110156123be5781810151838201526020016123a6565b50505050905001838103825284818154815260200191508054801561240257602002820191906000526020600020905b8154815260200190600101908083116123ee575b505094505050505060006040518083038186803b15801561242257600080fd5b505afa158015612436573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561245f57600080fd5b810190808051600160201b81111561247657600080fd5b8201602081018481111561248957600080fd5b81518560208202830111600160201b821117156124a557600080fd5b50909550505050505090565b600082156124d0578160018403816124c557fe5b0460010190506106c4565b8183816124d957fe5b049392505050565b60005b6006548110156122de5760606125006009838154811061217557fe5b905060005b600a838154811061251257fe5b60009182526020909120015481101561264e57600454600554600a80546001600160a01b0393841693639e7212ad931691908790811061254e57fe5b90600052602060002001848154811061256357fe5b90600052602060002001546006878154811061257b57fe5b906000526020600020015486896040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b0316815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b838110156126015781810151838201526020016125e9565b505050509050019650505050505050600060405180830381600087803b15801561262a57600080fd5b505af115801561263e573d6000803e3d6000fd5b5050600190920191506125059050565b50506001016124e4565b6001600160a01b0382166126b3576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6126bf60008383612842565b6002546126d2908263ffffffff611fac16565b6002556001600160a01b0382166000908152602081905260409020546126fe908263ffffffff611fac16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166127995760405162461b