0x608060405234801561000f575f80fd5b506116fb8061001d5f395ff3fe6080604052600436106100db575f3560e01c80631525ff7d146100e6578063164e68de146101075780631694505e146101265780631bddb7061461015b578063451776561461017a5780635937cfce1461018d57806359927044146101b0578063715018a6146101cf578063782c4e99146101e35780638da5cb5b1461020257806399a5d74714610216578063a001ecdd14610235578063ae06c1b71461024a578063c0c53b8b14610269578063d57d71e114610288578063e37c6f8c146102a7578063f2fde38b146102c6578063fc530221146102e5575f80fd5b366100e257005b5f80fd5b3480156100f1575f80fd5b50610105610100366004611284565b610304565b005b348015610112575f80fd5b50610105610121366004611284565b61032e565b348015610131575f80fd5b50606554610145906001600160a01b031681565b60405161015291906112a6565b60405180910390f35b348015610166575f80fd5b50610105610175366004611284565b610395565b6101056101883660046112ba565b6103bf565b348015610198575f80fd5b506101a260695481565b604051908152602001610152565b3480156101bb575f80fd5b50606754610145906001600160a01b031681565b3480156101da575f80fd5b506101056106df565b3480156101ee575f80fd5b50606854610145906001600160a01b031681565b34801561020d575f80fd5b506101456106f2565b348015610221575f80fd5b506101a26102303660046112ff565b610701565b348015610240575f80fd5b506101a260665481565b348015610255575f80fd5b506101056102643660046112ff565b610723565b348015610274575f80fd5b50610105610283366004611316565b610752565b348015610293575f80fd5b506101056102a23660046112ff565b6108ae565b3480156102b2575f80fd5b506101056102c136600461135e565b6108dc565b3480156102d1575f80fd5b506101056102e0366004611284565b610d48565b3480156102f0575f80fd5b506101056102ff3660046113ac565b610dc1565b61030c610e6b565b606780546001600160a01b0319166001600160a01b0392909216919091179055565b610336610e6b565b478061035d5760405162461bcd60e51b8152600401610354906113e3565b60405180910390fd5b6040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015610390573d5f803e3d5ffd5b505050565b61039d610e6b565b606880546001600160a01b0319166001600160a01b0392909216919091179055565b5f34116104185760405162461bcd60e51b815260206004820152602160248201527f45544820616d6f756e74206d7573742062652067726561746572207468616e206044820152600360fc1b6064820152608401610354565b5f61042234610701565b90505f61042f8234611424565b6040805160028082526060820183529293505f9290916020830190803683375050606554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561049b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104bf9190611437565b815f815181106104d1576104d1611452565b60200260200101906001600160a01b031690816001600160a01b031681525050858160018151811061050557610505611452565b6001600160a01b03928316602091820292909201015260655460405163b6f9de9560e01b815291169063b6f9de9590849061054a908b90869030908b906004016114a8565b5f604051808303818588803b158015610561575f80fd5b505af1158015610573573d5f803e3d5ffd5b50505050506105f885876001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016105a891906112a6565b602060405180830381865afa1580156105c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105e791906114dc565b6001600160a01b0389169190610eca565b5f6064606954606461060a9190611424565b61061490866114f3565b61061e919061150a565b90505f60646069548661063191906114f3565b61063b919061150a565b6067546040519192506001600160a01b03169083156108fc029084905f818181858888f19350505050158015610673573d5f803e3d5ffd5b506068546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156106ab573d5f803e3d5ffd5b505f805160206116a683398151915285888a6040516106cc93929190611529565b60405180910390a1505050505050505050565b6106e7610e6b565b6106f05f610f20565b565b6033546001600160a01b031690565b5f6127106066548361071391906114f3565b61071d919061150a565b92915050565b61072b610e6b565b61271081111561074d5760405162461bcd60e51b815260040161035490611548565b606655565b5f54610100900460ff161580801561077057505f54600160ff909116105b80610790575061077f30610f71565b15801561079057505f5460ff166001145b6107f35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610354565b5f805460ff191660011790558015610814575f805461ff0019166101001790555b61081c610f80565b606580546001600160a01b038087166001600160a01b0319928316179092556064606655606780548684169083161790556068805492851692909116919091179055602860695580156108a8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6108b6610e6b565b60648111156108d75760405162461bcd60e51b815260040161035490611548565b606955565b6040516370a0823160e01b815285906001600160a01b038516906370a082319061090a9033906004016112a6565b602060405180830381865afa158015610925573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094991906114dc565b101561098e5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610354565b604051636eb1769f60e11b815233600482015230602482015285906001600160a01b0385169063dd62ed3e90604401602060405180830381865afa1580156109d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109fc91906114dc565b1015610a435760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b6044820152606401610354565b610a586001600160a01b038416333088610fae565b60655460405163095ea7b360e01b81526001600160a01b038581169263095ea7b392610a8c92909116908990600401611578565b6020604051808303815f875af1158015610aa8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610acc9190611591565b506040805160028082526060820183525f9260208301908036833701905050905083815f81518110610b0057610b00611452565b6001600160a01b03928316602091820292909201810191909152606554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610b57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7b9190611437565b81600181518110610b8e57610b8e611452565b6001600160a01b03928316602091820292909201015260655460405163791ac94760e01b81524792919091169063791ac94790610bd7908a908a90879030908a906004016115b0565b5f604051808303815f87803b158015610bee575f80fd5b505af1158015610c00573d5f803e3d5ffd5b504792505f9150610c1390508383611424565b90505f610c1f82610701565b90506001600160a01b0387166108fc610c388385611424565b6040518115909202915f818181858888f19350505050158015610c5d573d5f803e3d5ffd5b505f60646069546064610c709190611424565b610c7a90846114f3565b610c84919061150a565b90505f606460695484610c9791906114f3565b610ca1919061150a565b6067546040519192506001600160a01b03169083156108fc029084905f818181858888f19350505050158015610cd9573d5f803e3d5ffd5b506068546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610d11573d5f803e3d5ffd5b505f805160206116a6833981519152838a8c604051610d3293929190611529565b60405180910390a1505050505050505050505050565b610d50610e6b565b6001600160a01b038116610db55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610354565b610dbe81610f20565b50565b610dc9610e6b565b6040516370a0823160e01b81525f906001600160a01b038416906370a0823190610df79030906004016112a6565b602060405180830381865afa158015610e12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3691906114dc565b90505f8111610e575760405162461bcd60e51b8152600401610354906113e3565b6103906001600160a01b0384168383610eca565b33610e746106f2565b6001600160a01b0316146106f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610354565b6103908363a9059cbb60e01b8484604051602401610ee9929190611578565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610fe6565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03163b151590565b5f54610100900460ff16610fa65760405162461bcd60e51b8152600401610354906115eb565b6106f06110b9565b6040516001600160a01b03808516602483015283166044820152606481018290526108a89085906323b872dd60e01b90608401610ee9565b5f61103a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110e89092919063ffffffff16565b905080515f148061105a57508080602001905181019061105a9190611591565b6103905760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610354565b5f54610100900460ff166110df5760405162461bcd60e51b8152600401610354906115eb565b6106f033610f20565b60606110f684845f856110fe565b949350505050565b60608247101561115f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610354565b5f80866001600160a01b0316858760405161117a9190611658565b5f6040518083038185875af1925050503d805f81146111b4576040519150601f19603f3d011682016040523d82523d5f602084013e6111b9565b606091505b50915091506111ca878383876111d5565b979650505050505050565b606083156112415782515f0361123a576111ee85610f71565b61123a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610354565b50816110f6565b6110f683838151156112565781518083602001fd5b8060405162461bcd60e51b81526004016103549190611673565b6001600160a01b0381168114610dbe575f80fd5b5f60208284031215611294575f80fd5b813561129f81611270565b9392505050565b6001600160a01b0391909116815260200190565b5f805f80608085870312156112cd575f80fd5b8435935060208501356112df81611270565b925060408501356112ef81611270565b9396929550929360600135925050565b5f6020828403121561130f575f80fd5b5035919050565b5f805f60608486031215611328575f80fd5b833561133381611270565b9250602084013561134381611270565b9150604084013561135381611270565b809150509250925092565b5f805f805f60a08688031215611372575f80fd5b8535945060208601359350604086013561138b81611270565b9250606086013561139b81611270565b949793965091946080013592915050565b5f80604083850312156113bd575f80fd5b82356113c881611270565b915060208301356113d881611270565b809150509250929050565b6020808252601390820152724e6f206665657320746f20776974686472617760681b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561071d5761071d611410565b5f60208284031215611447575f80fd5b815161129f81611270565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b8381101561149d5781516001600160a01b031687529582019590820190600101611478565b509495945050505050565b848152608060208201525f6114c06080830186611466565b6001600160a01b03949094166040830152506060015292915050565b5f602082840312156114ec575f80fd5b5051919050565b808202811582820484141761071d5761071d611410565b5f8261152457634e487b7160e01b5f52601260045260245ffd5b500490565b9283526001600160a01b03918216602084015216604082015260600190565b602080825260169082015275496e76616c6964206665652070657263656e7461676560501b604082015260600190565b6001600160a01b03929092168252602082015260400190565b5f602082840312156115a1575f80fd5b8151801515811461129f575f80fd5b85815284602082015260a060408201525f6115ce60a0830186611466565b6001600160a01b0394909416606083015250608001529392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f5b83811015611650578181015183820152602001611638565b50505f910152565b5f8251611669818460208701611636565b9190910192915050565b602081525f8251806020840152611691816040850160208701611636565b601f01601f1916919091016040019291505056fe2c388ce93e6aa3af3fb4d971063323144a09dd288589f4b7c6000fd395356b47a26469706673582212206847314b31f493832dd86b72580cd992b0d748b2de15a498067173712cfb4c4364736f6c63430008140033