60806040523480156200001157600080fd5b50604051620023a5380380620023a5833981016040819052620000349162000398565b6001600160a01b038216620000905760405162461bcd60e51b815260206004820152601560248201527f5a65726f2061646472657373206465746563746564000000000000000000000060448201526064015b60405180910390fd5b8551620000a590600490602089019062000222565b508451620000bb90600390602088019062000222565b50620000c8848462000436565b600555600780546001600160a01b0319166001600160a01b038416179055620000f9620000f23390565b856200013d565b60075462000111906001600160a01b0316846200013d565b600a80546001600160a01b0319166001600160a01b039290921691909117905550620004ae9350505050565b6001600160a01b038216620001955760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000087565b8060026000828254620001a9919062000436565b90915550506001600160a01b03821660009081526020819052604081208054839290620001d890849062000436565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b82805462000230906200045b565b90600052602060002090601f0160209004810192826200025457600085556200029f565b82601f106200026f57805160ff19168380011785556200029f565b828001600101855582156200029f579182015b828111156200029f57825182559160200191906001019062000282565b50620002ad929150620002b1565b5090565b5b80821115620002ad5760008155600101620002b2565b80516001600160a01b0381168114620002e057600080fd5b919050565b600082601f830112620002f6578081fd5b81516001600160401b038082111562000313576200031362000498565b604051601f8301601f19908116603f011681019082821181831017156200033e576200033e62000498565b816040528381526020925086838588010111156200035a578485fd5b8491505b838210156200037d57858201830151818301840152908201906200035e565b838211156200038e57848385830101525b9695505050505050565b60008060008060008060c08789031215620003b1578182fd5b86516001600160401b0380821115620003c8578384fd5b620003d68a838b01620002e5565b97506020890151915080821115620003ec578384fd5b50620003fb89828a01620002e5565b95505060408701519350606087015192506200041a60808801620002c8565b91506200042a60a08801620002c8565b90509295509295509295565b600082198211156200045657634e487b7160e01b81526011600452602481fd5b500190565b600181811c908216806200047057607f821691505b602082108114156200049257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611ee780620004be6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806361d027b311610104578063a457c2d7116100a2578063bf9e7a1211610071578063bf9e7a12146103f6578063dd62ed3e14610416578063f0f442601461045c578063f887ea401461046f57600080fd5b8063a457c2d7146103bd578063a8a778ae146103d0578063a9059cbb146103e3578063b4f56b261461027c57600080fd5b8063715018a6116100de578063715018a61461038757806379cc67901461038f57806395d89b41146103a257806398ee20ab146103aa57600080fd5b806361d027b31461031e5780636e0bca301461033e57806370a082311461035157600080fd5b806340c10f19116101715780634437152a1161014b5780634437152a146102b55780634755abbb146102c85780634bbf179b1461030d57806351e238e31461031557600080fd5b806340c10f191461027c57806341cb87fc1461028f57806342966c68146102a257600080fd5b806318160ddd116101ad57806318160ddd1461022a57806323b872dd1461023c578063313ce5671461024f578063395093511461026957600080fd5b806306fdde03146101d4578063095ea7b3146101f25780630a738e1a14610215575b600080fd5b6101dc61048f565b6040516101e99190611d6a565b60405180910390f35b610205610200366004611d09565b61051d565b60405190151581526020016101e9565b610228610223366004611c7b565b610535565b005b6002545b6040519081526020016101e9565b61020561024a366004611cce565b6106b1565b610257601281565b60405160ff90911681526020016101e9565b610205610277366004611d09565b6106d5565b61022861028a366004611d09565b610721565b61022861029d366004611c7b565b6108af565b6102286102b0366004611d52565b6109f4565b6102286102c3366004611c7b565b610a01565b6006546102e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b60055461022e565b61022e60055481565b6007546102e89073ffffffffffffffffffffffffffffffffffffffff1681565b61022861034c366004611d52565b610b46565b61022e61035f366004611c7b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610228610d38565b61022861039d366004611d09565b610e09565b6101dc610e55565b6102286103b8366004611c7b565b610e62565b6102056103cb366004611d09565b610fb7565b6102286103de366004611d09565b611088565b6102056103f1366004611d09565b61120e565b600a546102e89073ffffffffffffffffffffffffffffffffffffffff1681565b61022e610424366004611c9c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61022861046a366004611c7b565b61121c565b6008546102e89073ffffffffffffffffffffffffffffffffffffffff1681565b6004805461049c90611e0a565b80601f01602080910402602001604051908101604052809291908181526020018280546104c890611e0a565b80156105155780601f106104ea57610100808354040283529160200191610515565b820191906000526020600020905b8154815290600101906020018083116104f857829003601f168201915b505050505081565b60003361052b818585611361565b5060019392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146105bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f596f7520617265206e6f7420616e206f776e657200000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5a65726f2061646472657373206465746563746564000000000000000000000060448201526064016105b2565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ae1d418613b3028604d9c6b818ff9f3100342a6ebc7cfc239814849cb271ec79060200160405180910390a150565b6000336106bf858285611514565b6106ca8585856115eb565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061052b908290869061071c908790611ddb565b611361565b6009546040517f147216c800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063147216c89060240160206040518083038186803b15801561078a57600080fd5b505afa15801561079e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c29190611d32565b1515600114610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f6e6c792078736420706f6f6c732063616e206d696e74206e65772042616e6b60448201527f580000000000000000000000000000000000000000000000000000000000000060648201526084016105b2565b61085d828261189e565b60405181815273ffffffffffffffffffffffffffffffffffffffff83169030907f17f7274ec45c1f9d3beaafb36740cc4c1991b98c1f78001089b69d0d83ce1335906020015b60405180910390a35050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f596f7520617265206e6f7420616e206f776e657200000000000000000000000060448201526064016105b2565b73ffffffffffffffffffffffffffffffffffffffff81166109ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5a65726f2061646472657373206465746563746564000000000000000000000060448201526064016105b2565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6109fe33826119bb565b50565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610a82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f596f7520617265206e6f7420616e206f776e657200000000000000000000000060448201526064016105b2565b73ffffffffffffffffffffffffffffffffffffffff8116610aff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5a65726f2061646472657373206465746563746564000000000000000000000060448201526064016105b2565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60085473ffffffffffffffffffffffffffffffffffffffff163314610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4f6e6c7920526f757465722063616e2061636365737320746869732066756e6360448201527f74696f6e0000000000000000000000000000000000000000000000000000000060648201526084016105b2565b60055460025411610c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f42616e6b58206d757374206265206465666c6174696f6e61727900000000000060448201526064016105b2565b600654610c7c9073ffffffffffffffffffffffffffffffffffffffff16826119bb565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b50506040518381523092503391507f8bd0699e2858d971e599b339ffc91ccb79c9d9b934e3e509fdad65513fc5aa809060200160405180910390a350565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f6e6c792074686520736d61727420636f6e7472616374206f776e657220636160448201527f6e2061636365737320746869732066756e6374696f6e0000000000000000000060648201526084016105b2565b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6000610e3982604051806060016040528060248152602001611e8e60249139610e328633610424565b9190611ba8565b9050610e46833383611361565b610e5083836119bb565b505050565b6003805461049c90611e0a565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610f09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f6e6c792074686520736d61727420636f6e7472616374206f776e657220636160448201527f6e2061636365737320746869732066756e6374696f6e0000000000000000000060648201526084016105b2565b33610f70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5a65726f2061646472657373206465746563746564000000000000000000000060448201526064016105b2565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091908381101561107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016105b2565b6106ca8286868403611361565b6009546040517f147216c800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063147216c89060240160206040518083038186803b1580156110f157600080fd5b505afa158015611105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111299190611d32565b15156001146111ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f6e6c792078736420706f6f6c732063616e206d696e74206e65772042616e6b60448201527f580000000000000000000000000000000000000000000000000000000000000060648201526084016105b2565b6111c48282611bee565b604051818152309073ffffffffffffffffffffffffffffffffffffffff8416907f8bd0699e2858d971e599b339ffc91ccb79c9d9b934e3e509fdad65513fc5aa80906020016108a3565b60003361052b8185856115eb565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f596f7520617265206e6f7420616e206f776e657200000000000000000000000060448201526064016105b2565b73ffffffffffffffffffffffffffffffffffffffff811661131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f547265617375727920616464726573732063616e6e6f7420626520300000000060448201526064016105b2565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8316611403576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105b2565b73ffffffffffffffffffffffffffffffffffffffff82166114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016105b2565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115e557818110156115d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105b2565b6115e58484848403611361565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105b2565b73ffffffffffffffffffffffffffffffffffffffff8216611731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105b2565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156117e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016105b2565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822085850390559185168152908120805484929061182b908490611ddb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161189191815260200190565b60405180910390a36115e5565b73ffffffffffffffffffffffffffffffffffffffff821661191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105b2565b806002600082825461192d9190611ddb565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290611967908490611ddb565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016108a3565b5050565b73ffffffffffffffffffffffffffffffffffffffff8216611a5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016105b2565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611b14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016105b2565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290611b50908490611df3565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60008184841115611be6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b29190611d6a565b505050900390565b611bf882826119bb565b6119b7823361071c84604051806060016040528060248152602001611e8e6024913973ffffffffffffffffffffffffffffffffffffffff881660009081526001602090815260408083203384529091529020549190611ba8565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c7657600080fd5b919050565b600060208284031215611c8c578081fd5b611c9582611c52565b9392505050565b60008060408385031215611cae578081fd5b611cb783611c52565b9150611cc560208401611c52565b90509250929050565b600080600060608486031215611ce2578081fd5b611ceb84611c52565b9250611cf960208501611c52565b9150604084013590509250925092565b60008060408385031215611d1b578182fd5b611d2483611c52565b946020939093013593505050565b600060208284031215611d43578081fd5b81518015158114611c95578182fd5b600060208284031215611d63578081fd5b5035919050565b6000602080835283518082850152825b81811015611d9657858101830151858201604001528201611d7a565b81811115611da75783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008219821115611dee57611dee611e5e565b500190565b600082821015611e0557611e05611e5e565b500390565b600181811c90821680611e1e57607f821691505b60208210811415611e58577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfe45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122007c2f4c6674af49d21a6204f9f35e9048fb4bfd22d07db43e02c5fa1246cd37964736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000a968163f0a57b400000000000000000000000000000000000000000000003a441a91bba6e44889800000000000000000000000000004b3607a868044ebd88d9326bca7e1d8ad51ae48a00000000000000000000000003e33bab8414bdb433e883785f91ede95f0f4dfe000000000000000000000000000000000000000000000000000000000000000a42616e6b58546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000542616e6b58000000000000000000000000000000000000000000000000000000