60a06040523480156200001157600080fd5b506200001f6000336200005d565b6040516200002d90620001c6565b604051809103906000f0801580156200004a573d6000803e3d6000fd5b506001600160a01b0316608052620001d4565b6200006982826200006d565b5050565b620000848282620000b060201b62000f021760201c565b6000828152600360209081526040909120620000ab91839062000fa462000154821b17901c565b505050565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff16620000695760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001103390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200016b836001600160a01b03841662000174565b90505b92915050565b6000818152600183016020526040812054620001bd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200016e565b5060006200016e565b61048980620023c683390190565b6080516121cf620001f7600039600081816103830152610d7b01526121cf6000f3fe608060405234801561001057600080fd5b50600436106101ad5760003560e01c80639010d07c116100ee578063ca15c87311610097578063d81d0a1511610071578063d81d0a1514610420578063e775f72214610433578063e985e9c514610446578063f242432a1461048257600080fd5b8063ca15c873146103d3578063d5391393146103e6578063d547741f1461040d57600080fd5b8063a217fddf116100c8578063a217fddf146103a5578063a22cb465146103ad578063ada8f919146103c057600080fd5b80639010d07c1461033257806391d1485414610345578063959568081461037e57600080fd5b80632f2ff15d1161015b5780634e1273f4116101355780634e1273f414610295578063511aed5e146102b55780636c3d7352146102c85780638e4a964b1461030957600080fd5b80632f2ff15d1461026657806336568abe146102795780633a5f56d01461028c57600080fd5b8063156e29f61161018c578063156e29f61461021b578063248a9ca3146102305780632eb2c2d61461025357600080fd5b8062fdd58e146101b257806301ffc9a7146101d85780630e89341c146101fb575b600080fd5b6101c56101c0366004611946565b610490565b6040519081526020015b60405180910390f35b6101eb6101e6366004611970565b6104fb565b60405190151581526020016101cf565b61020e61020936600461199a565b610539565b6040516101cf91906119e3565b61022e610229366004611a16565b610607565b005b6101c561023e36600461199a565b60009081526002602052604090206001015490565b61022e610261366004611b8e565b610620565b61022e610274366004611c38565b610652565b61022e610287366004611c38565b610677565b6101c560045481565b6102a86102a3366004611cb0565b610708565b6040516101cf9190611d57565b61022e6102c3366004611c38565b6107dd565b6102f16102d636600461199a565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101cf565b6102f161031736600461199a565b6006602052600090815260409020546001600160a01b031681565b6102f1610340366004611d6a565b610a2b565b6101eb610353366004611c38565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102f17f000000000000000000000000000000000000000000000000000000000000000081565b6101c5600081565b61022e6103bb366004611d9a565b610a43565b61022e6103ce366004611dd1565b610af2565b6101c56103e136600461199a565b610bd1565b6101c57f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61022e61041b366004611c38565b610be8565b61022e61042e366004611dec565b610c0d565b6101c5610441366004611e6d565b610cf9565b6101eb610454366004611edf565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61022e610261366004611f09565b60006001600160a01b0383166104d2576040517feac1a23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b031982167f2a06d4c10000000000000000000000000000000000000000000000000000000014806104f557506104f582610fb9565b6000818152600660205260409020546060906001600160a01b03168061058b576040517fc83e2c7900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b031663eac989f86040518163ffffffff1660e01b815260040160006040518083038186803b1580156105c457600080fd5b505afa1580156105d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106009190810190611f6e565b9392505050565b61061082610ff7565b61061b838383611050565b505050565b6040517fb07dbfe100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526002602052604090206001015461066d816110fb565b61061b8383611105565b6001600160a01b03811633146106fa5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6107048282611127565b5050565b60606107148483611149565b60008467ffffffffffffffff81111561072f5761072f611a49565b604051908082528060200260200182016040528015610758578160200160208202803683370190505b50905060005b858110156107d3576107ae87878381811061077b5761077b611fe5565b90506020020160208101906107909190611dd1565b8686848181106107a2576107a2611fe5565b90506020020135610490565b8282815181106107c0576107c0611fe5565b602090810291909101015260010161075e565b5095945050505050565b8115806107eb575060045482115b15610822576040517f76d142ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600560205260409020546001600160a01b03163314801590610851575061084f600033610353565b155b15610891576040517ffd7fda08000000000000000000000000000000000000000000000000000000008152336004820152602481018390526044016106f1565b6040516301ffc9a760e01b8152631d59313f60e31b60048201526001600160a01b038216906301ffc9a79060240160206040518083038186803b1580156108d757600080fd5b505afa1580156108eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090f9190611ffb565b610945576040517f1114c18300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091558151631d59313f60e31b81529151849386937f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b939263eac989f892600480840193919291829003018186803b1580156109d557600080fd5b505afa1580156109e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a119190810190611f6e565b604051610a1e91906119e3565b60405180910390a2505050565b60008281526003602052604081206106009083611182565b336001600160a01b0383161415610a86576040517f3ec1ed4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b038116610b32576040517f0e2904e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116331415610b75576040517f7e75469900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b80600033610353565b610bb8576040517fb435437d0000000000000000000000000000000000000000000000000000000081523360048201526024016106f1565b610bc3600033611127565b610bce600082611105565b50565b60008181526003602052604081206104f59061118e565b600082815260026020526040902060010154610c03816110fb565b61061b8383611127565b821580610c18575080155b15610c4f576040517f0fd0216900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b83811015610c8357610c7b858583818110610c6f57610c6f611fe5565b90506020020135610ff7565b600101610c52565b50610cf2858585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080890282810182019093528882529093508892508791829185019084908082843760009201919091525061119892505050565b5050505050565b6000610d036112a3565b6000600460008154610d149061202e565b9182905550600081815260056020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916339081179091559051929350839290917fc6365b1bc5952aefef206a726a6544ebfed4e1a8416925341d1ef083cdb8666e91a36000610d9f7f0000000000000000000000000000000000000000000000000000000000000000611307565b6040517f3a171e040000000000000000000000000000000000000000000000000000000081529091506001600160a01b03821690633a171e0490610de99088908890600401612049565b600060405180830381600087803b158015610e0357600080fd5b505af1158015610e17573d6000803e3d6000fd5b505050600083815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386169081179091558151631d59313f60e31b815291518694507f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b93919263eac989f8926004808301939192829003018186803b158015610ea957600080fd5b505afa158015610ebd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ee59190810190611f6e565b604051610ef291906119e3565b60405180910390a2509392505050565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff166107045760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610f603390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610600836001600160a01b0384166113c2565b60006001600160e01b031982167f5a05180f0000000000000000000000000000000000000000000000000000000014806104f557506104f582611411565b6000818152600560205260409020546001600160a01b03163314610bce576040517f4a7b1de9000000000000000000000000000000000000000000000000000000008152336004820152602481018290526044016106f1565b6001600160a01b038316611077576040516301dcc4ab60e31b815260040160405180910390fd5b6000828152602081815260408083206001600160a01b0387168452909152812080548392906110a7908490612078565b909155505060408051838152602081018390526001600160a01b0385169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a4505050565b610bce813361144f565b61110f8282610f02565b600082815260036020526040902061061b9082610fa4565b61113182826114cf565b600082815260036020526040902061061b9082611552565b808214610704576040517f43714afd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006106008383611567565b60006104f5825490565b6001600160a01b0383166111bf576040516301dcc4ab60e31b815260040160405180910390fd5b6111cb82518251611149565b60005b825181101561125b578181815181106111e9576111e9611fe5565b602002602001015160008085848151811061120657611206611fe5565b602002602001015181526020019081526020016000206000866001600160a01b03166001600160a01b03168152602001908152602001600020600082825461124e9190612078565b90915550506001016111ce565b506001600160a01b0383166000336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb85856040516110ee929190612090565b6112cd7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610353565b611305576040517f937306010000000000000000000000000000000000000000000000000000000081523360048201526024016106f1565b565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f09150506001600160a01b0381166113bd5760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016106f1565b919050565b6000818152600183016020526040812054611409575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556104f5565b5060006104f5565b60006001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806104f557506104f582611591565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff166107045761148d816001600160a01b03166014611613565b611498836020611613565b6040516020016114a99291906120b5565b60408051601f198184030181529082905262461bcd60e51b82526106f1916004016119e3565b60008281526002602090815260408083206001600160a01b038516845290915290205460ff16156107045760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610600836001600160a01b03841661183c565b600082600001828154811061157e5761157e611fe5565b9060005260206000200154905092915050565b60006001600160e01b031982167fd9b67a260000000000000000000000000000000000000000000000000000000014806115f457506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b806104f557506301ffc9a760e01b6001600160e01b03198316146104f5565b60606000611622836002612136565b61162d906002612078565b67ffffffffffffffff81111561164557611645611a49565b6040519080825280601f01601f19166020018201604052801561166f576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106116a6576116a6611fe5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061170957611709611fe5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611745846002612136565b611750906001612078565b90505b60018111156117ed577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061179157611791611fe5565b1a60f81b8282815181106117a7576117a7611fe5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936117e681612155565b9050611753565b5083156106005760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106f1565b6000818152600183016020526040812054801561192557600061186060018361216c565b85549091506000906118749060019061216c565b90508181146118d957600086600001828154811061189457611894611fe5565b90600052602060002001549050808760000184815481106118b7576118b7611fe5565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806118ea576118ea612183565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506104f5565b60009150506104f5565b80356001600160a01b03811681146113bd57600080fd5b6000806040838503121561195957600080fd5b6119628361192f565b946020939093013593505050565b60006020828403121561198257600080fd5b81356001600160e01b03198116811461060057600080fd5b6000602082840312156119ac57600080fd5b5035919050565b60005b838110156119ce5781810151838201526020016119b6565b838111156119dd576000848401525b50505050565b6020815260008251806020840152611a028160408501602087016119b3565b601f01601f19169190910160400192915050565b600080600060608486031215611a2b57600080fd5b611a348461192f565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a8857611a88611a49565b604052919050565b600082601f830112611aa157600080fd5b8135602067ffffffffffffffff821115611abd57611abd611a49565b8160051b611acc828201611a5f565b9283528481018201928281019087851115611ae657600080fd5b83870192505b84831015611b0557823582529183019190830190611aec565b979650505050505050565b600067ffffffffffffffff821115611b2a57611b2a611a49565b50601f01601f191660200190565b600082601f830112611b4957600080fd5b8135611b5c611b5782611b10565b611a5f565b818152846020838601011115611b7157600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611ba657600080fd5b611baf8661192f565b9450611bbd6020870161192f565b9350604086013567ffffffffffffffff80821115611bda57600080fd5b611be689838a01611a90565b94506060880135915080821115611bfc57600080fd5b611c0889838a01611a90565b93506080880135915080821115611c1e57600080fd5b50611c2b88828901611b38565b9150509295509295909350565b60008060408385031215611c4b57600080fd5b82359150611c5b6020840161192f565b90509250929050565b60008083601f840112611c7657600080fd5b50813567ffffffffffffffff811115611c8e57600080fd5b6020830191508360208260051b8501011115611ca957600080fd5b9250929050565b60008060008060408587031215611cc657600080fd5b843567ffffffffffffffff80821115611cde57600080fd5b611cea88838901611c64565b90965094506020870135915080821115611d0357600080fd5b50611d1087828801611c64565b95989497509550505050565b600081518084526020808501945080840160005b83811015611d4c57815187529582019590820190600101611d30565b509495945050505050565b6020815260006106006020830184611d1c565b60008060408385031215611d7d57600080fd5b50508035926020909101359150565b8015158114610bce57600080fd5b60008060408385031215611dad57600080fd5b611db68361192f565b91506020830135611dc681611d8c565b809150509250929050565b600060208284031215611de357600080fd5b6106008261192f565b600080600080600060608688031215611e0457600080fd5b611e0d8661192f565b9450602086013567ffffffffffffffff80821115611e2a57600080fd5b611e3689838a01611c64565b90965094506040880135915080821115611e4f57600080fd5b50611e5c88828901611c64565b969995985093965092949392505050565b60008060208385031215611e8057600080fd5b823567ffffffffffffffff80821115611e9857600080fd5b818501915085601f830112611eac57600080fd5b813581811115611ebb57600080fd5b866020828501011115611ecd57600080fd5b60209290920196919550909350505050565b60008060408385031215611ef257600080fd5b611efb8361192f565b9150611c5b6020840161192f565b600080600080600060a08688031215611f2157600080fd5b611f2a8661192f565b9450611f386020870161192f565b93506040860135925060608601359150608086013567ffffffffffffffff811115611f6257600080fd5b611c2b88828901611b38565b600060208284031215611f8057600080fd5b815167ffffffffffffffff811115611f9757600080fd5b8201601f81018413611fa857600080fd5b8051611fb6611b5782611b10565b818152856020838501011115611fcb57600080fd5b611fdc8260208301602086016119b3565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561200d57600080fd5b815161060081611d8c565b634e487b7160e01b600052601160045260246000fd5b600060001982141561204257612042612018565b5060010190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000821982111561208b5761208b612018565b500190565b6040815260006120a36040830185611d1c565b8281036020840152611fdc8185611d1c565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516120ed8160178501602088016119b3565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161212a8160288401602088016119b3565b01602801949350505050565b600081600019048311821515161561215057612150612018565b500290565b60008161216457612164612018565b506000190190565b60008282101561217e5761217e612018565b500390565b634e487b7160e01b600052603160045260246000fdfea26469706673582212209170919ac96bd436114a61bd2d4417d9ceb0cfa6a7f8a88ec9126dba9262b6d164736f6c63430008090033608060405234801561001057600080fd5b50610469806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780633a171e041461007957806365a4ae5a1461008e578063eac989f81461009b575b600080fd5b61006461005f3660046102cf565b6100b0565b60405190151581526020015b60405180910390f35b61008c610087366004610318565b610149565b005b6000546100649060ff1681565b6100a36101a4565b604051610070919061038a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167feac989f800000000000000000000000000000000000000000000000000000000148061014357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60005460ff1615610186576040517f5b79f68300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61019260018383610236565b50506000805460ff1916600117905550565b6060600180546101b3906103df565b80601f01602080910402602001604051908101604052809291908181526020018280546101df906103df565b801561022c5780601f106102015761010080835404028352916020019161022c565b820191906000526020600020905b81548152906001019060200180831161020f57829003601f168201915b5050505050905090565b828054610242906103df565b90600052602060002090601f01602090048101928261026457600085556102aa565b82601f1061027d5782800160ff198235161785556102aa565b828001600101855582156102aa579182015b828111156102aa57823582559160200191906001019061028f565b506102b69291506102ba565b5090565b5b808211156102b657600081556001016102bb565b6000602082840312156102e157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461031157600080fd5b9392505050565b6000806020838503121561032b57600080fd5b823567ffffffffffffffff8082111561034357600080fd5b818501915085601f83011261035757600080fd5b81358181111561036657600080fd5b86602082850101111561037857600080fd5b60209290920196919550909350505050565b600060208083528351808285015260005b818110156103b75785810183015185820160400152820161039b565b818111156103c9576000604083870101525b50601f01601f1916929092016040019392505050565b600181811c908216806103f357607f821691505b6020821081141561042d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea26469706673582212205ddd966083b437015255054d750cf4fb49c7aedbf4df62b9811c1314fef9fd5464736f6c63430008090033