0x60a06040523060805234801561001457600080fd5b50608051611ebd61004c60003960008181610772015281816107b2015281816108510152818161089101526109240152611ebd6000f3fe60806040526004361061014b5760003560e01c80638da5cb5b116100b6578063c92c514f1161006f578063c92c514f146103cb578063eb12d61e146103eb578063ecd0c0c31461040b578063f2fde38b1461042b578063f699343e1461044b578063fbd9714e1461046157600080fd5b80638da5cb5b146102e65780639835b0af1461030457806399a5d7471461031a578063a626c0891461033a578063bab89e7b1461035a578063c34b44a0146103ab57600080fd5b806352957a031161010857806352957a031461024257806352d1902d146102665780635a65bafc1461027b5780635a9e497d1461029b578063715018a6146102b15780637334fa49146102c657600080fd5b806323375b681461015057806326a4e8d21461018d578063316c312d146101af5780633659cfe6146101cf57806336602345146101ef5780634f1ef2861461022f575b600080fd5b34801561015c57600080fd5b5060d054610170906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019957600080fd5b506101ad6101a8366004611a43565b61047c565b005b3480156101bb57600080fd5b506101ad6101ca366004611a5e565b6104a6565b3480156101db57600080fd5b506101ad6101ea366004611a43565b610768565b3480156101fb57600080fd5b5061021f61020a366004611aa4565b60cf6020526000908152604090205460ff1681565b6040519015158152602001610184565b6101ad61023d366004611ad3565b610847565b34801561024e57600080fd5b5061025860ca5481565b604051908152602001610184565b34801561027257600080fd5b50610258610917565b34801561028757600080fd5b506101ad610296366004611b95565b6109ca565b3480156102a757600080fd5b5061025860cc5481565b3480156102bd57600080fd5b506101ad610b1a565b3480156102d257600080fd5b506102586102e1366004611a5e565b610b2e565b3480156102f257600080fd5b506033546001600160a01b0316610170565b34801561031057600080fd5b5061025860cd5481565b34801561032657600080fd5b50610258610335366004611aa4565b610d84565b34801561034657600080fd5b506101ad610355366004611bbf565b610dae565b34801561036657600080fd5b50610394610375366004611a43565b60ce602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610184565b3480156103b757600080fd5b506101ad6103c6366004611a43565b610dcf565b3480156103d757600080fd5b506101ad6103e6366004611beb565b610e8f565b3480156103f757600080fd5b506101ad610406366004611a43565b611158565b34801561041757600080fd5b5060c954610170906001600160a01b031681565b34801561043757600080fd5b506101ad610446366004611a43565b611215565b34801561045757600080fd5b5061025860cb5481565b34801561046d57600080fd5b506102586001600160781b0381565b61048461128b565b60d080546001600160a01b0319166001600160a01b0392909216919091179055565b8160a0013560ca548110156105025760405162461bcd60e51b815260206004820152601b60248201527f616d6f756e74206d757374206265203e3d205f6d696e6c696d6974000000000060448201526064015b60405180910390fd5b6001600160781b038111156105595760405162461bcd60e51b815260206004820152601b60248201527f616d6f756e74206d757374206265203e3d205f6d61786c696d6974000000000060448201526064016104f9565b60006105658484610b2e565b60d0546040516370a0823160e01b815230600482015291925060a0860135916001600160a01b03909116906370a08231906024016020604051808303816000875af11580156105b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dc9190611c0d565b10156105fa5760405162461bcd60e51b81526004016104f990611c26565b60006106098560a00135610d84565b60d0549091506001600160a01b031663a9059cbb61062a6020880188611a43565b6106388460a08a0135611c73565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b505050508060cd60008282546106a89190611c86565b9091555050600082815260cf60209081526040909120805460ff191660011790556106d590860186611a43565b6001600160a01b03166020860135837f7143e877c9cce1dd0a9af346ee757b87916a6819a9ff03779712a8777e7116aa604089013560608a013561071f60a08c0160808d01611c99565b60408051938452602084019290925267ffffffffffffffff169082015260a0808b0135606083015260c0808c013560808401529082018790520160405180910390a45050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107b05760405162461bcd60e51b81526004016104f990611cc3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107f9600080516020611e41833981519152546001600160a01b031690565b6001600160a01b03161461081f5760405162461bcd60e51b81526004016104f990611d0f565b610828816112e5565b60408051600080825260208201909252610844918391906112ed565b50565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361088f5760405162461bcd60e51b81526004016104f990611cc3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166108d8600080516020611e41833981519152546001600160a01b031690565b6001600160a01b0316146108fe5760405162461bcd60e51b81526004016104f990611d0f565b610907826112e5565b610913828260016112ed565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109b75760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016104f9565b50600080516020611e4183398151915290565b6109d261128b565b8060cd541015610a245760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74206665652062616c616e6365000000000000000060448201526064016104f9565b60d0546040516370a0823160e01b815230600482015282916001600160a01b0316906370a08231906024016020604051808303816000875af1158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a929190611c0d565b1015610ab05760405162461bcd60e51b81526004016104f990611c26565b60d05460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401600060405180830381600087803b158015610afe57600080fd5b505af1158015610b12573d6000803e3d6000fd5b505050505050565b610b2261128b565b610b2c600061145d565b565b600080610b3e6020850185611a43565b602085013560408601356060870135610b5d60a0890160808a01611c99565b60405160609590951b6bffffffffffffffffffffffff1916602086015260348501939093526054840191909152607483015260c090811b6001600160c01b031916609483015260a0860135609c83015285013560bc82015260dc0160408051601f198184030181529181528151602092830120600081815260cf90935291205490915060ff1615610c285760405162461bcd60e51b81526020600482015260156024820152741cda59db88185b1c9958591e48195e1958dd5d1959605a1b60448201526064016104f9565b600060ce6000610ca4610c88856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b610c956020890189611d5b565b886020013589604001356114af565b6001600160a01b0316815260208082019290925260409081016000208151808301909252805460ff1615158083526001918201549383019390935290925014610d205760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b4b3b732b960911b60448201526064016104f9565b80602001518560c001351080610d3857506020810151155b610d7a5760405162461bcd60e51b81526020600482015260136024820152727369676e6564206166746572207265766f6b6560681b60448201526064016104f9565b5090505b92915050565b600061271060cb5483610d979190611d7e565b610da19190611d95565b60cc54610d7e9190611c86565b610db661128b565b610dc18383836114d7565b60ca9290925560cb5560cc55565b610dd761128b565b6001600160a01b038116600090815260ce602052604090205460ff161515600114610e385760405162461bcd60e51b81526020600482015260116024820152707369676e6572206e6f742065786973747360781b60448201526064016104f9565b6001600160a01b038116600081815260ce60209081526040918290204260019091015590519182527f99a705a3c2c3339d0051f56b36a60fef91e30142c93353002617999f27aec4af91015b60405180910390a150565b8060ca54811015610ee25760405162461bcd60e51b815260206004820152601b60248201527f616d6f756e74206d757374206265203e3d205f6d696e6c696d6974000000000060448201526064016104f9565b6001600160781b03811115610f395760405162461bcd60e51b815260206004820152601b60248201527f616d6f756e74206d757374206265203e3d205f6d61786c696d6974000000000060448201526064016104f9565b60d0546040516370a0823160e01b815233600482015283916001600160a01b0316906370a08231906024016020604051808303816000875af1158015610f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa79190611c0d565b1015610fc55760405162461bcd60e51b81526004016104f990611c26565b60d054604051636eb1769f60e11b815233600482015230602482015283916001600160a01b03169063dd62ed3e906044016020604051808303816000875af1158015611015573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110399190611c0d565b10156110875760405162461bcd60e51b815260206004820152601b60248201527f616c6c6f77616e6365206d757374206265203e3d20616d6f756e74000000000060448201526064016104f9565b60d0546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401600060405180830381600087803b1580156110d957600080fd5b505af11580156110ed573d6000803e3d6000fd5b5050505060006110fc83610d84565b90508060cd60008282546111109190611c86565b90915550506040805184815260208101839052859133917fc46a1f50d20b9816de52e16adad0c2061013c4bb39bd232fc576a145ae6038f4910160405180910390a350505050565b61116061128b565b6001600160a01b038116600090815260ce602052604090205460ff16156111c15760405162461bcd60e51b81526020600482015260156024820152747369676e657220616c72656164792065786973747360581b60448201526064016104f9565b6001600160a01b038116600081815260ce6020908152604091829020805460ff1916600117905590519182527fffafe5c39be83f4bcf20d7e1a150f6e21c1858ea0948315ba84b6b1c386d45bb9101610e84565b61121d61128b565b6001600160a01b0381166112825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104f9565b6108448161145d565b6033546001600160a01b03163314610b2c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f9565b61084461128b565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156113255761132083611545565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561137f575060408051601f3d908101601f1916820190925261137c91810190611c0d565b60015b6113e25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016104f9565b600080516020611e4183398151915281146114515760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016104f9565b506113208383836115e1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008060006114c087878787611606565b915091506114cd816116f3565b5095945050505050565b60006127106114e68486611d7e565b6114f09190611d95565b6114fa9083611c86565b90508084101561153f5760405162461bcd60e51b815260206004820152601060248201526f696e76616c69642073657474696e677360801b60448201526064016104f9565b50505050565b6001600160a01b0381163b6115b25760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016104f9565b600080516020611e4183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6115ea836118a9565b6000825111806115f75750805b156113205761153f83836118e9565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561163d57506000905060036116ea565b8460ff16601b1415801561165557508460ff16601c14155b1561166657506000905060046116ea565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156116ba573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166116e3576000600192509250506116ea565b9150600090505b94509492505050565b600081600481111561170757611707611db7565b0361170f5750565b600181600481111561172357611723611db7565b036117705760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104f9565b600281600481111561178457611784611db7565b036117d15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104f9565b60038160048111156117e5576117e5611db7565b0361183d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104f9565b600481600481111561185157611851611db7565b036108445760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016104f9565b6118b281611545565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6119515760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016104f9565b600080846001600160a01b03168460405161196c9190611df1565b600060405180830381855af49150503d80600081146119a7576040519150601f19603f3d011682016040523d82523d6000602084013e6119ac565b606091505b50915091506119d48282604051806060016040528060278152602001611e61602791396119dd565b95945050505050565b606083156119ec5750816119f6565b6119f683836119fd565b9392505050565b815115611a0d5781518083602001fd5b8060405162461bcd60e51b81526004016104f99190611e0d565b80356001600160a01b0381168114611a3e57600080fd5b919050565b600060208284031215611a5557600080fd5b6119f682611a27565b600080828403610140811215611a7357600080fd5b60e0811215611a8157600080fd5b839250606060df1982011215611a9657600080fd5b5060e0830190509250929050565b600060208284031215611ab657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611ae657600080fd5b611aef83611a27565b9150602083013567ffffffffffffffff80821115611b0c57600080fd5b818501915085601f830112611b2057600080fd5b813581811115611b3257611b32611abd565b604051601f8201601f19908116603f01168101908382118183101715611b5a57611b5a611abd565b81604052828152886020848701011115611b7357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008060408385031215611ba857600080fd5b611bb183611a27565b946020939093013593505050565b600080600060608486031215611bd457600080fd5b505081359360208301359350604090920135919050565b60008060408385031215611bfe57600080fd5b50508035926020909101359150565b600060208284031215611c1f57600080fd5b5051919050565b6020808252601a908201527f696e73756666696369656e7420746f6b656e2062616c616e6365000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d7e57610d7e611c5d565b80820180821115610d7e57610d7e611c5d565b600060208284031215611cab57600080fd5b813567ffffffffffffffff811681146119f657600080fd5b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215611d6d57600080fd5b813560ff811681146119f657600080fd5b8082028115828204841417610d7e57610d7e611c5d565b600082611db257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b60005b83811015611de8578181015183820152602001611dd0565b50506000910152565b60008251611e03818460208701611dcd565b9190910192915050565b6020815260008251806020840152611e2c816040850160208701611dcd565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201a7884e33f443ccb8f4339c808076c82a2888be81d1eb3068317be6d66a6556e64736f6c63430008110033