0x60c060405234801561001057600080fd5b50604051611c0e380380611c0e83398101604081905261002f916103cd565b83828181806001600160a01b03811661006357604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61006c81610170565b506001600160a01b03808316608052811661009a57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b1580156100e157600080fd5b505af11580156100f5573d6000803e3d6000fd5b5050505063ffffffff851660a0525050600280546001600160a01b0319166001600160a01b038716179055506101599050620f4240600061015260408051600360f01b602082015281516002818303018152602290910190915290565b91906101c0565b60039061016690826104cb565b5050505050610668565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608360036101d0826000610228565b61ffff1614610204576101e4816000610228565b604051633a51740d60e01b815261ffff909116600482015260240161005a565b60006102108585610294565b905061021e8660018361030d565b9695505050505050565b600061023582600261059f565b835110156102855760405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e6473000000000000000000000000604482015260640161005a565b50818101600201515b92915050565b60606001600160801b038216156102dc57604080516001600160801b0319608086811b8216602084015285901b16603082015201604051602081830303815290604052610306565b6040516001600160801b0319608085901b1660208201526030016040516020818303038152906040525b9392505050565b606083600361031d826000610228565b61ffff1614610331576101e4816000610228565b846001610344855161037e60201b60201c565b61034f9060016105b2565b86866040516020016103659594939291906105fc565b6040516020818303038152906040529150509392505050565b600061ffff8211156103ad576040516306dfcc6560e41b8152601060048201526024810183905260440161005a565b5090565b80516001600160a01b03811681146103c857600080fd5b919050565b600080600080608085870312156103e357600080fd5b6103ec856103b1565b93506103fa602086016103b1565b9250610408604086016103b1565b9150606085015163ffffffff8116811461042157600080fd5b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061045657607f821691505b60208210810361047657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156104c657806000526020600020601f840160051c810160208510156104a35750805b601f840160051c820191505b818110156104c357600081556001016104af565b50505b505050565b81516001600160401b038111156104e4576104e461042c565b6104f8816104f28454610442565b8461047c565b6020601f82116001811461052c57600083156105145750848201515b600019600385901b1c1916600184901b1784556104c3565b600084815260208120601f198516915b8281101561055c578785015182556020948501946001909201910161053c565b508482101561057a5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111561028e5761028e610589565b61ffff818116838216019081111561028e5761028e610589565b6000815160005b818110156105ed57602081850181015186830152016105d3565b50600093019283525090919050565b600061060882886105cc565b7fff0000000000000000000000000000000000000000000000000000000000000060f888811b821683526001600160f01b031960f089901b16600184015286901b16600382015261065c60048201856105cc565b98975050505050505050565b60805160a0516115496106c560003960008181610205015281816104c101526106d30152600081816101bc015281816103b3015281816105de0152818161098001528181610b4001528181610c370152610cee01526115496000f3fe6080604052600436106100fe5760003560e01c80637d25a05e11610095578063ca5eb5e111610064578063ca5eb5e11461030f578063e57dc2441461032f578063edfa356814610351578063f2fde38b14610371578063ff7bd03d1461039157600080fd5b80637d25a05e1461023c57806382413eac146102775780638da5cb5b146102b6578063bb0b6a53146102d457600080fd5b8063434a899c116100d1578063434a899c146101725780635e280f11146101aa578063715018a6146101de578063734ff5f3146101f357600080fd5b806313137d651461010357806317442b7014610118578063202d45d31461013f5780633400288b14610152575b600080fd5b610116610111366004610fd1565b6103b1565b005b34801561012457600080fd5b50604080516001815260026020820152015b60405180910390f35b61011661014d3660046110b8565b610471565b34801561015e57600080fd5b5061011661016d366004611175565b61058d565b34801561017e57600080fd5b50600254610192906001600160a01b031681565b6040516001600160a01b039091168152602001610136565b3480156101b657600080fd5b506101927f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ea57600080fd5b506101166105a3565b3480156101ff57600080fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610136565b34801561024857600080fd5b5061025f610257366004611175565b600092915050565b6040516001600160401b039091168152602001610136565b34801561028357600080fd5b506102a661029236600461119f565b6001600160a01b0381163014949350505050565b6040519015158152602001610136565b3480156102c257600080fd5b506000546001600160a01b0316610192565b3480156102e057600080fd5b506103016102ef366004611205565b60016020526000908152604090205481565b604051908152602001610136565b34801561031b57600080fd5b5061011661032a366004611220565b6105b7565b34801561033b57600080fd5b5061034461063d565b604051610136919061128d565b34801561035d57600080fd5b5061030161036c3660046112a0565b6106cb565b34801561037d57600080fd5b5061011661038c366004611220565b6107c5565b34801561039d57600080fd5b506102a66103ac3660046112e1565b610803565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610401576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b6020870180359061041b90610416908a611205565b610839565b146104595761042d6020880188611205565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016103f8565b6104688787878787878761087b565b50505050505050565b6002546001600160a01b031633146104bc5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b60448201526064016103f8565b6105887f000000000000000000000000000000000000000000000000000000000000000083600380546104ee906112fd565b80601f016020809104026020016040519081016040528092919081815260200182805461051a906112fd565b80156105675780601f1061053c57610100808354040283529160200191610567565b820191906000526020600020905b81548152906001019060200180831161054a57829003601f168201915b5050505050604051806040016040528034815260200160008152508561094d565b505050565b610595610a58565b61059f8282610a85565b5050565b6105ab610a58565b6105b56000610ada565b565b6105bf610a58565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b5050505050565b6003805461064a906112fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610676906112fd565b80156106c35780601f10610698576101008083540402835291602001916106c3565b820191906000526020600020905b8154815290600101906020018083116106a657829003601f168201915b505050505081565b6000806107bc7f000000000000000000000000000000000000000000000000000000000000000085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506003805490925061073791506112fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610763906112fd565b80156107b05780601f10610785576101008083540402835291602001916107b0565b820191906000526020600020905b81548152906001019060200180831161079357829003601f168201915b50505050506000610b2a565b51949350505050565b6107cd610a58565b6001600160a01b0381166107f757604051631e4fbdf760e01b8152600060048201526024016103f8565b61080081610ada565b50565b600060208201803590600190839061081b9086611205565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff8116600090815260016020526040812054806108755760405163f6ff4fb760e01b815263ffffffff841660048201526024016103f8565b92915050565b60008681526004602052604090205460ff16156108c65760405162461bcd60e51b815260206004820152600960248201526819dd5a59081d5cd95960ba1b60448201526064016103f8565b600086815260046020819052604091829020805460ff1916600117905560025491516309d86edd60e41b81526001600160a01b0390921691639d86edd091610912918991899101611331565b600060405180830381600087803b15801561092c57600080fd5b505af1158015610940573d6000803e3d6000fd5b5050505050505050505050565b610955610f05565b60006109648460000151610c0b565b60208501519091501561097e5761097e8460200151610c33565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016109ce8c610839565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401610a0a929190611360565b60806040518083038185885af1158015610a28573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a4d9190611427565b979650505050505050565b6000546001600160a01b031633146105b55760405163118cdaa760e01b81523360048201526024016103f8565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001610b8d89610839565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401610bc2929190611360565b6040805180830381865afa158015610bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c02919061149c565b95945050505050565b6000813414610c2f576040516304fb820960e51b81523460048201526024016103f8565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb791906114b8565b90506001600160a01b038116610ce0576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03818116604485015260648085018890528551808603909101815260849094019094526020830180516001600160e01b03166323b872dd60e01b17905261059f938516928690610d65908590610d6b565b50505050565b6000610d806001600160a01b03841683610dce565b90508051600014158015610da5575080806020019051810190610da391906114d5565b155b1561058857604051635274afe760e01b81526001600160a01b03841660048201526024016103f8565b6060610ddc83836000610de3565b9392505050565b606081471015610e085760405163cd78605960e01b81523060048201526024016103f8565b600080856001600160a01b03168486604051610e2491906114f7565b60006040518083038185875af1925050503d8060008114610e61576040519150601f19603f3d011682016040523d82523d6000602084013e610e66565b606091505b5091509150610e76868383610e80565b9695505050505050565b606082610e9557610e9082610edc565b610ddc565b8151158015610eac57506001600160a01b0384163b155b15610ed557604051639996b31560e01b81526001600160a01b03851660048201526024016103f8565b5080610ddc565b805115610eec5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60405180606001604052806000801916815260200160006001600160401b03168152602001610f47604051806040016040528060008152602001600081525090565b905290565b600060608284031215610f5e57600080fd5b50919050565b60008083601f840112610f7657600080fd5b5081356001600160401b03811115610f8d57600080fd5b602083019150836020828501011115610fa557600080fd5b9250929050565b6001600160a01b038116811461080057600080fd5b8035610fcc81610fac565b919050565b600080600080600080600060e0888a031215610fec57600080fd5b610ff68989610f4c565b96506060880135955060808801356001600160401b0381111561101857600080fd5b6110248a828b01610f64565b90965094505060a088013561103881610fac565b925060c08801356001600160401b0381111561105357600080fd5b61105f8a828b01610f64565b989b979a50959850939692959293505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156110b0576110b0611072565b604052919050565b600080604083850312156110cb57600080fd5b82356001600160401b038111156110e157600080fd5b8301601f810185136110f257600080fd5b80356001600160401b0381111561110b5761110b611072565b61111e601f8201601f1916602001611088565b81815286602083850101111561113357600080fd5b8160208401602083013760006020838301015280945050505061115860208401610fc1565b90509250929050565b803563ffffffff81168114610fcc57600080fd5b6000806040838503121561118857600080fd5b61119183611161565b946020939093013593505050565b60008060008060a085870312156111b557600080fd5b6111bf8686610f4c565b935060608501356001600160401b038111156111da57600080fd5b6111e687828801610f64565b90945092505060808501356111fa81610fac565b939692955090935050565b60006020828403121561121757600080fd5b610ddc82611161565b60006020828403121561123257600080fd5b8135610ddc81610fac565b60005b83811015611258578181015183820152602001611240565b50506000910152565b6000815180845261127981602086016020860161123d565b601f01601f19169290920160200192915050565b602081526000610ddc6020830184611261565b600080602083850312156112b357600080fd5b82356001600160401b038111156112c957600080fd5b6112d585828601610f64565b90969095509350505050565b6000606082840312156112f357600080fd5b610ddc8383610f4c565b600181811c9082168061131157607f821691505b602082108103610f5e57634e487b7160e01b600052602260045260246000fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a0608084015261139660e0840182611261565b90506060850151603f198483030160a08501526113b38282611261565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b6000604082840312156113eb57600080fd5b604080519081016001600160401b038111828210171561140d5761140d611072565b604052825181526020928301519281019290925250919050565b6000608082840312801561143a57600080fd5b50604051606081016001600160401b038111828210171561145d5761145d611072565b6040528251815260208301516001600160401b038116811461147e57600080fd5b602082015261149084604085016113d9565b60408201529392505050565b6000604082840312156114ae57600080fd5b610ddc83836113d9565b6000602082840312156114ca57600080fd5b8151610ddc81610fac565b6000602082840312156114e757600080fd5b81518015158114610ddc57600080fd5b6000825161150981846020870161123d565b919091019291505056fea264697066735822122090e8eaf24e625b036c7396fcf4d80e98e1046f75affff5782422a6e080f6666a64736f6c634300081b00330000000000000000000000006edce65403992e310a62460808c4b910d972f10f00000000000000000000000065281ff23b22011f4207d972869f42549cf312560000000000000000000000000e074f64962bb3b1f4b5d02e094880f06100666b0000000000000000000000000000000000000000000000000000000000009d27