0x608060405234801561000f575f80fd5b506112ee8061001d5f395ff3fe6080604052600436106100dc575f3560e01c80638da5cb5b1161007c578063e06174e411610057578063e06174e41461022f578063f2fde38b1461025e578063f887ea401461027d578063f8c8765e1461029c575f80fd5b80638da5cb5b146101d457806393cf97f8146101f1578063bac86af514610210575f80fd5b80634a945f8d116100b75780634a945f8d14610163578063573ea5751461018257806361d027b3146101a1578063715018a6146101c0575f80fd5b80630c85295b146100e75780631e6df0531461010857806322be3de114610127575f80fd5b366100e357005b5f80fd5b3480156100f2575f80fd5b50610106610101366004610f5b565b6102bb565b005b348015610113575f80fd5b50610106610122366004610fc2565b610521565b348015610132575f80fd5b50606654610146906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561016e575f80fd5b5061010661017d366004610ff3565b61053c565b34801561018d575f80fd5b50606754610146906001600160a01b031681565b3480156101ac575f80fd5b50606554610146906001600160a01b031681565b3480156101cb575f80fd5b506101066105f6565b3480156101df575f80fd5b506033546001600160a01b0316610146565b3480156101fc575f80fd5b5061010661020b3660046110d8565b610609565b34801561021b575f80fd5b5061010661022a366004611172565b610641565b34801561023a575f80fd5b50606954606a54610249919082565b6040805192835260208301919091520161015a565b348015610269575f80fd5b506101066102783660046111a7565b61075f565b348015610288575f80fd5b50606854610146906001600160a01b031681565b3480156102a7575f80fd5b506101066102b6366004610ff3565b6107d8565b6067546001600160a01b031633146102d1575f80fd5b5f5b8181101561045b578484828181106102ed576102ed6111c0565b905060200201602081019061030291906111a7565b6001600160a01b03167f5cf069f6412972a6c15aa4f5d0a340bfc369c3118f4cf8960b568ffe7ae4621386868481811061033e5761033e6111c0565b905060200201602081019061035391906111a7565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103bb91906111d4565b60405190815260200160405180910390a26104538585838181106103e1576103e16111c0565b90506020020160208101906103f691906111a7565b848484818110610408576104086111c0565b905060200281019061041a91906111eb565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061092592505050565b6001016102d3565b506066546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156104a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c691906111d4565b6065546066549192506104e6916001600160a01b03908116911683610a1a565b6040518181527f80f97f878e16410266694f134ddf012f2be424f54f8b5cafa107eccc51d00d58906020015b60405180910390a15050505050565b610529610a7d565b803560695560200135606a55565b505050565b610544610a7d565b6001600160a01b0384161561056f57606680546001600160a01b0319166001600160a01b0386161790555b6001600160a01b0383161561059a57606880546001600160a01b0319166001600160a01b0385161790555b6001600160a01b038216156105c557606780546001600160a01b0319166001600160a01b0384161790555b6001600160a01b038116156105f057606580546001600160a01b0319166001600160a01b0383161790555b50505050565b6105fe610a7d565b6106075f610ad7565b565b826105375781515f03610639578060405162461bcd60e51b81526004016106309190611250565b60405180910390fd5b815182602001fd5b610649610a7d565b80156106dd5760405147905f90339083908381818185875af1925050503d805f8114610690576040519150601f19603f3d011682016040523d82523d5f602084013e610695565b606091505b50509050806105f05760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610630565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610721573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074591906111d4565b90506105376001600160a01b0384163383610a1a565b5050565b610767610a7d565b6001600160a01b0381166107cc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610630565b6107d581610ad7565b50565b5f54610100900460ff16158080156107f657505f54600160ff909116105b8061080f5750303b15801561080f57505f5460ff166001145b6108725760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610630565b5f805460ff191660011790558015610893575f805461ff0019166101001790555b606680546001600160a01b038087166001600160a01b03199283161790925560658054888416908316179055606780548684169083161790556068805492851692909116919091179055801561091e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610512565b5050505050565b60685461093c9083906001600160a01b0316610b28565b6068546040515f9182916001600160a01b039091169061095d908590611282565b5f604051808303815f865af19150503d805f8114610996576040519150601f19603f3d011682016040523d82523d5f602084013e61099b565b606091505b50915091506109c8828260405180604001604052806005815260200164062d2dcc6d60db1b815250610609565b6001821515146105f05760405162461bcd60e51b815260206004820152601a60248201527f63616c6c696e672031696e636820676f7420616e206572726f720000000000006044820152606401610630565b6040516001600160a01b03831660248201526044810182905261053790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610bb1565b6033546001600160a01b031633146106075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610630565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b604051636eb1769f60e11b81523060048201526001600160a01b03828116602483015283169063dd62ed3e90604401602060405180830381865afa158015610b72573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9691906111d4565b5f0361075b5761075b6001600160a01b038316825f19610c82565b5f610c05826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d959092919063ffffffff16565b8051909150156105375780806020019051810190610c23919061129d565b6105375760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610630565b801580610cfa5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015610cd4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf891906111d4565b155b610d655760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610630565b6040516001600160a01b03831660248201526044810182905261053790849063095ea7b360e01b90606401610a46565b6060610da384845f85610dad565b90505b9392505050565b606082471015610e0e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610630565b6001600160a01b0385163b610e655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610630565b5f80866001600160a01b03168587604051610e809190611282565b5f6040518083038185875af1925050503d805f8114610eba576040519150601f19603f3d011682016040523d82523d5f602084013e610ebf565b606091505b5091509150610ecf828286610eda565b979650505050505050565b60608315610ee9575081610da6565b825115610ef95782518084602001fd5b8160405162461bcd60e51b81526004016106309190611250565b5f8083601f840112610f23575f80fd5b50813567ffffffffffffffff811115610f3a575f80fd5b6020830191508360208260051b8501011115610f54575f80fd5b9250929050565b5f805f8060408587031215610f6e575f80fd5b843567ffffffffffffffff80821115610f85575f80fd5b610f9188838901610f13565b90965094506020870135915080821115610fa9575f80fd5b50610fb687828801610f13565b95989497509550505050565b5f60408284031215610fd2575f80fd5b50919050565b80356001600160a01b0381168114610fee575f80fd5b919050565b5f805f8060808587031215611006575f80fd5b61100f85610fd8565b935061101d60208601610fd8565b925061102b60408601610fd8565b915061103960608601610fd8565b905092959194509250565b80151581146107d5575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff8084111561107f5761107f611051565b604051601f8501601f19908116603f011681019082821181831017156110a7576110a7611051565b816040528093508581528686860111156110bf575f80fd5b858560208301375f602087830101525050509392505050565b5f805f606084860312156110ea575f80fd5b83356110f581611044565b9250602084013567ffffffffffffffff80821115611111575f80fd5b818601915086601f830112611124575f80fd5b61113387833560208501611065565b93506040860135915080821115611148575f80fd5b508401601f81018613611159575f80fd5b61116886823560208401611065565b9150509250925092565b5f8060408385031215611183575f80fd5b61118c83610fd8565b9150602083013561119c81611044565b809150509250929050565b5f602082840312156111b7575f80fd5b610da682610fd8565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156111e4575f80fd5b5051919050565b5f808335601e19843603018112611200575f80fd5b83018035915067ffffffffffffffff82111561121a575f80fd5b602001915036819003821315610f54575f80fd5b5f5b83811015611248578181015183820152602001611230565b50505f910152565b602081525f825180602084015261126e81604085016020870161122e565b601f01601f19169190910160400192915050565b5f825161129381846020870161122e565b9190910192915050565b5f602082840312156112ad575f80fd5b8151610da68161104456fea2646970667358221220028d4017627e8eea69856abd84a42d15fec56566ea4daf941761251b7e819cad64736f6c63430008170033