60c06040526001600e553480156200001657600080fd5b5060405162002b2038038062002b20833981016040819052620000399162000133565b8080836001600160a01b0381166200006b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200007681620000b0565b506001620000858382620002c6565b506002620000948282620002c6565b5050506001600160a01b039093166080525060a0525062000392565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200011857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200014a57600080fd5b620001558562000100565b935060208086015193506200016d6040870162000100565b60608701519093506001600160401b03808211156200018b57600080fd5b818801915088601f830112620001a057600080fd5b815181811115620001b557620001b56200011d565b604051601f8201601f19908116603f01168101908382118183101715620001e057620001e06200011d565b816040528281528b86848701011115620001f957600080fd5b600093505b828410156200021d5784840186015181850187015292850192620001fe565b600086848301015280965050505050505092959194509250565b600181811c908216806200024c57607f821691505b6020821081036200026d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c157600081815260208120601f850160051c810160208610156200029c5750805b601f850160051c820191505b81811015620002bd57828155600101620002a8565b5050505b505050565b81516001600160401b03811115620002e257620002e26200011d565b620002fa81620002f3845462000237565b8462000273565b602080601f831160018114620003325760008415620003195750858301515b600019600386901b1c1916600185901b178555620002bd565b600085815260208120601f198616915b82811015620003635788860151825594840194600190910190840162000342565b5085821015620003825787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051612761620003bf60003960006103130152600081816102ec01526106cf01526127616000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80637cd27ca6116100f9578063c87b56dd11610097578063e985e9c511610071578063e985e9c5146103d0578063f2fde38b1461040c578063ff69ea901461041f578063ffbed3501461044257600080fd5b8063c87b56dd14610387578063ce86ea661461039a578063df1e7a49146103bd57600080fd5b806395d89b41116100d357806395d89b4114610346578063a22cb4651461034e578063b88d4fde14610361578063bac79e7c1461037457600080fd5b80637cd27ca6146102e757806380afdea81461030e5780638da5cb5b1461033557600080fd5b80632f745c59116101665780635607aaf8116101405780635607aaf8146102995780636352211e146102b957806370a08231146102cc578063715018a6146102df57600080fd5b80632f745c591461026057806342842e0e146102735780634f6ccce71461028657600080fd5b8063095ea7b311610197578063095ea7b31461022657806318160ddd1461023b57806323b872dd1461024d57600080fd5b806301ffc9a7146101be57806306fdde03146101e6578063081812fc146101fb575b600080fd5b6101d16101cc366004611b93565b610455565b60405190151581526020015b60405180910390f35b6101ee610480565b6040516101dd9190611c07565b61020e610209366004611c1a565b61051c565b6040516001600160a01b0390911681526020016101dd565b610239610234366004611c4a565b610545565b005b6009545b6040519081526020016101dd565b61023961025b366004611c74565b610554565b61023f61026e366004611c4a565b6105e4565b610239610281366004611c74565b610649565b61023f610294366004611c1a565b610669565b6102ac6102a7366004611e86565b6106c2565b6040516101dd9190611fc2565b61020e6102c7366004611c1a565b61090d565b61023f6102da366004611fd5565b610918565b610239610960565b61020e7f000000000000000000000000000000000000000000000000000000000000000081565b61023f7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031661020e565b6101ee610974565b61023961035c366004611ff0565b6109e3565b61023961036f36600461202c565b6109ee565b610239610382366004611fd5565b610a05565b6101ee610395366004611c1a565b610a66565b6103ad6103a8366004612088565b610b51565b6040516101dd949392919061214b565b6102ac6103cb366004612088565b610ced565b6101d16103de3660046121a3565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61023961041a366004611fd5565b610d5d565b61043261042d366004611c1a565b610d9b565b6040516101dd94939291906121d6565b600b5461020e906001600160a01b031681565b60006001600160e01b0319821663780e9d6360e01b148061047a575061047a82610f1a565b92915050565b600b546060906001600160a01b03161561051457600b60009054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156104e7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261050f919081019061221c565b905090565b61050f610f6a565b600061052782610ffc565b506000828152600560205260409020546001600160a01b031661047a565b610550828233611035565b5050565b6001600160a01b03821661058357604051633250574960e11b8152600060048201526024015b60405180910390fd5b6000610590838333611042565b9050836001600160a01b0316816001600160a01b0316146105de576040516364283d7b60e01b81526001600160a01b038086166004830152602482018490528216604482015260640161057a565b50505050565b60006105ef83610918565b82106106205760405163295f44f760e21b81526001600160a01b03841660048201526024810183905260440161057a565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b610664838383604051806020016040528060008152506109ee565b505050565b600061067460095490565b821061069d5760405163295f44f760e21b8152600060048201526024810183905260440161057a565b600982815481106106b0576106b0612293565b90600052602060002001549050919050565b6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461073c5760405162461bcd60e51b815260206004820152600b60248201527f6f6e6c79466f756e647279000000000000000000000000000000000000000000604482015260640161057a565b835167ffffffffffffffff81111561075657610756611cb0565b60405190808252806020026020018201604052801561077f578160200160208202803683370190505b50905060005b84518110156108c557600e80549060019060006107a283856122bf565b92505081905550808383815181106107bc576107bc612293565b60200260200101818152505060405180606001604052808881526020018784815181106107eb576107eb612293565b6020026020010151815260200185848151811061080a5761080a612293565b6020908102919091018101519091526000838152600c9091526040902081518190610835908261235a565b506020820151600182015560408201516002820190610854908261235a565b50905050600d87604051610868919061241a565b90815260405160209181900382019020805460018101825560009182529190200181905584516108b2908690849081106108a4576108a4612293565b602002602001015182611117565b50806108bd81612436565b915050610785565b507f806c687b84682374bda6438e7a6be45b2eb0d9952336232c41c3b1ed046d915985828686866040516108fd95949392919061244f565b60405180910390a1949350505050565b600061047a82610ffc565b60006001600160a01b038216610944576040516322718ad960e21b81526000600482015260240161057a565b506001600160a01b031660009081526004602052604090205490565b610968611131565b610972600061115e565b565b600b546060906001600160a01b0316156109db57600b60009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156104e7573d6000803e3d6000fd5b61050f6111ae565b6105503383836111bd565b6109f9848484610554565b6105de8484848461125c565b610a0d611131565b600b80546001600160a01b0319166001600160a01b038316908117909155604080519182523360208301527f0a851b8ed461c8683742ac258e56f3134d197c0edab734ae305ac1de328f8a5a910160405180910390a150565b600b546060906001600160a01b031615610aeb57600b5460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401600060405180830381865afa158015610ac3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047a919081019061221c565b6000610b26610af8610480565b610b0185611385565b604051602001610b129291906124bc565b604051602081830303815290604052611425565b905080604051602001610b399190612614565b6040516020818303038152906040529150505b919050565b606080606080610b6085610ced565b9350835167ffffffffffffffff811115610b7c57610b7c611cb0565b604051908082528060200260200182016040528015610ba5578160200160208202803683370190505b509250835167ffffffffffffffff811115610bc257610bc2611cb0565b604051908082528060200260200182016040528015610bf557816020015b6060815260200190600190039081610be05790505b509150835167ffffffffffffffff811115610c1257610c12611cb0565b604051908082528060200260200182016040528015610c3b578160200160208202803683370190505b50905060005b8451811015610ce557610c6c858281518110610c5f57610c5f612293565b6020026020010151610d9b565b90919250868481518110610c8257610c82612293565b60200260200101868581518110610c9b57610c9b612293565b60200260200101868681518110610cb457610cb4612293565b6001600160a01b03909416602094850291909101909301929092529190525280610cdd81612436565b915050610c41565b509193509193565b6060600d82604051610cff919061241a565b9081526040805191829003602090810183208054808302850183019093528284529190830182828015610d5157602002820191906000526020600020905b815481526020019060010190808311610d3d575b50505050509050919050565b610d65611131565b6001600160a01b038116610d8f57604051631e4fbdf760e01b81526000600482015260240161057a565b610d988161115e565b50565b606060006060600080600c6000878152602001908152602001600020604051806060016040529081600082018054610dd2906122d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfe906122d2565b8015610e4b5780601f10610e2057610100808354040283529160200191610e4b565b820191906000526020600020905b815481529060010190602001808311610e2e57829003601f168201915b5050505050815260200160018201548152602001600282018054610e6e906122d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9a906122d2565b8015610ee75780601f10610ebc57610100808354040283529160200191610ee7565b820191906000526020600020905b815481529060010190602001808311610eca57829003601f168201915b5050505050815250509050806000015194508060200151935080604001519250610f108661090d565b9150509193509193565b60006001600160e01b031982166380ac58cd60e01b1480610f4b57506001600160e01b03198216635b5e139f60e01b145b8061047a57506301ffc9a760e01b6001600160e01b031983161461047a565b606060018054610f79906122d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa5906122d2565b8015610ff25780601f10610fc757610100808354040283529160200191610ff2565b820191906000526020600020905b815481529060010190602001808311610fd557829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b03168061047a57604051637e27328960e01b81526004810184905260240161057a565b610664838383600161158a565b6000806110508585856116af565b90506001600160a01b0381166110ad576110a884600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b6110d0565b846001600160a01b0316816001600160a01b0316146110d0576110d081856117a8565b6001600160a01b0385166110ec576110e784611839565b61110f565b846001600160a01b0316816001600160a01b03161461110f5761110f85856118e8565b949350505050565b610550828260405180602001604052806000815250611938565b6000546001600160a01b031633146109725760405163118cdaa760e01b815233600482015260240161057a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060028054610f79906122d2565b6001600160a01b0382166111ef57604051630b61174360e31b81526001600160a01b038316600482015260240161057a565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156105de57604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061129e903390889087908790600401612659565b6020604051808303816000875af19250505080156112d9575060408051601f3d908101601f191682019092526112d691810190612695565b60015b611342573d808015611307576040519150601f19603f3d011682016040523d82523d6000602084013e61130c565b606091505b50805160000361133a57604051633250574960e11b81526001600160a01b038516600482015260240161057a565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461137e57604051633250574960e11b81526001600160a01b038516600482015260240161057a565b5050505050565b606060006113928361194f565b600101905060008167ffffffffffffffff8111156113b2576113b2611cb0565b6040519080825280601f01601f1916602001820160405280156113dc576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846113e657509392505050565b6060815160000361144457505060408051602081019091526000815290565b6000604051806060016040528060408152602001612715604091399050600060038451600261147391906122bf565b61147d91906126b2565b6114889060046126d4565b905060006114978260206122bf565b67ffffffffffffffff8111156114af576114af611cb0565b6040519080825280601f01601f1916602001820160405280156114d9576020820181803683370190505b509050818152600183018586518101602084015b81831015611545576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f81168501518253506001016114ed565b60038951066001811461155f57600281146115705761157c565b613d3d60f01b60011983015261157c565b603d60f81b6000198301525b509398975050505050505050565b808061159e57506001600160a01b03821615155b1561167f5760006115ae84610ffc565b90506001600160a01b038316158015906115da5750826001600160a01b0316816001600160a01b031614155b801561160c57506001600160a01b0380821660009081526006602090815260408083209387168352929052205460ff16155b156116355760405163a9fbf51f60e01b81526001600160a01b038416600482015260240161057a565b811561167d5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260056020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600360205260408120546001600160a01b03908116908316156116dc576116dc818486611a31565b6001600160a01b0381161561171a576116f960008560008061158a565b6001600160a01b038116600090815260046020526040902080546000190190555b6001600160a01b03851615611749576001600160a01b0385166000908152600460205260409020805460010190555b60008481526003602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b60006117b383610918565b600083815260086020526040902054909150808214611806576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b60095460009061184b906001906126eb565b6000838152600a60205260408120546009805493945090928490811061187357611873612293565b90600052602060002001549050806009838154811061189457611894612293565b6000918252602080832090910192909255828152600a909152604080822084905585825281205560098054806118cc576118cc6126fe565b6001900381819060005260206000200160009055905550505050565b600060016118f584610918565b6118ff91906126eb565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6119428383611a95565b610664600084848461125c565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611998577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106119c4576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106119e257662386f26fc10000830492506010015b6305f5e10083106119fa576305f5e100830492506008015b6127108310611a0e57612710830492506004015b60648310611a20576064830492506002015b600a831061047a5760010192915050565b611a3c838383611afa565b610664576001600160a01b038316611a6a57604051637e27328960e01b81526004810182905260240161057a565b60405163177e802f60e01b81526001600160a01b03831660048201526024810182905260440161057a565b6001600160a01b038216611abf57604051633250574960e11b81526000600482015260240161057a565b6000611acd83836000611042565b90506001600160a01b03811615610664576040516339e3563760e11b81526000600482015260240161057a565b60006001600160a01b0383161580159061110f5750826001600160a01b0316846001600160a01b03161480611b5457506001600160a01b0380851660009081526006602090815260408083209387168352929052205460ff165b8061110f5750506000908152600560205260409020546001600160a01b03908116911614919050565b6001600160e01b031981168114610d9857600080fd5b600060208284031215611ba557600080fd5b8135611bb081611b7d565b9392505050565b60005b83811015611bd2578181015183820152602001611bba565b50506000910152565b60008151808452611bf3816020860160208601611bb7565b601f01601f19169290920160200192915050565b602081526000611bb06020830184611bdb565b600060208284031215611c2c57600080fd5b5035919050565b80356001600160a01b0381168114610b4c57600080fd5b60008060408385031215611c5d57600080fd5b611c6683611c33565b946020939093013593505050565b600080600060608486031215611c8957600080fd5b611c9284611c33565b9250611ca060208501611c33565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cef57611cef611cb0565b604052919050565b600067ffffffffffffffff821115611d1157611d11611cb0565b50601f01601f191660200190565b600082601f830112611d3057600080fd5b8135611d43611d3e82611cf7565b611cc6565b818152846020838601011115611d5857600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff821115611d8f57611d8f611cb0565b5060051b60200190565b600082601f830112611daa57600080fd5b81356020611dba611d3e83611d75565b82815260059290921b84018101918181019086841115611dd957600080fd5b8286015b84811015611dfb57611dee81611c33565b8352918301918301611ddd565b509695505050505050565b600082601f830112611e1757600080fd5b81356020611e27611d3e83611d75565b82815260059290921b84018101918181019086841115611e4657600080fd5b8286015b84811015611dfb57803567ffffffffffffffff811115611e6a5760008081fd5b611e788986838b0101611d1f565b845250918301918301611e4a565b60008060008060808587031215611e9c57600080fd5b843567ffffffffffffffff80821115611eb457600080fd5b611ec088838901611d1f565b9550602091508187013581811115611ed757600080fd5b8701601f81018913611ee857600080fd5b8035611ef6611d3e82611d75565b81815260059190911b8201840190848101908b831115611f1557600080fd5b928501925b82841015611f3357833582529285019290850190611f1a565b97505050506040870135915080821115611f4c57600080fd5b611f5888838901611d99565b93506060870135915080821115611f6e57600080fd5b50611f7b87828801611e06565b91505092959194509250565b600081518084526020808501945080840160005b83811015611fb757815187529582019590820190600101611f9b565b509495945050505050565b602081526000611bb06020830184611f87565b600060208284031215611fe757600080fd5b611bb082611c33565b6000806040838503121561200357600080fd5b61200c83611c33565b91506020830135801515811461202157600080fd5b809150509250929050565b6000806000806080858703121561204257600080fd5b61204b85611c33565b935061205960208601611c33565b925060408501359150606085013567ffffffffffffffff81111561207c57600080fd5b611f7b87828801611d1f565b60006020828403121561209a57600080fd5b813567ffffffffffffffff8111156120b157600080fd5b61110f84828501611d1f565b600081518084526020808501808196508360051b8101915082860160005b858110156121055782840389526120f3848351611bdb565b988501989350908401906001016120db565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611fb75781516001600160a01b031687529582019590820190600101612126565b60808152600061215e6080830187611f87565b82810360208401526121708187611f87565b9050828103604084015261218481866120bd565b905082810360608401526121988185612112565b979650505050505050565b600080604083850312156121b657600080fd5b6121bf83611c33565b91506121cd60208401611c33565b90509250929050565b6080815260006121e96080830187611bdb565b85602084015282810360408401526122018186611bdb565b9150506001600160a01b038316606083015295945050505050565b60006020828403121561222e57600080fd5b815167ffffffffffffffff81111561224557600080fd5b8201601f8101841361225657600080fd5b8051612264611d3e82611cf7565b81815285602083850101111561227957600080fd5b61228a826020830160208601611bb7565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561047a5761047a6122a9565b600181811c908216806122e657607f821691505b60208210810361230657634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561066457600081815260208120601f850160051c810160208610156123335750805b601f850160051c820191505b818110156123525782815560010161233f565b505050505050565b815167ffffffffffffffff81111561237457612374611cb0565b6123888161238284546122d2565b8461230c565b602080601f8311600181146123bd57600084156123a55750858301515b600019600386901b1c1916600185901b178555612352565b600085815260208120601f198616915b828110156123ec578886015182559484019460019091019084016123cd565b508582101561240a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000825161242c818460208701611bb7565b9190910192915050565b600060018201612448576124486122a9565b5060010190565b60a08152600061246260a0830188611bdb565b82810360208401526124748188611f87565b905082810360408401526124888187611f87565b9050828103606084015261249c8186612112565b905082810360808401526124b081856120bd565b98975050505050505050565b7f7b226e616d65223a2022000000000000000000000000000000000000000000008152600083516124f481600a850160208801611bb7565b600160fd1b600a91840191820152835161251581600b840160208801611bb7565b7f222c20226465736372697074696f6e223a202200000000000000000000000000600b92909101918201527f496620796f75206e65656420746f20637573746f6d697a652074686520646973601e8201527f706c617920636f6e74656e742c20706c65617365207573652074686520736574603e8201527f5075626c69634e4654566965772066756e6374696f6e20696e2074686520636f605e8201527f6e747261637420746f20736574206120637573746f6d20646973706c61792063607e8201527f6f6e74726163742e000000000000000000000000000000000000000000000000609e82015261227d60f01b60a682015260a801949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161264c81601d850160208701611bb7565b91909101601d0192915050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261268b6080830184611bdb565b9695505050505050565b6000602082840312156126a757600080fd5b8151611bb081611b7d565b6000826126cf57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761047a5761047a6122a9565b8181038181111561047a5761047a6122a9565b634e487b7160e01b600052603160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa164736f6c6343000814000a0000000000000000000000001a3894f5cc9ea0879b9b505620a26b1e4af895fc0000000000000000000000000000000000000000000000000000000000000009000000000000000000000000a6749bc6f1e61e2353d33efe8f16ae5c809a97f50000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c687970654d656d65205461780000000000000000000000000000000000000000