0x608060405234801561001057600080fd5b5061001a3361002c565b6000805460ff60a01b1916905561007c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6122438061008b6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638da5cb5b1161008c578063c6256bef11610066578063c6256bef146101a7578063e83aa3a8146101c7578063f2fde38b146101da578063f9338d18146101ed57600080fd5b80638da5cb5b146101715780639dd392391461018c578063af0a35571461019457600080fd5b80630633b14a146100d457806313e7c9d81461010c5780635c975abb1461012f5780636d44a3b214610141578063715018a61461015657806388f4950f1461015e575b600080fd5b6100f76100e2366004611916565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100f761011a366004611916565b60016020526000908152604090205460ff1681565b600054600160a01b900460ff166100f7565b61015461014f366004611941565b6101f5565b005b61015461028c565b61015461016c366004611941565b6102c2565b6000546040516001600160a01b039091168152602001610103565b610154610348565b6100f76101a23660046119d4565b6103af565b6101ba6101b5366004611a7f565b610431565b6040516101039190611b2a565b6101546101d5366004611b3d565b6104b4565b6101546101e8366004611916565b610632565b6101546106cd565b6000546001600160a01b031633146102285760405162461bcd60e51b815260040161021f90611b7f565b60405180910390fd5b6001600160a01b038216600081815260016020908152604091829020805460ff19168515159081179091558251938452908301527f2ee52be9d342458b3d25e07faada7ff9bc06723b4aa24edb6321ac1316b8a9dd91015b60405180910390a15050565b6000546001600160a01b031633146102b65760405162461bcd60e51b815260040161021f90611b7f565b6102c060006106ff565b565b6000546001600160a01b031633146102ec5760405162461bcd60e51b815260040161021f90611b7f565b6001600160a01b038216600081815260026020908152604091829020805460ff19168515159081179091558251938452908301527f25d7ce8d7e0b3990938766275ee2d54fbe81347d287bfbf0429838409a889fdc9101610280565b3360009081526002602052604090205460ff166103a75760405162461bcd60e51b815260206004820152601b60248201527f4b7962657253776170526f6c653a206e6f7420677561726469616e0000000000604482015260640161021f565b6102c061074f565b600060ff8816600114156103d0576103c9878787876107f4565b9050610426565b60ff88166103e4576103c987878787610ba8565b60ff8816600514806103f9575060ff88166006145b1561040a576103c987878787610ca8565b60ff881660641415610422576103c987878787610f96565b5060015b979650505050505050565b606060ff841660011415610450576104498383611094565b90506104ad565b60ff8416610462576104498383611243565b60ff841660051480610477575060ff84166006145b1561048657610449838361133f565b60ff84166064141561049c576104498383611480565b506040805160008152602081019091525b9392505050565b6000546001600160a01b031633146104de5760405162461bcd60e51b815260040161021f90611b7f565b6001600160a01b0381166105345760405162461bcd60e51b815260206004820152601b60248201527f4b535265736375653a20696e76616c696420726563697069656e740000000000604482015260640161021f565b81610545576105428361159f565b91505b811561062d5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0384161415610619576000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146105bd576040519150601f19603f3d011682016040523d82523d6000602084013e6105c2565b606091505b50509050806106135760405162461bcd60e51b815260206004820152601d60248201527f4b535265736375653a204554485f5452414e534645525f4641494c4544000000604482015260640161021f565b50505050565b61062d6001600160a01b038416828461165e565b505050565b6000546001600160a01b0316331461065c5760405162461bcd60e51b815260040161021f90611b7f565b6001600160a01b0381166106c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161021f565b6106ca816106ff565b50565b6000546001600160a01b031633146106f75760405162461bcd60e51b815260040161021f90611b7f565b6102c06116b0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff161561079c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161021f565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107d73390565b6040516001600160a01b03909116815260200160405180910390a1565b60008061080383850185611c7f565b8051602090810151908201519192509015610a7b5781516040908101519051634f6ccce760e01b815260048101919091526001600160a01b03821690634f6ccce79060240160206040518083038186803b15801561086057600080fd5b505afa158015610874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108989190611cd2565b82516040015260006108ac87890189611cfa565b8051845160409081015190516331a9108f60e11b81529293506001600160a01b039182169291851691636352211e916108eb9160040190815260200190565b60206040518083038186803b15801561090357600080fd5b505afa158015610917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093b9190611d8d565b6001600160a01b0316146109555760009350505050610ba0565b6000806000846001600160a01b03166399fbab888760000151604001516040518263ffffffff1660e01b815260040161099091815260200190565b6101806040518083038186803b1580156109a957600080fd5b505afa1580156109bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e19190611ddc565b5050505097509750975050505050508260020b846020015160020b141580610a1357508160020b846040015160020b14155b15610a275760009650505050505050610ba0565b600084606001516001600160801b031611610a545760405162461bcd60e51b815260040161021f90611ebd565b83606001516001600160801b0316816001600160801b031610159650505050505050610ba0565b8151604090810151905163133f757160e31b81526000916001600160a01b038416916399fbab8891610ab39160040190815260200190565b6101806040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190611ddc565b5050505097505050505050505082604001516001600160801b0316816001600160801b03161015610b3b5760009350505050610ba0565b6000610b49888a018a611ee9565b90506000816001600160801b031611610b745760405162461bcd60e51b815260040161021f90611ebd565b806001600160801b0316846040015183610b8e9190611f1c565b6001600160801b031610159450505050505b949350505050565b600080610bb783850185611f86565b805180516020909101516040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a082319060240160206040518083038186803b158015610c0857600080fd5b505afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c409190611cd2565b90508160200151811015610c5957600092505050610ba0565b6000610c6787890189611fbe565b905060008111610c895760405162461bcd60e51b815260040161021f90611ebd565b80836020015183610c9a9190611fd7565b101598975050505050505050565b600080610cb783850185611c7f565b8051602090810151908201519192509015610ed75781516040908101519051634f6ccce760e01b815260048101919091526001600160a01b03821690634f6ccce79060240160206040518083038186803b158015610d1457600080fd5b505afa158015610d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4c9190611cd2565b8251604001526000610d6087890189611cfa565b8051845160409081015190516331a9108f60e11b81529293506001600160a01b039182169291851691636352211e91610d9f9160040190815260200190565b60206040518083038186803b158015610db757600080fd5b505afa158015610dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610def9190611d8d565b6001600160a01b031614610e095760009350505050610ba0565b6000806000846001600160a01b03166399fbab888760000151604001516040518263ffffffff1660e01b8152600401610e4491815260200190565b6101606040518083038186803b158015610e5d57600080fd5b505afa158015610e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e959190611fee565b50505050965096509650505050508260020b846020015160020b141580610a1357508160020b846040015160020b14610a275760009650505050505050610ba0565b8151604090810151905163133f757160e31b81526000916001600160a01b038416916399fbab8891610f0f9160040190815260200190565b6101606040518083038186803b158015610f2857600080fd5b505afa158015610f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f609190611fee565b50505050965050505050505082604001516001600160801b0316816001600160801b03161015610b3b5760009350505050610ba0565b600080610fa5838501856120c6565b90506000610fb586880188611fbe565b82519091506000906001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461106557825160208401516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a082319060240160206040518083038186803b15801561102857600080fd5b505afa15801561103c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110609190611cd2565b611075565b82602001516001600160a01b0316315b905081836040015161108791906120e2565b1115979650505050505050565b6040805160c081018252600060608281018281526080840183905260a08401839052835260208301829052928201526110cf838501856120c6565b80825260400151611170578060000151602001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561111b57600080fd5b505afa15801561112f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111539190611cd2565b815160409081019190915260016020830152600090820152611219565b6000602082810191909152815190810151604091820151915163133f757160e31b815260048101929092526001600160a01b0316906399fbab88906024016101806040518083038186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff9190611ddc565b505050506001600160801b03166040890152505050505050505b8060405160200161122a91906120fa565b6040516020818303038152906040529150505b92915050565b606061126e604080516080810182526000918101828152606082018390528152602081019190915290565b61127a83850185612144565b80825280516020909101516040516370a0823160e01b81526001600160a01b0391821660048201529116906370a082319060240160206040518083038186803b1580156112c657600080fd5b505afa1580156112da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fe9190611cd2565b6001600160801b0316602082810191825260408051845180516001600160a01b0390811683860152930151909216908201529051606082015260800161122a565b6040805160c081018252600060608281018281526080840183905260a084018390528352602083018290529282015261137a838501856120c6565b808252604001516113c6578060000151602001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561111b57600080fd5b6000602082810191909152815190810151604091820151915163133f757160e31b815260048101929092526001600160a01b0316906399fbab88906024016101606040518083038186803b15801561141d57600080fd5b505afa158015611431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114559190611fee565b5050506001600160801b039091166040890152505050505050508060405160200161122a91906120fa565b606060008061149184860186612160565b909250905060006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461153a576040516370a0823160e01b81526001600160a01b0383811660048301528416906370a082319060240160206040518083038186803b1580156114fd57600080fd5b505afa158015611511573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115359190611cd2565b611546565b816001600160a01b0316315b90506040518060600160405280846001600160a01b03168152602001836001600160a01b0316815260200182815250604051602001611585919061218e565b604051602081830303815290604052935050505092915050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614156115cd575047611647565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b15801561160c57600080fd5b505afa158015611620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116449190611cd2565b90505b801561165957611656816121bd565b90505b919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261062d908490611734565b600054600160a01b900460ff166117005760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161021f565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336107d7565b6000611789826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118069092919063ffffffff16565b80519091501561062d57808060200190518101906117a791906121d4565b61062d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161021f565b6060610ba0848460008585843b61185f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161021f565b600080866001600160a01b0316858760405161187b91906121f1565b60006040518083038185875af1925050503d80600081146118b8576040519150601f19603f3d011682016040523d82523d6000602084013e6118bd565b606091505b5091509150610426828286606083156118d75750816104ad565b8251156118e75782518084602001fd5b8160405162461bcd60e51b815260040161021f9190611b2a565b6001600160a01b03811681146106ca57600080fd5b60006020828403121561192857600080fd5b81356104ad81611901565b80151581146106ca57600080fd5b6000806040838503121561195457600080fd5b823561195f81611901565b9150602083013561196f81611933565b809150509250929050565b803560ff8116811461165957600080fd5b60008083601f84011261199d57600080fd5b50813567ffffffffffffffff8111156119b557600080fd5b6020830191508360208285010111156119cd57600080fd5b9250929050565b60008060008060008060006080888a0312156119ef57600080fd5b6119f88861197a565b9650602088013567ffffffffffffffff80821115611a1557600080fd5b611a218b838c0161198b565b909850965060408a0135915080821115611a3a57600080fd5b611a468b838c0161198b565b909650945060608a0135915080821115611a5f57600080fd5b50611a6c8a828b0161198b565b989b979a50959850939692959293505050565b600080600060408486031215611a9457600080fd5b611a9d8461197a565b9250602084013567ffffffffffffffff811115611ab957600080fd5b611ac58682870161198b565b9497909650939450505050565b60005b83811015611aed578181015183820152602001611ad5565b838111156106135750506000910152565b60008151808452611b16816020860160208601611ad2565b601f01601f19169290920160200192915050565b6020815260006104ad6020830184611afe565b600080600060608486031215611b5257600080fd5b8335611b5d81611901565b9250602084013591506040840135611b7481611901565b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6040516060810167ffffffffffffffff81118282101715611be557634e487b7160e01b600052604160045260246000fd5b60405290565b6040805190810167ffffffffffffffff81118282101715611be557634e487b7160e01b600052604160045260246000fd5b600060608284031215611c2e57600080fd5b611c36611bb4565b90508135611c4381611901565b81526020820135611c5381611901565b806020830152506040820135604082015292915050565b6001600160801b03811681146106ca57600080fd5b600060a08284031215611c9157600080fd5b611c99611bb4565b611ca38484611c1c565b81526060830135611cb381611933565b60208201526080830135611cc681611c6a565b60408201529392505050565b600060208284031215611ce457600080fd5b5051919050565b8060020b81146106ca57600080fd5b600060808284031215611d0c57600080fd5b6040516080810181811067ffffffffffffffff82111715611d3d57634e487b7160e01b600052604160045260246000fd5b6040528235611d4b81611901565b81526020830135611d5b81611ceb565b60208201526040830135611d6e81611ceb565b60408201526060830135611d8181611c6a565b60608201529392505050565b600060208284031215611d9f57600080fd5b81516104ad81611901565b80516bffffffffffffffffffffffff8116811461165957600080fd5b805161165981611ceb565b805161165981611c6a565b6000806000806000806000806000806000806101808d8f031215611dff57600080fd5b611e088d611daa565b9b5060208d0151611e1881611901565b60408e0151909b50611e2981611901565b60608e0151909a50611e3a81611901565b60808e015190995062ffffff81168114611e5357600080fd5b9750611e6160a08e01611dc6565b9650611e6f60c08e01611dc6565b9550611e7d60e08e01611dd1565b94506101008d015193506101208d01519250611e9c6101408e01611dd1565b9150611eab6101608e01611dd1565b90509295989b509295989b509295989b565b6020808252601290820152717a65726f206d696e5f6c697175696469747960701b604082015260600190565b600060208284031215611efb57600080fd5b81356104ad81611c6a565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b0383811690831681811015611f3c57611f3c611f06565b039392505050565b600060408284031215611f5657600080fd5b611f5e611beb565b90508135611f6b81611901565b81526020820135611f7b81611901565b602082015292915050565b600060608284031215611f9857600080fd5b611fa0611beb565b611faa8484611f44565b815260409290920135602083015250919050565b600060208284031215611fd057600080fd5b5035919050565b600082821015611fe957611fe9611f06565b500390565b60008060008060008060008060008060006101608c8e03121561201057600080fd5b6120198c611daa565b9a5060208c015161202981611901565b60408d0151909a5061203a81611901565b60608d015190995061204b81611901565b60808d015190985061205c81611ceb565b60a08d015190975061206d81611ceb565b60c08d015190965061207e81611c6a565b8095505060e08c015193506101008c015192506101208c01516120a081611c6a565b6101408d01519092506120b281611c6a565b809150509295989b509295989b9093969950565b6000606082840312156120d857600080fd5b6104ad8383611c1c565b600082198211156120f5576120f5611f06565b500190565b815180516001600160a01b039081168352602080830151909116818401526040918201518284015283015115156060830152909101516001600160801b0316608082015260a00190565b60006040828403121561215657600080fd5b6104ad8383611f44565b6000806040838503121561217357600080fd5b823561217e81611901565b9150602083013561196f81611901565b81516001600160a01b03908116825260208084015190911690820152604080830151908201526060810161123d565b6000816121cc576121cc611f06565b506000190190565b6000602082840312156121e657600080fd5b81516104ad81611933565b60008251612203818460208701611ad2565b919091019291505056fea26469706673582212204a7d71d60a250d07abcd8bd38a38d787497f16e770d075768692d93ca4f2cba764736f6c63430008090033