0x60806040526000805460ff60a01b1916905534801561001d57600080fd5b506040516116763803806116768339818101604052602081101561004057600080fd5b5051600080546001600160a01b039092166001600160a01b0319909216919091179055611604806100726000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80639572601d116100cd578063cbc3ff2011610081578063cf0789c411610066578063cf0789c41461063d578063f82c90e2146106a2578063f851a440146106d057610151565b8063cbc3ff201461053c578063ce447450146105a157610151565b8063b4e9bf88116100b2578063b4e9bf88146103ce578063bb26a96a14610485578063bc2ff23d1461050e57610151565b80639572601d14610332578063a44d57a0146103a857610151565b80632a3dc0041161012457806357d9abc21161010957806357d9abc2146102415780635d799f87146102de57806375829def1461030c57610151565b80632a3dc0041461021d578063461d5ddf1461023957610151565b806303ca0f6c14610156578063080f2a55146101985780630fdf7a4c146101c9578063291d9549146101f7575b600080fd5b61017c6004803603602081101561016c57600080fd5b50356001600160a01b03166106d8565b604080516001600160a01b039092168252519081900360200190f35b6101c7600480360360408110156101ae57600080fd5b5080356001600160a01b0316906020013560ff166106f3565b005b6101c7600480360360408110156101df57600080fd5b506001600160a01b03813581169160200135166107a4565b6101c76004803603602081101561020d57600080fd5b50356001600160a01b031661089e565b610225610940565b604080519115158252519081900360200190f35b6101c7610950565b6102c5600480360360c081101561025757600080fd5b6040805180820182526001600160a01b03843516936020810135600290810b9484830135820b946fffffffffffffffffffffffffffffffff60608501351694918401939260c08401929160808501919083908390808284376000920191909152509194506109c69350505050565b6040805192835260208301919091528051918290030190f35b6101c7600480360360408110156102f457600080fd5b506001600160a01b0381358116916020013516610b08565b6101c76004803603602081101561032257600080fd5b50356001600160a01b0316610cd8565b6101c7600480360360e081101561034857600080fd5b6040805180820182526001600160a01b03843516936020810135600290810b9484830135820b946060840135946080850135949283019360e084019260a0850191908390839080828437600092019190915250919450610dae9350505050565b61017c600480360360208110156103be57600080fd5b50356001600160a01b0316610ec2565b6101c760048036036101c08110156103e557600080fd5b60408051608081810183526001600160a01b0385358116956020810135600290810b9695820135810b956060830135820b958584013590920b9460a084013590941693908301929161014083019160c084019060049083908390808284376000920191909152505060408051608081810190925292959493818101939250906004908390839080828437600092019190915250919450610edd9350505050565b6104e8600480360360c081101561049b57600080fd5b60408051608081810183526001600160a01b0385351694602081013594810193909260c0840192909184019060049083908390808284376000920191909152509194506110379350505050565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6101c76004803603604081101561052457600080fd5b506001600160a01b0381358116916020013516611163565b6101c7600480360360a081101561055257600080fd5b6040805180820182526001600160a01b038435169360208101359383820135939082019260a0830191606084019060029083908390808284376000920191909152509194506112459350505050565b610600600480360360a08110156105b757600080fd5b6040805160808181019092526001600160a01b0384351693928301929160a083019190602084019060049083908390808284376000920191909152509194506113419350505050565b604080516fffffffffffffffffffffffffffffffff9586168152938516602085015291841683830152909216606082015290519081900360800190f35b6101c7600480360360a081101561065357600080fd5b6040805180820182526001600160a01b038435169360208101359383820135939082019260a08301916060840190600290839083908082843760009201919091525091945061145a9350505050565b6101c7600480360360408110156106b857600080fd5b506001600160a01b0381358116916020013516611506565b61017c6115e8565b6002602052600090815260409020546001600160a01b031681565b6000546001600160a01b0316331461073f576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b816001600160a01b031663cb122a09826040518263ffffffff1660e01b8152600401808260ff168152602001915050600060405180830381600087803b15801561078857600080fd5b505af115801561079c573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146107f0576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b600054600160a01b900460ff161561084f576040805162461bcd60e51b815260206004820152601860248201527f7065726d616e656e74206f776e657220696e20706c6163650000000000000000604482015290519081900360640190fd5b816001600160a01b031663f2fde38b826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561078857600080fd5b6000546001600160a01b031633146108ea576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b806001600160a01b031663c5241e296040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561092557600080fd5b505af1158015610939573d6000803e3d6000fd5b5050505050565b600054600160a01b900460ff1681565b6000546001600160a01b0316331461099c576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b6001600160a01b03858116600090815260016020526040812054909182918891163314610a2c576040805162461bcd60e51b815260206004820152600f60248201526e37b7363c903932b130b630b731b2b960891b604482015290519081900360640190fd5b876001600160a01b03166395235656888888886040518563ffffffff1660e01b8152600401808560020b81526020018460020b8152602001836fffffffffffffffffffffffffffffffff16815260200182600260200280838360005b83811015610aa0578181015183820152602001610a88565b505050509050019450505050506040805180830381600087803b158015610ac657600080fd5b505af1158015610ada573d6000803e3d6000fd5b505050506040513d6040811015610af057600080fd5b50805160209091015190999098509650505050505050565b6000546001600160a01b03163314610b54576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6001600160a01b038116610baf576040805162461bcd60e51b815260206004820152601c60248201527f726563697069656e742073686f756c64206265206e6f6e2d7a65726f00000000604482015290519081900360640190fd5b816001600160a01b031663a9059cbb82846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610c0c57600080fd5b505afa158015610c20573d6000803e3d6000fd5b505050506040513d6020811015610c3657600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610c9f57600080fd5b505af1158015610cb3573d6000803e3d6000fd5b505050506040513d6020811015610cc957600080fd5b5051610cd457600080fd5b5050565b6000546001600160a01b03163314610d24576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6001600160a01b038116610d7f576040805162461bcd60e51b815260206004820152601b60248201527f6e657741646d696e2073686f756c64206265206e6f6e2d7a65726f0000000000604482015290519081900360640190fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6001600160a01b038681166000908152600160205260409020548791163314610e10576040805162461bcd60e51b815260206004820152600f60248201526e37b7363c903932b130b630b731b2b960891b604482015290519081900360640190fd5b866001600160a01b03166363e9683687878787876040518663ffffffff1660e01b8152600401808660020b81526020018560020b815260200184815260200183815260200182600260200280838360005b83811015610e79578181015183820152602001610e61565b5050505090500195505050505050600060405180830381600087803b158015610ea157600080fd5b505af1158015610eb5573d6000803e3d6000fd5b5050505050505050505050565b6001602052600090815260409020546001600160a01b031681565b6001600160a01b038881166000908152600160205260409020548991163314610f3f576040805162461bcd60e51b815260206004820152600f60248201526e37b7363c903932b130b630b731b2b960891b604482015290519081900360640190fd5b886001600160a01b03166385919c5d898989898989896040518863ffffffff1660e01b8152600401808860020b81526020018760020b81526020018660020b81526020018560020b8152602001846001600160a01b0316815260200183600460200280838360005b83811015610fbf578181015183820152602001610fa7565b5050505090500182600460200280838360005b83811015610fea578181015183820152602001610fd2565b50505050905001975050505050505050600060405180830381600087803b15801561101457600080fd5b505af1158015611028573d6000803e3d6000fd5b50505050505050505050505050565b6001600160a01b03838116600090815260016020526040812054909182918291829188911633146110a1576040805162461bcd60e51b815260206004820152600f60248201526e37b7363c903932b130b630b731b2b960891b604482015290519081900360640190fd5b604051631bead8f360e01b8152600481018881526001600160a01b038a1691631bead8f3918a918a919060240182608080838360005b838110156110ef5781810151838201526020016110d7565b5050505090500192505050608060405180830381600087803b15801561111457600080fd5b505af1158015611128573d6000803e3d6000fd5b505050506040513d608081101561113e57600080fd5b50805160208201516040830151606090930151919b909a509198509650945050505050565b6000546001600160a01b031633146111af576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6001600160a01b03811661120a576040805162461bcd60e51b815260206004820152601d60248201527f6e657741647669736f722073686f756c64206265206e6f6e2d7a65726f000000604482015290519081900360640190fd5b6001600160a01b039182166000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b6001600160a01b0384811660009081526001602052604090205485911633146112a7576040805162461bcd60e51b815260206004820152600f60248201526e37b7363c903932b130b630b731b2b960891b604482015290519081900360640190fd5b846001600160a01b03166349e8f1c28585856040518463ffffffff1660e01b81526004018084815260200183815260200182600260200280838360005b838110156112fc5781810151838201526020016112e4565b505050509050019350505050600060405180830381600087803b15801561132257600080fd5b505af1158015611336573d6000803e3d6000fd5b505050505050505050565b6001600160a01b03828116600090815260026020526040812054909182918291829187911633146113b9576040805162461bcd60e51b815260206004820152600c60248201527f6f6e6c792061647669736f720000000000000000000000000000000000000000604482015290519081900360640190fd5b60405163144faa2160e21b81526001600160a01b0388169063513ea8849088906004018082608080838360005b838110156113fe5781810151838201526020016113e6565b50505050905001915050608060405180830381600087803b15801561142257600080fd5b505af1158015611436573d6000803e3d6000fd5b505050506040513d608081101561144c57600080fd5b509497939650919450925050565b6001600160a01b0384811660009081526001602052604090205485911633146114bc576040805162461bcd60e51b815260206004820152600f60248201526e37b7363c903932b130b630b731b2b960891b604482015290519081900360640190fd5b60408051632527aa1d60e01b81526004810186815260248201869052845160449092019182526001600160a01b03881692632527aa1d9288928892889290839080838360206112e4565b6000546001600160a01b03163314611552576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9030b236b4b760b11b604482015290519081900360640190fd5b6001600160a01b0381166115ad576040805162461bcd60e51b815260206004820181905260248201527f6e6577526562616c616e6365722073686f756c64206265206e6f6e2d7a65726f604482015290519081900360640190fd5b6001600160a01b039182166000908152600160205260409020805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b6000546001600160a01b03168156fea164736f6c6343000706000a000000000000000000000000ade38bd2e8d5a52e60047affe6e595bb5e61923a