60806040523480156200001157600080fd5b506040516200199b3803806200199b833981016040819052620000349162000434565b828285620000428162000083565b50600462000051838262000556565b50600562000060828262000556565b50506006805460ff1916905550620000793382620000d7565b505050506200064a565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9060200160405180910390a150565b6001600160a01b038216620001075760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b620001156000838362000119565b5050565b620001268383836200012b565b505050565b6001600160a01b03831660009081526007602052604081205460ff16806200016b57506001600160a01b03831660009081526007602052604090205460ff165b806200018657503360009081526007602052604090205460ff165b90508015620001e85760405162461bcd60e51b815260206004820152602760248201527f4552433230426c61636b4c69737461626c653a206163636f756e7420626c61636044820152661adb1a5cdd195960ca1b6064820152608401620000fe565b620001f5848484620001fb565b50505050565b6200020562000212565b6200012683838362000239565b60065460ff1615620002375760405163d93c066560e01b815260040160405180910390fd5b565b6001600160a01b038316620002685780600360008282546200025c919062000622565b90915550620002dc9050565b6001600160a01b03831660009081526001602052604090205481811015620002bd5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000fe565b6001600160a01b03841660009081526001602052604090209082900390555b6001600160a01b038216620002fa5760038054829003905562000319565b6001600160a01b03821660009081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200035f91815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200039457600080fd5b81516001600160401b0380821115620003b157620003b16200036c565b604051601f8301601f19908116603f01168101908282118183101715620003dc57620003dc6200036c565b8160405283815260209250866020858801011115620003fa57600080fd5b600091505b838210156200041e5785820183015181830184015290820190620003ff565b6000602085830101528094505050505092915050565b600080600080608085870312156200044b57600080fd5b84516001600160a01b03811681146200046357600080fd5b60208601519094506001600160401b03808211156200048157600080fd5b6200048f8883890162000382565b94506040870151915080821115620004a657600080fd5b50620004b58782880162000382565b606096909601519497939650505050565b600181811c90821680620004db57607f821691505b602082108103620004fc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000126576000816000526020600020601f850160051c810160208610156200052d5750805b601f850160051c820191505b818110156200054e5782815560010162000539565b505050505050565b81516001600160401b038111156200057257620005726200036c565b6200058a81620005838454620004c6565b8462000502565b602080601f831160018114620005c25760008415620005a95750858301515b600019600386901b1c1916600185901b1785556200054e565b600085815260208120601f198616915b82811015620005f357888601518255948401946001909101908401620005d2565b5085821015620006125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200064457634e487b7160e01b600052601160045260246000fd5b92915050565b611341806200065a6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806370a08231116100b857806395d89b411161007c57806395d89b4114610295578063a9059cbb1461029d578063bf7e214f146102b0578063dd62ed3e146102cb578063e47d606014610304578063e4997dc51461032757600080fd5b806370a082311461021d57806379cc6790146102465780637a9e5e4b146102595780638456cb591461026c5780638fb360371461027457600080fd5b8063313ce5671161010a578063313ce567146101c25780633f4ba83a146101d157806340c10f19146101d957806342966c68146101ec5780635c975abb146101ff578063682458bd1461020a57600080fd5b806306fdde0314610147578063095ea7b3146101655780630ecb93c01461018857806318160ddd1461019d57806323b872dd146101af575b600080fd5b61014f61033a565b60405161015c919061105a565b60405180910390f35b6101786101733660046110a9565b6103cc565b604051901515815260200161015c565b61019b6101963660046110d3565b6103e6565b005b6003545b60405190815260200161015c565b6101786101bd3660046110ee565b6103ff565b6040516012815260200161015c565b61019b610425565b61019b6101e73660046110a9565b610438565b61019b6101fa36600461112a565b610457565b60065460ff16610178565b61019b610218366004611143565b610461565b6101a161022b3660046110d3565b6001600160a01b031660009081526001602052604090205490565b61019b6102543660046110a9565b610474565b61019b6102673660046110d3565b610489565b61019b610504565b61027c610515565b6040516001600160e01b0319909116815260200161015c565b61014f610539565b6101786102ab3660046110a9565b610548565b6000546040516001600160a01b03909116815260200161015c565b6101a16102d9366004611143565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6101786103123660046110d3565b60076020526000908152604090205460ff1681565b61019b6103353660046110d3565b610556565b60606004805461034990611176565b80601f016020809104026020016040519081016040528092919081815260200182805461037590611176565b80156103c25780601f10610397576101008083540402835291602001916103c2565b820191906000526020600020905b8154815290600101906020018083116103a557829003601f168201915b5050505050905090565b6000336103da818585610568565b60019150505b92915050565b6103f3335b60003661057a565b6103fc8161067a565b50565b60003361040d8582856106d5565b610418858585610753565b60019150505b9392505050565b61042e336103eb565b6104366107b2565b565b610441336103eb565b610449610804565b6104538282610828565b5050565b6103fc338261085e565b61046a336103eb565b6104538282610894565b61047f8233836106d5565b610453828261085e565b60005433906001600160a01b031681146104c55760405162d1953b60e31b81526001600160a01b03821660048201526024015b60405180910390fd5b816001600160a01b03163b6000036104fb576040516361798f2f60e11b81526001600160a01b03831660048201526024016104bc565b61045382610965565b61050d336103eb565b6104366109b3565b60008054600160a01b900460ff1661052d5750600090565b50638fb3603760e01b90565b60606005805461034990611176565b6000336103da818585610753565b61055f336103eb565b6103fc816109f0565b6105758383836001610a41565b505050565b6000806105b06105926000546001600160a01b031690565b86306105a260046000898b6111b0565b6105ab916111da565b610b16565b91509150816106735763ffffffff811615610650576000805460ff60a01b198116600160a01b17909155604051634a63ebf760e11b81526001600160a01b03909116906394c7d7ee9061060b9088908890889060040161120a565b600060405180830381600087803b15801561062557600080fd5b505af1158015610639573d6000803e3d6000fd5b50506000805460ff60a01b19169055506106739050565b60405162d1953b60e31b81526001600160a01b03861660048201526024016104bc565b5050505050565b6001600160a01b038116600081815260076020908152604091829020805460ff1916600117905590519182527f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc91015b60405180910390a150565b6001600160a01b03838116600090815260026020908152604080832093861683529290522054600019811461074d578181101561073e57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016104bc565b61074d84848484036000610a41565b50505050565b6001600160a01b03831661077d57604051634b637e8f60e11b8152600060048201526024016104bc565b6001600160a01b0382166107a75760405163ec442f0560e01b8152600060048201526024016104bc565b610575838383610c22565b6107ba610c2d565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60065460ff16156104365760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b0382166108525760405163ec442f0560e01b8152600060048201526024016104bc565b61045360008383610c22565b6001600160a01b03821661088857604051634b637e8f60e11b8152600060048201526024016104bc565b61045382600083610c22565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff919061124a565b90506109156001600160a01b0383168483610c50565b604080516001600160a01b038085168252851660208201529081018290527fda0612d7ca9ff90ca7143a6021ba8938994f8d045b2834ae585fd07b27ea697c9060600160405180910390a1505050565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad906020016106ca565b6109bb610804565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107e73390565b6001600160a01b038116600081815260076020908152604091829020805460ff1916905590519182527fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c91016106ca565b6001600160a01b038416610a6b5760405163e602df0560e01b8152600060048201526024016104bc565b6001600160a01b038316610a9557604051634a1406b160e11b8152600060048201526024016104bc565b6001600160a01b038085166000908152600260209081526040808320938716835292905220829055801561074d57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b0891815260200190565b60405180910390a350505050565b6040516001600160a01b03848116602483015283811660448301526001600160e01b03198316606483015260009182918291829189169060840160408051601f198184030181529181526020820180516001600160e01b031663b700961360e01b17905251610b859190611263565b600060405180830381855afa9150503d8060008114610bc0576040519150601f19603f3d011682016040523d82523d6000602084013e610bc5565b606091505b50915091508115610c17576040815110610bf75780806020019051810190610bed919061128f565b9094509250610c17565b6020815110610c175780806020019051810190610c1491906112cf565b93505b505094509492505050565b610575838383610ca2565b60065460ff1661043657604051638dfc202b60e01b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610575908490610d66565b6001600160a01b03831660009081526007602052604081205460ff1680610ce157506001600160a01b03831660009081526007602052604090205460ff165b80610cfb57503360009081526007602052604090205460ff165b90508015610d5b5760405162461bcd60e51b815260206004820152602760248201527f4552433230426c61636b4c69737461626c653a206163636f756e7420626c61636044820152661adb1a5cdd195960ca1b60648201526084016104bc565b61074d848484610dc9565b6000610d7b6001600160a01b03841683610ddc565b90508051600014158015610da0575080806020019051810190610d9e91906112cf565b155b1561057557604051635274afe760e01b81526001600160a01b03841660048201526024016104bc565b610dd1610804565b610575838383610dea565b606061041e83836000610f14565b6001600160a01b038316610e15578060036000828254610e0a91906112ea565b90915550610e879050565b6001600160a01b03831660009081526001602052604090205481811015610e685760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016104bc565b6001600160a01b03841660009081526001602052604090209082900390555b6001600160a01b038216610ea357600380548290039055610ec2565b6001600160a01b03821660009081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f0791815260200190565b60405180910390a3505050565b606081471015610f395760405163cd78605960e01b81523060048201526024016104bc565b600080856001600160a01b03168486604051610f559190611263565b60006040518083038185875af1925050503d8060008114610f92576040519150601f19603f3d011682016040523d82523d6000602084013e610f97565b606091505b5091509150610fa7868383610fb1565b9695505050505050565b606082610fc657610fc18261100d565b61041e565b8151158015610fdd57506001600160a01b0384163b155b1561100657604051639996b31560e01b81526001600160a01b03851660048201526024016104bc565b508061041e565b80511561101d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60005b83811015611051578181015183820152602001611039565b50506000910152565b6020815260008251806020840152611079816040850160208701611036565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146110a457600080fd5b919050565b600080604083850312156110bc57600080fd5b6110c58361108d565b946020939093013593505050565b6000602082840312156110e557600080fd5b61041e8261108d565b60008060006060848603121561110357600080fd5b61110c8461108d565b925061111a6020850161108d565b9150604084013590509250925092565b60006020828403121561113c57600080fd5b5035919050565b6000806040838503121561115657600080fd5b61115f8361108d565b915061116d6020840161108d565b90509250929050565b600181811c9082168061118a57607f821691505b6020821081036111aa57634e487b7160e01b600052602260045260246000fd5b50919050565b600080858511156111c057600080fd5b838611156111cd57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156112025780818660040360031b1b83161692505b505092915050565b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006020828403121561125c57600080fd5b5051919050565b60008251611275818460208701611036565b9190910192915050565b805180151581146110a457600080fd5b600080604083850312156112a257600080fd5b6112ab8361127f565b9150602083015163ffffffff811681146112c457600080fd5b809150509250929050565b6000602082840312156112e157600080fd5b61041e8261127f565b808201808211156103e057634e487b7160e01b600052601160045260246000fdfea2646970667358221220051cfeb8444bc510c0283a82de83f0ca9f498b36283048596ce42c587ab9d57264736f6c63430008170033000000000000000000000000e8c28437900e0393e4584ef65ff1a47757fee8fa000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000016b81d1a43b205ac3f4000000000000000000000000000000000000000000000000000000000000000000000045069706f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045049504f00000000000000000000000000000000000000000000000000000000