60806040523480156200001157600080fd5b50604051620029b6380380620029b68339810160408190526200003491620006e6565b82828282828160039080519060200190620000519291906200058d565b508051620000679060049060208401906200058d565b50506006805460ff191660ff8416179055506200008760008033620000fb565b620000a460015b6040805160008082526020820190925262000264565b620000b060026200008e565b50506006805461ff00191661010017905550620000cc620003c3565b620000dd6006805461ff0019169055565b620000f26006805461ff001916610100179055565b505050620007e2565b826000808281526005602052604090206001015460ff1660028111156200013257634e487b7160e01b600052602160045260246000fd5b14620001855760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207573652061207072652d6578697374696e6720726f6c65000060448201526064015b60405180910390fd5b60008481526005602052604090206001808201805460ff191682800217905550838155620001c360028201846200041e602090811b620014e817901c565b60008481526005602052604081206001015460ff166002811115620001f857634e487b7160e01b600052602160045260246000fd5b14156200025d5760405162461bcd60e51b815260206004820152603c60248201526000805160206200299683398151915260448201527f20746f206d616e61676520616e206578636c757369766520726f6c650000000060648201526084016200017c565b5050505050565b826000808281526005602052604090206001015460ff1660028111156200029b57634e487b7160e01b600052602160045260246000fd5b14620002ea5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207573652061207072652d6578697374696e6720726f6c65000060448201526064016200017c565b600084815260056020908152604090912060018101805460ff1916600217905584815590620003299060038301908590620014f26200042e821b17901c565b60008481526005602052604081206001015460ff1660028111156200035e57634e487b7160e01b600052602160045260246000fd5b14156200025d5760405162461bcd60e51b815260206004820152603860248201526000805160206200299683398151915260448201527f20746f206d616e61676520612073686172656420726f6c65000000000000000060648201526084016200017c565b600654610100900460ff166200041c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016200017c565b565b6200042a82826200048f565b5050565b60005b81518110156200048a5762000475838383815181106200046157634e487b7160e01b600052603260045260246000fd5b60200260200101516200051060201b60201c565b806200048181620007a4565b91505062000431565b505050565b6001600160a01b038116620004f35760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742073657420616e206578636c757369766520726f6c6520746f2060448201526203078360ec1b60648201526084016200017c565b81546001600160a01b0319166001600160a01b0391909116179055565b6001600160a01b038116620005685760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74206164642030783020746f20612073686172656420726f6c650060448201526064016200017c565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b8280546200059b9062000767565b90600052602060002090601f016020900481019282620005bf57600085556200060a565b82601f10620005da57805160ff19168380011785556200060a565b828001600101855582156200060a579182015b828111156200060a578251825591602001919060010190620005ed565b50620006189291506200061c565b5090565b5b808211156200061857600081556001016200061d565b600082601f83011262000644578081fd5b81516001600160401b0380821115620006615762000661620007cc565b604051601f8301601f19908116603f011681019082821181831017156200068c576200068c620007cc565b81604052838152602092508683858801011115620006a8578485fd5b8491505b83821015620006cb5785820183015181830184015290820190620006ac565b83821115620006dc57848385830101525b9695505050505050565b600080600060608486031215620006fb578283fd5b83516001600160401b038082111562000712578485fd5b620007208783880162000633565b9450602086015191508082111562000736578384fd5b50620007458682870162000633565b925050604084015160ff811681146200075c578182fd5b809150509250925092565b600181811c908216806200077c57607f821691505b602082108114156200079e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620007c557634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b6121a480620007f26000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806373cc802a116100f9578063a9059cbb11610097578063ab3545e511610071578063ab3545e5146103a9578063d97c05be146103e1578063dd62ed3e146103f4578063f44637ba1461043a57600080fd5b8063a9059cbb14610370578063aa271e1a14610383578063aaa14ca31461039657600080fd5b80637cdc1cb9116100d35780637cdc1cb91461032f57806395d89b4114610342578063983b2d561461034a578063a457c2d71461035d57600080fd5b806373cc802a146102f657806374d0a6761461030957806379cc67901461031c57600080fd5b8063313ce5671161016657806342966c681161014057806342966c68146102875780634334614a1461029a5780636be7658b146102ad57806370a08231146102c057600080fd5b8063313ce5671461024c578063395093511461026157806340c10f191461027457600080fd5b806318160ddd1161019757806318160ddd1461021457806323b872dd146102265780633092afd51461023957600080fd5b806302846858146101be57806306fdde03146101d3578063095ea7b3146101f1575b600080fd5b6101d16101cc366004611f27565b61044d565b005b6101db6104c2565b6040516101e89190612018565b60405180910390f35b6102046101ff366004611fb5565b610554565b60405190151581526020016101e8565b6002545b6040519081526020016101e8565b610204610234366004611f7a565b61056b565b6101d1610247366004611f27565b61065d565b60065460405160ff90911681526020016101e8565b61020461026f366004611fb5565b61069c565b610204610282366004611fb5565b6106e0565b6101d1610295366004611fde565b61078e565b6102046102a8366004611f27565b610834565b6101d16102bb366004611ff6565b610852565b6102186102ce366004611f27565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101d1610304366004611f27565b610a60565b6101d1610317366004611ff6565b610aa0565b61020461032a366004611fb5565b610c89565b61020461033d366004611ff6565b610d2d565b6101db610e85565b6101d1610358366004611f27565b610e94565b61020461036b366004611fb5565b610ed5565b61020461037e366004611fb5565b610fa5565b610204610391366004611f27565b610fb2565b6101d16103a4366004611fde565b610fc6565b6103bc6103b7366004611fde565b6111b0565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b6101d16103ef366004611ff6565b6112c0565b610218610402366004611f48565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101d1610448366004611f27565b6114a9565b61045561155f565b610482600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b61048e60025b82610852565b6104bf600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b50565b6060600380546104d1906120b8565b80601f01602080910402602001604051908101604052809291908181526020018280546104fd906120b8565b801561054a5780601f1061051f5761010080835404028352916020019161054a565b820191906000526020600020905b81548152906001019060200180831161052d57829003601f168201915b5050505050905090565b60006105613384846115d2565b5060015b92915050565b6000610578848484611786565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548281101561063e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610652853361064d86856120a1565b6115d2565b506001949350505050565b61066561155f565b610692600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b61048e6001610488565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161056191859061064d908690612089565b600060016106ee8133610d2d565b61077a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53656e64657220646f6573206e6f7420686f6c6420726571756972656420726f60448201527f6c650000000000000000000000000000000000000000000000000000000000006064820152608401610635565b6107848484611a43565b5060019392505050565b600261079a8133610d2d565b610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53656e64657220646f6573206e6f7420686f6c6420726571756972656420726f60448201527f6c650000000000000000000000000000000000000000000000000000000000006064820152608401610635565b6108303383611b63565b5050565b600061083e61155f565b61084a60025b83610d2d565b90505b919050565b81600260008281526005602052604090206001015460ff1660028111156108a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1461092f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4d7573742062652063616c6c6564206f6e20616e20696e697469616c697a656460448201527f2053686172656420726f6c6500000000000000000000000000000000000000006064820152608401610635565b600083815260056020526040902054839061094a9033610d2d565b6109d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f43616e206f6e6c792062652063616c6c6564206279206120726f6c65206d616e60448201527f61676572000000000000000000000000000000000000000000000000000000006064820152608401610635565b600084815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552600390910190925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af9190a450505050565b610a6861155f565b610a95600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b61048e6000826112c0565b81600260008281526005602052604090206001015460ff166002811115610af0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14610b7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4d7573742062652063616c6c6564206f6e20616e20696e697469616c697a656460448201527f2053686172656420726f6c6500000000000000000000000000000000000000006064820152608401610635565b6000838152600560205260409020548390610b989033610d2d565b610c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f43616e206f6e6c792062652063616c6c6564206279206120726f6c65206d616e60448201527f61676572000000000000000000000000000000000000000000000000000000006064820152608401610635565b6000848152600560205260409020610c3e9060030184611d51565b604051339073ffffffffffffffffffffffffffffffffffffffff85169086907f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f90600090a450505050565b60006002610c978133610d2d565b610d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53656e64657220646f6573206e6f7420686f6c6420726571756972656420726f60448201527f6c650000000000000000000000000000000000000000000000000000000000006064820152608401610635565b6107848484611b63565b600082815260056020526040812060018082015460ff166002811115610d7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415610dab57600281015473ffffffffffffffffffffffffffffffffffffffff8481169116145b915050610565565b6002600182015460ff166002811115610ded577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415610e235773ffffffffffffffffffffffffffffffffffffffff8316600090815260038201602052604090205460ff16610da3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f496e76616c696420726f6c6549640000000000000000000000000000000000006044820152606401610635565b6060600480546104d1906120b8565b610e9c61155f565b610ec9600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b61048e60015b82610aa0565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610f96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610635565b610784338561064d86856120a1565b6000610561338484611786565b6000610fbc61155f565b61084a6001610844565b80600260008281526005602052604090206001015460ff166002811115611016577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4d7573742062652063616c6c6564206f6e20616e20696e697469616c697a656460448201527f2053686172656420726f6c6500000000000000000000000000000000000000006064820152608401610635565b816110ae8133610d2d565b61113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53656e64657220646f6573206e6f7420686f6c6420726571756972656420726f60448201527f6c650000000000000000000000000000000000000000000000000000000000006064820152608401610635565b6000838152600560209081526040808320338452600301909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513390819085907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af90600090a4505050565b600081600160008281526005602052604090206001015460ff166002811115611202577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1461128f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4d7573742062652063616c6c6564206f6e20616e20696e697469616c697a656460448201527f204578636c757369766520726f6c6500000000000000000000000000000000006064820152608401610635565b60008381526005602052604090206002015473ffffffffffffffffffffffffffffffffffffffff1691505b50919050565b81600160008281526005602052604090206001015460ff166002811115611310577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1461139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4d7573742062652063616c6c6564206f6e20616e20696e697469616c697a656460448201527f204578636c757369766520726f6c6500000000000000000000000000000000006064820152608401610635565b60008381526005602052604090205483906113b89033610d2d565b611443576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f43616e206f6e6c792062652063616c6c6564206279206120726f6c65206d616e60448201527f61676572000000000000000000000000000000000000000000000000000000006064820152608401610635565b600084815260056020526040902061145e9060020184611e1e565b604051339073ffffffffffffffffffffffffffffffffffffffff85169086907f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e74690600090a450505050565b6114b161155f565b6114de600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b61048e6002610ecf565b6108308282611e1e565b60005b815181101561155a576115488383838151811061153b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611d51565b8061155281612106565b9150506114f5565b505050565b600654610100900460ff166115d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610635565b565b73ffffffffffffffffffffffffffffffffffffffff8316611674576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610635565b73ffffffffffffffffffffffffffffffffffffffff8216611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610635565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610635565b73ffffffffffffffffffffffffffffffffffffffff82166118cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610635565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015611982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610635565b61198c82826120a1565b73ffffffffffffffffffffffffffffffffffffffff80861660009081526020819052604080822093909355908516815290812080548492906119cf908490612089565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a3591815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611ac0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610635565b8060026000828254611ad29190612089565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290611b0c908490612089565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611c06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610635565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611cbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610635565b611cc682826120a1565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604081209190915560028054849290611d019084906120a1565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611779565b73ffffffffffffffffffffffffffffffffffffffff8116611dce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f43616e6e6f74206164642030783020746f20612073686172656420726f6c65006044820152606401610635565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b73ffffffffffffffffffffffffffffffffffffffff8116611ec1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f43616e6e6f742073657420616e206578636c757369766520726f6c6520746f2060448201527f30783000000000000000000000000000000000000000000000000000000000006064820152608401610635565b81547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff91909116179055565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084d57600080fd5b600060208284031215611f38578081fd5b611f4182611f03565b9392505050565b60008060408385031215611f5a578081fd5b611f6383611f03565b9150611f7160208401611f03565b90509250929050565b600080600060608486031215611f8e578081fd5b611f9784611f03565b9250611fa560208501611f03565b9150604084013590509250925092565b60008060408385031215611fc7578182fd5b611fd083611f03565b946020939093013593505050565b600060208284031215611fef578081fd5b5035919050565b60008060408385031215612008578182fd5b82359150611f7160208401611f03565b6000602080835283518082850152825b8181101561204457858101830151858201604001528201612028565b818111156120555783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000821982111561209c5761209c61213f565b500190565b6000828210156120b3576120b361213f565b500390565b600181811c908216806120cc57607f821691505b602082108114156112ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121385761213861213f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220e11bf783fed479c29f23c41fb6b55105d9b35d8ddc488a01ca22d678bee3577464736f6c63430008040033417474656d7074656420746f2075736520616e20696e76616c696420726f6c65000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000195553445420446f6d696e616e6365202853657020323032322900000000000000000000000000000000000000000000000000000000000000000000000000000d55534454444f4d2d534550323200000000000000000000000000000000000000